<?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>90780</bug_id>
          
          <creation_ts>2012-07-09 05:27:10 -0700</creation_ts>
          <short_desc>Move WorkQueue to WTF</short_desc>
          <delta_ts>2012-08-09 16:52:41 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Template Framework</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>INVALID</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>90375</blocked>
    
    <blocked>90869</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kwang Yul Seo">skyul</reporter>
          <assigned_to name="Kwang Yul Seo">skyul</assigned_to>
          <cc>cmarcelo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>levin</cc>
    
    <cc>levin+threading</cc>
    
    <cc>menard</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zoltan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>664815</commentid>
    <comment_count>0</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-07-09 05:27:10 -0700</bug_when>
    <thetext>Currently, WorkQueue is in WebKit2. By moving WorkQueue and PlatformProcessIdentifier to WTF, WebCore code can use it. 

This patch is required for parallel image decoders because WorkQueue is used to make image decoding off the main thread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664829</commentid>
    <comment_count>1</comment_count>
      <attachid>151238</attachid>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-07-09 05:44:00 -0700</bug_when>
    <thetext>Created attachment 151238
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664831</commentid>
    <comment_count>2</comment_count>
      <attachid>151238</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-07-09 05:49:37 -0700</bug_when>
    <thetext>Comment on attachment 151238
Patch

Attachment 151238 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/13157819</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664832</commentid>
    <comment_count>3</comment_count>
      <attachid>151238</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-07-09 05:49:54 -0700</bug_when>
    <thetext>Comment on attachment 151238
Patch

Attachment 151238 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/13162259</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664835</commentid>
    <comment_count>4</comment_count>
      <attachid>151240</attachid>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-07-09 05:58:18 -0700</bug_when>
    <thetext>Created attachment 151240
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664837</commentid>
    <comment_count>5</comment_count>
      <attachid>151241</attachid>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-07-09 06:00:04 -0700</bug_when>
    <thetext>Created attachment 151241
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664838</commentid>
    <comment_count>6</comment_count>
      <attachid>151242</attachid>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-07-09 06:03:28 -0700</bug_when>
    <thetext>Created attachment 151242
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664842</commentid>
    <comment_count>7</comment_count>
      <attachid>151242</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-07-09 06:24:38 -0700</bug_when>
    <thetext>Comment on attachment 151242
Patch

Attachment 151242 did not pass win-ews (win):
Output: http://queues.webkit.org/results/13157829</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664854</commentid>
    <comment_count>8</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-07-09 07:10:58 -0700</bug_when>
    <thetext>I will fix the build soon ;(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664903</commentid>
    <comment_count>9</comment_count>
      <attachid>151242</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-07-09 09:00:27 -0700</bug_when>
    <thetext>Comment on attachment 151242
Patch

Attachment 151242 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/13164293</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666469</commentid>
    <comment_count>10</comment_count>
      <attachid>151627</attachid>
    <who name="Kwonjin Jeong">gram</who>
    <bug_when>2012-07-11 00:51:09 -0700</bug_when>
    <thetext>Created attachment 151627
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666475</commentid>
    <comment_count>11</comment_count>
    <who name="Zoltan Horvath">zoltan</who>
    <bug_when>2012-07-11 00:56:06 -0700</bug_when>
    <thetext>It&apos;s another task, but later it would be nice to merge ParallelJobs (http://trac.webkit.org/browser/trunk/Source/WTF/wtf/ParallelJobs.h) and the moved WorkQueue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666478</commentid>
    <comment_count>12</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-07-11 00:57:47 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Created an attachment (id=151627) [details]
&gt; Patch

Thanks for build fix!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666485</commentid>
    <comment_count>13</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-07-11 01:05:04 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; It&apos;s another task, but later it would be nice to merge ParallelJobs (http://trac.webkit.org/browser/trunk/Source/WTF/wtf/ParallelJobs.h) and the moved WorkQueue.

Isn&apos;t ParallelJobs for data parallelism? How can they be merged?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666498</commentid>
    <comment_count>14</comment_count>
      <attachid>151627</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-07-11 01:17:17 -0700</bug_when>
    <thetext>Comment on attachment 151627
Patch

Attachment 151627 did not pass win-ews (win):
Output: http://queues.webkit.org/results/13166727</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666509</commentid>
    <comment_count>15</comment_count>
      <attachid>151643</attachid>
    <who name="Kwonjin Jeong">gram</who>
    <bug_when>2012-07-11 01:32:41 -0700</bug_when>
    <thetext>Created attachment 151643
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666549</commentid>
    <comment_count>16</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-07-11 02:18:17 -0700</bug_when>
    <thetext>I think we can improve WorkQueue later to satisfy the requirements of ThreadCommunication ( https://trac.webkit.org/wiki/ThreadCommunication ).

CC&apos;ing Levin for further discussion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>678710</commentid>
    <comment_count>17</comment_count>
      <attachid>154508</attachid>
    <who name="Kwonjin Jeong">gram</who>
    <bug_when>2012-07-25 18:25:22 -0700</bug_when>
    <thetext>Created attachment 154508
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679758</commentid>
    <comment_count>18</comment_count>
      <attachid>154508</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-07-26 14:21:19 -0700</bug_when>
    <thetext>Comment on attachment 154508
Patch

Attachment 154508 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/13368055</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>688817</commentid>
    <comment_count>19</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-08-06 22:22:02 -0700</bug_when>
    <thetext>We are working on 90869 instead. Close this bug as WONTFIX.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151238</attachid>
            <date>2012-07-09 05:44:00 -0700</date>
            <delta_ts>2012-07-09 05:58:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90780-20120709214341.patch</filename>
            <type>text/plain</type>
            <size>128107</size>
            <attacher name="Kwang Yul Seo">skyul</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyMDk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGZlNDBlYjkzNzY4NDhlYTgyZTgzYjEw
ZjllNzgyMGM1MDllMjdhMDMuLjYxZWNiMzBiMzY3Y2E2MzgzNmYyNzljYTg2MTVkNTlkMGM0NTU2
OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTI3IEBACisyMDEyLTA3LTA5ICBLd2FuZyBZdWwgU2VvICA8c2t5
dWxAY29tcGFueTEwMC5uZXQ+CisKKyAgICAgICAgTW92ZSBXb3JrUXVldWUgdG8gV1RGCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDc4MAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEN1cnJlbnRseSwgV29y
a1F1ZXVlIGlzIGluIFdlYktpdDIuIEJ5IG1vdmluZyBXb3JrUXVldWUgYW5kCisgICAgICAgIFBs
YXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIgdG8gV1RGLCBXZWJDb3JlIGNvZGUgY2FuIHVzZSBpdC4K
KworICAgICAgICBUaGlzIHBhdGNoIGlzIHJlcXVpcmVkIGZvciBwYXJhbGxlbCBpbWFnZSBkZWNv
ZGVycyBiZWNhdXNlCisgICAgICAgIFdvcmtRdWV1ZSBpcyB1c2VkIHRvIG1ha2UgaW1hZ2UgZGVj
b2Rpbmcgb2ZmIHRoZSBtYWluIHRocmVhZC4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3Qu
YW06CisgICAgICAgICogV1RGLnBybzoKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiB3dGYvQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogd3RmL1Bs
YXRmb3JtRWZsLmNtYWtlOgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVy
Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9QbGF0Zm9ybVByb2Nlc3NJ
ZGVudGlmaWVyLmguCisgICAgICAgIChXVEYpOgorICAgICAgICAqIHd0Zi9Xb3JrUXVldWUuY3Bw
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvUGxhdGZvcm0vV29ya1F1ZXVlLmNwcC4KKyAg
ICAgICAgKFdURik6CisgICAgICAgIChXVEY6OldvcmtRdWV1ZTo6V29ya1F1ZXVlKToKKyAgICAg
ICAgKFdURjo6V29ya1F1ZXVlOjp+V29ya1F1ZXVlKToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVl
OjppbnZhbGlkYXRlKToKKyAgICAgICAgKiB3dGYvV29ya1F1ZXVlLmg6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrUXVldWUuaC4KKyAgICAgICAgKFdURik6CisgICAg
ICAgIChXb3JrUXVldWUpOgorICAgICAgICAoV29ya0l0ZW1XaW4pOgorICAgICAgICAoV1RGOjpX
b3JrUXVldWU6OldvcmtJdGVtV2luOjpmdW5jdGlvbik6CisgICAgICAgIChXVEY6OldvcmtRdWV1
ZTo6V29ya0l0ZW1XaW46OnF1ZXVlKToKKyAgICAgICAgKEhhbmRsZVdvcmtJdGVtKToKKyAgICAg
ICAgKFdURjo6V29ya1F1ZXVlOjpIYW5kbGVXb3JrSXRlbTo6c2V0V2FpdEhhbmRsZSk6CisgICAg
ICAgIChXVEY6OldvcmtRdWV1ZTo6SGFuZGxlV29ya0l0ZW06OndhaXRIYW5kbGUpOgorICAgICAg
ICAqIHd0Zi9lZmwvV29ya1F1ZXVlRWZsLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtL2VmbC9Xb3JrUXVldWVFZmwuY3BwLgorICAgICAgICAoVGltZXJXb3JrSXRlbSk6
CisgICAgICAgIChUaW1lcldvcmtJdGVtOjpUaW1lcldvcmtJdGVtKToKKyAgICAgICAgKFRpbWVy
V29ya0l0ZW06On5UaW1lcldvcmtJdGVtKToKKyAgICAgICAgKFRpbWVyV29ya0l0ZW06OmZ1bmN0
aW9uKToKKyAgICAgICAgKFRpbWVyV29ya0l0ZW06OnF1ZXVlKToKKyAgICAgICAgKFRpbWVyV29y
a0l0ZW06OnRpbWVySUQpOgorICAgICAgICAoV29ya1F1ZXVlOjpwbGF0Zm9ybUluaXRpYWxpemUp
OgorICAgICAgICAoV29ya1F1ZXVlOjpwbGF0Zm9ybUludmFsaWRhdGUpOgorICAgICAgICAoV29y
a1F1ZXVlOjpwZXJmb3JtV29yayk6CisgICAgICAgIChXb3JrUXVldWU6OnBlcmZvcm1GaWxlRGVz
Y3JpcHRvcldvcmspOgorICAgICAgICAoV29ya1F1ZXVlOjpzZW5kTWVzc2FnZVRvVGhyZWFkKToK
KyAgICAgICAgKFdvcmtRdWV1ZTo6d29ya1F1ZXVlVGhyZWFkKToKKyAgICAgICAgKFdvcmtRdWV1
ZTo6cmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIpOgorICAgICAgICAoV29ya1F1ZXVlOjp1bnJl
Z2lzdGVyU29ja2V0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6ZGlzcGF0Y2gp
OgorICAgICAgICAoV29ya1F1ZXVlOjp0aW1lckZpcmVkKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6
ZGlzcGF0Y2hBZnRlckRlbGF5KToKKyAgICAgICAgKiB3dGYvZ3RrL1dvcmtRdWV1ZUd0ay5jcHA6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9ndGsvV29ya1F1ZXVlR3RrLmNw
cC4KKyAgICAgICAgKFdvcmtRdWV1ZTo6RXZlbnRTb3VyY2UpOgorICAgICAgICAoV29ya1F1ZXVl
OjpFdmVudFNvdXJjZTo6RXZlbnRTb3VyY2UpOgorICAgICAgICAoV29ya1F1ZXVlOjpFdmVudFNv
dXJjZTo6Y2FuY2VsKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OmV4ZWN1dGVF
dmVudFNvdXJjZSk6CisgICAgICAgIChXb3JrUXVldWU6OkV2ZW50U291cmNlOjpwZXJmb3JtV29y
a09uY2UpOgorICAgICAgICAoV29ya1F1ZXVlOjpFdmVudFNvdXJjZTo6cGVyZm9ybVdvcmspOgor
ICAgICAgICAoV29ya1F1ZXVlOjpFdmVudFNvdXJjZTo6cGVyZm9ybVdvcmtPblRlcm1pbmF0aW9u
KToKKyAgICAgICAgKFdvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OmRlbGV0ZUV2ZW50U291cmNlKToK
KyAgICAgICAgKFdvcmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXplKToKKyAgICAgICAgKFdvcmtR
dWV1ZTo6cGxhdGZvcm1JbnZhbGlkYXRlKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6c3RhcnRXb3Jr
UXVldWVUaHJlYWQpOgorICAgICAgICAoV29ya1F1ZXVlOjp3b3JrUXVldWVUaHJlYWRCb2R5KToK
KyAgICAgICAgKFdvcmtRdWV1ZTo6cmVnaXN0ZXJFdmVudFNvdXJjZUhhbmRsZXIpOgorICAgICAg
ICAoV29ya1F1ZXVlOjp1bnJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKToKKyAgICAgICAgKFdv
cmtRdWV1ZTo6ZGlzcGF0Y2hPblNvdXJjZSk6CisgICAgICAgIChXb3JrUXVldWU6OmRpc3BhdGNo
KToKKyAgICAgICAgKFdvcmtRdWV1ZTo6ZGlzcGF0Y2hBZnRlckRlbGF5KToKKyAgICAgICAgKFdv
cmtRdWV1ZTo6ZGlzcGF0Y2hPblRlcm1pbmF0aW9uKToKKyAgICAgICAgKiB3dGYvbWFjL1dvcmtR
dWV1ZU1hYy5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9tYWMvV29y
a1F1ZXVlTWFjLmNwcC4KKyAgICAgICAgKFdvcmtRdWV1ZTo6ZXhlY3V0ZUZ1bmN0aW9uKToKKyAg
ICAgICAgKFdvcmtRdWV1ZTo6ZGlzcGF0Y2gpOgorICAgICAgICAoV29ya1F1ZXVlOjpkaXNwYXRj
aEFmdGVyRGVsYXkpOgorICAgICAgICAoV29ya1F1ZXVlOjpFdmVudFNvdXJjZSk6CisgICAgICAg
IChXb3JrUXVldWU6OkV2ZW50U291cmNlOjpFdmVudFNvdXJjZSk6CisgICAgICAgIChXb3JrUXVl
dWU6OkV2ZW50U291cmNlOjpkaXNwYXRjaFNvdXJjZSk6CisgICAgICAgIChXb3JrUXVldWU6OkV2
ZW50U291cmNlOjpldmVudEhhbmRsZXIpOgorICAgICAgICAoV29ya1F1ZXVlOjpFdmVudFNvdXJj
ZTo6Y2FuY2VsSGFuZGxlcik6CisgICAgICAgIChXb3JrUXVldWU6OkV2ZW50U291cmNlOjpmaW5h
bGl6ZUhhbmRsZXIpOgorICAgICAgICAoV29ya1F1ZXVlOjpyZWdpc3Rlck1hY2hQb3J0RXZlbnRI
YW5kbGVyKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6dW5yZWdpc3Rlck1hY2hQb3J0RXZlbnRIYW5k
bGVyKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXplKToKKyAgICAgICAg
KFdvcmtRdWV1ZTo6cGxhdGZvcm1JbnZhbGlkYXRlKToKKyAgICAgICAgKiB3dGYvcXQvV29ya1F1
ZXVlUXQuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvUGxhdGZvcm0vcXQvV29ya1F1
ZXVlUXQuY3BwLgorICAgICAgICAoV1RGKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6V29ya0l0ZW1R
dCk6CisgICAgICAgIChXVEY6OldvcmtRdWV1ZTo6V29ya0l0ZW1RdDo6V29ya0l0ZW1RdCk6Cisg
ICAgICAgIChXVEY6OldvcmtRdWV1ZTo6V29ya0l0ZW1RdDo6fldvcmtJdGVtUXQpOgorICAgICAg
ICAoV1RGOjpXb3JrUXVldWU6OldvcmtJdGVtUXQ6OmV4ZWN1dGUpOgorICAgICAgICAoV1RGOjpX
b3JrUXVldWU6OldvcmtJdGVtUXQ6OmV4ZWN1dGVBbmREZWxldGUpOgorICAgICAgICAoV1RGOjpX
b3JrUXVldWU6OldvcmtJdGVtUXQ6OnRpbWVyRXZlbnQpOgorICAgICAgICAoV1RGOjpXb3JrUXVl
dWU6OnJlZ2lzdGVyU29ja2V0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVl
OjpwbGF0Zm9ybUluaXRpYWxpemUpOgorICAgICAgICAoV1RGOjpXb3JrUXVldWU6OnBsYXRmb3Jt
SW52YWxpZGF0ZSk6CisgICAgICAgIChXVEY6OldvcmtRdWV1ZTo6ZGlzcGF0Y2gpOgorICAgICAg
ICAoV1RGOjpXb3JrUXVldWU6OmRpc3BhdGNoQWZ0ZXJEZWxheSk6CisgICAgICAgIChXVEY6Oldv
cmtRdWV1ZTo6ZGlzcGF0Y2hPblRlcm1pbmF0aW9uKToKKyAgICAgICAgKiB3dGYvd2luL1dvcmtR
dWV1ZVdpbi5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS93aW4vV29y
a1F1ZXVlV2luLmNwcC4KKyAgICAgICAgKFdvcmtRdWV1ZTo6V29ya0l0ZW1XaW46OldvcmtJdGVt
V2luKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6V29ya0l0ZW1XaW46OmNyZWF0ZSk6CisgICAgICAg
IChXb3JrUXVldWU6OldvcmtJdGVtV2luOjp+V29ya0l0ZW1XaW4pOgorICAgICAgICAoV29ya1F1
ZXVlOjpIYW5kbGVXb3JrSXRlbTo6SGFuZGxlV29ya0l0ZW0pOgorICAgICAgICAoV29ya1F1ZXVl
OjpIYW5kbGVXb3JrSXRlbTo6Y3JlYXRlQnlBZG9wdGluZ0hhbmRsZSk6CisgICAgICAgIChXb3Jr
UXVldWU6OkhhbmRsZVdvcmtJdGVtOjp+SGFuZGxlV29ya0l0ZW0pOgorICAgICAgICAoV29ya1F1
ZXVlOjpoYW5kbGVDYWxsYmFjayk6CisgICAgICAgIChXb3JrUXVldWU6OnJlZ2lzdGVySGFuZGxl
KToKKyAgICAgICAgKFdvcmtRdWV1ZTo6dW5yZWdpc3RlckFuZENsb3NlSGFuZGxlKToKKyAgICAg
ICAgKFdvcmtRdWV1ZTo6d29ya1RocmVhZENhbGxiYWNrKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6
cGVyZm9ybVdvcmtPblJlZ2lzdGVyZWRXb3JrVGhyZWFkKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6
cGxhdGZvcm1Jbml0aWFsaXplKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6dHJ5UmVnaXN0ZXJBc1dv
cmtUaHJlYWQpOgorICAgICAgICAoV29ya1F1ZXVlOjp1bnJlZ2lzdGVyQXNXb3JrVGhyZWFkKToK
KyAgICAgICAgKFdvcmtRdWV1ZTo6cGxhdGZvcm1JbnZhbGlkYXRlKToKKyAgICAgICAgKFdvcmtR
dWV1ZTo6ZGlzcGF0Y2gpOgorICAgICAgICAoVGltZXJDb250ZXh0OjpjcmVhdGUpOgorICAgICAg
ICAoVGltZXJDb250ZXh0KToKKyAgICAgICAgKFRpbWVyQ29udGV4dDo6VGltZXJDb250ZXh0KToK
KyAgICAgICAgKFdvcmtRdWV1ZTo6dGltZXJDYWxsYmFjayk6CisgICAgICAgIChXb3JrUXVldWU6
OmRpc3BhdGNoQWZ0ZXJEZWxheSk6CisgICAgICAgIChXb3JrUXVldWU6OnVucmVnaXN0ZXJXYWl0
QW5kRGVzdHJveUl0ZW1Tb29uKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6dW5yZWdpc3RlcldhaXRB
bmREZXN0cm95SXRlbUNhbGxiYWNrKToKKwogMjAxMi0wNy0wOCAgTGFzemxvIEdvbWJvcyAgPGxh
c3psby4xLmdvbWJvc0Bub2tpYS5jb20+CiAKICAgICAgICAgSW50cm9kdWNlIGEgYnVpbGQgZmxh
ZyBmb3IgbG93IHF1YWxpdHkgSlBFRyBpbWFnZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCAwOGUwZmU5YWY3Yjhl
MGRjNTE0YmIyNWE2NGQ4ZjY0YTlkNWYxOWFlLi42NGMwMzg4ZDZlMjFkNjhjZTk2OWRkNDdmNmU2
YjZkNzI1YzljMzdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzEgQEAKKzIwMTItMDctMDkgIEt3
YW5nIFl1bCBTZW8gIDxza3l1bEBjb21wYW55MTAwLm5ldD4KKworICAgICAgICBNb3ZlIFdvcmtR
dWV1ZSB0byBXVEYKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTkwNzgwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQ3VycmVudGx5LCBXb3JrUXVldWUgaXMgaW4gV2ViS2l0Mi4gQnkgbW92aW5nIFdvcmtRdWV1
ZSBhbmQKKyAgICAgICAgUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllciB0byBXVEYsIFdlYkNvcmUg
Y29kZSBjYW4gdXNlIGl0LgorCisgICAgICAgIFRoaXMgcGF0Y2ggaXMgcmVxdWlyZWQgZm9yIHBh
cmFsbGVsIGltYWdlIGRlY29kZXJzIGJlY2F1c2UKKyAgICAgICAgV29ya1F1ZXVlIGlzIHVzZWQg
dG8gbWFrZSBpbWFnZSBkZWNvZGluZyBvZmYgdGhlIG1haW4gdGhyZWFkLgorCisgICAgICAgICog
Q01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAg
KiBQbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uaDoKKyAgICAgICAgKENvbm5lY3Rpb24pOgor
ICAgICAgICAqIFBsYXRmb3JtL0NvcmVJUEMvdW5peC9Db25uZWN0aW9uVW5peC5jcHA6CisgICAg
ICAgIChDb3JlSVBDOjpDb25uZWN0aW9uOjpzZXRTaG91bGRDbG9zZUNvbm5lY3Rpb25PblByb2Nl
c3NUZXJtaW5hdGlvbik6CisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgICog
VGFyZ2V0LnByaToKKyAgICAgICAgKiBVSVByb2Nlc3MvTGF1bmNoZXIvUHJvY2Vzc0xhdW5jaGVy
LmNwcDoKKyAgICAgICAgKiBVSVByb2Nlc3MvTGF1bmNoZXIvUHJvY2Vzc0xhdW5jaGVyLmg6Cisg
ICAgICAgICogVUlQcm9jZXNzL0xhdW5jaGVyL1RocmVhZExhdW5jaGVyLmg6CisgICAgICAgICog
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNz
UHJveHkuaDoKKyAgICAgICAgKiBXZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisK
IDIwMTItMDctMDYgIENocmlzdG9waGUgRHVtZXogIDxjaHJpc3RvcGhlLmR1bWV6QGludGVsLmNv
bT4KIAogICAgICAgICBbV0syXSBBZGQgc3VwcG9ydCBmb3IgTmV0d29yayBJbmZvcm1hdGlvbiBB
UEkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9X
VEYvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCBjNWY0OGE2Y2U1NTlhMjRjYzIwYjcwNzU4ZGY4
YmM0YTg0ZGM5ZWVkLi5jZjJhMDhlN2M5OWUxNjJmZjlhZjFmZjcxN2Q5YzhlYzhlZGQwNjJhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dU
Ri9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC0xNjQsNiArMTY0LDggQEAgd3RmX3NvdXJjZXMgKz0g
XAogICAgIFNvdXJjZS9XVEYvd3RmL1ZhbHVlQ2hlY2suaCBcCiAgICAgU291cmNlL1dURi93dGYv
VmVjdG9yLmggXAogICAgIFNvdXJjZS9XVEYvd3RmL1ZlY3RvclRyYWl0cy5oIFwKKyAgICBTb3Vy
Y2UvV1RGL3d0Zi9Xb3JrUXVldWUuY3BwIFwKKyAgICBTb3VyY2UvV1RGL3d0Zi9Xb3JrUXVldWUu
aCBcCiAgICAgU291cmNlL1dURi93dGYvV1RGVGhyZWFkRGF0YS5jcHAgXAogICAgIFNvdXJjZS9X
VEYvd3RmL1dURlRocmVhZERhdGEuaCBcCiAgICAgU291cmNlL1dURi93dGYvZHRvYS5jcHAgXApA
QCAtMTk0LDYgKzE5Niw3IEBAIHd0Zl9zb3VyY2VzICs9IFwKICAgICBTb3VyY2UvV1RGL3d0Zi9n
b2JqZWN0L0dsaWJVdGlsaXRpZXMuY3BwIFwKICAgICBTb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0ds
aWJVdGlsaXRpZXMuaCBcCiAgICAgU291cmNlL1dURi93dGYvZ3RrL01haW5UaHJlYWRHdGsuY3Bw
IFwKKyAgICBTb3VyY2UvV1RGL3d0Zi9ndGsvV29ya1F1ZXVlR3RrLmNwcCBcCiAgICAgU291cmNl
L1dURi93dGYvdGV4dC9BU0NJSUZhc3RQYXRoLmggXAogICAgIFNvdXJjZS9XVEYvd3RmL3RleHQv
QXRvbWljU3RyaW5nLmNwcCBcCiAgICAgU291cmNlL1dURi93dGYvdGV4dC9BdG9taWNTdHJpbmcu
aCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL1dURi5wcm8gYi9Tb3VyY2UvV1RGL1dURi5wcm8K
aW5kZXggMDk2MmVmMGI1MGE1MTdiZDBlMmQ0NTYyZGY4ZGVmZDZmNTFhMWYwNC4uODg2YjJmM2E3
YjZlM2E4NTVkZGIwNjMxYmI3Njc1NTRlNTI3NThjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9X
VEYucHJvCisrKyBiL1NvdXJjZS9XVEYvV1RGLnBybwpAQCAtMTYzLDYgKzE2Myw3IEBAIEhFQURF
UlMgKz0gXAogICAgIFZlY3Rvci5oIFwKICAgICBWZWN0b3JUcmFpdHMuaCBcCiAgICAgVk1UYWdz
LmggXAorICAgIFdvcmtRdWV1ZS5oIFwKICAgICBXVEZUaHJlYWREYXRhLmgKIAogdW5peDogSEVB
REVSUyArPSBUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmgKQEAgLTE5OSw2ICsyMDAsNyBA
QCBTT1VSQ0VTICs9IFwKICAgICBPU1JhbmRvbVNvdXJjZS5jcHAgXAogICAgIHF0L01haW5UaHJl
YWRRdC5jcHAgXAogICAgIHF0L1N0cmluZ1F0LmNwcCBcCisgICAgcXQvV29ya1F1ZXVlUXQuY3Bw
IFwKICAgICBQYWdlQWxsb2NhdGlvbkFsaWduZWQuY3BwIFwKICAgICBQYWdlQmxvY2suY3BwIFwK
ICAgICBQYXJhbGxlbEpvYnNHZW5lcmljLmNwcCBcCkBAIC0yMDksNiArMjExLDcgQEAgU09VUkNF
UyArPSBcCiAgICAgVENTeXN0ZW1BbGxvYy5jcHAgXAogICAgIFRocmVhZGluZy5jcHAgXAogICAg
IFR5cGVUcmFpdHMuY3BwIFwKKyAgICBXb3JrUXVldWUuY3BwIFwKICAgICBXVEZUaHJlYWREYXRh
LmNwcCBcCiAgICAgdGV4dC9BdG9taWNTdHJpbmcuY3BwIFwKICAgICB0ZXh0L0NTdHJpbmcuY3Bw
IFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2og
Yi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDc3MjA0NjFl
MjY0NjYxZmM4ZTk0MzVlOTA4ODE2NzRiY2QxYjc2NTguLjU4NTBlNzAzYmQzY2ZmM2JlNzY2YmRl
YzA4NjVkM2FmNjM2MmZhYzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagpAQCAtMjM5LDYgKzIzOSw5IEBACiAJCUE4QTQ3NDdFMTUxQTgyNUIwMDQxMjNGRiAvKiBW
ZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4
QTQ3MzcwMTUxQTgyNUIwMDQxMjNGRiAvKiBWZWN0b3IuaCAqLzsgfTsKIAkJQThBNDc0N0YxNTFB
ODI1QjAwNDEyM0ZGIC8qIFZlY3RvclRyYWl0cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDczNzExNTFBODI1QjAwNDEyM0ZGIC8qIFZlY3RvclRy
YWl0cy5oICovOyB9OwogCQlBOEE0NzQ4MDE1MUE4MjVCMDA0MTIzRkYgLyogVk1UYWdzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzM3MjE1MUE4
MjVCMDA0MTIzRkYgLyogVk1UYWdzLmggKi87IH07CisJCUJDMkU2RThEMTE0MTk3MTUwMEE2M0Ix
RSAvKiBXb3JrUXVldWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQkMyRTZFN0QxMTQxOTcwQzAwQTYzQjFFIC8qIFdvcmtRdWV1ZS5jcHAgKi87IH07
CisJCUJDMkU2RThFMTE0MTk3MTUwMEE2M0IxRSAvKiBXb3JrUXVldWUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMkU2RTdFMTE0MTk3MEMwMEE2M0Ix
RSAvKiBXb3JrUXVldWUuaCAqLzsgfTsKKwkJQkMwMDkyRjgxMTU4MzdBMzAwRTBBRTJBIC8qIFdv
cmtRdWV1ZU1hYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCQzAwOTJGNjExNTgzN0EzMDBFMEFFMkEgLyogV29ya1F1ZXVlTWFjLmNwcCAqLzsgfTsK
IAkJQThBNDc0ODYxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlRocmVhZERhdGEuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDczN0ExNTFBODI1QjAw
NDEyM0ZGIC8qIFdURlRocmVhZERhdGEuY3BwICovOyB9OwogCQlBOEE0NzQ4NzE1MUE4MjVCMDA0
MTIzRkYgLyogV1RGVGhyZWFkRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQThBNDczN0IxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlRocmVhZERhdGEu
aCAqLzsgfTsKIAkJQThBNDc0OEMxNTFBODI2NDAwNDEyM0ZGIC8qIGNvbmZpZy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDc0OEIxNTFBODI2NDAw
NDEyM0ZGIC8qIGNvbmZpZy5oICovOyB9OwpAQCAtNDg3LDYgKzQ5MCw5IEBACiAJCUE4QTQ3Mzcw
MTUxQTgyNUIwMDQxMjNGRiAvKiBWZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVmVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QTQ3MzcxMTUx
QTgyNUIwMDQxMjNGRiAvKiBWZWN0b3JUcmFpdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVmVjdG9yVHJhaXRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4
QTQ3MzcyMTUxQTgyNUIwMDQxMjNGRiAvKiBWTVRhZ3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVk1UYWdzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDMkU2
RTdEMTE0MTk3MEMwMEE2M0IxRSAvKiBXb3JrUXVldWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gV29ya1F1ZXVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQkMyRTZFN0UxMTQxOTcwQzAwQTYzQjFFIC8qIFdvcmtRdWV1ZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXb3JrUXVldWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQkMwMDkyRjYxMTU4MzdBMzAwRTBBRTJBIC8qIFdvcmtRdWV1ZU1hYy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXb3JrUXVldWVNYWMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEE0NzM3QTE1MUE4MjVCMDA0MTIzRkYgLyogV1RG
VGhyZWFkRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXVEZU
aHJlYWREYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDczN0IxNTFB
ODI1QjAwNDEyM0ZGIC8qIFdURlRocmVhZERhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV1RGVGhyZWFkRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
OEE0NzQ4QjE1MUE4MjY0MDA0MTIzRkYgLyogY29uZmlnLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IGNvbmZpZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzE3
LDYgKzcyMyw5IEBACiAJCQkJQThBNDczNzAxNTFBODI1QjAwNDEyM0ZGIC8qIFZlY3Rvci5oICov
LAogCQkJCUE4QTQ3MzcxMTUxQTgyNUIwMDQxMjNGRiAvKiBWZWN0b3JUcmFpdHMuaCAqLywKIAkJ
CQlBOEE0NzM3MjE1MUE4MjVCMDA0MTIzRkYgLyogVk1UYWdzLmggKi8sCisJCQkJQkMyRTZFN0Qx
MTQxOTcwQzAwQTYzQjFFIC8qIFdvcmtRdWV1ZS5jcHAgKi8sCisJCQkJQkMyRTZFN0UxMTQxOTcw
QzAwQTYzQjFFIC8qIFdvcmtRdWV1ZS5oICovLAorCQkJCUJDMDA5MkY2MTE1ODM3QTMwMEUwQUUy
QSAvKiBXb3JrUXVldWVNYWMuY3BwICovLAogCQkJCUE4QTQ3MzdBMTUxQTgyNUIwMDQxMjNGRiAv
KiBXVEZUaHJlYWREYXRhLmNwcCAqLywKIAkJCQlBOEE0NzM3QjE1MUE4MjVCMDA0MTIzRkYgLyog
V1RGVGhyZWFkRGF0YS5oICovLAogCQkJCUE4NzZEQkQ3MTUxODE2RTUwMERBREI5NSAvKiBQbGF0
Zm9ybS5oICovLApAQCAtMTAzNyw2ICsxMDQ2LDcgQEAKIAkJCQlBOEE0NzQ3RTE1MUE4MjVCMDA0
MTIzRkYgLyogVmVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ3RjE1MUE4MjVCMDA0
MTIzRkYgLyogVmVjdG9yVHJhaXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ4MDE1MUE4
MjVCMDA0MTIzRkYgLyogVk1UYWdzLmggaW4gSGVhZGVycyAqLywKKwkJCQlCQzJFNkU4RTExNDE5
NzE1MDBBNjNCMUUgLyogV29ya1F1ZXVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ4NzE1
MUE4MjVCMDA0MTIzRkYgLyogV1RGVGhyZWFkRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThB
NDc0OEMxNTFBODI2NDAwNDEyM0ZGIC8qIGNvbmZpZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQz
RjYxMjAxNTY1RjBGOTAwREI1MTRBIC8qIFJBTVNpemUuaCBpbiBIZWFkZXJzICovLApAQCAtMTE4
Niw2ICsxMTk2LDggQEAKIAkJCQlBOEE0NzQ3NDE1MUE4MjVCMDA0MTIzRkYgLyogVVJMQ2hhcmFj
dGVyVHlwZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDc0NzcxNTFBODI1QjAwNDEyM0ZG
IC8qIFVSTEVzY2FwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQ3QjE1MUE4MjVCMDA0
MTIzRkYgLyogVVJMU2VnbWVudHMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQkMyRTZFOEQxMTQx
OTcxNTAwQTYzQjFFIC8qIFdvcmtRdWV1ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCQzAwOTJG
ODExNTgzN0EzMDBFMEFFMkEgLyogV29ya1F1ZXVlTWFjLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE4QTQ3NDg2MTUxQTgyNUIwMDQxMjNGRiAvKiBXVEZUaHJlYWREYXRhLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTE0M0Y2MTFGMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0
IGIvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKaW5kZXggMjc0ZjA0Yzk3NDkzMTlhZWY0
ODA0NDc5MTZkZDIyODI3MjUwODY4Zi4uYmU5NTRmMDQzODNkOWI4ZjliZTQzOTkxMDFlZTAyZmVi
ZGY0MmFmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKKysrIGIv
U291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKQEAgLTEwMiw2ICsxMDIsNyBAQCBTRVQoV1RG
X0hFQURFUlMKICAgICBWYWx1ZUNoZWNrLmgKICAgICBWZWN0b3IuaAogICAgIFZlY3RvclRyYWl0
cy5oCisgICAgV29ya1F1ZXVlLmgKICAgICBXVEZUaHJlYWREYXRhLmgKICAgICBkdG9hLmgKIApA
QCAtMTYxLDYgKzE2Miw3IEBAIFNFVChXVEZfU09VUkNFUwogICAgIFN0cmluZ0V4dHJhcy5jcHAK
ICAgICBUaHJlYWRpbmcuY3BwCiAgICAgVHlwZVRyYWl0cy5jcHAKKyAgICBXb3JrUXVldWUuY3Bw
CiAgICAgV1RGVGhyZWFkRGF0YS5jcHAKICAgICBkdG9hLmNwcAogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRWZs
LmNtYWtlCmluZGV4IDFhMTNkYmJhMzU1ODRlMDU2YzQ5MjkxZTM4N2EzMjI1NzEwZDEzMDguLmZk
MTdmNTc4NWVkYmZkN2EyNzE4MmI0YTNkZWEyNGYwOTFlZmQ4NzYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3Jt
RWZsLmNtYWtlCkBAIC0xLDYgKzEsNyBAQAogTElTVChBUFBFTkQgV1RGX1NPVVJDRVMKICAgICBl
ZmwvTWFpblRocmVhZEVmbC5jcHAKICAgICBlZmwvT3duUHRyRWZsLmNwcAorICAgIGVmbC9Xb3Jr
UXVldWVFZmwuY3BwCiAgICAgZ29iamVjdC9HT3duUHRyLmNwcAogICAgIGdvYmplY3QvR1JlZlB0
ci5jcHAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1Qcm9jZXNzSWRlbnRp
Zmllci5oIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmY3ZmY1M2JjZDZjOWZiNGYyOTc3YTg4Yzg0Yjc2OWMwZDhiZmQ3MTYKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmgKQEAg
LTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI2lmbmRlZiBQbGF0Zm9ybVByb2Nlc3NJZGVu
dGlmaWVyX2gKKyNkZWZpbmUgUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllcl9oCisKKyNpZiBQTEFU
Rk9STShRVCkKK2NsYXNzIFFQcm9jZXNzOworI2VsaWYgUExBVEZPUk0oRUZMKQorI2luY2x1ZGUg
PHVuaXN0ZC5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXVEYgeworCisjaWYgUExBVEZPUk0oTUFD
KQordHlwZWRlZiBwaWRfdCBQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyOworI2VsaWYgUExBVEZP
Uk0oV0lOKQordHlwZWRlZiBIQU5ETEUgUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllcjsKKyNlbGlm
IFBMQVRGT1JNKFFUKQordHlwZWRlZiBRUHJvY2VzcyogUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmll
cjsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyNpZmRlZiBHX09TX1dJTjMyCit0eXBlZGVmIHZvaWQq
IEdQaWQ7CisjZWxzZQordHlwZWRlZiBpbnQgR1BpZDsKKyNlbmRpZgordHlwZWRlZiBHUGlkIFBs
YXRmb3JtUHJvY2Vzc0lkZW50aWZpZXI7CisjZWxpZiBQTEFURk9STShFRkwpCit0eXBlZGVmIHBp
ZF90IFBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXI7CisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2Ug
V1RGCisKK3VzaW5nIFdURjo6UGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllcjsKKworI2VuZGlmIC8v
IFBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
V29ya1F1ZXVlLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
OGY1ZmQxNGViNGJjOWU1NTIwMTQ0MmMzMjhkYmFmMmYzNjY1OGY2ZQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5jcHAKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXb3JrUXVldWUuaCIKKworbmFt
ZXNwYWNlIFdURiB7CisKK1dvcmtRdWV1ZTo6V29ya1F1ZXVlKGNvbnN0IGNoYXIqIG5hbWUpCisg
ICAgOiBtX2lzVmFsaWQodHJ1ZSkKK3sKKyAgICBwbGF0Zm9ybUluaXRpYWxpemUobmFtZSk7Cit9
CisKK1dvcmtRdWV1ZTo6fldvcmtRdWV1ZSgpCit7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAg
IE11dGV4TG9ja2VyIGxvY2tlcihtX2lzVmFsaWRNdXRleCk7CisgICAgQVNTRVJUKCFtX2lzVmFs
aWQpOworI2VuZGlmCit9CisKK3ZvaWQgV29ya1F1ZXVlOjppbnZhbGlkYXRlKCkKK3sKKyAgICB7
CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2lzVmFsaWRNdXRleCk7CisgICAgICAgIG1f
aXNWYWxpZCA9IGZhbHNlOworICAgIH0KKworICAgIHBsYXRmb3JtSW52YWxpZGF0ZSgpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1
ZS5oIGIvU291cmNlL1dURi93dGYvV29ya1F1ZXVlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWMwY2I5ODY0OTJj
NWQxNjRhZWRkOGE5YWI1ZjJlOWQ3MTk0YjlhMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
VEYvd3RmL1dvcmtRdWV1ZS5oCkBAIC0wLDAgKzEsMjE2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHly
aWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBXb3JrUXVldWVfaAorI2RlZmluZSBXb3JrUXVldWVfaAor
CisjaWYgT1MoREFSV0lOKQorI2lmIEhBVkUoRElTUEFUQ0hfSCkKKyNpbmNsdWRlIDxkaXNwYXRj
aC9kaXNwYXRjaC5oPgorI2VuZGlmCisjZW5kaWYKKworI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
CisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgor
I2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
KyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCisj
aWYgKFBMQVRGT1JNKFFUKSAmJiAhT1MoREFSV0lOKSkgfHwgUExBVEZPUk0oR1RLKSB8fCBQTEFU
Rk9STShFRkwpCisjaW5jbHVkZSAiUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oIgorI2VuZGlm
CisKKyNpZiBQTEFURk9STShRVCkgJiYgIU9TKERBUldJTikKKyNpbmNsdWRlIDxRU29ja2V0Tm90
aWZpZXI+CitjbGFzcyBRT2JqZWN0OworY2xhc3MgUVRocmVhZDsKKyNlbGlmIFBMQVRGT1JNKEdU
SykKKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+Cit0eXBlZGVmIGdib29sZWFuICgq
R1NvdXJjZUZ1bmMpIChncG9pbnRlciBkYXRhKTsKKyNlbGlmIFBMQVRGT1JNKEVGTCkKKyNpbmNs
dWRlIDxFY29yZS5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBXb3JrUXVl
dWUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFdvcmtRdWV1ZSk7CisKK3B1YmxpYzoKKyAg
ICBleHBsaWNpdCBXb3JrUXVldWUoY29uc3QgY2hhciogbmFtZSk7CisgICAgfldvcmtRdWV1ZSgp
OworCisgICAgLy8gV2lsbCBkaXNwYXRjaCB0aGUgZ2l2ZW4gZnVuY3Rpb24gdG8gcnVuIGFzIHNv
b24gYXMgcG9zc2libGUuCisgICAgdm9pZCBkaXNwYXRjaChjb25zdCBGdW5jdGlvbjx2b2lkKCk+
Jik7CisKKyAgICAvLyBXaWxsIGRpc3BhdGNoIHRoZSBnaXZlbiBmdW5jdGlvbiBhZnRlciB0aGUg
Z2l2ZW4gZGVsYXkgKGluIHNlY29uZHMpLgorICAgIHZvaWQgZGlzcGF0Y2hBZnRlckRlbGF5KGNv
bnN0IEZ1bmN0aW9uPHZvaWQoKT4mLCBkb3VibGUgZGVsYXkpOworCisgICAgdm9pZCBpbnZhbGlk
YXRlKCk7CisKKyNpZiBPUyhEQVJXSU4pCisgICAgZW51bSBNYWNoUG9ydEV2ZW50VHlwZSB7Cisg
ICAgICAgIC8vIEZpcmVkIHdoZW4gdGhlcmUgaXMgZGF0YSBvbiB0aGUgZ2l2ZW4gcmVjZWl2ZSBy
aWdodC4KKyAgICAgICAgTWFjaFBvcnREYXRhQXZhaWxhYmxlLAorICAgICAgICAKKyAgICAgICAg
Ly8gRmlyZWQgd2hlbiB0aGUgcmVjZWl2ZSByaWdodCBmb3IgdGhpcyBzZW5kIHJpZ2h0IGhhcyBi
ZWVuIGRlc3Ryb3llZC4KKyAgICAgICAgTWFjaFBvcnREZWFkTmFtZU5vdGlmaWNhdGlvbgorICAg
IH07CisgICAgCisgICAgLy8gV2lsbCBleGVjdXRlIHRoZSBnaXZlbiBmdW5jdGlvbiB3aGVuZXZl
ciB0aGUgZ2l2ZW4gbWFjaCBwb3J0IGV2ZW50IGZpcmVzLgorICAgIC8vIE5vdGUgdGhhdCB0aGlz
IHdpbGwgYWRvcHQgdGhlIG1hY2ggcG9ydCBhbmQgZGVzdHJveSBpdCB3aGVuIHRoZSB3b3JrIHF1
ZXVlIGlzIGludmFsaWRhdGVkLgorICAgIHZvaWQgcmVnaXN0ZXJNYWNoUG9ydEV2ZW50SGFuZGxl
cihtYWNoX3BvcnRfdCwgTWFjaFBvcnRFdmVudFR5cGUsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4m
KTsKKyAgICB2b2lkIHVucmVnaXN0ZXJNYWNoUG9ydEV2ZW50SGFuZGxlcihtYWNoX3BvcnRfdCk7
CisjZWxpZiBQTEFURk9STShXSU4pCisgICAgdm9pZCByZWdpc3RlckhhbmRsZShIQU5ETEUsIGNv
bnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsKKyAgICB2b2lkIHVucmVnaXN0ZXJBbmRDbG9zZUhhbmRs
ZShIQU5ETEUpOworI2VsaWYgUExBVEZPUk0oUVQpCisgICAgUVNvY2tldE5vdGlmaWVyKiByZWdp
c3RlclNvY2tldEV2ZW50SGFuZGxlcihpbnQsIFFTb2NrZXROb3RpZmllcjo6VHlwZSwgY29uc3Qg
RnVuY3Rpb248dm9pZCgpPiYpOworICAgIHZvaWQgZGlzcGF0Y2hPblRlcm1pbmF0aW9uKFBsYXRm
b3JtUHJvY2Vzc0lkZW50aWZpZXIsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsKKyNlbGlmIFBM
QVRGT1JNKEdUSykKKyAgICB2b2lkIHJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKGludCwgaW50
LCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7CisgICAgdm9pZCB1bnJlZ2lzdGVyRXZlbnRTb3Vy
Y2VIYW5kbGVyKGludCk7CisgICAgdm9pZCBkaXNwYXRjaE9uVGVybWluYXRpb24oUGxhdGZvcm1Q
cm9jZXNzSWRlbnRpZmllciwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOworI2VsaWYgUExBVEZP
Uk0oRUZMKQorICAgIHZvaWQgcmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIoaW50LCBjb25zdCBG
dW5jdGlvbjx2b2lkKCk+Jik7CisgICAgdm9pZCB1bnJlZ2lzdGVyU29ja2V0RXZlbnRIYW5kbGVy
KGludCk7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICAvLyBGSVhNRTogVXNlIGFuIGF0b21pYyBi
b29sZWFuIGhlcmUgaW5zdGVhZC4KKyAgICBNdXRleCBtX2lzVmFsaWRNdXRleDsKKyAgICBib29s
IG1faXNWYWxpZDsKKworICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplKGNvbnN0IGNoYXIqIG5h
bWUpOworICAgIHZvaWQgcGxhdGZvcm1JbnZhbGlkYXRlKCk7CisKKyNpZiBPUyhEQVJXSU4pCisj
aWYgSEFWRShESVNQQVRDSF9IKQorICAgIHN0YXRpYyB2b2lkIGV4ZWN1dGVGdW5jdGlvbih2b2lk
Kik7CisgICAgTXV0ZXggbV9ldmVudFNvdXJjZXNNdXRleDsKKyAgICBjbGFzcyBFdmVudFNvdXJj
ZTsKKyAgICBIYXNoTWFwPG1hY2hfcG9ydF90LCBFdmVudFNvdXJjZSo+IG1fZXZlbnRTb3VyY2Vz
OworICAgIGRpc3BhdGNoX3F1ZXVlX3QgbV9kaXNwYXRjaFF1ZXVlOworI2VuZGlmCisjZWxpZiBQ
TEFURk9STShXSU4pCisgICAgY2xhc3MgV29ya0l0ZW1XaW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJl
ZkNvdW50ZWQ8V29ya0l0ZW1XaW4+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFdvcmtJdGVtV2luPiBjcmVhdGUoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYsIFdvcmtR
dWV1ZSopOworICAgICAgICB2aXJ0dWFsIH5Xb3JrSXRlbVdpbigpOworCisgICAgICAgIEZ1bmN0
aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKCkgeyByZXR1cm4gbV9mdW5jdGlvbjsgfQorICAgICAgICBX
b3JrUXVldWUqIHF1ZXVlKCkgY29uc3QgeyByZXR1cm4gbV9xdWV1ZTsgfQorCisgICAgcHJvdGVj
dGVkOgorICAgICAgICBXb3JrSXRlbVdpbihjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiwgV29ya1F1
ZXVlKik7CisKKyAgICBwcml2YXRlOgorICAgICAgICBGdW5jdGlvbjx2b2lkKCk+IG1fZnVuY3Rp
b247CisgICAgICAgIFdvcmtRdWV1ZSogbV9xdWV1ZTsKKyAgICB9OworCisgICAgY2xhc3MgSGFu
ZGxlV29ya0l0ZW0gOiBwdWJsaWMgV29ya0l0ZW1XaW4geworICAgIHB1YmxpYzoKKyAgICAgICAg
c3RhdGljIFBhc3NSZWZQdHI8SGFuZGxlV29ya0l0ZW0+IGNyZWF0ZUJ5QWRvcHRpbmdIYW5kbGUo
SEFORExFLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiwgV29ya1F1ZXVlKik7CisgICAgICAgIHZp
cnR1YWwgfkhhbmRsZVdvcmtJdGVtKCk7CisKKyAgICAgICAgdm9pZCBzZXRXYWl0SGFuZGxlKEhB
TkRMRSB3YWl0SGFuZGxlKSB7IG1fd2FpdEhhbmRsZSA9IHdhaXRIYW5kbGU7IH0KKyAgICAgICAg
SEFORExFIHdhaXRIYW5kbGUoKSBjb25zdCB7IHJldHVybiBtX3dhaXRIYW5kbGU7IH0KKworICAg
IHByaXZhdGU6CisgICAgICAgIEhhbmRsZVdvcmtJdGVtKEhBTkRMRSwgY29uc3QgRnVuY3Rpb248
dm9pZCgpPiYsIFdvcmtRdWV1ZSopOworCisgICAgICAgIEhBTkRMRSBtX2hhbmRsZTsKKyAgICAg
ICAgSEFORExFIG1fd2FpdEhhbmRsZTsKKyAgICB9OworCisgICAgc3RhdGljIHZvaWQgQ0FMTEJB
Q0sgaGFuZGxlQ2FsbGJhY2sodm9pZCogY29udGV4dCwgQk9PTEVBTiB0aW1lck9yV2FpdEZpcmVk
KTsKKyAgICBzdGF0aWMgdm9pZCBDQUxMQkFDSyB0aW1lckNhbGxiYWNrKHZvaWQqIGNvbnRleHQs
IEJPT0xFQU4gdGltZXJPcldhaXRGaXJlZCk7CisgICAgc3RhdGljIERXT1JEIFdJTkFQSSB3b3Jr
VGhyZWFkQ2FsbGJhY2sodm9pZCogY29udGV4dCk7CisKKyAgICBib29sIHRyeVJlZ2lzdGVyQXNX
b3JrVGhyZWFkKCk7CisgICAgdm9pZCB1bnJlZ2lzdGVyQXNXb3JrVGhyZWFkKCk7CisgICAgdm9p
ZCBwZXJmb3JtV29ya09uUmVnaXN0ZXJlZFdvcmtUaHJlYWQoKTsKKworICAgIHN0YXRpYyB2b2lk
IHVucmVnaXN0ZXJXYWl0QW5kRGVzdHJveUl0ZW1Tb29uKFBhc3NSZWZQdHI8SGFuZGxlV29ya0l0
ZW0+KTsKKyAgICBzdGF0aWMgRFdPUkQgV0lOQVBJIHVucmVnaXN0ZXJXYWl0QW5kRGVzdHJveUl0
ZW1DYWxsYmFjayh2b2lkKiBjb250ZXh0KTsKKworICAgIHZvbGF0aWxlIExPTkcgbV9pc1dvcmtU
aHJlYWRSZWdpc3RlcmVkOworCisgICAgTXV0ZXggbV93b3JrSXRlbVF1ZXVlTG9jazsKKyAgICBW
ZWN0b3I8UmVmUHRyPFdvcmtJdGVtV2luPiA+IG1fd29ya0l0ZW1RdWV1ZTsKKworICAgIE11dGV4
IG1faGFuZGxlc0xvY2s7CisgICAgSGFzaE1hcDxIQU5ETEUsIFJlZlB0cjxIYW5kbGVXb3JrSXRl
bT4gPiBtX2hhbmRsZXM7CisKKyAgICBIQU5ETEUgbV90aW1lclF1ZXVlOworI2VsaWYgUExBVEZP
Uk0oUVQpCisgICAgY2xhc3MgV29ya0l0ZW1RdDsKKyAgICBRVGhyZWFkKiBtX3dvcmtUaHJlYWQ7
CisgICAgZnJpZW5kIGNsYXNzIFdvcmtJdGVtUXQ7CisjZWxpZiBQTEFURk9STShHVEspCisgICAg
c3RhdGljIHZvaWQgc3RhcnRXb3JrUXVldWVUaHJlYWQoV29ya1F1ZXVlKik7CisgICAgdm9pZCB3
b3JrUXVldWVUaHJlYWRCb2R5KCk7CisgICAgdm9pZCBkaXNwYXRjaE9uU291cmNlKEdTb3VyY2Uq
LCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiwgR1NvdXJjZUZ1bmMpOworCisgICAgVGhyZWFkSWRl
bnRpZmllciBtX3dvcmtRdWV1ZVRocmVhZDsKKyAgICBHUmVmUHRyPEdNYWluQ29udGV4dD4gbV9l
dmVudENvbnRleHQ7CisgICAgTXV0ZXggbV9ldmVudExvb3BMb2NrOworICAgIEdSZWZQdHI8R01h
aW5Mb29wPiBtX2V2ZW50TG9vcDsKKyAgICBNdXRleCBtX2V2ZW50U291cmNlc0xvY2s7CisgICAg
Y2xhc3MgRXZlbnRTb3VyY2U7CisgICAgSGFzaE1hcDxpbnQsIFZlY3RvcjxFdmVudFNvdXJjZSo+
ID4gbV9ldmVudFNvdXJjZXM7CisgICAgdHlwZWRlZiBIYXNoTWFwPGludCwgVmVjdG9yPEV2ZW50
U291cmNlKj4gPjo6aXRlcmF0b3IgRXZlbnRTb3VyY2VJdGVyYXRvcjsgCisjZWxpZiBQTEFURk9S
TShFRkwpCisgICAgZmRfc2V0IG1fZmlsZURlc2NyaXB0b3JTZXQ7CisgICAgaW50IG1fbWF4Rmls
ZURlc2NyaXB0b3I7CisgICAgaW50IG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvcjsKKyAgICBpbnQg
bV93cml0ZVRvUGlwZURlc2NyaXB0b3I7CisgICAgYm9vbCBtX3RocmVhZExvb3A7CisKKyAgICBW
ZWN0b3I8RnVuY3Rpb248dm9pZCgpPiA+IG1fd29ya0l0ZW1RdWV1ZTsKKyAgICBNdXRleCBtX3dv
cmtJdGVtUXVldWVMb2NrOworCisgICAgaW50IG1fc29ja2V0RGVzY3JpcHRvcjsKKyAgICBGdW5j
dGlvbjx2b2lkKCk+IG1fc29ja2V0RXZlbnRIYW5kbGVyOworCisgICAgSGFzaE1hcDxpbnQsIE93
blB0cjxFY29yZV9UaW1lcj4gPiBtX3RpbWVyczsKKworICAgIHZvaWQgc2VuZE1lc3NhZ2VUb1Ro
cmVhZChjb25zdCBjaGFyKik7CisgICAgc3RhdGljIHZvaWQqIHdvcmtRdWV1ZVRocmVhZChXb3Jr
UXVldWUqKTsKKyAgICB2b2lkIHBlcmZvcm1Xb3JrKCk7CisgICAgdm9pZCBwZXJmb3JtRmlsZURl
c2NyaXB0b3JXb3JrKCk7CisgICAgc3RhdGljIGJvb2wgdGltZXJGaXJlZCh2b2lkKik7CisjZW5k
aWYKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OldvcmtRdWV1ZTsKKwor
I2VuZGlmIC8vIFdvcmtRdWV1ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9lZmwvV29y
a1F1ZXVlRWZsLmNwcCBiL1NvdXJjZS9XVEYvd3RmL2VmbC9Xb3JrUXVldWVFZmwuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjNhMzliYTllZDliMTI3MGZlN2RmOWU2Y2U2ODVkYjQ3M2E1ZjU4YTcKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9lZmwvV29ya1F1ZXVlRWZsLmNwcApAQCAtMCwwICsx
LDE3MyBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcwor
CisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV29ya1F1ZXVlLmgiCisKKyNpbmNs
dWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCitjbGFzcyBUaW1lcldvcmtJdGVtIHsKK3B1YmxpYzoK
KyAgICBUaW1lcldvcmtJdGVtKGludCB0aW1lcklELCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBm
dW5jdGlvbiwgV29ya1F1ZXVlKiBxdWV1ZSkKKyAgICAgICAgOiBtX2Z1bmN0aW9uKGZ1bmN0aW9u
KQorICAgICAgICAsIG1fcXVldWUocXVldWUpCisgICAgICAgICwgbV90aW1lcklEKHRpbWVySUQp
CisgICAgeworICAgIH0KKyAgICB+VGltZXJXb3JrSXRlbSgpIHsgfQorCisgICAgRnVuY3Rpb248
dm9pZCgpPiBmdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZnVuY3Rpb247IH0KKyAgICBXb3Jr
UXVldWUqIHF1ZXVlKCkgY29uc3QgeyByZXR1cm4gbV9xdWV1ZTsgfQorCisgICAgaW50IHRpbWVy
SUQoKSBjb25zdCB7IHJldHVybiBtX3RpbWVySUQ7IH0KKworcHJpdmF0ZToKKyAgICBGdW5jdGlv
bjx2b2lkKCk+IG1fZnVuY3Rpb247CisgICAgV29ya1F1ZXVlKiBtX3F1ZXVlOworICAgIGludCBt
X3RpbWVySUQ7Cit9OworCitzdGF0aWMgY29uc3QgaW50IGludmFsaWRTb2NrZXREZXNjcmlwdG9y
ID0gLTE7CitzdGF0aWMgY29uc3QgaW50IHRocmVhZE1lc3NhZ2VTaXplID0gMTsKK3N0YXRpYyBj
b25zdCBjaGFyIGZpbmlzaFRocmVhZE1lc3NhZ2VbXSA9ICJGIjsKK3N0YXRpYyBjb25zdCBjaGFy
IHdha3VwVGhyZWFkTWVzc2FnZVtdID0gIlciOworCit2b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1J
bml0aWFsaXplKGNvbnN0IGNoYXIqIG5hbWUpCit7CisgICAgaW50IGZkc1syXTsKKyAgICBpZiAo
cGlwZShmZHMpKQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgIG1fcmVhZEZy
b21QaXBlRGVzY3JpcHRvciA9IGZkc1swXTsKKyAgICBtX3dyaXRlVG9QaXBlRGVzY3JpcHRvciA9
IGZkc1sxXTsKKyAgICBGRF9aRVJPKCZtX2ZpbGVEZXNjcmlwdG9yU2V0KTsKKyAgICBGRF9TRVQo
bV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yLCAmbV9maWxlRGVzY3JpcHRvclNldCk7CisgICAgbV9t
YXhGaWxlRGVzY3JpcHRvciA9IG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvcjsKKworICAgIG1fc29j
a2V0RGVzY3JpcHRvciA9IGludmFsaWRTb2NrZXREZXNjcmlwdG9yOworCisgICAgbV90aHJlYWRM
b29wID0gdHJ1ZTsKKyAgICBjcmVhdGVUaHJlYWQocmVpbnRlcnByZXRfY2FzdDxXVEY6OlRocmVh
ZEZ1bmN0aW9uPigmV29ya1F1ZXVlOjp3b3JrUXVldWVUaHJlYWQpLCB0aGlzLCBuYW1lKTsKK30K
Kwordm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCit7CisgICAgc2VuZE1lc3Nh
Z2VUb1RocmVhZChmaW5pc2hUaHJlYWRNZXNzYWdlKTsKK30KKwordm9pZCBXb3JrUXVldWU6OnBl
cmZvcm1Xb3JrKCkKK3sKKyAgICBtX3dvcmtJdGVtUXVldWVMb2NrLmxvY2soKTsKKworICAgIHdo
aWxlICghbV93b3JrSXRlbVF1ZXVlLmlzRW1wdHkoKSkgeworICAgICAgICBWZWN0b3I8RnVuY3Rp
b248dm9pZCgpPiA+IHdvcmtJdGVtUXVldWU7CisgICAgICAgIG1fd29ya0l0ZW1RdWV1ZS5zd2Fw
KHdvcmtJdGVtUXVldWUpOworCisgICAgICAgIG1fd29ya0l0ZW1RdWV1ZUxvY2sudW5sb2NrKCk7
CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd29ya0l0ZW1RdWV1ZS5zaXplKCk7ICsr
aSkKKyAgICAgICAgICAgIHdvcmtJdGVtUXVldWVbaV0oKTsKKyAgICAgICAgbV93b3JrSXRlbVF1
ZXVlTG9jay5sb2NrKCk7CisgICAgfQorICAgIG1fd29ya0l0ZW1RdWV1ZUxvY2sudW5sb2NrKCk7
Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjpwZXJmb3JtRmlsZURlc2NyaXB0b3JXb3JrKCkKK3sKKyAg
ICBmZF9zZXQgcmVhZEZpbGVEZXNjcmlwdG9yU2V0ID0gbV9maWxlRGVzY3JpcHRvclNldDsKKwor
ICAgIGlmIChzZWxlY3QobV9tYXhGaWxlRGVzY3JpcHRvciArIDEsICZyZWFkRmlsZURlc2NyaXB0
b3JTZXQsIDAsIDAsIDApID49IDApIHsKKyAgICAgICAgaWYgKEZEX0lTU0VUKG1fcmVhZEZyb21Q
aXBlRGVzY3JpcHRvciwgJnJlYWRGaWxlRGVzY3JpcHRvclNldCkpIHsKKyAgICAgICAgICAgIGNo
YXIgcmVhZEJ1Zlt0aHJlYWRNZXNzYWdlU2l6ZV07CisgICAgICAgICAgICBpZiAocmVhZChtX3Jl
YWRGcm9tUGlwZURlc2NyaXB0b3IsIHJlYWRCdWYsIHRocmVhZE1lc3NhZ2VTaXplKSA9PSAtMSkK
KyAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byByZWFkIGZyb20gV29ya1F1ZXVl
VGhyZWFkIHBpcGUiKTsKKyAgICAgICAgICAgIGlmICghc3RybmNtcChyZWFkQnVmLCBmaW5pc2hU
aHJlYWRNZXNzYWdlLCB0aHJlYWRNZXNzYWdlU2l6ZSkpCisgICAgICAgICAgICAgICAgbV90aHJl
YWRMb29wID0gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAobV9zb2NrZXREZXNjcmlw
dG9yICE9IGludmFsaWRTb2NrZXREZXNjcmlwdG9yICYmIEZEX0lTU0VUKG1fc29ja2V0RGVzY3Jp
cHRvciwgJnJlYWRGaWxlRGVzY3JpcHRvclNldCkpCisgICAgICAgICAgICBtX3NvY2tldEV2ZW50
SGFuZGxlcigpOworICAgIH0KK30KKwordm9pZCBXb3JrUXVldWU6OnNlbmRNZXNzYWdlVG9UaHJl
YWQoY29uc3QgY2hhciogbWVzc2FnZSkKK3sKKyAgICBpZiAod3JpdGUobV93cml0ZVRvUGlwZURl
c2NyaXB0b3IsIG1lc3NhZ2UsIHRocmVhZE1lc3NhZ2VTaXplKSA9PSAtMSkKKyAgICAgICAgTE9H
X0VSUk9SKCJGYWlsZWQgdG8gd2FrZSB1cCBXb3JrUXVldWUgVGhyZWFkIik7Cit9CisKK3ZvaWQq
IFdvcmtRdWV1ZTo6d29ya1F1ZXVlVGhyZWFkKFdvcmtRdWV1ZSogd29ya1F1ZXVlKQoreworICAg
IHdoaWxlICh3b3JrUXVldWUtPm1fdGhyZWFkTG9vcCkgeworICAgICAgICB3b3JrUXVldWUtPnBl
cmZvcm1Xb3JrKCk7CisgICAgICAgIHdvcmtRdWV1ZS0+cGVyZm9ybUZpbGVEZXNjcmlwdG9yV29y
aygpOworICAgIH0KKworICAgIGNsb3NlKHdvcmtRdWV1ZS0+bV9yZWFkRnJvbVBpcGVEZXNjcmlw
dG9yKTsKKyAgICBjbG9zZSh3b3JrUXVldWUtPm1fd3JpdGVUb1BpcGVEZXNjcmlwdG9yKTsKKwor
ICAgIHJldHVybiAwOworfQorCit2b2lkIFdvcmtRdWV1ZTo6cmVnaXN0ZXJTb2NrZXRFdmVudEhh
bmRsZXIoaW50IGZpbGVEZXNjcmlwdG9yLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlv
bikKK3sKKyAgICBpZiAobV9zb2NrZXREZXNjcmlwdG9yICE9IGludmFsaWRTb2NrZXREZXNjcmlw
dG9yKQorICAgICAgICBMT0dfRVJST1IoIiVkIGlzIGFscmVhZHkgcmVnaXN0ZXJkLiIsIGZpbGVE
ZXNjcmlwdG9yKTsKKworICAgIG1fc29ja2V0RGVzY3JpcHRvciA9IGZpbGVEZXNjcmlwdG9yOwor
ICAgIG1fc29ja2V0RXZlbnRIYW5kbGVyID0gZnVuY3Rpb247CisKKyAgICBpZiAoZmlsZURlc2Ny
aXB0b3IgPiBtX21heEZpbGVEZXNjcmlwdG9yKQorICAgICAgICBtX21heEZpbGVEZXNjcmlwdG9y
ID0gZmlsZURlc2NyaXB0b3I7CisgICAgRkRfU0VUKGZpbGVEZXNjcmlwdG9yLCAmbV9maWxlRGVz
Y3JpcHRvclNldCk7Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjp1bnJlZ2lzdGVyU29ja2V0RXZlbnRI
YW5kbGVyKGludCBmaWxlRGVzY3JpcHRvcikKK3sKKyAgICBtX3NvY2tldERlc2NyaXB0b3IgPSBp
bnZhbGlkU29ja2V0RGVzY3JpcHRvcjsKKworICAgIGlmIChmaWxlRGVzY3JpcHRvciA9PSBtX21h
eEZpbGVEZXNjcmlwdG9yKQorICAgICAgICBtX21heEZpbGVEZXNjcmlwdG9yID0gbV9yZWFkRnJv
bVBpcGVEZXNjcmlwdG9yOworICAgIEZEX0NMUihmaWxlRGVzY3JpcHRvciwgJm1fZmlsZURlc2Ny
aXB0b3JTZXQpOworfQorCit2b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2goY29uc3QgRnVuY3Rpb248
dm9pZCgpPiYgZnVuY3Rpb24pCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fd29ya0l0ZW1R
dWV1ZUxvY2spOworICAgIG1fd29ya0l0ZW1RdWV1ZS5hcHBlbmQoZnVuY3Rpb24pOworICAgIHNl
bmRNZXNzYWdlVG9UaHJlYWQod2FrdXBUaHJlYWRNZXNzYWdlKTsKK30KKworYm9vbCBXb3JrUXVl
dWU6OnRpbWVyRmlyZWQodm9pZCogZGF0YSkKK3sKKyAgICBUaW1lcldvcmtJdGVtKiBpdGVtID0g
c3RhdGljX2Nhc3Q8VGltZXJXb3JrSXRlbSo+KGRhdGEpOworICAgIGlmIChpdGVtICYmIGl0ZW0t
PnF1ZXVlKCktPm1faXNWYWxpZCkgeworICAgICAgICBpdGVtLT5xdWV1ZSgpLT5kaXNwYXRjaChp
dGVtLT5mdW5jdGlvbigpKTsKKyAgICAgICAgaXRlbS0+cXVldWUoKS0+bV90aW1lcnMudGFrZShp
dGVtLT50aW1lcklEKCkpOworICAgICAgICBkZWxldGUgaXRlbTsKKyAgICB9CisKKyAgICByZXR1
cm4gRUNPUkVfQ0FMTEJBQ0tfQ0FOQ0VMOworfQorCit2b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2hB
ZnRlckRlbGF5KGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uLCBkb3VibGUgZGVsYXkp
Cit7CisgICAgc3RhdGljIGludCB0aW1lcklkID0gMDsKKyAgICBtX3RpbWVycy5zZXQodGltZXJJ
ZCwgYWRvcHRQdHIoZWNvcmVfdGltZXJfYWRkKGRlbGF5LCByZWludGVycHJldF9jYXN0PEVjb3Jl
X1Rhc2tfQ2I+KHRpbWVyRmlyZWQpLCBuZXcgVGltZXJXb3JrSXRlbSh0aW1lcklkLCBmdW5jdGlv
biwgdGhpcykpKSk7CisgICAgdGltZXJJZCsrOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvZ3RrL1dvcmtRdWV1ZUd0ay5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9ndGsvV29ya1F1ZXVlR3Rr
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5iOTFmNjM1MWQ3M2IwMjEwZWVhYzY2OTY3MzU4ODdlZjhlYTZhNmQ0
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvZ3RrL1dvcmtRdWV1ZUd0ay5jcHAK
QEAgLTAsMCArMSwyMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJXb3JrUXVldWUuaCIKKworI2luY2x1ZGUgPGdpby9naW8uaD4KKyNpbmNsdWRlIDxnbGli
Lmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorCisvLyBXb3JrUXVldWU6OkV2
ZW50U291cmNlCitjbGFzcyBXb3JrUXVldWU6OkV2ZW50U291cmNlIHsKK3B1YmxpYzoKKyAgICBF
dmVudFNvdXJjZShjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbiwgV29ya1F1ZXVlKiB3
b3JrUXVldWUsIEdDYW5jZWxsYWJsZSogY2FuY2VsbGFibGUpCisgICAgICAgIDogbV9mdW5jdGlv
bihmdW5jdGlvbikKKyAgICAgICAgLCBtX3dvcmtRdWV1ZSh3b3JrUXVldWUpCisgICAgICAgICwg
bV9jYW5jZWxsYWJsZShjYW5jZWxsYWJsZSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBjYW5j
ZWwoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2NhbmNlbGxhYmxlKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBnX2NhbmNlbGxhYmxlX2NhbmNlbChtX2NhbmNlbGxhYmxlKTsKKyAgICB9
CisKKyAgICBzdGF0aWMgdm9pZCBleGVjdXRlRXZlbnRTb3VyY2UoRXZlbnRTb3VyY2UqIGV2ZW50
U291cmNlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGV2ZW50U291cmNlKTsKKyAgICAgICAgV29y
a1F1ZXVlKiBxdWV1ZSA9IGV2ZW50U291cmNlLT5tX3dvcmtRdWV1ZTsKKyAgICAgICAgeworICAg
ICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHF1ZXVlLT5tX2lzVmFsaWRNdXRleCk7CisgICAg
ICAgICAgICBpZiAoIXF1ZXVlLT5tX2lzVmFsaWQpCisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgZXZlbnRTb3VyY2UtPm1fZnVuY3Rpb24oKTsKKyAgICB9CisK
KyAgICBzdGF0aWMgZ2Jvb2xlYW4gcGVyZm9ybVdvcmtPbmNlKEV2ZW50U291cmNlKiBldmVudFNv
dXJjZSkKKyAgICB7CisgICAgICAgIGV4ZWN1dGVFdmVudFNvdXJjZShldmVudFNvdXJjZSk7Cisg
ICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gcGVyZm9y
bVdvcmsoR1NvY2tldCogc29ja2V0LCBHSU9Db25kaXRpb24gY29uZGl0aW9uLCBFdmVudFNvdXJj
ZSogZXZlbnRTb3VyY2UpCisgICAgeworICAgICAgICBpZiAoIShjb25kaXRpb24gJiBHX0lPX0lO
KSAmJiAhKGNvbmRpdGlvbiAmIEdfSU9fSFVQKSAmJiAhKGNvbmRpdGlvbiAmIEdfSU9fRVJSKSkg
eworICAgICAgICAgICAgLy8gRXZlbnRTb3VyY2UgaGFzIGJlZW4gY2FuY2VsbGVkLCByZXR1cm4g
RkFMU0UgdG8gZGVzdHJveSB0aGUgc291cmNlLgorICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwor
ICAgICAgICB9CisKKyAgICAgICAgZXhlY3V0ZUV2ZW50U291cmNlKGV2ZW50U291cmNlKTsKKyAg
ICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCisgICAgc3RhdGljIGdib29sZWFuIHBlcmZvcm1X
b3JrT25UZXJtaW5hdGlvbihHUGlkLCBnaW50LCBFdmVudFNvdXJjZSogZXZlbnRTb3VyY2UpCisg
ICAgeworICAgICAgICBleGVjdXRlRXZlbnRTb3VyY2UoZXZlbnRTb3VyY2UpOworICAgICAgICBy
ZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgZGVsZXRlRXZlbnRTb3VyY2Uo
RXZlbnRTb3VyY2UqIGV2ZW50U291cmNlKSAKKyAgICB7CisgICAgICAgIEFTU0VSVChldmVudFNv
dXJjZSk7CisgICAgICAgIGRlbGV0ZSBldmVudFNvdXJjZTsKKyAgICB9CisgICAKK3B1YmxpYzoK
KyAgICBGdW5jdGlvbjx2b2lkKCk+IG1fZnVuY3Rpb247CisgICAgV29ya1F1ZXVlKiBtX3dvcmtR
dWV1ZTsKKyAgICBHQ2FuY2VsbGFibGUqIG1fY2FuY2VsbGFibGU7Cit9OworCisvLyBXb3JrUXVl
dWUKK3N0YXRpYyBjb25zdCBzaXplX3Qga1Zpc3VhbFN0dWRpb1RocmVhZE5hbWVMaW1pdCA9IDMx
OworCit2b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXplKGNvbnN0IGNoYXIqIG5hbWUp
Cit7CisgICAgbV9ldmVudENvbnRleHQgPSBhZG9wdEdSZWYoZ19tYWluX2NvbnRleHRfbmV3KCkp
OworICAgIEFTU0VSVChtX2V2ZW50Q29udGV4dCk7CisgICAgbV9ldmVudExvb3AgPSBhZG9wdEdS
ZWYoZ19tYWluX2xvb3BfbmV3KG1fZXZlbnRDb250ZXh0LmdldCgpLCBGQUxTRSkpOworICAgIEFT
U0VSVChtX2V2ZW50TG9vcCk7CisKKyAgICAvLyBUaGlzIG5hbWUgY2FuIGJlIGNvbS5hcHBsZS5X
ZWJLaXQuUHJvY2Vzc0xhdW5jaGVyIG9yIGNvbS5hcHBsZS5Db3JlSVBDLlJlY2VpdmVRdWV1ZS4K
KyAgICAvLyBXZSBhcmUgdXNpbmcgdGhvc2UgbmFtZXMgZm9yIHRoZSB0aHJlYWQgbmFtZSwgYnV0
IGJvdGggYXJlIGxvbmdlciB0aGFuIDMxIGNoYXJhY3RlcnMsCisgICAgLy8gd2hpY2ggaXMgdGhl
IGxpbWl0IG9mIFZpc3VhbCBTdHVkaW8gZm9yIHRocmVhZCBuYW1lcy4KKyAgICAvLyBXaGVuIGxv
ZyBpcyBlbmFibGVkIGNyZWF0ZVRocmVhZCgpIHdpbGwgYXNzZXJ0IGluc3RlYWQgb2YgdHJ1bmNh
dGUgdGhlIG5hbWUsIHNvIHdlIG5lZWQKKyAgICAvLyB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgdXNl
IGEgbmFtZSBsb25nZXIgdGhhbiAzMSBjaGFyYWN0ZXJzLgorICAgIGNvbnN0IGNoYXIqIHRocmVh
ZE5hbWUgPSBnX3N0cnJzdHIobmFtZSwgIi4iKTsKKyAgICBpZiAodGhyZWFkTmFtZSkKKyAgICAg
ICAgdGhyZWFkTmFtZSsrOworICAgIGVsc2UKKyAgICAgICAgdGhyZWFkTmFtZSA9IG5hbWU7Cisg
ICAgaWYgKHN0cmxlbih0aHJlYWROYW1lKSA+IGtWaXN1YWxTdHVkaW9UaHJlYWROYW1lTGltaXQp
CisgICAgICAgIHRocmVhZE5hbWUgKz0gc3RybGVuKHRocmVhZE5hbWUpIC0ga1Zpc3VhbFN0dWRp
b1RocmVhZE5hbWVMaW1pdDsKKworICAgIG1fd29ya1F1ZXVlVGhyZWFkID0gY3JlYXRlVGhyZWFk
KHJlaW50ZXJwcmV0X2Nhc3Q8V1RGOjpUaHJlYWRGdW5jdGlvbj4oJldvcmtRdWV1ZTo6c3RhcnRX
b3JrUXVldWVUaHJlYWQpLCB0aGlzLCB0aHJlYWROYW1lKTsKK30KKwordm9pZCBXb3JrUXVldWU6
OnBsYXRmb3JtSW52YWxpZGF0ZSgpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZXZlbnRM
b29wTG9jayk7CisKKyAgICBpZiAobV9ldmVudExvb3ApIHsKKyAgICAgICAgaWYgKGdfbWFpbl9s
b29wX2lzX3J1bm5pbmcobV9ldmVudExvb3AuZ2V0KCkpKQorICAgICAgICAgICAgZ19tYWluX2xv
b3BfcXVpdChtX2V2ZW50TG9vcC5nZXQoKSk7CisgICAgICAgIG1fZXZlbnRMb29wLmNsZWFyKCk7
CisgICAgfQorCisgICAgbV9ldmVudENvbnRleHQuY2xlYXIoKTsKK30KKwordm9pZCBXb3JrUXVl
dWU6OnN0YXJ0V29ya1F1ZXVlVGhyZWFkKFdvcmtRdWV1ZSogd29ya1F1ZXVlKQoreworICAgIHdv
cmtRdWV1ZS0+d29ya1F1ZXVlVGhyZWFkQm9keSgpOworfQorCit2b2lkIFdvcmtRdWV1ZTo6d29y
a1F1ZXVlVGhyZWFkQm9keSgpCit7CisgICAgZ19tYWluX2xvb3BfcnVuKG1fZXZlbnRMb29wLmdl
dCgpKTsKK30KKwordm9pZCBXb3JrUXVldWU6OnJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKGlu
dCBmaWxlRGVzY3JpcHRvciwgaW50IGNvbmRpdGlvbiwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYg
ZnVuY3Rpb24pCit7CisgICAgR1JlZlB0cjxHU29ja2V0PiBzb2NrZXQgPSBhZG9wdEdSZWYoZ19z
b2NrZXRfbmV3X2Zyb21fZmQoZmlsZURlc2NyaXB0b3IsIDApKTsKKyAgICBBU1NFUlQoc29ja2V0
KTsKKyAgICBHUmVmUHRyPEdDYW5jZWxsYWJsZT4gY2FuY2VsbGFibGUgPSBhZG9wdEdSZWYoZ19j
YW5jZWxsYWJsZV9uZXcoKSk7CisgICAgR1JlZlB0cjxHU291cmNlPiBkaXNwYXRjaFNvdXJjZSA9
IGFkb3B0R1JlZihnX3NvY2tldF9jcmVhdGVfc291cmNlKHNvY2tldC5nZXQoKSwgc3RhdGljX2Nh
c3Q8R0lPQ29uZGl0aW9uPihjb25kaXRpb24pLCBjYW5jZWxsYWJsZS5nZXQoKSkpOworICAgIEFT
U0VSVChkaXNwYXRjaFNvdXJjZSk7CisgICAgRXZlbnRTb3VyY2UqIGV2ZW50U291cmNlID0gbmV3
IEV2ZW50U291cmNlKGZ1bmN0aW9uLCB0aGlzLCBjYW5jZWxsYWJsZS5nZXQoKSk7CisgICAgQVNT
RVJUKGV2ZW50U291cmNlKTsKKworICAgIGdfc291cmNlX3NldF9jYWxsYmFjayhkaXNwYXRjaFNv
dXJjZS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oJldvcmtRdWV1ZTo6RXZl
bnRTb3VyY2U6OnBlcmZvcm1Xb3JrKSwKKyAgICAgICAgZXZlbnRTb3VyY2UsIHJlaW50ZXJwcmV0
X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KCZXb3JrUXVldWU6OkV2ZW50U291cmNlOjpkZWxldGVFdmVu
dFNvdXJjZSkpOworCisgICAgLy8gU2V0IHVwIHRoZSBldmVudCBzb3VyY2VzIHVuZGVyIHRoZSBt
dXRleCBzaW5jZSB0aGlzIGlzIHNoYXJlZCBhY3Jvc3MgbXVsdGlwbGUgdGhyZWFkcy4KKyAgICB7
CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2V2ZW50U291cmNlc0xvY2spOworICAgICAg
ICBWZWN0b3I8RXZlbnRTb3VyY2UqPiBzb3VyY2VzOworICAgICAgICBFdmVudFNvdXJjZUl0ZXJh
dG9yIGl0ID0gbV9ldmVudFNvdXJjZXMuZmluZChmaWxlRGVzY3JpcHRvcik7CisgICAgICAgIGlm
IChpdCAhPSBtX2V2ZW50U291cmNlcy5lbmQoKSkgCisgICAgICAgICAgICBzb3VyY2VzID0gaXQt
PnNlY29uZDsKKworICAgICAgICBzb3VyY2VzLmFwcGVuZChldmVudFNvdXJjZSk7CisgICAgICAg
IG1fZXZlbnRTb3VyY2VzLnNldChmaWxlRGVzY3JpcHRvciwgc291cmNlcyk7CisgICAgfQorCisg
ICAgZ19zb3VyY2VfYXR0YWNoKGRpc3BhdGNoU291cmNlLmdldCgpLCBtX2V2ZW50Q29udGV4dC5n
ZXQoKSk7Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjp1bnJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVy
KGludCBmaWxlRGVzY3JpcHRvcikKK3sKKyAgICBBU1NFUlQoZmlsZURlc2NyaXB0b3IpOworICAg
IAorICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2V2ZW50U291cmNlc0xvY2spOworICAgIAorICAg
IEV2ZW50U291cmNlSXRlcmF0b3IgaXQgPSBtX2V2ZW50U291cmNlcy5maW5kKGZpbGVEZXNjcmlw
dG9yKTsKKyAgICBBU1NFUlQoaXQgIT0gbV9ldmVudFNvdXJjZXMuZW5kKCkpOworICAgIEFTU0VS
VChtX2V2ZW50U291cmNlcy5jb250YWlucyhmaWxlRGVzY3JpcHRvcikpOworCisgICAgaWYgKGl0
ICE9IG1fZXZlbnRTb3VyY2VzLmVuZCgpKSB7CisgICAgICAgIFZlY3RvcjxFdmVudFNvdXJjZSo+
IHNvdXJjZXMgPSBpdC0+c2Vjb25kOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c291cmNlcy5zaXplKCk7IGkrKykKKyAgICAgICAgICAgIHNvdXJjZXNbaV0tPmNhbmNlbCgpOwor
CisgICAgICAgIG1fZXZlbnRTb3VyY2VzLnJlbW92ZShpdCk7CisgICAgfQorfQorCit2b2lkIFdv
cmtRdWV1ZTo6ZGlzcGF0Y2hPblNvdXJjZShHU291cmNlKiBkaXNwYXRjaFNvdXJjZSwgY29uc3Qg
RnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24sIEdTb3VyY2VGdW5jIHNvdXJjZUNhbGxiYWNrKQor
eworICAgIEV2ZW50U291cmNlKiBldmVudFNvdXJjZSA9IG5ldyBFdmVudFNvdXJjZShmdW5jdGlv
biwgdGhpcywgMCk7CisKKyAgICBnX3NvdXJjZV9zZXRfY2FsbGJhY2soZGlzcGF0Y2hTb3VyY2Us
IHNvdXJjZUNhbGxiYWNrLCBldmVudFNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVpbnRlcnByZXRfY2FzdDxHRGVzdHJveU5vdGlmeT4oJldvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6
OmRlbGV0ZUV2ZW50U291cmNlKSk7CisKKyAgICBnX3NvdXJjZV9hdHRhY2goZGlzcGF0Y2hTb3Vy
Y2UsIG1fZXZlbnRDb250ZXh0LmdldCgpKTsKK30KKwordm9pZCBXb3JrUXVldWU6OmRpc3BhdGNo
KGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQoreworICAgIEdSZWZQdHI8R1NvdXJj
ZT4gZGlzcGF0Y2hTb3VyY2UgPSBhZG9wdEdSZWYoZ19pZGxlX3NvdXJjZV9uZXcoKSk7CisgICAg
QVNTRVJUKGRpc3BhdGNoU291cmNlKTsKKyAgICBnX3NvdXJjZV9zZXRfcHJpb3JpdHkoZGlzcGF0
Y2hTb3VyY2UuZ2V0KCksIEdfUFJJT1JJVFlfREVGQVVMVCk7CisKKyAgICBkaXNwYXRjaE9uU291
cmNlKGRpc3BhdGNoU291cmNlLmdldCgpLCBmdW5jdGlvbiwgcmVpbnRlcnByZXRfY2FzdDxHU291
cmNlRnVuYz4oJldvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OnBlcmZvcm1Xb3JrT25jZSkpOworfQor
Cit2b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2hBZnRlckRlbGF5KGNvbnN0IEZ1bmN0aW9uPHZvaWQo
KT4mIGZ1bmN0aW9uLCBkb3VibGUgZGVsYXkpCit7CisgICAgR1JlZlB0cjxHU291cmNlPiBkaXNw
YXRjaFNvdXJjZSA9IGFkb3B0R1JlZihnX3RpbWVvdXRfc291cmNlX25ldyhzdGF0aWNfY2FzdDxn
dWludD4oZGVsYXkgKiAxMDAwKSkpOworICAgIEFTU0VSVChkaXNwYXRjaFNvdXJjZSk7CisKKyAg
ICBkaXNwYXRjaE9uU291cmNlKGRpc3BhdGNoU291cmNlLmdldCgpLCBmdW5jdGlvbiwgcmVpbnRl
cnByZXRfY2FzdDxHU291cmNlRnVuYz4oJldvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OnBlcmZvcm1X
b3JrT25jZSkpOworfQorCit2b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2hPblRlcm1pbmF0aW9uKFBs
YXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIgcHJvY2VzcywgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYg
ZnVuY3Rpb24pCit7CisgICAgR1JlZlB0cjxHU291cmNlPiBkaXNwYXRjaFNvdXJjZSA9IGFkb3B0
R1JlZihnX2NoaWxkX3dhdGNoX3NvdXJjZV9uZXcocHJvY2VzcykpOworICAgIEFTU0VSVChkaXNw
YXRjaFNvdXJjZSk7CisKKyAgICBkaXNwYXRjaE9uU291cmNlKGRpc3BhdGNoU291cmNlLmdldCgp
LCBmdW5jdGlvbiwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oJldvcmtRdWV1ZTo6RXZl
bnRTb3VyY2U6OnBlcmZvcm1Xb3JrT25UZXJtaW5hdGlvbikpOworfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvbWFjL1dvcmtRdWV1ZU1hYy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9tYWMvV29y
a1F1ZXVlTWFjLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZTQ3M2VlNWNjODRlNTg0MjliMDQzOWNjZDkyMWFj
MmM0OTJmZmFhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvbWFjL1dvcmtRdWV1
ZU1hYy5jcHAKQEAgLTAsMCArMSwxNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiV29ya1F1ZXVlLmgiCisKKyNpbmNsdWRlIDxtYWNoL21hY2hfaW5pdC5o
PgorI2luY2x1ZGUgPG1hY2gvbWFjaF9wb3J0Lmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIu
aD4KKwordm9pZCBXb3JrUXVldWU6OmV4ZWN1dGVGdW5jdGlvbih2b2lkKiBjb250ZXh0KQorewor
ICAgIFdvcmtRdWV1ZSogcXVldWUgPSBzdGF0aWNfY2FzdDxXb3JrUXVldWUqPihkaXNwYXRjaF9n
ZXRfY29udGV4dChkaXNwYXRjaF9nZXRfY3VycmVudF9xdWV1ZSgpKSk7CisgICAgT3duUHRyPEZ1
bmN0aW9uPHZvaWQoKT4gPiBmdW5jdGlvbiA9IGFkb3B0UHRyKHN0YXRpY19jYXN0PEZ1bmN0aW9u
PHZvaWQoKT4qPihjb250ZXh0KSk7CisgICAgCisgICAgeworICAgICAgICBNdXRleExvY2tlciBs
b2NrZXIocXVldWUtPm1faXNWYWxpZE11dGV4KTsKKyAgICAgICAgaWYgKCFxdWV1ZS0+bV9pc1Zh
bGlkKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgICgqZnVuY3Rpb24pKCk7Cit9
CisKK3ZvaWQgV29ya1F1ZXVlOjpkaXNwYXRjaChjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5j
dGlvbikKK3sKKyAgICBkaXNwYXRjaF9hc3luY19mKG1fZGlzcGF0Y2hRdWV1ZSwgbmV3IEZ1bmN0
aW9uPHZvaWQoKT4oZnVuY3Rpb24pLCBleGVjdXRlRnVuY3Rpb24pOworfQorCit2b2lkIFdvcmtR
dWV1ZTo6ZGlzcGF0Y2hBZnRlckRlbGF5KGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9u
LCBkb3VibGUgZGVsYXkpCit7CisgICAgZGlzcGF0Y2hfdGltZV90IGRlbGF5VGltZSA9IGRpc3Bh
dGNoX3RpbWUoRElTUEFUQ0hfVElNRV9OT1csIGRlbGF5ICogTlNFQ19QRVJfU0VDKTsKKworICAg
IGRpc3BhdGNoX2FmdGVyX2YoZGVsYXlUaW1lLCBtX2Rpc3BhdGNoUXVldWUsIG5ldyBGdW5jdGlv
bjx2b2lkKCk+KGZ1bmN0aW9uKSwgZXhlY3V0ZUZ1bmN0aW9uKTsKK30KKworY2xhc3MgV29ya1F1
ZXVlOjpFdmVudFNvdXJjZSB7CitwdWJsaWM6CisgICAgRXZlbnRTb3VyY2UoTWFjaFBvcnRFdmVu
dFR5cGUgZXZlbnRUeXBlLCBkaXNwYXRjaF9zb3VyY2VfdCBkaXNwYXRjaFNvdXJjZSwgY29uc3Qg
RnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCisgICAgICAgIDogbV9ldmVudFR5cGUoZXZlbnRU
eXBlKQorICAgICAgICAsIG1fZGlzcGF0Y2hTb3VyY2UoZGlzcGF0Y2hTb3VyY2UpCisgICAgICAg
ICwgbV9mdW5jdGlvbihmdW5jdGlvbikKKyAgICB7CisgICAgfQorICAgIAorICAgIGRpc3BhdGNo
X3NvdXJjZV90IGRpc3BhdGNoU291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9kaXNwYXRjaFNvdXJj
ZTsgfQorICAgIAorICAgIHN0YXRpYyB2b2lkIGV2ZW50SGFuZGxlcih2b2lkKiBzb3VyY2UpIAor
ICAgIHsKKyAgICAgICAgRXZlbnRTb3VyY2UqIGV2ZW50U291cmNlID0gc3RhdGljX2Nhc3Q8RXZl
bnRTb3VyY2UqPihzb3VyY2UpOworICAgICAgICAKKyAgICAgICAgZXZlbnRTb3VyY2UtPm1fZnVu
Y3Rpb24oKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgY2FuY2VsSGFuZGxlcih2b2lk
KiBzb3VyY2UpCisgICAgeworICAgICAgICBFdmVudFNvdXJjZSogZXZlbnRTb3VyY2UgPSBzdGF0
aWNfY2FzdDxFdmVudFNvdXJjZSo+KHNvdXJjZSk7CisgICAgICAgIAorICAgICAgICBtYWNoX3Bv
cnRfdCBtYWNoUG9ydCA9IGRpc3BhdGNoX3NvdXJjZV9nZXRfaGFuZGxlKGV2ZW50U291cmNlLT5t
X2Rpc3BhdGNoU291cmNlKTsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAoZXZlbnRTb3VyY2Ut
Pm1fZXZlbnRUeXBlKSB7CisgICAgICAgIGNhc2UgTWFjaFBvcnREYXRhQXZhaWxhYmxlOgorICAg
ICAgICAgICAgLy8gUmVsZWFzZSBvdXIgcmVjZWl2ZSByaWdodC4KKyAgICAgICAgICAgIG1hY2hf
cG9ydF9tb2RfcmVmcyhtYWNoX3Rhc2tfc2VsZigpLCBtYWNoUG9ydCwgTUFDSF9QT1JUX1JJR0hU
X1JFQ0VJVkUsIC0xKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1hY2hQb3J0
RGVhZE5hbWVOb3RpZmljYXRpb246CisgICAgICAgICAgICAvLyBSZWxlYXNlIG91ciBzZW5kIHJp
Z2h0LgorICAgICAgICAgICAgbWFjaF9wb3J0X2RlYWxsb2NhdGUobWFjaF90YXNrX3NlbGYoKSwg
bWFjaFBvcnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisg
ICAgc3RhdGljIHZvaWQgZmluYWxpemVIYW5kbGVyKHZvaWQqIHNvdXJjZSkKKyAgICB7CisgICAg
ICAgIEV2ZW50U291cmNlKiBldmVudFNvdXJjZSA9IHN0YXRpY19jYXN0PEV2ZW50U291cmNlKj4o
c291cmNlKTsKKyAgICAgICAgCisgICAgICAgIGRlbGV0ZSBldmVudFNvdXJjZTsKKyAgICB9Cisg
ICAgCitwcml2YXRlOgorICAgIE1hY2hQb3J0RXZlbnRUeXBlIG1fZXZlbnRUeXBlOworICAgIAor
ICAgIC8vIFRoaXMgaXMgYSB3ZWFrIHJlZmVyZW5jZSwgc2luY2UgbV9kaXNwYXRjaFNvdXJjZSBy
ZWZlcmVuY2VzIHRoZSBldmVudCBzb3VyY2UuCisgICAgZGlzcGF0Y2hfc291cmNlX3QgbV9kaXNw
YXRjaFNvdXJjZTsKKworICAgIEZ1bmN0aW9uPHZvaWQoKT4gbV9mdW5jdGlvbjsKK307CisKK3Zv
aWQgV29ya1F1ZXVlOjpyZWdpc3Rlck1hY2hQb3J0RXZlbnRIYW5kbGVyKG1hY2hfcG9ydF90IG1h
Y2hQb3J0LCBNYWNoUG9ydEV2ZW50VHlwZSBldmVudFR5cGUsIGNvbnN0IEZ1bmN0aW9uPHZvaWQo
KT4mIGZ1bmN0aW9uKQoreworICAgIGRpc3BhdGNoX3NvdXJjZV90eXBlX3Qgc291cmNlVHlwZSA9
IDA7CisgICAgc3dpdGNoIChldmVudFR5cGUpIHsKKyAgICBjYXNlIE1hY2hQb3J0RGF0YUF2YWls
YWJsZToKKyAgICAgICAgc291cmNlVHlwZSA9IERJU1BBVENIX1NPVVJDRV9UWVBFX01BQ0hfUkVD
VjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNYWNoUG9ydERlYWROYW1lTm90aWZpY2F0aW9u
OgorICAgICAgICBzb3VyY2VUeXBlID0gRElTUEFUQ0hfU09VUkNFX1RZUEVfTUFDSF9TRU5EOwor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgZGlzcGF0Y2hfc291cmNlX3QgZGlzcGF0
Y2hTb3VyY2UgPSBkaXNwYXRjaF9zb3VyY2VfY3JlYXRlKHNvdXJjZVR5cGUsIG1hY2hQb3J0LCAw
LCBtX2Rpc3BhdGNoUXVldWUpOworICAgIAorICAgIEV2ZW50U291cmNlKiBldmVudFNvdXJjZSA9
IG5ldyBFdmVudFNvdXJjZShldmVudFR5cGUsIGRpc3BhdGNoU291cmNlLCBmdW5jdGlvbik7Cisg
ICAgZGlzcGF0Y2hfc2V0X2NvbnRleHQoZGlzcGF0Y2hTb3VyY2UsIGV2ZW50U291cmNlKTsKKyAg
ICAKKyAgICBkaXNwYXRjaF9zb3VyY2Vfc2V0X2V2ZW50X2hhbmRsZXJfZihkaXNwYXRjaFNvdXJj
ZSwgJkV2ZW50U291cmNlOjpldmVudEhhbmRsZXIpOworICAgIGRpc3BhdGNoX3NvdXJjZV9zZXRf
Y2FuY2VsX2hhbmRsZXJfZihkaXNwYXRjaFNvdXJjZSwgJkV2ZW50U291cmNlOjpjYW5jZWxIYW5k
bGVyKTsKKyAgICBkaXNwYXRjaF9zZXRfZmluYWxpemVyX2YoZGlzcGF0Y2hTb3VyY2UsICZFdmVu
dFNvdXJjZTo6ZmluYWxpemVIYW5kbGVyKTsKKyAgICAKKyAgICAvLyBBZGQgdGhlIHNvdXJjZSB0
byBvdXIgc2V0IG9mIHNvdXJjZXMuCisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIo
bV9ldmVudFNvdXJjZXNNdXRleCk7CisgICAgICAgIAorICAgICAgICBBU1NFUlQoIW1fZXZlbnRT
b3VyY2VzLmNvbnRhaW5zKG1hY2hQb3J0KSk7CisgICAgICAgIAorICAgICAgICBtX2V2ZW50U291
cmNlcy5zZXQobWFjaFBvcnQsIGV2ZW50U291cmNlKTsKKyAgICAgICAgCisgICAgICAgIC8vIEFu
ZCBzdGFydCBpdCEKKyAgICAgICAgZGlzcGF0Y2hfcmVzdW1lKGRpc3BhdGNoU291cmNlKTsKKyAg
ICB9Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjp1bnJlZ2lzdGVyTWFjaFBvcnRFdmVudEhhbmRsZXIo
bWFjaF9wb3J0X3QgbWFjaFBvcnQpCit7CisgICAgQVNTRVJUKG1hY2hQb3J0KTsKKyAgICAKKyAg
ICBNdXRleExvY2tlciBsb2NrZXIobV9ldmVudFNvdXJjZXNNdXRleCk7CisgICAgCisgICAgSGFz
aE1hcDxtYWNoX3BvcnRfdCwgRXZlbnRTb3VyY2UqPjo6aXRlcmF0b3IgaXQgPSBtX2V2ZW50U291
cmNlcy5maW5kKG1hY2hQb3J0KTsKKyAgICBBU1NFUlQoaXQgIT0gbV9ldmVudFNvdXJjZXMuZW5k
KCkpOworICAgIAorICAgIEFTU0VSVChtX2V2ZW50U291cmNlcy5jb250YWlucyhtYWNoUG9ydCkp
OworCisgICAgRXZlbnRTb3VyY2UqIGV2ZW50U291cmNlID0gaXQtPnNlY29uZDsKKyAgICAvLyBD
YW5jZWwgYW5kIHJlbGVhc2UgdGhlIHNvdXJjZS4gSXQgd2lsbCBiZSBkZWxldGVkIGluIGl0cyBm
aW5hbGl6ZSBoYW5kbGVyLgorICAgIGRpc3BhdGNoX3NvdXJjZV9jYW5jZWwoZXZlbnRTb3VyY2Ut
PmRpc3BhdGNoU291cmNlKCkpOworICAgIGRpc3BhdGNoX3JlbGVhc2UoZXZlbnRTb3VyY2UtPmRp
c3BhdGNoU291cmNlKCkpOworCisgICAgbV9ldmVudFNvdXJjZXMucmVtb3ZlKGl0KTsgICAgCit9
CisKK3ZvaWQgV29ya1F1ZXVlOjpwbGF0Zm9ybUluaXRpYWxpemUoY29uc3QgY2hhciogbmFtZSkK
K3sKKyAgICBtX2Rpc3BhdGNoUXVldWUgPSBkaXNwYXRjaF9xdWV1ZV9jcmVhdGUobmFtZSwgMCk7
CisgICAgZGlzcGF0Y2hfc2V0X2NvbnRleHQobV9kaXNwYXRjaFF1ZXVlLCB0aGlzKTsKK30KKwor
dm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCit7CisjaWYgIUFTU0VSVF9ESVNB
QkxFRAorICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2V2ZW50U291cmNlc011dGV4KTsKKyAgICBB
U1NFUlQobV9ldmVudFNvdXJjZXMuaXNFbXB0eSgpKTsKKyNlbmRpZgorCisgICAgZGlzcGF0Y2hf
cmVsZWFzZShtX2Rpc3BhdGNoUXVldWUpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
cXQvV29ya1F1ZXVlUXQuY3BwIGIvU291cmNlL1dURi93dGYvcXQvV29ya1F1ZXVlUXQuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmQzYTc5YmUwODAzYTYyMzU3NmMzNGI0Njc0YzNjZDNiMDMwODhmYmEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9xdC9Xb3JrUXVldWVRdC5jcHAKQEAgLTAsMCAr
MSwxMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9v
ciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiV29ya1F1ZXVlLmgiCisKKyNpbmNsdWRlIDxRT2JqZWN0PgorI2luY2x1ZGUgPFFQ
cm9jZXNzPgorI2luY2x1ZGUgPFFUaHJlYWQ+CisjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1l
bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKworbmFtZXNwYWNlIFdURiB7CisK
K2NsYXNzIFdvcmtRdWV1ZTo6V29ya0l0ZW1RdCA6IHB1YmxpYyBRT2JqZWN0IHsKKyAgICBRX09C
SkVDVAorcHVibGljOgorICAgIFdvcmtJdGVtUXQoV29ya1F1ZXVlKiB3b3JrUXVldWUsIGNvbnN0
IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQorICAgICAgICA6IG1fcXVldWUod29ya1F1ZXVl
KQorICAgICAgICAsIG1fc291cmNlKDApCisgICAgICAgICwgbV9zaWduYWwoMCkKKyAgICAgICAg
LCBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQorICAgIHsKKyAgICB9CisKKyAgICBXb3JrSXRlbVF0KFdv
cmtRdWV1ZSogd29ya1F1ZXVlLCBRT2JqZWN0KiBzb3VyY2UsIGNvbnN0IGNoYXIqIHNpZ25hbCwg
Y29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCisgICAgICAgIDogbV9xdWV1ZSh3b3Jr
UXVldWUpCisgICAgICAgICwgbV9zb3VyY2Uoc291cmNlKQorICAgICAgICAsIG1fc2lnbmFsKHNp
Z25hbCkKKyAgICAgICAgLCBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQorICAgIHsKKyAgICAgICAgY29u
bmVjdChtX3NvdXJjZSwgbV9zaWduYWwsIFNMT1QoZXhlY3V0ZSgpKSwgUXQ6OlF1ZXVlZENvbm5l
Y3Rpb24pOworICAgIH0KKworICAgIH5Xb3JrSXRlbVF0KCkKKyAgICB7CisgICAgfQorCisgICAg
UV9TTE9UIHZvaWQgZXhlY3V0ZSgpIAorICAgIHsgCisgICAgICAgIGlmIChtX3F1ZXVlLT5tX2lz
VmFsaWQpCisgICAgICAgICAgICBtX2Z1bmN0aW9uKCk7CisgICAgfQorCisgICAgUV9TTE9UIHZv
aWQgZXhlY3V0ZUFuZERlbGV0ZSgpCisgICAgeworICAgICAgICBleGVjdXRlKCk7CisgICAgICAg
IGRlbGV0ZSB0aGlzOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCB0aW1lckV2ZW50KFFUaW1l
ckV2ZW50KikKKyAgICB7CisgICAgICAgIGV4ZWN1dGVBbmREZWxldGUoKTsKKyAgICB9CisKKyAg
ICBXb3JrUXVldWUqIG1fcXVldWU7CisgICAgUU9iamVjdCogbV9zb3VyY2U7CisgICAgY29uc3Qg
Y2hhciogbV9zaWduYWw7CisgICAgRnVuY3Rpb248dm9pZCgpPiBtX2Z1bmN0aW9uOworfTsKKwor
UVNvY2tldE5vdGlmaWVyKiBXb3JrUXVldWU6OnJlZ2lzdGVyU29ja2V0RXZlbnRIYW5kbGVyKGlu
dCBzb2NrZXREZXNjcmlwdG9yLCBRU29ja2V0Tm90aWZpZXI6OlR5cGUgdHlwZSwgY29uc3QgRnVu
Y3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCit7CisgICAgQVNTRVJUKG1fd29ya1RocmVhZCk7CisK
KyAgICBRU29ja2V0Tm90aWZpZXIqIG5vdGlmaWVyID0gbmV3IFFTb2NrZXROb3RpZmllcihzb2Nr
ZXREZXNjcmlwdG9yLCB0eXBlLCAwKTsKKyAgICBub3RpZmllci0+c2V0RW5hYmxlZChmYWxzZSk7
CisgICAgbm90aWZpZXItPm1vdmVUb1RocmVhZChtX3dvcmtUaHJlYWQpOworICAgIFdvcmtRdWV1
ZTo6V29ya0l0ZW1RdCogaXRlbVF0ID0gbmV3IFdvcmtRdWV1ZTo6V29ya0l0ZW1RdCh0aGlzLCBu
b3RpZmllciwgU0lHTkFMKGFjdGl2YXRlZChpbnQpKSwgZnVuY3Rpb24pOworICAgIGl0ZW1RdC0+
bW92ZVRvVGhyZWFkKG1fd29ya1RocmVhZCk7CisgICAgbm90aWZpZXItPnNldEVuYWJsZWQodHJ1
ZSk7CisgICAgcmV0dXJuIG5vdGlmaWVyOworfQorCit2b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1J
bml0aWFsaXplKGNvbnN0IGNoYXIqKQoreworICAgIG1fd29ya1RocmVhZCA9IG5ldyBRVGhyZWFk
KCk7CisgICAgbV93b3JrVGhyZWFkLT5zdGFydCgpOworfQorCit2b2lkIFdvcmtRdWV1ZTo6cGxh
dGZvcm1JbnZhbGlkYXRlKCkKK3sKKyAgICBtX3dvcmtUaHJlYWQtPmV4aXQoKTsKKyAgICBtX3dv
cmtUaHJlYWQtPndhaXQoKTsKKyAgICBkZWxldGUgbV93b3JrVGhyZWFkOworfQorCit2b2lkIFdv
cmtRdWV1ZTo6ZGlzcGF0Y2goY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCit7Cisg
ICAgV29ya1F1ZXVlOjpXb3JrSXRlbVF0KiBpdGVtUXQgPSBuZXcgV29ya1F1ZXVlOjpXb3JrSXRl
bVF0KHRoaXMsIGZ1bmN0aW9uKTsKKyAgICBpdGVtUXQtPm1vdmVUb1RocmVhZChtX3dvcmtUaHJl
YWQpOworICAgIFFNZXRhT2JqZWN0OjppbnZva2VNZXRob2QoaXRlbVF0LCAiZXhlY3V0ZUFuZERl
bGV0ZSIsIFF0OjpRdWV1ZWRDb25uZWN0aW9uKTsKK30KKwordm9pZCBXb3JrUXVldWU6OmRpc3Bh
dGNoQWZ0ZXJEZWxheShjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbiwgZG91YmxlIGRl
bGF5SW5TZWNvbmQpCit7CisgICAgV29ya1F1ZXVlOjpXb3JrSXRlbVF0KiBpdGVtUXQgPSBuZXcg
V29ya1F1ZXVlOjpXb3JrSXRlbVF0KHRoaXMsIGZ1bmN0aW9uKTsKKyAgICBpdGVtUXQtPnN0YXJ0
VGltZXIoc3RhdGljX2Nhc3Q8aW50PihkZWxheUluU2Vjb25kICogMTAwMCkpOworICAgIGl0ZW1R
dC0+bW92ZVRvVGhyZWFkKG1fd29ya1RocmVhZCk7Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjpkaXNw
YXRjaE9uVGVybWluYXRpb24oUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllciBwcm9jZXNzLCBjb25z
dCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKK3sKKyAgICBXb3JrUXVldWU6OldvcmtJdGVt
UXQqIGl0ZW1RdCA9IG5ldyBXb3JrUXVldWU6OldvcmtJdGVtUXQodGhpcywgcHJvY2VzcywgU0lH
TkFMKGZpbmlzaGVkKGludCwgUVByb2Nlc3M6OkV4aXRTdGF0dXMpKSwgZnVuY3Rpb24pOworICAg
IGl0ZW1RdC0+bW92ZVRvVGhyZWFkKG1fd29ya1RocmVhZCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdURgorCisjaW5jbHVkZSAiV29ya1F1ZXVlUXQubW9jIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvd2luL1dvcmtRdWV1ZVdpbi5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi93aW4vV29ya1F1ZXVl
V2luLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5hYWJhZGJkYTg5NWUwN2Q5ZWU1MzMwNzk1Y2M5NGU2MTdlYjkx
ZDdiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvd2luL1dvcmtRdWV1ZVdpbi5j
cHAKQEAgLTAsMCArMSwyOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiV29ya1F1ZXVlLmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVk
Lmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCitpbmxpbmUgV29ya1F1ZXVlOjpXb3Jr
SXRlbVdpbjo6V29ya0l0ZW1XaW4oY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24sIFdv
cmtRdWV1ZSogcXVldWUpCisgICAgOiBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQorICAgICwgbV9xdWV1
ZShxdWV1ZSkKK3sKK30KKworUGFzc1JlZlB0cjxXb3JrUXVldWU6OldvcmtJdGVtV2luPiBXb3Jr
UXVldWU6OldvcmtJdGVtV2luOjpjcmVhdGUoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rp
b24sIFdvcmtRdWV1ZSogcXVldWUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXb3JrSXRl
bVdpbihmdW5jdGlvbiwgcXVldWUpKTsKK30KKworV29ya1F1ZXVlOjpXb3JrSXRlbVdpbjo6fldv
cmtJdGVtV2luKCkKK3sKK30KKworaW5saW5lIFdvcmtRdWV1ZTo6SGFuZGxlV29ya0l0ZW06Okhh
bmRsZVdvcmtJdGVtKEhBTkRMRSBoYW5kbGUsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0
aW9uLCBXb3JrUXVldWUqIHF1ZXVlKQorICAgIDogV29ya0l0ZW1XaW4oZnVuY3Rpb24sIHF1ZXVl
KQorICAgICwgbV9oYW5kbGUoaGFuZGxlKQorICAgICwgbV93YWl0SGFuZGxlKDApCit7CisgICAg
QVNTRVJUX0FSRyhoYW5kbGUsIGhhbmRsZSk7Cit9CisKK1Bhc3NSZWZQdHI8V29ya1F1ZXVlOjpI
YW5kbGVXb3JrSXRlbT4gV29ya1F1ZXVlOjpIYW5kbGVXb3JrSXRlbTo6Y3JlYXRlQnlBZG9wdGlu
Z0hhbmRsZShIQU5ETEUgaGFuZGxlLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbiwg
V29ya1F1ZXVlKiBxdWV1ZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhhbmRsZVdvcmtJ
dGVtKGhhbmRsZSwgZnVuY3Rpb24sIHF1ZXVlKSk7Cit9CisKK1dvcmtRdWV1ZTo6SGFuZGxlV29y
a0l0ZW06On5IYW5kbGVXb3JrSXRlbSgpCit7CisgICAgOjpDbG9zZUhhbmRsZShtX2hhbmRsZSk7
Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjpoYW5kbGVDYWxsYmFjayh2b2lkKiBjb250ZXh0LCBCT09M
RUFOIHRpbWVyT3JXYWl0RmlyZWQpCit7CisgICAgQVNTRVJUX0FSRyhjb250ZXh0LCBjb250ZXh0
KTsKKyAgICBBU1NFUlRfQVJHKHRpbWVyT3JXYWl0RmlyZWQsICF0aW1lck9yV2FpdEZpcmVkKTsK
KworICAgIFdvcmtJdGVtV2luKiBpdGVtID0gc3RhdGljX2Nhc3Q8V29ya0l0ZW1XaW4qPihjb250
ZXh0KTsKKyAgICBXb3JrUXVldWUqIHF1ZXVlID0gaXRlbS0+cXVldWUoKTsKKworICAgIHsKKyAg
ICAgICAgTXV0ZXhMb2NrZXIgbG9jayhxdWV1ZS0+bV93b3JrSXRlbVF1ZXVlTG9jayk7CisgICAg
ICAgIHF1ZXVlLT5tX3dvcmtJdGVtUXVldWUuYXBwZW5kKGl0ZW0pOworCisgICAgICAgIC8vIElm
IG5vIG90aGVyIHRocmVhZCBpcyBwZXJmb3JtaW5nIHdvcmssIHdlIGNhbiBkbyBpdCBvbiB0aGlz
IHRocmVhZC4KKyAgICAgICAgaWYgKCFxdWV1ZS0+dHJ5UmVnaXN0ZXJBc1dvcmtUaHJlYWQoKSkg
eworICAgICAgICAgICAgLy8gU29tZSBvdGhlciB0aHJlYWQgaXMgcGVyZm9ybWluZyB3b3JrLiBT
aW5jZSB3ZSBob2xkIHRoZSBxdWV1ZSBsb2NrLCB3ZSBjYW4gYmUgc3VyZQorICAgICAgICAgICAg
Ly8gdGhhdCB0aGUgd29yayB0aHJlYWQgaXMgbm90IGV4aXRpbmcgZHVlIHRvIGFuIGVtcHR5IHF1
ZXVlIGFuZCB3aWxsIHByb2Nlc3MgdGhlIHdvcmsKKyAgICAgICAgICAgIC8vIGl0ZW0gd2UganVz
dCBhZGRlZCB0byBpdC4gSWYgd2Ugd2VyZW4ndCBob2xkaW5nIHRoZSBsb2NrIHdlJ2QgaGF2ZSB0
byBzaWduYWwKKyAgICAgICAgICAgIC8vIG1fcGVyZm9ybVdvcmtFdmVudCB0byBtYWtlIHN1cmUg
dGhlIHdvcmsgaXRlbSBnb3QgcGlja2VkIHVwLgorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgfQorCisgICAgcXVldWUtPnBlcmZvcm1Xb3JrT25SZWdpc3RlcmVkV29ya1RocmVh
ZCgpOworfQorCit2b2lkIFdvcmtRdWV1ZTo6cmVnaXN0ZXJIYW5kbGUoSEFORExFIGhhbmRsZSwg
Y29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCit7CisgICAgUmVmUHRyPEhhbmRsZVdv
cmtJdGVtPiBoYW5kbGVJdGVtID0gSGFuZGxlV29ya0l0ZW06OmNyZWF0ZUJ5QWRvcHRpbmdIYW5k
bGUoaGFuZGxlLCBmdW5jdGlvbiwgdGhpcyk7CisKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2Vy
IGxvY2sobV9oYW5kbGVzTG9jayk7CisgICAgICAgIEFTU0VSVF9BUkcoaGFuZGxlLCAhbV9oYW5k
bGVzLmNvbnRhaW5zKGhhbmRsZSkpOworICAgICAgICBtX2hhbmRsZXMuc2V0KGhhbmRsZSwgaGFu
ZGxlSXRlbSk7CisgICAgfQorCisgICAgSEFORExFIHdhaXRIYW5kbGU7CisgICAgaWYgKCE6OlJl
Z2lzdGVyV2FpdEZvclNpbmdsZU9iamVjdCgmd2FpdEhhbmRsZSwgaGFuZGxlLCBoYW5kbGVDYWxs
YmFjaywgaGFuZGxlSXRlbS5nZXQoKSwgSU5GSU5JVEUsIFdUX0VYRUNVVEVERUZBVUxUKSkgewor
ICAgICAgICBEV09SRCBlcnJvciA9IDo6R2V0TGFzdEVycm9yKCk7CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICBoYW5kbGVJdGVtLT5zZXRXYWl0SGFuZGxlKHdhaXRI
YW5kbGUpOworfQorCit2b2lkIFdvcmtRdWV1ZTo6dW5yZWdpc3RlckFuZENsb3NlSGFuZGxlKEhB
TkRMRSBoYW5kbGUpCit7CisgICAgUmVmUHRyPEhhbmRsZVdvcmtJdGVtPiBpdGVtOworICAgIHsK
KyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1faGFuZGxlc0xvY2spOworICAgICAgICBBU1NF
UlRfQVJHKGhhbmRsZSwgbV9oYW5kbGVzLmNvbnRhaW5zKGhhbmRsZSkpOworICAgICAgICBpdGVt
ID0gbV9oYW5kbGVzLnRha2UoaGFuZGxlKTsKKyAgICB9CisKKyAgICB1bnJlZ2lzdGVyV2FpdEFu
ZERlc3Ryb3lJdGVtU29vbihpdGVtLnJlbGVhc2UoKSk7Cit9CisKK0RXT1JEIFdvcmtRdWV1ZTo6
d29ya1RocmVhZENhbGxiYWNrKHZvaWQqIGNvbnRleHQpCit7CisgICAgQVNTRVJUX0FSRyhjb250
ZXh0LCBjb250ZXh0KTsKKworICAgIFdvcmtRdWV1ZSogcXVldWUgPSBzdGF0aWNfY2FzdDxXb3Jr
UXVldWUqPihjb250ZXh0KTsKKworICAgIGlmICghcXVldWUtPnRyeVJlZ2lzdGVyQXNXb3JrVGhy
ZWFkKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcXVldWUtPnBlcmZvcm1Xb3JrT25SZWdp
c3RlcmVkV29ya1RocmVhZCgpOworICAgIHJldHVybiAwOworfQorCit2b2lkIFdvcmtRdWV1ZTo6
cGVyZm9ybVdvcmtPblJlZ2lzdGVyZWRXb3JrVGhyZWFkKCkKK3sKKyAgICBBU1NFUlQobV9pc1dv
cmtUaHJlYWRSZWdpc3RlcmVkKTsKKworICAgIGJvb2wgaXNWYWxpZCA9IHRydWU7CisKKyAgICBt
X3dvcmtJdGVtUXVldWVMb2NrLmxvY2soKTsKKworICAgIHdoaWxlIChpc1ZhbGlkICYmICFtX3dv
cmtJdGVtUXVldWUuaXNFbXB0eSgpKSB7CisgICAgICAgIFZlY3RvcjxSZWZQdHI8V29ya0l0ZW1X
aW4+ID4gd29ya0l0ZW1RdWV1ZTsKKyAgICAgICAgbV93b3JrSXRlbVF1ZXVlLnN3YXAod29ya0l0
ZW1RdWV1ZSk7CisKKyAgICAgICAgLy8gQWxsb3cgbW9yZSB3b3JrIHRvIGJlIHNjaGVkdWxlZCB3
aGlsZSB3ZSdyZSBub3QgdXNpbmcgdGhlIHF1ZXVlIGRpcmVjdGx5LgorICAgICAgICBtX3dvcmtJ
dGVtUXVldWVMb2NrLnVubG9jaygpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdv
cmtJdGVtUXVldWUuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tl
cihtX2lzVmFsaWRNdXRleCk7CisgICAgICAgICAgICBpc1ZhbGlkID0gbV9pc1ZhbGlkOworICAg
ICAgICAgICAgaWYgKCFpc1ZhbGlkKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgd29ya0l0ZW1RdWV1ZVtpXS0+ZnVuY3Rpb24oKSgpOworICAgICAgICB9CisgICAgICAgIG1f
d29ya0l0ZW1RdWV1ZUxvY2subG9jaygpOworICAgIH0KKworICAgIC8vIE9uZSBpbnZhcmlhbnQg
d2UgbWFpbnRhaW4gaXMgdGhhdCBhbnkgd29yayBzY2hlZHVsZWQgd2hpbGUgYSB3b3JrIHRocmVh
ZCBpcyByZWdpc3RlcmVkIHdpbGwKKyAgICAvLyBiZSBoYW5kbGVkIGJ5IHRoYXQgd29yayB0aHJl
YWQuIFVucmVnaXN0ZXIgYXMgdGhlIHdvcmsgdGhyZWFkIHdoaWxlIHRoZSBxdWV1ZSBsb2NrIGlz
IHN0aWxsCisgICAgLy8gaGVsZCBzbyB0aGF0IG5vIHdvcmsgY2FuIGJlIHNjaGVkdWxlZCB3aGls
ZSB3ZSdyZSBzdGlsbCByZWdpc3RlcmVkLgorICAgIHVucmVnaXN0ZXJBc1dvcmtUaHJlYWQoKTsK
KworICAgIG1fd29ya0l0ZW1RdWV1ZUxvY2sudW5sb2NrKCk7Cit9CisKK3ZvaWQgV29ya1F1ZXVl
OjpwbGF0Zm9ybUluaXRpYWxpemUoY29uc3QgY2hhciogbmFtZSkKK3sKKyAgICBtX2lzV29ya1Ro
cmVhZFJlZ2lzdGVyZWQgPSAwOworICAgIG1fdGltZXJRdWV1ZSA9IDo6Q3JlYXRlVGltZXJRdWV1
ZSgpOworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV90aW1lclF1ZXVlLCAiOjpDcmVhdGVUaW1l
clF1ZXVlIGZhaWxlZCB3aXRoIGVycm9yICVsdSIsIDo6R2V0TGFzdEVycm9yKCkpOworfQorCiti
b29sIFdvcmtRdWV1ZTo6dHJ5UmVnaXN0ZXJBc1dvcmtUaHJlYWQoKQoreworICAgIExPTkcgcmVz
dWx0ID0gOjpJbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZSgmbV9pc1dvcmtUaHJlYWRSZWdpc3Rl
cmVkLCAxLCAwKTsKKyAgICBBU1NFUlQoIXJlc3VsdCB8fCByZXN1bHQgPT0gMSk7CisgICAgcmV0
dXJuICFyZXN1bHQ7Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjp1bnJlZ2lzdGVyQXNXb3JrVGhyZWFk
KCkKK3sKKyAgICBMT05HIHJlc3VsdCA9IDo6SW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2UoJm1f
aXNXb3JrVGhyZWFkUmVnaXN0ZXJlZCwgMCwgMSk7CisgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQs
IHJlc3VsdCA9PSAxKTsKK30KKwordm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW52YWxpZGF0ZSgp
Cit7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIE11dGV4TG9ja2VyIGxvY2sobV9oYW5kbGVz
TG9jayk7CisgICAgQVNTRVJUKG1faGFuZGxlcy5pc0VtcHR5KCkpOworI2VuZGlmCisKKyAgICAv
LyBGSVhNRTogV2UgbmVlZCB0byBlbnN1cmUgdGhhdCBhbnkgdGltZXItcXVldWUgdGltZXJzIHRo
YXQgZmlyZSBhZnRlciB0aGlzIHBvaW50IGRvbid0IHRyeSB0bworICAgIC8vIGFjY2VzcyB0aGlz
IFdvcmtRdWV1ZSA8aHR0cDovL3dlYmtpdC5vcmcvYi80NDY5MD4uCisgICAgOjpEZWxldGVUaW1l
clF1ZXVlRXgobV90aW1lclF1ZXVlLCAwKTsKK30KKwordm9pZCBXb3JrUXVldWU6OmRpc3BhdGNo
KGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQoreworICAgIE11dGV4TG9ja2VyIGxv
Y2tlcihtX3dvcmtJdGVtUXVldWVMb2NrKTsKKworICAgIG1fd29ya0l0ZW1RdWV1ZS5hcHBlbmQo
V29ya0l0ZW1XaW46OmNyZWF0ZShmdW5jdGlvbiwgdGhpcykpOworCisgICAgLy8gU3Bhd24gYSB3
b3JrIHRocmVhZCB0byBwZXJmb3JtIHRoZSB3b3JrIHdlIGp1c3QgYWRkZWQuIEFzIGFuIG9wdGlt
aXphdGlvbiwgd2UgYXZvaWQKKyAgICAvLyBzcGF3bmluZyB0aGUgdGhyZWFkIGlmIGEgd29yayB0
aHJlYWQgaXMgYWxyZWFkeSByZWdpc3RlcmVkLiBUaGlzIHByZXZlbnRzIG11bHRpcGxlIHdvcmsK
KyAgICAvLyB0aHJlYWRzIGZyb20gYmVpbmcgc3Bhd25lZCBpbiBtb3N0IGNhc2VzLiAoTm90ZSB0
aGF0IHdoZW4gYSB3b3JrIHRocmVhZCBoYXMgYmVlbiBzcGF3bmVkIGJ1dAorICAgIC8vIGhhc24n
dCByZWdpc3RlcmVkIGl0c2VsZiB5ZXQsIG1faXNXb3JrVGhyZWFkUmVnaXN0ZXJlZCB3aWxsIGJl
IGZhbHNlIGFuZCB3ZSdsbCBlbmQgdXAKKyAgICAvLyBzcGF3bmluZyBhIHNlY29uZCB3b3JrIHRo
cmVhZCBoZXJlLiBCdXQgd29yayB0aHJlYWQgcmVnaXN0cmF0aW9uIHByb2Nlc3Mgd2lsbCBlbnN1
cmUgdGhhdAorICAgIC8vIG9ubHkgb25lIHRocmVhZCBhY3R1YWxseSBlbmRzIHVwIHBlcmZvcm1p
bmcgd29yay4pCisgICAgaWYgKCFtX2lzV29ya1RocmVhZFJlZ2lzdGVyZWQpCisgICAgICAgIDo6
UXVldWVVc2VyV29ya0l0ZW0od29ya1RocmVhZENhbGxiYWNrLCB0aGlzLCBXVF9FWEVDVVRFREVG
QVVMVCk7Cit9CisKK3N0cnVjdCBUaW1lckNvbnRleHQgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNv
dW50ZWQ8VGltZXJDb250ZXh0PiB7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGltZXJDb250ZXh0
PiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgVGltZXJDb250ZXh0KTsgfQorCisgICAg
V29ya1F1ZXVlKiBxdWV1ZTsKKyAgICBGdW5jdGlvbjx2b2lkKCk+IGZ1bmN0aW9uOworICAgIE11
dGV4IHRpbWVyTXV0ZXg7CisgICAgSEFORExFIHRpbWVyOworCitwcml2YXRlOgorICAgIFRpbWVy
Q29udGV4dCgpIDogcXVldWUoMCksIHRpbWVyKDApIHsgfQorfTsKKwordm9pZCBXb3JrUXVldWU6
OnRpbWVyQ2FsbGJhY2sodm9pZCogY29udGV4dCwgQk9PTEVBTiB0aW1lck9yV2FpdEZpcmVkKQor
eworICAgIEFTU0VSVF9BUkcoY29udGV4dCwgY29udGV4dCk7CisgICAgQVNTRVJUX1VOVVNFRCh0
aW1lck9yV2FpdEZpcmVkLCB0aW1lck9yV2FpdEZpcmVkKTsKKworICAgIC8vIEJhbGFuY2VkIGJ5
IGxlYWtSZWYgaW4gc2NoZWR1bGVXb3JrQWZ0ZXJEZWxheS4KKyAgICBSZWZQdHI8VGltZXJDb250
ZXh0PiB0aW1lckNvbnRleHQgPSBhZG9wdFJlZihzdGF0aWNfY2FzdDxUaW1lckNvbnRleHQqPihj
b250ZXh0KSk7CisKKyAgICB0aW1lckNvbnRleHQtPnF1ZXVlLT5kaXNwYXRjaCh0aW1lckNvbnRl
eHQtPmZ1bmN0aW9uKTsKKworICAgIE11dGV4TG9ja2VyIGxvY2sodGltZXJDb250ZXh0LT50aW1l
ck11dGV4KTsKKyAgICBBU1NFUlQodGltZXJDb250ZXh0LT50aW1lcik7CisgICAgQVNTRVJUKHRp
bWVyQ29udGV4dC0+cXVldWUtPm1fdGltZXJRdWV1ZSk7CisgICAgaWYgKCE6OkRlbGV0ZVRpbWVy
UXVldWVUaW1lcih0aW1lckNvbnRleHQtPnF1ZXVlLT5tX3RpbWVyUXVldWUsIHRpbWVyQ29udGV4
dC0+dGltZXIsIDApKQorICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGZhbHNlLCAiOjpEZWxl
dGVUaW1lclF1ZXVlVGltZXIgZmFpbGVkIHdpdGggZXJyb3IgJWx1IiwgOjpHZXRMYXN0RXJyb3Io
KSk7Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjpkaXNwYXRjaEFmdGVyRGVsYXkoY29uc3QgRnVuY3Rp
b248dm9pZCgpPiYgZnVuY3Rpb24sIGRvdWJsZSBkZWxheSkKK3sKKyAgICBBU1NFUlQobV90aW1l
clF1ZXVlKTsKKworICAgIFJlZlB0cjxUaW1lckNvbnRleHQ+IGNvbnRleHQgPSBUaW1lckNvbnRl
eHQ6OmNyZWF0ZSgpOworICAgIGNvbnRleHQtPnF1ZXVlID0gdGhpczsKKyAgICBjb250ZXh0LT5m
dW5jdGlvbiA9IGZ1bmN0aW9uOworCisgICAgeworICAgICAgICAvLyBUaGUgdGltZXIgY2FsbGJh
Y2sgY291bGQgZmlyZSBiZWZvcmUgOjpDcmVhdGVUaW1lclF1ZXVlVGltZXIgZXZlbiByZXR1cm5z
LCBzbyB3ZSBwcm90ZWN0CisgICAgICAgIC8vIGNvbnRleHQtPnRpbWVyIHdpdGggYSBtdXRleCB0
byBlbnN1cmUgdGhlIHRpbWVyIGNhbGxiYWNrIGRvZXNuJ3QgYWNjZXNzIGl0IGJlZm9yZSB0aGUK
KyAgICAgICAgLy8gdGltZXIgaGFuZGxlIGhhcyBiZWVuIHN0b3JlZCBpbiBpdC4KKyAgICAgICAg
TXV0ZXhMb2NrZXIgbG9jayhjb250ZXh0LT50aW1lck11dGV4KTsKKworICAgICAgICAvLyBTaW5j
ZSBvdXIgdGltZXIgY2FsbGJhY2sgaXMgcXVpY2ssIHdlIGNhbiBleGVjdXRlIGluIHRoZSB0aW1l
ciB0aHJlYWQgaXRzZWxmIGFuZCBhdm9pZAorICAgICAgICAvLyBhbiBleHRyYSB0aHJlYWQgc3dp
dGNoIG92ZXIgdG8gYSB3b3JrZXIgdGhyZWFkLgorICAgICAgICBpZiAoITo6Q3JlYXRlVGltZXJR
dWV1ZVRpbWVyKCZjb250ZXh0LT50aW1lciwgbV90aW1lclF1ZXVlLCB0aW1lckNhbGxiYWNrLCBj
b250ZXh0LmdldCgpLCBkZWxheSAqIDEwMDAsIDAsIFdUX0VYRUNVVEVJTlRJTUVSVEhSRUFEKSkg
eworICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShmYWxzZSwgIjo6Q3JlYXRlVGltZXJR
dWV1ZVRpbWVyIGZhaWxlZCB3aXRoIGVycm9yICVsdSIsIDo6R2V0TGFzdEVycm9yKCkpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gVGhlIHRpbWVyIGNh
bGxiYWNrIHdpbGwgaGFuZGxlIGRlc3Ryb3lpbmcgY29udGV4dC4KKyAgICBjb250ZXh0LnJlbGVh
c2UoKS5sZWFrUmVmKCk7Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjp1bnJlZ2lzdGVyV2FpdEFuZERl
c3Ryb3lJdGVtU29vbihQYXNzUmVmUHRyPEhhbmRsZVdvcmtJdGVtPiBpdGVtKQoreworICAgIC8v
IFdlJ3JlIGdvaW5nIHRvIG1ha2UgYSBibG9ja2luZyBjYWxsIHRvIDo6VW5yZWdpc3RlcldhaXRF
eCBiZWZvcmUgY2xvc2luZyB0aGUgaGFuZGxlLiAoVGhlCisgICAgLy8gYmxvY2tpbmcgdmVyc2lv
biBvZiA6OlVucmVnaXN0ZXJXYWl0RXggaXMgbXVjaCBzaW1wbGVyIHRoYW4gdGhlIG5vbi1ibG9j
a2luZyB2ZXJzaW9uLikgSWYgd2UKKyAgICAvLyBkbyB0aGlzIG9uIHRoZSBjdXJyZW50IHRocmVh
ZCwgd2UnbGwgZGVhZGxvY2sgaWYgd2UncmUgY3VycmVudGx5IGluIGEgY2FsbGJhY2sgZnVuY3Rp
b24gZm9yCisgICAgLy8gdGhlIHdhaXQgd2UncmUgdW5yZWdpc3RlcmluZy4gU28gaW5zdGVhZCB3
ZSBkbyBpdCBhc3luY2hyb25vdXNseSBvbiBzb21lIG90aGVyIHdvcmtlciB0aHJlYWQuCisKKyAg
ICA6OlF1ZXVlVXNlcldvcmtJdGVtKHVucmVnaXN0ZXJXYWl0QW5kRGVzdHJveUl0ZW1DYWxsYmFj
aywgaXRlbS5sZWFrUmVmKCksIFdUX0VYRUNVVEVERUZBVUxUKTsKK30KKworRFdPUkQgV0lOQVBJ
IFdvcmtRdWV1ZTo6dW5yZWdpc3RlcldhaXRBbmREZXN0cm95SXRlbUNhbGxiYWNrKHZvaWQqIGNv
bnRleHQpCit7CisgICAgQVNTRVJUX0FSRyhjb250ZXh0LCBjb250ZXh0KTsKKyAgICBSZWZQdHI8
SGFuZGxlV29ya0l0ZW0+IGl0ZW0gPSBhZG9wdFJlZihzdGF0aWNfY2FzdDxIYW5kbGVXb3JrSXRl
bSo+KGNvbnRleHQpKTsKKworICAgIC8vIE5vdyB0aGF0IHdlIGtub3cgd2UncmUgbm90IGluIGEg
Y2FsbGJhY2sgZnVuY3Rpb24gZm9yIHRoZSB3YWl0IHdlJ3JlIHVucmVnaXN0ZXJpbmcsIHdlIGNh
bgorICAgIC8vIG1ha2UgYSBibG9ja2luZyBjYWxsIHRvIDo6VW5yZWdpc3RlcldhaXRFeC4KKyAg
ICBpZiAoITo6VW5yZWdpc3RlcldhaXRFeChpdGVtLT53YWl0SGFuZGxlKCksIElOVkFMSURfSEFO
RExFX1ZBTFVFKSkgeworICAgICAgICBEV09SRCBlcnJvciA9IDo6R2V0TGFzdEVycm9yKCk7Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHJldHVybiAwOworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViS2l0
Mi9DTWFrZUxpc3RzLnR4dAppbmRleCAxZDQ3MDg4OWEzYTAwZTAyNDIzZDc2M2FmY2YzYTU2Yjc1
NzJkNjNhLi4xMzMwNTI0NWU5NGMwZGI1N2MxOTRkNGJkMDVkNjNlMTI1ODY0NjUyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9D
TWFrZUxpc3RzLnR4dApAQCAtMTAyLDcgKzEwMiw2IEBAIFNFVChXZWJLaXQyX0lOQ0xVREVfRElS
RUNUT1JJRVMKIFNFVChXZWJLaXQyX1NPVVJDRVMKICAgICBQbGF0Zm9ybS9Mb2dnaW5nLmNwcAog
ICAgIFBsYXRmb3JtL01vZHVsZS5jcHAKLSAgICBQbGF0Zm9ybS9Xb3JrUXVldWUuY3BwCiAKICAg
ICBQbGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50Q29kZXJzLmNwcAogICAgIFBsYXRmb3JtL0NvcmVJ
UEMvQXJndW1lbnREZWNvZGVyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvR05VbWFr
ZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXgg
NmMwNmQ1YWY5MzY0MmQ0NTg5MzU3YmEyMTM2MjZhNjA0OTVjYjY3Ni4uM2RkMmY2Njg3YjBlNTRm
NDZkYmFiNjY0ZTQyNWVlOTMzNmFhZjczNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvR05V
bWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5saXN0LmFt
CkBAIC0yNTMsNyArMjUzLDYgQEAgd2Via2l0Ml9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViS2l0
Mi9QbGF0Zm9ybS9Db3JlSVBDL3VuaXgvQ29ubmVjdGlvblVuaXguY3BwIFwKIAlTb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybS9ndGsvTG9nZ2luZ0d0ay5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1BsYXRm
b3JtL2d0ay9Nb2R1bGVHdGsuY3BwIFwKLQlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9ndGsvV29y
a1F1ZXVlR3RrLmNwcCBcCiAJU291cmNlL1dlYktpdDIvUGxhdGZvcm0vTG9nZ2luZy5jcHAgXAog
CVNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0xvZ2dpbmcuaCBcCiAJU291cmNlL1dlYktpdDIvUGxh
dGZvcm0vTW9kdWxlLmNwcCBcCkBAIC0yNjEsOCArMjYwLDYgQEAgd2Via2l0Ml9zb3VyY2VzICs9
IFwKIAlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9QbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmgg
XAogCVNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1NoYXJlZE1lbW9yeS5oIFwKIAlTb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybS91bml4L1NoYXJlZE1lbW9yeVVuaXguY3BwIFwKLQlTb3VyY2UvV2ViS2l0
Mi9QbGF0Zm9ybS9Xb3JrUXVldWUuY3BwIFwKLQlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Xb3Jr
UXVldWUuaCBcCiAJU291cmNlL1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9sbGVy
UHJveHkuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xs
ZXJQcm94eS5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNyZWF0aW9u
UGFyYW1ldGVycy5jcHAgXApAQCAtMTE2OSwxMSArMTE2Niw4IEBAIHdlYmtpdDJfcGx1Z2luX3By
b2Nlc3Nfc291cmNlcyArPSBcCiAJU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy91bml4
L0Nvbm5lY3Rpb25Vbml4LmNwcCBcCiAJU291cmNlL1dlYktpdDIvUGxhdGZvcm0vTW9kdWxlLmNw
cCBcCiAJU291cmNlL1dlYktpdDIvUGxhdGZvcm0vTW9kdWxlLmggXAotCVNvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtL1dvcmtRdWV1ZS5jcHAgXAotCVNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1dvcmtR
dWV1ZS5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9TaGFyZWRNZW1vcnkuaCBcCiAJU291
cmNlL1dlYktpdDIvUGxhdGZvcm0vZ3RrL01vZHVsZUd0ay5jcHAgXAotCVNvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtL2d0ay9Xb3JrUXVldWVHdGsuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9y
bS91bml4L1NoYXJlZE1lbW9yeVVuaXguY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9j
ZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94eS5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1BsdWdpblBy
b2Nlc3MvUGx1Z2luQ29udHJvbGxlclByb3h5LmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvUGxhdGZvcm0vQ29yZUlQQy9Db25uZWN0aW9uLmggYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9y
bS9Db3JlSVBDL0Nvbm5lY3Rpb24uaAppbmRleCA3NzNmNmUwZDEzZmI2Y2VhYzNjYmFhNTBlMzBh
ZjExN2MyZTAyMGVkLi5hMDJmOTJlMTYwMTBiYzViNjFkY2M3ODFmZTYzODE4ZjRiYTk2OTQ1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uaApAQCAtMzIs
MTEgKzMyLDExIEBACiAjaW5jbHVkZSAiQXJndW1lbnRFbmNvZGVyLmgiCiAjaW5jbHVkZSAiQXJn
dW1lbnRzLmgiCiAjaW5jbHVkZSAiTWVzc2FnZUlELmgiCi0jaW5jbHVkZSAiV29ya1F1ZXVlLmgi
CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgog
I2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5j
bHVkZSA8d3RmL1dvcmtRdWV1ZS5oPgogCiAjaWYgT1MoREFSV0lOKQogI2luY2x1ZGUgPG1hY2gv
bWFjaF9wb3J0Lmg+CkBAIC00Nyw3ICs0Nyw3IEBAIGNsYXNzIFFTb2NrZXROb3RpZmllcjsKICNl
bmRpZgogCiAjaWYgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oRUZM
KQotI2luY2x1ZGUgIlBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIuaCIKKyNpbmNsdWRlIDx3dGYv
UGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oPgogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKQEAgLTEyNyw3ICsxMjcsNyBAQCBwdWJsaWM6CiAjaWYgT1MoREFSV0lOKQogICAgIHZvaWQg
c2V0U2hvdWxkQ2xvc2VDb25uZWN0aW9uT25NYWNoRXhjZXB0aW9ucygpOwogI2VsaWYgUExBVEZP
Uk0oUVQpCi0gICAgdm9pZCBzZXRTaG91bGRDbG9zZUNvbm5lY3Rpb25PblByb2Nlc3NUZXJtaW5h
dGlvbihXZWJLaXQ6OlBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIpOworICAgIHZvaWQgc2V0U2hv
dWxkQ2xvc2VDb25uZWN0aW9uT25Qcm9jZXNzVGVybWluYXRpb24oUGxhdGZvcm1Qcm9jZXNzSWRl
bnRpZmllcik7CiAjZW5kaWYKIAogICAgIHZvaWQgc2V0T25seVNlbmRNZXNzYWdlc0FzRGlzcGF0
Y2hXaGVuV2FpdGluZ0ZvclN5bmNSZXBseVdoZW5Qcm9jZXNzaW5nU3VjaEFNZXNzYWdlKGJvb2wp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy91bml4L0Nvbm5l
Y3Rpb25Vbml4LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvdW5peC9Db25u
ZWN0aW9uVW5peC5jcHAKaW5kZXggODg1ZTQ5NWNiNzY4OGM0ZTM5MTcyYTcyYmFlOTJkZTg5NDA1
Yzk4Ny4uNDlhNTA4OTMzZGJjNWZhOTM0M2M4OGZiZGU5OGM4NDQwMzBkNTAxOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy91bml4L0Nvbm5lY3Rpb25Vbml4LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3VuaXgvQ29ubmVjdGlvblVu
aXguY3BwCkBAIC01NTcsNyArNTU3LDcgQEAgYm9vbCBDb25uZWN0aW9uOjpzZW5kT3V0Z29pbmdN
ZXNzYWdlKE1lc3NhZ2VJRCBtZXNzYWdlSUQsIFBhc3NPd25QdHI8QXJndW1lbnRFbmMKIH0KIAog
I2lmIFBMQVRGT1JNKFFUKQotdm9pZCBDb25uZWN0aW9uOjpzZXRTaG91bGRDbG9zZUNvbm5lY3Rp
b25PblByb2Nlc3NUZXJtaW5hdGlvbihXZWJLaXQ6OlBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIg
cHJvY2VzcykKK3ZvaWQgQ29ubmVjdGlvbjo6c2V0U2hvdWxkQ2xvc2VDb25uZWN0aW9uT25Qcm9j
ZXNzVGVybWluYXRpb24oUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllciBwcm9jZXNzKQogewogICAg
IG1fY29ubmVjdGlvblF1ZXVlLmRpc3BhdGNoT25UZXJtaW5hdGlvbihwcm9jZXNzLCBXVEY6OmJp
bmQoJkNvbm5lY3Rpb246OmNvbm5lY3Rpb25EaWRDbG9zZSwgdGhpcykpOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oIGIv
U291cmNlL1dlYktpdDIvUGxhdGZvcm0vUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NmVjYmU4NzI3M2FmY2RjZmIwNzlkYTQwYzJlNjUz
MmM4Y2Y4NjUzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1BsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIuaAorKysg
L2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0KLSNpZm5kZWYgUGxhdGZv
cm1Qcm9jZXNzSWRlbnRpZmllcl9oCi0jZGVmaW5lIFBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXJf
aAotCi0jaWYgUExBVEZPUk0oUVQpCi1jbGFzcyBRUHJvY2VzczsKLSNlbGlmIFBMQVRGT1JNKEVG
TCkKLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQot
I2lmIFBMQVRGT1JNKE1BQykKLXR5cGVkZWYgcGlkX3QgUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmll
cjsKLSNlbGlmIFBMQVRGT1JNKFdJTikKLXR5cGVkZWYgSEFORExFIFBsYXRmb3JtUHJvY2Vzc0lk
ZW50aWZpZXI7Ci0jZWxpZiBQTEFURk9STShRVCkKLXR5cGVkZWYgUVByb2Nlc3MqIFBsYXRmb3Jt
UHJvY2Vzc0lkZW50aWZpZXI7Ci0jZWxpZiBQTEFURk9STShHVEspCi0jaWZkZWYgR19PU19XSU4z
MgotdHlwZWRlZiB2b2lkKiBHUGlkOwotI2Vsc2UKLXR5cGVkZWYgaW50IEdQaWQ7Ci0jZW5kaWYK
LXR5cGVkZWYgR1BpZCBQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyOwotI2VsaWYgUExBVEZPUk0o
RUZMKQotdHlwZWRlZiBwaWRfdCBQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyOwotI2VuZGlmCi0K
LX0gLy8gbmFtZXNwYWNlIFdlYktpdCAKLQotI2VuZGlmIC8vIFBsYXRmb3JtUHJvY2Vzc0lkZW50
aWZpZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vV29ya1F1ZXVlLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1dvcmtRdWV1ZS5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDZiY2RkMjI2NDQyMzA4MjgwNTYwYjg5NDI1YWIxNjA3N2ZjZWI1ZGEu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YktpdDIvUGxhdGZvcm0vV29ya1F1ZXVlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV29ya1F1ZXVl
LmgiCi0KLVdvcmtRdWV1ZTo6V29ya1F1ZXVlKGNvbnN0IGNoYXIqIG5hbWUpCi0gICAgOiBtX2lz
VmFsaWQodHJ1ZSkKLXsKLSAgICBwbGF0Zm9ybUluaXRpYWxpemUobmFtZSk7Ci19Ci0KLVdvcmtR
dWV1ZTo6fldvcmtRdWV1ZSgpCi17Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIE11dGV4TG9j
a2VyIGxvY2tlcihtX2lzVmFsaWRNdXRleCk7Ci0gICAgQVNTRVJUKCFtX2lzVmFsaWQpOwotI2Vu
ZGlmCi19Ci0KLXZvaWQgV29ya1F1ZXVlOjppbnZhbGlkYXRlKCkKLXsKLSAgICB7Ci0gICAgICAg
IE11dGV4TG9ja2VyIGxvY2tlcihtX2lzVmFsaWRNdXRleCk7Ci0gICAgICAgIG1faXNWYWxpZCA9
IGZhbHNlOwotICAgIH0KLQotICAgIHBsYXRmb3JtSW52YWxpZGF0ZSgpOwotfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vV29ya1F1ZXVlLmggYi9Tb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybS9Xb3JrUXVldWUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDYzMGRj
MDI4NTVlNWRhMDk0YjEzZjFmMTUxMzI5YzJkYjQxNDMwYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrUXVl
dWUuaAorKysgL2Rldi9udWxsCkBAIC0xLDIxMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFBvcnRpb25zIENvcHly
aWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2lmbmRlZiBXb3JrUXVldWVfaAotI2RlZmluZSBXb3JrUXVldWVfaAot
Ci0jaWYgT1MoREFSV0lOKQotI2lmIEhBVkUoRElTUEFUQ0hfSCkKLSNpbmNsdWRlIDxkaXNwYXRj
aC9kaXNwYXRjaC5oPgotI2VuZGlmCi0jZW5kaWYKLQotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
Ci0jaW5jbHVkZSA8d3RmL0Z1bmN0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgot
I2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
LSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi0j
aWYgKFBMQVRGT1JNKFFUKSAmJiAhT1MoREFSV0lOKSkgfHwgUExBVEZPUk0oR1RLKSB8fCBQTEFU
Rk9STShFRkwpCi0jaW5jbHVkZSAiUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oIgotI2VuZGlm
Ci0KLSNpZiBQTEFURk9STShRVCkgJiYgIU9TKERBUldJTikKLSNpbmNsdWRlIDxRU29ja2V0Tm90
aWZpZXI+Ci1jbGFzcyBRT2JqZWN0OwotY2xhc3MgUVRocmVhZDsKLSNlbGlmIFBMQVRGT1JNKEdU
SykKLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+Ci10eXBlZGVmIGdib29sZWFuICgq
R1NvdXJjZUZ1bmMpIChncG9pbnRlciBkYXRhKTsKLSNlbGlmIFBMQVRGT1JNKEVGTCkKLSNpbmNs
dWRlIDxFY29yZS5oPgotI2VuZGlmCi0KLWNsYXNzIFdvcmtRdWV1ZSB7Ci0gICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoV29ya1F1ZXVlKTsKLQotcHVibGljOgotICAgIGV4cGxpY2l0IFdvcmtRdWV1
ZShjb25zdCBjaGFyKiBuYW1lKTsKLSAgICB+V29ya1F1ZXVlKCk7Ci0KLSAgICAvLyBXaWxsIGRp
c3BhdGNoIHRoZSBnaXZlbiBmdW5jdGlvbiB0byBydW4gYXMgc29vbiBhcyBwb3NzaWJsZS4KLSAg
ICB2b2lkIGRpc3BhdGNoKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsKLQotICAgIC8vIFdpbGwg
ZGlzcGF0Y2ggdGhlIGdpdmVuIGZ1bmN0aW9uIGFmdGVyIHRoZSBnaXZlbiBkZWxheSAoaW4gc2Vj
b25kcykuCi0gICAgdm9pZCBkaXNwYXRjaEFmdGVyRGVsYXkoY29uc3QgRnVuY3Rpb248dm9pZCgp
PiYsIGRvdWJsZSBkZWxheSk7Ci0KLSAgICB2b2lkIGludmFsaWRhdGUoKTsKLQotI2lmIE9TKERB
UldJTikKLSAgICBlbnVtIE1hY2hQb3J0RXZlbnRUeXBlIHsKLSAgICAgICAgLy8gRmlyZWQgd2hl
biB0aGVyZSBpcyBkYXRhIG9uIHRoZSBnaXZlbiByZWNlaXZlIHJpZ2h0LgotICAgICAgICBNYWNo
UG9ydERhdGFBdmFpbGFibGUsCi0gICAgICAgIAotICAgICAgICAvLyBGaXJlZCB3aGVuIHRoZSBy
ZWNlaXZlIHJpZ2h0IGZvciB0aGlzIHNlbmQgcmlnaHQgaGFzIGJlZW4gZGVzdHJveWVkLgotICAg
ICAgICBNYWNoUG9ydERlYWROYW1lTm90aWZpY2F0aW9uCi0gICAgfTsKLSAgICAKLSAgICAvLyBX
aWxsIGV4ZWN1dGUgdGhlIGdpdmVuIGZ1bmN0aW9uIHdoZW5ldmVyIHRoZSBnaXZlbiBtYWNoIHBv
cnQgZXZlbnQgZmlyZXMuCi0gICAgLy8gTm90ZSB0aGF0IHRoaXMgd2lsbCBhZG9wdCB0aGUgbWFj
aCBwb3J0IGFuZCBkZXN0cm95IGl0IHdoZW4gdGhlIHdvcmsgcXVldWUgaXMgaW52YWxpZGF0ZWQu
Ci0gICAgdm9pZCByZWdpc3Rlck1hY2hQb3J0RXZlbnRIYW5kbGVyKG1hY2hfcG9ydF90LCBNYWNo
UG9ydEV2ZW50VHlwZSwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOwotICAgIHZvaWQgdW5yZWdp
c3Rlck1hY2hQb3J0RXZlbnRIYW5kbGVyKG1hY2hfcG9ydF90KTsKLSNlbGlmIFBMQVRGT1JNKFdJ
TikKLSAgICB2b2lkIHJlZ2lzdGVySGFuZGxlKEhBTkRMRSwgY29uc3QgRnVuY3Rpb248dm9pZCgp
PiYpOwotICAgIHZvaWQgdW5yZWdpc3RlckFuZENsb3NlSGFuZGxlKEhBTkRMRSk7Ci0jZWxpZiBQ
TEFURk9STShRVCkKLSAgICBRU29ja2V0Tm90aWZpZXIqIHJlZ2lzdGVyU29ja2V0RXZlbnRIYW5k
bGVyKGludCwgUVNvY2tldE5vdGlmaWVyOjpUeXBlLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7
Ci0gICAgdm9pZCBkaXNwYXRjaE9uVGVybWluYXRpb24oV2ViS2l0OjpQbGF0Zm9ybVByb2Nlc3NJ
ZGVudGlmaWVyLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7Ci0jZWxpZiBQTEFURk9STShHVEsp
Ci0gICAgdm9pZCByZWdpc3RlckV2ZW50U291cmNlSGFuZGxlcihpbnQsIGludCwgY29uc3QgRnVu
Y3Rpb248dm9pZCgpPiYpOwotICAgIHZvaWQgdW5yZWdpc3RlckV2ZW50U291cmNlSGFuZGxlcihp
bnQpOwotICAgIHZvaWQgZGlzcGF0Y2hPblRlcm1pbmF0aW9uKFdlYktpdDo6UGxhdGZvcm1Qcm9j
ZXNzSWRlbnRpZmllciwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOwotI2VsaWYgUExBVEZPUk0o
RUZMKQotICAgIHZvaWQgcmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIoaW50LCBjb25zdCBGdW5j
dGlvbjx2b2lkKCk+Jik7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyU29ja2V0RXZlbnRIYW5kbGVyKGlu
dCk7Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICAvLyBGSVhNRTogVXNlIGFuIGF0b21pYyBib29s
ZWFuIGhlcmUgaW5zdGVhZC4KLSAgICBNdXRleCBtX2lzVmFsaWRNdXRleDsKLSAgICBib29sIG1f
aXNWYWxpZDsKLQotICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplKGNvbnN0IGNoYXIqIG5hbWUp
OwotICAgIHZvaWQgcGxhdGZvcm1JbnZhbGlkYXRlKCk7Ci0KLSNpZiBPUyhEQVJXSU4pCi0jaWYg
SEFWRShESVNQQVRDSF9IKQotICAgIHN0YXRpYyB2b2lkIGV4ZWN1dGVGdW5jdGlvbih2b2lkKik7
Ci0gICAgTXV0ZXggbV9ldmVudFNvdXJjZXNNdXRleDsKLSAgICBjbGFzcyBFdmVudFNvdXJjZTsK
LSAgICBIYXNoTWFwPG1hY2hfcG9ydF90LCBFdmVudFNvdXJjZSo+IG1fZXZlbnRTb3VyY2VzOwot
ICAgIGRpc3BhdGNoX3F1ZXVlX3QgbV9kaXNwYXRjaFF1ZXVlOwotI2VuZGlmCi0jZWxpZiBQTEFU
Rk9STShXSU4pCi0gICAgY2xhc3MgV29ya0l0ZW1XaW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNv
dW50ZWQ8V29ya0l0ZW1XaW4+IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFdvcmtJdGVtV2luPiBjcmVhdGUoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYsIFdvcmtRdWV1
ZSopOwotICAgICAgICB2aXJ0dWFsIH5Xb3JrSXRlbVdpbigpOwotCi0gICAgICAgIEZ1bmN0aW9u
PHZvaWQoKT4mIGZ1bmN0aW9uKCkgeyByZXR1cm4gbV9mdW5jdGlvbjsgfQotICAgICAgICBXb3Jr
UXVldWUqIHF1ZXVlKCkgY29uc3QgeyByZXR1cm4gbV9xdWV1ZTsgfQotCi0gICAgcHJvdGVjdGVk
OgotICAgICAgICBXb3JrSXRlbVdpbihjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiwgV29ya1F1ZXVl
Kik7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBGdW5jdGlvbjx2b2lkKCk+IG1fZnVuY3Rpb247
Ci0gICAgICAgIFdvcmtRdWV1ZSogbV9xdWV1ZTsKLSAgICB9OwotCi0gICAgY2xhc3MgSGFuZGxl
V29ya0l0ZW0gOiBwdWJsaWMgV29ya0l0ZW1XaW4gewotICAgIHB1YmxpYzoKLSAgICAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8SGFuZGxlV29ya0l0ZW0+IGNyZWF0ZUJ5QWRvcHRpbmdIYW5kbGUoSEFO
RExFLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiwgV29ya1F1ZXVlKik7Ci0gICAgICAgIHZpcnR1
YWwgfkhhbmRsZVdvcmtJdGVtKCk7Ci0KLSAgICAgICAgdm9pZCBzZXRXYWl0SGFuZGxlKEhBTkRM
RSB3YWl0SGFuZGxlKSB7IG1fd2FpdEhhbmRsZSA9IHdhaXRIYW5kbGU7IH0KLSAgICAgICAgSEFO
RExFIHdhaXRIYW5kbGUoKSBjb25zdCB7IHJldHVybiBtX3dhaXRIYW5kbGU7IH0KLQotICAgIHBy
aXZhdGU6Ci0gICAgICAgIEhhbmRsZVdvcmtJdGVtKEhBTkRMRSwgY29uc3QgRnVuY3Rpb248dm9p
ZCgpPiYsIFdvcmtRdWV1ZSopOwotCi0gICAgICAgIEhBTkRMRSBtX2hhbmRsZTsKLSAgICAgICAg
SEFORExFIG1fd2FpdEhhbmRsZTsKLSAgICB9OwotCi0gICAgc3RhdGljIHZvaWQgQ0FMTEJBQ0sg
aGFuZGxlQ2FsbGJhY2sodm9pZCogY29udGV4dCwgQk9PTEVBTiB0aW1lck9yV2FpdEZpcmVkKTsK
LSAgICBzdGF0aWMgdm9pZCBDQUxMQkFDSyB0aW1lckNhbGxiYWNrKHZvaWQqIGNvbnRleHQsIEJP
T0xFQU4gdGltZXJPcldhaXRGaXJlZCk7Ci0gICAgc3RhdGljIERXT1JEIFdJTkFQSSB3b3JrVGhy
ZWFkQ2FsbGJhY2sodm9pZCogY29udGV4dCk7Ci0KLSAgICBib29sIHRyeVJlZ2lzdGVyQXNXb3Jr
VGhyZWFkKCk7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyQXNXb3JrVGhyZWFkKCk7Ci0gICAgdm9pZCBw
ZXJmb3JtV29ya09uUmVnaXN0ZXJlZFdvcmtUaHJlYWQoKTsKLQotICAgIHN0YXRpYyB2b2lkIHVu
cmVnaXN0ZXJXYWl0QW5kRGVzdHJveUl0ZW1Tb29uKFBhc3NSZWZQdHI8SGFuZGxlV29ya0l0ZW0+
KTsKLSAgICBzdGF0aWMgRFdPUkQgV0lOQVBJIHVucmVnaXN0ZXJXYWl0QW5kRGVzdHJveUl0ZW1D
YWxsYmFjayh2b2lkKiBjb250ZXh0KTsKLQotICAgIHZvbGF0aWxlIExPTkcgbV9pc1dvcmtUaHJl
YWRSZWdpc3RlcmVkOwotCi0gICAgTXV0ZXggbV93b3JrSXRlbVF1ZXVlTG9jazsKLSAgICBWZWN0
b3I8UmVmUHRyPFdvcmtJdGVtV2luPiA+IG1fd29ya0l0ZW1RdWV1ZTsKLQotICAgIE11dGV4IG1f
aGFuZGxlc0xvY2s7Ci0gICAgSGFzaE1hcDxIQU5ETEUsIFJlZlB0cjxIYW5kbGVXb3JrSXRlbT4g
PiBtX2hhbmRsZXM7Ci0KLSAgICBIQU5ETEUgbV90aW1lclF1ZXVlOwotI2VsaWYgUExBVEZPUk0o
UVQpCi0gICAgY2xhc3MgV29ya0l0ZW1RdDsKLSAgICBRVGhyZWFkKiBtX3dvcmtUaHJlYWQ7Ci0g
ICAgZnJpZW5kIGNsYXNzIFdvcmtJdGVtUXQ7Ci0jZWxpZiBQTEFURk9STShHVEspCi0gICAgc3Rh
dGljIHZvaWQgc3RhcnRXb3JrUXVldWVUaHJlYWQoV29ya1F1ZXVlKik7Ci0gICAgdm9pZCB3b3Jr
UXVldWVUaHJlYWRCb2R5KCk7Ci0gICAgdm9pZCBkaXNwYXRjaE9uU291cmNlKEdTb3VyY2UqLCBj
b25zdCBGdW5jdGlvbjx2b2lkKCk+JiwgR1NvdXJjZUZ1bmMpOwotCi0gICAgVGhyZWFkSWRlbnRp
ZmllciBtX3dvcmtRdWV1ZVRocmVhZDsKLSAgICBHUmVmUHRyPEdNYWluQ29udGV4dD4gbV9ldmVu
dENvbnRleHQ7Ci0gICAgTXV0ZXggbV9ldmVudExvb3BMb2NrOwotICAgIEdSZWZQdHI8R01haW5M
b29wPiBtX2V2ZW50TG9vcDsKLSAgICBNdXRleCBtX2V2ZW50U291cmNlc0xvY2s7Ci0gICAgY2xh
c3MgRXZlbnRTb3VyY2U7Ci0gICAgSGFzaE1hcDxpbnQsIFZlY3RvcjxFdmVudFNvdXJjZSo+ID4g
bV9ldmVudFNvdXJjZXM7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPGludCwgVmVjdG9yPEV2ZW50U291
cmNlKj4gPjo6aXRlcmF0b3IgRXZlbnRTb3VyY2VJdGVyYXRvcjsgCi0jZWxpZiBQTEFURk9STShF
RkwpCi0gICAgZmRfc2V0IG1fZmlsZURlc2NyaXB0b3JTZXQ7Ci0gICAgaW50IG1fbWF4RmlsZURl
c2NyaXB0b3I7Ci0gICAgaW50IG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvcjsKLSAgICBpbnQgbV93
cml0ZVRvUGlwZURlc2NyaXB0b3I7Ci0gICAgYm9vbCBtX3RocmVhZExvb3A7Ci0KLSAgICBWZWN0
b3I8RnVuY3Rpb248dm9pZCgpPiA+IG1fd29ya0l0ZW1RdWV1ZTsKLSAgICBNdXRleCBtX3dvcmtJ
dGVtUXVldWVMb2NrOwotCi0gICAgaW50IG1fc29ja2V0RGVzY3JpcHRvcjsKLSAgICBGdW5jdGlv
bjx2b2lkKCk+IG1fc29ja2V0RXZlbnRIYW5kbGVyOwotCi0gICAgSGFzaE1hcDxpbnQsIE93blB0
cjxFY29yZV9UaW1lcj4gPiBtX3RpbWVyczsKLQotICAgIHZvaWQgc2VuZE1lc3NhZ2VUb1RocmVh
ZChjb25zdCBjaGFyKik7Ci0gICAgc3RhdGljIHZvaWQqIHdvcmtRdWV1ZVRocmVhZChXb3JrUXVl
dWUqKTsKLSAgICB2b2lkIHBlcmZvcm1Xb3JrKCk7Ci0gICAgdm9pZCBwZXJmb3JtRmlsZURlc2Ny
aXB0b3JXb3JrKCk7Ci0gICAgc3RhdGljIGJvb2wgdGltZXJGaXJlZCh2b2lkKik7Ci0jZW5kaWYK
LX07Ci0KLSNlbmRpZiAvLyBXb3JrUXVldWVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
UGxhdGZvcm0vZWZsL1dvcmtRdWV1ZUVmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9l
ZmwvV29ya1F1ZXVlRWZsLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2EzOWJh
OWVkOWIxMjcwZmU3ZGY5ZTZjZTY4NWRiNDczYTVmNThhNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9lZmwvV29y
a1F1ZXVlRWZsLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE3MyArMCwwIEBACi0vKgotICAgIENv
cHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCi0KLSAgICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
LSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJXb3JrUXVldWUuaCIKLQotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25z
Lmg+Ci0KLWNsYXNzIFRpbWVyV29ya0l0ZW0gewotcHVibGljOgotICAgIFRpbWVyV29ya0l0ZW0o
aW50IHRpbWVySUQsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uLCBXb3JrUXVldWUq
IHF1ZXVlKQotICAgICAgICA6IG1fZnVuY3Rpb24oZnVuY3Rpb24pCi0gICAgICAgICwgbV9xdWV1
ZShxdWV1ZSkKLSAgICAgICAgLCBtX3RpbWVySUQodGltZXJJRCkKLSAgICB7Ci0gICAgfQotICAg
IH5UaW1lcldvcmtJdGVtKCkgeyB9Ci0KLSAgICBGdW5jdGlvbjx2b2lkKCk+IGZ1bmN0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9mdW5jdGlvbjsgfQotICAgIFdvcmtRdWV1ZSogcXVldWUoKSBjb25z
dCB7IHJldHVybiBtX3F1ZXVlOyB9Ci0KLSAgICBpbnQgdGltZXJJRCgpIGNvbnN0IHsgcmV0dXJu
IG1fdGltZXJJRDsgfQotCi1wcml2YXRlOgotICAgIEZ1bmN0aW9uPHZvaWQoKT4gbV9mdW5jdGlv
bjsKLSAgICBXb3JrUXVldWUqIG1fcXVldWU7Ci0gICAgaW50IG1fdGltZXJJRDsKLX07Ci0KLXN0
YXRpYyBjb25zdCBpbnQgaW52YWxpZFNvY2tldERlc2NyaXB0b3IgPSAtMTsKLXN0YXRpYyBjb25z
dCBpbnQgdGhyZWFkTWVzc2FnZVNpemUgPSAxOwotc3RhdGljIGNvbnN0IGNoYXIgZmluaXNoVGhy
ZWFkTWVzc2FnZVtdID0gIkYiOwotc3RhdGljIGNvbnN0IGNoYXIgd2FrdXBUaHJlYWRNZXNzYWdl
W10gPSAiVyI7Ci0KLXZvaWQgV29ya1F1ZXVlOjpwbGF0Zm9ybUluaXRpYWxpemUoY29uc3QgY2hh
ciogbmFtZSkKLXsKLSAgICBpbnQgZmRzWzJdOwotICAgIGlmIChwaXBlKGZkcykpCi0gICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotCi0gICAgbV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yID0g
ZmRzWzBdOwotICAgIG1fd3JpdGVUb1BpcGVEZXNjcmlwdG9yID0gZmRzWzFdOwotICAgIEZEX1pF
Uk8oJm1fZmlsZURlc2NyaXB0b3JTZXQpOwotICAgIEZEX1NFVChtX3JlYWRGcm9tUGlwZURlc2Ny
aXB0b3IsICZtX2ZpbGVEZXNjcmlwdG9yU2V0KTsKLSAgICBtX21heEZpbGVEZXNjcmlwdG9yID0g
bV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yOwotCi0gICAgbV9zb2NrZXREZXNjcmlwdG9yID0gaW52
YWxpZFNvY2tldERlc2NyaXB0b3I7Ci0KLSAgICBtX3RocmVhZExvb3AgPSB0cnVlOwotICAgIGNy
ZWF0ZVRocmVhZChyZWludGVycHJldF9jYXN0PFdURjo6VGhyZWFkRnVuY3Rpb24+KCZXb3JrUXVl
dWU6OndvcmtRdWV1ZVRocmVhZCksIHRoaXMsIG5hbWUpOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6
cGxhdGZvcm1JbnZhbGlkYXRlKCkKLXsKLSAgICBzZW5kTWVzc2FnZVRvVGhyZWFkKGZpbmlzaFRo
cmVhZE1lc3NhZ2UpOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6cGVyZm9ybVdvcmsoKQotewotICAg
IG1fd29ya0l0ZW1RdWV1ZUxvY2subG9jaygpOwotCi0gICAgd2hpbGUgKCFtX3dvcmtJdGVtUXVl
dWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFZlY3RvcjxGdW5jdGlvbjx2b2lkKCk+ID4gd29ya0l0
ZW1RdWV1ZTsKLSAgICAgICAgbV93b3JrSXRlbVF1ZXVlLnN3YXAod29ya0l0ZW1RdWV1ZSk7Ci0K
LSAgICAgICAgbV93b3JrSXRlbVF1ZXVlTG9jay51bmxvY2soKTsKLSAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCB3b3JrSXRlbVF1ZXVlLnNpemUoKTsgKytpKQotICAgICAgICAgICAgd29y
a0l0ZW1RdWV1ZVtpXSgpOwotICAgICAgICBtX3dvcmtJdGVtUXVldWVMb2NrLmxvY2soKTsKLSAg
ICB9Ci0gICAgbV93b3JrSXRlbVF1ZXVlTG9jay51bmxvY2soKTsKLX0KLQotdm9pZCBXb3JrUXVl
dWU6OnBlcmZvcm1GaWxlRGVzY3JpcHRvcldvcmsoKQotewotICAgIGZkX3NldCByZWFkRmlsZURl
c2NyaXB0b3JTZXQgPSBtX2ZpbGVEZXNjcmlwdG9yU2V0OwotCi0gICAgaWYgKHNlbGVjdChtX21h
eEZpbGVEZXNjcmlwdG9yICsgMSwgJnJlYWRGaWxlRGVzY3JpcHRvclNldCwgMCwgMCwgMCkgPj0g
MCkgewotICAgICAgICBpZiAoRkRfSVNTRVQobV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yLCAmcmVh
ZEZpbGVEZXNjcmlwdG9yU2V0KSkgewotICAgICAgICAgICAgY2hhciByZWFkQnVmW3RocmVhZE1l
c3NhZ2VTaXplXTsKLSAgICAgICAgICAgIGlmIChyZWFkKG1fcmVhZEZyb21QaXBlRGVzY3JpcHRv
ciwgcmVhZEJ1ZiwgdGhyZWFkTWVzc2FnZVNpemUpID09IC0xKQotICAgICAgICAgICAgICAgIExP
R19FUlJPUigiRmFpbGVkIHRvIHJlYWQgZnJvbSBXb3JrUXVldWVUaHJlYWQgcGlwZSIpOwotICAg
ICAgICAgICAgaWYgKCFzdHJuY21wKHJlYWRCdWYsIGZpbmlzaFRocmVhZE1lc3NhZ2UsIHRocmVh
ZE1lc3NhZ2VTaXplKSkKLSAgICAgICAgICAgICAgICBtX3RocmVhZExvb3AgPSBmYWxzZTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmIChtX3NvY2tldERlc2NyaXB0b3IgIT0gaW52YWxpZFNvY2tl
dERlc2NyaXB0b3IgJiYgRkRfSVNTRVQobV9zb2NrZXREZXNjcmlwdG9yLCAmcmVhZEZpbGVEZXNj
cmlwdG9yU2V0KSkKLSAgICAgICAgICAgIG1fc29ja2V0RXZlbnRIYW5kbGVyKCk7Ci0gICAgfQot
fQotCi12b2lkIFdvcmtRdWV1ZTo6c2VuZE1lc3NhZ2VUb1RocmVhZChjb25zdCBjaGFyKiBtZXNz
YWdlKQotewotICAgIGlmICh3cml0ZShtX3dyaXRlVG9QaXBlRGVzY3JpcHRvciwgbWVzc2FnZSwg
dGhyZWFkTWVzc2FnZVNpemUpID09IC0xKQotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byB3
YWtlIHVwIFdvcmtRdWV1ZSBUaHJlYWQiKTsKLX0KLQotdm9pZCogV29ya1F1ZXVlOjp3b3JrUXVl
dWVUaHJlYWQoV29ya1F1ZXVlKiB3b3JrUXVldWUpCi17Ci0gICAgd2hpbGUgKHdvcmtRdWV1ZS0+
bV90aHJlYWRMb29wKSB7Ci0gICAgICAgIHdvcmtRdWV1ZS0+cGVyZm9ybVdvcmsoKTsKLSAgICAg
ICAgd29ya1F1ZXVlLT5wZXJmb3JtRmlsZURlc2NyaXB0b3JXb3JrKCk7Ci0gICAgfQotCi0gICAg
Y2xvc2Uod29ya1F1ZXVlLT5tX3JlYWRGcm9tUGlwZURlc2NyaXB0b3IpOwotICAgIGNsb3NlKHdv
cmtRdWV1ZS0+bV93cml0ZVRvUGlwZURlc2NyaXB0b3IpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0K
LXZvaWQgV29ya1F1ZXVlOjpyZWdpc3RlclNvY2tldEV2ZW50SGFuZGxlcihpbnQgZmlsZURlc2Ny
aXB0b3IsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQotewotICAgIGlmIChtX3Nv
Y2tldERlc2NyaXB0b3IgIT0gaW52YWxpZFNvY2tldERlc2NyaXB0b3IpCi0gICAgICAgIExPR19F
UlJPUigiJWQgaXMgYWxyZWFkeSByZWdpc3RlcmQuIiwgZmlsZURlc2NyaXB0b3IpOwotCi0gICAg
bV9zb2NrZXREZXNjcmlwdG9yID0gZmlsZURlc2NyaXB0b3I7Ci0gICAgbV9zb2NrZXRFdmVudEhh
bmRsZXIgPSBmdW5jdGlvbjsKLQotICAgIGlmIChmaWxlRGVzY3JpcHRvciA+IG1fbWF4RmlsZURl
c2NyaXB0b3IpCi0gICAgICAgIG1fbWF4RmlsZURlc2NyaXB0b3IgPSBmaWxlRGVzY3JpcHRvcjsK
LSAgICBGRF9TRVQoZmlsZURlc2NyaXB0b3IsICZtX2ZpbGVEZXNjcmlwdG9yU2V0KTsKLX0KLQot
dm9pZCBXb3JrUXVldWU6OnVucmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIoaW50IGZpbGVEZXNj
cmlwdG9yKQotewotICAgIG1fc29ja2V0RGVzY3JpcHRvciA9IGludmFsaWRTb2NrZXREZXNjcmlw
dG9yOwotCi0gICAgaWYgKGZpbGVEZXNjcmlwdG9yID09IG1fbWF4RmlsZURlc2NyaXB0b3IpCi0g
ICAgICAgIG1fbWF4RmlsZURlc2NyaXB0b3IgPSBtX3JlYWRGcm9tUGlwZURlc2NyaXB0b3I7Ci0g
ICAgRkRfQ0xSKGZpbGVEZXNjcmlwdG9yLCAmbV9maWxlRGVzY3JpcHRvclNldCk7Ci19Ci0KLXZv
aWQgV29ya1F1ZXVlOjpkaXNwYXRjaChjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikK
LXsKLSAgICBNdXRleExvY2tlciBsb2NrZXIobV93b3JrSXRlbVF1ZXVlTG9jayk7Ci0gICAgbV93
b3JrSXRlbVF1ZXVlLmFwcGVuZChmdW5jdGlvbik7Ci0gICAgc2VuZE1lc3NhZ2VUb1RocmVhZCh3
YWt1cFRocmVhZE1lc3NhZ2UpOwotfQotCi1ib29sIFdvcmtRdWV1ZTo6dGltZXJGaXJlZCh2b2lk
KiBkYXRhKQotewotICAgIFRpbWVyV29ya0l0ZW0qIGl0ZW0gPSBzdGF0aWNfY2FzdDxUaW1lcldv
cmtJdGVtKj4oZGF0YSk7Ci0gICAgaWYgKGl0ZW0gJiYgaXRlbS0+cXVldWUoKS0+bV9pc1ZhbGlk
KSB7Ci0gICAgICAgIGl0ZW0tPnF1ZXVlKCktPmRpc3BhdGNoKGl0ZW0tPmZ1bmN0aW9uKCkpOwot
ICAgICAgICBpdGVtLT5xdWV1ZSgpLT5tX3RpbWVycy50YWtlKGl0ZW0tPnRpbWVySUQoKSk7Ci0g
ICAgICAgIGRlbGV0ZSBpdGVtOwotICAgIH0KLQotICAgIHJldHVybiBFQ09SRV9DQUxMQkFDS19D
QU5DRUw7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpkaXNwYXRjaEFmdGVyRGVsYXkoY29uc3QgRnVu
Y3Rpb248dm9pZCgpPiYgZnVuY3Rpb24sIGRvdWJsZSBkZWxheSkKLXsKLSAgICBzdGF0aWMgaW50
IHRpbWVySWQgPSAwOwotICAgIG1fdGltZXJzLnNldCh0aW1lcklkLCBhZG9wdFB0cihlY29yZV90
aW1lcl9hZGQoZGVsYXksIHJlaW50ZXJwcmV0X2Nhc3Q8RWNvcmVfVGFza19DYj4odGltZXJGaXJl
ZCksIG5ldyBUaW1lcldvcmtJdGVtKHRpbWVySWQsIGZ1bmN0aW9uLCB0aGlzKSkpKTsKLSAgICB0
aW1lcklkKys7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9ndGsvV29y
a1F1ZXVlR3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2d0ay9Xb3JrUXVldWVHdGsu
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZGZhYjgzY2NmYjI0YzlmMDBlZTQw
ZDJkYWExYzk1YjE2MzgyYTQzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2d0ay9Xb3JrUXVldWVHdGsuY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsMjMwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEg
SWdhbGlhIFMuTC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxp
dHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJXb3JrUXVldWUuaCIKLQotI2luY2x1ZGUgIldLQmFzZS5oIgotI2lu
Y2x1ZGUgPGdpby9naW8uaD4KLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmpl
Y3QvR1JlZlB0ci5oPgotCi0vLyBXb3JrUXVldWU6OkV2ZW50U291cmNlCi1jbGFzcyBXb3JrUXVl
dWU6OkV2ZW50U291cmNlIHsKLXB1YmxpYzoKLSAgICBFdmVudFNvdXJjZShjb25zdCBGdW5jdGlv
bjx2b2lkKCk+JiBmdW5jdGlvbiwgV29ya1F1ZXVlKiB3b3JrUXVldWUsIEdDYW5jZWxsYWJsZSog
Y2FuY2VsbGFibGUpCi0gICAgICAgIDogbV9mdW5jdGlvbihmdW5jdGlvbikKLSAgICAgICAgLCBt
X3dvcmtRdWV1ZSh3b3JrUXVldWUpCi0gICAgICAgICwgbV9jYW5jZWxsYWJsZShjYW5jZWxsYWJs
ZSkKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBjYW5jZWwoKQotICAgIHsKLSAgICAgICAgaWYg
KCFtX2NhbmNlbGxhYmxlKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBnX2NhbmNlbGxh
YmxlX2NhbmNlbChtX2NhbmNlbGxhYmxlKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBleGVj
dXRlRXZlbnRTb3VyY2UoRXZlbnRTb3VyY2UqIGV2ZW50U291cmNlKQotICAgIHsKLSAgICAgICAg
QVNTRVJUKGV2ZW50U291cmNlKTsKLSAgICAgICAgV29ya1F1ZXVlKiBxdWV1ZSA9IGV2ZW50U291
cmNlLT5tX3dvcmtRdWV1ZTsKLSAgICAgICAgewotICAgICAgICAgICAgTXV0ZXhMb2NrZXIgbG9j
a2VyKHF1ZXVlLT5tX2lzVmFsaWRNdXRleCk7Ci0gICAgICAgICAgICBpZiAoIXF1ZXVlLT5tX2lz
VmFsaWQpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZXZl
bnRTb3VyY2UtPm1fZnVuY3Rpb24oKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZ2Jvb2xlYW4gcGVy
Zm9ybVdvcmtPbmNlKEV2ZW50U291cmNlKiBldmVudFNvdXJjZSkKLSAgICB7Ci0gICAgICAgIGV4
ZWN1dGVFdmVudFNvdXJjZShldmVudFNvdXJjZSk7Ci0gICAgICAgIHJldHVybiBGQUxTRTsKLSAg
ICB9Ci0KLSAgICBzdGF0aWMgZ2Jvb2xlYW4gcGVyZm9ybVdvcmsoR1NvY2tldCogc29ja2V0LCBH
SU9Db25kaXRpb24gY29uZGl0aW9uLCBFdmVudFNvdXJjZSogZXZlbnRTb3VyY2UpCi0gICAgewot
ICAgICAgICBpZiAoIShjb25kaXRpb24gJiBHX0lPX0lOKSAmJiAhKGNvbmRpdGlvbiAmIEdfSU9f
SFVQKSAmJiAhKGNvbmRpdGlvbiAmIEdfSU9fRVJSKSkgewotICAgICAgICAgICAgLy8gRXZlbnRT
b3VyY2UgaGFzIGJlZW4gY2FuY2VsbGVkLCByZXR1cm4gRkFMU0UgdG8gZGVzdHJveSB0aGUgc291
cmNlLgotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgICAgICB9Ci0KLSAgICAgICAgZXhl
Y3V0ZUV2ZW50U291cmNlKGV2ZW50U291cmNlKTsKLSAgICAgICAgcmV0dXJuIFRSVUU7Ci0gICAg
fQotCi0gICAgc3RhdGljIGdib29sZWFuIHBlcmZvcm1Xb3JrT25UZXJtaW5hdGlvbihHUGlkLCBn
aW50LCBFdmVudFNvdXJjZSogZXZlbnRTb3VyY2UpCi0gICAgewotICAgICAgICBleGVjdXRlRXZl
bnRTb3VyY2UoZXZlbnRTb3VyY2UpOwotICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotCi0g
ICAgc3RhdGljIHZvaWQgZGVsZXRlRXZlbnRTb3VyY2UoRXZlbnRTb3VyY2UqIGV2ZW50U291cmNl
KSAKLSAgICB7Ci0gICAgICAgIEFTU0VSVChldmVudFNvdXJjZSk7Ci0gICAgICAgIGRlbGV0ZSBl
dmVudFNvdXJjZTsKLSAgICB9Ci0gICAKLXB1YmxpYzoKLSAgICBGdW5jdGlvbjx2b2lkKCk+IG1f
ZnVuY3Rpb247Ci0gICAgV29ya1F1ZXVlKiBtX3dvcmtRdWV1ZTsKLSAgICBHQ2FuY2VsbGFibGUq
IG1fY2FuY2VsbGFibGU7Ci19OwotCi0vLyBXb3JrUXVldWUKLXN0YXRpYyBjb25zdCBzaXplX3Qg
a1Zpc3VhbFN0dWRpb1RocmVhZE5hbWVMaW1pdCA9IDMxOwotCi12b2lkIFdvcmtRdWV1ZTo6cGxh
dGZvcm1Jbml0aWFsaXplKGNvbnN0IGNoYXIqIG5hbWUpCi17Ci0gICAgbV9ldmVudENvbnRleHQg
PSBhZG9wdEdSZWYoZ19tYWluX2NvbnRleHRfbmV3KCkpOwotICAgIEFTU0VSVChtX2V2ZW50Q29u
dGV4dCk7Ci0gICAgbV9ldmVudExvb3AgPSBhZG9wdEdSZWYoZ19tYWluX2xvb3BfbmV3KG1fZXZl
bnRDb250ZXh0LmdldCgpLCBGQUxTRSkpOwotICAgIEFTU0VSVChtX2V2ZW50TG9vcCk7Ci0KLSAg
ICAvLyBUaGlzIG5hbWUgY2FuIGJlIGNvbS5hcHBsZS5XZWJLaXQuUHJvY2Vzc0xhdW5jaGVyIG9y
IGNvbS5hcHBsZS5Db3JlSVBDLlJlY2VpdmVRdWV1ZS4KLSAgICAvLyBXZSBhcmUgdXNpbmcgdGhv
c2UgbmFtZXMgZm9yIHRoZSB0aHJlYWQgbmFtZSwgYnV0IGJvdGggYXJlIGxvbmdlciB0aGFuIDMx
IGNoYXJhY3RlcnMsCi0gICAgLy8gd2hpY2ggaXMgdGhlIGxpbWl0IG9mIFZpc3VhbCBTdHVkaW8g
Zm9yIHRocmVhZCBuYW1lcy4KLSAgICAvLyBXaGVuIGxvZyBpcyBlbmFibGVkIGNyZWF0ZVRocmVh
ZCgpIHdpbGwgYXNzZXJ0IGluc3RlYWQgb2YgdHJ1bmNhdGUgdGhlIG5hbWUsIHNvIHdlIG5lZWQK
LSAgICAvLyB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgdXNlIGEgbmFtZSBsb25nZXIgdGhhbiAzMSBj
aGFyYWN0ZXJzLgotICAgIGNvbnN0IGNoYXIqIHRocmVhZE5hbWUgPSBnX3N0cnJzdHIobmFtZSwg
Ii4iKTsKLSAgICBpZiAodGhyZWFkTmFtZSkKLSAgICAgICAgdGhyZWFkTmFtZSsrOwotICAgIGVs
c2UKLSAgICAgICAgdGhyZWFkTmFtZSA9IG5hbWU7Ci0gICAgaWYgKHN0cmxlbih0aHJlYWROYW1l
KSA+IGtWaXN1YWxTdHVkaW9UaHJlYWROYW1lTGltaXQpCi0gICAgICAgIHRocmVhZE5hbWUgKz0g
c3RybGVuKHRocmVhZE5hbWUpIC0ga1Zpc3VhbFN0dWRpb1RocmVhZE5hbWVMaW1pdDsKLQotICAg
IG1fd29ya1F1ZXVlVGhyZWFkID0gY3JlYXRlVGhyZWFkKHJlaW50ZXJwcmV0X2Nhc3Q8V1RGOjpU
aHJlYWRGdW5jdGlvbj4oJldvcmtRdWV1ZTo6c3RhcnRXb3JrUXVldWVUaHJlYWQpLCB0aGlzLCB0
aHJlYWROYW1lKTsKLX0KLQotdm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCi17
Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZXZlbnRMb29wTG9jayk7Ci0KLSAgICBpZiAobV9l
dmVudExvb3ApIHsKLSAgICAgICAgaWYgKGdfbWFpbl9sb29wX2lzX3J1bm5pbmcobV9ldmVudExv
b3AuZ2V0KCkpKQotICAgICAgICAgICAgZ19tYWluX2xvb3BfcXVpdChtX2V2ZW50TG9vcC5nZXQo
KSk7Ci0gICAgICAgIG1fZXZlbnRMb29wLmNsZWFyKCk7Ci0gICAgfQotCi0gICAgbV9ldmVudENv
bnRleHQuY2xlYXIoKTsKLX0KLQotdm9pZCBXb3JrUXVldWU6OnN0YXJ0V29ya1F1ZXVlVGhyZWFk
KFdvcmtRdWV1ZSogd29ya1F1ZXVlKQotewotICAgIHdvcmtRdWV1ZS0+d29ya1F1ZXVlVGhyZWFk
Qm9keSgpOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6d29ya1F1ZXVlVGhyZWFkQm9keSgpCi17Ci0g
ICAgZ19tYWluX2xvb3BfcnVuKG1fZXZlbnRMb29wLmdldCgpKTsKLX0KLQotdm9pZCBXb3JrUXVl
dWU6OnJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKGludCBmaWxlRGVzY3JpcHRvciwgaW50IGNv
bmRpdGlvbiwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCi17Ci0gICAgR1JlZlB0
cjxHU29ja2V0PiBzb2NrZXQgPSBhZG9wdEdSZWYoZ19zb2NrZXRfbmV3X2Zyb21fZmQoZmlsZURl
c2NyaXB0b3IsIDApKTsKLSAgICBBU1NFUlQoc29ja2V0KTsKLSAgICBHUmVmUHRyPEdDYW5jZWxs
YWJsZT4gY2FuY2VsbGFibGUgPSBhZG9wdEdSZWYoZ19jYW5jZWxsYWJsZV9uZXcoKSk7Ci0gICAg
R1JlZlB0cjxHU291cmNlPiBkaXNwYXRjaFNvdXJjZSA9IGFkb3B0R1JlZihnX3NvY2tldF9jcmVh
dGVfc291cmNlKHNvY2tldC5nZXQoKSwgc3RhdGljX2Nhc3Q8R0lPQ29uZGl0aW9uPihjb25kaXRp
b24pLCBjYW5jZWxsYWJsZS5nZXQoKSkpOwotICAgIEFTU0VSVChkaXNwYXRjaFNvdXJjZSk7Ci0g
ICAgRXZlbnRTb3VyY2UqIGV2ZW50U291cmNlID0gbmV3IEV2ZW50U291cmNlKGZ1bmN0aW9uLCB0
aGlzLCBjYW5jZWxsYWJsZS5nZXQoKSk7Ci0gICAgQVNTRVJUKGV2ZW50U291cmNlKTsKLQotICAg
IGdfc291cmNlX3NldF9jYWxsYmFjayhkaXNwYXRjaFNvdXJjZS5nZXQoKSwgcmVpbnRlcnByZXRf
Y2FzdDxHU291cmNlRnVuYz4oJldvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OnBlcmZvcm1Xb3JrKSwK
LSAgICAgICAgZXZlbnRTb3VyY2UsIHJlaW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KCZX
b3JrUXVldWU6OkV2ZW50U291cmNlOjpkZWxldGVFdmVudFNvdXJjZSkpOwotCi0gICAgLy8gU2V0
IHVwIHRoZSBldmVudCBzb3VyY2VzIHVuZGVyIHRoZSBtdXRleCBzaW5jZSB0aGlzIGlzIHNoYXJl
ZCBhY3Jvc3MgbXVsdGlwbGUgdGhyZWFkcy4KLSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxv
Y2tlcihtX2V2ZW50U291cmNlc0xvY2spOwotICAgICAgICBWZWN0b3I8RXZlbnRTb3VyY2UqPiBz
b3VyY2VzOwotICAgICAgICBFdmVudFNvdXJjZUl0ZXJhdG9yIGl0ID0gbV9ldmVudFNvdXJjZXMu
ZmluZChmaWxlRGVzY3JpcHRvcik7Ci0gICAgICAgIGlmIChpdCAhPSBtX2V2ZW50U291cmNlcy5l
bmQoKSkgCi0gICAgICAgICAgICBzb3VyY2VzID0gaXQtPnNlY29uZDsKLQotICAgICAgICBzb3Vy
Y2VzLmFwcGVuZChldmVudFNvdXJjZSk7Ci0gICAgICAgIG1fZXZlbnRTb3VyY2VzLnNldChmaWxl
RGVzY3JpcHRvciwgc291cmNlcyk7Ci0gICAgfQotCi0gICAgZ19zb3VyY2VfYXR0YWNoKGRpc3Bh
dGNoU291cmNlLmdldCgpLCBtX2V2ZW50Q29udGV4dC5nZXQoKSk7Ci19Ci0KLXZvaWQgV29ya1F1
ZXVlOjp1bnJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKGludCBmaWxlRGVzY3JpcHRvcikKLXsK
LSAgICBBU1NFUlQoZmlsZURlc2NyaXB0b3IpOwotICAgIAotICAgIE11dGV4TG9ja2VyIGxvY2tl
cihtX2V2ZW50U291cmNlc0xvY2spOwotICAgIAotICAgIEV2ZW50U291cmNlSXRlcmF0b3IgaXQg
PSBtX2V2ZW50U291cmNlcy5maW5kKGZpbGVEZXNjcmlwdG9yKTsKLSAgICBBU1NFUlQoaXQgIT0g
bV9ldmVudFNvdXJjZXMuZW5kKCkpOwotICAgIEFTU0VSVChtX2V2ZW50U291cmNlcy5jb250YWlu
cyhmaWxlRGVzY3JpcHRvcikpOwotCi0gICAgaWYgKGl0ICE9IG1fZXZlbnRTb3VyY2VzLmVuZCgp
KSB7Ci0gICAgICAgIFZlY3RvcjxFdmVudFNvdXJjZSo+IHNvdXJjZXMgPSBpdC0+c2Vjb25kOwot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc291cmNlcy5zaXplKCk7IGkrKykKLSAg
ICAgICAgICAgIHNvdXJjZXNbaV0tPmNhbmNlbCgpOwotCi0gICAgICAgIG1fZXZlbnRTb3VyY2Vz
LnJlbW92ZShpdCk7Ci0gICAgfQotfQotCi12b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2hPblNvdXJj
ZShHU291cmNlKiBkaXNwYXRjaFNvdXJjZSwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rp
b24sIEdTb3VyY2VGdW5jIHNvdXJjZUNhbGxiYWNrKQotewotICAgIEV2ZW50U291cmNlKiBldmVu
dFNvdXJjZSA9IG5ldyBFdmVudFNvdXJjZShmdW5jdGlvbiwgdGhpcywgMCk7Ci0KLSAgICBnX3Nv
dXJjZV9zZXRfY2FsbGJhY2soZGlzcGF0Y2hTb3VyY2UsIHNvdXJjZUNhbGxiYWNrLCBldmVudFNv
dXJjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxHRGVzdHJv
eU5vdGlmeT4oJldvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OmRlbGV0ZUV2ZW50U291cmNlKSk7Ci0K
LSAgICBnX3NvdXJjZV9hdHRhY2goZGlzcGF0Y2hTb3VyY2UsIG1fZXZlbnRDb250ZXh0LmdldCgp
KTsKLX0KLQotdm9pZCBXb3JrUXVldWU6OmRpc3BhdGNoKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4m
IGZ1bmN0aW9uKQotewotICAgIEdSZWZQdHI8R1NvdXJjZT4gZGlzcGF0Y2hTb3VyY2UgPSBhZG9w
dEdSZWYoZ19pZGxlX3NvdXJjZV9uZXcoKSk7Ci0gICAgQVNTRVJUKGRpc3BhdGNoU291cmNlKTsK
LSAgICBnX3NvdXJjZV9zZXRfcHJpb3JpdHkoZGlzcGF0Y2hTb3VyY2UuZ2V0KCksIEdfUFJJT1JJ
VFlfREVGQVVMVCk7Ci0KLSAgICBkaXNwYXRjaE9uU291cmNlKGRpc3BhdGNoU291cmNlLmdldCgp
LCBmdW5jdGlvbiwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oJldvcmtRdWV1ZTo6RXZl
bnRTb3VyY2U6OnBlcmZvcm1Xb3JrT25jZSkpOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0
Y2hBZnRlckRlbGF5KGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uLCBkb3VibGUgZGVs
YXkpCi17Ci0gICAgR1JlZlB0cjxHU291cmNlPiBkaXNwYXRjaFNvdXJjZSA9IGFkb3B0R1JlZihn
X3RpbWVvdXRfc291cmNlX25ldyhzdGF0aWNfY2FzdDxndWludD4oZGVsYXkgKiAxMDAwKSkpOwot
ICAgIEFTU0VSVChkaXNwYXRjaFNvdXJjZSk7Ci0KLSAgICBkaXNwYXRjaE9uU291cmNlKGRpc3Bh
dGNoU291cmNlLmdldCgpLCBmdW5jdGlvbiwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4o
JldvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OnBlcmZvcm1Xb3JrT25jZSkpOwotfQotCi12b2lkIFdv
cmtRdWV1ZTo6ZGlzcGF0Y2hPblRlcm1pbmF0aW9uKFdlYktpdDo6UGxhdGZvcm1Qcm9jZXNzSWRl
bnRpZmllciBwcm9jZXNzLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKLXsKLSAg
ICBHUmVmUHRyPEdTb3VyY2U+IGRpc3BhdGNoU291cmNlID0gYWRvcHRHUmVmKGdfY2hpbGRfd2F0
Y2hfc291cmNlX25ldyhwcm9jZXNzKSk7Ci0gICAgQVNTRVJUKGRpc3BhdGNoU291cmNlKTsKLQot
ICAgIGRpc3BhdGNoT25Tb3VyY2UoZGlzcGF0Y2hTb3VyY2UuZ2V0KCksIGZ1bmN0aW9uLCByZWlu
dGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPigmV29ya1F1ZXVlOjpFdmVudFNvdXJjZTo6cGVyZm9y
bVdvcmtPblRlcm1pbmF0aW9uKSk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybS9tYWMvV29ya1F1ZXVlTWFjLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL21hYy9X
b3JrUXVldWVNYWMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTQ3M2VlNWNj
ODRlNTg0MjliMDQzOWNjZDkyMWFjMmM0OTJmZmFhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL21hYy9Xb3JrUXVl
dWVNYWMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTc4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV29ya1F1ZXVlLmgiCi0KLSNpbmNsdWRlIDxt
YWNoL21hY2hfaW5pdC5oPgotI2luY2x1ZGUgPG1hY2gvbWFjaF9wb3J0Lmg+Ci0jaW5jbHVkZSA8
d3RmL1Bhc3NPd25QdHIuaD4KLQotdm9pZCBXb3JrUXVldWU6OmV4ZWN1dGVGdW5jdGlvbih2b2lk
KiBjb250ZXh0KQotewotICAgIFdvcmtRdWV1ZSogcXVldWUgPSBzdGF0aWNfY2FzdDxXb3JrUXVl
dWUqPihkaXNwYXRjaF9nZXRfY29udGV4dChkaXNwYXRjaF9nZXRfY3VycmVudF9xdWV1ZSgpKSk7
Ci0gICAgT3duUHRyPEZ1bmN0aW9uPHZvaWQoKT4gPiBmdW5jdGlvbiA9IGFkb3B0UHRyKHN0YXRp
Y19jYXN0PEZ1bmN0aW9uPHZvaWQoKT4qPihjb250ZXh0KSk7Ci0gICAgCi0gICAgewotICAgICAg
ICBNdXRleExvY2tlciBsb2NrZXIocXVldWUtPm1faXNWYWxpZE11dGV4KTsKLSAgICAgICAgaWYg
KCFxdWV1ZS0+bV9pc1ZhbGlkKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgICgq
ZnVuY3Rpb24pKCk7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpkaXNwYXRjaChjb25zdCBGdW5jdGlv
bjx2b2lkKCk+JiBmdW5jdGlvbikKLXsKLSAgICBkaXNwYXRjaF9hc3luY19mKG1fZGlzcGF0Y2hR
dWV1ZSwgbmV3IEZ1bmN0aW9uPHZvaWQoKT4oZnVuY3Rpb24pLCBleGVjdXRlRnVuY3Rpb24pOwot
fQotCi12b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2hBZnRlckRlbGF5KGNvbnN0IEZ1bmN0aW9uPHZv
aWQoKT4mIGZ1bmN0aW9uLCBkb3VibGUgZGVsYXkpCi17Ci0gICAgZGlzcGF0Y2hfdGltZV90IGRl
bGF5VGltZSA9IGRpc3BhdGNoX3RpbWUoRElTUEFUQ0hfVElNRV9OT1csIGRlbGF5ICogTlNFQ19Q
RVJfU0VDKTsKLQotICAgIGRpc3BhdGNoX2FmdGVyX2YoZGVsYXlUaW1lLCBtX2Rpc3BhdGNoUXVl
dWUsIG5ldyBGdW5jdGlvbjx2b2lkKCk+KGZ1bmN0aW9uKSwgZXhlY3V0ZUZ1bmN0aW9uKTsKLX0K
LQotY2xhc3MgV29ya1F1ZXVlOjpFdmVudFNvdXJjZSB7Ci1wdWJsaWM6Ci0gICAgRXZlbnRTb3Vy
Y2UoTWFjaFBvcnRFdmVudFR5cGUgZXZlbnRUeXBlLCBkaXNwYXRjaF9zb3VyY2VfdCBkaXNwYXRj
aFNvdXJjZSwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCi0gICAgICAgIDogbV9l
dmVudFR5cGUoZXZlbnRUeXBlKQotICAgICAgICAsIG1fZGlzcGF0Y2hTb3VyY2UoZGlzcGF0Y2hT
b3VyY2UpCi0gICAgICAgICwgbV9mdW5jdGlvbihmdW5jdGlvbikKLSAgICB7Ci0gICAgfQotICAg
IAotICAgIGRpc3BhdGNoX3NvdXJjZV90IGRpc3BhdGNoU291cmNlKCkgY29uc3QgeyByZXR1cm4g
bV9kaXNwYXRjaFNvdXJjZTsgfQotICAgIAotICAgIHN0YXRpYyB2b2lkIGV2ZW50SGFuZGxlcih2
b2lkKiBzb3VyY2UpIAotICAgIHsKLSAgICAgICAgRXZlbnRTb3VyY2UqIGV2ZW50U291cmNlID0g
c3RhdGljX2Nhc3Q8RXZlbnRTb3VyY2UqPihzb3VyY2UpOwotICAgICAgICAKLSAgICAgICAgZXZl
bnRTb3VyY2UtPm1fZnVuY3Rpb24oKTsKLSAgICB9Ci0gICAgCi0gICAgc3RhdGljIHZvaWQgY2Fu
Y2VsSGFuZGxlcih2b2lkKiBzb3VyY2UpCi0gICAgewotICAgICAgICBFdmVudFNvdXJjZSogZXZl
bnRTb3VyY2UgPSBzdGF0aWNfY2FzdDxFdmVudFNvdXJjZSo+KHNvdXJjZSk7Ci0gICAgICAgIAot
ICAgICAgICBtYWNoX3BvcnRfdCBtYWNoUG9ydCA9IGRpc3BhdGNoX3NvdXJjZV9nZXRfaGFuZGxl
KGV2ZW50U291cmNlLT5tX2Rpc3BhdGNoU291cmNlKTsKLSAgICAgICAgCi0gICAgICAgIHN3aXRj
aCAoZXZlbnRTb3VyY2UtPm1fZXZlbnRUeXBlKSB7Ci0gICAgICAgIGNhc2UgTWFjaFBvcnREYXRh
QXZhaWxhYmxlOgotICAgICAgICAgICAgLy8gUmVsZWFzZSBvdXIgcmVjZWl2ZSByaWdodC4KLSAg
ICAgICAgICAgIG1hY2hfcG9ydF9tb2RfcmVmcyhtYWNoX3Rhc2tfc2VsZigpLCBtYWNoUG9ydCwg
TUFDSF9QT1JUX1JJR0hUX1JFQ0VJVkUsIC0xKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIE1hY2hQb3J0RGVhZE5hbWVOb3RpZmljYXRpb246Ci0gICAgICAgICAgICAvLyBSZWxl
YXNlIG91ciBzZW5kIHJpZ2h0LgotICAgICAgICAgICAgbWFjaF9wb3J0X2RlYWxsb2NhdGUobWFj
aF90YXNrX3NlbGYoKSwgbWFjaFBvcnQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgCi0gICAgc3RhdGljIHZvaWQgZmluYWxpemVIYW5kbGVyKHZvaWQqIHNvdXJj
ZSkKLSAgICB7Ci0gICAgICAgIEV2ZW50U291cmNlKiBldmVudFNvdXJjZSA9IHN0YXRpY19jYXN0
PEV2ZW50U291cmNlKj4oc291cmNlKTsKLSAgICAgICAgCi0gICAgICAgIGRlbGV0ZSBldmVudFNv
dXJjZTsKLSAgICB9Ci0gICAgCi1wcml2YXRlOgotICAgIE1hY2hQb3J0RXZlbnRUeXBlIG1fZXZl
bnRUeXBlOwotICAgIAotICAgIC8vIFRoaXMgaXMgYSB3ZWFrIHJlZmVyZW5jZSwgc2luY2UgbV9k
aXNwYXRjaFNvdXJjZSByZWZlcmVuY2VzIHRoZSBldmVudCBzb3VyY2UuCi0gICAgZGlzcGF0Y2hf
c291cmNlX3QgbV9kaXNwYXRjaFNvdXJjZTsKLQotICAgIEZ1bmN0aW9uPHZvaWQoKT4gbV9mdW5j
dGlvbjsKLX07Ci0KLXZvaWQgV29ya1F1ZXVlOjpyZWdpc3Rlck1hY2hQb3J0RXZlbnRIYW5kbGVy
KG1hY2hfcG9ydF90IG1hY2hQb3J0LCBNYWNoUG9ydEV2ZW50VHlwZSBldmVudFR5cGUsIGNvbnN0
IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQotewotICAgIGRpc3BhdGNoX3NvdXJjZV90eXBl
X3Qgc291cmNlVHlwZSA9IDA7Ci0gICAgc3dpdGNoIChldmVudFR5cGUpIHsKLSAgICBjYXNlIE1h
Y2hQb3J0RGF0YUF2YWlsYWJsZToKLSAgICAgICAgc291cmNlVHlwZSA9IERJU1BBVENIX1NPVVJD
RV9UWVBFX01BQ0hfUkVDVjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBNYWNoUG9ydERlYWRO
YW1lTm90aWZpY2F0aW9uOgotICAgICAgICBzb3VyY2VUeXBlID0gRElTUEFUQ0hfU09VUkNFX1RZ
UEVfTUFDSF9TRU5EOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgCi0gICAgZGlzcGF0Y2hf
c291cmNlX3QgZGlzcGF0Y2hTb3VyY2UgPSBkaXNwYXRjaF9zb3VyY2VfY3JlYXRlKHNvdXJjZVR5
cGUsIG1hY2hQb3J0LCAwLCBtX2Rpc3BhdGNoUXVldWUpOwotICAgIAotICAgIEV2ZW50U291cmNl
KiBldmVudFNvdXJjZSA9IG5ldyBFdmVudFNvdXJjZShldmVudFR5cGUsIGRpc3BhdGNoU291cmNl
LCBmdW5jdGlvbik7Ci0gICAgZGlzcGF0Y2hfc2V0X2NvbnRleHQoZGlzcGF0Y2hTb3VyY2UsIGV2
ZW50U291cmNlKTsKLSAgICAKLSAgICBkaXNwYXRjaF9zb3VyY2Vfc2V0X2V2ZW50X2hhbmRsZXJf
ZihkaXNwYXRjaFNvdXJjZSwgJkV2ZW50U291cmNlOjpldmVudEhhbmRsZXIpOwotICAgIGRpc3Bh
dGNoX3NvdXJjZV9zZXRfY2FuY2VsX2hhbmRsZXJfZihkaXNwYXRjaFNvdXJjZSwgJkV2ZW50U291
cmNlOjpjYW5jZWxIYW5kbGVyKTsKLSAgICBkaXNwYXRjaF9zZXRfZmluYWxpemVyX2YoZGlzcGF0
Y2hTb3VyY2UsICZFdmVudFNvdXJjZTo6ZmluYWxpemVIYW5kbGVyKTsKLSAgICAKLSAgICAvLyBB
ZGQgdGhlIHNvdXJjZSB0byBvdXIgc2V0IG9mIHNvdXJjZXMuCi0gICAgewotICAgICAgICBNdXRl
eExvY2tlciBsb2NrZXIobV9ldmVudFNvdXJjZXNNdXRleCk7Ci0gICAgICAgIAotICAgICAgICBB
U1NFUlQoIW1fZXZlbnRTb3VyY2VzLmNvbnRhaW5zKG1hY2hQb3J0KSk7Ci0gICAgICAgIAotICAg
ICAgICBtX2V2ZW50U291cmNlcy5zZXQobWFjaFBvcnQsIGV2ZW50U291cmNlKTsKLSAgICAgICAg
Ci0gICAgICAgIC8vIEFuZCBzdGFydCBpdCEKLSAgICAgICAgZGlzcGF0Y2hfcmVzdW1lKGRpc3Bh
dGNoU291cmNlKTsKLSAgICB9Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjp1bnJlZ2lzdGVyTWFjaFBv
cnRFdmVudEhhbmRsZXIobWFjaF9wb3J0X3QgbWFjaFBvcnQpCi17Ci0gICAgQVNTRVJUKG1hY2hQ
b3J0KTsKLSAgICAKLSAgICBNdXRleExvY2tlciBsb2NrZXIobV9ldmVudFNvdXJjZXNNdXRleCk7
Ci0gICAgCi0gICAgSGFzaE1hcDxtYWNoX3BvcnRfdCwgRXZlbnRTb3VyY2UqPjo6aXRlcmF0b3Ig
aXQgPSBtX2V2ZW50U291cmNlcy5maW5kKG1hY2hQb3J0KTsKLSAgICBBU1NFUlQoaXQgIT0gbV9l
dmVudFNvdXJjZXMuZW5kKCkpOwotICAgIAotICAgIEFTU0VSVChtX2V2ZW50U291cmNlcy5jb250
YWlucyhtYWNoUG9ydCkpOwotCi0gICAgRXZlbnRTb3VyY2UqIGV2ZW50U291cmNlID0gaXQtPnNl
Y29uZDsKLSAgICAvLyBDYW5jZWwgYW5kIHJlbGVhc2UgdGhlIHNvdXJjZS4gSXQgd2lsbCBiZSBk
ZWxldGVkIGluIGl0cyBmaW5hbGl6ZSBoYW5kbGVyLgotICAgIGRpc3BhdGNoX3NvdXJjZV9jYW5j
ZWwoZXZlbnRTb3VyY2UtPmRpc3BhdGNoU291cmNlKCkpOwotICAgIGRpc3BhdGNoX3JlbGVhc2Uo
ZXZlbnRTb3VyY2UtPmRpc3BhdGNoU291cmNlKCkpOwotCi0gICAgbV9ldmVudFNvdXJjZXMucmVt
b3ZlKGl0KTsgICAgCi19Ci0KLXZvaWQgV29ya1F1ZXVlOjpwbGF0Zm9ybUluaXRpYWxpemUoY29u
c3QgY2hhciogbmFtZSkKLXsKLSAgICBtX2Rpc3BhdGNoUXVldWUgPSBkaXNwYXRjaF9xdWV1ZV9j
cmVhdGUobmFtZSwgMCk7Ci0gICAgZGlzcGF0Y2hfc2V0X2NvbnRleHQobV9kaXNwYXRjaFF1ZXVl
LCB0aGlzKTsKLX0KLQotdm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCi17Ci0j
aWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2V2ZW50U291cmNl
c011dGV4KTsKLSAgICBBU1NFUlQobV9ldmVudFNvdXJjZXMuaXNFbXB0eSgpKTsKLSNlbmRpZgot
Ci0gICAgZGlzcGF0Y2hfcmVsZWFzZShtX2Rpc3BhdGNoUXVldWUpOwotfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvUGxhdGZvcm0vcXQvV29ya1F1ZXVlUXQuY3BwIGIvU291cmNlL1dlYktp
dDIvUGxhdGZvcm0vcXQvV29ya1F1ZXVlUXQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBhYWEyYmUzZDBiOGI3NDg1MjlhMjg4ZmVlMmQ1OTRmZGI5ZTQ5OTI2Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRm
b3JtL3F0L1dvcmtRdWV1ZVF0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEzMCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldv
cmtRdWV1ZS5oIgotCi0jaW5jbHVkZSA8UUxvY2FsU29ja2V0PgotI2luY2x1ZGUgPFFPYmplY3Q+
Ci0jaW5jbHVkZSA8UVRocmVhZD4KLSNpbmNsdWRlIDxRUHJvY2Vzcz4KLSNpbmNsdWRlIDxXZWJD
b3JlL05vdEltcGxlbWVudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgotCi1jbGFz
cyBXb3JrUXVldWU6OldvcmtJdGVtUXQgOiBwdWJsaWMgUU9iamVjdCB7Ci0gICAgUV9PQkpFQ1QK
LXB1YmxpYzoKLSAgICBXb3JrSXRlbVF0KFdvcmtRdWV1ZSogd29ya1F1ZXVlLCBjb25zdCBGdW5j
dGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKLSAgICAgICAgOiBtX3F1ZXVlKHdvcmtRdWV1ZSkKLSAg
ICAgICAgLCBtX3NvdXJjZSgwKQotICAgICAgICAsIG1fc2lnbmFsKDApCi0gICAgICAgICwgbV9m
dW5jdGlvbihmdW5jdGlvbikKLSAgICB7Ci0gICAgfQotCi0gICAgV29ya0l0ZW1RdChXb3JrUXVl
dWUqIHdvcmtRdWV1ZSwgUU9iamVjdCogc291cmNlLCBjb25zdCBjaGFyKiBzaWduYWwsIGNvbnN0
IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQotICAgICAgICA6IG1fcXVldWUod29ya1F1ZXVl
KQotICAgICAgICAsIG1fc291cmNlKHNvdXJjZSkKLSAgICAgICAgLCBtX3NpZ25hbChzaWduYWwp
Ci0gICAgICAgICwgbV9mdW5jdGlvbihmdW5jdGlvbikKLSAgICB7Ci0gICAgICAgIGNvbm5lY3Qo
bV9zb3VyY2UsIG1fc2lnbmFsLCBTTE9UKGV4ZWN1dGUoKSksIFF0OjpRdWV1ZWRDb25uZWN0aW9u
KTsKLSAgICB9Ci0KLSAgICB+V29ya0l0ZW1RdCgpCi0gICAgewotICAgIH0KLQotICAgIFFfU0xP
VCB2b2lkIGV4ZWN1dGUoKSAKLSAgICB7IAotICAgICAgICBpZiAobV9xdWV1ZS0+bV9pc1ZhbGlk
KQotICAgICAgICAgICAgbV9mdW5jdGlvbigpOwotICAgIH0KLQotICAgIFFfU0xPVCB2b2lkIGV4
ZWN1dGVBbmREZWxldGUoKQotICAgIHsKLSAgICAgICAgZXhlY3V0ZSgpOwotICAgICAgICBkZWxl
dGUgdGhpczsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdGltZXJFdmVudChRVGltZXJFdmVu
dCopCi0gICAgewotICAgICAgICBleGVjdXRlQW5kRGVsZXRlKCk7Ci0gICAgfQotCi0gICAgV29y
a1F1ZXVlKiBtX3F1ZXVlOwotICAgIFFPYmplY3QqIG1fc291cmNlOwotICAgIGNvbnN0IGNoYXIq
IG1fc2lnbmFsOwotICAgIEZ1bmN0aW9uPHZvaWQoKT4gbV9mdW5jdGlvbjsKLX07Ci0KLVFTb2Nr
ZXROb3RpZmllciogV29ya1F1ZXVlOjpyZWdpc3RlclNvY2tldEV2ZW50SGFuZGxlcihpbnQgc29j
a2V0RGVzY3JpcHRvciwgUVNvY2tldE5vdGlmaWVyOjpUeXBlIHR5cGUsIGNvbnN0IEZ1bmN0aW9u
PHZvaWQoKT4mIGZ1bmN0aW9uKQotewotICAgIEFTU0VSVChtX3dvcmtUaHJlYWQpOwotCi0gICAg
UVNvY2tldE5vdGlmaWVyKiBub3RpZmllciA9IG5ldyBRU29ja2V0Tm90aWZpZXIoc29ja2V0RGVz
Y3JpcHRvciwgdHlwZSwgMCk7Ci0gICAgbm90aWZpZXItPnNldEVuYWJsZWQoZmFsc2UpOwotICAg
IG5vdGlmaWVyLT5tb3ZlVG9UaHJlYWQobV93b3JrVGhyZWFkKTsKLSAgICBXb3JrUXVldWU6Oldv
cmtJdGVtUXQqIGl0ZW1RdCA9IG5ldyBXb3JrUXVldWU6OldvcmtJdGVtUXQodGhpcywgbm90aWZp
ZXIsIFNJR05BTChhY3RpdmF0ZWQoaW50KSksIGZ1bmN0aW9uKTsKLSAgICBpdGVtUXQtPm1vdmVU
b1RocmVhZChtX3dvcmtUaHJlYWQpOwotICAgIG5vdGlmaWVyLT5zZXRFbmFibGVkKHRydWUpOwot
ICAgIHJldHVybiBub3RpZmllcjsKLX0KLQotdm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW5pdGlh
bGl6ZShjb25zdCBjaGFyKikKLXsKLSAgICBtX3dvcmtUaHJlYWQgPSBuZXcgUVRocmVhZCgpOwot
ICAgIG1fd29ya1RocmVhZC0+c3RhcnQoKTsKLX0KLQotdm9pZCBXb3JrUXVldWU6OnBsYXRmb3Jt
SW52YWxpZGF0ZSgpCi17Ci0gICAgbV93b3JrVGhyZWFkLT5leGl0KCk7Ci0gICAgbV93b3JrVGhy
ZWFkLT53YWl0KCk7Ci0gICAgZGVsZXRlIG1fd29ya1RocmVhZDsKLX0KLQotdm9pZCBXb3JrUXVl
dWU6OmRpc3BhdGNoKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQotewotICAgIFdv
cmtRdWV1ZTo6V29ya0l0ZW1RdCogaXRlbVF0ID0gbmV3IFdvcmtRdWV1ZTo6V29ya0l0ZW1RdCh0
aGlzLCBmdW5jdGlvbik7Ci0gICAgaXRlbVF0LT5tb3ZlVG9UaHJlYWQobV93b3JrVGhyZWFkKTsK
LSAgICBRTWV0YU9iamVjdDo6aW52b2tlTWV0aG9kKGl0ZW1RdCwgImV4ZWN1dGVBbmREZWxldGUi
LCBRdDo6UXVldWVkQ29ubmVjdGlvbik7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpkaXNwYXRjaEFm
dGVyRGVsYXkoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24sIGRvdWJsZSBkZWxheUlu
U2Vjb25kKQotewotICAgIFdvcmtRdWV1ZTo6V29ya0l0ZW1RdCogaXRlbVF0ID0gbmV3IFdvcmtR
dWV1ZTo6V29ya0l0ZW1RdCh0aGlzLCBmdW5jdGlvbik7Ci0gICAgaXRlbVF0LT5zdGFydFRpbWVy
KHN0YXRpY19jYXN0PGludD4oZGVsYXlJblNlY29uZCAqIDEwMDApKTsKLSAgICBpdGVtUXQtPm1v
dmVUb1RocmVhZChtX3dvcmtUaHJlYWQpOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2hP
blRlcm1pbmF0aW9uKFdlYktpdDo6UGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllciBwcm9jZXNzLCBj
b25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKLXsKLSAgICBXb3JrUXVldWU6OldvcmtJ
dGVtUXQqIGl0ZW1RdCA9IG5ldyBXb3JrUXVldWU6OldvcmtJdGVtUXQodGhpcywgcHJvY2Vzcywg
U0lHTkFMKGZpbmlzaGVkKGludCwgUVByb2Nlc3M6OkV4aXRTdGF0dXMpKSwgZnVuY3Rpb24pOwot
ICAgIGl0ZW1RdC0+bW92ZVRvVGhyZWFkKG1fd29ya1RocmVhZCk7Ci19Ci0KLSNpbmNsdWRlICJX
b3JrUXVldWVRdC5tb2MiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS93aW4v
V29ya1F1ZXVlV2luLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3dpbi9Xb3JrUXVldWVX
aW4uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYWJhZGJkYTg5NWUwN2Q5ZWU1
MzMwNzk1Y2M5NGU2MTdlYjkxZDdiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3dpbi9Xb3JrUXVldWVXaW4uY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsMjkxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiV29ya1F1ZXVlLmgiCi0KLSNpbmNsdWRlIDxXZWJDb3JlL05v
dEltcGxlbWVudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgotCi1pbmxpbmUgV29y
a1F1ZXVlOjpXb3JrSXRlbVdpbjo6V29ya0l0ZW1XaW4oY29uc3QgRnVuY3Rpb248dm9pZCgpPiYg
ZnVuY3Rpb24sIFdvcmtRdWV1ZSogcXVldWUpCi0gICAgOiBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQot
ICAgICwgbV9xdWV1ZShxdWV1ZSkKLXsKLX0KLQotUGFzc1JlZlB0cjxXb3JrUXVldWU6OldvcmtJ
dGVtV2luPiBXb3JrUXVldWU6OldvcmtJdGVtV2luOjpjcmVhdGUoY29uc3QgRnVuY3Rpb248dm9p
ZCgpPiYgZnVuY3Rpb24sIFdvcmtRdWV1ZSogcXVldWUpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBXb3JrSXRlbVdpbihmdW5jdGlvbiwgcXVldWUpKTsKLX0KLQotV29ya1F1ZXVlOjpXb3Jr
SXRlbVdpbjo6fldvcmtJdGVtV2luKCkKLXsKLX0KLQotaW5saW5lIFdvcmtRdWV1ZTo6SGFuZGxl
V29ya0l0ZW06OkhhbmRsZVdvcmtJdGVtKEhBTkRMRSBoYW5kbGUsIGNvbnN0IEZ1bmN0aW9uPHZv
aWQoKT4mIGZ1bmN0aW9uLCBXb3JrUXVldWUqIHF1ZXVlKQotICAgIDogV29ya0l0ZW1XaW4oZnVu
Y3Rpb24sIHF1ZXVlKQotICAgICwgbV9oYW5kbGUoaGFuZGxlKQotICAgICwgbV93YWl0SGFuZGxl
KDApCi17Ci0gICAgQVNTRVJUX0FSRyhoYW5kbGUsIGhhbmRsZSk7Ci19Ci0KLVBhc3NSZWZQdHI8
V29ya1F1ZXVlOjpIYW5kbGVXb3JrSXRlbT4gV29ya1F1ZXVlOjpIYW5kbGVXb3JrSXRlbTo6Y3Jl
YXRlQnlBZG9wdGluZ0hhbmRsZShIQU5ETEUgaGFuZGxlLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+
JiBmdW5jdGlvbiwgV29ya1F1ZXVlKiBxdWV1ZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3
IEhhbmRsZVdvcmtJdGVtKGhhbmRsZSwgZnVuY3Rpb24sIHF1ZXVlKSk7Ci19Ci0KLVdvcmtRdWV1
ZTo6SGFuZGxlV29ya0l0ZW06On5IYW5kbGVXb3JrSXRlbSgpCi17Ci0gICAgOjpDbG9zZUhhbmRs
ZShtX2hhbmRsZSk7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpoYW5kbGVDYWxsYmFjayh2b2lkKiBj
b250ZXh0LCBCT09MRUFOIHRpbWVyT3JXYWl0RmlyZWQpCi17Ci0gICAgQVNTRVJUX0FSRyhjb250
ZXh0LCBjb250ZXh0KTsKLSAgICBBU1NFUlRfQVJHKHRpbWVyT3JXYWl0RmlyZWQsICF0aW1lck9y
V2FpdEZpcmVkKTsKLQotICAgIFdvcmtJdGVtV2luKiBpdGVtID0gc3RhdGljX2Nhc3Q8V29ya0l0
ZW1XaW4qPihjb250ZXh0KTsKLSAgICBXb3JrUXVldWUqIHF1ZXVlID0gaXRlbS0+cXVldWUoKTsK
LQotICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9jayhxdWV1ZS0+bV93b3JrSXRlbVF1ZXVl
TG9jayk7Ci0gICAgICAgIHF1ZXVlLT5tX3dvcmtJdGVtUXVldWUuYXBwZW5kKGl0ZW0pOwotCi0g
ICAgICAgIC8vIElmIG5vIG90aGVyIHRocmVhZCBpcyBwZXJmb3JtaW5nIHdvcmssIHdlIGNhbiBk
byBpdCBvbiB0aGlzIHRocmVhZC4KLSAgICAgICAgaWYgKCFxdWV1ZS0+dHJ5UmVnaXN0ZXJBc1dv
cmtUaHJlYWQoKSkgewotICAgICAgICAgICAgLy8gU29tZSBvdGhlciB0aHJlYWQgaXMgcGVyZm9y
bWluZyB3b3JrLiBTaW5jZSB3ZSBob2xkIHRoZSBxdWV1ZSBsb2NrLCB3ZSBjYW4gYmUgc3VyZQot
ICAgICAgICAgICAgLy8gdGhhdCB0aGUgd29yayB0aHJlYWQgaXMgbm90IGV4aXRpbmcgZHVlIHRv
IGFuIGVtcHR5IHF1ZXVlIGFuZCB3aWxsIHByb2Nlc3MgdGhlIHdvcmsKLSAgICAgICAgICAgIC8v
IGl0ZW0gd2UganVzdCBhZGRlZCB0byBpdC4gSWYgd2Ugd2VyZW4ndCBob2xkaW5nIHRoZSBsb2Nr
IHdlJ2QgaGF2ZSB0byBzaWduYWwKLSAgICAgICAgICAgIC8vIG1fcGVyZm9ybVdvcmtFdmVudCB0
byBtYWtlIHN1cmUgdGhlIHdvcmsgaXRlbSBnb3QgcGlja2VkIHVwLgotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcXVldWUtPnBlcmZvcm1Xb3JrT25SZWdpc3Rl
cmVkV29ya1RocmVhZCgpOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6cmVnaXN0ZXJIYW5kbGUoSEFO
RExFIGhhbmRsZSwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCi17Ci0gICAgUmVm
UHRyPEhhbmRsZVdvcmtJdGVtPiBoYW5kbGVJdGVtID0gSGFuZGxlV29ya0l0ZW06OmNyZWF0ZUJ5
QWRvcHRpbmdIYW5kbGUoaGFuZGxlLCBmdW5jdGlvbiwgdGhpcyk7Ci0KLSAgICB7Ci0gICAgICAg
IE11dGV4TG9ja2VyIGxvY2sobV9oYW5kbGVzTG9jayk7Ci0gICAgICAgIEFTU0VSVF9BUkcoaGFu
ZGxlLCAhbV9oYW5kbGVzLmNvbnRhaW5zKGhhbmRsZSkpOwotICAgICAgICBtX2hhbmRsZXMuc2V0
KGhhbmRsZSwgaGFuZGxlSXRlbSk7Ci0gICAgfQotCi0gICAgSEFORExFIHdhaXRIYW5kbGU7Ci0g
ICAgaWYgKCE6OlJlZ2lzdGVyV2FpdEZvclNpbmdsZU9iamVjdCgmd2FpdEhhbmRsZSwgaGFuZGxl
LCBoYW5kbGVDYWxsYmFjaywgaGFuZGxlSXRlbS5nZXQoKSwgSU5GSU5JVEUsIFdUX0VYRUNVVEVE
RUZBVUxUKSkgewotICAgICAgICBEV09SRCBlcnJvciA9IDo6R2V0TGFzdEVycm9yKCk7Ci0gICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLSAgICBoYW5kbGVJdGVtLT5zZXRXYWl0
SGFuZGxlKHdhaXRIYW5kbGUpOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6dW5yZWdpc3RlckFuZENs
b3NlSGFuZGxlKEhBTkRMRSBoYW5kbGUpCi17Ci0gICAgUmVmUHRyPEhhbmRsZVdvcmtJdGVtPiBp
dGVtOwotICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1faGFuZGxlc0xvY2spOwot
ICAgICAgICBBU1NFUlRfQVJHKGhhbmRsZSwgbV9oYW5kbGVzLmNvbnRhaW5zKGhhbmRsZSkpOwot
ICAgICAgICBpdGVtID0gbV9oYW5kbGVzLnRha2UoaGFuZGxlKTsKLSAgICB9Ci0KLSAgICB1bnJl
Z2lzdGVyV2FpdEFuZERlc3Ryb3lJdGVtU29vbihpdGVtLnJlbGVhc2UoKSk7Ci19Ci0KLURXT1JE
IFdvcmtRdWV1ZTo6d29ya1RocmVhZENhbGxiYWNrKHZvaWQqIGNvbnRleHQpCi17Ci0gICAgQVNT
RVJUX0FSRyhjb250ZXh0LCBjb250ZXh0KTsKLQotICAgIFdvcmtRdWV1ZSogcXVldWUgPSBzdGF0
aWNfY2FzdDxXb3JrUXVldWUqPihjb250ZXh0KTsKLQotICAgIGlmICghcXVldWUtPnRyeVJlZ2lz
dGVyQXNXb3JrVGhyZWFkKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcXVldWUtPnBlcmZv
cm1Xb3JrT25SZWdpc3RlcmVkV29ya1RocmVhZCgpOwotICAgIHJldHVybiAwOwotfQotCi12b2lk
IFdvcmtRdWV1ZTo6cGVyZm9ybVdvcmtPblJlZ2lzdGVyZWRXb3JrVGhyZWFkKCkKLXsKLSAgICBB
U1NFUlQobV9pc1dvcmtUaHJlYWRSZWdpc3RlcmVkKTsKLQotICAgIGJvb2wgaXNWYWxpZCA9IHRy
dWU7Ci0KLSAgICBtX3dvcmtJdGVtUXVldWVMb2NrLmxvY2soKTsKLQotICAgIHdoaWxlIChpc1Zh
bGlkICYmICFtX3dvcmtJdGVtUXVldWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFZlY3RvcjxSZWZQ
dHI8V29ya0l0ZW1XaW4+ID4gd29ya0l0ZW1RdWV1ZTsKLSAgICAgICAgbV93b3JrSXRlbVF1ZXVl
LnN3YXAod29ya0l0ZW1RdWV1ZSk7Ci0KLSAgICAgICAgLy8gQWxsb3cgbW9yZSB3b3JrIHRvIGJl
IHNjaGVkdWxlZCB3aGlsZSB3ZSdyZSBub3QgdXNpbmcgdGhlIHF1ZXVlIGRpcmVjdGx5LgotICAg
ICAgICBtX3dvcmtJdGVtUXVldWVMb2NrLnVubG9jaygpOwotICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHdvcmtJdGVtUXVldWUuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIE11dGV4
TG9ja2VyIGxvY2tlcihtX2lzVmFsaWRNdXRleCk7Ci0gICAgICAgICAgICBpc1ZhbGlkID0gbV9p
c1ZhbGlkOwotICAgICAgICAgICAgaWYgKCFpc1ZhbGlkKQotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgd29ya0l0ZW1RdWV1ZVtpXS0+ZnVuY3Rpb24oKSgpOwotICAgICAgICB9
Ci0gICAgICAgIG1fd29ya0l0ZW1RdWV1ZUxvY2subG9jaygpOwotICAgIH0KLQotICAgIC8vIE9u
ZSBpbnZhcmlhbnQgd2UgbWFpbnRhaW4gaXMgdGhhdCBhbnkgd29yayBzY2hlZHVsZWQgd2hpbGUg
YSB3b3JrIHRocmVhZCBpcyByZWdpc3RlcmVkIHdpbGwKLSAgICAvLyBiZSBoYW5kbGVkIGJ5IHRo
YXQgd29yayB0aHJlYWQuIFVucmVnaXN0ZXIgYXMgdGhlIHdvcmsgdGhyZWFkIHdoaWxlIHRoZSBx
dWV1ZSBsb2NrIGlzIHN0aWxsCi0gICAgLy8gaGVsZCBzbyB0aGF0IG5vIHdvcmsgY2FuIGJlIHNj
aGVkdWxlZCB3aGlsZSB3ZSdyZSBzdGlsbCByZWdpc3RlcmVkLgotICAgIHVucmVnaXN0ZXJBc1dv
cmtUaHJlYWQoKTsKLQotICAgIG1fd29ya0l0ZW1RdWV1ZUxvY2sudW5sb2NrKCk7Ci19Ci0KLXZv
aWQgV29ya1F1ZXVlOjpwbGF0Zm9ybUluaXRpYWxpemUoY29uc3QgY2hhciogbmFtZSkKLXsKLSAg
ICBtX2lzV29ya1RocmVhZFJlZ2lzdGVyZWQgPSAwOwotICAgIG1fdGltZXJRdWV1ZSA9IDo6Q3Jl
YXRlVGltZXJRdWV1ZSgpOwotICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV90aW1lclF1ZXVlLCAi
OjpDcmVhdGVUaW1lclF1ZXVlIGZhaWxlZCB3aXRoIGVycm9yICVsdSIsIDo6R2V0TGFzdEVycm9y
KCkpOwotfQotCi1ib29sIFdvcmtRdWV1ZTo6dHJ5UmVnaXN0ZXJBc1dvcmtUaHJlYWQoKQotewot
ICAgIExPTkcgcmVzdWx0ID0gOjpJbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZSgmbV9pc1dvcmtU
aHJlYWRSZWdpc3RlcmVkLCAxLCAwKTsKLSAgICBBU1NFUlQoIXJlc3VsdCB8fCByZXN1bHQgPT0g
MSk7Ci0gICAgcmV0dXJuICFyZXN1bHQ7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjp1bnJlZ2lzdGVy
QXNXb3JrVGhyZWFkKCkKLXsKLSAgICBMT05HIHJlc3VsdCA9IDo6SW50ZXJsb2NrZWRDb21wYXJl
RXhjaGFuZ2UoJm1faXNXb3JrVGhyZWFkUmVnaXN0ZXJlZCwgMCwgMSk7Ci0gICAgQVNTRVJUX1VO
VVNFRChyZXN1bHQsIHJlc3VsdCA9PSAxKTsKLX0KLQotdm9pZCBXb3JrUXVldWU6OnBsYXRmb3Jt
SW52YWxpZGF0ZSgpCi17Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIE11dGV4TG9ja2VyIGxv
Y2sobV9oYW5kbGVzTG9jayk7Ci0gICAgQVNTRVJUKG1faGFuZGxlcy5pc0VtcHR5KCkpOwotI2Vu
ZGlmCi0KLSAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBlbnN1cmUgdGhhdCBhbnkgdGltZXItcXVl
dWUgdGltZXJzIHRoYXQgZmlyZSBhZnRlciB0aGlzIHBvaW50IGRvbid0IHRyeSB0bwotICAgIC8v
IGFjY2VzcyB0aGlzIFdvcmtRdWV1ZSA8aHR0cDovL3dlYmtpdC5vcmcvYi80NDY5MD4uCi0gICAg
OjpEZWxldGVUaW1lclF1ZXVlRXgobV90aW1lclF1ZXVlLCAwKTsKLX0KLQotdm9pZCBXb3JrUXVl
dWU6OmRpc3BhdGNoKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQotewotICAgIE11
dGV4TG9ja2VyIGxvY2tlcihtX3dvcmtJdGVtUXVldWVMb2NrKTsKLQotICAgIG1fd29ya0l0ZW1R
dWV1ZS5hcHBlbmQoV29ya0l0ZW1XaW46OmNyZWF0ZShmdW5jdGlvbiwgdGhpcykpOwotCi0gICAg
Ly8gU3Bhd24gYSB3b3JrIHRocmVhZCB0byBwZXJmb3JtIHRoZSB3b3JrIHdlIGp1c3QgYWRkZWQu
IEFzIGFuIG9wdGltaXphdGlvbiwgd2UgYXZvaWQKLSAgICAvLyBzcGF3bmluZyB0aGUgdGhyZWFk
IGlmIGEgd29yayB0aHJlYWQgaXMgYWxyZWFkeSByZWdpc3RlcmVkLiBUaGlzIHByZXZlbnRzIG11
bHRpcGxlIHdvcmsKLSAgICAvLyB0aHJlYWRzIGZyb20gYmVpbmcgc3Bhd25lZCBpbiBtb3N0IGNh
c2VzLiAoTm90ZSB0aGF0IHdoZW4gYSB3b3JrIHRocmVhZCBoYXMgYmVlbiBzcGF3bmVkIGJ1dAot
ICAgIC8vIGhhc24ndCByZWdpc3RlcmVkIGl0c2VsZiB5ZXQsIG1faXNXb3JrVGhyZWFkUmVnaXN0
ZXJlZCB3aWxsIGJlIGZhbHNlIGFuZCB3ZSdsbCBlbmQgdXAKLSAgICAvLyBzcGF3bmluZyBhIHNl
Y29uZCB3b3JrIHRocmVhZCBoZXJlLiBCdXQgd29yayB0aHJlYWQgcmVnaXN0cmF0aW9uIHByb2Nl
c3Mgd2lsbCBlbnN1cmUgdGhhdAotICAgIC8vIG9ubHkgb25lIHRocmVhZCBhY3R1YWxseSBlbmRz
IHVwIHBlcmZvcm1pbmcgd29yay4pCi0gICAgaWYgKCFtX2lzV29ya1RocmVhZFJlZ2lzdGVyZWQp
Ci0gICAgICAgIDo6UXVldWVVc2VyV29ya0l0ZW0od29ya1RocmVhZENhbGxiYWNrLCB0aGlzLCBX
VF9FWEVDVVRFREVGQVVMVCk7Ci19Ci0KLXN0cnVjdCBUaW1lckNvbnRleHQgOiBwdWJsaWMgVGhy
ZWFkU2FmZVJlZkNvdW50ZWQ8VGltZXJDb250ZXh0PiB7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8
VGltZXJDb250ZXh0PiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgVGltZXJDb250ZXh0
KTsgfQotCi0gICAgV29ya1F1ZXVlKiBxdWV1ZTsKLSAgICBGdW5jdGlvbjx2b2lkKCk+IGZ1bmN0
aW9uOwotICAgIE11dGV4IHRpbWVyTXV0ZXg7Ci0gICAgSEFORExFIHRpbWVyOwotCi1wcml2YXRl
OgotICAgIFRpbWVyQ29udGV4dCgpIDogcXVldWUoMCksIHRpbWVyKDApIHsgfQotfTsKLQotdm9p
ZCBXb3JrUXVldWU6OnRpbWVyQ2FsbGJhY2sodm9pZCogY29udGV4dCwgQk9PTEVBTiB0aW1lck9y
V2FpdEZpcmVkKQotewotICAgIEFTU0VSVF9BUkcoY29udGV4dCwgY29udGV4dCk7Ci0gICAgQVNT
RVJUX1VOVVNFRCh0aW1lck9yV2FpdEZpcmVkLCB0aW1lck9yV2FpdEZpcmVkKTsKLQotICAgIC8v
IEJhbGFuY2VkIGJ5IGxlYWtSZWYgaW4gc2NoZWR1bGVXb3JrQWZ0ZXJEZWxheS4KLSAgICBSZWZQ
dHI8VGltZXJDb250ZXh0PiB0aW1lckNvbnRleHQgPSBhZG9wdFJlZihzdGF0aWNfY2FzdDxUaW1l
ckNvbnRleHQqPihjb250ZXh0KSk7Ci0KLSAgICB0aW1lckNvbnRleHQtPnF1ZXVlLT5kaXNwYXRj
aCh0aW1lckNvbnRleHQtPmZ1bmN0aW9uKTsKLQotICAgIE11dGV4TG9ja2VyIGxvY2sodGltZXJD
b250ZXh0LT50aW1lck11dGV4KTsKLSAgICBBU1NFUlQodGltZXJDb250ZXh0LT50aW1lcik7Ci0g
ICAgQVNTRVJUKHRpbWVyQ29udGV4dC0+cXVldWUtPm1fdGltZXJRdWV1ZSk7Ci0gICAgaWYgKCE6
OkRlbGV0ZVRpbWVyUXVldWVUaW1lcih0aW1lckNvbnRleHQtPnF1ZXVlLT5tX3RpbWVyUXVldWUs
IHRpbWVyQ29udGV4dC0+dGltZXIsIDApKQotICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGZh
bHNlLCAiOjpEZWxldGVUaW1lclF1ZXVlVGltZXIgZmFpbGVkIHdpdGggZXJyb3IgJWx1IiwgOjpH
ZXRMYXN0RXJyb3IoKSk7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpkaXNwYXRjaEFmdGVyRGVsYXko
Y29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24sIGRvdWJsZSBkZWxheSkKLXsKLSAgICBB
U1NFUlQobV90aW1lclF1ZXVlKTsKLQotICAgIFJlZlB0cjxUaW1lckNvbnRleHQ+IGNvbnRleHQg
PSBUaW1lckNvbnRleHQ6OmNyZWF0ZSgpOwotICAgIGNvbnRleHQtPnF1ZXVlID0gdGhpczsKLSAg
ICBjb250ZXh0LT5mdW5jdGlvbiA9IGZ1bmN0aW9uOwotCi0gICAgewotICAgICAgICAvLyBUaGUg
dGltZXIgY2FsbGJhY2sgY291bGQgZmlyZSBiZWZvcmUgOjpDcmVhdGVUaW1lclF1ZXVlVGltZXIg
ZXZlbiByZXR1cm5zLCBzbyB3ZSBwcm90ZWN0Ci0gICAgICAgIC8vIGNvbnRleHQtPnRpbWVyIHdp
dGggYSBtdXRleCB0byBlbnN1cmUgdGhlIHRpbWVyIGNhbGxiYWNrIGRvZXNuJ3QgYWNjZXNzIGl0
IGJlZm9yZSB0aGUKLSAgICAgICAgLy8gdGltZXIgaGFuZGxlIGhhcyBiZWVuIHN0b3JlZCBpbiBp
dC4KLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9jayhjb250ZXh0LT50aW1lck11dGV4KTsKLQotICAg
ICAgICAvLyBTaW5jZSBvdXIgdGltZXIgY2FsbGJhY2sgaXMgcXVpY2ssIHdlIGNhbiBleGVjdXRl
IGluIHRoZSB0aW1lciB0aHJlYWQgaXRzZWxmIGFuZCBhdm9pZAotICAgICAgICAvLyBhbiBleHRy
YSB0aHJlYWQgc3dpdGNoIG92ZXIgdG8gYSB3b3JrZXIgdGhyZWFkLgotICAgICAgICBpZiAoITo6
Q3JlYXRlVGltZXJRdWV1ZVRpbWVyKCZjb250ZXh0LT50aW1lciwgbV90aW1lclF1ZXVlLCB0aW1l
ckNhbGxiYWNrLCBjb250ZXh0LmdldCgpLCBkZWxheSAqIDEwMDAsIDAsIFdUX0VYRUNVVEVJTlRJ
TUVSVEhSRUFEKSkgewotICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShmYWxzZSwgIjo6
Q3JlYXRlVGltZXJRdWV1ZVRpbWVyIGZhaWxlZCB3aXRoIGVycm9yICVsdSIsIDo6R2V0TGFzdEVy
cm9yKCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8g
VGhlIHRpbWVyIGNhbGxiYWNrIHdpbGwgaGFuZGxlIGRlc3Ryb3lpbmcgY29udGV4dC4KLSAgICBj
b250ZXh0LnJlbGVhc2UoKS5sZWFrUmVmKCk7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjp1bnJlZ2lz
dGVyV2FpdEFuZERlc3Ryb3lJdGVtU29vbihQYXNzUmVmUHRyPEhhbmRsZVdvcmtJdGVtPiBpdGVt
KQotewotICAgIC8vIFdlJ3JlIGdvaW5nIHRvIG1ha2UgYSBibG9ja2luZyBjYWxsIHRvIDo6VW5y
ZWdpc3RlcldhaXRFeCBiZWZvcmUgY2xvc2luZyB0aGUgaGFuZGxlLiAoVGhlCi0gICAgLy8gYmxv
Y2tpbmcgdmVyc2lvbiBvZiA6OlVucmVnaXN0ZXJXYWl0RXggaXMgbXVjaCBzaW1wbGVyIHRoYW4g
dGhlIG5vbi1ibG9ja2luZyB2ZXJzaW9uLikgSWYgd2UKLSAgICAvLyBkbyB0aGlzIG9uIHRoZSBj
dXJyZW50IHRocmVhZCwgd2UnbGwgZGVhZGxvY2sgaWYgd2UncmUgY3VycmVudGx5IGluIGEgY2Fs
bGJhY2sgZnVuY3Rpb24gZm9yCi0gICAgLy8gdGhlIHdhaXQgd2UncmUgdW5yZWdpc3RlcmluZy4g
U28gaW5zdGVhZCB3ZSBkbyBpdCBhc3luY2hyb25vdXNseSBvbiBzb21lIG90aGVyIHdvcmtlciB0
aHJlYWQuCi0KLSAgICA6OlF1ZXVlVXNlcldvcmtJdGVtKHVucmVnaXN0ZXJXYWl0QW5kRGVzdHJv
eUl0ZW1DYWxsYmFjaywgaXRlbS5sZWFrUmVmKCksIFdUX0VYRUNVVEVERUZBVUxUKTsKLX0KLQot
RFdPUkQgV0lOQVBJIFdvcmtRdWV1ZTo6dW5yZWdpc3RlcldhaXRBbmREZXN0cm95SXRlbUNhbGxi
YWNrKHZvaWQqIGNvbnRleHQpCi17Ci0gICAgQVNTRVJUX0FSRyhjb250ZXh0LCBjb250ZXh0KTsK
LSAgICBSZWZQdHI8SGFuZGxlV29ya0l0ZW0+IGl0ZW0gPSBhZG9wdFJlZihzdGF0aWNfY2FzdDxI
YW5kbGVXb3JrSXRlbSo+KGNvbnRleHQpKTsKLQotICAgIC8vIE5vdyB0aGF0IHdlIGtub3cgd2Un
cmUgbm90IGluIGEgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHRoZSB3YWl0IHdlJ3JlIHVucmVnaXN0
ZXJpbmcsIHdlIGNhbgotICAgIC8vIG1ha2UgYSBibG9ja2luZyBjYWxsIHRvIDo6VW5yZWdpc3Rl
cldhaXRFeC4KLSAgICBpZiAoITo6VW5yZWdpc3RlcldhaXRFeChpdGVtLT53YWl0SGFuZGxlKCks
IElOVkFMSURfSEFORExFX1ZBTFVFKSkgewotICAgICAgICBEV09SRCBlcnJvciA9IDo6R2V0TGFz
dEVycm9yKCk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLQotICAgIHJl
dHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2Ug
Yi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCA3ZDA2MTg0YzFiYjlkZGVi
NmE3NWVlZTIzZWM3NWM3Yjk3YzhhYmQ1Li5mOWIzMzYzMzJjNWQxM2Q3MGY0NDZiYTg5MjcwMjg3
MmYwYjViMjkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAtOCw3ICs4LDYgQEAgTElT
VChBUFBFTkQgV2ViS2l0Ml9MSU5LX0ZMQUdTCiAKIExJU1QoQVBQRU5EIFdlYktpdDJfU09VUkNF
UwogICAgIFBsYXRmb3JtL2VmbC9Nb2R1bGVFZmwuY3BwCi0gICAgUGxhdGZvcm0vZWZsL1dvcmtR
dWV1ZUVmbC5jcHAKICAgICBQbGF0Zm9ybS91bml4L1NoYXJlZE1lbW9yeVVuaXguY3BwCiAKICAg
ICBQbGF0Zm9ybS9Db3JlSVBDL3VuaXgvQ29ubmVjdGlvblVuaXguY3BwCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQppbmRl
eCAyY2E4YzJlMDMxMGU5ZDA4OWFhZmFjZTVmYmZiZDNhNjU1ZjkwNmU1Li5mMTQ2ZTk5M2Q1MmFh
ZTgwMjc5ZjFmZGIxNGFmNDM5YTc2NTNiODY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9U
YXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKQEAgLTMwLDkgKzMwLDcg
QEAgSEVBREVSUyArPSBcCiAgICAgUGxhdGZvcm0vQ29yZUlQQy9NZXNzYWdlU2VuZGVyLmggXAog
ICAgIFBsYXRmb3JtL0xvZ2dpbmcuaCBcCiAgICAgUGxhdGZvcm0vTW9kdWxlLmggXAotICAgIFBs
YXRmb3JtL1BsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIuaCBcCiAgICAgUGxhdGZvcm0vU2hhcmVk
TWVtb3J5LmggXAotICAgIFBsYXRmb3JtL1dvcmtRdWV1ZS5oIFwKICAgICBQbHVnaW5Qcm9jZXNz
L1BsdWdpbkNvbnRyb2xsZXJQcm94eS5oIFwKICAgICBQbHVnaW5Qcm9jZXNzL1BsdWdpbkNyZWF0
aW9uUGFyYW1ldGVycy5oIFwKICAgICBQbHVnaW5Qcm9jZXNzL1BsdWdpblByb2Nlc3MuaCBcCkBA
IC00MDYsNyArNDA0LDYgQEAgU09VUkNFUyArPSBcCiAgICAgUGxhdGZvcm0vQ29yZUlQQy9EYXRh
UmVmZXJlbmNlLmNwcCBcCiAgICAgUGxhdGZvcm0vTG9nZ2luZy5jcHAgXAogICAgIFBsYXRmb3Jt
L01vZHVsZS5jcHAgXAotICAgIFBsYXRmb3JtL1dvcmtRdWV1ZS5jcHAgXAogICAgIFBsYXRmb3Jt
L3F0L0xvZ2dpbmdRdC5jcHAgXAogICAgIFBsYXRmb3JtL3F0L01vZHVsZVF0LmNwcCBcCiAgICAg
UGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHkuY3BwIFwKQEAgLTgxMywxNCArODEw
LDEyIEBAIG1hYzogewogICAgIFNPVVJDRVMgKz0gXAogICAgICAgICBQbGF0Zm9ybS9Db3JlSVBD
L21hYy9Db25uZWN0aW9uTWFjLmNwcCBcCiAgICAgICAgIFBsYXRmb3JtL21hYy9NYWNoVXRpbGl0
aWVzLmNwcCBcCi0gICAgICAgIFBsYXRmb3JtL21hYy9Xb3JrUXVldWVNYWMuY3BwIFwKICAgICAg
ICAgUGxhdGZvcm0vbWFjL1NoYXJlZE1lbW9yeU1hYy5jcHAKIAogfSBlbHNlIHsKICAgICBTT1VS
Q0VTICs9IFwKICAgICAgICAgUGxhdGZvcm0vQ29yZUlQQy91bml4L0F0dGFjaG1lbnRVbml4LmNw
cCBcCiAgICAgICAgIFBsYXRmb3JtL0NvcmVJUEMvdW5peC9Db25uZWN0aW9uVW5peC5jcHAgXAot
ICAgICAgICBQbGF0Zm9ybS9xdC9Xb3JrUXVldWVRdC5jcHAgXAogICAgICAgICBQbGF0Zm9ybS91
bml4L1NoYXJlZE1lbW9yeVVuaXguY3BwCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9MYXVuY2hlci9Qcm9jZXNzTGF1bmNoZXIuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0xhdW5jaGVyL1Byb2Nlc3NMYXVuY2hlci5jcHAKaW5kZXggYmEyMmRkYTJkYTdi
YzViNDhkMzM1ODY5YWZhMzgwYzdiYjM2ODI5ZS4uNjdkZWY3NjgyMWZhMGI1MGRhZmU5YjljZTUx
NjhjNWVmZDk4MDMzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5j
aGVyL1Byb2Nlc3NMYXVuY2hlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xh
dW5jaGVyL1Byb2Nlc3NMYXVuY2hlci5jcHAKQEAgLTI2LDggKzI2LDggQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJQcm9jZXNzTGF1bmNoZXIuaCIKIAotI2luY2x1ZGUgIldvcmtR
dWV1ZS5oIgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvV29y
a1F1ZXVlLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvUHJvY2Vzc0xhdW5jaGVyLmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvTGF1bmNoZXIvUHJvY2Vzc0xhdW5jaGVyLmgKaW5kZXggYmMxZjg2N2YzYzI5
MTU1MjM2MzBjNjc2MTFmMDVjZTk3M2RlZDUzYi4uZDYxYmQ3OWRiZGIwYzE4NzYyZDFmMjcwMDE2
N2NhZTNhZWQ4ZjkzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5j
aGVyL1Byb2Nlc3NMYXVuY2hlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVu
Y2hlci9Qcm9jZXNzTGF1bmNoZXIuaApAQCAtMjcsNyArMjcsNyBAQAogI2RlZmluZSBXZWJQcm9j
ZXNzTGF1bmNoZXJfaAogCiAjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgotI2luY2x1ZGUgIlBsYXRm
b3JtUHJvY2Vzc0lkZW50aWZpZXIuaCIKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm1Qcm9jZXNzSWRl
bnRpZmllci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFk
aW5nLmg+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9U
aHJlYWRMYXVuY2hlci5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL1RocmVh
ZExhdW5jaGVyLmgKaW5kZXggZjNhNTMxMmEyYzRmNzdlYmYyMGZkMmM0ODk2NmYzNWFjYjBhZDhk
MS4uOWM2YjEyNDk2ZjBlMzU2YmVlMmFiNWQ2ODU5NTNlNmQxNmFhZDJiYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL1RocmVhZExhdW5jaGVyLmgKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL1RocmVhZExhdW5jaGVyLmgKQEAgLTI3
LDcgKzI3LDcgQEAKICNkZWZpbmUgVGhyZWFkTGF1bmNoZXJfaAogCiAjaW5jbHVkZSAiQ29ubmVj
dGlvbi5oIgotI2luY2x1ZGUgIlBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIuaCIKKyNpbmNsdWRl
IDx3dGYvUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuaAppbmRleCA1N2FiODZjMjQyOTNiMWFkMjIyMjQxMmViNThlOWE5ZjU2Yzhj
NTQ4Li4wZTk1YmU1NGI3YTFhZWVhNTAwNDNiY2Y3NTQzY2YxYjE3MzYyNTkxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCkBAIC00MCw3ICs0MCw2IEBACiAjZW5kaWYK
ICNpbmNsdWRlICJMYXllclRyZWVDb250ZXh0LmgiCiAjaW5jbHVkZSAiTm90aWZpY2F0aW9uUGVy
bWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVByb2Nlc3NJ
ZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiU2FuZGJveEV4dGVuc2lvbi5oIgogI2luY2x1ZGUgIlNo
YXJlYWJsZUJpdG1hcC5oIgogI2luY2x1ZGUgIldLQmFzZS5oIgpAQCAtNzMsNiArNzIsNyBAQAog
I2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtUHJvY2Vzc0lk
ZW50aWZpZXIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oCmluZGV4IDhlNzY4YmZiNmE4ODlkOWFkNmIzNjAwMDc2
OTRiMjU2NzZjZWE2ODYuLjY0MTlhN2EzNTM4YzYxZmU4ZDQ1NzljMzA2ZDIzNGI2NTVkZGMxMjIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmgKQEAgLTI2LDcg
KzI2LDYgQEAKICNpZm5kZWYgV2ViUHJvY2Vzc1Byb3h5X2gKICNkZWZpbmUgV2ViUHJvY2Vzc1By
b3h5X2gKIAotI2luY2x1ZGUgIlBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIuaCIKICNpbmNsdWRl
ICJQbHVnaW5JbmZvU3RvcmUuaCIKICNpbmNsdWRlICJQcm9jZXNzTGF1bmNoZXIuaCIKICNpbmNs
dWRlICJQcm9jZXNzTW9kZWwuaCIKQEAgLTM5LDYgKzM4LDcgQEAKICNpbmNsdWRlIDx3dGYvRm9y
d2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQ
dHIuaD4KKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oPgogI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJj
ZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA2MDc3ZjZk
M2UzOGE0NTEwMTIzOGI1NDIzNzhjYzI4N2UwNGRiYWYwLi5lYWQ0NzhhNjg0MDg0NGYyYWVhZDNm
NjY0MDNmYWEyMTkxY2MwYjAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC00NzYsNyArNDc2LDYgQEAKIAkJQjYzNDAzRjkxNDkx
MEQ1NzAwMTA3MEI1IC8qIEFQSU9iamVjdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCNjM0MDNGODE0OTEwRDU3MDAxMDcwQjUgLyogQVBJT2JqZWN0
LmNwcCAqLzsgfTsKIAkJQjg3OEI2MTUxMzM0MjhEQzAwNjg4OEU5IC8qIENvcnJlY3Rpb25QYW5l
bC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjg3OEI2
MTMxMzM0MjhEQzAwNjg4OEU5IC8qIENvcnJlY3Rpb25QYW5lbC5oICovOyB9OwogCQlCODc4QjYx
NjEzMzQyOERDMDA2ODg4RTkgLyogQ29ycmVjdGlvblBhbmVsLm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjg3OEI2MTQxMzM0MjhEQzAwNjg4OEU5IC8q
IENvcnJlY3Rpb25QYW5lbC5tbSAqLzsgfTsKLQkJQkMwMDkyRjgxMTU4MzdBMzAwRTBBRTJBIC8q
IFdvcmtRdWV1ZU1hYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCQzAwOTJGNjExNTgzN0EzMDBFMEFFMkEgLyogV29ya1F1ZXVlTWFjLmNwcCAqLzsg
fTsKIAkJQkMwMzJENzUxMEY0Mzc4RDAwNThDMTVBIC8qIFdlYkNocm9tZUNsaWVudC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMwMzJENjAxMEY0Mzc4
RDAwNThDMTVBIC8qIFdlYkNocm9tZUNsaWVudC5oICovOyB9OwogCQlCQzAzMkQ3NzEwRjQzNzhE
MDA1OEMxNUEgLyogV2ViQ29udGV4dE1lbnVDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMDMyRDYyMTBGNDM3OEQwMDU4QzE1QSAvKiBXZWJD
b250ZXh0TWVudUNsaWVudC5oICovOyB9OwogCQlCQzAzMkQ3QjEwRjQzNzhEMDA1OEMxNUEgLyog
V2ViRHJhZ0NsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQkMwMzJENjYxMEY0Mzc4RDAwNThDMTVBIC8qIFdlYkRyYWdDbGllbnQuaCAqLzsgfTsK
QEAgLTU2OSw4ICs1NjgsNiBAQAogCQlCQzJEMDIxNzEyQUM0MUNCMDBFNzMyQTMgLyogU2FtZURv
Y3VtZW50TmF2aWdhdGlvblR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEJDMkQwMjE2MTJBQzQxQ0IwMEU3MzJBMyAvKiBTYW1lRG9jdW1lbnROYXZp
Z2F0aW9uVHlwZS5oICovOyB9OwogCQlCQzJEMDIxOTEyQUM0MjZDMDBFNzMyQTMgLyogV0tQYWdl
TG9hZFR5cGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCQzJEMDIxODEyQUM0MjZDMDBFNzMyQTMgLyogV0tQYWdlTG9hZFR5cGVzLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkMyREZCQTMxMkE3NjFB
NTAwRTczMkEzIC8qIFdlYlByZWZlcmVuY2VzQ0YuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMyREZCQTIxMkE3NjFBNTAwRTczMkEzIC8qIFdlYlBy
ZWZlcmVuY2VzQ0YuY3BwICovOyB9OwotCQlCQzJFNkU4RDExNDE5NzE1MDBBNjNCMUUgLyogV29y
a1F1ZXVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEJDMkU2RTdEMTE0MTk3MEMwMEE2M0IxRSAvKiBXb3JrUXVldWUuY3BwICovOyB9OwotCQlCQzJF
NkU4RTExNDE5NzE1MDBBNjNCMUUgLyogV29ya1F1ZXVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzJFNkU3RTExNDE5NzBDMDBBNjNCMUUgLyogV29y
a1F1ZXVlLmggKi87IH07CiAJCUJDMzA2NUM0MTI1OTJGODkwMEU3MTI3OCAvKiBXZWJQcm9jZXNz
TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMz
MDY1QzMxMjU5MkY4OTAwRTcxMjc4IC8qIFdlYlByb2Nlc3NNYWMubW0gKi87IH07CiAJCUJDMzA2
NUZBMTI1OTM0NEUwMEU3MTI3OCAvKiBDYWNoZU1vZGVsLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzMwNjVGOTEyNTkzNDRFMDBFNzEyNzggLyogQ2Fj
aGVNb2RlbC5oICovOyB9OwogCQlCQzMwNjZCRTEyNUE0NDIxMDBFNzEyNzggLyogV2ViUHJvY2Vz
c01lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCQzMwNjZCQzEyNUE0NDIxMDBFNzEyNzggLyogV2ViUHJvY2Vzc01lc3NhZ2VS
ZWNlaXZlci5jcHAgKi87IH07CkBAIC0xNTE0LDcgKzE1MTEsNiBAQAogCQlCNjM0MDNGODE0OTEw
RDU3MDAxMDcwQjUgLyogQVBJT2JqZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEFQSU9iamVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI4
NzhCNjEzMTMzNDI4REMwMDY4ODhFOSAvKiBDb3JyZWN0aW9uUGFuZWwuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQ29ycmVjdGlvblBhbmVsLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUI4NzhCNjE0MTMzNDI4REMwMDY4ODhFOSAvKiBDb3JyZWN0aW9uUGFuZWwu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBDb3JyZWN0aW9uUGFu
ZWwubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUJDMDA5MkY2MTE1ODM3QTMwMEUw
QUUyQSAvKiBXb3JrUXVldWVNYWMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gV29ya1F1ZXVlTWFjLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMw
MzJENjAxMEY0Mzc4RDAwNThDMTVBIC8qIFdlYkNocm9tZUNsaWVudC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDaHJvbWVDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQkMwMzJENjIxMEY0Mzc4RDAwNThDMTVBIC8qIFdlYkNvbnRleHRNZW51Q2xp
ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvbnRleHRNZW51Q2xp
ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMDMyRDY2MTBGNDM3OEQwMDU4
QzE1QSAvKiBXZWJEcmFnQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdlYkRyYWdDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2MTMsOCAr
MTYwOSw2IEBACiAJCUJDMkQwMjE2MTJBQzQxQ0IwMEU3MzJBMyAvKiBTYW1lRG9jdW1lbnROYXZp
Z2F0aW9uVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTYW1lRG9jdW1l
bnROYXZpZ2F0aW9uVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzJEMDIx
ODEyQUM0MjZDMDBFNzMyQTMgLyogV0tQYWdlTG9hZFR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdLUGFnZUxvYWRUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlCQzJERkJBMjEyQTc2MUE1MDBFNzMyQTMgLyogV2ViUHJlZmVyZW5jZXNDRi5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJQcmVmZXJlbmNlc0NGLmNw
cDsgcGF0aCA9IGNmL1dlYlByZWZlcmVuY2VzQ0YuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlCQzJFNkU3RDExNDE5NzBDMDBBNjNCMUUgLyogV29ya1F1ZXVlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdvcmtRdWV1ZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCUJDMkU2RTdFMTE0MTk3MEMwMEE2M0IxRSAvKiBXb3JrUXVldWUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV29ya1F1ZXVlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMzA2NUMzMTI1OTJGODkwMEU3MTI3OCAvKiBXZWJQcm9j
ZXNzTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViUHJv
Y2Vzc01hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMzMDY1RjkxMjU5MzQ0
RTAwRTcxMjc4IC8qIENhY2hlTW9kZWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQ2FjaGVNb2RlbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzMwNjZCOTEy
NUE0MzYzMDBFNzEyNzggLyogV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7
IHBhdGggPSBXZWJQcm9jZXNzLm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMjI5OCw3ICsyMjkyLDYgQEAKIAkJCQkxQTI0QkYzOTEyMDg5NkE2MDBGQkIwNTkgLyog
U2hhcmVkTWVtb3J5TWFjLmNwcCAqLywKIAkJCQkyOTZCRDg1QjE1MDE5QkMzMDA3MUY0MjQgLyog
U3RyaW5nVXRpbGl0aWVzLmggKi8sCiAJCQkJMjk2QkQ4NUMxNTAxOUJDMzAwNzFGNDI0IC8qIFN0
cmluZ1V0aWxpdGllcy5tbSAqLywKLQkJCQlCQzAwOTJGNjExNTgzN0EzMDBFMEFFMkEgLyogV29y
a1F1ZXVlTWFjLmNwcCAqLywKIAkJCSk7CiAJCQlwYXRoID0gbWFjOwogCQkJc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsKQEAgLTMzMzYsOCArMzMyOSw2IEBACiAJCQkJQzBFM0FBNDQxMjA5RTJCQTAw
QTQ5RDAxIC8qIE1vZHVsZS5oICovLAogCQkJCUJDODc4MEZCMTE2MUMyQjgwMENDMjc2OCAvKiBQ
bGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmggKi8sCiAJCQkJMUEyNEJFRDMxMjA4OTREMTAwRkJC
MDU5IC8qIFNoYXJlZE1lbW9yeS5oICovLAotCQkJCUJDMkU2RTdEMTE0MTk3MEMwMEE2M0IxRSAv
KiBXb3JrUXVldWUuY3BwICovLAotCQkJCUJDMkU2RTdFMTE0MTk3MEMwMEE2M0IxRSAvKiBXb3Jr
UXVldWUuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gUGxhdGZvcm07CiAJCQlzb3VyY2VUcmVlID0g
Ijxncm91cD4iOwpAQCAtNDE4OSw3ICs0MTgwLDYgQEAKIAkJCQlCQzg2OTlCNTExNkFBREFBMDAy
QTkyNUIgLyogV0tWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzg2OTlCNzExNkFBREFBMDAy
QTkyNUIgLyogV0tWaWV3SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUJGQTYxNzlGMTJG
MEI5OUQwMDMzRTBDQSAvKiBXS1ZpZXdQcml2YXRlLmggaW4gSGVhZGVycyAqLywKLQkJCQlCQzJF
NkU4RTExNDE5NzE1MDBBNjNCMUUgLyogV29ya1F1ZXVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlF
MTdCRjk5NjE0RDBBNzNFMDBBNUEwNjkgLyogTmV0c2NhcGVTYW5kYm94RnVuY3Rpb25zLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQ0UwOTM3ODE0RkIxMjhDMDAxMTM4RDkgLyogTGF5ZXJIb3N0aW5n
Q29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjk2QkQ4NUQxNTAxOUJDMzAwNzFGNDI0IC8q
IFN0cmluZ1V0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCkBAIC00OTM2LDggKzQ5MjYsNiBAQAog
CQkJCUJDNDA3NjJDMTI0RkYwNDAwMDY4RjIwQSAvKiBXS1VSTFJlc3BvbnNlTlMubW0gaW4gU291
cmNlcyAqLywKIAkJCQlGNjExM0UyODEyNkNFMTlCMDA1N0QwQTcgLyogV0tVc2VyQ29udGVudFVS
TFBhdHRlcm4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM4Njk5QjYxMTZBQURBQTAwMkE5MjVC
IC8qIFdLVmlldy5tbSBpbiBTb3VyY2VzICovLAotCQkJCUJDMkU2RThEMTE0MTk3MTUwMEE2M0Ix
RSAvKiBXb3JrUXVldWUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQkMwMDkyRjgxMTU4MzdBMzAw
RTBBRTJBIC8qIFdvcmtRdWV1ZU1hYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMTdCRjk5ODE0
RDBBQTgzMDBBNUEwNjkgLyogTmV0c2NhcGVTYW5kYm94RnVuY3Rpb25zLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQkNFMDkzNzcxNEZCMTI4QzAwMTEzOEQ5IC8qIExheWVySG9zdGluZ0NvbnRleHQu
bW0gaW4gU291cmNlcyAqLywKIAkJCQkyOTZCRDg1RTE1MDE5QkMzMDA3MUY0MjQgLyogU3RyaW5n
VXRpbGl0aWVzLm1tIGluIFNvdXJjZXMgKi8sCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151240</attachid>
            <date>2012-07-09 05:58:18 -0700</date>
            <delta_ts>2012-07-09 05:59:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90780-20120709215758.patch</filename>
            <type>text/plain</type>
            <size>129635</size>
            <attacher name="Kwang Yul Seo">skyul</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyMDk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGZlNDBlYjkzNzY4NDhlYTgyZTgzYjEw
ZjllNzgyMGM1MDllMjdhMDMuLjkxYzAwZmY0NGFmMGIyODgzZjY0NDM4YWM1ZmY5MzkwNjg2OWZj
OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTI4IEBACisyMDEyLTA3LTA5ICBLd2FuZyBZdWwgU2VvICA8c2t5
dWxAY29tcGFueTEwMC5uZXQ+CisKKyAgICAgICAgTW92ZSBXb3JrUXVldWUgdG8gV1RGCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDc4MAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEN1cnJlbnRseSwgV29y
a1F1ZXVlIGlzIGluIFdlYktpdDIuIEJ5IG1vdmluZyBXb3JrUXVldWUgYW5kCisgICAgICAgIFBs
YXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIgdG8gV1RGLCBXZWJDb3JlIGNvZGUgY2FuIHVzZSBpdC4K
KworICAgICAgICBUaGlzIHBhdGNoIGlzIHJlcXVpcmVkIGZvciBwYXJhbGxlbCBpbWFnZSBkZWNv
ZGVycyBiZWNhdXNlCisgICAgICAgIFdvcmtRdWV1ZSBpcyB1c2VkIHRvIG1ha2UgaW1hZ2UgZGVj
b2Rpbmcgb2ZmIHRoZSBtYWluIHRocmVhZC4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3Qu
YW06CisgICAgICAgICogV1RGLnBybzoKKyAgICAgICAgKiBXVEYudmNwcm9qL1dURi52Y3Byb2o6
CisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3Rm
L0NNYWtlTGlzdHMudHh0OgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAg
ICAgKiB3dGYvUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYktpdDIvUGxhdGZvcm0vUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oLgorICAgICAgICAo
V1RGKToKKyAgICAgICAgKiB3dGYvV29ya1F1ZXVlLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtL1dvcmtRdWV1ZS5jcHAuCisgICAgICAgIChXVEYpOgorICAgICAgICAo
V1RGOjpXb3JrUXVldWU6OldvcmtRdWV1ZSk6CisgICAgICAgIChXVEY6OldvcmtRdWV1ZTo6fldv
cmtRdWV1ZSk6CisgICAgICAgIChXVEY6OldvcmtRdWV1ZTo6aW52YWxpZGF0ZSk6CisgICAgICAg
ICogd3RmL1dvcmtRdWV1ZS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvUGxhdGZvcm0v
V29ya1F1ZXVlLmguCisgICAgICAgIChXVEYpOgorICAgICAgICAoV29ya1F1ZXVlKToKKyAgICAg
ICAgKFdvcmtJdGVtV2luKToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpXb3JrSXRlbVdpbjo6
ZnVuY3Rpb24pOgorICAgICAgICAoV1RGOjpXb3JrUXVldWU6OldvcmtJdGVtV2luOjpxdWV1ZSk6
CisgICAgICAgIChIYW5kbGVXb3JrSXRlbSk6CisgICAgICAgIChXVEY6OldvcmtRdWV1ZTo6SGFu
ZGxlV29ya0l0ZW06OnNldFdhaXRIYW5kbGUpOgorICAgICAgICAoV1RGOjpXb3JrUXVldWU6Okhh
bmRsZVdvcmtJdGVtOjp3YWl0SGFuZGxlKToKKyAgICAgICAgKiB3dGYvZWZsL1dvcmtRdWV1ZUVm
bC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9lZmwvV29ya1F1ZXVl
RWZsLmNwcC4KKyAgICAgICAgKFRpbWVyV29ya0l0ZW0pOgorICAgICAgICAoVGltZXJXb3JrSXRl
bTo6VGltZXJXb3JrSXRlbSk6CisgICAgICAgIChUaW1lcldvcmtJdGVtOjp+VGltZXJXb3JrSXRl
bSk6CisgICAgICAgIChUaW1lcldvcmtJdGVtOjpmdW5jdGlvbik6CisgICAgICAgIChUaW1lcldv
cmtJdGVtOjpxdWV1ZSk6CisgICAgICAgIChUaW1lcldvcmtJdGVtOjp0aW1lcklEKToKKyAgICAg
ICAgKFdvcmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXplKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6
cGxhdGZvcm1JbnZhbGlkYXRlKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6cGVyZm9ybVdvcmspOgor
ICAgICAgICAoV29ya1F1ZXVlOjpwZXJmb3JtRmlsZURlc2NyaXB0b3JXb3JrKToKKyAgICAgICAg
KFdvcmtRdWV1ZTo6c2VuZE1lc3NhZ2VUb1RocmVhZCk6CisgICAgICAgIChXb3JrUXVldWU6Ondv
cmtRdWV1ZVRocmVhZCk6CisgICAgICAgIChXb3JrUXVldWU6OnJlZ2lzdGVyU29ja2V0RXZlbnRI
YW5kbGVyKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6dW5yZWdpc3RlclNvY2tldEV2ZW50SGFuZGxl
cik6CisgICAgICAgIChXb3JrUXVldWU6OmRpc3BhdGNoKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6
dGltZXJGaXJlZCk6CisgICAgICAgIChXb3JrUXVldWU6OmRpc3BhdGNoQWZ0ZXJEZWxheSk6Cisg
ICAgICAgICogd3RmL2d0ay9Xb3JrUXVldWVHdGsuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dl
YktpdDIvUGxhdGZvcm0vZ3RrL1dvcmtRdWV1ZUd0ay5jcHAuCisgICAgICAgIChXb3JrUXVldWU6
OkV2ZW50U291cmNlKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OkV2ZW50U291
cmNlKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OmNhbmNlbCk6CisgICAgICAg
IChXb3JrUXVldWU6OkV2ZW50U291cmNlOjpleGVjdXRlRXZlbnRTb3VyY2UpOgorICAgICAgICAo
V29ya1F1ZXVlOjpFdmVudFNvdXJjZTo6cGVyZm9ybVdvcmtPbmNlKToKKyAgICAgICAgKFdvcmtR
dWV1ZTo6RXZlbnRTb3VyY2U6OnBlcmZvcm1Xb3JrKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6RXZl
bnRTb3VyY2U6OnBlcmZvcm1Xb3JrT25UZXJtaW5hdGlvbik6CisgICAgICAgIChXb3JrUXVldWU6
OkV2ZW50U291cmNlOjpkZWxldGVFdmVudFNvdXJjZSk6CisgICAgICAgIChXb3JrUXVldWU6OnBs
YXRmb3JtSW5pdGlhbGl6ZSk6CisgICAgICAgIChXb3JrUXVldWU6OnBsYXRmb3JtSW52YWxpZGF0
ZSk6CisgICAgICAgIChXb3JrUXVldWU6OnN0YXJ0V29ya1F1ZXVlVGhyZWFkKToKKyAgICAgICAg
KFdvcmtRdWV1ZTo6d29ya1F1ZXVlVGhyZWFkQm9keSk6CisgICAgICAgIChXb3JrUXVldWU6OnJl
Z2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6dW5yZWdpc3Rl
ckV2ZW50U291cmNlSGFuZGxlcik6CisgICAgICAgIChXb3JrUXVldWU6OmRpc3BhdGNoT25Tb3Vy
Y2UpOgorICAgICAgICAoV29ya1F1ZXVlOjpkaXNwYXRjaCk6CisgICAgICAgIChXb3JrUXVldWU6
OmRpc3BhdGNoQWZ0ZXJEZWxheSk6CisgICAgICAgIChXb3JrUXVldWU6OmRpc3BhdGNoT25UZXJt
aW5hdGlvbik6CisgICAgICAgICogd3RmL21hYy9Xb3JrUXVldWVNYWMuY3BwOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYktpdDIvUGxhdGZvcm0vbWFjL1dvcmtRdWV1ZU1hYy5jcHAuCisgICAgICAg
IChXb3JrUXVldWU6OmV4ZWN1dGVGdW5jdGlvbik6CisgICAgICAgIChXb3JrUXVldWU6OmRpc3Bh
dGNoKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6ZGlzcGF0Y2hBZnRlckRlbGF5KToKKyAgICAgICAg
KFdvcmtRdWV1ZTo6RXZlbnRTb3VyY2UpOgorICAgICAgICAoV29ya1F1ZXVlOjpFdmVudFNvdXJj
ZTo6RXZlbnRTb3VyY2UpOgorICAgICAgICAoV29ya1F1ZXVlOjpFdmVudFNvdXJjZTo6ZGlzcGF0
Y2hTb3VyY2UpOgorICAgICAgICAoV29ya1F1ZXVlOjpFdmVudFNvdXJjZTo6ZXZlbnRIYW5kbGVy
KToKKyAgICAgICAgKFdvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OmNhbmNlbEhhbmRsZXIpOgorICAg
ICAgICAoV29ya1F1ZXVlOjpFdmVudFNvdXJjZTo6ZmluYWxpemVIYW5kbGVyKToKKyAgICAgICAg
KFdvcmtRdWV1ZTo6cmVnaXN0ZXJNYWNoUG9ydEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXb3Jr
UXVldWU6OnVucmVnaXN0ZXJNYWNoUG9ydEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXb3JrUXVl
dWU6OnBsYXRmb3JtSW5pdGlhbGl6ZSk6CisgICAgICAgIChXb3JrUXVldWU6OnBsYXRmb3JtSW52
YWxpZGF0ZSk6CisgICAgICAgICogd3RmL3F0L1dvcmtRdWV1ZVF0LmNwcDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3F0L1dvcmtRdWV1ZVF0LmNwcC4KKyAgICAgICAgKFdU
Rik6CisgICAgICAgIChXb3JrUXVldWU6OldvcmtJdGVtUXQpOgorICAgICAgICAoV1RGOjpXb3Jr
UXVldWU6OldvcmtJdGVtUXQ6OldvcmtJdGVtUXQpOgorICAgICAgICAoV1RGOjpXb3JrUXVldWU6
OldvcmtJdGVtUXQ6On5Xb3JrSXRlbVF0KToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpXb3Jr
SXRlbVF0OjpleGVjdXRlKToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpXb3JrSXRlbVF0Ojpl
eGVjdXRlQW5kRGVsZXRlKToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpXb3JrSXRlbVF0Ojp0
aW1lckV2ZW50KToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpyZWdpc3RlclNvY2tldEV2ZW50
SGFuZGxlcik6CisgICAgICAgIChXVEY6OldvcmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXplKToK
KyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpwbGF0Zm9ybUludmFsaWRhdGUpOgorICAgICAgICAo
V1RGOjpXb3JrUXVldWU6OmRpc3BhdGNoKToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpkaXNw
YXRjaEFmdGVyRGVsYXkpOgorICAgICAgICAoV1RGOjpXb3JrUXVldWU6OmRpc3BhdGNoT25UZXJt
aW5hdGlvbik6CisgICAgICAgICogd3RmL3dpbi9Xb3JrUXVldWVXaW4uY3BwOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYktpdDIvUGxhdGZvcm0vd2luL1dvcmtRdWV1ZVdpbi5jcHAuCisgICAgICAg
IChXb3JrUXVldWU6OldvcmtJdGVtV2luOjpXb3JrSXRlbVdpbik6CisgICAgICAgIChXb3JrUXVl
dWU6OldvcmtJdGVtV2luOjpjcmVhdGUpOgorICAgICAgICAoV29ya1F1ZXVlOjpXb3JrSXRlbVdp
bjo6fldvcmtJdGVtV2luKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6SGFuZGxlV29ya0l0ZW06Okhh
bmRsZVdvcmtJdGVtKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6SGFuZGxlV29ya0l0ZW06OmNyZWF0
ZUJ5QWRvcHRpbmdIYW5kbGUpOgorICAgICAgICAoV29ya1F1ZXVlOjpIYW5kbGVXb3JrSXRlbTo6
fkhhbmRsZVdvcmtJdGVtKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6aGFuZGxlQ2FsbGJhY2spOgor
ICAgICAgICAoV29ya1F1ZXVlOjpyZWdpc3RlckhhbmRsZSk6CisgICAgICAgIChXb3JrUXVldWU6
OnVucmVnaXN0ZXJBbmRDbG9zZUhhbmRsZSk6CisgICAgICAgIChXb3JrUXVldWU6OndvcmtUaHJl
YWRDYWxsYmFjayk6CisgICAgICAgIChXb3JrUXVldWU6OnBlcmZvcm1Xb3JrT25SZWdpc3RlcmVk
V29ya1RocmVhZCk6CisgICAgICAgIChXb3JrUXVldWU6OnBsYXRmb3JtSW5pdGlhbGl6ZSk6Cisg
ICAgICAgIChXb3JrUXVldWU6OnRyeVJlZ2lzdGVyQXNXb3JrVGhyZWFkKToKKyAgICAgICAgKFdv
cmtRdWV1ZTo6dW5yZWdpc3RlckFzV29ya1RocmVhZCk6CisgICAgICAgIChXb3JrUXVldWU6OnBs
YXRmb3JtSW52YWxpZGF0ZSk6CisgICAgICAgIChXb3JrUXVldWU6OmRpc3BhdGNoKToKKyAgICAg
ICAgKFRpbWVyQ29udGV4dDo6Y3JlYXRlKToKKyAgICAgICAgKFRpbWVyQ29udGV4dCk6CisgICAg
ICAgIChUaW1lckNvbnRleHQ6OlRpbWVyQ29udGV4dCk6CisgICAgICAgIChXb3JrUXVldWU6OnRp
bWVyQ2FsbGJhY2spOgorICAgICAgICAoV29ya1F1ZXVlOjpkaXNwYXRjaEFmdGVyRGVsYXkpOgor
ICAgICAgICAoV29ya1F1ZXVlOjp1bnJlZ2lzdGVyV2FpdEFuZERlc3Ryb3lJdGVtU29vbik6Cisg
ICAgICAgIChXb3JrUXVldWU6OnVucmVnaXN0ZXJXYWl0QW5kRGVzdHJveUl0ZW1DYWxsYmFjayk6
CisKIDIwMTItMDctMDggIExhc3psbyBHb21ib3MgIDxsYXN6bG8uMS5nb21ib3NAbm9raWEuY29t
PgogCiAgICAgICAgIEludHJvZHVjZSBhIGJ1aWxkIGZsYWcgZm9yIGxvdyBxdWFsaXR5IEpQRUcg
aW1hZ2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cKaW5kZXggMDhlMGZlOWFmN2I4ZTBkYzUxNGJiMjVhNjRkOGY2NGE5ZDVm
MTlhZS4uOTE4YzBkNzVjYjMxYTZlNmI2NjFjMzc4NWNjZWY2ZDk4MmJiMzZiMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDMyIEBACisyMDEyLTA3LTA5ICBLd2FuZyBZdWwgU2VvICA8c2t5dWxAY29t
cGFueTEwMC5uZXQ+CisKKyAgICAgICAgTW92ZSBXb3JrUXVldWUgdG8gV1RGCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDc4MAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEN1cnJlbnRseSwgV29ya1F1ZXVl
IGlzIGluIFdlYktpdDIuIEJ5IG1vdmluZyBXb3JrUXVldWUgYW5kCisgICAgICAgIFBsYXRmb3Jt
UHJvY2Vzc0lkZW50aWZpZXIgdG8gV1RGLCBXZWJDb3JlIGNvZGUgY2FuIHVzZSBpdC4KKworICAg
ICAgICBUaGlzIHBhdGNoIGlzIHJlcXVpcmVkIGZvciBwYXJhbGxlbCBpbWFnZSBkZWNvZGVycyBi
ZWNhdXNlCisgICAgICAgIFdvcmtRdWV1ZSBpcyB1c2VkIHRvIG1ha2UgaW1hZ2UgZGVjb2Rpbmcg
b2ZmIHRoZSBtYWluIHRocmVhZC4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAg
ICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogUGxhdGZvcm0vQ29yZUlQQy9Db25u
ZWN0aW9uLmg6CisgICAgICAgIChDb25uZWN0aW9uKToKKyAgICAgICAgKiBQbGF0Zm9ybS9Db3Jl
SVBDL3VuaXgvQ29ubmVjdGlvblVuaXguY3BwOgorICAgICAgICAoQ29yZUlQQzo6Q29ubmVjdGlv
bjo6c2V0U2hvdWxkQ2xvc2VDb25uZWN0aW9uT25Qcm9jZXNzVGVybWluYXRpb24pOgorICAgICAg
ICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICog
VUlQcm9jZXNzL0xhdW5jaGVyL1Byb2Nlc3NMYXVuY2hlci5jcHA6CisgICAgICAgICogVUlQcm9j
ZXNzL0xhdW5jaGVyL1Byb2Nlc3NMYXVuY2hlci5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9MYXVu
Y2hlci9UaHJlYWRMYXVuY2hlci5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHku
aDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5Lmg6CisgICAgICAgICogV2Vi
S2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHdpbi9XZWJLaXQyLnZj
cHJvajoKKwogMjAxMi0wNy0wNiAgQ2hyaXN0b3BoZSBEdW1leiAgPGNocmlzdG9waGUuZHVtZXpA
aW50ZWwuY29tPgogCiAgICAgICAgIFtXSzJdIEFkZCBzdXBwb3J0IGZvciBOZXR3b3JrIEluZm9y
bWF0aW9uIEFQSQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9HTlVtYWtlZmlsZS5saXN0LmFtIGIv
U291cmNlL1dURi9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IGM1ZjQ4YTZjZTU1OWEyNGNjMjBi
NzA3NThkZjhiYzRhODRkYzllZWQuLmNmMmEwOGU3Yzk5ZTE2MmZmOWFmMWZmNzE3ZDljOGVjOGVk
ZDA2MmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9T
b3VyY2UvV1RGL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTE2NCw2ICsxNjQsOCBAQCB3dGZfc291
cmNlcyArPSBcCiAgICAgU291cmNlL1dURi93dGYvVmFsdWVDaGVjay5oIFwKICAgICBTb3VyY2Uv
V1RGL3d0Zi9WZWN0b3IuaCBcCiAgICAgU291cmNlL1dURi93dGYvVmVjdG9yVHJhaXRzLmggXAor
ICAgIFNvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5jcHAgXAorICAgIFNvdXJjZS9XVEYvd3RmL1dv
cmtRdWV1ZS5oIFwKICAgICBTb3VyY2UvV1RGL3d0Zi9XVEZUaHJlYWREYXRhLmNwcCBcCiAgICAg
U291cmNlL1dURi93dGYvV1RGVGhyZWFkRGF0YS5oIFwKICAgICBTb3VyY2UvV1RGL3d0Zi9kdG9h
LmNwcCBcCkBAIC0xOTQsNiArMTk2LDcgQEAgd3RmX3NvdXJjZXMgKz0gXAogICAgIFNvdXJjZS9X
VEYvd3RmL2dvYmplY3QvR2xpYlV0aWxpdGllcy5jcHAgXAogICAgIFNvdXJjZS9XVEYvd3RmL2dv
YmplY3QvR2xpYlV0aWxpdGllcy5oIFwKICAgICBTb3VyY2UvV1RGL3d0Zi9ndGsvTWFpblRocmVh
ZEd0ay5jcHAgXAorICAgIFNvdXJjZS9XVEYvd3RmL2d0ay9Xb3JrUXVldWVHdGsuY3BwIFwKICAg
ICBTb3VyY2UvV1RGL3d0Zi90ZXh0L0FTQ0lJRmFzdFBhdGguaCBcCiAgICAgU291cmNlL1dURi93
dGYvdGV4dC9BdG9taWNTdHJpbmcuY3BwIFwKICAgICBTb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21p
Y1N0cmluZy5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnBybyBiL1NvdXJjZS9XVEYv
V1RGLnBybwppbmRleCAwOTYyZWYwYjUwYTUxN2JkMGUyZDQ1NjJkZjhkZWZkNmY1MWExZjA0Li44
ODZiMmYzYTdiNmUzYTg1NWRkYjA2MzFiYjc2NzU1NGU1Mjc1OGNiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL1dURi5wcm8KKysrIGIvU291cmNlL1dURi9XVEYucHJvCkBAIC0xNjMsNiArMTYzLDcg
QEAgSEVBREVSUyArPSBcCiAgICAgVmVjdG9yLmggXAogICAgIFZlY3RvclRyYWl0cy5oIFwKICAg
ICBWTVRhZ3MuaCBcCisgICAgV29ya1F1ZXVlLmggXAogICAgIFdURlRocmVhZERhdGEuaAogCiB1
bml4OiBIRUFERVJTICs9IFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaApAQCAtMTk5LDYg
KzIwMCw3IEBAIFNPVVJDRVMgKz0gXAogICAgIE9TUmFuZG9tU291cmNlLmNwcCBcCiAgICAgcXQv
TWFpblRocmVhZFF0LmNwcCBcCiAgICAgcXQvU3RyaW5nUXQuY3BwIFwKKyAgICBxdC9Xb3JrUXVl
dWVRdC5jcHAgXAogICAgIFBhZ2VBbGxvY2F0aW9uQWxpZ25lZC5jcHAgXAogICAgIFBhZ2VCbG9j
ay5jcHAgXAogICAgIFBhcmFsbGVsSm9ic0dlbmVyaWMuY3BwIFwKQEAgLTIwOSw2ICsyMTEsNyBA
QCBTT1VSQ0VTICs9IFwKICAgICBUQ1N5c3RlbUFsbG9jLmNwcCBcCiAgICAgVGhyZWFkaW5nLmNw
cCBcCiAgICAgVHlwZVRyYWl0cy5jcHAgXAorICAgIFdvcmtRdWV1ZS5jcHAgXAogICAgIFdURlRo
cmVhZERhdGEuY3BwIFwKICAgICB0ZXh0L0F0b21pY1N0cmluZy5jcHAgXAogICAgIHRleHQvQ1N0
cmluZy5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9XVEYudmNwcm9qL1dURi52Y3Byb2og
Yi9Tb3VyY2UvV1RGL1dURi52Y3Byb2ovV1RGLnZjcHJvagppbmRleCAyMTkwZGFlMWVmZmVhZTMz
OTUzMzI3ZTNjYjczZTc3ZTZlZTQ2ZDU4Li4xY2M3YWU3MTk1ZDE3M2FiNGU2OTg1Zjg1ZWNjODc1
ZDVmMWM0N2NhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi52Y3Byb2ovV1RGLnZjcHJvagor
KysgYi9Tb3VyY2UvV1RGL1dURi52Y3Byb2ovV1RGLnZjcHJvagpAQCAtMzQzLDYgKzM0MywxMCBA
QAogCQkJCVJlbGF0aXZlUGF0aD0iLi5cd3RmXHdpblxPd25QdHJXaW4uY3BwIgogCQkJCT4KIAkJ
CTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlx3dGZcd2luXFdvcmtRdWV1
ZVdpbi5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgogCQk8L0ZpbHRlcj4KIAkJPEZpbHRlcgogCQkJ
TmFtZT0idW5pY29kZSIKQEAgLTEyMTMsNiArMTIxNywxNCBAQAogCQkJPgogCQk8L0ZpbGU+CiAJ
CTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXHd0ZlxXb3JrUXVldWUuY3BwIgorCQkJPgorCQk8
L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXHd0ZlxXb3JrUXVldWUuaCIKKwkJ
CT4KKwkJPC9GaWxlPgorCQk8RmlsZQogCQkJUmVsYXRpdmVQYXRoPSIuLlx3dGZcV1RGVGhyZWFk
RGF0YS5jcHAiCiAJCQk+CiAJCTwvRmlsZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCmluZGV4IDc3MjA0NjFlMjY0NjYxZmM4ZTk0MzVlOTA4ODE2NzRiY2QxYjc2NTgu
LjU4NTBlNzAzYmQzY2ZmM2JlNzY2YmRlYzA4NjVkM2FmNjM2MmZhYzkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dURi9X
VEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjM5LDYgKzIzOSw5IEBACiAJCUE4QTQ3
NDdFMTUxQTgyNUIwMDQxMjNGRiAvKiBWZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MzcwMTUxQTgyNUIwMDQxMjNGRiAvKiBWZWN0b3Iu
aCAqLzsgfTsKIAkJQThBNDc0N0YxNTFBODI1QjAwNDEyM0ZGIC8qIFZlY3RvclRyYWl0cy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDczNzExNTFB
ODI1QjAwNDEyM0ZGIC8qIFZlY3RvclRyYWl0cy5oICovOyB9OwogCQlBOEE0NzQ4MDE1MUE4MjVC
MDA0MTIzRkYgLyogVk1UYWdzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBOEE0NzM3MjE1MUE4MjVCMDA0MTIzRkYgLyogVk1UYWdzLmggKi87IH07CisJ
CUJDMkU2RThEMTE0MTk3MTUwMEE2M0IxRSAvKiBXb3JrUXVldWUuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMyRTZFN0QxMTQxOTcwQzAwQTYzQjFF
IC8qIFdvcmtRdWV1ZS5jcHAgKi87IH07CisJCUJDMkU2RThFMTE0MTk3MTUwMEE2M0IxRSAvKiBX
b3JrUXVldWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEJDMkU2RTdFMTE0MTk3MEMwMEE2M0IxRSAvKiBXb3JrUXVldWUuaCAqLzsgfTsKKwkJQkMwMDky
RjgxMTU4MzdBMzAwRTBBRTJBIC8qIFdvcmtRdWV1ZU1hYy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzAwOTJGNjExNTgzN0EzMDBFMEFFMkEgLyog
V29ya1F1ZXVlTWFjLmNwcCAqLzsgfTsKIAkJQThBNDc0ODYxNTFBODI1QjAwNDEyM0ZGIC8qIFdU
RlRocmVhZERhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQThBNDczN0ExNTFBODI1QjAwNDEyM0ZGIC8qIFdURlRocmVhZERhdGEuY3BwICovOyB9
OwogCQlBOEE0NzQ4NzE1MUE4MjVCMDA0MTIzRkYgLyogV1RGVGhyZWFkRGF0YS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDczN0IxNTFBODI1QjAw
NDEyM0ZGIC8qIFdURlRocmVhZERhdGEuaCAqLzsgfTsKIAkJQThBNDc0OEMxNTFBODI2NDAwNDEy
M0ZGIC8qIGNvbmZpZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQThBNDc0OEIxNTFBODI2NDAwNDEyM0ZGIC8qIGNvbmZpZy5oICovOyB9OwpAQCAtNDg3
LDYgKzQ5MCw5IEBACiAJCUE4QTQ3MzcwMTUxQTgyNUIwMDQxMjNGRiAvKiBWZWN0b3IuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUE4QTQ3MzcxMTUxQTgyNUIwMDQxMjNGRiAvKiBWZWN0b3JUcmFpdHMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmVjdG9yVHJhaXRzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QTQ3MzcyMTUxQTgyNUIwMDQxMjNGRiAvKiBWTVRhZ3Mu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVk1UYWdzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUJDMkU2RTdEMTE0MTk3MEMwMEE2M0IxRSAvKiBXb3JrUXVldWUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV29ya1F1ZXVlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkMyRTZFN0UxMTQxOTcwQzAwQTYzQjFFIC8q
IFdvcmtRdWV1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXb3JrUXVldWUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkMwMDkyRjYxMTU4MzdBMzAwRTBBRTJB
IC8qIFdvcmtRdWV1ZU1hYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXb3JrUXVldWVNYWMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEE0NzM3
QTE1MUE4MjVCMDA0MTIzRkYgLyogV1RGVGhyZWFkRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBXVEZUaHJlYWREYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQThBNDczN0IxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlRocmVhZERhdGEuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV1RGVGhyZWFkRGF0YS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlBOEE0NzQ4QjE1MUE4MjY0MDA0MTIzRkYgLyogY29uZmln
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGNvbmZpZy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtNzE3LDYgKzcyMyw5IEBACiAJCQkJQThBNDczNzAxNTFBODI1
QjAwNDEyM0ZGIC8qIFZlY3Rvci5oICovLAogCQkJCUE4QTQ3MzcxMTUxQTgyNUIwMDQxMjNGRiAv
KiBWZWN0b3JUcmFpdHMuaCAqLywKIAkJCQlBOEE0NzM3MjE1MUE4MjVCMDA0MTIzRkYgLyogVk1U
YWdzLmggKi8sCisJCQkJQkMyRTZFN0QxMTQxOTcwQzAwQTYzQjFFIC8qIFdvcmtRdWV1ZS5jcHAg
Ki8sCisJCQkJQkMyRTZFN0UxMTQxOTcwQzAwQTYzQjFFIC8qIFdvcmtRdWV1ZS5oICovLAorCQkJ
CUJDMDA5MkY2MTE1ODM3QTMwMEUwQUUyQSAvKiBXb3JrUXVldWVNYWMuY3BwICovLAogCQkJCUE4
QTQ3MzdBMTUxQTgyNUIwMDQxMjNGRiAvKiBXVEZUaHJlYWREYXRhLmNwcCAqLywKIAkJCQlBOEE0
NzM3QjE1MUE4MjVCMDA0MTIzRkYgLyogV1RGVGhyZWFkRGF0YS5oICovLAogCQkJCUE4NzZEQkQ3
MTUxODE2RTUwMERBREI5NSAvKiBQbGF0Zm9ybS5oICovLApAQCAtMTAzNyw2ICsxMDQ2LDcgQEAK
IAkJCQlBOEE0NzQ3RTE1MUE4MjVCMDA0MTIzRkYgLyogVmVjdG9yLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBOEE0NzQ3RjE1MUE4MjVCMDA0MTIzRkYgLyogVmVjdG9yVHJhaXRzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBOEE0NzQ4MDE1MUE4MjVCMDA0MTIzRkYgLyogVk1UYWdzLmggaW4gSGVhZGVy
cyAqLywKKwkJCQlCQzJFNkU4RTExNDE5NzE1MDBBNjNCMUUgLyogV29ya1F1ZXVlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBOEE0NzQ4NzE1MUE4MjVCMDA0MTIzRkYgLyogV1RGVGhyZWFkRGF0YS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0OEMxNTFBODI2NDAwNDEyM0ZGIC8qIGNvbmZpZy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMTQzRjYxMjAxNTY1RjBGOTAwREI1MTRBIC8qIFJBTVNpemUu
aCBpbiBIZWFkZXJzICovLApAQCAtMTE4Niw2ICsxMTk2LDggQEAKIAkJCQlBOEE0NzQ3NDE1MUE4
MjVCMDA0MTIzRkYgLyogVVJMQ2hhcmFjdGVyVHlwZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QThBNDc0NzcxNTFBODI1QjAwNDEyM0ZGIC8qIFVSTEVzY2FwZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBOEE0NzQ3QjE1MUE4MjVCMDA0MTIzRkYgLyogVVJMU2VnbWVudHMuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJQkMyRTZFOEQxMTQxOTcxNTAwQTYzQjFFIC8qIFdvcmtRdWV1ZS5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQlCQzAwOTJGODExNTgzN0EzMDBFMEFFMkEgLyogV29ya1F1ZXVlTWFj
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDg2MTUxQTgyNUIwMDQxMjNGRiAvKiBXVEZU
aHJlYWREYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0M0Y2MTFGMTU2NUYwRjkwMERCNTE0
QSAvKiBSQU1TaXplLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQK
aW5kZXggMjc0ZjA0Yzk3NDkzMTlhZWY0ODA0NDc5MTZkZDIyODI3MjUwODY4Zi4uYmU5NTRmMDQz
ODNkOWI4ZjliZTQzOTkxMDFlZTAyZmViZGY0MmFmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93
dGYvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKQEAg
LTEwMiw2ICsxMDIsNyBAQCBTRVQoV1RGX0hFQURFUlMKICAgICBWYWx1ZUNoZWNrLmgKICAgICBW
ZWN0b3IuaAogICAgIFZlY3RvclRyYWl0cy5oCisgICAgV29ya1F1ZXVlLmgKICAgICBXVEZUaHJl
YWREYXRhLmgKICAgICBkdG9hLmgKIApAQCAtMTYxLDYgKzE2Miw3IEBAIFNFVChXVEZfU09VUkNF
UwogICAgIFN0cmluZ0V4dHJhcy5jcHAKICAgICBUaHJlYWRpbmcuY3BwCiAgICAgVHlwZVRyYWl0
cy5jcHAKKyAgICBXb3JrUXVldWUuY3BwCiAgICAgV1RGVGhyZWFkRGF0YS5jcHAKICAgICBkdG9h
LmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVmbC5jbWFrZSBiL1Nv
dXJjZS9XVEYvd3RmL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IDFhMTNkYmJhMzU1ODRlMDU2YzQ5
MjkxZTM4N2EzMjI1NzEwZDEzMDguLmZkMTdmNTc4NWVkYmZkN2EyNzE4MmI0YTNkZWEyNGYwOTFl
ZmQ4NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBi
L1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC0xLDYgKzEsNyBAQAogTElTVChB
UFBFTkQgV1RGX1NPVVJDRVMKICAgICBlZmwvTWFpblRocmVhZEVmbC5jcHAKICAgICBlZmwvT3du
UHRyRWZsLmNwcAorICAgIGVmbC9Xb3JrUXVldWVFZmwuY3BwCiAgICAgZ29iamVjdC9HT3duUHRy
LmNwcAogICAgIGdvYmplY3QvR1JlZlB0ci5jcHAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1Q
cm9jZXNzSWRlbnRpZmllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY3ZmY1M2JjZDZjOWZiNGYyOTc3YTg4Yzg0
Yjc2OWMwZDhiZmQ3MTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9y
bVByb2Nlc3NJZGVudGlmaWVyLmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI2lm
bmRlZiBQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyX2gKKyNkZWZpbmUgUGxhdGZvcm1Qcm9jZXNz
SWRlbnRpZmllcl9oCisKKyNpZiBQTEFURk9STShRVCkKK2NsYXNzIFFQcm9jZXNzOworI2VsaWYg
UExBVEZPUk0oRUZMKQorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBX
VEYgeworCisjaWYgUExBVEZPUk0oTUFDKQordHlwZWRlZiBwaWRfdCBQbGF0Zm9ybVByb2Nlc3NJ
ZGVudGlmaWVyOworI2VsaWYgUExBVEZPUk0oV0lOKQordHlwZWRlZiBIQU5ETEUgUGxhdGZvcm1Q
cm9jZXNzSWRlbnRpZmllcjsKKyNlbGlmIFBMQVRGT1JNKFFUKQordHlwZWRlZiBRUHJvY2Vzcyog
UGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllcjsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyNpZmRlZiBH
X09TX1dJTjMyCit0eXBlZGVmIHZvaWQqIEdQaWQ7CisjZWxzZQordHlwZWRlZiBpbnQgR1BpZDsK
KyNlbmRpZgordHlwZWRlZiBHUGlkIFBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXI7CisjZWxpZiBQ
TEFURk9STShFRkwpCit0eXBlZGVmIHBpZF90IFBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXI7Cisj
ZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6UGxhdGZvcm1Qcm9jZXNz
SWRlbnRpZmllcjsKKworI2VuZGlmIC8vIFBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXJfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvV29ya1F1ZXVlLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1dv
cmtRdWV1ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGY1ZmQxNGViNGJjOWU1NTIwMTQ0MmMzMjhkYmFmMmYz
NjY1OGY2ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5jcHAK
QEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJXb3JrUXVldWUuaCIKKworbmFtZXNwYWNlIFdURiB7CisKK1dvcmtRdWV1ZTo6V29ya1F1
ZXVlKGNvbnN0IGNoYXIqIG5hbWUpCisgICAgOiBtX2lzVmFsaWQodHJ1ZSkKK3sKKyAgICBwbGF0
Zm9ybUluaXRpYWxpemUobmFtZSk7Cit9CisKK1dvcmtRdWV1ZTo6fldvcmtRdWV1ZSgpCit7Cisj
aWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2lzVmFsaWRNdXRl
eCk7CisgICAgQVNTRVJUKCFtX2lzVmFsaWQpOworI2VuZGlmCit9CisKK3ZvaWQgV29ya1F1ZXVl
OjppbnZhbGlkYXRlKCkKK3sKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2lz
VmFsaWRNdXRleCk7CisgICAgICAgIG1faXNWYWxpZCA9IGZhbHNlOworICAgIH0KKworICAgIHBs
YXRmb3JtSW52YWxpZGF0ZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5oIGIvU291cmNlL1dURi93dGYvV29ya1F1ZXVlLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNWMwY2I5ODY0OTJjNWQxNjRhZWRkOGE5YWI1ZjJlOWQ3MTk0YjlhMgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5oCkBAIC0wLDAgKzEsMjE2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXb3JrUXVldWVf
aAorI2RlZmluZSBXb3JrUXVldWVfaAorCisjaWYgT1MoREFSV0lOKQorI2lmIEhBVkUoRElTUEFU
Q0hfSCkKKyNpbmNsdWRlIDxkaXNwYXRjaC9kaXNwYXRjaC5oPgorI2VuZGlmCisjZW5kaWYKKwor
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uYWwuaD4KKyNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorCisjaWYgKFBMQVRGT1JNKFFUKSAmJiAhT1MoREFSV0lOKSkg
fHwgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShFRkwpCisjaW5jbHVkZSAiUGxhdGZvcm1Qcm9j
ZXNzSWRlbnRpZmllci5oIgorI2VuZGlmCisKKyNpZiBQTEFURk9STShRVCkgJiYgIU9TKERBUldJ
TikKKyNpbmNsdWRlIDxRU29ja2V0Tm90aWZpZXI+CitjbGFzcyBRT2JqZWN0OworY2xhc3MgUVRo
cmVhZDsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRy
Lmg+Cit0eXBlZGVmIGdib29sZWFuICgqR1NvdXJjZUZ1bmMpIChncG9pbnRlciBkYXRhKTsKKyNl
bGlmIFBMQVRGT1JNKEVGTCkKKyNpbmNsdWRlIDxFY29yZS5oPgorI2VuZGlmCisKK25hbWVzcGFj
ZSBXVEYgeworCitjbGFzcyBXb3JrUXVldWUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFdv
cmtRdWV1ZSk7CisKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBXb3JrUXVldWUoY29uc3QgY2hhciog
bmFtZSk7CisgICAgfldvcmtRdWV1ZSgpOworCisgICAgLy8gV2lsbCBkaXNwYXRjaCB0aGUgZ2l2
ZW4gZnVuY3Rpb24gdG8gcnVuIGFzIHNvb24gYXMgcG9zc2libGUuCisgICAgdm9pZCBkaXNwYXRj
aChjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7CisKKyAgICAvLyBXaWxsIGRpc3BhdGNoIHRoZSBn
aXZlbiBmdW5jdGlvbiBhZnRlciB0aGUgZ2l2ZW4gZGVsYXkgKGluIHNlY29uZHMpLgorICAgIHZv
aWQgZGlzcGF0Y2hBZnRlckRlbGF5KGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mLCBkb3VibGUgZGVs
YXkpOworCisgICAgdm9pZCBpbnZhbGlkYXRlKCk7CisKKyNpZiBPUyhEQVJXSU4pCisgICAgZW51
bSBNYWNoUG9ydEV2ZW50VHlwZSB7CisgICAgICAgIC8vIEZpcmVkIHdoZW4gdGhlcmUgaXMgZGF0
YSBvbiB0aGUgZ2l2ZW4gcmVjZWl2ZSByaWdodC4KKyAgICAgICAgTWFjaFBvcnREYXRhQXZhaWxh
YmxlLAorICAgICAgICAKKyAgICAgICAgLy8gRmlyZWQgd2hlbiB0aGUgcmVjZWl2ZSByaWdodCBm
b3IgdGhpcyBzZW5kIHJpZ2h0IGhhcyBiZWVuIGRlc3Ryb3llZC4KKyAgICAgICAgTWFjaFBvcnRE
ZWFkTmFtZU5vdGlmaWNhdGlvbgorICAgIH07CisgICAgCisgICAgLy8gV2lsbCBleGVjdXRlIHRo
ZSBnaXZlbiBmdW5jdGlvbiB3aGVuZXZlciB0aGUgZ2l2ZW4gbWFjaCBwb3J0IGV2ZW50IGZpcmVz
LgorICAgIC8vIE5vdGUgdGhhdCB0aGlzIHdpbGwgYWRvcHQgdGhlIG1hY2ggcG9ydCBhbmQgZGVz
dHJveSBpdCB3aGVuIHRoZSB3b3JrIHF1ZXVlIGlzIGludmFsaWRhdGVkLgorICAgIHZvaWQgcmVn
aXN0ZXJNYWNoUG9ydEV2ZW50SGFuZGxlcihtYWNoX3BvcnRfdCwgTWFjaFBvcnRFdmVudFR5cGUs
IGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsKKyAgICB2b2lkIHVucmVnaXN0ZXJNYWNoUG9ydEV2
ZW50SGFuZGxlcihtYWNoX3BvcnRfdCk7CisjZWxpZiBQTEFURk9STShXSU4pCisgICAgdm9pZCBy
ZWdpc3RlckhhbmRsZShIQU5ETEUsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsKKyAgICB2b2lk
IHVucmVnaXN0ZXJBbmRDbG9zZUhhbmRsZShIQU5ETEUpOworI2VsaWYgUExBVEZPUk0oUVQpCisg
ICAgUVNvY2tldE5vdGlmaWVyKiByZWdpc3RlclNvY2tldEV2ZW50SGFuZGxlcihpbnQsIFFTb2Nr
ZXROb3RpZmllcjo6VHlwZSwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOworICAgIHZvaWQgZGlz
cGF0Y2hPblRlcm1pbmF0aW9uKFBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIsIGNvbnN0IEZ1bmN0
aW9uPHZvaWQoKT4mKTsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICB2b2lkIHJlZ2lzdGVyRXZl
bnRTb3VyY2VIYW5kbGVyKGludCwgaW50LCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7CisgICAg
dm9pZCB1bnJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKGludCk7CisgICAgdm9pZCBkaXNwYXRj
aE9uVGVybWluYXRpb24oUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllciwgY29uc3QgRnVuY3Rpb248
dm9pZCgpPiYpOworI2VsaWYgUExBVEZPUk0oRUZMKQorICAgIHZvaWQgcmVnaXN0ZXJTb2NrZXRF
dmVudEhhbmRsZXIoaW50LCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7CisgICAgdm9pZCB1bnJl
Z2lzdGVyU29ja2V0RXZlbnRIYW5kbGVyKGludCk7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICAv
LyBGSVhNRTogVXNlIGFuIGF0b21pYyBib29sZWFuIGhlcmUgaW5zdGVhZC4KKyAgICBNdXRleCBt
X2lzVmFsaWRNdXRleDsKKyAgICBib29sIG1faXNWYWxpZDsKKworICAgIHZvaWQgcGxhdGZvcm1J
bml0aWFsaXplKGNvbnN0IGNoYXIqIG5hbWUpOworICAgIHZvaWQgcGxhdGZvcm1JbnZhbGlkYXRl
KCk7CisKKyNpZiBPUyhEQVJXSU4pCisjaWYgSEFWRShESVNQQVRDSF9IKQorICAgIHN0YXRpYyB2
b2lkIGV4ZWN1dGVGdW5jdGlvbih2b2lkKik7CisgICAgTXV0ZXggbV9ldmVudFNvdXJjZXNNdXRl
eDsKKyAgICBjbGFzcyBFdmVudFNvdXJjZTsKKyAgICBIYXNoTWFwPG1hY2hfcG9ydF90LCBFdmVu
dFNvdXJjZSo+IG1fZXZlbnRTb3VyY2VzOworICAgIGRpc3BhdGNoX3F1ZXVlX3QgbV9kaXNwYXRj
aFF1ZXVlOworI2VuZGlmCisjZWxpZiBQTEFURk9STShXSU4pCisgICAgY2xhc3MgV29ya0l0ZW1X
aW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8V29ya0l0ZW1XaW4+IHsKKyAgICBwdWJs
aWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdvcmtJdGVtV2luPiBjcmVhdGUoY29uc3Qg
RnVuY3Rpb248dm9pZCgpPiYsIFdvcmtRdWV1ZSopOworICAgICAgICB2aXJ0dWFsIH5Xb3JrSXRl
bVdpbigpOworCisgICAgICAgIEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKCkgeyByZXR1cm4g
bV9mdW5jdGlvbjsgfQorICAgICAgICBXb3JrUXVldWUqIHF1ZXVlKCkgY29uc3QgeyByZXR1cm4g
bV9xdWV1ZTsgfQorCisgICAgcHJvdGVjdGVkOgorICAgICAgICBXb3JrSXRlbVdpbihjb25zdCBG
dW5jdGlvbjx2b2lkKCk+JiwgV29ya1F1ZXVlKik7CisKKyAgICBwcml2YXRlOgorICAgICAgICBG
dW5jdGlvbjx2b2lkKCk+IG1fZnVuY3Rpb247CisgICAgICAgIFdvcmtRdWV1ZSogbV9xdWV1ZTsK
KyAgICB9OworCisgICAgY2xhc3MgSGFuZGxlV29ya0l0ZW0gOiBwdWJsaWMgV29ya0l0ZW1XaW4g
eworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SGFuZGxlV29ya0l0ZW0+
IGNyZWF0ZUJ5QWRvcHRpbmdIYW5kbGUoSEFORExFLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jiwg
V29ya1F1ZXVlKik7CisgICAgICAgIHZpcnR1YWwgfkhhbmRsZVdvcmtJdGVtKCk7CisKKyAgICAg
ICAgdm9pZCBzZXRXYWl0SGFuZGxlKEhBTkRMRSB3YWl0SGFuZGxlKSB7IG1fd2FpdEhhbmRsZSA9
IHdhaXRIYW5kbGU7IH0KKyAgICAgICAgSEFORExFIHdhaXRIYW5kbGUoKSBjb25zdCB7IHJldHVy
biBtX3dhaXRIYW5kbGU7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIEhhbmRsZVdvcmtJdGVt
KEhBTkRMRSwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYsIFdvcmtRdWV1ZSopOworCisgICAgICAg
IEhBTkRMRSBtX2hhbmRsZTsKKyAgICAgICAgSEFORExFIG1fd2FpdEhhbmRsZTsKKyAgICB9Owor
CisgICAgc3RhdGljIHZvaWQgQ0FMTEJBQ0sgaGFuZGxlQ2FsbGJhY2sodm9pZCogY29udGV4dCwg
Qk9PTEVBTiB0aW1lck9yV2FpdEZpcmVkKTsKKyAgICBzdGF0aWMgdm9pZCBDQUxMQkFDSyB0aW1l
ckNhbGxiYWNrKHZvaWQqIGNvbnRleHQsIEJPT0xFQU4gdGltZXJPcldhaXRGaXJlZCk7CisgICAg
c3RhdGljIERXT1JEIFdJTkFQSSB3b3JrVGhyZWFkQ2FsbGJhY2sodm9pZCogY29udGV4dCk7CisK
KyAgICBib29sIHRyeVJlZ2lzdGVyQXNXb3JrVGhyZWFkKCk7CisgICAgdm9pZCB1bnJlZ2lzdGVy
QXNXb3JrVGhyZWFkKCk7CisgICAgdm9pZCBwZXJmb3JtV29ya09uUmVnaXN0ZXJlZFdvcmtUaHJl
YWQoKTsKKworICAgIHN0YXRpYyB2b2lkIHVucmVnaXN0ZXJXYWl0QW5kRGVzdHJveUl0ZW1Tb29u
KFBhc3NSZWZQdHI8SGFuZGxlV29ya0l0ZW0+KTsKKyAgICBzdGF0aWMgRFdPUkQgV0lOQVBJIHVu
cmVnaXN0ZXJXYWl0QW5kRGVzdHJveUl0ZW1DYWxsYmFjayh2b2lkKiBjb250ZXh0KTsKKworICAg
IHZvbGF0aWxlIExPTkcgbV9pc1dvcmtUaHJlYWRSZWdpc3RlcmVkOworCisgICAgTXV0ZXggbV93
b3JrSXRlbVF1ZXVlTG9jazsKKyAgICBWZWN0b3I8UmVmUHRyPFdvcmtJdGVtV2luPiA+IG1fd29y
a0l0ZW1RdWV1ZTsKKworICAgIE11dGV4IG1faGFuZGxlc0xvY2s7CisgICAgSGFzaE1hcDxIQU5E
TEUsIFJlZlB0cjxIYW5kbGVXb3JrSXRlbT4gPiBtX2hhbmRsZXM7CisKKyAgICBIQU5ETEUgbV90
aW1lclF1ZXVlOworI2VsaWYgUExBVEZPUk0oUVQpCisgICAgY2xhc3MgV29ya0l0ZW1RdDsKKyAg
ICBRVGhyZWFkKiBtX3dvcmtUaHJlYWQ7CisgICAgZnJpZW5kIGNsYXNzIFdvcmtJdGVtUXQ7Cisj
ZWxpZiBQTEFURk9STShHVEspCisgICAgc3RhdGljIHZvaWQgc3RhcnRXb3JrUXVldWVUaHJlYWQo
V29ya1F1ZXVlKik7CisgICAgdm9pZCB3b3JrUXVldWVUaHJlYWRCb2R5KCk7CisgICAgdm9pZCBk
aXNwYXRjaE9uU291cmNlKEdTb3VyY2UqLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiwgR1NvdXJj
ZUZ1bmMpOworCisgICAgVGhyZWFkSWRlbnRpZmllciBtX3dvcmtRdWV1ZVRocmVhZDsKKyAgICBH
UmVmUHRyPEdNYWluQ29udGV4dD4gbV9ldmVudENvbnRleHQ7CisgICAgTXV0ZXggbV9ldmVudExv
b3BMb2NrOworICAgIEdSZWZQdHI8R01haW5Mb29wPiBtX2V2ZW50TG9vcDsKKyAgICBNdXRleCBt
X2V2ZW50U291cmNlc0xvY2s7CisgICAgY2xhc3MgRXZlbnRTb3VyY2U7CisgICAgSGFzaE1hcDxp
bnQsIFZlY3RvcjxFdmVudFNvdXJjZSo+ID4gbV9ldmVudFNvdXJjZXM7CisgICAgdHlwZWRlZiBI
YXNoTWFwPGludCwgVmVjdG9yPEV2ZW50U291cmNlKj4gPjo6aXRlcmF0b3IgRXZlbnRTb3VyY2VJ
dGVyYXRvcjsgCisjZWxpZiBQTEFURk9STShFRkwpCisgICAgZmRfc2V0IG1fZmlsZURlc2NyaXB0
b3JTZXQ7CisgICAgaW50IG1fbWF4RmlsZURlc2NyaXB0b3I7CisgICAgaW50IG1fcmVhZEZyb21Q
aXBlRGVzY3JpcHRvcjsKKyAgICBpbnQgbV93cml0ZVRvUGlwZURlc2NyaXB0b3I7CisgICAgYm9v
bCBtX3RocmVhZExvb3A7CisKKyAgICBWZWN0b3I8RnVuY3Rpb248dm9pZCgpPiA+IG1fd29ya0l0
ZW1RdWV1ZTsKKyAgICBNdXRleCBtX3dvcmtJdGVtUXVldWVMb2NrOworCisgICAgaW50IG1fc29j
a2V0RGVzY3JpcHRvcjsKKyAgICBGdW5jdGlvbjx2b2lkKCk+IG1fc29ja2V0RXZlbnRIYW5kbGVy
OworCisgICAgSGFzaE1hcDxpbnQsIE93blB0cjxFY29yZV9UaW1lcj4gPiBtX3RpbWVyczsKKwor
ICAgIHZvaWQgc2VuZE1lc3NhZ2VUb1RocmVhZChjb25zdCBjaGFyKik7CisgICAgc3RhdGljIHZv
aWQqIHdvcmtRdWV1ZVRocmVhZChXb3JrUXVldWUqKTsKKyAgICB2b2lkIHBlcmZvcm1Xb3JrKCk7
CisgICAgdm9pZCBwZXJmb3JtRmlsZURlc2NyaXB0b3JXb3JrKCk7CisgICAgc3RhdGljIGJvb2wg
dGltZXJGaXJlZCh2b2lkKik7CisjZW5kaWYKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1
c2luZyBXVEY6OldvcmtRdWV1ZTsKKworI2VuZGlmIC8vIFdvcmtRdWV1ZV9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL3d0Zi9lZmwvV29ya1F1ZXVlRWZsLmNwcCBiL1NvdXJjZS9XVEYvd3RmL2Vm
bC9Xb3JrUXVldWVFZmwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNhMzliYTllZDliMTI3MGZlN2RmOWU2Y2U2
ODVkYjQ3M2E1ZjU4YTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9lZmwvV29y
a1F1ZXVlRWZsLmNwcApAQCAtMCwwICsxLDE3MyBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIw
MTIgU2Ftc3VuZyBFbGVjdHJvbmljcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiV29ya1F1ZXVlLmgiCisKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCitjbGFzcyBU
aW1lcldvcmtJdGVtIHsKK3B1YmxpYzoKKyAgICBUaW1lcldvcmtJdGVtKGludCB0aW1lcklELCBj
b25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbiwgV29ya1F1ZXVlKiBxdWV1ZSkKKyAgICAg
ICAgOiBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQorICAgICAgICAsIG1fcXVldWUocXVldWUpCisgICAg
ICAgICwgbV90aW1lcklEKHRpbWVySUQpCisgICAgeworICAgIH0KKyAgICB+VGltZXJXb3JrSXRl
bSgpIHsgfQorCisgICAgRnVuY3Rpb248dm9pZCgpPiBmdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fZnVuY3Rpb247IH0KKyAgICBXb3JrUXVldWUqIHF1ZXVlKCkgY29uc3QgeyByZXR1cm4gbV9x
dWV1ZTsgfQorCisgICAgaW50IHRpbWVySUQoKSBjb25zdCB7IHJldHVybiBtX3RpbWVySUQ7IH0K
KworcHJpdmF0ZToKKyAgICBGdW5jdGlvbjx2b2lkKCk+IG1fZnVuY3Rpb247CisgICAgV29ya1F1
ZXVlKiBtX3F1ZXVlOworICAgIGludCBtX3RpbWVySUQ7Cit9OworCitzdGF0aWMgY29uc3QgaW50
IGludmFsaWRTb2NrZXREZXNjcmlwdG9yID0gLTE7CitzdGF0aWMgY29uc3QgaW50IHRocmVhZE1l
c3NhZ2VTaXplID0gMTsKK3N0YXRpYyBjb25zdCBjaGFyIGZpbmlzaFRocmVhZE1lc3NhZ2VbXSA9
ICJGIjsKK3N0YXRpYyBjb25zdCBjaGFyIHdha3VwVGhyZWFkTWVzc2FnZVtdID0gIlciOworCit2
b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXplKGNvbnN0IGNoYXIqIG5hbWUpCit7Cisg
ICAgaW50IGZkc1syXTsKKyAgICBpZiAocGlwZShmZHMpKQorICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKworICAgIG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvciA9IGZkc1swXTsKKyAgICBt
X3dyaXRlVG9QaXBlRGVzY3JpcHRvciA9IGZkc1sxXTsKKyAgICBGRF9aRVJPKCZtX2ZpbGVEZXNj
cmlwdG9yU2V0KTsKKyAgICBGRF9TRVQobV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yLCAmbV9maWxl
RGVzY3JpcHRvclNldCk7CisgICAgbV9tYXhGaWxlRGVzY3JpcHRvciA9IG1fcmVhZEZyb21QaXBl
RGVzY3JpcHRvcjsKKworICAgIG1fc29ja2V0RGVzY3JpcHRvciA9IGludmFsaWRTb2NrZXREZXNj
cmlwdG9yOworCisgICAgbV90aHJlYWRMb29wID0gdHJ1ZTsKKyAgICBjcmVhdGVUaHJlYWQocmVp
bnRlcnByZXRfY2FzdDxXVEY6OlRocmVhZEZ1bmN0aW9uPigmV29ya1F1ZXVlOjp3b3JrUXVldWVU
aHJlYWQpLCB0aGlzLCBuYW1lKTsKK30KKwordm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW52YWxp
ZGF0ZSgpCit7CisgICAgc2VuZE1lc3NhZ2VUb1RocmVhZChmaW5pc2hUaHJlYWRNZXNzYWdlKTsK
K30KKwordm9pZCBXb3JrUXVldWU6OnBlcmZvcm1Xb3JrKCkKK3sKKyAgICBtX3dvcmtJdGVtUXVl
dWVMb2NrLmxvY2soKTsKKworICAgIHdoaWxlICghbV93b3JrSXRlbVF1ZXVlLmlzRW1wdHkoKSkg
eworICAgICAgICBWZWN0b3I8RnVuY3Rpb248dm9pZCgpPiA+IHdvcmtJdGVtUXVldWU7CisgICAg
ICAgIG1fd29ya0l0ZW1RdWV1ZS5zd2FwKHdvcmtJdGVtUXVldWUpOworCisgICAgICAgIG1fd29y
a0l0ZW1RdWV1ZUxvY2sudW5sb2NrKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
d29ya0l0ZW1RdWV1ZS5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIHdvcmtJdGVtUXVldWVbaV0o
KTsKKyAgICAgICAgbV93b3JrSXRlbVF1ZXVlTG9jay5sb2NrKCk7CisgICAgfQorICAgIG1fd29y
a0l0ZW1RdWV1ZUxvY2sudW5sb2NrKCk7Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjpwZXJmb3JtRmls
ZURlc2NyaXB0b3JXb3JrKCkKK3sKKyAgICBmZF9zZXQgcmVhZEZpbGVEZXNjcmlwdG9yU2V0ID0g
bV9maWxlRGVzY3JpcHRvclNldDsKKworICAgIGlmIChzZWxlY3QobV9tYXhGaWxlRGVzY3JpcHRv
ciArIDEsICZyZWFkRmlsZURlc2NyaXB0b3JTZXQsIDAsIDAsIDApID49IDApIHsKKyAgICAgICAg
aWYgKEZEX0lTU0VUKG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvciwgJnJlYWRGaWxlRGVzY3JpcHRv
clNldCkpIHsKKyAgICAgICAgICAgIGNoYXIgcmVhZEJ1Zlt0aHJlYWRNZXNzYWdlU2l6ZV07Cisg
ICAgICAgICAgICBpZiAocmVhZChtX3JlYWRGcm9tUGlwZURlc2NyaXB0b3IsIHJlYWRCdWYsIHRo
cmVhZE1lc3NhZ2VTaXplKSA9PSAtMSkKKyAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxl
ZCB0byByZWFkIGZyb20gV29ya1F1ZXVlVGhyZWFkIHBpcGUiKTsKKyAgICAgICAgICAgIGlmICgh
c3RybmNtcChyZWFkQnVmLCBmaW5pc2hUaHJlYWRNZXNzYWdlLCB0aHJlYWRNZXNzYWdlU2l6ZSkp
CisgICAgICAgICAgICAgICAgbV90aHJlYWRMb29wID0gZmFsc2U7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAobV9zb2NrZXREZXNjcmlwdG9yICE9IGludmFsaWRTb2NrZXREZXNjcmlwdG9yICYm
IEZEX0lTU0VUKG1fc29ja2V0RGVzY3JpcHRvciwgJnJlYWRGaWxlRGVzY3JpcHRvclNldCkpCisg
ICAgICAgICAgICBtX3NvY2tldEV2ZW50SGFuZGxlcigpOworICAgIH0KK30KKwordm9pZCBXb3Jr
UXVldWU6OnNlbmRNZXNzYWdlVG9UaHJlYWQoY29uc3QgY2hhciogbWVzc2FnZSkKK3sKKyAgICBp
ZiAod3JpdGUobV93cml0ZVRvUGlwZURlc2NyaXB0b3IsIG1lc3NhZ2UsIHRocmVhZE1lc3NhZ2VT
aXplKSA9PSAtMSkKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gd2FrZSB1cCBXb3JrUXVl
dWUgVGhyZWFkIik7Cit9CisKK3ZvaWQqIFdvcmtRdWV1ZTo6d29ya1F1ZXVlVGhyZWFkKFdvcmtR
dWV1ZSogd29ya1F1ZXVlKQoreworICAgIHdoaWxlICh3b3JrUXVldWUtPm1fdGhyZWFkTG9vcCkg
eworICAgICAgICB3b3JrUXVldWUtPnBlcmZvcm1Xb3JrKCk7CisgICAgICAgIHdvcmtRdWV1ZS0+
cGVyZm9ybUZpbGVEZXNjcmlwdG9yV29yaygpOworICAgIH0KKworICAgIGNsb3NlKHdvcmtRdWV1
ZS0+bV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yKTsKKyAgICBjbG9zZSh3b3JrUXVldWUtPm1fd3Jp
dGVUb1BpcGVEZXNjcmlwdG9yKTsKKworICAgIHJldHVybiAwOworfQorCit2b2lkIFdvcmtRdWV1
ZTo6cmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIoaW50IGZpbGVEZXNjcmlwdG9yLCBjb25zdCBG
dW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKK3sKKyAgICBpZiAobV9zb2NrZXREZXNjcmlwdG9y
ICE9IGludmFsaWRTb2NrZXREZXNjcmlwdG9yKQorICAgICAgICBMT0dfRVJST1IoIiVkIGlzIGFs
cmVhZHkgcmVnaXN0ZXJkLiIsIGZpbGVEZXNjcmlwdG9yKTsKKworICAgIG1fc29ja2V0RGVzY3Jp
cHRvciA9IGZpbGVEZXNjcmlwdG9yOworICAgIG1fc29ja2V0RXZlbnRIYW5kbGVyID0gZnVuY3Rp
b247CisKKyAgICBpZiAoZmlsZURlc2NyaXB0b3IgPiBtX21heEZpbGVEZXNjcmlwdG9yKQorICAg
ICAgICBtX21heEZpbGVEZXNjcmlwdG9yID0gZmlsZURlc2NyaXB0b3I7CisgICAgRkRfU0VUKGZp
bGVEZXNjcmlwdG9yLCAmbV9maWxlRGVzY3JpcHRvclNldCk7Cit9CisKK3ZvaWQgV29ya1F1ZXVl
Ojp1bnJlZ2lzdGVyU29ja2V0RXZlbnRIYW5kbGVyKGludCBmaWxlRGVzY3JpcHRvcikKK3sKKyAg
ICBtX3NvY2tldERlc2NyaXB0b3IgPSBpbnZhbGlkU29ja2V0RGVzY3JpcHRvcjsKKworICAgIGlm
IChmaWxlRGVzY3JpcHRvciA9PSBtX21heEZpbGVEZXNjcmlwdG9yKQorICAgICAgICBtX21heEZp
bGVEZXNjcmlwdG9yID0gbV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yOworICAgIEZEX0NMUihmaWxl
RGVzY3JpcHRvciwgJm1fZmlsZURlc2NyaXB0b3JTZXQpOworfQorCit2b2lkIFdvcmtRdWV1ZTo6
ZGlzcGF0Y2goY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCit7CisgICAgTXV0ZXhM
b2NrZXIgbG9ja2VyKG1fd29ya0l0ZW1RdWV1ZUxvY2spOworICAgIG1fd29ya0l0ZW1RdWV1ZS5h
cHBlbmQoZnVuY3Rpb24pOworICAgIHNlbmRNZXNzYWdlVG9UaHJlYWQod2FrdXBUaHJlYWRNZXNz
YWdlKTsKK30KKworYm9vbCBXb3JrUXVldWU6OnRpbWVyRmlyZWQodm9pZCogZGF0YSkKK3sKKyAg
ICBUaW1lcldvcmtJdGVtKiBpdGVtID0gc3RhdGljX2Nhc3Q8VGltZXJXb3JrSXRlbSo+KGRhdGEp
OworICAgIGlmIChpdGVtICYmIGl0ZW0tPnF1ZXVlKCktPm1faXNWYWxpZCkgeworICAgICAgICBp
dGVtLT5xdWV1ZSgpLT5kaXNwYXRjaChpdGVtLT5mdW5jdGlvbigpKTsKKyAgICAgICAgaXRlbS0+
cXVldWUoKS0+bV90aW1lcnMudGFrZShpdGVtLT50aW1lcklEKCkpOworICAgICAgICBkZWxldGUg
aXRlbTsKKyAgICB9CisKKyAgICByZXR1cm4gRUNPUkVfQ0FMTEJBQ0tfQ0FOQ0VMOworfQorCit2
b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2hBZnRlckRlbGF5KGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4m
IGZ1bmN0aW9uLCBkb3VibGUgZGVsYXkpCit7CisgICAgc3RhdGljIGludCB0aW1lcklkID0gMDsK
KyAgICBtX3RpbWVycy5zZXQodGltZXJJZCwgYWRvcHRQdHIoZWNvcmVfdGltZXJfYWRkKGRlbGF5
LCByZWludGVycHJldF9jYXN0PEVjb3JlX1Rhc2tfQ2I+KHRpbWVyRmlyZWQpLCBuZXcgVGltZXJX
b3JrSXRlbSh0aW1lcklkLCBmdW5jdGlvbiwgdGhpcykpKSk7CisgICAgdGltZXJJZCsrOworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvZ3RrL1dvcmtRdWV1ZUd0ay5jcHAgYi9Tb3VyY2Uv
V1RGL3d0Zi9ndGsvV29ya1F1ZXVlR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iOTFmNjM1MWQ3M2IwMjEw
ZWVhYzY2OTY3MzU4ODdlZjhlYTZhNmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93
dGYvZ3RrL1dvcmtRdWV1ZUd0ay5jcHAKQEAgLTAsMCArMSwyMjkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90
b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXb3JrUXVldWUuaCIKKworI2luY2x1ZGUgPGdp
by9naW8uaD4KKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0
ci5oPgorCisvLyBXb3JrUXVldWU6OkV2ZW50U291cmNlCitjbGFzcyBXb3JrUXVldWU6OkV2ZW50
U291cmNlIHsKK3B1YmxpYzoKKyAgICBFdmVudFNvdXJjZShjb25zdCBGdW5jdGlvbjx2b2lkKCk+
JiBmdW5jdGlvbiwgV29ya1F1ZXVlKiB3b3JrUXVldWUsIEdDYW5jZWxsYWJsZSogY2FuY2VsbGFi
bGUpCisgICAgICAgIDogbV9mdW5jdGlvbihmdW5jdGlvbikKKyAgICAgICAgLCBtX3dvcmtRdWV1
ZSh3b3JrUXVldWUpCisgICAgICAgICwgbV9jYW5jZWxsYWJsZShjYW5jZWxsYWJsZSkKKyAgICB7
CisgICAgfQorCisgICAgdm9pZCBjYW5jZWwoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2NhbmNl
bGxhYmxlKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBnX2NhbmNlbGxhYmxlX2NhbmNl
bChtX2NhbmNlbGxhYmxlKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBleGVjdXRlRXZlbnRT
b3VyY2UoRXZlbnRTb3VyY2UqIGV2ZW50U291cmNlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGV2
ZW50U291cmNlKTsKKyAgICAgICAgV29ya1F1ZXVlKiBxdWV1ZSA9IGV2ZW50U291cmNlLT5tX3dv
cmtRdWV1ZTsKKyAgICAgICAgeworICAgICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHF1ZXVl
LT5tX2lzVmFsaWRNdXRleCk7CisgICAgICAgICAgICBpZiAoIXF1ZXVlLT5tX2lzVmFsaWQpCisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZXZlbnRTb3VyY2Ut
Pm1fZnVuY3Rpb24oKTsKKyAgICB9CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gcGVyZm9ybVdvcmtP
bmNlKEV2ZW50U291cmNlKiBldmVudFNvdXJjZSkKKyAgICB7CisgICAgICAgIGV4ZWN1dGVFdmVu
dFNvdXJjZShldmVudFNvdXJjZSk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgZ2Jvb2xlYW4gcGVyZm9ybVdvcmsoR1NvY2tldCogc29ja2V0LCBHSU9Db25kaXRp
b24gY29uZGl0aW9uLCBFdmVudFNvdXJjZSogZXZlbnRTb3VyY2UpCisgICAgeworICAgICAgICBp
ZiAoIShjb25kaXRpb24gJiBHX0lPX0lOKSAmJiAhKGNvbmRpdGlvbiAmIEdfSU9fSFVQKSAmJiAh
KGNvbmRpdGlvbiAmIEdfSU9fRVJSKSkgeworICAgICAgICAgICAgLy8gRXZlbnRTb3VyY2UgaGFz
IGJlZW4gY2FuY2VsbGVkLCByZXR1cm4gRkFMU0UgdG8gZGVzdHJveSB0aGUgc291cmNlLgorICAg
ICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisKKyAgICAgICAgZXhlY3V0ZUV2ZW50
U291cmNlKGV2ZW50U291cmNlKTsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCisgICAg
c3RhdGljIGdib29sZWFuIHBlcmZvcm1Xb3JrT25UZXJtaW5hdGlvbihHUGlkLCBnaW50LCBFdmVu
dFNvdXJjZSogZXZlbnRTb3VyY2UpCisgICAgeworICAgICAgICBleGVjdXRlRXZlbnRTb3VyY2Uo
ZXZlbnRTb3VyY2UpOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgc3RhdGlj
IHZvaWQgZGVsZXRlRXZlbnRTb3VyY2UoRXZlbnRTb3VyY2UqIGV2ZW50U291cmNlKSAKKyAgICB7
CisgICAgICAgIEFTU0VSVChldmVudFNvdXJjZSk7CisgICAgICAgIGRlbGV0ZSBldmVudFNvdXJj
ZTsKKyAgICB9CisgICAKK3B1YmxpYzoKKyAgICBGdW5jdGlvbjx2b2lkKCk+IG1fZnVuY3Rpb247
CisgICAgV29ya1F1ZXVlKiBtX3dvcmtRdWV1ZTsKKyAgICBHQ2FuY2VsbGFibGUqIG1fY2FuY2Vs
bGFibGU7Cit9OworCisvLyBXb3JrUXVldWUKK3N0YXRpYyBjb25zdCBzaXplX3Qga1Zpc3VhbFN0
dWRpb1RocmVhZE5hbWVMaW1pdCA9IDMxOworCit2b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1Jbml0
aWFsaXplKGNvbnN0IGNoYXIqIG5hbWUpCit7CisgICAgbV9ldmVudENvbnRleHQgPSBhZG9wdEdS
ZWYoZ19tYWluX2NvbnRleHRfbmV3KCkpOworICAgIEFTU0VSVChtX2V2ZW50Q29udGV4dCk7Cisg
ICAgbV9ldmVudExvb3AgPSBhZG9wdEdSZWYoZ19tYWluX2xvb3BfbmV3KG1fZXZlbnRDb250ZXh0
LmdldCgpLCBGQUxTRSkpOworICAgIEFTU0VSVChtX2V2ZW50TG9vcCk7CisKKyAgICAvLyBUaGlz
IG5hbWUgY2FuIGJlIGNvbS5hcHBsZS5XZWJLaXQuUHJvY2Vzc0xhdW5jaGVyIG9yIGNvbS5hcHBs
ZS5Db3JlSVBDLlJlY2VpdmVRdWV1ZS4KKyAgICAvLyBXZSBhcmUgdXNpbmcgdGhvc2UgbmFtZXMg
Zm9yIHRoZSB0aHJlYWQgbmFtZSwgYnV0IGJvdGggYXJlIGxvbmdlciB0aGFuIDMxIGNoYXJhY3Rl
cnMsCisgICAgLy8gd2hpY2ggaXMgdGhlIGxpbWl0IG9mIFZpc3VhbCBTdHVkaW8gZm9yIHRocmVh
ZCBuYW1lcy4KKyAgICAvLyBXaGVuIGxvZyBpcyBlbmFibGVkIGNyZWF0ZVRocmVhZCgpIHdpbGwg
YXNzZXJ0IGluc3RlYWQgb2YgdHJ1bmNhdGUgdGhlIG5hbWUsIHNvIHdlIG5lZWQKKyAgICAvLyB0
byBtYWtlIHN1cmUgd2UgZG9uJ3QgdXNlIGEgbmFtZSBsb25nZXIgdGhhbiAzMSBjaGFyYWN0ZXJz
LgorICAgIGNvbnN0IGNoYXIqIHRocmVhZE5hbWUgPSBnX3N0cnJzdHIobmFtZSwgIi4iKTsKKyAg
ICBpZiAodGhyZWFkTmFtZSkKKyAgICAgICAgdGhyZWFkTmFtZSsrOworICAgIGVsc2UKKyAgICAg
ICAgdGhyZWFkTmFtZSA9IG5hbWU7CisgICAgaWYgKHN0cmxlbih0aHJlYWROYW1lKSA+IGtWaXN1
YWxTdHVkaW9UaHJlYWROYW1lTGltaXQpCisgICAgICAgIHRocmVhZE5hbWUgKz0gc3RybGVuKHRo
cmVhZE5hbWUpIC0ga1Zpc3VhbFN0dWRpb1RocmVhZE5hbWVMaW1pdDsKKworICAgIG1fd29ya1F1
ZXVlVGhyZWFkID0gY3JlYXRlVGhyZWFkKHJlaW50ZXJwcmV0X2Nhc3Q8V1RGOjpUaHJlYWRGdW5j
dGlvbj4oJldvcmtRdWV1ZTo6c3RhcnRXb3JrUXVldWVUaHJlYWQpLCB0aGlzLCB0aHJlYWROYW1l
KTsKK30KKwordm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCit7CisgICAgTXV0
ZXhMb2NrZXIgbG9ja2VyKG1fZXZlbnRMb29wTG9jayk7CisKKyAgICBpZiAobV9ldmVudExvb3Ap
IHsKKyAgICAgICAgaWYgKGdfbWFpbl9sb29wX2lzX3J1bm5pbmcobV9ldmVudExvb3AuZ2V0KCkp
KQorICAgICAgICAgICAgZ19tYWluX2xvb3BfcXVpdChtX2V2ZW50TG9vcC5nZXQoKSk7CisgICAg
ICAgIG1fZXZlbnRMb29wLmNsZWFyKCk7CisgICAgfQorCisgICAgbV9ldmVudENvbnRleHQuY2xl
YXIoKTsKK30KKwordm9pZCBXb3JrUXVldWU6OnN0YXJ0V29ya1F1ZXVlVGhyZWFkKFdvcmtRdWV1
ZSogd29ya1F1ZXVlKQoreworICAgIHdvcmtRdWV1ZS0+d29ya1F1ZXVlVGhyZWFkQm9keSgpOwor
fQorCit2b2lkIFdvcmtRdWV1ZTo6d29ya1F1ZXVlVGhyZWFkQm9keSgpCit7CisgICAgZ19tYWlu
X2xvb3BfcnVuKG1fZXZlbnRMb29wLmdldCgpKTsKK30KKwordm9pZCBXb3JrUXVldWU6OnJlZ2lz
dGVyRXZlbnRTb3VyY2VIYW5kbGVyKGludCBmaWxlRGVzY3JpcHRvciwgaW50IGNvbmRpdGlvbiwg
Y29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCit7CisgICAgR1JlZlB0cjxHU29ja2V0
PiBzb2NrZXQgPSBhZG9wdEdSZWYoZ19zb2NrZXRfbmV3X2Zyb21fZmQoZmlsZURlc2NyaXB0b3Is
IDApKTsKKyAgICBBU1NFUlQoc29ja2V0KTsKKyAgICBHUmVmUHRyPEdDYW5jZWxsYWJsZT4gY2Fu
Y2VsbGFibGUgPSBhZG9wdEdSZWYoZ19jYW5jZWxsYWJsZV9uZXcoKSk7CisgICAgR1JlZlB0cjxH
U291cmNlPiBkaXNwYXRjaFNvdXJjZSA9IGFkb3B0R1JlZihnX3NvY2tldF9jcmVhdGVfc291cmNl
KHNvY2tldC5nZXQoKSwgc3RhdGljX2Nhc3Q8R0lPQ29uZGl0aW9uPihjb25kaXRpb24pLCBjYW5j
ZWxsYWJsZS5nZXQoKSkpOworICAgIEFTU0VSVChkaXNwYXRjaFNvdXJjZSk7CisgICAgRXZlbnRT
b3VyY2UqIGV2ZW50U291cmNlID0gbmV3IEV2ZW50U291cmNlKGZ1bmN0aW9uLCB0aGlzLCBjYW5j
ZWxsYWJsZS5nZXQoKSk7CisgICAgQVNTRVJUKGV2ZW50U291cmNlKTsKKworICAgIGdfc291cmNl
X3NldF9jYWxsYmFjayhkaXNwYXRjaFNvdXJjZS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxHU291
cmNlRnVuYz4oJldvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OnBlcmZvcm1Xb3JrKSwKKyAgICAgICAg
ZXZlbnRTb3VyY2UsIHJlaW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KCZXb3JrUXVldWU6
OkV2ZW50U291cmNlOjpkZWxldGVFdmVudFNvdXJjZSkpOworCisgICAgLy8gU2V0IHVwIHRoZSBl
dmVudCBzb3VyY2VzIHVuZGVyIHRoZSBtdXRleCBzaW5jZSB0aGlzIGlzIHNoYXJlZCBhY3Jvc3Mg
bXVsdGlwbGUgdGhyZWFkcy4KKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2V2
ZW50U291cmNlc0xvY2spOworICAgICAgICBWZWN0b3I8RXZlbnRTb3VyY2UqPiBzb3VyY2VzOwor
ICAgICAgICBFdmVudFNvdXJjZUl0ZXJhdG9yIGl0ID0gbV9ldmVudFNvdXJjZXMuZmluZChmaWxl
RGVzY3JpcHRvcik7CisgICAgICAgIGlmIChpdCAhPSBtX2V2ZW50U291cmNlcy5lbmQoKSkgCisg
ICAgICAgICAgICBzb3VyY2VzID0gaXQtPnNlY29uZDsKKworICAgICAgICBzb3VyY2VzLmFwcGVu
ZChldmVudFNvdXJjZSk7CisgICAgICAgIG1fZXZlbnRTb3VyY2VzLnNldChmaWxlRGVzY3JpcHRv
ciwgc291cmNlcyk7CisgICAgfQorCisgICAgZ19zb3VyY2VfYXR0YWNoKGRpc3BhdGNoU291cmNl
LmdldCgpLCBtX2V2ZW50Q29udGV4dC5nZXQoKSk7Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjp1bnJl
Z2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKGludCBmaWxlRGVzY3JpcHRvcikKK3sKKyAgICBBU1NF
UlQoZmlsZURlc2NyaXB0b3IpOworICAgIAorICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2V2ZW50
U291cmNlc0xvY2spOworICAgIAorICAgIEV2ZW50U291cmNlSXRlcmF0b3IgaXQgPSBtX2V2ZW50
U291cmNlcy5maW5kKGZpbGVEZXNjcmlwdG9yKTsKKyAgICBBU1NFUlQoaXQgIT0gbV9ldmVudFNv
dXJjZXMuZW5kKCkpOworICAgIEFTU0VSVChtX2V2ZW50U291cmNlcy5jb250YWlucyhmaWxlRGVz
Y3JpcHRvcikpOworCisgICAgaWYgKGl0ICE9IG1fZXZlbnRTb3VyY2VzLmVuZCgpKSB7CisgICAg
ICAgIFZlY3RvcjxFdmVudFNvdXJjZSo+IHNvdXJjZXMgPSBpdC0+c2Vjb25kOworICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc291cmNlcy5zaXplKCk7IGkrKykKKyAgICAgICAgICAg
IHNvdXJjZXNbaV0tPmNhbmNlbCgpOworCisgICAgICAgIG1fZXZlbnRTb3VyY2VzLnJlbW92ZShp
dCk7CisgICAgfQorfQorCit2b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2hPblNvdXJjZShHU291cmNl
KiBkaXNwYXRjaFNvdXJjZSwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24sIEdTb3Vy
Y2VGdW5jIHNvdXJjZUNhbGxiYWNrKQoreworICAgIEV2ZW50U291cmNlKiBldmVudFNvdXJjZSA9
IG5ldyBFdmVudFNvdXJjZShmdW5jdGlvbiwgdGhpcywgMCk7CisKKyAgICBnX3NvdXJjZV9zZXRf
Y2FsbGJhY2soZGlzcGF0Y2hTb3VyY2UsIHNvdXJjZUNhbGxiYWNrLCBldmVudFNvdXJjZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxHRGVzdHJveU5vdGlmeT4o
JldvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OmRlbGV0ZUV2ZW50U291cmNlKSk7CisKKyAgICBnX3Nv
dXJjZV9hdHRhY2goZGlzcGF0Y2hTb3VyY2UsIG1fZXZlbnRDb250ZXh0LmdldCgpKTsKK30KKwor
dm9pZCBXb3JrUXVldWU6OmRpc3BhdGNoKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9u
KQoreworICAgIEdSZWZQdHI8R1NvdXJjZT4gZGlzcGF0Y2hTb3VyY2UgPSBhZG9wdEdSZWYoZ19p
ZGxlX3NvdXJjZV9uZXcoKSk7CisgICAgQVNTRVJUKGRpc3BhdGNoU291cmNlKTsKKyAgICBnX3Nv
dXJjZV9zZXRfcHJpb3JpdHkoZGlzcGF0Y2hTb3VyY2UuZ2V0KCksIEdfUFJJT1JJVFlfREVGQVVM
VCk7CisKKyAgICBkaXNwYXRjaE9uU291cmNlKGRpc3BhdGNoU291cmNlLmdldCgpLCBmdW5jdGlv
biwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oJldvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6
OnBlcmZvcm1Xb3JrT25jZSkpOworfQorCit2b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2hBZnRlckRl
bGF5KGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uLCBkb3VibGUgZGVsYXkpCit7Cisg
ICAgR1JlZlB0cjxHU291cmNlPiBkaXNwYXRjaFNvdXJjZSA9IGFkb3B0R1JlZihnX3RpbWVvdXRf
c291cmNlX25ldyhzdGF0aWNfY2FzdDxndWludD4oZGVsYXkgKiAxMDAwKSkpOworICAgIEFTU0VS
VChkaXNwYXRjaFNvdXJjZSk7CisKKyAgICBkaXNwYXRjaE9uU291cmNlKGRpc3BhdGNoU291cmNl
LmdldCgpLCBmdW5jdGlvbiwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oJldvcmtRdWV1
ZTo6RXZlbnRTb3VyY2U6OnBlcmZvcm1Xb3JrT25jZSkpOworfQorCit2b2lkIFdvcmtRdWV1ZTo6
ZGlzcGF0Y2hPblRlcm1pbmF0aW9uKFBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIgcHJvY2Vzcywg
Y29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCit7CisgICAgR1JlZlB0cjxHU291cmNl
PiBkaXNwYXRjaFNvdXJjZSA9IGFkb3B0R1JlZihnX2NoaWxkX3dhdGNoX3NvdXJjZV9uZXcocHJv
Y2VzcykpOworICAgIEFTU0VSVChkaXNwYXRjaFNvdXJjZSk7CisKKyAgICBkaXNwYXRjaE9uU291
cmNlKGRpc3BhdGNoU291cmNlLmdldCgpLCBmdW5jdGlvbiwgcmVpbnRlcnByZXRfY2FzdDxHU291
cmNlRnVuYz4oJldvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OnBlcmZvcm1Xb3JrT25UZXJtaW5hdGlv
bikpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvbWFjL1dvcmtRdWV1ZU1hYy5jcHAg
Yi9Tb3VyY2UvV1RGL3d0Zi9tYWMvV29ya1F1ZXVlTWFjLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZTQ3M2Vl
NWNjODRlNTg0MjliMDQzOWNjZDkyMWFjMmM0OTJmZmFhCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dURi93dGYvbWFjL1dvcmtRdWV1ZU1hYy5jcHAKQEAgLTAsMCArMSwxNzggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV29ya1F1ZXVlLmgiCisKKyNp
bmNsdWRlIDxtYWNoL21hY2hfaW5pdC5oPgorI2luY2x1ZGUgPG1hY2gvbWFjaF9wb3J0Lmg+Cisj
aW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKwordm9pZCBXb3JrUXVldWU6OmV4ZWN1dGVGdW5j
dGlvbih2b2lkKiBjb250ZXh0KQoreworICAgIFdvcmtRdWV1ZSogcXVldWUgPSBzdGF0aWNfY2Fz
dDxXb3JrUXVldWUqPihkaXNwYXRjaF9nZXRfY29udGV4dChkaXNwYXRjaF9nZXRfY3VycmVudF9x
dWV1ZSgpKSk7CisgICAgT3duUHRyPEZ1bmN0aW9uPHZvaWQoKT4gPiBmdW5jdGlvbiA9IGFkb3B0
UHRyKHN0YXRpY19jYXN0PEZ1bmN0aW9uPHZvaWQoKT4qPihjb250ZXh0KSk7CisgICAgCisgICAg
eworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIocXVldWUtPm1faXNWYWxpZE11dGV4KTsKKyAg
ICAgICAgaWYgKCFxdWV1ZS0+bV9pc1ZhbGlkKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgICgqZnVuY3Rpb24pKCk7Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjpkaXNwYXRjaChjb25z
dCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKK3sKKyAgICBkaXNwYXRjaF9hc3luY19mKG1f
ZGlzcGF0Y2hRdWV1ZSwgbmV3IEZ1bmN0aW9uPHZvaWQoKT4oZnVuY3Rpb24pLCBleGVjdXRlRnVu
Y3Rpb24pOworfQorCit2b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2hBZnRlckRlbGF5KGNvbnN0IEZ1
bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uLCBkb3VibGUgZGVsYXkpCit7CisgICAgZGlzcGF0Y2hf
dGltZV90IGRlbGF5VGltZSA9IGRpc3BhdGNoX3RpbWUoRElTUEFUQ0hfVElNRV9OT1csIGRlbGF5
ICogTlNFQ19QRVJfU0VDKTsKKworICAgIGRpc3BhdGNoX2FmdGVyX2YoZGVsYXlUaW1lLCBtX2Rp
c3BhdGNoUXVldWUsIG5ldyBGdW5jdGlvbjx2b2lkKCk+KGZ1bmN0aW9uKSwgZXhlY3V0ZUZ1bmN0
aW9uKTsKK30KKworY2xhc3MgV29ya1F1ZXVlOjpFdmVudFNvdXJjZSB7CitwdWJsaWM6CisgICAg
RXZlbnRTb3VyY2UoTWFjaFBvcnRFdmVudFR5cGUgZXZlbnRUeXBlLCBkaXNwYXRjaF9zb3VyY2Vf
dCBkaXNwYXRjaFNvdXJjZSwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCisgICAg
ICAgIDogbV9ldmVudFR5cGUoZXZlbnRUeXBlKQorICAgICAgICAsIG1fZGlzcGF0Y2hTb3VyY2Uo
ZGlzcGF0Y2hTb3VyY2UpCisgICAgICAgICwgbV9mdW5jdGlvbihmdW5jdGlvbikKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIGRpc3BhdGNoX3NvdXJjZV90IGRpc3BhdGNoU291cmNlKCkgY29uc3Qg
eyByZXR1cm4gbV9kaXNwYXRjaFNvdXJjZTsgfQorICAgIAorICAgIHN0YXRpYyB2b2lkIGV2ZW50
SGFuZGxlcih2b2lkKiBzb3VyY2UpIAorICAgIHsKKyAgICAgICAgRXZlbnRTb3VyY2UqIGV2ZW50
U291cmNlID0gc3RhdGljX2Nhc3Q8RXZlbnRTb3VyY2UqPihzb3VyY2UpOworICAgICAgICAKKyAg
ICAgICAgZXZlbnRTb3VyY2UtPm1fZnVuY3Rpb24oKTsKKyAgICB9CisgICAgCisgICAgc3RhdGlj
IHZvaWQgY2FuY2VsSGFuZGxlcih2b2lkKiBzb3VyY2UpCisgICAgeworICAgICAgICBFdmVudFNv
dXJjZSogZXZlbnRTb3VyY2UgPSBzdGF0aWNfY2FzdDxFdmVudFNvdXJjZSo+KHNvdXJjZSk7Cisg
ICAgICAgIAorICAgICAgICBtYWNoX3BvcnRfdCBtYWNoUG9ydCA9IGRpc3BhdGNoX3NvdXJjZV9n
ZXRfaGFuZGxlKGV2ZW50U291cmNlLT5tX2Rpc3BhdGNoU291cmNlKTsKKyAgICAgICAgCisgICAg
ICAgIHN3aXRjaCAoZXZlbnRTb3VyY2UtPm1fZXZlbnRUeXBlKSB7CisgICAgICAgIGNhc2UgTWFj
aFBvcnREYXRhQXZhaWxhYmxlOgorICAgICAgICAgICAgLy8gUmVsZWFzZSBvdXIgcmVjZWl2ZSBy
aWdodC4KKyAgICAgICAgICAgIG1hY2hfcG9ydF9tb2RfcmVmcyhtYWNoX3Rhc2tfc2VsZigpLCBt
YWNoUG9ydCwgTUFDSF9QT1JUX1JJR0hUX1JFQ0VJVkUsIC0xKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIE1hY2hQb3J0RGVhZE5hbWVOb3RpZmljYXRpb246CisgICAgICAgICAg
ICAvLyBSZWxlYXNlIG91ciBzZW5kIHJpZ2h0LgorICAgICAgICAgICAgbWFjaF9wb3J0X2RlYWxs
b2NhdGUobWFjaF90YXNrX3NlbGYoKSwgbWFjaFBvcnQpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgZmluYWxpemVIYW5kbGVyKHZv
aWQqIHNvdXJjZSkKKyAgICB7CisgICAgICAgIEV2ZW50U291cmNlKiBldmVudFNvdXJjZSA9IHN0
YXRpY19jYXN0PEV2ZW50U291cmNlKj4oc291cmNlKTsKKyAgICAgICAgCisgICAgICAgIGRlbGV0
ZSBldmVudFNvdXJjZTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIE1hY2hQb3J0RXZlbnRU
eXBlIG1fZXZlbnRUeXBlOworICAgIAorICAgIC8vIFRoaXMgaXMgYSB3ZWFrIHJlZmVyZW5jZSwg
c2luY2UgbV9kaXNwYXRjaFNvdXJjZSByZWZlcmVuY2VzIHRoZSBldmVudCBzb3VyY2UuCisgICAg
ZGlzcGF0Y2hfc291cmNlX3QgbV9kaXNwYXRjaFNvdXJjZTsKKworICAgIEZ1bmN0aW9uPHZvaWQo
KT4gbV9mdW5jdGlvbjsKK307CisKK3ZvaWQgV29ya1F1ZXVlOjpyZWdpc3Rlck1hY2hQb3J0RXZl
bnRIYW5kbGVyKG1hY2hfcG9ydF90IG1hY2hQb3J0LCBNYWNoUG9ydEV2ZW50VHlwZSBldmVudFR5
cGUsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQoreworICAgIGRpc3BhdGNoX3Nv
dXJjZV90eXBlX3Qgc291cmNlVHlwZSA9IDA7CisgICAgc3dpdGNoIChldmVudFR5cGUpIHsKKyAg
ICBjYXNlIE1hY2hQb3J0RGF0YUF2YWlsYWJsZToKKyAgICAgICAgc291cmNlVHlwZSA9IERJU1BB
VENIX1NPVVJDRV9UWVBFX01BQ0hfUkVDVjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNYWNo
UG9ydERlYWROYW1lTm90aWZpY2F0aW9uOgorICAgICAgICBzb3VyY2VUeXBlID0gRElTUEFUQ0hf
U09VUkNFX1RZUEVfTUFDSF9TRU5EOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAg
ZGlzcGF0Y2hfc291cmNlX3QgZGlzcGF0Y2hTb3VyY2UgPSBkaXNwYXRjaF9zb3VyY2VfY3JlYXRl
KHNvdXJjZVR5cGUsIG1hY2hQb3J0LCAwLCBtX2Rpc3BhdGNoUXVldWUpOworICAgIAorICAgIEV2
ZW50U291cmNlKiBldmVudFNvdXJjZSA9IG5ldyBFdmVudFNvdXJjZShldmVudFR5cGUsIGRpc3Bh
dGNoU291cmNlLCBmdW5jdGlvbik7CisgICAgZGlzcGF0Y2hfc2V0X2NvbnRleHQoZGlzcGF0Y2hT
b3VyY2UsIGV2ZW50U291cmNlKTsKKyAgICAKKyAgICBkaXNwYXRjaF9zb3VyY2Vfc2V0X2V2ZW50
X2hhbmRsZXJfZihkaXNwYXRjaFNvdXJjZSwgJkV2ZW50U291cmNlOjpldmVudEhhbmRsZXIpOwor
ICAgIGRpc3BhdGNoX3NvdXJjZV9zZXRfY2FuY2VsX2hhbmRsZXJfZihkaXNwYXRjaFNvdXJjZSwg
JkV2ZW50U291cmNlOjpjYW5jZWxIYW5kbGVyKTsKKyAgICBkaXNwYXRjaF9zZXRfZmluYWxpemVy
X2YoZGlzcGF0Y2hTb3VyY2UsICZFdmVudFNvdXJjZTo6ZmluYWxpemVIYW5kbGVyKTsKKyAgICAK
KyAgICAvLyBBZGQgdGhlIHNvdXJjZSB0byBvdXIgc2V0IG9mIHNvdXJjZXMuCisgICAgeworICAg
ICAgICBNdXRleExvY2tlciBsb2NrZXIobV9ldmVudFNvdXJjZXNNdXRleCk7CisgICAgICAgIAor
ICAgICAgICBBU1NFUlQoIW1fZXZlbnRTb3VyY2VzLmNvbnRhaW5zKG1hY2hQb3J0KSk7CisgICAg
ICAgIAorICAgICAgICBtX2V2ZW50U291cmNlcy5zZXQobWFjaFBvcnQsIGV2ZW50U291cmNlKTsK
KyAgICAgICAgCisgICAgICAgIC8vIEFuZCBzdGFydCBpdCEKKyAgICAgICAgZGlzcGF0Y2hfcmVz
dW1lKGRpc3BhdGNoU291cmNlKTsKKyAgICB9Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjp1bnJlZ2lz
dGVyTWFjaFBvcnRFdmVudEhhbmRsZXIobWFjaF9wb3J0X3QgbWFjaFBvcnQpCit7CisgICAgQVNT
RVJUKG1hY2hQb3J0KTsKKyAgICAKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9ldmVudFNvdXJj
ZXNNdXRleCk7CisgICAgCisgICAgSGFzaE1hcDxtYWNoX3BvcnRfdCwgRXZlbnRTb3VyY2UqPjo6
aXRlcmF0b3IgaXQgPSBtX2V2ZW50U291cmNlcy5maW5kKG1hY2hQb3J0KTsKKyAgICBBU1NFUlQo
aXQgIT0gbV9ldmVudFNvdXJjZXMuZW5kKCkpOworICAgIAorICAgIEFTU0VSVChtX2V2ZW50U291
cmNlcy5jb250YWlucyhtYWNoUG9ydCkpOworCisgICAgRXZlbnRTb3VyY2UqIGV2ZW50U291cmNl
ID0gaXQtPnNlY29uZDsKKyAgICAvLyBDYW5jZWwgYW5kIHJlbGVhc2UgdGhlIHNvdXJjZS4gSXQg
d2lsbCBiZSBkZWxldGVkIGluIGl0cyBmaW5hbGl6ZSBoYW5kbGVyLgorICAgIGRpc3BhdGNoX3Nv
dXJjZV9jYW5jZWwoZXZlbnRTb3VyY2UtPmRpc3BhdGNoU291cmNlKCkpOworICAgIGRpc3BhdGNo
X3JlbGVhc2UoZXZlbnRTb3VyY2UtPmRpc3BhdGNoU291cmNlKCkpOworCisgICAgbV9ldmVudFNv
dXJjZXMucmVtb3ZlKGl0KTsgICAgCit9CisKK3ZvaWQgV29ya1F1ZXVlOjpwbGF0Zm9ybUluaXRp
YWxpemUoY29uc3QgY2hhciogbmFtZSkKK3sKKyAgICBtX2Rpc3BhdGNoUXVldWUgPSBkaXNwYXRj
aF9xdWV1ZV9jcmVhdGUobmFtZSwgMCk7CisgICAgZGlzcGF0Y2hfc2V0X2NvbnRleHQobV9kaXNw
YXRjaFF1ZXVlLCB0aGlzKTsKK30KKwordm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW52YWxpZGF0
ZSgpCit7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2V2
ZW50U291cmNlc011dGV4KTsKKyAgICBBU1NFUlQobV9ldmVudFNvdXJjZXMuaXNFbXB0eSgpKTsK
KyNlbmRpZgorCisgICAgZGlzcGF0Y2hfcmVsZWFzZShtX2Rpc3BhdGNoUXVldWUpOworfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvcXQvV29ya1F1ZXVlUXQuY3BwIGIvU291cmNlL1dURi93
dGYvcXQvV29ya1F1ZXVlUXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQzYTc5YmUwODAzYTYyMzU3NmMzNGI0
Njc0YzNjZDNiMDMwODhmYmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9xdC9X
b3JrUXVldWVRdC5jcHAKQEAgLTAsMCArMSwxMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEw
IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV29ya1F1ZXVlLmgiCisKKyNpbmNsdWRl
IDxRT2JqZWN0PgorI2luY2x1ZGUgPFFQcm9jZXNzPgorI2luY2x1ZGUgPFFUaHJlYWQ+CisjaW5j
bHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcu
aD4KKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFdvcmtRdWV1ZTo6V29ya0l0ZW1RdCA6IHB1
YmxpYyBRT2JqZWN0IHsKKyAgICBRX09CSkVDVAorcHVibGljOgorICAgIFdvcmtJdGVtUXQoV29y
a1F1ZXVlKiB3b3JrUXVldWUsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQorICAg
ICAgICA6IG1fcXVldWUod29ya1F1ZXVlKQorICAgICAgICAsIG1fc291cmNlKDApCisgICAgICAg
ICwgbV9zaWduYWwoMCkKKyAgICAgICAgLCBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQorICAgIHsKKyAg
ICB9CisKKyAgICBXb3JrSXRlbVF0KFdvcmtRdWV1ZSogd29ya1F1ZXVlLCBRT2JqZWN0KiBzb3Vy
Y2UsIGNvbnN0IGNoYXIqIHNpZ25hbCwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24p
CisgICAgICAgIDogbV9xdWV1ZSh3b3JrUXVldWUpCisgICAgICAgICwgbV9zb3VyY2Uoc291cmNl
KQorICAgICAgICAsIG1fc2lnbmFsKHNpZ25hbCkKKyAgICAgICAgLCBtX2Z1bmN0aW9uKGZ1bmN0
aW9uKQorICAgIHsKKyAgICAgICAgY29ubmVjdChtX3NvdXJjZSwgbV9zaWduYWwsIFNMT1QoZXhl
Y3V0ZSgpKSwgUXQ6OlF1ZXVlZENvbm5lY3Rpb24pOworICAgIH0KKworICAgIH5Xb3JrSXRlbVF0
KCkKKyAgICB7CisgICAgfQorCisgICAgUV9TTE9UIHZvaWQgZXhlY3V0ZSgpIAorICAgIHsgCisg
ICAgICAgIGlmIChtX3F1ZXVlLT5tX2lzVmFsaWQpCisgICAgICAgICAgICBtX2Z1bmN0aW9uKCk7
CisgICAgfQorCisgICAgUV9TTE9UIHZvaWQgZXhlY3V0ZUFuZERlbGV0ZSgpCisgICAgeworICAg
ICAgICBleGVjdXRlKCk7CisgICAgICAgIGRlbGV0ZSB0aGlzOworICAgIH0KKworICAgIHZpcnR1
YWwgdm9pZCB0aW1lckV2ZW50KFFUaW1lckV2ZW50KikKKyAgICB7CisgICAgICAgIGV4ZWN1dGVB
bmREZWxldGUoKTsKKyAgICB9CisKKyAgICBXb3JrUXVldWUqIG1fcXVldWU7CisgICAgUU9iamVj
dCogbV9zb3VyY2U7CisgICAgY29uc3QgY2hhciogbV9zaWduYWw7CisgICAgRnVuY3Rpb248dm9p
ZCgpPiBtX2Z1bmN0aW9uOworfTsKKworUVNvY2tldE5vdGlmaWVyKiBXb3JrUXVldWU6OnJlZ2lz
dGVyU29ja2V0RXZlbnRIYW5kbGVyKGludCBzb2NrZXREZXNjcmlwdG9yLCBRU29ja2V0Tm90aWZp
ZXI6OlR5cGUgdHlwZSwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCit7CisgICAg
QVNTRVJUKG1fd29ya1RocmVhZCk7CisKKyAgICBRU29ja2V0Tm90aWZpZXIqIG5vdGlmaWVyID0g
bmV3IFFTb2NrZXROb3RpZmllcihzb2NrZXREZXNjcmlwdG9yLCB0eXBlLCAwKTsKKyAgICBub3Rp
Zmllci0+c2V0RW5hYmxlZChmYWxzZSk7CisgICAgbm90aWZpZXItPm1vdmVUb1RocmVhZChtX3dv
cmtUaHJlYWQpOworICAgIFdvcmtRdWV1ZTo6V29ya0l0ZW1RdCogaXRlbVF0ID0gbmV3IFdvcmtR
dWV1ZTo6V29ya0l0ZW1RdCh0aGlzLCBub3RpZmllciwgU0lHTkFMKGFjdGl2YXRlZChpbnQpKSwg
ZnVuY3Rpb24pOworICAgIGl0ZW1RdC0+bW92ZVRvVGhyZWFkKG1fd29ya1RocmVhZCk7CisgICAg
bm90aWZpZXItPnNldEVuYWJsZWQodHJ1ZSk7CisgICAgcmV0dXJuIG5vdGlmaWVyOworfQorCit2
b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXplKGNvbnN0IGNoYXIqKQoreworICAgIG1f
d29ya1RocmVhZCA9IG5ldyBRVGhyZWFkKCk7CisgICAgbV93b3JrVGhyZWFkLT5zdGFydCgpOwor
fQorCit2b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKK3sKKyAgICBtX3dvcmtU
aHJlYWQtPmV4aXQoKTsKKyAgICBtX3dvcmtUaHJlYWQtPndhaXQoKTsKKyAgICBkZWxldGUgbV93
b3JrVGhyZWFkOworfQorCit2b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2goY29uc3QgRnVuY3Rpb248
dm9pZCgpPiYgZnVuY3Rpb24pCit7CisgICAgV29ya1F1ZXVlOjpXb3JrSXRlbVF0KiBpdGVtUXQg
PSBuZXcgV29ya1F1ZXVlOjpXb3JrSXRlbVF0KHRoaXMsIGZ1bmN0aW9uKTsKKyAgICBpdGVtUXQt
Pm1vdmVUb1RocmVhZChtX3dvcmtUaHJlYWQpOworICAgIFFNZXRhT2JqZWN0OjppbnZva2VNZXRo
b2QoaXRlbVF0LCAiZXhlY3V0ZUFuZERlbGV0ZSIsIFF0OjpRdWV1ZWRDb25uZWN0aW9uKTsKK30K
Kwordm9pZCBXb3JrUXVldWU6OmRpc3BhdGNoQWZ0ZXJEZWxheShjb25zdCBGdW5jdGlvbjx2b2lk
KCk+JiBmdW5jdGlvbiwgZG91YmxlIGRlbGF5SW5TZWNvbmQpCit7CisgICAgV29ya1F1ZXVlOjpX
b3JrSXRlbVF0KiBpdGVtUXQgPSBuZXcgV29ya1F1ZXVlOjpXb3JrSXRlbVF0KHRoaXMsIGZ1bmN0
aW9uKTsKKyAgICBpdGVtUXQtPnN0YXJ0VGltZXIoc3RhdGljX2Nhc3Q8aW50PihkZWxheUluU2Vj
b25kICogMTAwMCkpOworICAgIGl0ZW1RdC0+bW92ZVRvVGhyZWFkKG1fd29ya1RocmVhZCk7Cit9
CisKK3ZvaWQgV29ya1F1ZXVlOjpkaXNwYXRjaE9uVGVybWluYXRpb24oUGxhdGZvcm1Qcm9jZXNz
SWRlbnRpZmllciBwcm9jZXNzLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKK3sK
KyAgICBXb3JrUXVldWU6OldvcmtJdGVtUXQqIGl0ZW1RdCA9IG5ldyBXb3JrUXVldWU6OldvcmtJ
dGVtUXQodGhpcywgcHJvY2VzcywgU0lHTkFMKGZpbmlzaGVkKGludCwgUVByb2Nlc3M6OkV4aXRT
dGF0dXMpKSwgZnVuY3Rpb24pOworICAgIGl0ZW1RdC0+bW92ZVRvVGhyZWFkKG1fd29ya1RocmVh
ZCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjaW5jbHVkZSAiV29ya1F1ZXVlUXQubW9j
IgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvd2luL1dvcmtRdWV1ZVdpbi5jcHAgYi9Tb3Vy
Y2UvV1RGL3d0Zi93aW4vV29ya1F1ZXVlV2luLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hYWJhZGJkYTg5NWUw
N2Q5ZWU1MzMwNzk1Y2M5NGU2MTdlYjkxZDdiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dU
Ri93dGYvd2luL1dvcmtRdWV1ZVdpbi5jcHAKQEAgLTAsMCArMSwyOTEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV29ya1F1ZXVlLmgiCisKKyNpbmNsdWRl
IDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgor
CitpbmxpbmUgV29ya1F1ZXVlOjpXb3JrSXRlbVdpbjo6V29ya0l0ZW1XaW4oY29uc3QgRnVuY3Rp
b248dm9pZCgpPiYgZnVuY3Rpb24sIFdvcmtRdWV1ZSogcXVldWUpCisgICAgOiBtX2Z1bmN0aW9u
KGZ1bmN0aW9uKQorICAgICwgbV9xdWV1ZShxdWV1ZSkKK3sKK30KKworUGFzc1JlZlB0cjxXb3Jr
UXVldWU6OldvcmtJdGVtV2luPiBXb3JrUXVldWU6OldvcmtJdGVtV2luOjpjcmVhdGUoY29uc3Qg
RnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24sIFdvcmtRdWV1ZSogcXVldWUpCit7CisgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBXb3JrSXRlbVdpbihmdW5jdGlvbiwgcXVldWUpKTsKK30KKworV29y
a1F1ZXVlOjpXb3JrSXRlbVdpbjo6fldvcmtJdGVtV2luKCkKK3sKK30KKworaW5saW5lIFdvcmtR
dWV1ZTo6SGFuZGxlV29ya0l0ZW06OkhhbmRsZVdvcmtJdGVtKEhBTkRMRSBoYW5kbGUsIGNvbnN0
IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uLCBXb3JrUXVldWUqIHF1ZXVlKQorICAgIDogV29y
a0l0ZW1XaW4oZnVuY3Rpb24sIHF1ZXVlKQorICAgICwgbV9oYW5kbGUoaGFuZGxlKQorICAgICwg
bV93YWl0SGFuZGxlKDApCit7CisgICAgQVNTRVJUX0FSRyhoYW5kbGUsIGhhbmRsZSk7Cit9CisK
K1Bhc3NSZWZQdHI8V29ya1F1ZXVlOjpIYW5kbGVXb3JrSXRlbT4gV29ya1F1ZXVlOjpIYW5kbGVX
b3JrSXRlbTo6Y3JlYXRlQnlBZG9wdGluZ0hhbmRsZShIQU5ETEUgaGFuZGxlLCBjb25zdCBGdW5j
dGlvbjx2b2lkKCk+JiBmdW5jdGlvbiwgV29ya1F1ZXVlKiBxdWV1ZSkKK3sKKyAgICByZXR1cm4g
YWRvcHRSZWYobmV3IEhhbmRsZVdvcmtJdGVtKGhhbmRsZSwgZnVuY3Rpb24sIHF1ZXVlKSk7Cit9
CisKK1dvcmtRdWV1ZTo6SGFuZGxlV29ya0l0ZW06On5IYW5kbGVXb3JrSXRlbSgpCit7CisgICAg
OjpDbG9zZUhhbmRsZShtX2hhbmRsZSk7Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjpoYW5kbGVDYWxs
YmFjayh2b2lkKiBjb250ZXh0LCBCT09MRUFOIHRpbWVyT3JXYWl0RmlyZWQpCit7CisgICAgQVNT
RVJUX0FSRyhjb250ZXh0LCBjb250ZXh0KTsKKyAgICBBU1NFUlRfQVJHKHRpbWVyT3JXYWl0Rmly
ZWQsICF0aW1lck9yV2FpdEZpcmVkKTsKKworICAgIFdvcmtJdGVtV2luKiBpdGVtID0gc3RhdGlj
X2Nhc3Q8V29ya0l0ZW1XaW4qPihjb250ZXh0KTsKKyAgICBXb3JrUXVldWUqIHF1ZXVlID0gaXRl
bS0+cXVldWUoKTsKKworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9jayhxdWV1ZS0+bV93
b3JrSXRlbVF1ZXVlTG9jayk7CisgICAgICAgIHF1ZXVlLT5tX3dvcmtJdGVtUXVldWUuYXBwZW5k
KGl0ZW0pOworCisgICAgICAgIC8vIElmIG5vIG90aGVyIHRocmVhZCBpcyBwZXJmb3JtaW5nIHdv
cmssIHdlIGNhbiBkbyBpdCBvbiB0aGlzIHRocmVhZC4KKyAgICAgICAgaWYgKCFxdWV1ZS0+dHJ5
UmVnaXN0ZXJBc1dvcmtUaHJlYWQoKSkgeworICAgICAgICAgICAgLy8gU29tZSBvdGhlciB0aHJl
YWQgaXMgcGVyZm9ybWluZyB3b3JrLiBTaW5jZSB3ZSBob2xkIHRoZSBxdWV1ZSBsb2NrLCB3ZSBj
YW4gYmUgc3VyZQorICAgICAgICAgICAgLy8gdGhhdCB0aGUgd29yayB0aHJlYWQgaXMgbm90IGV4
aXRpbmcgZHVlIHRvIGFuIGVtcHR5IHF1ZXVlIGFuZCB3aWxsIHByb2Nlc3MgdGhlIHdvcmsKKyAg
ICAgICAgICAgIC8vIGl0ZW0gd2UganVzdCBhZGRlZCB0byBpdC4gSWYgd2Ugd2VyZW4ndCBob2xk
aW5nIHRoZSBsb2NrIHdlJ2QgaGF2ZSB0byBzaWduYWwKKyAgICAgICAgICAgIC8vIG1fcGVyZm9y
bVdvcmtFdmVudCB0byBtYWtlIHN1cmUgdGhlIHdvcmsgaXRlbSBnb3QgcGlja2VkIHVwLgorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgcXVldWUtPnBlcmZvcm1X
b3JrT25SZWdpc3RlcmVkV29ya1RocmVhZCgpOworfQorCit2b2lkIFdvcmtRdWV1ZTo6cmVnaXN0
ZXJIYW5kbGUoSEFORExFIGhhbmRsZSwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24p
Cit7CisgICAgUmVmUHRyPEhhbmRsZVdvcmtJdGVtPiBoYW5kbGVJdGVtID0gSGFuZGxlV29ya0l0
ZW06OmNyZWF0ZUJ5QWRvcHRpbmdIYW5kbGUoaGFuZGxlLCBmdW5jdGlvbiwgdGhpcyk7CisKKyAg
ICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2sobV9oYW5kbGVzTG9jayk7CisgICAgICAgIEFT
U0VSVF9BUkcoaGFuZGxlLCAhbV9oYW5kbGVzLmNvbnRhaW5zKGhhbmRsZSkpOworICAgICAgICBt
X2hhbmRsZXMuc2V0KGhhbmRsZSwgaGFuZGxlSXRlbSk7CisgICAgfQorCisgICAgSEFORExFIHdh
aXRIYW5kbGU7CisgICAgaWYgKCE6OlJlZ2lzdGVyV2FpdEZvclNpbmdsZU9iamVjdCgmd2FpdEhh
bmRsZSwgaGFuZGxlLCBoYW5kbGVDYWxsYmFjaywgaGFuZGxlSXRlbS5nZXQoKSwgSU5GSU5JVEUs
IFdUX0VYRUNVVEVERUZBVUxUKSkgeworICAgICAgICBEV09SRCBlcnJvciA9IDo6R2V0TGFzdEVy
cm9yKCk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICBoYW5kbGVJ
dGVtLT5zZXRXYWl0SGFuZGxlKHdhaXRIYW5kbGUpOworfQorCit2b2lkIFdvcmtRdWV1ZTo6dW5y
ZWdpc3RlckFuZENsb3NlSGFuZGxlKEhBTkRMRSBoYW5kbGUpCit7CisgICAgUmVmUHRyPEhhbmRs
ZVdvcmtJdGVtPiBpdGVtOworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1faGFu
ZGxlc0xvY2spOworICAgICAgICBBU1NFUlRfQVJHKGhhbmRsZSwgbV9oYW5kbGVzLmNvbnRhaW5z
KGhhbmRsZSkpOworICAgICAgICBpdGVtID0gbV9oYW5kbGVzLnRha2UoaGFuZGxlKTsKKyAgICB9
CisKKyAgICB1bnJlZ2lzdGVyV2FpdEFuZERlc3Ryb3lJdGVtU29vbihpdGVtLnJlbGVhc2UoKSk7
Cit9CisKK0RXT1JEIFdvcmtRdWV1ZTo6d29ya1RocmVhZENhbGxiYWNrKHZvaWQqIGNvbnRleHQp
Cit7CisgICAgQVNTRVJUX0FSRyhjb250ZXh0LCBjb250ZXh0KTsKKworICAgIFdvcmtRdWV1ZSog
cXVldWUgPSBzdGF0aWNfY2FzdDxXb3JrUXVldWUqPihjb250ZXh0KTsKKworICAgIGlmICghcXVl
dWUtPnRyeVJlZ2lzdGVyQXNXb3JrVGhyZWFkKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAg
cXVldWUtPnBlcmZvcm1Xb3JrT25SZWdpc3RlcmVkV29ya1RocmVhZCgpOworICAgIHJldHVybiAw
OworfQorCit2b2lkIFdvcmtRdWV1ZTo6cGVyZm9ybVdvcmtPblJlZ2lzdGVyZWRXb3JrVGhyZWFk
KCkKK3sKKyAgICBBU1NFUlQobV9pc1dvcmtUaHJlYWRSZWdpc3RlcmVkKTsKKworICAgIGJvb2wg
aXNWYWxpZCA9IHRydWU7CisKKyAgICBtX3dvcmtJdGVtUXVldWVMb2NrLmxvY2soKTsKKworICAg
IHdoaWxlIChpc1ZhbGlkICYmICFtX3dvcmtJdGVtUXVldWUuaXNFbXB0eSgpKSB7CisgICAgICAg
IFZlY3RvcjxSZWZQdHI8V29ya0l0ZW1XaW4+ID4gd29ya0l0ZW1RdWV1ZTsKKyAgICAgICAgbV93
b3JrSXRlbVF1ZXVlLnN3YXAod29ya0l0ZW1RdWV1ZSk7CisKKyAgICAgICAgLy8gQWxsb3cgbW9y
ZSB3b3JrIHRvIGJlIHNjaGVkdWxlZCB3aGlsZSB3ZSdyZSBub3QgdXNpbmcgdGhlIHF1ZXVlIGRp
cmVjdGx5LgorICAgICAgICBtX3dvcmtJdGVtUXVldWVMb2NrLnVubG9jaygpOworICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHdvcmtJdGVtUXVldWUuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2lzVmFsaWRNdXRleCk7CisgICAgICAgICAgICBp
c1ZhbGlkID0gbV9pc1ZhbGlkOworICAgICAgICAgICAgaWYgKCFpc1ZhbGlkKQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgd29ya0l0ZW1RdWV1ZVtpXS0+ZnVuY3Rpb24oKSgp
OworICAgICAgICB9CisgICAgICAgIG1fd29ya0l0ZW1RdWV1ZUxvY2subG9jaygpOworICAgIH0K
KworICAgIC8vIE9uZSBpbnZhcmlhbnQgd2UgbWFpbnRhaW4gaXMgdGhhdCBhbnkgd29yayBzY2hl
ZHVsZWQgd2hpbGUgYSB3b3JrIHRocmVhZCBpcyByZWdpc3RlcmVkIHdpbGwKKyAgICAvLyBiZSBo
YW5kbGVkIGJ5IHRoYXQgd29yayB0aHJlYWQuIFVucmVnaXN0ZXIgYXMgdGhlIHdvcmsgdGhyZWFk
IHdoaWxlIHRoZSBxdWV1ZSBsb2NrIGlzIHN0aWxsCisgICAgLy8gaGVsZCBzbyB0aGF0IG5vIHdv
cmsgY2FuIGJlIHNjaGVkdWxlZCB3aGlsZSB3ZSdyZSBzdGlsbCByZWdpc3RlcmVkLgorICAgIHVu
cmVnaXN0ZXJBc1dvcmtUaHJlYWQoKTsKKworICAgIG1fd29ya0l0ZW1RdWV1ZUxvY2sudW5sb2Nr
KCk7Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjpwbGF0Zm9ybUluaXRpYWxpemUoY29uc3QgY2hhciog
bmFtZSkKK3sKKyAgICBtX2lzV29ya1RocmVhZFJlZ2lzdGVyZWQgPSAwOworICAgIG1fdGltZXJR
dWV1ZSA9IDo6Q3JlYXRlVGltZXJRdWV1ZSgpOworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV90
aW1lclF1ZXVlLCAiOjpDcmVhdGVUaW1lclF1ZXVlIGZhaWxlZCB3aXRoIGVycm9yICVsdSIsIDo6
R2V0TGFzdEVycm9yKCkpOworfQorCitib29sIFdvcmtRdWV1ZTo6dHJ5UmVnaXN0ZXJBc1dvcmtU
aHJlYWQoKQoreworICAgIExPTkcgcmVzdWx0ID0gOjpJbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5n
ZSgmbV9pc1dvcmtUaHJlYWRSZWdpc3RlcmVkLCAxLCAwKTsKKyAgICBBU1NFUlQoIXJlc3VsdCB8
fCByZXN1bHQgPT0gMSk7CisgICAgcmV0dXJuICFyZXN1bHQ7Cit9CisKK3ZvaWQgV29ya1F1ZXVl
Ojp1bnJlZ2lzdGVyQXNXb3JrVGhyZWFkKCkKK3sKKyAgICBMT05HIHJlc3VsdCA9IDo6SW50ZXJs
b2NrZWRDb21wYXJlRXhjaGFuZ2UoJm1faXNXb3JrVGhyZWFkUmVnaXN0ZXJlZCwgMCwgMSk7Cisg
ICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdCA9PSAxKTsKK30KKwordm9pZCBXb3JrUXVl
dWU6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCit7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIE11
dGV4TG9ja2VyIGxvY2sobV9oYW5kbGVzTG9jayk7CisgICAgQVNTRVJUKG1faGFuZGxlcy5pc0Vt
cHR5KCkpOworI2VuZGlmCisKKyAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBlbnN1cmUgdGhhdCBh
bnkgdGltZXItcXVldWUgdGltZXJzIHRoYXQgZmlyZSBhZnRlciB0aGlzIHBvaW50IGRvbid0IHRy
eSB0bworICAgIC8vIGFjY2VzcyB0aGlzIFdvcmtRdWV1ZSA8aHR0cDovL3dlYmtpdC5vcmcvYi80
NDY5MD4uCisgICAgOjpEZWxldGVUaW1lclF1ZXVlRXgobV90aW1lclF1ZXVlLCAwKTsKK30KKwor
dm9pZCBXb3JrUXVldWU6OmRpc3BhdGNoKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9u
KQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3dvcmtJdGVtUXVldWVMb2NrKTsKKworICAg
IG1fd29ya0l0ZW1RdWV1ZS5hcHBlbmQoV29ya0l0ZW1XaW46OmNyZWF0ZShmdW5jdGlvbiwgdGhp
cykpOworCisgICAgLy8gU3Bhd24gYSB3b3JrIHRocmVhZCB0byBwZXJmb3JtIHRoZSB3b3JrIHdl
IGp1c3QgYWRkZWQuIEFzIGFuIG9wdGltaXphdGlvbiwgd2UgYXZvaWQKKyAgICAvLyBzcGF3bmlu
ZyB0aGUgdGhyZWFkIGlmIGEgd29yayB0aHJlYWQgaXMgYWxyZWFkeSByZWdpc3RlcmVkLiBUaGlz
IHByZXZlbnRzIG11bHRpcGxlIHdvcmsKKyAgICAvLyB0aHJlYWRzIGZyb20gYmVpbmcgc3Bhd25l
ZCBpbiBtb3N0IGNhc2VzLiAoTm90ZSB0aGF0IHdoZW4gYSB3b3JrIHRocmVhZCBoYXMgYmVlbiBz
cGF3bmVkIGJ1dAorICAgIC8vIGhhc24ndCByZWdpc3RlcmVkIGl0c2VsZiB5ZXQsIG1faXNXb3Jr
VGhyZWFkUmVnaXN0ZXJlZCB3aWxsIGJlIGZhbHNlIGFuZCB3ZSdsbCBlbmQgdXAKKyAgICAvLyBz
cGF3bmluZyBhIHNlY29uZCB3b3JrIHRocmVhZCBoZXJlLiBCdXQgd29yayB0aHJlYWQgcmVnaXN0
cmF0aW9uIHByb2Nlc3Mgd2lsbCBlbnN1cmUgdGhhdAorICAgIC8vIG9ubHkgb25lIHRocmVhZCBh
Y3R1YWxseSBlbmRzIHVwIHBlcmZvcm1pbmcgd29yay4pCisgICAgaWYgKCFtX2lzV29ya1RocmVh
ZFJlZ2lzdGVyZWQpCisgICAgICAgIDo6UXVldWVVc2VyV29ya0l0ZW0od29ya1RocmVhZENhbGxi
YWNrLCB0aGlzLCBXVF9FWEVDVVRFREVGQVVMVCk7Cit9CisKK3N0cnVjdCBUaW1lckNvbnRleHQg
OiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8VGltZXJDb250ZXh0PiB7CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8VGltZXJDb250ZXh0PiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcg
VGltZXJDb250ZXh0KTsgfQorCisgICAgV29ya1F1ZXVlKiBxdWV1ZTsKKyAgICBGdW5jdGlvbjx2
b2lkKCk+IGZ1bmN0aW9uOworICAgIE11dGV4IHRpbWVyTXV0ZXg7CisgICAgSEFORExFIHRpbWVy
OworCitwcml2YXRlOgorICAgIFRpbWVyQ29udGV4dCgpIDogcXVldWUoMCksIHRpbWVyKDApIHsg
fQorfTsKKwordm9pZCBXb3JrUXVldWU6OnRpbWVyQ2FsbGJhY2sodm9pZCogY29udGV4dCwgQk9P
TEVBTiB0aW1lck9yV2FpdEZpcmVkKQoreworICAgIEFTU0VSVF9BUkcoY29udGV4dCwgY29udGV4
dCk7CisgICAgQVNTRVJUX1VOVVNFRCh0aW1lck9yV2FpdEZpcmVkLCB0aW1lck9yV2FpdEZpcmVk
KTsKKworICAgIC8vIEJhbGFuY2VkIGJ5IGxlYWtSZWYgaW4gc2NoZWR1bGVXb3JrQWZ0ZXJEZWxh
eS4KKyAgICBSZWZQdHI8VGltZXJDb250ZXh0PiB0aW1lckNvbnRleHQgPSBhZG9wdFJlZihzdGF0
aWNfY2FzdDxUaW1lckNvbnRleHQqPihjb250ZXh0KSk7CisKKyAgICB0aW1lckNvbnRleHQtPnF1
ZXVlLT5kaXNwYXRjaCh0aW1lckNvbnRleHQtPmZ1bmN0aW9uKTsKKworICAgIE11dGV4TG9ja2Vy
IGxvY2sodGltZXJDb250ZXh0LT50aW1lck11dGV4KTsKKyAgICBBU1NFUlQodGltZXJDb250ZXh0
LT50aW1lcik7CisgICAgQVNTRVJUKHRpbWVyQ29udGV4dC0+cXVldWUtPm1fdGltZXJRdWV1ZSk7
CisgICAgaWYgKCE6OkRlbGV0ZVRpbWVyUXVldWVUaW1lcih0aW1lckNvbnRleHQtPnF1ZXVlLT5t
X3RpbWVyUXVldWUsIHRpbWVyQ29udGV4dC0+dGltZXIsIDApKQorICAgICAgICBBU1NFUlRfV0lU
SF9NRVNTQUdFKGZhbHNlLCAiOjpEZWxldGVUaW1lclF1ZXVlVGltZXIgZmFpbGVkIHdpdGggZXJy
b3IgJWx1IiwgOjpHZXRMYXN0RXJyb3IoKSk7Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjpkaXNwYXRj
aEFmdGVyRGVsYXkoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24sIGRvdWJsZSBkZWxh
eSkKK3sKKyAgICBBU1NFUlQobV90aW1lclF1ZXVlKTsKKworICAgIFJlZlB0cjxUaW1lckNvbnRl
eHQ+IGNvbnRleHQgPSBUaW1lckNvbnRleHQ6OmNyZWF0ZSgpOworICAgIGNvbnRleHQtPnF1ZXVl
ID0gdGhpczsKKyAgICBjb250ZXh0LT5mdW5jdGlvbiA9IGZ1bmN0aW9uOworCisgICAgeworICAg
ICAgICAvLyBUaGUgdGltZXIgY2FsbGJhY2sgY291bGQgZmlyZSBiZWZvcmUgOjpDcmVhdGVUaW1l
clF1ZXVlVGltZXIgZXZlbiByZXR1cm5zLCBzbyB3ZSBwcm90ZWN0CisgICAgICAgIC8vIGNvbnRl
eHQtPnRpbWVyIHdpdGggYSBtdXRleCB0byBlbnN1cmUgdGhlIHRpbWVyIGNhbGxiYWNrIGRvZXNu
J3QgYWNjZXNzIGl0IGJlZm9yZSB0aGUKKyAgICAgICAgLy8gdGltZXIgaGFuZGxlIGhhcyBiZWVu
IHN0b3JlZCBpbiBpdC4KKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9jayhjb250ZXh0LT50aW1lck11
dGV4KTsKKworICAgICAgICAvLyBTaW5jZSBvdXIgdGltZXIgY2FsbGJhY2sgaXMgcXVpY2ssIHdl
IGNhbiBleGVjdXRlIGluIHRoZSB0aW1lciB0aHJlYWQgaXRzZWxmIGFuZCBhdm9pZAorICAgICAg
ICAvLyBhbiBleHRyYSB0aHJlYWQgc3dpdGNoIG92ZXIgdG8gYSB3b3JrZXIgdGhyZWFkLgorICAg
ICAgICBpZiAoITo6Q3JlYXRlVGltZXJRdWV1ZVRpbWVyKCZjb250ZXh0LT50aW1lciwgbV90aW1l
clF1ZXVlLCB0aW1lckNhbGxiYWNrLCBjb250ZXh0LmdldCgpLCBkZWxheSAqIDEwMDAsIDAsIFdU
X0VYRUNVVEVJTlRJTUVSVEhSRUFEKSkgeworICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FH
RShmYWxzZSwgIjo6Q3JlYXRlVGltZXJRdWV1ZVRpbWVyIGZhaWxlZCB3aXRoIGVycm9yICVsdSIs
IDo6R2V0TGFzdEVycm9yKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
fQorCisgICAgLy8gVGhlIHRpbWVyIGNhbGxiYWNrIHdpbGwgaGFuZGxlIGRlc3Ryb3lpbmcgY29u
dGV4dC4KKyAgICBjb250ZXh0LnJlbGVhc2UoKS5sZWFrUmVmKCk7Cit9CisKK3ZvaWQgV29ya1F1
ZXVlOjp1bnJlZ2lzdGVyV2FpdEFuZERlc3Ryb3lJdGVtU29vbihQYXNzUmVmUHRyPEhhbmRsZVdv
cmtJdGVtPiBpdGVtKQoreworICAgIC8vIFdlJ3JlIGdvaW5nIHRvIG1ha2UgYSBibG9ja2luZyBj
YWxsIHRvIDo6VW5yZWdpc3RlcldhaXRFeCBiZWZvcmUgY2xvc2luZyB0aGUgaGFuZGxlLiAoVGhl
CisgICAgLy8gYmxvY2tpbmcgdmVyc2lvbiBvZiA6OlVucmVnaXN0ZXJXYWl0RXggaXMgbXVjaCBz
aW1wbGVyIHRoYW4gdGhlIG5vbi1ibG9ja2luZyB2ZXJzaW9uLikgSWYgd2UKKyAgICAvLyBkbyB0
aGlzIG9uIHRoZSBjdXJyZW50IHRocmVhZCwgd2UnbGwgZGVhZGxvY2sgaWYgd2UncmUgY3VycmVu
dGx5IGluIGEgY2FsbGJhY2sgZnVuY3Rpb24gZm9yCisgICAgLy8gdGhlIHdhaXQgd2UncmUgdW5y
ZWdpc3RlcmluZy4gU28gaW5zdGVhZCB3ZSBkbyBpdCBhc3luY2hyb25vdXNseSBvbiBzb21lIG90
aGVyIHdvcmtlciB0aHJlYWQuCisKKyAgICA6OlF1ZXVlVXNlcldvcmtJdGVtKHVucmVnaXN0ZXJX
YWl0QW5kRGVzdHJveUl0ZW1DYWxsYmFjaywgaXRlbS5sZWFrUmVmKCksIFdUX0VYRUNVVEVERUZB
VUxUKTsKK30KKworRFdPUkQgV0lOQVBJIFdvcmtRdWV1ZTo6dW5yZWdpc3RlcldhaXRBbmREZXN0
cm95SXRlbUNhbGxiYWNrKHZvaWQqIGNvbnRleHQpCit7CisgICAgQVNTRVJUX0FSRyhjb250ZXh0
LCBjb250ZXh0KTsKKyAgICBSZWZQdHI8SGFuZGxlV29ya0l0ZW0+IGl0ZW0gPSBhZG9wdFJlZihz
dGF0aWNfY2FzdDxIYW5kbGVXb3JrSXRlbSo+KGNvbnRleHQpKTsKKworICAgIC8vIE5vdyB0aGF0
IHdlIGtub3cgd2UncmUgbm90IGluIGEgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHRoZSB3YWl0IHdl
J3JlIHVucmVnaXN0ZXJpbmcsIHdlIGNhbgorICAgIC8vIG1ha2UgYSBibG9ja2luZyBjYWxsIHRv
IDo6VW5yZWdpc3RlcldhaXRFeC4KKyAgICBpZiAoITo6VW5yZWdpc3RlcldhaXRFeChpdGVtLT53
YWl0SGFuZGxlKCksIElOVkFMSURfSEFORExFX1ZBTFVFKSkgeworICAgICAgICBEV09SRCBlcnJv
ciA9IDo6R2V0TGFzdEVycm9yKCk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IH0KKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ01ha2VM
aXN0cy50eHQgYi9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dAppbmRleCAxZDQ3MDg4OWEz
YTAwZTAyNDIzZDc2M2FmY2YzYTU2Yjc1NzJkNjNhLi4xMzMwNTI0NWU5NGMwZGI1N2MxOTRkNGJk
MDVkNjNlMTI1ODY0NjUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4
dAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dApAQCAtMTAyLDcgKzEwMiw2IEBA
IFNFVChXZWJLaXQyX0lOQ0xVREVfRElSRUNUT1JJRVMKIFNFVChXZWJLaXQyX1NPVVJDRVMKICAg
ICBQbGF0Zm9ybS9Mb2dnaW5nLmNwcAogICAgIFBsYXRmb3JtL01vZHVsZS5jcHAKLSAgICBQbGF0
Zm9ybS9Xb3JrUXVldWUuY3BwCiAKICAgICBQbGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50Q29kZXJz
LmNwcAogICAgIFBsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnREZWNvZGVyLmNwcApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJLaXQyL0dO
VW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggNmMwNmQ1YWY5MzY0MmQ0NTg5MzU3YmEyMTM2MjZhNjA0
OTVjYjY3Ni4uM2RkMmY2Njg3YjBlNTRmNDZkYmFiNjY0ZTQyNWVlOTMzNmFhZjczNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC0yNTMsNyArMjUzLDYgQEAgd2Via2l0Ml9zb3Vy
Y2VzICs9IFwKIAlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3VuaXgvQ29ubmVjdGlv
blVuaXguY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9ndGsvTG9nZ2luZ0d0ay5jcHAg
XAogCVNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2d0ay9Nb2R1bGVHdGsuY3BwIFwKLQlTb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybS9ndGsvV29ya1F1ZXVlR3RrLmNwcCBcCiAJU291cmNlL1dlYktpdDIv
UGxhdGZvcm0vTG9nZ2luZy5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0xvZ2dpbmcu
aCBcCiAJU291cmNlL1dlYktpdDIvUGxhdGZvcm0vTW9kdWxlLmNwcCBcCkBAIC0yNjEsOCArMjYw
LDYgQEAgd2Via2l0Ml9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9QbGF0
Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmggXAogCVNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1NoYXJl
ZE1lbW9yeS5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS91bml4L1NoYXJlZE1lbW9yeVVu
aXguY3BwIFwKLQlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrUXVldWUuY3BwIFwKLQlTb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrUXVldWUuaCBcCiAJU291cmNlL1dlYktpdDIvUGx1Z2lu
UHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHkuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9QbHVn
aW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94eS5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9QbHVn
aW5Qcm9jZXNzL1BsdWdpbkNyZWF0aW9uUGFyYW1ldGVycy5jcHAgXApAQCAtMTE2OSwxMSArMTE2
Niw4IEBAIHdlYmtpdDJfcGx1Z2luX3Byb2Nlc3Nfc291cmNlcyArPSBcCiAJU291cmNlL1dlYktp
dDIvUGxhdGZvcm0vQ29yZUlQQy91bml4L0Nvbm5lY3Rpb25Vbml4LmNwcCBcCiAJU291cmNlL1dl
YktpdDIvUGxhdGZvcm0vTW9kdWxlLmNwcCBcCiAJU291cmNlL1dlYktpdDIvUGxhdGZvcm0vTW9k
dWxlLmggXAotCVNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1dvcmtRdWV1ZS5jcHAgXAotCVNvdXJj
ZS9XZWJLaXQyL1BsYXRmb3JtL1dvcmtRdWV1ZS5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9y
bS9TaGFyZWRNZW1vcnkuaCBcCiAJU291cmNlL1dlYktpdDIvUGxhdGZvcm0vZ3RrL01vZHVsZUd0
ay5jcHAgXAotCVNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2d0ay9Xb3JrUXVldWVHdGsuY3BwIFwK
IAlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS91bml4L1NoYXJlZE1lbW9yeVVuaXguY3BwIFwKIAlT
b3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94eS5jcHAgXAog
CVNvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclByb3h5LmggXApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Db25uZWN0aW9uLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uaAppbmRleCA3NzNm
NmUwZDEzZmI2Y2VhYzNjYmFhNTBlMzBhZjExN2MyZTAyMGVkLi5hMDJmOTJlMTYwMTBiYzViNjFk
Y2M3ODFmZTYzODE4ZjRiYTk2OTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9y
bS9Db3JlSVBDL0Nvbm5lY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3Jl
SVBDL0Nvbm5lY3Rpb24uaApAQCAtMzIsMTEgKzMyLDExIEBACiAjaW5jbHVkZSAiQXJndW1lbnRF
bmNvZGVyLmgiCiAjaW5jbHVkZSAiQXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiTWVzc2FnZUlELmgi
Ci0jaW5jbHVkZSAiV29ya1F1ZXVlLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNs
dWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRl
IDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL1dvcmtRdWV1ZS5oPgogCiAjaWYgT1Mo
REFSV0lOKQogI2luY2x1ZGUgPG1hY2gvbWFjaF9wb3J0Lmg+CkBAIC00Nyw3ICs0Nyw3IEBAIGNs
YXNzIFFTb2NrZXROb3RpZmllcjsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oUVQpIHx8IFBMQVRG
T1JNKEdUSykgfHwgUExBVEZPUk0oRUZMKQotI2luY2x1ZGUgIlBsYXRmb3JtUHJvY2Vzc0lkZW50
aWZpZXIuaCIKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oPgogI2Vu
ZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTEyNyw3ICsxMjcsNyBAQCBwdWJsaWM6CiAj
aWYgT1MoREFSV0lOKQogICAgIHZvaWQgc2V0U2hvdWxkQ2xvc2VDb25uZWN0aW9uT25NYWNoRXhj
ZXB0aW9ucygpOwogI2VsaWYgUExBVEZPUk0oUVQpCi0gICAgdm9pZCBzZXRTaG91bGRDbG9zZUNv
bm5lY3Rpb25PblByb2Nlc3NUZXJtaW5hdGlvbihXZWJLaXQ6OlBsYXRmb3JtUHJvY2Vzc0lkZW50
aWZpZXIpOworICAgIHZvaWQgc2V0U2hvdWxkQ2xvc2VDb25uZWN0aW9uT25Qcm9jZXNzVGVybWlu
YXRpb24oUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllcik7CiAjZW5kaWYKIAogICAgIHZvaWQgc2V0
T25seVNlbmRNZXNzYWdlc0FzRGlzcGF0Y2hXaGVuV2FpdGluZ0ZvclN5bmNSZXBseVdoZW5Qcm9j
ZXNzaW5nU3VjaEFNZXNzYWdlKGJvb2wpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxh
dGZvcm0vQ29yZUlQQy91bml4L0Nvbm5lY3Rpb25Vbml4LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1Bs
YXRmb3JtL0NvcmVJUEMvdW5peC9Db25uZWN0aW9uVW5peC5jcHAKaW5kZXggODg1ZTQ5NWNiNzY4
OGM0ZTM5MTcyYTcyYmFlOTJkZTg5NDA1Yzk4Ny4uNDlhNTA4OTMzZGJjNWZhOTM0M2M4OGZiZGU5
OGM4NDQwMzBkNTAxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQ
Qy91bml4L0Nvbm5lY3Rpb25Vbml4LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9D
b3JlSVBDL3VuaXgvQ29ubmVjdGlvblVuaXguY3BwCkBAIC01NTcsNyArNTU3LDcgQEAgYm9vbCBD
b25uZWN0aW9uOjpzZW5kT3V0Z29pbmdNZXNzYWdlKE1lc3NhZ2VJRCBtZXNzYWdlSUQsIFBhc3NP
d25QdHI8QXJndW1lbnRFbmMKIH0KIAogI2lmIFBMQVRGT1JNKFFUKQotdm9pZCBDb25uZWN0aW9u
OjpzZXRTaG91bGRDbG9zZUNvbm5lY3Rpb25PblByb2Nlc3NUZXJtaW5hdGlvbihXZWJLaXQ6OlBs
YXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIgcHJvY2VzcykKK3ZvaWQgQ29ubmVjdGlvbjo6c2V0U2hv
dWxkQ2xvc2VDb25uZWN0aW9uT25Qcm9jZXNzVGVybWluYXRpb24oUGxhdGZvcm1Qcm9jZXNzSWRl
bnRpZmllciBwcm9jZXNzKQogewogICAgIG1fY29ubmVjdGlvblF1ZXVlLmRpc3BhdGNoT25UZXJt
aW5hdGlvbihwcm9jZXNzLCBXVEY6OmJpbmQoJkNvbm5lY3Rpb246OmNvbm5lY3Rpb25EaWRDbG9z
ZSwgdGhpcykpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vUGxhdGZv
cm1Qcm9jZXNzSWRlbnRpZmllci5oIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vUGxhdGZvcm1Q
cm9jZXNzSWRlbnRpZmllci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NmVjYmU4
NzI3M2FmY2RjZmIwNzlkYTQwYzJlNjUzMmM4Y2Y4NjUzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1BsYXRmb3Jt
UHJvY2Vzc0lkZW50aWZpZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0KLSNpZm5kZWYgUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllcl9oCi0jZGVmaW5lIFBs
YXRmb3JtUHJvY2Vzc0lkZW50aWZpZXJfaAotCi0jaWYgUExBVEZPUk0oUVQpCi1jbGFzcyBRUHJv
Y2VzczsKLSNlbGlmIFBMQVRGT1JNKEVGTCkKLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNlbmRpZgot
Ci1uYW1lc3BhY2UgV2ViS2l0IHsKLQotI2lmIFBMQVRGT1JNKE1BQykKLXR5cGVkZWYgcGlkX3Qg
UGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllcjsKLSNlbGlmIFBMQVRGT1JNKFdJTikKLXR5cGVkZWYg
SEFORExFIFBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXI7Ci0jZWxpZiBQTEFURk9STShRVCkKLXR5
cGVkZWYgUVByb2Nlc3MqIFBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXI7Ci0jZWxpZiBQTEFURk9S
TShHVEspCi0jaWZkZWYgR19PU19XSU4zMgotdHlwZWRlZiB2b2lkKiBHUGlkOwotI2Vsc2UKLXR5
cGVkZWYgaW50IEdQaWQ7Ci0jZW5kaWYKLXR5cGVkZWYgR1BpZCBQbGF0Zm9ybVByb2Nlc3NJZGVu
dGlmaWVyOwotI2VsaWYgUExBVEZPUk0oRUZMKQotdHlwZWRlZiBwaWRfdCBQbGF0Zm9ybVByb2Nl
c3NJZGVudGlmaWVyOwotI2VuZGlmCi0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdCAKLQotI2VuZGlm
IC8vIFBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvUGxhdGZvcm0vV29ya1F1ZXVlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1dvcmtR
dWV1ZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiY2RkMjI2NDQyMzA4Mjgw
NTYwYjg5NDI1YWIxNjA3N2ZjZWI1ZGEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vV29ya1F1ZXVlLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiV29ya1F1ZXVlLmgiCi0KLVdvcmtRdWV1ZTo6V29ya1F1ZXVlKGNvbnN0
IGNoYXIqIG5hbWUpCi0gICAgOiBtX2lzVmFsaWQodHJ1ZSkKLXsKLSAgICBwbGF0Zm9ybUluaXRp
YWxpemUobmFtZSk7Ci19Ci0KLVdvcmtRdWV1ZTo6fldvcmtRdWV1ZSgpCi17Ci0jaWYgIUFTU0VS
VF9ESVNBQkxFRAotICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2lzVmFsaWRNdXRleCk7Ci0gICAg
QVNTRVJUKCFtX2lzVmFsaWQpOwotI2VuZGlmCi19Ci0KLXZvaWQgV29ya1F1ZXVlOjppbnZhbGlk
YXRlKCkKLXsKLSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2lzVmFsaWRNdXRl
eCk7Ci0gICAgICAgIG1faXNWYWxpZCA9IGZhbHNlOwotICAgIH0KLQotICAgIHBsYXRmb3JtSW52
YWxpZGF0ZSgpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vV29ya1F1
ZXVlLmggYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrUXVldWUuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggZDYzMGRjMDI4NTVlNWRhMDk0YjEzZjFmMTUxMzI5YzJkYjQxNDMw
Yy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrUXVldWUuaAorKysgL2Rldi9udWxsCkBAIC0xLDIxMCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBXb3JrUXVldWVf
aAotI2RlZmluZSBXb3JrUXVldWVfaAotCi0jaWYgT1MoREFSV0lOKQotI2lmIEhBVkUoRElTUEFU
Q0hfSCkKLSNpbmNsdWRlIDxkaXNwYXRjaC9kaXNwYXRjaC5oPgotI2VuZGlmCi0jZW5kaWYKLQot
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL0Z1bmN0aW9uYWwuaD4KLSNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0jaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+Ci0jaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgotCi0jaWYgKFBMQVRGT1JNKFFUKSAmJiAhT1MoREFSV0lOKSkg
fHwgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShFRkwpCi0jaW5jbHVkZSAiUGxhdGZvcm1Qcm9j
ZXNzSWRlbnRpZmllci5oIgotI2VuZGlmCi0KLSNpZiBQTEFURk9STShRVCkgJiYgIU9TKERBUldJ
TikKLSNpbmNsdWRlIDxRU29ja2V0Tm90aWZpZXI+Ci1jbGFzcyBRT2JqZWN0OwotY2xhc3MgUVRo
cmVhZDsKLSNlbGlmIFBMQVRGT1JNKEdUSykKLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRy
Lmg+Ci10eXBlZGVmIGdib29sZWFuICgqR1NvdXJjZUZ1bmMpIChncG9pbnRlciBkYXRhKTsKLSNl
bGlmIFBMQVRGT1JNKEVGTCkKLSNpbmNsdWRlIDxFY29yZS5oPgotI2VuZGlmCi0KLWNsYXNzIFdv
cmtRdWV1ZSB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoV29ya1F1ZXVlKTsKLQotcHVibGlj
OgotICAgIGV4cGxpY2l0IFdvcmtRdWV1ZShjb25zdCBjaGFyKiBuYW1lKTsKLSAgICB+V29ya1F1
ZXVlKCk7Ci0KLSAgICAvLyBXaWxsIGRpc3BhdGNoIHRoZSBnaXZlbiBmdW5jdGlvbiB0byBydW4g
YXMgc29vbiBhcyBwb3NzaWJsZS4KLSAgICB2b2lkIGRpc3BhdGNoKGNvbnN0IEZ1bmN0aW9uPHZv
aWQoKT4mKTsKLQotICAgIC8vIFdpbGwgZGlzcGF0Y2ggdGhlIGdpdmVuIGZ1bmN0aW9uIGFmdGVy
IHRoZSBnaXZlbiBkZWxheSAoaW4gc2Vjb25kcykuCi0gICAgdm9pZCBkaXNwYXRjaEFmdGVyRGVs
YXkoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYsIGRvdWJsZSBkZWxheSk7Ci0KLSAgICB2b2lkIGlu
dmFsaWRhdGUoKTsKLQotI2lmIE9TKERBUldJTikKLSAgICBlbnVtIE1hY2hQb3J0RXZlbnRUeXBl
IHsKLSAgICAgICAgLy8gRmlyZWQgd2hlbiB0aGVyZSBpcyBkYXRhIG9uIHRoZSBnaXZlbiByZWNl
aXZlIHJpZ2h0LgotICAgICAgICBNYWNoUG9ydERhdGFBdmFpbGFibGUsCi0gICAgICAgIAotICAg
ICAgICAvLyBGaXJlZCB3aGVuIHRoZSByZWNlaXZlIHJpZ2h0IGZvciB0aGlzIHNlbmQgcmlnaHQg
aGFzIGJlZW4gZGVzdHJveWVkLgotICAgICAgICBNYWNoUG9ydERlYWROYW1lTm90aWZpY2F0aW9u
Ci0gICAgfTsKLSAgICAKLSAgICAvLyBXaWxsIGV4ZWN1dGUgdGhlIGdpdmVuIGZ1bmN0aW9uIHdo
ZW5ldmVyIHRoZSBnaXZlbiBtYWNoIHBvcnQgZXZlbnQgZmlyZXMuCi0gICAgLy8gTm90ZSB0aGF0
IHRoaXMgd2lsbCBhZG9wdCB0aGUgbWFjaCBwb3J0IGFuZCBkZXN0cm95IGl0IHdoZW4gdGhlIHdv
cmsgcXVldWUgaXMgaW52YWxpZGF0ZWQuCi0gICAgdm9pZCByZWdpc3Rlck1hY2hQb3J0RXZlbnRI
YW5kbGVyKG1hY2hfcG9ydF90LCBNYWNoUG9ydEV2ZW50VHlwZSwgY29uc3QgRnVuY3Rpb248dm9p
ZCgpPiYpOwotICAgIHZvaWQgdW5yZWdpc3Rlck1hY2hQb3J0RXZlbnRIYW5kbGVyKG1hY2hfcG9y
dF90KTsKLSNlbGlmIFBMQVRGT1JNKFdJTikKLSAgICB2b2lkIHJlZ2lzdGVySGFuZGxlKEhBTkRM
RSwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOwotICAgIHZvaWQgdW5yZWdpc3RlckFuZENsb3Nl
SGFuZGxlKEhBTkRMRSk7Ci0jZWxpZiBQTEFURk9STShRVCkKLSAgICBRU29ja2V0Tm90aWZpZXIq
IHJlZ2lzdGVyU29ja2V0RXZlbnRIYW5kbGVyKGludCwgUVNvY2tldE5vdGlmaWVyOjpUeXBlLCBj
b25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7Ci0gICAgdm9pZCBkaXNwYXRjaE9uVGVybWluYXRpb24o
V2ViS2l0OjpQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+
Jik7Ci0jZWxpZiBQTEFURk9STShHVEspCi0gICAgdm9pZCByZWdpc3RlckV2ZW50U291cmNlSGFu
ZGxlcihpbnQsIGludCwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOwotICAgIHZvaWQgdW5yZWdp
c3RlckV2ZW50U291cmNlSGFuZGxlcihpbnQpOwotICAgIHZvaWQgZGlzcGF0Y2hPblRlcm1pbmF0
aW9uKFdlYktpdDo6UGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllciwgY29uc3QgRnVuY3Rpb248dm9p
ZCgpPiYpOwotI2VsaWYgUExBVEZPUk0oRUZMKQotICAgIHZvaWQgcmVnaXN0ZXJTb2NrZXRFdmVu
dEhhbmRsZXIoaW50LCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7Ci0gICAgdm9pZCB1bnJlZ2lz
dGVyU29ja2V0RXZlbnRIYW5kbGVyKGludCk7Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICAvLyBG
SVhNRTogVXNlIGFuIGF0b21pYyBib29sZWFuIGhlcmUgaW5zdGVhZC4KLSAgICBNdXRleCBtX2lz
VmFsaWRNdXRleDsKLSAgICBib29sIG1faXNWYWxpZDsKLQotICAgIHZvaWQgcGxhdGZvcm1Jbml0
aWFsaXplKGNvbnN0IGNoYXIqIG5hbWUpOwotICAgIHZvaWQgcGxhdGZvcm1JbnZhbGlkYXRlKCk7
Ci0KLSNpZiBPUyhEQVJXSU4pCi0jaWYgSEFWRShESVNQQVRDSF9IKQotICAgIHN0YXRpYyB2b2lk
IGV4ZWN1dGVGdW5jdGlvbih2b2lkKik7Ci0gICAgTXV0ZXggbV9ldmVudFNvdXJjZXNNdXRleDsK
LSAgICBjbGFzcyBFdmVudFNvdXJjZTsKLSAgICBIYXNoTWFwPG1hY2hfcG9ydF90LCBFdmVudFNv
dXJjZSo+IG1fZXZlbnRTb3VyY2VzOwotICAgIGRpc3BhdGNoX3F1ZXVlX3QgbV9kaXNwYXRjaFF1
ZXVlOwotI2VuZGlmCi0jZWxpZiBQTEFURk9STShXSU4pCi0gICAgY2xhc3MgV29ya0l0ZW1XaW4g
OiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8V29ya0l0ZW1XaW4+IHsKLSAgICBwdWJsaWM6
Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdvcmtJdGVtV2luPiBjcmVhdGUoY29uc3QgRnVu
Y3Rpb248dm9pZCgpPiYsIFdvcmtRdWV1ZSopOwotICAgICAgICB2aXJ0dWFsIH5Xb3JrSXRlbVdp
bigpOwotCi0gICAgICAgIEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKCkgeyByZXR1cm4gbV9m
dW5jdGlvbjsgfQotICAgICAgICBXb3JrUXVldWUqIHF1ZXVlKCkgY29uc3QgeyByZXR1cm4gbV9x
dWV1ZTsgfQotCi0gICAgcHJvdGVjdGVkOgotICAgICAgICBXb3JrSXRlbVdpbihjb25zdCBGdW5j
dGlvbjx2b2lkKCk+JiwgV29ya1F1ZXVlKik7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBGdW5j
dGlvbjx2b2lkKCk+IG1fZnVuY3Rpb247Ci0gICAgICAgIFdvcmtRdWV1ZSogbV9xdWV1ZTsKLSAg
ICB9OwotCi0gICAgY2xhc3MgSGFuZGxlV29ya0l0ZW0gOiBwdWJsaWMgV29ya0l0ZW1XaW4gewot
ICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SGFuZGxlV29ya0l0ZW0+IGNy
ZWF0ZUJ5QWRvcHRpbmdIYW5kbGUoSEFORExFLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiwgV29y
a1F1ZXVlKik7Ci0gICAgICAgIHZpcnR1YWwgfkhhbmRsZVdvcmtJdGVtKCk7Ci0KLSAgICAgICAg
dm9pZCBzZXRXYWl0SGFuZGxlKEhBTkRMRSB3YWl0SGFuZGxlKSB7IG1fd2FpdEhhbmRsZSA9IHdh
aXRIYW5kbGU7IH0KLSAgICAgICAgSEFORExFIHdhaXRIYW5kbGUoKSBjb25zdCB7IHJldHVybiBt
X3dhaXRIYW5kbGU7IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIEhhbmRsZVdvcmtJdGVtKEhB
TkRMRSwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYsIFdvcmtRdWV1ZSopOwotCi0gICAgICAgIEhB
TkRMRSBtX2hhbmRsZTsKLSAgICAgICAgSEFORExFIG1fd2FpdEhhbmRsZTsKLSAgICB9OwotCi0g
ICAgc3RhdGljIHZvaWQgQ0FMTEJBQ0sgaGFuZGxlQ2FsbGJhY2sodm9pZCogY29udGV4dCwgQk9P
TEVBTiB0aW1lck9yV2FpdEZpcmVkKTsKLSAgICBzdGF0aWMgdm9pZCBDQUxMQkFDSyB0aW1lckNh
bGxiYWNrKHZvaWQqIGNvbnRleHQsIEJPT0xFQU4gdGltZXJPcldhaXRGaXJlZCk7Ci0gICAgc3Rh
dGljIERXT1JEIFdJTkFQSSB3b3JrVGhyZWFkQ2FsbGJhY2sodm9pZCogY29udGV4dCk7Ci0KLSAg
ICBib29sIHRyeVJlZ2lzdGVyQXNXb3JrVGhyZWFkKCk7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyQXNX
b3JrVGhyZWFkKCk7Ci0gICAgdm9pZCBwZXJmb3JtV29ya09uUmVnaXN0ZXJlZFdvcmtUaHJlYWQo
KTsKLQotICAgIHN0YXRpYyB2b2lkIHVucmVnaXN0ZXJXYWl0QW5kRGVzdHJveUl0ZW1Tb29uKFBh
c3NSZWZQdHI8SGFuZGxlV29ya0l0ZW0+KTsKLSAgICBzdGF0aWMgRFdPUkQgV0lOQVBJIHVucmVn
aXN0ZXJXYWl0QW5kRGVzdHJveUl0ZW1DYWxsYmFjayh2b2lkKiBjb250ZXh0KTsKLQotICAgIHZv
bGF0aWxlIExPTkcgbV9pc1dvcmtUaHJlYWRSZWdpc3RlcmVkOwotCi0gICAgTXV0ZXggbV93b3Jr
SXRlbVF1ZXVlTG9jazsKLSAgICBWZWN0b3I8UmVmUHRyPFdvcmtJdGVtV2luPiA+IG1fd29ya0l0
ZW1RdWV1ZTsKLQotICAgIE11dGV4IG1faGFuZGxlc0xvY2s7Ci0gICAgSGFzaE1hcDxIQU5ETEUs
IFJlZlB0cjxIYW5kbGVXb3JrSXRlbT4gPiBtX2hhbmRsZXM7Ci0KLSAgICBIQU5ETEUgbV90aW1l
clF1ZXVlOwotI2VsaWYgUExBVEZPUk0oUVQpCi0gICAgY2xhc3MgV29ya0l0ZW1RdDsKLSAgICBR
VGhyZWFkKiBtX3dvcmtUaHJlYWQ7Ci0gICAgZnJpZW5kIGNsYXNzIFdvcmtJdGVtUXQ7Ci0jZWxp
ZiBQTEFURk9STShHVEspCi0gICAgc3RhdGljIHZvaWQgc3RhcnRXb3JrUXVldWVUaHJlYWQoV29y
a1F1ZXVlKik7Ci0gICAgdm9pZCB3b3JrUXVldWVUaHJlYWRCb2R5KCk7Ci0gICAgdm9pZCBkaXNw
YXRjaE9uU291cmNlKEdTb3VyY2UqLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiwgR1NvdXJjZUZ1
bmMpOwotCi0gICAgVGhyZWFkSWRlbnRpZmllciBtX3dvcmtRdWV1ZVRocmVhZDsKLSAgICBHUmVm
UHRyPEdNYWluQ29udGV4dD4gbV9ldmVudENvbnRleHQ7Ci0gICAgTXV0ZXggbV9ldmVudExvb3BM
b2NrOwotICAgIEdSZWZQdHI8R01haW5Mb29wPiBtX2V2ZW50TG9vcDsKLSAgICBNdXRleCBtX2V2
ZW50U291cmNlc0xvY2s7Ci0gICAgY2xhc3MgRXZlbnRTb3VyY2U7Ci0gICAgSGFzaE1hcDxpbnQs
IFZlY3RvcjxFdmVudFNvdXJjZSo+ID4gbV9ldmVudFNvdXJjZXM7Ci0gICAgdHlwZWRlZiBIYXNo
TWFwPGludCwgVmVjdG9yPEV2ZW50U291cmNlKj4gPjo6aXRlcmF0b3IgRXZlbnRTb3VyY2VJdGVy
YXRvcjsgCi0jZWxpZiBQTEFURk9STShFRkwpCi0gICAgZmRfc2V0IG1fZmlsZURlc2NyaXB0b3JT
ZXQ7Ci0gICAgaW50IG1fbWF4RmlsZURlc2NyaXB0b3I7Ci0gICAgaW50IG1fcmVhZEZyb21QaXBl
RGVzY3JpcHRvcjsKLSAgICBpbnQgbV93cml0ZVRvUGlwZURlc2NyaXB0b3I7Ci0gICAgYm9vbCBt
X3RocmVhZExvb3A7Ci0KLSAgICBWZWN0b3I8RnVuY3Rpb248dm9pZCgpPiA+IG1fd29ya0l0ZW1R
dWV1ZTsKLSAgICBNdXRleCBtX3dvcmtJdGVtUXVldWVMb2NrOwotCi0gICAgaW50IG1fc29ja2V0
RGVzY3JpcHRvcjsKLSAgICBGdW5jdGlvbjx2b2lkKCk+IG1fc29ja2V0RXZlbnRIYW5kbGVyOwot
Ci0gICAgSGFzaE1hcDxpbnQsIE93blB0cjxFY29yZV9UaW1lcj4gPiBtX3RpbWVyczsKLQotICAg
IHZvaWQgc2VuZE1lc3NhZ2VUb1RocmVhZChjb25zdCBjaGFyKik7Ci0gICAgc3RhdGljIHZvaWQq
IHdvcmtRdWV1ZVRocmVhZChXb3JrUXVldWUqKTsKLSAgICB2b2lkIHBlcmZvcm1Xb3JrKCk7Ci0g
ICAgdm9pZCBwZXJmb3JtRmlsZURlc2NyaXB0b3JXb3JrKCk7Ci0gICAgc3RhdGljIGJvb2wgdGlt
ZXJGaXJlZCh2b2lkKik7Ci0jZW5kaWYKLX07Ci0KLSNlbmRpZiAvLyBXb3JrUXVldWVfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vZWZsL1dvcmtRdWV1ZUVmbC5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9lZmwvV29ya1F1ZXVlRWZsLmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggM2EzOWJhOWVkOWIxMjcwZmU3ZGY5ZTZjZTY4NWRiNDczYTVmNThh
Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybS9lZmwvV29ya1F1ZXVlRWZsLmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDE3MyArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9u
aWNzCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXb3JrUXVldWUuaCIKLQot
I2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLWNsYXNzIFRpbWVyV29ya0l0ZW0gewotcHVi
bGljOgotICAgIFRpbWVyV29ya0l0ZW0oaW50IHRpbWVySUQsIGNvbnN0IEZ1bmN0aW9uPHZvaWQo
KT4mIGZ1bmN0aW9uLCBXb3JrUXVldWUqIHF1ZXVlKQotICAgICAgICA6IG1fZnVuY3Rpb24oZnVu
Y3Rpb24pCi0gICAgICAgICwgbV9xdWV1ZShxdWV1ZSkKLSAgICAgICAgLCBtX3RpbWVySUQodGlt
ZXJJRCkKLSAgICB7Ci0gICAgfQotICAgIH5UaW1lcldvcmtJdGVtKCkgeyB9Ci0KLSAgICBGdW5j
dGlvbjx2b2lkKCk+IGZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9mdW5jdGlvbjsgfQotICAg
IFdvcmtRdWV1ZSogcXVldWUoKSBjb25zdCB7IHJldHVybiBtX3F1ZXVlOyB9Ci0KLSAgICBpbnQg
dGltZXJJRCgpIGNvbnN0IHsgcmV0dXJuIG1fdGltZXJJRDsgfQotCi1wcml2YXRlOgotICAgIEZ1
bmN0aW9uPHZvaWQoKT4gbV9mdW5jdGlvbjsKLSAgICBXb3JrUXVldWUqIG1fcXVldWU7Ci0gICAg
aW50IG1fdGltZXJJRDsKLX07Ci0KLXN0YXRpYyBjb25zdCBpbnQgaW52YWxpZFNvY2tldERlc2Ny
aXB0b3IgPSAtMTsKLXN0YXRpYyBjb25zdCBpbnQgdGhyZWFkTWVzc2FnZVNpemUgPSAxOwotc3Rh
dGljIGNvbnN0IGNoYXIgZmluaXNoVGhyZWFkTWVzc2FnZVtdID0gIkYiOwotc3RhdGljIGNvbnN0
IGNoYXIgd2FrdXBUaHJlYWRNZXNzYWdlW10gPSAiVyI7Ci0KLXZvaWQgV29ya1F1ZXVlOjpwbGF0
Zm9ybUluaXRpYWxpemUoY29uc3QgY2hhciogbmFtZSkKLXsKLSAgICBpbnQgZmRzWzJdOwotICAg
IGlmIChwaXBlKGZkcykpCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotCi0gICAgbV9y
ZWFkRnJvbVBpcGVEZXNjcmlwdG9yID0gZmRzWzBdOwotICAgIG1fd3JpdGVUb1BpcGVEZXNjcmlw
dG9yID0gZmRzWzFdOwotICAgIEZEX1pFUk8oJm1fZmlsZURlc2NyaXB0b3JTZXQpOwotICAgIEZE
X1NFVChtX3JlYWRGcm9tUGlwZURlc2NyaXB0b3IsICZtX2ZpbGVEZXNjcmlwdG9yU2V0KTsKLSAg
ICBtX21heEZpbGVEZXNjcmlwdG9yID0gbV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yOwotCi0gICAg
bV9zb2NrZXREZXNjcmlwdG9yID0gaW52YWxpZFNvY2tldERlc2NyaXB0b3I7Ci0KLSAgICBtX3Ro
cmVhZExvb3AgPSB0cnVlOwotICAgIGNyZWF0ZVRocmVhZChyZWludGVycHJldF9jYXN0PFdURjo6
VGhyZWFkRnVuY3Rpb24+KCZXb3JrUXVldWU6OndvcmtRdWV1ZVRocmVhZCksIHRoaXMsIG5hbWUp
OwotfQotCi12b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKLXsKLSAgICBzZW5k
TWVzc2FnZVRvVGhyZWFkKGZpbmlzaFRocmVhZE1lc3NhZ2UpOwotfQotCi12b2lkIFdvcmtRdWV1
ZTo6cGVyZm9ybVdvcmsoKQotewotICAgIG1fd29ya0l0ZW1RdWV1ZUxvY2subG9jaygpOwotCi0g
ICAgd2hpbGUgKCFtX3dvcmtJdGVtUXVldWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFZlY3RvcjxG
dW5jdGlvbjx2b2lkKCk+ID4gd29ya0l0ZW1RdWV1ZTsKLSAgICAgICAgbV93b3JrSXRlbVF1ZXVl
LnN3YXAod29ya0l0ZW1RdWV1ZSk7Ci0KLSAgICAgICAgbV93b3JrSXRlbVF1ZXVlTG9jay51bmxv
Y2soKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3b3JrSXRlbVF1ZXVlLnNpemUo
KTsgKytpKQotICAgICAgICAgICAgd29ya0l0ZW1RdWV1ZVtpXSgpOwotICAgICAgICBtX3dvcmtJ
dGVtUXVldWVMb2NrLmxvY2soKTsKLSAgICB9Ci0gICAgbV93b3JrSXRlbVF1ZXVlTG9jay51bmxv
Y2soKTsKLX0KLQotdm9pZCBXb3JrUXVldWU6OnBlcmZvcm1GaWxlRGVzY3JpcHRvcldvcmsoKQot
ewotICAgIGZkX3NldCByZWFkRmlsZURlc2NyaXB0b3JTZXQgPSBtX2ZpbGVEZXNjcmlwdG9yU2V0
OwotCi0gICAgaWYgKHNlbGVjdChtX21heEZpbGVEZXNjcmlwdG9yICsgMSwgJnJlYWRGaWxlRGVz
Y3JpcHRvclNldCwgMCwgMCwgMCkgPj0gMCkgewotICAgICAgICBpZiAoRkRfSVNTRVQobV9yZWFk
RnJvbVBpcGVEZXNjcmlwdG9yLCAmcmVhZEZpbGVEZXNjcmlwdG9yU2V0KSkgewotICAgICAgICAg
ICAgY2hhciByZWFkQnVmW3RocmVhZE1lc3NhZ2VTaXplXTsKLSAgICAgICAgICAgIGlmIChyZWFk
KG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvciwgcmVhZEJ1ZiwgdGhyZWFkTWVzc2FnZVNpemUpID09
IC0xKQotICAgICAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHJlYWQgZnJvbSBXb3Jr
UXVldWVUaHJlYWQgcGlwZSIpOwotICAgICAgICAgICAgaWYgKCFzdHJuY21wKHJlYWRCdWYsIGZp
bmlzaFRocmVhZE1lc3NhZ2UsIHRocmVhZE1lc3NhZ2VTaXplKSkKLSAgICAgICAgICAgICAgICBt
X3RocmVhZExvb3AgPSBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtX3NvY2tldERl
c2NyaXB0b3IgIT0gaW52YWxpZFNvY2tldERlc2NyaXB0b3IgJiYgRkRfSVNTRVQobV9zb2NrZXRE
ZXNjcmlwdG9yLCAmcmVhZEZpbGVEZXNjcmlwdG9yU2V0KSkKLSAgICAgICAgICAgIG1fc29ja2V0
RXZlbnRIYW5kbGVyKCk7Ci0gICAgfQotfQotCi12b2lkIFdvcmtRdWV1ZTo6c2VuZE1lc3NhZ2VU
b1RocmVhZChjb25zdCBjaGFyKiBtZXNzYWdlKQotewotICAgIGlmICh3cml0ZShtX3dyaXRlVG9Q
aXBlRGVzY3JpcHRvciwgbWVzc2FnZSwgdGhyZWFkTWVzc2FnZVNpemUpID09IC0xKQotICAgICAg
ICBMT0dfRVJST1IoIkZhaWxlZCB0byB3YWtlIHVwIFdvcmtRdWV1ZSBUaHJlYWQiKTsKLX0KLQot
dm9pZCogV29ya1F1ZXVlOjp3b3JrUXVldWVUaHJlYWQoV29ya1F1ZXVlKiB3b3JrUXVldWUpCi17
Ci0gICAgd2hpbGUgKHdvcmtRdWV1ZS0+bV90aHJlYWRMb29wKSB7Ci0gICAgICAgIHdvcmtRdWV1
ZS0+cGVyZm9ybVdvcmsoKTsKLSAgICAgICAgd29ya1F1ZXVlLT5wZXJmb3JtRmlsZURlc2NyaXB0
b3JXb3JrKCk7Ci0gICAgfQotCi0gICAgY2xvc2Uod29ya1F1ZXVlLT5tX3JlYWRGcm9tUGlwZURl
c2NyaXB0b3IpOwotICAgIGNsb3NlKHdvcmtRdWV1ZS0+bV93cml0ZVRvUGlwZURlc2NyaXB0b3Ip
OwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpyZWdpc3RlclNvY2tldEV2
ZW50SGFuZGxlcihpbnQgZmlsZURlc2NyaXB0b3IsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1
bmN0aW9uKQotewotICAgIGlmIChtX3NvY2tldERlc2NyaXB0b3IgIT0gaW52YWxpZFNvY2tldERl
c2NyaXB0b3IpCi0gICAgICAgIExPR19FUlJPUigiJWQgaXMgYWxyZWFkeSByZWdpc3RlcmQuIiwg
ZmlsZURlc2NyaXB0b3IpOwotCi0gICAgbV9zb2NrZXREZXNjcmlwdG9yID0gZmlsZURlc2NyaXB0
b3I7Ci0gICAgbV9zb2NrZXRFdmVudEhhbmRsZXIgPSBmdW5jdGlvbjsKLQotICAgIGlmIChmaWxl
RGVzY3JpcHRvciA+IG1fbWF4RmlsZURlc2NyaXB0b3IpCi0gICAgICAgIG1fbWF4RmlsZURlc2Ny
aXB0b3IgPSBmaWxlRGVzY3JpcHRvcjsKLSAgICBGRF9TRVQoZmlsZURlc2NyaXB0b3IsICZtX2Zp
bGVEZXNjcmlwdG9yU2V0KTsKLX0KLQotdm9pZCBXb3JrUXVldWU6OnVucmVnaXN0ZXJTb2NrZXRF
dmVudEhhbmRsZXIoaW50IGZpbGVEZXNjcmlwdG9yKQotewotICAgIG1fc29ja2V0RGVzY3JpcHRv
ciA9IGludmFsaWRTb2NrZXREZXNjcmlwdG9yOwotCi0gICAgaWYgKGZpbGVEZXNjcmlwdG9yID09
IG1fbWF4RmlsZURlc2NyaXB0b3IpCi0gICAgICAgIG1fbWF4RmlsZURlc2NyaXB0b3IgPSBtX3Jl
YWRGcm9tUGlwZURlc2NyaXB0b3I7Ci0gICAgRkRfQ0xSKGZpbGVEZXNjcmlwdG9yLCAmbV9maWxl
RGVzY3JpcHRvclNldCk7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpkaXNwYXRjaChjb25zdCBGdW5j
dGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKLXsKLSAgICBNdXRleExvY2tlciBsb2NrZXIobV93b3Jr
SXRlbVF1ZXVlTG9jayk7Ci0gICAgbV93b3JrSXRlbVF1ZXVlLmFwcGVuZChmdW5jdGlvbik7Ci0g
ICAgc2VuZE1lc3NhZ2VUb1RocmVhZCh3YWt1cFRocmVhZE1lc3NhZ2UpOwotfQotCi1ib29sIFdv
cmtRdWV1ZTo6dGltZXJGaXJlZCh2b2lkKiBkYXRhKQotewotICAgIFRpbWVyV29ya0l0ZW0qIGl0
ZW0gPSBzdGF0aWNfY2FzdDxUaW1lcldvcmtJdGVtKj4oZGF0YSk7Ci0gICAgaWYgKGl0ZW0gJiYg
aXRlbS0+cXVldWUoKS0+bV9pc1ZhbGlkKSB7Ci0gICAgICAgIGl0ZW0tPnF1ZXVlKCktPmRpc3Bh
dGNoKGl0ZW0tPmZ1bmN0aW9uKCkpOwotICAgICAgICBpdGVtLT5xdWV1ZSgpLT5tX3RpbWVycy50
YWtlKGl0ZW0tPnRpbWVySUQoKSk7Ci0gICAgICAgIGRlbGV0ZSBpdGVtOwotICAgIH0KLQotICAg
IHJldHVybiBFQ09SRV9DQUxMQkFDS19DQU5DRUw7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpkaXNw
YXRjaEFmdGVyRGVsYXkoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24sIGRvdWJsZSBk
ZWxheSkKLXsKLSAgICBzdGF0aWMgaW50IHRpbWVySWQgPSAwOwotICAgIG1fdGltZXJzLnNldCh0
aW1lcklkLCBhZG9wdFB0cihlY29yZV90aW1lcl9hZGQoZGVsYXksIHJlaW50ZXJwcmV0X2Nhc3Q8
RWNvcmVfVGFza19DYj4odGltZXJGaXJlZCksIG5ldyBUaW1lcldvcmtJdGVtKHRpbWVySWQsIGZ1
bmN0aW9uLCB0aGlzKSkpKTsKLSAgICB0aW1lcklkKys7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybS9ndGsvV29ya1F1ZXVlR3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1Bs
YXRmb3JtL2d0ay9Xb3JrUXVldWVHdGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAxZGZhYjgzY2NmYjI0YzlmMDBlZTQwZDJkYWExYzk1YjE2MzgyYTQzLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3Jt
L2d0ay9Xb3JrUXVldWVHdGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjMwICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KLSAqIENvcHlyaWdodCAoQykgMjAx
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBQb3J0aW9ucyBDb3B5cmlnaHQg
KGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXb3JrUXVldWUuaCIKLQot
I2luY2x1ZGUgIldLQmFzZS5oIgotI2luY2x1ZGUgPGdpby9naW8uaD4KLSNpbmNsdWRlIDxnbGli
Lmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgotCi0vLyBXb3JrUXVldWU6OkV2
ZW50U291cmNlCi1jbGFzcyBXb3JrUXVldWU6OkV2ZW50U291cmNlIHsKLXB1YmxpYzoKLSAgICBF
dmVudFNvdXJjZShjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbiwgV29ya1F1ZXVlKiB3
b3JrUXVldWUsIEdDYW5jZWxsYWJsZSogY2FuY2VsbGFibGUpCi0gICAgICAgIDogbV9mdW5jdGlv
bihmdW5jdGlvbikKLSAgICAgICAgLCBtX3dvcmtRdWV1ZSh3b3JrUXVldWUpCi0gICAgICAgICwg
bV9jYW5jZWxsYWJsZShjYW5jZWxsYWJsZSkKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBjYW5j
ZWwoKQotICAgIHsKLSAgICAgICAgaWYgKCFtX2NhbmNlbGxhYmxlKQotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICBnX2NhbmNlbGxhYmxlX2NhbmNlbChtX2NhbmNlbGxhYmxlKTsKLSAgICB9
Ci0KLSAgICBzdGF0aWMgdm9pZCBleGVjdXRlRXZlbnRTb3VyY2UoRXZlbnRTb3VyY2UqIGV2ZW50
U291cmNlKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGV2ZW50U291cmNlKTsKLSAgICAgICAgV29y
a1F1ZXVlKiBxdWV1ZSA9IGV2ZW50U291cmNlLT5tX3dvcmtRdWV1ZTsKLSAgICAgICAgewotICAg
ICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHF1ZXVlLT5tX2lzVmFsaWRNdXRleCk7Ci0gICAg
ICAgICAgICBpZiAoIXF1ZXVlLT5tX2lzVmFsaWQpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0KLSAgICAgICAgZXZlbnRTb3VyY2UtPm1fZnVuY3Rpb24oKTsKLSAgICB9Ci0K
LSAgICBzdGF0aWMgZ2Jvb2xlYW4gcGVyZm9ybVdvcmtPbmNlKEV2ZW50U291cmNlKiBldmVudFNv
dXJjZSkKLSAgICB7Ci0gICAgICAgIGV4ZWN1dGVFdmVudFNvdXJjZShldmVudFNvdXJjZSk7Ci0g
ICAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZ2Jvb2xlYW4gcGVyZm9y
bVdvcmsoR1NvY2tldCogc29ja2V0LCBHSU9Db25kaXRpb24gY29uZGl0aW9uLCBFdmVudFNvdXJj
ZSogZXZlbnRTb3VyY2UpCi0gICAgewotICAgICAgICBpZiAoIShjb25kaXRpb24gJiBHX0lPX0lO
KSAmJiAhKGNvbmRpdGlvbiAmIEdfSU9fSFVQKSAmJiAhKGNvbmRpdGlvbiAmIEdfSU9fRVJSKSkg
ewotICAgICAgICAgICAgLy8gRXZlbnRTb3VyY2UgaGFzIGJlZW4gY2FuY2VsbGVkLCByZXR1cm4g
RkFMU0UgdG8gZGVzdHJveSB0aGUgc291cmNlLgotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwot
ICAgICAgICB9Ci0KLSAgICAgICAgZXhlY3V0ZUV2ZW50U291cmNlKGV2ZW50U291cmNlKTsKLSAg
ICAgICAgcmV0dXJuIFRSVUU7Ci0gICAgfQotCi0gICAgc3RhdGljIGdib29sZWFuIHBlcmZvcm1X
b3JrT25UZXJtaW5hdGlvbihHUGlkLCBnaW50LCBFdmVudFNvdXJjZSogZXZlbnRTb3VyY2UpCi0g
ICAgewotICAgICAgICBleGVjdXRlRXZlbnRTb3VyY2UoZXZlbnRTb3VyY2UpOwotICAgICAgICBy
ZXR1cm4gRkFMU0U7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgZGVsZXRlRXZlbnRTb3VyY2Uo
RXZlbnRTb3VyY2UqIGV2ZW50U291cmNlKSAKLSAgICB7Ci0gICAgICAgIEFTU0VSVChldmVudFNv
dXJjZSk7Ci0gICAgICAgIGRlbGV0ZSBldmVudFNvdXJjZTsKLSAgICB9Ci0gICAKLXB1YmxpYzoK
LSAgICBGdW5jdGlvbjx2b2lkKCk+IG1fZnVuY3Rpb247Ci0gICAgV29ya1F1ZXVlKiBtX3dvcmtR
dWV1ZTsKLSAgICBHQ2FuY2VsbGFibGUqIG1fY2FuY2VsbGFibGU7Ci19OwotCi0vLyBXb3JrUXVl
dWUKLXN0YXRpYyBjb25zdCBzaXplX3Qga1Zpc3VhbFN0dWRpb1RocmVhZE5hbWVMaW1pdCA9IDMx
OwotCi12b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXplKGNvbnN0IGNoYXIqIG5hbWUp
Ci17Ci0gICAgbV9ldmVudENvbnRleHQgPSBhZG9wdEdSZWYoZ19tYWluX2NvbnRleHRfbmV3KCkp
OwotICAgIEFTU0VSVChtX2V2ZW50Q29udGV4dCk7Ci0gICAgbV9ldmVudExvb3AgPSBhZG9wdEdS
ZWYoZ19tYWluX2xvb3BfbmV3KG1fZXZlbnRDb250ZXh0LmdldCgpLCBGQUxTRSkpOwotICAgIEFT
U0VSVChtX2V2ZW50TG9vcCk7Ci0KLSAgICAvLyBUaGlzIG5hbWUgY2FuIGJlIGNvbS5hcHBsZS5X
ZWJLaXQuUHJvY2Vzc0xhdW5jaGVyIG9yIGNvbS5hcHBsZS5Db3JlSVBDLlJlY2VpdmVRdWV1ZS4K
LSAgICAvLyBXZSBhcmUgdXNpbmcgdGhvc2UgbmFtZXMgZm9yIHRoZSB0aHJlYWQgbmFtZSwgYnV0
IGJvdGggYXJlIGxvbmdlciB0aGFuIDMxIGNoYXJhY3RlcnMsCi0gICAgLy8gd2hpY2ggaXMgdGhl
IGxpbWl0IG9mIFZpc3VhbCBTdHVkaW8gZm9yIHRocmVhZCBuYW1lcy4KLSAgICAvLyBXaGVuIGxv
ZyBpcyBlbmFibGVkIGNyZWF0ZVRocmVhZCgpIHdpbGwgYXNzZXJ0IGluc3RlYWQgb2YgdHJ1bmNh
dGUgdGhlIG5hbWUsIHNvIHdlIG5lZWQKLSAgICAvLyB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgdXNl
IGEgbmFtZSBsb25nZXIgdGhhbiAzMSBjaGFyYWN0ZXJzLgotICAgIGNvbnN0IGNoYXIqIHRocmVh
ZE5hbWUgPSBnX3N0cnJzdHIobmFtZSwgIi4iKTsKLSAgICBpZiAodGhyZWFkTmFtZSkKLSAgICAg
ICAgdGhyZWFkTmFtZSsrOwotICAgIGVsc2UKLSAgICAgICAgdGhyZWFkTmFtZSA9IG5hbWU7Ci0g
ICAgaWYgKHN0cmxlbih0aHJlYWROYW1lKSA+IGtWaXN1YWxTdHVkaW9UaHJlYWROYW1lTGltaXQp
Ci0gICAgICAgIHRocmVhZE5hbWUgKz0gc3RybGVuKHRocmVhZE5hbWUpIC0ga1Zpc3VhbFN0dWRp
b1RocmVhZE5hbWVMaW1pdDsKLQotICAgIG1fd29ya1F1ZXVlVGhyZWFkID0gY3JlYXRlVGhyZWFk
KHJlaW50ZXJwcmV0X2Nhc3Q8V1RGOjpUaHJlYWRGdW5jdGlvbj4oJldvcmtRdWV1ZTo6c3RhcnRX
b3JrUXVldWVUaHJlYWQpLCB0aGlzLCB0aHJlYWROYW1lKTsKLX0KLQotdm9pZCBXb3JrUXVldWU6
OnBsYXRmb3JtSW52YWxpZGF0ZSgpCi17Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZXZlbnRM
b29wTG9jayk7Ci0KLSAgICBpZiAobV9ldmVudExvb3ApIHsKLSAgICAgICAgaWYgKGdfbWFpbl9s
b29wX2lzX3J1bm5pbmcobV9ldmVudExvb3AuZ2V0KCkpKQotICAgICAgICAgICAgZ19tYWluX2xv
b3BfcXVpdChtX2V2ZW50TG9vcC5nZXQoKSk7Ci0gICAgICAgIG1fZXZlbnRMb29wLmNsZWFyKCk7
Ci0gICAgfQotCi0gICAgbV9ldmVudENvbnRleHQuY2xlYXIoKTsKLX0KLQotdm9pZCBXb3JrUXVl
dWU6OnN0YXJ0V29ya1F1ZXVlVGhyZWFkKFdvcmtRdWV1ZSogd29ya1F1ZXVlKQotewotICAgIHdv
cmtRdWV1ZS0+d29ya1F1ZXVlVGhyZWFkQm9keSgpOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6d29y
a1F1ZXVlVGhyZWFkQm9keSgpCi17Ci0gICAgZ19tYWluX2xvb3BfcnVuKG1fZXZlbnRMb29wLmdl
dCgpKTsKLX0KLQotdm9pZCBXb3JrUXVldWU6OnJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKGlu
dCBmaWxlRGVzY3JpcHRvciwgaW50IGNvbmRpdGlvbiwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYg
ZnVuY3Rpb24pCi17Ci0gICAgR1JlZlB0cjxHU29ja2V0PiBzb2NrZXQgPSBhZG9wdEdSZWYoZ19z
b2NrZXRfbmV3X2Zyb21fZmQoZmlsZURlc2NyaXB0b3IsIDApKTsKLSAgICBBU1NFUlQoc29ja2V0
KTsKLSAgICBHUmVmUHRyPEdDYW5jZWxsYWJsZT4gY2FuY2VsbGFibGUgPSBhZG9wdEdSZWYoZ19j
YW5jZWxsYWJsZV9uZXcoKSk7Ci0gICAgR1JlZlB0cjxHU291cmNlPiBkaXNwYXRjaFNvdXJjZSA9
IGFkb3B0R1JlZihnX3NvY2tldF9jcmVhdGVfc291cmNlKHNvY2tldC5nZXQoKSwgc3RhdGljX2Nh
c3Q8R0lPQ29uZGl0aW9uPihjb25kaXRpb24pLCBjYW5jZWxsYWJsZS5nZXQoKSkpOwotICAgIEFT
U0VSVChkaXNwYXRjaFNvdXJjZSk7Ci0gICAgRXZlbnRTb3VyY2UqIGV2ZW50U291cmNlID0gbmV3
IEV2ZW50U291cmNlKGZ1bmN0aW9uLCB0aGlzLCBjYW5jZWxsYWJsZS5nZXQoKSk7Ci0gICAgQVNT
RVJUKGV2ZW50U291cmNlKTsKLQotICAgIGdfc291cmNlX3NldF9jYWxsYmFjayhkaXNwYXRjaFNv
dXJjZS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oJldvcmtRdWV1ZTo6RXZl
bnRTb3VyY2U6OnBlcmZvcm1Xb3JrKSwKLSAgICAgICAgZXZlbnRTb3VyY2UsIHJlaW50ZXJwcmV0
X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KCZXb3JrUXVldWU6OkV2ZW50U291cmNlOjpkZWxldGVFdmVu
dFNvdXJjZSkpOwotCi0gICAgLy8gU2V0IHVwIHRoZSBldmVudCBzb3VyY2VzIHVuZGVyIHRoZSBt
dXRleCBzaW5jZSB0aGlzIGlzIHNoYXJlZCBhY3Jvc3MgbXVsdGlwbGUgdGhyZWFkcy4KLSAgICB7
Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2V2ZW50U291cmNlc0xvY2spOwotICAgICAg
ICBWZWN0b3I8RXZlbnRTb3VyY2UqPiBzb3VyY2VzOwotICAgICAgICBFdmVudFNvdXJjZUl0ZXJh
dG9yIGl0ID0gbV9ldmVudFNvdXJjZXMuZmluZChmaWxlRGVzY3JpcHRvcik7Ci0gICAgICAgIGlm
IChpdCAhPSBtX2V2ZW50U291cmNlcy5lbmQoKSkgCi0gICAgICAgICAgICBzb3VyY2VzID0gaXQt
PnNlY29uZDsKLQotICAgICAgICBzb3VyY2VzLmFwcGVuZChldmVudFNvdXJjZSk7Ci0gICAgICAg
IG1fZXZlbnRTb3VyY2VzLnNldChmaWxlRGVzY3JpcHRvciwgc291cmNlcyk7Ci0gICAgfQotCi0g
ICAgZ19zb3VyY2VfYXR0YWNoKGRpc3BhdGNoU291cmNlLmdldCgpLCBtX2V2ZW50Q29udGV4dC5n
ZXQoKSk7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjp1bnJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVy
KGludCBmaWxlRGVzY3JpcHRvcikKLXsKLSAgICBBU1NFUlQoZmlsZURlc2NyaXB0b3IpOwotICAg
IAotICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2V2ZW50U291cmNlc0xvY2spOwotICAgIAotICAg
IEV2ZW50U291cmNlSXRlcmF0b3IgaXQgPSBtX2V2ZW50U291cmNlcy5maW5kKGZpbGVEZXNjcmlw
dG9yKTsKLSAgICBBU1NFUlQoaXQgIT0gbV9ldmVudFNvdXJjZXMuZW5kKCkpOwotICAgIEFTU0VS
VChtX2V2ZW50U291cmNlcy5jb250YWlucyhmaWxlRGVzY3JpcHRvcikpOwotCi0gICAgaWYgKGl0
ICE9IG1fZXZlbnRTb3VyY2VzLmVuZCgpKSB7Ci0gICAgICAgIFZlY3RvcjxFdmVudFNvdXJjZSo+
IHNvdXJjZXMgPSBpdC0+c2Vjb25kOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c291cmNlcy5zaXplKCk7IGkrKykKLSAgICAgICAgICAgIHNvdXJjZXNbaV0tPmNhbmNlbCgpOwot
Ci0gICAgICAgIG1fZXZlbnRTb3VyY2VzLnJlbW92ZShpdCk7Ci0gICAgfQotfQotCi12b2lkIFdv
cmtRdWV1ZTo6ZGlzcGF0Y2hPblNvdXJjZShHU291cmNlKiBkaXNwYXRjaFNvdXJjZSwgY29uc3Qg
RnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24sIEdTb3VyY2VGdW5jIHNvdXJjZUNhbGxiYWNrKQot
ewotICAgIEV2ZW50U291cmNlKiBldmVudFNvdXJjZSA9IG5ldyBFdmVudFNvdXJjZShmdW5jdGlv
biwgdGhpcywgMCk7Ci0KLSAgICBnX3NvdXJjZV9zZXRfY2FsbGJhY2soZGlzcGF0Y2hTb3VyY2Us
IHNvdXJjZUNhbGxiYWNrLCBldmVudFNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVpbnRlcnByZXRfY2FzdDxHRGVzdHJveU5vdGlmeT4oJldvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6
OmRlbGV0ZUV2ZW50U291cmNlKSk7Ci0KLSAgICBnX3NvdXJjZV9hdHRhY2goZGlzcGF0Y2hTb3Vy
Y2UsIG1fZXZlbnRDb250ZXh0LmdldCgpKTsKLX0KLQotdm9pZCBXb3JrUXVldWU6OmRpc3BhdGNo
KGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQotewotICAgIEdSZWZQdHI8R1NvdXJj
ZT4gZGlzcGF0Y2hTb3VyY2UgPSBhZG9wdEdSZWYoZ19pZGxlX3NvdXJjZV9uZXcoKSk7Ci0gICAg
QVNTRVJUKGRpc3BhdGNoU291cmNlKTsKLSAgICBnX3NvdXJjZV9zZXRfcHJpb3JpdHkoZGlzcGF0
Y2hTb3VyY2UuZ2V0KCksIEdfUFJJT1JJVFlfREVGQVVMVCk7Ci0KLSAgICBkaXNwYXRjaE9uU291
cmNlKGRpc3BhdGNoU291cmNlLmdldCgpLCBmdW5jdGlvbiwgcmVpbnRlcnByZXRfY2FzdDxHU291
cmNlRnVuYz4oJldvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OnBlcmZvcm1Xb3JrT25jZSkpOwotfQot
Ci12b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2hBZnRlckRlbGF5KGNvbnN0IEZ1bmN0aW9uPHZvaWQo
KT4mIGZ1bmN0aW9uLCBkb3VibGUgZGVsYXkpCi17Ci0gICAgR1JlZlB0cjxHU291cmNlPiBkaXNw
YXRjaFNvdXJjZSA9IGFkb3B0R1JlZihnX3RpbWVvdXRfc291cmNlX25ldyhzdGF0aWNfY2FzdDxn
dWludD4oZGVsYXkgKiAxMDAwKSkpOwotICAgIEFTU0VSVChkaXNwYXRjaFNvdXJjZSk7Ci0KLSAg
ICBkaXNwYXRjaE9uU291cmNlKGRpc3BhdGNoU291cmNlLmdldCgpLCBmdW5jdGlvbiwgcmVpbnRl
cnByZXRfY2FzdDxHU291cmNlRnVuYz4oJldvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OnBlcmZvcm1X
b3JrT25jZSkpOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2hPblRlcm1pbmF0aW9uKFdl
YktpdDo6UGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllciBwcm9jZXNzLCBjb25zdCBGdW5jdGlvbjx2
b2lkKCk+JiBmdW5jdGlvbikKLXsKLSAgICBHUmVmUHRyPEdTb3VyY2U+IGRpc3BhdGNoU291cmNl
ID0gYWRvcHRHUmVmKGdfY2hpbGRfd2F0Y2hfc291cmNlX25ldyhwcm9jZXNzKSk7Ci0gICAgQVNT
RVJUKGRpc3BhdGNoU291cmNlKTsKLQotICAgIGRpc3BhdGNoT25Tb3VyY2UoZGlzcGF0Y2hTb3Vy
Y2UuZ2V0KCksIGZ1bmN0aW9uLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPigmV29ya1F1
ZXVlOjpFdmVudFNvdXJjZTo6cGVyZm9ybVdvcmtPblRlcm1pbmF0aW9uKSk7Ci19CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9tYWMvV29ya1F1ZXVlTWFjLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1BsYXRmb3JtL21hYy9Xb3JrUXVldWVNYWMuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBhZTQ3M2VlNWNjODRlNTg0MjliMDQzOWNjZDkyMWFjMmM0OTJmZmFhLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJL
aXQyL1BsYXRmb3JtL21hYy9Xb3JrUXVldWVNYWMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTc4
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV29y
a1F1ZXVlLmgiCi0KLSNpbmNsdWRlIDxtYWNoL21hY2hfaW5pdC5oPgotI2luY2x1ZGUgPG1hY2gv
bWFjaF9wb3J0Lmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLQotdm9pZCBXb3JrUXVl
dWU6OmV4ZWN1dGVGdW5jdGlvbih2b2lkKiBjb250ZXh0KQotewotICAgIFdvcmtRdWV1ZSogcXVl
dWUgPSBzdGF0aWNfY2FzdDxXb3JrUXVldWUqPihkaXNwYXRjaF9nZXRfY29udGV4dChkaXNwYXRj
aF9nZXRfY3VycmVudF9xdWV1ZSgpKSk7Ci0gICAgT3duUHRyPEZ1bmN0aW9uPHZvaWQoKT4gPiBm
dW5jdGlvbiA9IGFkb3B0UHRyKHN0YXRpY19jYXN0PEZ1bmN0aW9uPHZvaWQoKT4qPihjb250ZXh0
KSk7Ci0gICAgCi0gICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIocXVldWUtPm1faXNW
YWxpZE11dGV4KTsKLSAgICAgICAgaWYgKCFxdWV1ZS0+bV9pc1ZhbGlkKQotICAgICAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgICgqZnVuY3Rpb24pKCk7Ci19Ci0KLXZvaWQgV29ya1F1ZXVl
OjpkaXNwYXRjaChjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKLXsKLSAgICBkaXNw
YXRjaF9hc3luY19mKG1fZGlzcGF0Y2hRdWV1ZSwgbmV3IEZ1bmN0aW9uPHZvaWQoKT4oZnVuY3Rp
b24pLCBleGVjdXRlRnVuY3Rpb24pOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2hBZnRl
ckRlbGF5KGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uLCBkb3VibGUgZGVsYXkpCi17
Ci0gICAgZGlzcGF0Y2hfdGltZV90IGRlbGF5VGltZSA9IGRpc3BhdGNoX3RpbWUoRElTUEFUQ0hf
VElNRV9OT1csIGRlbGF5ICogTlNFQ19QRVJfU0VDKTsKLQotICAgIGRpc3BhdGNoX2FmdGVyX2Yo
ZGVsYXlUaW1lLCBtX2Rpc3BhdGNoUXVldWUsIG5ldyBGdW5jdGlvbjx2b2lkKCk+KGZ1bmN0aW9u
KSwgZXhlY3V0ZUZ1bmN0aW9uKTsKLX0KLQotY2xhc3MgV29ya1F1ZXVlOjpFdmVudFNvdXJjZSB7
Ci1wdWJsaWM6Ci0gICAgRXZlbnRTb3VyY2UoTWFjaFBvcnRFdmVudFR5cGUgZXZlbnRUeXBlLCBk
aXNwYXRjaF9zb3VyY2VfdCBkaXNwYXRjaFNvdXJjZSwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYg
ZnVuY3Rpb24pCi0gICAgICAgIDogbV9ldmVudFR5cGUoZXZlbnRUeXBlKQotICAgICAgICAsIG1f
ZGlzcGF0Y2hTb3VyY2UoZGlzcGF0Y2hTb3VyY2UpCi0gICAgICAgICwgbV9mdW5jdGlvbihmdW5j
dGlvbikKLSAgICB7Ci0gICAgfQotICAgIAotICAgIGRpc3BhdGNoX3NvdXJjZV90IGRpc3BhdGNo
U291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9kaXNwYXRjaFNvdXJjZTsgfQotICAgIAotICAgIHN0
YXRpYyB2b2lkIGV2ZW50SGFuZGxlcih2b2lkKiBzb3VyY2UpIAotICAgIHsKLSAgICAgICAgRXZl
bnRTb3VyY2UqIGV2ZW50U291cmNlID0gc3RhdGljX2Nhc3Q8RXZlbnRTb3VyY2UqPihzb3VyY2Up
OwotICAgICAgICAKLSAgICAgICAgZXZlbnRTb3VyY2UtPm1fZnVuY3Rpb24oKTsKLSAgICB9Ci0g
ICAgCi0gICAgc3RhdGljIHZvaWQgY2FuY2VsSGFuZGxlcih2b2lkKiBzb3VyY2UpCi0gICAgewot
ICAgICAgICBFdmVudFNvdXJjZSogZXZlbnRTb3VyY2UgPSBzdGF0aWNfY2FzdDxFdmVudFNvdXJj
ZSo+KHNvdXJjZSk7Ci0gICAgICAgIAotICAgICAgICBtYWNoX3BvcnRfdCBtYWNoUG9ydCA9IGRp
c3BhdGNoX3NvdXJjZV9nZXRfaGFuZGxlKGV2ZW50U291cmNlLT5tX2Rpc3BhdGNoU291cmNlKTsK
LSAgICAgICAgCi0gICAgICAgIHN3aXRjaCAoZXZlbnRTb3VyY2UtPm1fZXZlbnRUeXBlKSB7Ci0g
ICAgICAgIGNhc2UgTWFjaFBvcnREYXRhQXZhaWxhYmxlOgotICAgICAgICAgICAgLy8gUmVsZWFz
ZSBvdXIgcmVjZWl2ZSByaWdodC4KLSAgICAgICAgICAgIG1hY2hfcG9ydF9tb2RfcmVmcyhtYWNo
X3Rhc2tfc2VsZigpLCBtYWNoUG9ydCwgTUFDSF9QT1JUX1JJR0hUX1JFQ0VJVkUsIC0xKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE1hY2hQb3J0RGVhZE5hbWVOb3RpZmljYXRp
b246Ci0gICAgICAgICAgICAvLyBSZWxlYXNlIG91ciBzZW5kIHJpZ2h0LgotICAgICAgICAgICAg
bWFjaF9wb3J0X2RlYWxsb2NhdGUobWFjaF90YXNrX3NlbGYoKSwgbWFjaFBvcnQpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgc3RhdGljIHZvaWQgZmlu
YWxpemVIYW5kbGVyKHZvaWQqIHNvdXJjZSkKLSAgICB7Ci0gICAgICAgIEV2ZW50U291cmNlKiBl
dmVudFNvdXJjZSA9IHN0YXRpY19jYXN0PEV2ZW50U291cmNlKj4oc291cmNlKTsKLSAgICAgICAg
Ci0gICAgICAgIGRlbGV0ZSBldmVudFNvdXJjZTsKLSAgICB9Ci0gICAgCi1wcml2YXRlOgotICAg
IE1hY2hQb3J0RXZlbnRUeXBlIG1fZXZlbnRUeXBlOwotICAgIAotICAgIC8vIFRoaXMgaXMgYSB3
ZWFrIHJlZmVyZW5jZSwgc2luY2UgbV9kaXNwYXRjaFNvdXJjZSByZWZlcmVuY2VzIHRoZSBldmVu
dCBzb3VyY2UuCi0gICAgZGlzcGF0Y2hfc291cmNlX3QgbV9kaXNwYXRjaFNvdXJjZTsKLQotICAg
IEZ1bmN0aW9uPHZvaWQoKT4gbV9mdW5jdGlvbjsKLX07Ci0KLXZvaWQgV29ya1F1ZXVlOjpyZWdp
c3Rlck1hY2hQb3J0RXZlbnRIYW5kbGVyKG1hY2hfcG9ydF90IG1hY2hQb3J0LCBNYWNoUG9ydEV2
ZW50VHlwZSBldmVudFR5cGUsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQotewot
ICAgIGRpc3BhdGNoX3NvdXJjZV90eXBlX3Qgc291cmNlVHlwZSA9IDA7Ci0gICAgc3dpdGNoIChl
dmVudFR5cGUpIHsKLSAgICBjYXNlIE1hY2hQb3J0RGF0YUF2YWlsYWJsZToKLSAgICAgICAgc291
cmNlVHlwZSA9IERJU1BBVENIX1NPVVJDRV9UWVBFX01BQ0hfUkVDVjsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBNYWNoUG9ydERlYWROYW1lTm90aWZpY2F0aW9uOgotICAgICAgICBzb3VyY2VU
eXBlID0gRElTUEFUQ0hfU09VUkNFX1RZUEVfTUFDSF9TRU5EOwotICAgICAgICBicmVhazsKLSAg
ICB9Ci0gICAgCi0gICAgZGlzcGF0Y2hfc291cmNlX3QgZGlzcGF0Y2hTb3VyY2UgPSBkaXNwYXRj
aF9zb3VyY2VfY3JlYXRlKHNvdXJjZVR5cGUsIG1hY2hQb3J0LCAwLCBtX2Rpc3BhdGNoUXVldWUp
OwotICAgIAotICAgIEV2ZW50U291cmNlKiBldmVudFNvdXJjZSA9IG5ldyBFdmVudFNvdXJjZShl
dmVudFR5cGUsIGRpc3BhdGNoU291cmNlLCBmdW5jdGlvbik7Ci0gICAgZGlzcGF0Y2hfc2V0X2Nv
bnRleHQoZGlzcGF0Y2hTb3VyY2UsIGV2ZW50U291cmNlKTsKLSAgICAKLSAgICBkaXNwYXRjaF9z
b3VyY2Vfc2V0X2V2ZW50X2hhbmRsZXJfZihkaXNwYXRjaFNvdXJjZSwgJkV2ZW50U291cmNlOjpl
dmVudEhhbmRsZXIpOwotICAgIGRpc3BhdGNoX3NvdXJjZV9zZXRfY2FuY2VsX2hhbmRsZXJfZihk
aXNwYXRjaFNvdXJjZSwgJkV2ZW50U291cmNlOjpjYW5jZWxIYW5kbGVyKTsKLSAgICBkaXNwYXRj
aF9zZXRfZmluYWxpemVyX2YoZGlzcGF0Y2hTb3VyY2UsICZFdmVudFNvdXJjZTo6ZmluYWxpemVI
YW5kbGVyKTsKLSAgICAKLSAgICAvLyBBZGQgdGhlIHNvdXJjZSB0byBvdXIgc2V0IG9mIHNvdXJj
ZXMuCi0gICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9ldmVudFNvdXJjZXNNdXRl
eCk7Ci0gICAgICAgIAotICAgICAgICBBU1NFUlQoIW1fZXZlbnRTb3VyY2VzLmNvbnRhaW5zKG1h
Y2hQb3J0KSk7Ci0gICAgICAgIAotICAgICAgICBtX2V2ZW50U291cmNlcy5zZXQobWFjaFBvcnQs
IGV2ZW50U291cmNlKTsKLSAgICAgICAgCi0gICAgICAgIC8vIEFuZCBzdGFydCBpdCEKLSAgICAg
ICAgZGlzcGF0Y2hfcmVzdW1lKGRpc3BhdGNoU291cmNlKTsKLSAgICB9Ci19Ci0KLXZvaWQgV29y
a1F1ZXVlOjp1bnJlZ2lzdGVyTWFjaFBvcnRFdmVudEhhbmRsZXIobWFjaF9wb3J0X3QgbWFjaFBv
cnQpCi17Ci0gICAgQVNTRVJUKG1hY2hQb3J0KTsKLSAgICAKLSAgICBNdXRleExvY2tlciBsb2Nr
ZXIobV9ldmVudFNvdXJjZXNNdXRleCk7Ci0gICAgCi0gICAgSGFzaE1hcDxtYWNoX3BvcnRfdCwg
RXZlbnRTb3VyY2UqPjo6aXRlcmF0b3IgaXQgPSBtX2V2ZW50U291cmNlcy5maW5kKG1hY2hQb3J0
KTsKLSAgICBBU1NFUlQoaXQgIT0gbV9ldmVudFNvdXJjZXMuZW5kKCkpOwotICAgIAotICAgIEFT
U0VSVChtX2V2ZW50U291cmNlcy5jb250YWlucyhtYWNoUG9ydCkpOwotCi0gICAgRXZlbnRTb3Vy
Y2UqIGV2ZW50U291cmNlID0gaXQtPnNlY29uZDsKLSAgICAvLyBDYW5jZWwgYW5kIHJlbGVhc2Ug
dGhlIHNvdXJjZS4gSXQgd2lsbCBiZSBkZWxldGVkIGluIGl0cyBmaW5hbGl6ZSBoYW5kbGVyLgot
ICAgIGRpc3BhdGNoX3NvdXJjZV9jYW5jZWwoZXZlbnRTb3VyY2UtPmRpc3BhdGNoU291cmNlKCkp
OwotICAgIGRpc3BhdGNoX3JlbGVhc2UoZXZlbnRTb3VyY2UtPmRpc3BhdGNoU291cmNlKCkpOwot
Ci0gICAgbV9ldmVudFNvdXJjZXMucmVtb3ZlKGl0KTsgICAgCi19Ci0KLXZvaWQgV29ya1F1ZXVl
OjpwbGF0Zm9ybUluaXRpYWxpemUoY29uc3QgY2hhciogbmFtZSkKLXsKLSAgICBtX2Rpc3BhdGNo
UXVldWUgPSBkaXNwYXRjaF9xdWV1ZV9jcmVhdGUobmFtZSwgMCk7Ci0gICAgZGlzcGF0Y2hfc2V0
X2NvbnRleHQobV9kaXNwYXRjaFF1ZXVlLCB0aGlzKTsKLX0KLQotdm9pZCBXb3JrUXVldWU6OnBs
YXRmb3JtSW52YWxpZGF0ZSgpCi17Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIE11dGV4TG9j
a2VyIGxvY2tlcihtX2V2ZW50U291cmNlc011dGV4KTsKLSAgICBBU1NFUlQobV9ldmVudFNvdXJj
ZXMuaXNFbXB0eSgpKTsKLSNlbmRpZgotCi0gICAgZGlzcGF0Y2hfcmVsZWFzZShtX2Rpc3BhdGNo
UXVldWUpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vcXQvV29ya1F1
ZXVlUXQuY3BwIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vcXQvV29ya1F1ZXVlUXQuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYWEyYmUzZDBiOGI3NDg1MjlhMjg4ZmVlMmQ1
OTRmZGI5ZTQ5OTI2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3F0L1dvcmtRdWV1ZVF0LmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDEzMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jw
b3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIldvcmtRdWV1ZS5oIgotCi0jaW5jbHVkZSA8UUxvY2FsU29j
a2V0PgotI2luY2x1ZGUgPFFPYmplY3Q+Ci0jaW5jbHVkZSA8UVRocmVhZD4KLSNpbmNsdWRlIDxR
UHJvY2Vzcz4KLSNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+Ci0jaW5jbHVkZSA8
d3RmL1RocmVhZGluZy5oPgotCi1jbGFzcyBXb3JrUXVldWU6OldvcmtJdGVtUXQgOiBwdWJsaWMg
UU9iamVjdCB7Ci0gICAgUV9PQkpFQ1QKLXB1YmxpYzoKLSAgICBXb3JrSXRlbVF0KFdvcmtRdWV1
ZSogd29ya1F1ZXVlLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKLSAgICAgICAg
OiBtX3F1ZXVlKHdvcmtRdWV1ZSkKLSAgICAgICAgLCBtX3NvdXJjZSgwKQotICAgICAgICAsIG1f
c2lnbmFsKDApCi0gICAgICAgICwgbV9mdW5jdGlvbihmdW5jdGlvbikKLSAgICB7Ci0gICAgfQot
Ci0gICAgV29ya0l0ZW1RdChXb3JrUXVldWUqIHdvcmtRdWV1ZSwgUU9iamVjdCogc291cmNlLCBj
b25zdCBjaGFyKiBzaWduYWwsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQotICAg
ICAgICA6IG1fcXVldWUod29ya1F1ZXVlKQotICAgICAgICAsIG1fc291cmNlKHNvdXJjZSkKLSAg
ICAgICAgLCBtX3NpZ25hbChzaWduYWwpCi0gICAgICAgICwgbV9mdW5jdGlvbihmdW5jdGlvbikK
LSAgICB7Ci0gICAgICAgIGNvbm5lY3QobV9zb3VyY2UsIG1fc2lnbmFsLCBTTE9UKGV4ZWN1dGUo
KSksIFF0OjpRdWV1ZWRDb25uZWN0aW9uKTsKLSAgICB9Ci0KLSAgICB+V29ya0l0ZW1RdCgpCi0g
ICAgewotICAgIH0KLQotICAgIFFfU0xPVCB2b2lkIGV4ZWN1dGUoKSAKLSAgICB7IAotICAgICAg
ICBpZiAobV9xdWV1ZS0+bV9pc1ZhbGlkKQotICAgICAgICAgICAgbV9mdW5jdGlvbigpOwotICAg
IH0KLQotICAgIFFfU0xPVCB2b2lkIGV4ZWN1dGVBbmREZWxldGUoKQotICAgIHsKLSAgICAgICAg
ZXhlY3V0ZSgpOwotICAgICAgICBkZWxldGUgdGhpczsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgdGltZXJFdmVudChRVGltZXJFdmVudCopCi0gICAgewotICAgICAgICBleGVjdXRlQW5kRGVs
ZXRlKCk7Ci0gICAgfQotCi0gICAgV29ya1F1ZXVlKiBtX3F1ZXVlOwotICAgIFFPYmplY3QqIG1f
c291cmNlOwotICAgIGNvbnN0IGNoYXIqIG1fc2lnbmFsOwotICAgIEZ1bmN0aW9uPHZvaWQoKT4g
bV9mdW5jdGlvbjsKLX07Ci0KLVFTb2NrZXROb3RpZmllciogV29ya1F1ZXVlOjpyZWdpc3RlclNv
Y2tldEV2ZW50SGFuZGxlcihpbnQgc29ja2V0RGVzY3JpcHRvciwgUVNvY2tldE5vdGlmaWVyOjpU
eXBlIHR5cGUsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQotewotICAgIEFTU0VS
VChtX3dvcmtUaHJlYWQpOwotCi0gICAgUVNvY2tldE5vdGlmaWVyKiBub3RpZmllciA9IG5ldyBR
U29ja2V0Tm90aWZpZXIoc29ja2V0RGVzY3JpcHRvciwgdHlwZSwgMCk7Ci0gICAgbm90aWZpZXIt
PnNldEVuYWJsZWQoZmFsc2UpOwotICAgIG5vdGlmaWVyLT5tb3ZlVG9UaHJlYWQobV93b3JrVGhy
ZWFkKTsKLSAgICBXb3JrUXVldWU6OldvcmtJdGVtUXQqIGl0ZW1RdCA9IG5ldyBXb3JrUXVldWU6
OldvcmtJdGVtUXQodGhpcywgbm90aWZpZXIsIFNJR05BTChhY3RpdmF0ZWQoaW50KSksIGZ1bmN0
aW9uKTsKLSAgICBpdGVtUXQtPm1vdmVUb1RocmVhZChtX3dvcmtUaHJlYWQpOwotICAgIG5vdGlm
aWVyLT5zZXRFbmFibGVkKHRydWUpOwotICAgIHJldHVybiBub3RpZmllcjsKLX0KLQotdm9pZCBX
b3JrUXVldWU6OnBsYXRmb3JtSW5pdGlhbGl6ZShjb25zdCBjaGFyKikKLXsKLSAgICBtX3dvcmtU
aHJlYWQgPSBuZXcgUVRocmVhZCgpOwotICAgIG1fd29ya1RocmVhZC0+c3RhcnQoKTsKLX0KLQot
dm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCi17Ci0gICAgbV93b3JrVGhyZWFk
LT5leGl0KCk7Ci0gICAgbV93b3JrVGhyZWFkLT53YWl0KCk7Ci0gICAgZGVsZXRlIG1fd29ya1Ro
cmVhZDsKLX0KLQotdm9pZCBXb3JrUXVldWU6OmRpc3BhdGNoKGNvbnN0IEZ1bmN0aW9uPHZvaWQo
KT4mIGZ1bmN0aW9uKQotewotICAgIFdvcmtRdWV1ZTo6V29ya0l0ZW1RdCogaXRlbVF0ID0gbmV3
IFdvcmtRdWV1ZTo6V29ya0l0ZW1RdCh0aGlzLCBmdW5jdGlvbik7Ci0gICAgaXRlbVF0LT5tb3Zl
VG9UaHJlYWQobV93b3JrVGhyZWFkKTsKLSAgICBRTWV0YU9iamVjdDo6aW52b2tlTWV0aG9kKGl0
ZW1RdCwgImV4ZWN1dGVBbmREZWxldGUiLCBRdDo6UXVldWVkQ29ubmVjdGlvbik7Ci19Ci0KLXZv
aWQgV29ya1F1ZXVlOjpkaXNwYXRjaEFmdGVyRGVsYXkoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYg
ZnVuY3Rpb24sIGRvdWJsZSBkZWxheUluU2Vjb25kKQotewotICAgIFdvcmtRdWV1ZTo6V29ya0l0
ZW1RdCogaXRlbVF0ID0gbmV3IFdvcmtRdWV1ZTo6V29ya0l0ZW1RdCh0aGlzLCBmdW5jdGlvbik7
Ci0gICAgaXRlbVF0LT5zdGFydFRpbWVyKHN0YXRpY19jYXN0PGludD4oZGVsYXlJblNlY29uZCAq
IDEwMDApKTsKLSAgICBpdGVtUXQtPm1vdmVUb1RocmVhZChtX3dvcmtUaHJlYWQpOwotfQotCi12
b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2hPblRlcm1pbmF0aW9uKFdlYktpdDo6UGxhdGZvcm1Qcm9j
ZXNzSWRlbnRpZmllciBwcm9jZXNzLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikK
LXsKLSAgICBXb3JrUXVldWU6OldvcmtJdGVtUXQqIGl0ZW1RdCA9IG5ldyBXb3JrUXVldWU6Oldv
cmtJdGVtUXQodGhpcywgcHJvY2VzcywgU0lHTkFMKGZpbmlzaGVkKGludCwgUVByb2Nlc3M6OkV4
aXRTdGF0dXMpKSwgZnVuY3Rpb24pOwotICAgIGl0ZW1RdC0+bW92ZVRvVGhyZWFkKG1fd29ya1Ro
cmVhZCk7Ci19Ci0KLSNpbmNsdWRlICJXb3JrUXVldWVRdC5tb2MiCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybS93aW4vV29ya1F1ZXVlV2luLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtL3dpbi9Xb3JrUXVldWVXaW4uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBhYWJhZGJkYTg5NWUwN2Q5ZWU1MzMwNzk1Y2M5NGU2MTdlYjkxZDdiLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRm
b3JtL3dpbi9Xb3JrUXVldWVXaW4uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjkxICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV29ya1F1ZXVlLmgi
Ci0KLSNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1Ro
cmVhZGluZy5oPgotCi1pbmxpbmUgV29ya1F1ZXVlOjpXb3JrSXRlbVdpbjo6V29ya0l0ZW1XaW4o
Y29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24sIFdvcmtRdWV1ZSogcXVldWUpCi0gICAg
OiBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQotICAgICwgbV9xdWV1ZShxdWV1ZSkKLXsKLX0KLQotUGFz
c1JlZlB0cjxXb3JrUXVldWU6OldvcmtJdGVtV2luPiBXb3JrUXVldWU6OldvcmtJdGVtV2luOjpj
cmVhdGUoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24sIFdvcmtRdWV1ZSogcXVldWUp
Ci17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXb3JrSXRlbVdpbihmdW5jdGlvbiwgcXVldWUp
KTsKLX0KLQotV29ya1F1ZXVlOjpXb3JrSXRlbVdpbjo6fldvcmtJdGVtV2luKCkKLXsKLX0KLQot
aW5saW5lIFdvcmtRdWV1ZTo6SGFuZGxlV29ya0l0ZW06OkhhbmRsZVdvcmtJdGVtKEhBTkRMRSBo
YW5kbGUsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uLCBXb3JrUXVldWUqIHF1ZXVl
KQotICAgIDogV29ya0l0ZW1XaW4oZnVuY3Rpb24sIHF1ZXVlKQotICAgICwgbV9oYW5kbGUoaGFu
ZGxlKQotICAgICwgbV93YWl0SGFuZGxlKDApCi17Ci0gICAgQVNTRVJUX0FSRyhoYW5kbGUsIGhh
bmRsZSk7Ci19Ci0KLVBhc3NSZWZQdHI8V29ya1F1ZXVlOjpIYW5kbGVXb3JrSXRlbT4gV29ya1F1
ZXVlOjpIYW5kbGVXb3JrSXRlbTo6Y3JlYXRlQnlBZG9wdGluZ0hhbmRsZShIQU5ETEUgaGFuZGxl
LCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbiwgV29ya1F1ZXVlKiBxdWV1ZSkKLXsK
LSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhhbmRsZVdvcmtJdGVtKGhhbmRsZSwgZnVuY3Rpb24s
IHF1ZXVlKSk7Ci19Ci0KLVdvcmtRdWV1ZTo6SGFuZGxlV29ya0l0ZW06On5IYW5kbGVXb3JrSXRl
bSgpCi17Ci0gICAgOjpDbG9zZUhhbmRsZShtX2hhbmRsZSk7Ci19Ci0KLXZvaWQgV29ya1F1ZXVl
OjpoYW5kbGVDYWxsYmFjayh2b2lkKiBjb250ZXh0LCBCT09MRUFOIHRpbWVyT3JXYWl0RmlyZWQp
Ci17Ci0gICAgQVNTRVJUX0FSRyhjb250ZXh0LCBjb250ZXh0KTsKLSAgICBBU1NFUlRfQVJHKHRp
bWVyT3JXYWl0RmlyZWQsICF0aW1lck9yV2FpdEZpcmVkKTsKLQotICAgIFdvcmtJdGVtV2luKiBp
dGVtID0gc3RhdGljX2Nhc3Q8V29ya0l0ZW1XaW4qPihjb250ZXh0KTsKLSAgICBXb3JrUXVldWUq
IHF1ZXVlID0gaXRlbS0+cXVldWUoKTsKLQotICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9j
ayhxdWV1ZS0+bV93b3JrSXRlbVF1ZXVlTG9jayk7Ci0gICAgICAgIHF1ZXVlLT5tX3dvcmtJdGVt
UXVldWUuYXBwZW5kKGl0ZW0pOwotCi0gICAgICAgIC8vIElmIG5vIG90aGVyIHRocmVhZCBpcyBw
ZXJmb3JtaW5nIHdvcmssIHdlIGNhbiBkbyBpdCBvbiB0aGlzIHRocmVhZC4KLSAgICAgICAgaWYg
KCFxdWV1ZS0+dHJ5UmVnaXN0ZXJBc1dvcmtUaHJlYWQoKSkgewotICAgICAgICAgICAgLy8gU29t
ZSBvdGhlciB0aHJlYWQgaXMgcGVyZm9ybWluZyB3b3JrLiBTaW5jZSB3ZSBob2xkIHRoZSBxdWV1
ZSBsb2NrLCB3ZSBjYW4gYmUgc3VyZQotICAgICAgICAgICAgLy8gdGhhdCB0aGUgd29yayB0aHJl
YWQgaXMgbm90IGV4aXRpbmcgZHVlIHRvIGFuIGVtcHR5IHF1ZXVlIGFuZCB3aWxsIHByb2Nlc3Mg
dGhlIHdvcmsKLSAgICAgICAgICAgIC8vIGl0ZW0gd2UganVzdCBhZGRlZCB0byBpdC4gSWYgd2Ug
d2VyZW4ndCBob2xkaW5nIHRoZSBsb2NrIHdlJ2QgaGF2ZSB0byBzaWduYWwKLSAgICAgICAgICAg
IC8vIG1fcGVyZm9ybVdvcmtFdmVudCB0byBtYWtlIHN1cmUgdGhlIHdvcmsgaXRlbSBnb3QgcGlj
a2VkIHVwLgotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcXVl
dWUtPnBlcmZvcm1Xb3JrT25SZWdpc3RlcmVkV29ya1RocmVhZCgpOwotfQotCi12b2lkIFdvcmtR
dWV1ZTo6cmVnaXN0ZXJIYW5kbGUoSEFORExFIGhhbmRsZSwgY29uc3QgRnVuY3Rpb248dm9pZCgp
PiYgZnVuY3Rpb24pCi17Ci0gICAgUmVmUHRyPEhhbmRsZVdvcmtJdGVtPiBoYW5kbGVJdGVtID0g
SGFuZGxlV29ya0l0ZW06OmNyZWF0ZUJ5QWRvcHRpbmdIYW5kbGUoaGFuZGxlLCBmdW5jdGlvbiwg
dGhpcyk7Ci0KLSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2sobV9oYW5kbGVzTG9jayk7
Ci0gICAgICAgIEFTU0VSVF9BUkcoaGFuZGxlLCAhbV9oYW5kbGVzLmNvbnRhaW5zKGhhbmRsZSkp
OwotICAgICAgICBtX2hhbmRsZXMuc2V0KGhhbmRsZSwgaGFuZGxlSXRlbSk7Ci0gICAgfQotCi0g
ICAgSEFORExFIHdhaXRIYW5kbGU7Ci0gICAgaWYgKCE6OlJlZ2lzdGVyV2FpdEZvclNpbmdsZU9i
amVjdCgmd2FpdEhhbmRsZSwgaGFuZGxlLCBoYW5kbGVDYWxsYmFjaywgaGFuZGxlSXRlbS5nZXQo
KSwgSU5GSU5JVEUsIFdUX0VYRUNVVEVERUZBVUxUKSkgewotICAgICAgICBEV09SRCBlcnJvciA9
IDo6R2V0TGFzdEVycm9yKCk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0K
LSAgICBoYW5kbGVJdGVtLT5zZXRXYWl0SGFuZGxlKHdhaXRIYW5kbGUpOwotfQotCi12b2lkIFdv
cmtRdWV1ZTo6dW5yZWdpc3RlckFuZENsb3NlSGFuZGxlKEhBTkRMRSBoYW5kbGUpCi17Ci0gICAg
UmVmUHRyPEhhbmRsZVdvcmtJdGVtPiBpdGVtOwotICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIg
bG9ja2VyKG1faGFuZGxlc0xvY2spOwotICAgICAgICBBU1NFUlRfQVJHKGhhbmRsZSwgbV9oYW5k
bGVzLmNvbnRhaW5zKGhhbmRsZSkpOwotICAgICAgICBpdGVtID0gbV9oYW5kbGVzLnRha2UoaGFu
ZGxlKTsKLSAgICB9Ci0KLSAgICB1bnJlZ2lzdGVyV2FpdEFuZERlc3Ryb3lJdGVtU29vbihpdGVt
LnJlbGVhc2UoKSk7Ci19Ci0KLURXT1JEIFdvcmtRdWV1ZTo6d29ya1RocmVhZENhbGxiYWNrKHZv
aWQqIGNvbnRleHQpCi17Ci0gICAgQVNTRVJUX0FSRyhjb250ZXh0LCBjb250ZXh0KTsKLQotICAg
IFdvcmtRdWV1ZSogcXVldWUgPSBzdGF0aWNfY2FzdDxXb3JrUXVldWUqPihjb250ZXh0KTsKLQot
ICAgIGlmICghcXVldWUtPnRyeVJlZ2lzdGVyQXNXb3JrVGhyZWFkKCkpCi0gICAgICAgIHJldHVy
biAwOwotCi0gICAgcXVldWUtPnBlcmZvcm1Xb3JrT25SZWdpc3RlcmVkV29ya1RocmVhZCgpOwot
ICAgIHJldHVybiAwOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6cGVyZm9ybVdvcmtPblJlZ2lzdGVy
ZWRXb3JrVGhyZWFkKCkKLXsKLSAgICBBU1NFUlQobV9pc1dvcmtUaHJlYWRSZWdpc3RlcmVkKTsK
LQotICAgIGJvb2wgaXNWYWxpZCA9IHRydWU7Ci0KLSAgICBtX3dvcmtJdGVtUXVldWVMb2NrLmxv
Y2soKTsKLQotICAgIHdoaWxlIChpc1ZhbGlkICYmICFtX3dvcmtJdGVtUXVldWUuaXNFbXB0eSgp
KSB7Ci0gICAgICAgIFZlY3RvcjxSZWZQdHI8V29ya0l0ZW1XaW4+ID4gd29ya0l0ZW1RdWV1ZTsK
LSAgICAgICAgbV93b3JrSXRlbVF1ZXVlLnN3YXAod29ya0l0ZW1RdWV1ZSk7Ci0KLSAgICAgICAg
Ly8gQWxsb3cgbW9yZSB3b3JrIHRvIGJlIHNjaGVkdWxlZCB3aGlsZSB3ZSdyZSBub3QgdXNpbmcg
dGhlIHF1ZXVlIGRpcmVjdGx5LgotICAgICAgICBtX3dvcmtJdGVtUXVldWVMb2NrLnVubG9jaygp
OwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdvcmtJdGVtUXVldWUuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2lzVmFsaWRNdXRleCk7Ci0g
ICAgICAgICAgICBpc1ZhbGlkID0gbV9pc1ZhbGlkOwotICAgICAgICAgICAgaWYgKCFpc1ZhbGlk
KQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgd29ya0l0ZW1RdWV1ZVtpXS0+
ZnVuY3Rpb24oKSgpOwotICAgICAgICB9Ci0gICAgICAgIG1fd29ya0l0ZW1RdWV1ZUxvY2subG9j
aygpOwotICAgIH0KLQotICAgIC8vIE9uZSBpbnZhcmlhbnQgd2UgbWFpbnRhaW4gaXMgdGhhdCBh
bnkgd29yayBzY2hlZHVsZWQgd2hpbGUgYSB3b3JrIHRocmVhZCBpcyByZWdpc3RlcmVkIHdpbGwK
LSAgICAvLyBiZSBoYW5kbGVkIGJ5IHRoYXQgd29yayB0aHJlYWQuIFVucmVnaXN0ZXIgYXMgdGhl
IHdvcmsgdGhyZWFkIHdoaWxlIHRoZSBxdWV1ZSBsb2NrIGlzIHN0aWxsCi0gICAgLy8gaGVsZCBz
byB0aGF0IG5vIHdvcmsgY2FuIGJlIHNjaGVkdWxlZCB3aGlsZSB3ZSdyZSBzdGlsbCByZWdpc3Rl
cmVkLgotICAgIHVucmVnaXN0ZXJBc1dvcmtUaHJlYWQoKTsKLQotICAgIG1fd29ya0l0ZW1RdWV1
ZUxvY2sudW5sb2NrKCk7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpwbGF0Zm9ybUluaXRpYWxpemUo
Y29uc3QgY2hhciogbmFtZSkKLXsKLSAgICBtX2lzV29ya1RocmVhZFJlZ2lzdGVyZWQgPSAwOwot
ICAgIG1fdGltZXJRdWV1ZSA9IDo6Q3JlYXRlVGltZXJRdWV1ZSgpOwotICAgIEFTU0VSVF9XSVRI
X01FU1NBR0UobV90aW1lclF1ZXVlLCAiOjpDcmVhdGVUaW1lclF1ZXVlIGZhaWxlZCB3aXRoIGVy
cm9yICVsdSIsIDo6R2V0TGFzdEVycm9yKCkpOwotfQotCi1ib29sIFdvcmtRdWV1ZTo6dHJ5UmVn
aXN0ZXJBc1dvcmtUaHJlYWQoKQotewotICAgIExPTkcgcmVzdWx0ID0gOjpJbnRlcmxvY2tlZENv
bXBhcmVFeGNoYW5nZSgmbV9pc1dvcmtUaHJlYWRSZWdpc3RlcmVkLCAxLCAwKTsKLSAgICBBU1NF
UlQoIXJlc3VsdCB8fCByZXN1bHQgPT0gMSk7Ci0gICAgcmV0dXJuICFyZXN1bHQ7Ci19Ci0KLXZv
aWQgV29ya1F1ZXVlOjp1bnJlZ2lzdGVyQXNXb3JrVGhyZWFkKCkKLXsKLSAgICBMT05HIHJlc3Vs
dCA9IDo6SW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2UoJm1faXNXb3JrVGhyZWFkUmVnaXN0ZXJl
ZCwgMCwgMSk7Ci0gICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdCA9PSAxKTsKLX0KLQot
dm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCi17Ci0jaWYgIUFTU0VSVF9ESVNB
QkxFRAotICAgIE11dGV4TG9ja2VyIGxvY2sobV9oYW5kbGVzTG9jayk7Ci0gICAgQVNTRVJUKG1f
aGFuZGxlcy5pc0VtcHR5KCkpOwotI2VuZGlmCi0KLSAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBl
bnN1cmUgdGhhdCBhbnkgdGltZXItcXVldWUgdGltZXJzIHRoYXQgZmlyZSBhZnRlciB0aGlzIHBv
aW50IGRvbid0IHRyeSB0bwotICAgIC8vIGFjY2VzcyB0aGlzIFdvcmtRdWV1ZSA8aHR0cDovL3dl
YmtpdC5vcmcvYi80NDY5MD4uCi0gICAgOjpEZWxldGVUaW1lclF1ZXVlRXgobV90aW1lclF1ZXVl
LCAwKTsKLX0KLQotdm9pZCBXb3JrUXVldWU6OmRpc3BhdGNoKGNvbnN0IEZ1bmN0aW9uPHZvaWQo
KT4mIGZ1bmN0aW9uKQotewotICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3dvcmtJdGVtUXVldWVM
b2NrKTsKLQotICAgIG1fd29ya0l0ZW1RdWV1ZS5hcHBlbmQoV29ya0l0ZW1XaW46OmNyZWF0ZShm
dW5jdGlvbiwgdGhpcykpOwotCi0gICAgLy8gU3Bhd24gYSB3b3JrIHRocmVhZCB0byBwZXJmb3Jt
IHRoZSB3b3JrIHdlIGp1c3QgYWRkZWQuIEFzIGFuIG9wdGltaXphdGlvbiwgd2UgYXZvaWQKLSAg
ICAvLyBzcGF3bmluZyB0aGUgdGhyZWFkIGlmIGEgd29yayB0aHJlYWQgaXMgYWxyZWFkeSByZWdp
c3RlcmVkLiBUaGlzIHByZXZlbnRzIG11bHRpcGxlIHdvcmsKLSAgICAvLyB0aHJlYWRzIGZyb20g
YmVpbmcgc3Bhd25lZCBpbiBtb3N0IGNhc2VzLiAoTm90ZSB0aGF0IHdoZW4gYSB3b3JrIHRocmVh
ZCBoYXMgYmVlbiBzcGF3bmVkIGJ1dAotICAgIC8vIGhhc24ndCByZWdpc3RlcmVkIGl0c2VsZiB5
ZXQsIG1faXNXb3JrVGhyZWFkUmVnaXN0ZXJlZCB3aWxsIGJlIGZhbHNlIGFuZCB3ZSdsbCBlbmQg
dXAKLSAgICAvLyBzcGF3bmluZyBhIHNlY29uZCB3b3JrIHRocmVhZCBoZXJlLiBCdXQgd29yayB0
aHJlYWQgcmVnaXN0cmF0aW9uIHByb2Nlc3Mgd2lsbCBlbnN1cmUgdGhhdAotICAgIC8vIG9ubHkg
b25lIHRocmVhZCBhY3R1YWxseSBlbmRzIHVwIHBlcmZvcm1pbmcgd29yay4pCi0gICAgaWYgKCFt
X2lzV29ya1RocmVhZFJlZ2lzdGVyZWQpCi0gICAgICAgIDo6UXVldWVVc2VyV29ya0l0ZW0od29y
a1RocmVhZENhbGxiYWNrLCB0aGlzLCBXVF9FWEVDVVRFREVGQVVMVCk7Ci19Ci0KLXN0cnVjdCBU
aW1lckNvbnRleHQgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8VGltZXJDb250ZXh0PiB7
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8VGltZXJDb250ZXh0PiBjcmVhdGUoKSB7IHJldHVybiBh
ZG9wdFJlZihuZXcgVGltZXJDb250ZXh0KTsgfQotCi0gICAgV29ya1F1ZXVlKiBxdWV1ZTsKLSAg
ICBGdW5jdGlvbjx2b2lkKCk+IGZ1bmN0aW9uOwotICAgIE11dGV4IHRpbWVyTXV0ZXg7Ci0gICAg
SEFORExFIHRpbWVyOwotCi1wcml2YXRlOgotICAgIFRpbWVyQ29udGV4dCgpIDogcXVldWUoMCks
IHRpbWVyKDApIHsgfQotfTsKLQotdm9pZCBXb3JrUXVldWU6OnRpbWVyQ2FsbGJhY2sodm9pZCog
Y29udGV4dCwgQk9PTEVBTiB0aW1lck9yV2FpdEZpcmVkKQotewotICAgIEFTU0VSVF9BUkcoY29u
dGV4dCwgY29udGV4dCk7Ci0gICAgQVNTRVJUX1VOVVNFRCh0aW1lck9yV2FpdEZpcmVkLCB0aW1l
ck9yV2FpdEZpcmVkKTsKLQotICAgIC8vIEJhbGFuY2VkIGJ5IGxlYWtSZWYgaW4gc2NoZWR1bGVX
b3JrQWZ0ZXJEZWxheS4KLSAgICBSZWZQdHI8VGltZXJDb250ZXh0PiB0aW1lckNvbnRleHQgPSBh
ZG9wdFJlZihzdGF0aWNfY2FzdDxUaW1lckNvbnRleHQqPihjb250ZXh0KSk7Ci0KLSAgICB0aW1l
ckNvbnRleHQtPnF1ZXVlLT5kaXNwYXRjaCh0aW1lckNvbnRleHQtPmZ1bmN0aW9uKTsKLQotICAg
IE11dGV4TG9ja2VyIGxvY2sodGltZXJDb250ZXh0LT50aW1lck11dGV4KTsKLSAgICBBU1NFUlQo
dGltZXJDb250ZXh0LT50aW1lcik7Ci0gICAgQVNTRVJUKHRpbWVyQ29udGV4dC0+cXVldWUtPm1f
dGltZXJRdWV1ZSk7Ci0gICAgaWYgKCE6OkRlbGV0ZVRpbWVyUXVldWVUaW1lcih0aW1lckNvbnRl
eHQtPnF1ZXVlLT5tX3RpbWVyUXVldWUsIHRpbWVyQ29udGV4dC0+dGltZXIsIDApKQotICAgICAg
ICBBU1NFUlRfV0lUSF9NRVNTQUdFKGZhbHNlLCAiOjpEZWxldGVUaW1lclF1ZXVlVGltZXIgZmFp
bGVkIHdpdGggZXJyb3IgJWx1IiwgOjpHZXRMYXN0RXJyb3IoKSk7Ci19Ci0KLXZvaWQgV29ya1F1
ZXVlOjpkaXNwYXRjaEFmdGVyRGVsYXkoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24s
IGRvdWJsZSBkZWxheSkKLXsKLSAgICBBU1NFUlQobV90aW1lclF1ZXVlKTsKLQotICAgIFJlZlB0
cjxUaW1lckNvbnRleHQ+IGNvbnRleHQgPSBUaW1lckNvbnRleHQ6OmNyZWF0ZSgpOwotICAgIGNv
bnRleHQtPnF1ZXVlID0gdGhpczsKLSAgICBjb250ZXh0LT5mdW5jdGlvbiA9IGZ1bmN0aW9uOwot
Ci0gICAgewotICAgICAgICAvLyBUaGUgdGltZXIgY2FsbGJhY2sgY291bGQgZmlyZSBiZWZvcmUg
OjpDcmVhdGVUaW1lclF1ZXVlVGltZXIgZXZlbiByZXR1cm5zLCBzbyB3ZSBwcm90ZWN0Ci0gICAg
ICAgIC8vIGNvbnRleHQtPnRpbWVyIHdpdGggYSBtdXRleCB0byBlbnN1cmUgdGhlIHRpbWVyIGNh
bGxiYWNrIGRvZXNuJ3QgYWNjZXNzIGl0IGJlZm9yZSB0aGUKLSAgICAgICAgLy8gdGltZXIgaGFu
ZGxlIGhhcyBiZWVuIHN0b3JlZCBpbiBpdC4KLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9jayhjb250
ZXh0LT50aW1lck11dGV4KTsKLQotICAgICAgICAvLyBTaW5jZSBvdXIgdGltZXIgY2FsbGJhY2sg
aXMgcXVpY2ssIHdlIGNhbiBleGVjdXRlIGluIHRoZSB0aW1lciB0aHJlYWQgaXRzZWxmIGFuZCBh
dm9pZAotICAgICAgICAvLyBhbiBleHRyYSB0aHJlYWQgc3dpdGNoIG92ZXIgdG8gYSB3b3JrZXIg
dGhyZWFkLgotICAgICAgICBpZiAoITo6Q3JlYXRlVGltZXJRdWV1ZVRpbWVyKCZjb250ZXh0LT50
aW1lciwgbV90aW1lclF1ZXVlLCB0aW1lckNhbGxiYWNrLCBjb250ZXh0LmdldCgpLCBkZWxheSAq
IDEwMDAsIDAsIFdUX0VYRUNVVEVJTlRJTUVSVEhSRUFEKSkgewotICAgICAgICAgICAgQVNTRVJU
X1dJVEhfTUVTU0FHRShmYWxzZSwgIjo6Q3JlYXRlVGltZXJRdWV1ZVRpbWVyIGZhaWxlZCB3aXRo
IGVycm9yICVsdSIsIDo6R2V0TGFzdEVycm9yKCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgLy8gVGhlIHRpbWVyIGNhbGxiYWNrIHdpbGwgaGFuZGxlIGRl
c3Ryb3lpbmcgY29udGV4dC4KLSAgICBjb250ZXh0LnJlbGVhc2UoKS5sZWFrUmVmKCk7Ci19Ci0K
LXZvaWQgV29ya1F1ZXVlOjp1bnJlZ2lzdGVyV2FpdEFuZERlc3Ryb3lJdGVtU29vbihQYXNzUmVm
UHRyPEhhbmRsZVdvcmtJdGVtPiBpdGVtKQotewotICAgIC8vIFdlJ3JlIGdvaW5nIHRvIG1ha2Ug
YSBibG9ja2luZyBjYWxsIHRvIDo6VW5yZWdpc3RlcldhaXRFeCBiZWZvcmUgY2xvc2luZyB0aGUg
aGFuZGxlLiAoVGhlCi0gICAgLy8gYmxvY2tpbmcgdmVyc2lvbiBvZiA6OlVucmVnaXN0ZXJXYWl0
RXggaXMgbXVjaCBzaW1wbGVyIHRoYW4gdGhlIG5vbi1ibG9ja2luZyB2ZXJzaW9uLikgSWYgd2UK
LSAgICAvLyBkbyB0aGlzIG9uIHRoZSBjdXJyZW50IHRocmVhZCwgd2UnbGwgZGVhZGxvY2sgaWYg
d2UncmUgY3VycmVudGx5IGluIGEgY2FsbGJhY2sgZnVuY3Rpb24gZm9yCi0gICAgLy8gdGhlIHdh
aXQgd2UncmUgdW5yZWdpc3RlcmluZy4gU28gaW5zdGVhZCB3ZSBkbyBpdCBhc3luY2hyb25vdXNs
eSBvbiBzb21lIG90aGVyIHdvcmtlciB0aHJlYWQuCi0KLSAgICA6OlF1ZXVlVXNlcldvcmtJdGVt
KHVucmVnaXN0ZXJXYWl0QW5kRGVzdHJveUl0ZW1DYWxsYmFjaywgaXRlbS5sZWFrUmVmKCksIFdU
X0VYRUNVVEVERUZBVUxUKTsKLX0KLQotRFdPUkQgV0lOQVBJIFdvcmtRdWV1ZTo6dW5yZWdpc3Rl
cldhaXRBbmREZXN0cm95SXRlbUNhbGxiYWNrKHZvaWQqIGNvbnRleHQpCi17Ci0gICAgQVNTRVJU
X0FSRyhjb250ZXh0LCBjb250ZXh0KTsKLSAgICBSZWZQdHI8SGFuZGxlV29ya0l0ZW0+IGl0ZW0g
PSBhZG9wdFJlZihzdGF0aWNfY2FzdDxIYW5kbGVXb3JrSXRlbSo+KGNvbnRleHQpKTsKLQotICAg
IC8vIE5vdyB0aGF0IHdlIGtub3cgd2UncmUgbm90IGluIGEgY2FsbGJhY2sgZnVuY3Rpb24gZm9y
IHRoZSB3YWl0IHdlJ3JlIHVucmVnaXN0ZXJpbmcsIHdlIGNhbgotICAgIC8vIG1ha2UgYSBibG9j
a2luZyBjYWxsIHRvIDo6VW5yZWdpc3RlcldhaXRFeC4KLSAgICBpZiAoITo6VW5yZWdpc3Rlcldh
aXRFeChpdGVtLT53YWl0SGFuZGxlKCksIElOVkFMSURfSEFORExFX1ZBTFVFKSkgewotICAgICAg
ICBEV09SRCBlcnJvciA9IDo6R2V0TGFzdEVycm9yKCk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFr
ZQppbmRleCA3ZDA2MTg0YzFiYjlkZGViNmE3NWVlZTIzZWM3NWM3Yjk3YzhhYmQ1Li5mOWIzMzYz
MzJjNWQxM2Q3MGY0NDZiYTg5MjcwMjg3MmYwYjViMjkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5j
bWFrZQpAQCAtOCw3ICs4LDYgQEAgTElTVChBUFBFTkQgV2ViS2l0Ml9MSU5LX0ZMQUdTCiAKIExJ
U1QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIFBsYXRmb3JtL2VmbC9Nb2R1bGVFZmwuY3Bw
Ci0gICAgUGxhdGZvcm0vZWZsL1dvcmtRdWV1ZUVmbC5jcHAKICAgICBQbGF0Zm9ybS91bml4L1No
YXJlZE1lbW9yeVVuaXguY3BwCiAKICAgICBQbGF0Zm9ybS9Db3JlSVBDL3VuaXgvQ29ubmVjdGlv
blVuaXguY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpIGIvU291cmNl
L1dlYktpdDIvVGFyZ2V0LnByaQppbmRleCAyY2E4YzJlMDMxMGU5ZDA4OWFhZmFjZTVmYmZiZDNh
NjU1ZjkwNmU1Li5mMTQ2ZTk5M2Q1MmFhZTgwMjc5ZjFmZGIxNGFmNDM5YTc2NTNiODY2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJLaXQyL1Rh
cmdldC5wcmkKQEAgLTMwLDkgKzMwLDcgQEAgSEVBREVSUyArPSBcCiAgICAgUGxhdGZvcm0vQ29y
ZUlQQy9NZXNzYWdlU2VuZGVyLmggXAogICAgIFBsYXRmb3JtL0xvZ2dpbmcuaCBcCiAgICAgUGxh
dGZvcm0vTW9kdWxlLmggXAotICAgIFBsYXRmb3JtL1BsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIu
aCBcCiAgICAgUGxhdGZvcm0vU2hhcmVkTWVtb3J5LmggXAotICAgIFBsYXRmb3JtL1dvcmtRdWV1
ZS5oIFwKICAgICBQbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94eS5oIFwKICAgICBQ
bHVnaW5Qcm9jZXNzL1BsdWdpbkNyZWF0aW9uUGFyYW1ldGVycy5oIFwKICAgICBQbHVnaW5Qcm9j
ZXNzL1BsdWdpblByb2Nlc3MuaCBcCkBAIC00MDYsNyArNDA0LDYgQEAgU09VUkNFUyArPSBcCiAg
ICAgUGxhdGZvcm0vQ29yZUlQQy9EYXRhUmVmZXJlbmNlLmNwcCBcCiAgICAgUGxhdGZvcm0vTG9n
Z2luZy5jcHAgXAogICAgIFBsYXRmb3JtL01vZHVsZS5jcHAgXAotICAgIFBsYXRmb3JtL1dvcmtR
dWV1ZS5jcHAgXAogICAgIFBsYXRmb3JtL3F0L0xvZ2dpbmdRdC5jcHAgXAogICAgIFBsYXRmb3Jt
L3F0L01vZHVsZVF0LmNwcCBcCiAgICAgUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJv
eHkuY3BwIFwKQEAgLTgxMywxNCArODEwLDEyIEBAIG1hYzogewogICAgIFNPVVJDRVMgKz0gXAog
ICAgICAgICBQbGF0Zm9ybS9Db3JlSVBDL21hYy9Db25uZWN0aW9uTWFjLmNwcCBcCiAgICAgICAg
IFBsYXRmb3JtL21hYy9NYWNoVXRpbGl0aWVzLmNwcCBcCi0gICAgICAgIFBsYXRmb3JtL21hYy9X
b3JrUXVldWVNYWMuY3BwIFwKICAgICAgICAgUGxhdGZvcm0vbWFjL1NoYXJlZE1lbW9yeU1hYy5j
cHAKIAogfSBlbHNlIHsKICAgICBTT1VSQ0VTICs9IFwKICAgICAgICAgUGxhdGZvcm0vQ29yZUlQ
Qy91bml4L0F0dGFjaG1lbnRVbml4LmNwcCBcCiAgICAgICAgIFBsYXRmb3JtL0NvcmVJUEMvdW5p
eC9Db25uZWN0aW9uVW5peC5jcHAgXAotICAgICAgICBQbGF0Zm9ybS9xdC9Xb3JrUXVldWVRdC5j
cHAgXAogICAgICAgICBQbGF0Zm9ybS91bml4L1NoYXJlZE1lbW9yeVVuaXguY3BwCiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9Qcm9jZXNzTGF1bmNo
ZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL1Byb2Nlc3NMYXVuY2hl
ci5jcHAKaW5kZXggYmEyMmRkYTJkYTdiYzViNDhkMzM1ODY5YWZhMzgwYzdiYjM2ODI5ZS4uNjdk
ZWY3NjgyMWZhMGI1MGRhZmU5YjljZTUxNjhjNWVmZDk4MDMzNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL1Byb2Nlc3NMYXVuY2hlci5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL1Byb2Nlc3NMYXVuY2hlci5jcHAKQEAgLTI2
LDggKzI2LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQcm9jZXNzTGF1bmNo
ZXIuaCIKIAotI2luY2x1ZGUgIldvcmtRdWV1ZS5oIgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRy
YXMuaD4KKyNpbmNsdWRlIDx3dGYvV29ya1F1ZXVlLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvUHJvY2Vzc0xh
dW5jaGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvUHJvY2Vzc0xhdW5j
aGVyLmgKaW5kZXggYmMxZjg2N2YzYzI5MTU1MjM2MzBjNjc2MTFmMDVjZTk3M2RlZDUzYi4uZDYx
YmQ3OWRiZGIwYzE4NzYyZDFmMjcwMDE2N2NhZTNhZWQ4ZjkzMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL1Byb2Nlc3NMYXVuY2hlci5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9Qcm9jZXNzTGF1bmNoZXIuaApAQCAtMjcsNyAr
MjcsNyBAQAogI2RlZmluZSBXZWJQcm9jZXNzTGF1bmNoZXJfaAogCiAjaW5jbHVkZSAiQ29ubmVj
dGlvbi5oIgotI2luY2x1ZGUgIlBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIuaCIKKyNpbmNsdWRl
IDx3dGYvUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9UaHJlYWRMYXVuY2hlci5oIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0xhdW5jaGVyL1RocmVhZExhdW5jaGVyLmgKaW5kZXggZjNhNTMxMmEyYzRmNzdl
YmYyMGZkMmM0ODk2NmYzNWFjYjBhZDhkMS4uOWM2YjEyNDk2ZjBlMzU2YmVlMmFiNWQ2ODU5NTNl
NmQxNmFhZDJiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVy
L1RocmVhZExhdW5jaGVyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVy
L1RocmVhZExhdW5jaGVyLmgKQEAgLTI3LDcgKzI3LDcgQEAKICNkZWZpbmUgVGhyZWFkTGF1bmNo
ZXJfaAogCiAjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgotI2luY2x1ZGUgIlBsYXRmb3JtUHJvY2Vz
c0lkZW50aWZpZXIuaCIKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5o
PgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAppbmRleCA1N2FiODZjMjQyOTNi
MWFkMjIyMjQxMmViNThlOWE5ZjU2YzhjNTQ4Li4wZTk1YmU1NGI3YTFhZWVhNTAwNDNiY2Y3NTQz
Y2YxYjE3MzYyNTkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCkBA
IC00MCw3ICs0MCw2IEBACiAjZW5kaWYKICNpbmNsdWRlICJMYXllclRyZWVDb250ZXh0LmgiCiAj
aW5jbHVkZSAiTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuaCIKLSNp
bmNsdWRlICJQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiU2FuZGJveEV4
dGVuc2lvbi5oIgogI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgogI2luY2x1ZGUgIldLQmFz
ZS5oIgpAQCAtNzMsNiArNzIsNyBAQAogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRl
IDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1BsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94
eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oCmluZGV4IDhl
NzY4YmZiNmE4ODlkOWFkNmIzNjAwMDc2OTRiMjU2NzZjZWE2ODYuLjY0MTlhN2EzNTM4YzYxZmU4
ZDQ1NzljMzA2ZDIzNGI2NTVkZGMxMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJQcm9jZXNzUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UHJvY2Vzc1Byb3h5LmgKQEAgLTI2LDcgKzI2LDYgQEAKICNpZm5kZWYgV2ViUHJvY2Vzc1Byb3h5
X2gKICNkZWZpbmUgV2ViUHJvY2Vzc1Byb3h5X2gKIAotI2luY2x1ZGUgIlBsYXRmb3JtUHJvY2Vz
c0lkZW50aWZpZXIuaCIKICNpbmNsdWRlICJQbHVnaW5JbmZvU3RvcmUuaCIKICNpbmNsdWRlICJQ
cm9jZXNzTGF1bmNoZXIuaCIKICNpbmNsdWRlICJQcm9jZXNzTW9kZWwuaCIKQEAgLTM5LDYgKzM4
LDcgQEAKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm1Qcm9j
ZXNzSWRlbnRpZmllci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCA2MDc3ZjZkM2UzOGE0NTEwMTIzOGI1NDIzNzhjYzI4N2UwNGRiYWYw
Li5lYWQ0NzhhNjg0MDg0NGYyYWVhZDNmNjY0MDNmYWEyMTkxY2MwYjAwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC00NzYsNyAr
NDc2LDYgQEAKIAkJQjYzNDAzRjkxNDkxMEQ1NzAwMTA3MEI1IC8qIEFQSU9iamVjdC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNjM0MDNGODE0OTEw
RDU3MDAxMDcwQjUgLyogQVBJT2JqZWN0LmNwcCAqLzsgfTsKIAkJQjg3OEI2MTUxMzM0MjhEQzAw
Njg4OEU5IC8qIENvcnJlY3Rpb25QYW5lbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQjg3OEI2MTMxMzM0MjhEQzAwNjg4OEU5IC8qIENvcnJlY3Rpb25Q
YW5lbC5oICovOyB9OwogCQlCODc4QjYxNjEzMzQyOERDMDA2ODg4RTkgLyogQ29ycmVjdGlvblBh
bmVsLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjg3
OEI2MTQxMzM0MjhEQzAwNjg4OEU5IC8qIENvcnJlY3Rpb25QYW5lbC5tbSAqLzsgfTsKLQkJQkMw
MDkyRjgxMTU4MzdBMzAwRTBBRTJBIC8qIFdvcmtRdWV1ZU1hYy5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzAwOTJGNjExNTgzN0EzMDBFMEFFMkEg
LyogV29ya1F1ZXVlTWFjLmNwcCAqLzsgfTsKIAkJQkMwMzJENzUxMEY0Mzc4RDAwNThDMTVBIC8q
IFdlYkNocm9tZUNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQkMwMzJENjAxMEY0Mzc4RDAwNThDMTVBIC8qIFdlYkNocm9tZUNsaWVudC5oICov
OyB9OwogCQlCQzAzMkQ3NzEwRjQzNzhEMDA1OEMxNUEgLyogV2ViQ29udGV4dE1lbnVDbGllbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMDMyRDYy
MTBGNDM3OEQwMDU4QzE1QSAvKiBXZWJDb250ZXh0TWVudUNsaWVudC5oICovOyB9OwogCQlCQzAz
MkQ3QjEwRjQzNzhEMDA1OEMxNUEgLyogV2ViRHJhZ0NsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMwMzJENjYxMEY0Mzc4RDAwNThDMTVBIC8q
IFdlYkRyYWdDbGllbnQuaCAqLzsgfTsKQEAgLTU2OSw4ICs1NjgsNiBAQAogCQlCQzJEMDIxNzEy
QUM0MUNCMDBFNzMyQTMgLyogU2FtZURvY3VtZW50TmF2aWdhdGlvblR5cGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMkQwMjE2MTJBQzQxQ0IwMEU3
MzJBMyAvKiBTYW1lRG9jdW1lbnROYXZpZ2F0aW9uVHlwZS5oICovOyB9OwogCQlCQzJEMDIxOTEy
QUM0MjZDMDBFNzMyQTMgLyogV0tQYWdlTG9hZFR5cGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzJEMDIxODEyQUM0MjZDMDBFNzMyQTMgLyogV0tQ
YWdlTG9hZFR5cGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJQkMyREZCQTMxMkE3NjFBNTAwRTczMkEzIC8qIFdlYlByZWZlcmVuY2VzQ0YuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMyREZCQTIx
MkE3NjFBNTAwRTczMkEzIC8qIFdlYlByZWZlcmVuY2VzQ0YuY3BwICovOyB9OwotCQlCQzJFNkU4
RDExNDE5NzE1MDBBNjNCMUUgLyogV29ya1F1ZXVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMkU2RTdEMTE0MTk3MEMwMEE2M0IxRSAvKiBXb3Jr
UXVldWUuY3BwICovOyB9OwotCQlCQzJFNkU4RTExNDE5NzE1MDBBNjNCMUUgLyogV29ya1F1ZXVl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzJFNkU3
RTExNDE5NzBDMDBBNjNCMUUgLyogV29ya1F1ZXVlLmggKi87IH07CiAJCUJDMzA2NUM0MTI1OTJG
ODkwMEU3MTI3OCAvKiBXZWJQcm9jZXNzTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQkMzMDY1QzMxMjU5MkY4OTAwRTcxMjc4IC8qIFdlYlByb2Nl
c3NNYWMubW0gKi87IH07CiAJCUJDMzA2NUZBMTI1OTM0NEUwMEU3MTI3OCAvKiBDYWNoZU1vZGVs
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzMwNjVG
OTEyNTkzNDRFMDBFNzEyNzggLyogQ2FjaGVNb2RlbC5oICovOyB9OwogCQlCQzMwNjZCRTEyNUE0
NDIxMDBFNzEyNzggLyogV2ViUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzMwNjZCQzEyNUE0NDIxMDBFNzEy
NzggLyogV2ViUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CkBAIC0xNTE0LDcgKzE1
MTEsNiBAQAogCQlCNjM0MDNGODE0OTEwRDU3MDAxMDcwQjUgLyogQVBJT2JqZWN0LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFQSU9iamVjdC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI4NzhCNjEzMTMzNDI4REMwMDY4ODhFOSAvKiBDb3JyZWN0
aW9uUGFuZWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29ycmVjdGlvblBh
bmVsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI4NzhCNjE0MTMzNDI4REMwMDY4
ODhFOSAvKiBDb3JyZWN0aW9uUGFuZWwubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBDb3JyZWN0aW9uUGFuZWwubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUJDMDA5MkY2MTE1ODM3QTMwMEUwQUUyQSAvKiBXb3JrUXVldWVNYWMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV29ya1F1ZXVlTWFjLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMwMzJENjAxMEY0Mzc4RDAwNThDMTVBIC8qIFdlYkNocm9t
ZUNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDaHJvbWVDbGll
bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMwMzJENjIxMEY0Mzc4RDAwNThD
MTVBIC8qIFdlYkNvbnRleHRNZW51Q2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdlYkNvbnRleHRNZW51Q2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUJDMDMyRDY2MTBGNDM3OEQwMDU4QzE1QSAvKiBXZWJEcmFnQ2xpZW50LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkRyYWdDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTE2MTMsOCArMTYwOSw2IEBACiAJCUJDMkQwMjE2MTJBQzQxQ0IwMEU3
MzJBMyAvKiBTYW1lRG9jdW1lbnROYXZpZ2F0aW9uVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTYW1lRG9jdW1lbnROYXZpZ2F0aW9uVHlwZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlCQzJEMDIxODEyQUM0MjZDMDBFNzMyQTMgLyogV0tQYWdlTG9hZFR5
cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLUGFnZUxvYWRUeXBlcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzJERkJBMjEyQTc2MUE1MDBFNzMyQTMg
LyogV2ViUHJlZmVyZW5jZXNDRi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBXZWJQcmVmZXJlbmNlc0NGLmNwcDsgcGF0aCA9IGNmL1dlYlByZWZlcmVuY2VzQ0YuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCQzJFNkU3RDExNDE5NzBDMDBBNjNCMUUg
LyogV29ya1F1ZXVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdv
cmtRdWV1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUJDMkU2RTdFMTE0MTk3
MEMwMEE2M0IxRSAvKiBXb3JrUXVldWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV29ya1F1ZXVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMzA2NUMzMTI1
OTJGODkwMEU3MTI3OCAvKiBXZWJQcm9jZXNzTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gV2ViUHJvY2Vzc01hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQkMzMDY1RjkxMjU5MzQ0RTAwRTcxMjc4IC8qIENhY2hlTW9kZWwuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FjaGVNb2RlbC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlCQzMwNjZCOTEyNUE0MzYzMDBFNzEyNzggLyogV2ViUHJvY2Vzcy5tZXNz
YWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXZWJQcm9jZXNzLm1lc3NhZ2VzLmluOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjI5OCw3ICsyMjkyLDYgQEAKIAkJCQkxQTI0
QkYzOTEyMDg5NkE2MDBGQkIwNTkgLyogU2hhcmVkTWVtb3J5TWFjLmNwcCAqLywKIAkJCQkyOTZC
RDg1QjE1MDE5QkMzMDA3MUY0MjQgLyogU3RyaW5nVXRpbGl0aWVzLmggKi8sCiAJCQkJMjk2QkQ4
NUMxNTAxOUJDMzAwNzFGNDI0IC8qIFN0cmluZ1V0aWxpdGllcy5tbSAqLywKLQkJCQlCQzAwOTJG
NjExNTgzN0EzMDBFMEFFMkEgLyogV29ya1F1ZXVlTWFjLmNwcCAqLywKIAkJCSk7CiAJCQlwYXRo
ID0gbWFjOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTMzMzYsOCArMzMyOSw2IEBA
CiAJCQkJQzBFM0FBNDQxMjA5RTJCQTAwQTQ5RDAxIC8qIE1vZHVsZS5oICovLAogCQkJCUJDODc4
MEZCMTE2MUMyQjgwMENDMjc2OCAvKiBQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmggKi8sCiAJ
CQkJMUEyNEJFRDMxMjA4OTREMTAwRkJCMDU5IC8qIFNoYXJlZE1lbW9yeS5oICovLAotCQkJCUJD
MkU2RTdEMTE0MTk3MEMwMEE2M0IxRSAvKiBXb3JrUXVldWUuY3BwICovLAotCQkJCUJDMkU2RTdF
MTE0MTk3MEMwMEE2M0IxRSAvKiBXb3JrUXVldWUuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gUGxh
dGZvcm07CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtNDE4OSw3ICs0MTgwLDYgQEAK
IAkJCQlCQzg2OTlCNTExNkFBREFBMDAyQTkyNUIgLyogV0tWaWV3LmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQzg2OTlCNzExNkFBREFBMDAyQTkyNUIgLyogV0tWaWV3SW50ZXJuYWwuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJGQTYxNzlGMTJGMEI5OUQwMDMzRTBDQSAvKiBXS1ZpZXdQcml2YXRlLmgg
aW4gSGVhZGVycyAqLywKLQkJCQlCQzJFNkU4RTExNDE5NzE1MDBBNjNCMUUgLyogV29ya1F1ZXVl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMTdCRjk5NjE0RDBBNzNFMDBBNUEwNjkgLyogTmV0c2Nh
cGVTYW5kYm94RnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0UwOTM3ODE0RkIxMjhD
MDAxMTM4RDkgLyogTGF5ZXJIb3N0aW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjk2
QkQ4NUQxNTAxOUJDMzAwNzFGNDI0IC8qIFN0cmluZ1V0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8s
CkBAIC00OTM2LDggKzQ5MjYsNiBAQAogCQkJCUJDNDA3NjJDMTI0RkYwNDAwMDY4RjIwQSAvKiBX
S1VSTFJlc3BvbnNlTlMubW0gaW4gU291cmNlcyAqLywKIAkJCQlGNjExM0UyODEyNkNFMTlCMDA1
N0QwQTcgLyogV0tVc2VyQ29udGVudFVSTFBhdHRlcm4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QkM4Njk5QjYxMTZBQURBQTAwMkE5MjVCIC8qIFdLVmlldy5tbSBpbiBTb3VyY2VzICovLAotCQkJ
CUJDMkU2RThEMTE0MTk3MTUwMEE2M0IxRSAvKiBXb3JrUXVldWUuY3BwIGluIFNvdXJjZXMgKi8s
Ci0JCQkJQkMwMDkyRjgxMTU4MzdBMzAwRTBBRTJBIC8qIFdvcmtRdWV1ZU1hYy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlFMTdCRjk5ODE0RDBBQTgzMDBBNUEwNjkgLyogTmV0c2NhcGVTYW5kYm94
RnVuY3Rpb25zLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNFMDkzNzcxNEZCMTI4QzAwMTEzOEQ5
IC8qIExheWVySG9zdGluZ0NvbnRleHQubW0gaW4gU291cmNlcyAqLywKIAkJCQkyOTZCRDg1RTE1
MDE5QkMzMDA3MUY0MjQgLyogU3RyaW5nVXRpbGl0aWVzLm1tIGluIFNvdXJjZXMgKi8sCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi93aW4vV2ViS2l0Mi52Y3Byb2ogYi9Tb3VyY2UvV2ViS2l0
Mi93aW4vV2ViS2l0Mi52Y3Byb2oKaW5kZXggMGEzOGM0YjgyMmE4MjQ3OThmZjhjNGVlMmYzY2Qy
NDg5YjdiNmQwZi4uMzcyNTJiNjE0MzgyNzY5Y2YyYmFlNmZhNWEzMDM2ZDMzYTAzMjVlNCAxMDA3
NTUKLS0tIGEvU291cmNlL1dlYktpdDIvd2luL1dlYktpdDIudmNwcm9qCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL3dpbi9XZWJLaXQyLnZjcHJvagpAQCAtMzkzNCwxNCArMzkzNCw2IEBACiAJCQkJUmVs
YXRpdmVQYXRoPSIuLlxQbGF0Zm9ybVxTaGFyZWRNZW1vcnkuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+
Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cUGxhdGZvcm1cV29ya1F1ZXVlLmNwcCIK
LQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cUGxhdGZv
cm1cV29ya1F1ZXVlLmgiCi0JCQkJPgotCQkJPC9GaWxlPgogCQkJPEZpbHRlcgogCQkJCU5hbWU9
ImNnIgogCQkJCT4KQEAgLTM5ODEsMTAgKzM5NzMsNiBAQAogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XFBsYXRmb3JtXHdpblxTaGFyZWRNZW1vcnlXaW4uY3BwIgogCQkJCQk+CiAJCQkJPC9GaWxlPgot
CQkJCTxGaWxlCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cUGxhdGZvcm1cd2luXFdvcmtRdWV1ZVdp
bi5jcHAiCi0JCQkJCT4KLQkJCQk8L0ZpbGU+CiAJCQk8L0ZpbHRlcj4KIAkJCTxGaWx0ZXIKIAkJ
CQlOYW1lPSJDb3JlSVBDIgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151241</attachid>
            <date>2012-07-09 06:00:04 -0700</date>
            <delta_ts>2012-07-09 06:03:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90780-20120709215945.patch</filename>
            <type>text/plain</type>
            <size>129598</size>
            <attacher name="Kwang Yul Seo">skyul</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyMDk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGZlNDBlYjkzNzY4NDhlYTgyZTgzYjEw
ZjllNzgyMGM1MDllMjdhMDMuLjkxYzAwZmY0NGFmMGIyODgzZjY0NDM4YWM1ZmY5MzkwNjg2OWZj
OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTI4IEBACisyMDEyLTA3LTA5ICBLd2FuZyBZdWwgU2VvICA8c2t5
dWxAY29tcGFueTEwMC5uZXQ+CisKKyAgICAgICAgTW92ZSBXb3JrUXVldWUgdG8gV1RGCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDc4MAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEN1cnJlbnRseSwgV29y
a1F1ZXVlIGlzIGluIFdlYktpdDIuIEJ5IG1vdmluZyBXb3JrUXVldWUgYW5kCisgICAgICAgIFBs
YXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIgdG8gV1RGLCBXZWJDb3JlIGNvZGUgY2FuIHVzZSBpdC4K
KworICAgICAgICBUaGlzIHBhdGNoIGlzIHJlcXVpcmVkIGZvciBwYXJhbGxlbCBpbWFnZSBkZWNv
ZGVycyBiZWNhdXNlCisgICAgICAgIFdvcmtRdWV1ZSBpcyB1c2VkIHRvIG1ha2UgaW1hZ2UgZGVj
b2Rpbmcgb2ZmIHRoZSBtYWluIHRocmVhZC4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3Qu
YW06CisgICAgICAgICogV1RGLnBybzoKKyAgICAgICAgKiBXVEYudmNwcm9qL1dURi52Y3Byb2o6
CisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3Rm
L0NNYWtlTGlzdHMudHh0OgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAg
ICAgKiB3dGYvUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYktpdDIvUGxhdGZvcm0vUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oLgorICAgICAgICAo
V1RGKToKKyAgICAgICAgKiB3dGYvV29ya1F1ZXVlLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtL1dvcmtRdWV1ZS5jcHAuCisgICAgICAgIChXVEYpOgorICAgICAgICAo
V1RGOjpXb3JrUXVldWU6OldvcmtRdWV1ZSk6CisgICAgICAgIChXVEY6OldvcmtRdWV1ZTo6fldv
cmtRdWV1ZSk6CisgICAgICAgIChXVEY6OldvcmtRdWV1ZTo6aW52YWxpZGF0ZSk6CisgICAgICAg
ICogd3RmL1dvcmtRdWV1ZS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvUGxhdGZvcm0v
V29ya1F1ZXVlLmguCisgICAgICAgIChXVEYpOgorICAgICAgICAoV29ya1F1ZXVlKToKKyAgICAg
ICAgKFdvcmtJdGVtV2luKToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpXb3JrSXRlbVdpbjo6
ZnVuY3Rpb24pOgorICAgICAgICAoV1RGOjpXb3JrUXVldWU6OldvcmtJdGVtV2luOjpxdWV1ZSk6
CisgICAgICAgIChIYW5kbGVXb3JrSXRlbSk6CisgICAgICAgIChXVEY6OldvcmtRdWV1ZTo6SGFu
ZGxlV29ya0l0ZW06OnNldFdhaXRIYW5kbGUpOgorICAgICAgICAoV1RGOjpXb3JrUXVldWU6Okhh
bmRsZVdvcmtJdGVtOjp3YWl0SGFuZGxlKToKKyAgICAgICAgKiB3dGYvZWZsL1dvcmtRdWV1ZUVm
bC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9lZmwvV29ya1F1ZXVl
RWZsLmNwcC4KKyAgICAgICAgKFRpbWVyV29ya0l0ZW0pOgorICAgICAgICAoVGltZXJXb3JrSXRl
bTo6VGltZXJXb3JrSXRlbSk6CisgICAgICAgIChUaW1lcldvcmtJdGVtOjp+VGltZXJXb3JrSXRl
bSk6CisgICAgICAgIChUaW1lcldvcmtJdGVtOjpmdW5jdGlvbik6CisgICAgICAgIChUaW1lcldv
cmtJdGVtOjpxdWV1ZSk6CisgICAgICAgIChUaW1lcldvcmtJdGVtOjp0aW1lcklEKToKKyAgICAg
ICAgKFdvcmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXplKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6
cGxhdGZvcm1JbnZhbGlkYXRlKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6cGVyZm9ybVdvcmspOgor
ICAgICAgICAoV29ya1F1ZXVlOjpwZXJmb3JtRmlsZURlc2NyaXB0b3JXb3JrKToKKyAgICAgICAg
KFdvcmtRdWV1ZTo6c2VuZE1lc3NhZ2VUb1RocmVhZCk6CisgICAgICAgIChXb3JrUXVldWU6Ondv
cmtRdWV1ZVRocmVhZCk6CisgICAgICAgIChXb3JrUXVldWU6OnJlZ2lzdGVyU29ja2V0RXZlbnRI
YW5kbGVyKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6dW5yZWdpc3RlclNvY2tldEV2ZW50SGFuZGxl
cik6CisgICAgICAgIChXb3JrUXVldWU6OmRpc3BhdGNoKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6
dGltZXJGaXJlZCk6CisgICAgICAgIChXb3JrUXVldWU6OmRpc3BhdGNoQWZ0ZXJEZWxheSk6Cisg
ICAgICAgICogd3RmL2d0ay9Xb3JrUXVldWVHdGsuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dl
YktpdDIvUGxhdGZvcm0vZ3RrL1dvcmtRdWV1ZUd0ay5jcHAuCisgICAgICAgIChXb3JrUXVldWU6
OkV2ZW50U291cmNlKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OkV2ZW50U291
cmNlKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OmNhbmNlbCk6CisgICAgICAg
IChXb3JrUXVldWU6OkV2ZW50U291cmNlOjpleGVjdXRlRXZlbnRTb3VyY2UpOgorICAgICAgICAo
V29ya1F1ZXVlOjpFdmVudFNvdXJjZTo6cGVyZm9ybVdvcmtPbmNlKToKKyAgICAgICAgKFdvcmtR
dWV1ZTo6RXZlbnRTb3VyY2U6OnBlcmZvcm1Xb3JrKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6RXZl
bnRTb3VyY2U6OnBlcmZvcm1Xb3JrT25UZXJtaW5hdGlvbik6CisgICAgICAgIChXb3JrUXVldWU6
OkV2ZW50U291cmNlOjpkZWxldGVFdmVudFNvdXJjZSk6CisgICAgICAgIChXb3JrUXVldWU6OnBs
YXRmb3JtSW5pdGlhbGl6ZSk6CisgICAgICAgIChXb3JrUXVldWU6OnBsYXRmb3JtSW52YWxpZGF0
ZSk6CisgICAgICAgIChXb3JrUXVldWU6OnN0YXJ0V29ya1F1ZXVlVGhyZWFkKToKKyAgICAgICAg
KFdvcmtRdWV1ZTo6d29ya1F1ZXVlVGhyZWFkQm9keSk6CisgICAgICAgIChXb3JrUXVldWU6OnJl
Z2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6dW5yZWdpc3Rl
ckV2ZW50U291cmNlSGFuZGxlcik6CisgICAgICAgIChXb3JrUXVldWU6OmRpc3BhdGNoT25Tb3Vy
Y2UpOgorICAgICAgICAoV29ya1F1ZXVlOjpkaXNwYXRjaCk6CisgICAgICAgIChXb3JrUXVldWU6
OmRpc3BhdGNoQWZ0ZXJEZWxheSk6CisgICAgICAgIChXb3JrUXVldWU6OmRpc3BhdGNoT25UZXJt
aW5hdGlvbik6CisgICAgICAgICogd3RmL21hYy9Xb3JrUXVldWVNYWMuY3BwOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYktpdDIvUGxhdGZvcm0vbWFjL1dvcmtRdWV1ZU1hYy5jcHAuCisgICAgICAg
IChXb3JrUXVldWU6OmV4ZWN1dGVGdW5jdGlvbik6CisgICAgICAgIChXb3JrUXVldWU6OmRpc3Bh
dGNoKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6ZGlzcGF0Y2hBZnRlckRlbGF5KToKKyAgICAgICAg
KFdvcmtRdWV1ZTo6RXZlbnRTb3VyY2UpOgorICAgICAgICAoV29ya1F1ZXVlOjpFdmVudFNvdXJj
ZTo6RXZlbnRTb3VyY2UpOgorICAgICAgICAoV29ya1F1ZXVlOjpFdmVudFNvdXJjZTo6ZGlzcGF0
Y2hTb3VyY2UpOgorICAgICAgICAoV29ya1F1ZXVlOjpFdmVudFNvdXJjZTo6ZXZlbnRIYW5kbGVy
KToKKyAgICAgICAgKFdvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OmNhbmNlbEhhbmRsZXIpOgorICAg
ICAgICAoV29ya1F1ZXVlOjpFdmVudFNvdXJjZTo6ZmluYWxpemVIYW5kbGVyKToKKyAgICAgICAg
KFdvcmtRdWV1ZTo6cmVnaXN0ZXJNYWNoUG9ydEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXb3Jr
UXVldWU6OnVucmVnaXN0ZXJNYWNoUG9ydEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXb3JrUXVl
dWU6OnBsYXRmb3JtSW5pdGlhbGl6ZSk6CisgICAgICAgIChXb3JrUXVldWU6OnBsYXRmb3JtSW52
YWxpZGF0ZSk6CisgICAgICAgICogd3RmL3F0L1dvcmtRdWV1ZVF0LmNwcDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3F0L1dvcmtRdWV1ZVF0LmNwcC4KKyAgICAgICAgKFdU
Rik6CisgICAgICAgIChXb3JrUXVldWU6OldvcmtJdGVtUXQpOgorICAgICAgICAoV1RGOjpXb3Jr
UXVldWU6OldvcmtJdGVtUXQ6OldvcmtJdGVtUXQpOgorICAgICAgICAoV1RGOjpXb3JrUXVldWU6
OldvcmtJdGVtUXQ6On5Xb3JrSXRlbVF0KToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpXb3Jr
SXRlbVF0OjpleGVjdXRlKToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpXb3JrSXRlbVF0Ojpl
eGVjdXRlQW5kRGVsZXRlKToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpXb3JrSXRlbVF0Ojp0
aW1lckV2ZW50KToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpyZWdpc3RlclNvY2tldEV2ZW50
SGFuZGxlcik6CisgICAgICAgIChXVEY6OldvcmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXplKToK
KyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpwbGF0Zm9ybUludmFsaWRhdGUpOgorICAgICAgICAo
V1RGOjpXb3JrUXVldWU6OmRpc3BhdGNoKToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpkaXNw
YXRjaEFmdGVyRGVsYXkpOgorICAgICAgICAoV1RGOjpXb3JrUXVldWU6OmRpc3BhdGNoT25UZXJt
aW5hdGlvbik6CisgICAgICAgICogd3RmL3dpbi9Xb3JrUXVldWVXaW4uY3BwOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYktpdDIvUGxhdGZvcm0vd2luL1dvcmtRdWV1ZVdpbi5jcHAuCisgICAgICAg
IChXb3JrUXVldWU6OldvcmtJdGVtV2luOjpXb3JrSXRlbVdpbik6CisgICAgICAgIChXb3JrUXVl
dWU6OldvcmtJdGVtV2luOjpjcmVhdGUpOgorICAgICAgICAoV29ya1F1ZXVlOjpXb3JrSXRlbVdp
bjo6fldvcmtJdGVtV2luKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6SGFuZGxlV29ya0l0ZW06Okhh
bmRsZVdvcmtJdGVtKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6SGFuZGxlV29ya0l0ZW06OmNyZWF0
ZUJ5QWRvcHRpbmdIYW5kbGUpOgorICAgICAgICAoV29ya1F1ZXVlOjpIYW5kbGVXb3JrSXRlbTo6
fkhhbmRsZVdvcmtJdGVtKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6aGFuZGxlQ2FsbGJhY2spOgor
ICAgICAgICAoV29ya1F1ZXVlOjpyZWdpc3RlckhhbmRsZSk6CisgICAgICAgIChXb3JrUXVldWU6
OnVucmVnaXN0ZXJBbmRDbG9zZUhhbmRsZSk6CisgICAgICAgIChXb3JrUXVldWU6OndvcmtUaHJl
YWRDYWxsYmFjayk6CisgICAgICAgIChXb3JrUXVldWU6OnBlcmZvcm1Xb3JrT25SZWdpc3RlcmVk
V29ya1RocmVhZCk6CisgICAgICAgIChXb3JrUXVldWU6OnBsYXRmb3JtSW5pdGlhbGl6ZSk6Cisg
ICAgICAgIChXb3JrUXVldWU6OnRyeVJlZ2lzdGVyQXNXb3JrVGhyZWFkKToKKyAgICAgICAgKFdv
cmtRdWV1ZTo6dW5yZWdpc3RlckFzV29ya1RocmVhZCk6CisgICAgICAgIChXb3JrUXVldWU6OnBs
YXRmb3JtSW52YWxpZGF0ZSk6CisgICAgICAgIChXb3JrUXVldWU6OmRpc3BhdGNoKToKKyAgICAg
ICAgKFRpbWVyQ29udGV4dDo6Y3JlYXRlKToKKyAgICAgICAgKFRpbWVyQ29udGV4dCk6CisgICAg
ICAgIChUaW1lckNvbnRleHQ6OlRpbWVyQ29udGV4dCk6CisgICAgICAgIChXb3JrUXVldWU6OnRp
bWVyQ2FsbGJhY2spOgorICAgICAgICAoV29ya1F1ZXVlOjpkaXNwYXRjaEFmdGVyRGVsYXkpOgor
ICAgICAgICAoV29ya1F1ZXVlOjp1bnJlZ2lzdGVyV2FpdEFuZERlc3Ryb3lJdGVtU29vbik6Cisg
ICAgICAgIChXb3JrUXVldWU6OnVucmVnaXN0ZXJXYWl0QW5kRGVzdHJveUl0ZW1DYWxsYmFjayk6
CisKIDIwMTItMDctMDggIExhc3psbyBHb21ib3MgIDxsYXN6bG8uMS5nb21ib3NAbm9raWEuY29t
PgogCiAgICAgICAgIEludHJvZHVjZSBhIGJ1aWxkIGZsYWcgZm9yIGxvdyBxdWFsaXR5IEpQRUcg
aW1hZ2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cKaW5kZXggMDhlMGZlOWFmN2I4ZTBkYzUxNGJiMjVhNjRkOGY2NGE5ZDVm
MTlhZS4uOTE4YzBkNzVjYjMxYTZlNmI2NjFjMzc4NWNjZWY2ZDk4MmJiMzZiMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDMyIEBACisyMDEyLTA3LTA5ICBLd2FuZyBZdWwgU2VvICA8c2t5dWxAY29t
cGFueTEwMC5uZXQ+CisKKyAgICAgICAgTW92ZSBXb3JrUXVldWUgdG8gV1RGCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDc4MAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEN1cnJlbnRseSwgV29ya1F1ZXVl
IGlzIGluIFdlYktpdDIuIEJ5IG1vdmluZyBXb3JrUXVldWUgYW5kCisgICAgICAgIFBsYXRmb3Jt
UHJvY2Vzc0lkZW50aWZpZXIgdG8gV1RGLCBXZWJDb3JlIGNvZGUgY2FuIHVzZSBpdC4KKworICAg
ICAgICBUaGlzIHBhdGNoIGlzIHJlcXVpcmVkIGZvciBwYXJhbGxlbCBpbWFnZSBkZWNvZGVycyBi
ZWNhdXNlCisgICAgICAgIFdvcmtRdWV1ZSBpcyB1c2VkIHRvIG1ha2UgaW1hZ2UgZGVjb2Rpbmcg
b2ZmIHRoZSBtYWluIHRocmVhZC4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAg
ICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogUGxhdGZvcm0vQ29yZUlQQy9Db25u
ZWN0aW9uLmg6CisgICAgICAgIChDb25uZWN0aW9uKToKKyAgICAgICAgKiBQbGF0Zm9ybS9Db3Jl
SVBDL3VuaXgvQ29ubmVjdGlvblVuaXguY3BwOgorICAgICAgICAoQ29yZUlQQzo6Q29ubmVjdGlv
bjo6c2V0U2hvdWxkQ2xvc2VDb25uZWN0aW9uT25Qcm9jZXNzVGVybWluYXRpb24pOgorICAgICAg
ICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICog
VUlQcm9jZXNzL0xhdW5jaGVyL1Byb2Nlc3NMYXVuY2hlci5jcHA6CisgICAgICAgICogVUlQcm9j
ZXNzL0xhdW5jaGVyL1Byb2Nlc3NMYXVuY2hlci5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9MYXVu
Y2hlci9UaHJlYWRMYXVuY2hlci5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHku
aDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5Lmg6CisgICAgICAgICogV2Vi
S2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHdpbi9XZWJLaXQyLnZj
cHJvajoKKwogMjAxMi0wNy0wNiAgQ2hyaXN0b3BoZSBEdW1leiAgPGNocmlzdG9waGUuZHVtZXpA
aW50ZWwuY29tPgogCiAgICAgICAgIFtXSzJdIEFkZCBzdXBwb3J0IGZvciBOZXR3b3JrIEluZm9y
bWF0aW9uIEFQSQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9HTlVtYWtlZmlsZS5saXN0LmFtIGIv
U291cmNlL1dURi9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IGM1ZjQ4YTZjZTU1OWEyNGNjMjBi
NzA3NThkZjhiYzRhODRkYzllZWQuLmNmMmEwOGU3Yzk5ZTE2MmZmOWFmMWZmNzE3ZDljOGVjOGVk
ZDA2MmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9T
b3VyY2UvV1RGL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTE2NCw2ICsxNjQsOCBAQCB3dGZfc291
cmNlcyArPSBcCiAgICAgU291cmNlL1dURi93dGYvVmFsdWVDaGVjay5oIFwKICAgICBTb3VyY2Uv
V1RGL3d0Zi9WZWN0b3IuaCBcCiAgICAgU291cmNlL1dURi93dGYvVmVjdG9yVHJhaXRzLmggXAor
ICAgIFNvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5jcHAgXAorICAgIFNvdXJjZS9XVEYvd3RmL1dv
cmtRdWV1ZS5oIFwKICAgICBTb3VyY2UvV1RGL3d0Zi9XVEZUaHJlYWREYXRhLmNwcCBcCiAgICAg
U291cmNlL1dURi93dGYvV1RGVGhyZWFkRGF0YS5oIFwKICAgICBTb3VyY2UvV1RGL3d0Zi9kdG9h
LmNwcCBcCkBAIC0xOTQsNiArMTk2LDcgQEAgd3RmX3NvdXJjZXMgKz0gXAogICAgIFNvdXJjZS9X
VEYvd3RmL2dvYmplY3QvR2xpYlV0aWxpdGllcy5jcHAgXAogICAgIFNvdXJjZS9XVEYvd3RmL2dv
YmplY3QvR2xpYlV0aWxpdGllcy5oIFwKICAgICBTb3VyY2UvV1RGL3d0Zi9ndGsvTWFpblRocmVh
ZEd0ay5jcHAgXAorICAgIFNvdXJjZS9XVEYvd3RmL2d0ay9Xb3JrUXVldWVHdGsuY3BwIFwKICAg
ICBTb3VyY2UvV1RGL3d0Zi90ZXh0L0FTQ0lJRmFzdFBhdGguaCBcCiAgICAgU291cmNlL1dURi93
dGYvdGV4dC9BdG9taWNTdHJpbmcuY3BwIFwKICAgICBTb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21p
Y1N0cmluZy5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnBybyBiL1NvdXJjZS9XVEYv
V1RGLnBybwppbmRleCAwOTYyZWYwYjUwYTUxN2JkMGUyZDQ1NjJkZjhkZWZkNmY1MWExZjA0Li44
ODZiMmYzYTdiNmUzYTg1NWRkYjA2MzFiYjc2NzU1NGU1Mjc1OGNiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL1dURi5wcm8KKysrIGIvU291cmNlL1dURi9XVEYucHJvCkBAIC0xNjMsNiArMTYzLDcg
QEAgSEVBREVSUyArPSBcCiAgICAgVmVjdG9yLmggXAogICAgIFZlY3RvclRyYWl0cy5oIFwKICAg
ICBWTVRhZ3MuaCBcCisgICAgV29ya1F1ZXVlLmggXAogICAgIFdURlRocmVhZERhdGEuaAogCiB1
bml4OiBIRUFERVJTICs9IFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaApAQCAtMTk5LDYg
KzIwMCw3IEBAIFNPVVJDRVMgKz0gXAogICAgIE9TUmFuZG9tU291cmNlLmNwcCBcCiAgICAgcXQv
TWFpblRocmVhZFF0LmNwcCBcCiAgICAgcXQvU3RyaW5nUXQuY3BwIFwKKyAgICBxdC9Xb3JrUXVl
dWVRdC5jcHAgXAogICAgIFBhZ2VBbGxvY2F0aW9uQWxpZ25lZC5jcHAgXAogICAgIFBhZ2VCbG9j
ay5jcHAgXAogICAgIFBhcmFsbGVsSm9ic0dlbmVyaWMuY3BwIFwKQEAgLTIwOSw2ICsyMTEsNyBA
QCBTT1VSQ0VTICs9IFwKICAgICBUQ1N5c3RlbUFsbG9jLmNwcCBcCiAgICAgVGhyZWFkaW5nLmNw
cCBcCiAgICAgVHlwZVRyYWl0cy5jcHAgXAorICAgIFdvcmtRdWV1ZS5jcHAgXAogICAgIFdURlRo
cmVhZERhdGEuY3BwIFwKICAgICB0ZXh0L0F0b21pY1N0cmluZy5jcHAgXAogICAgIHRleHQvQ1N0
cmluZy5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9XVEYudmNwcm9qL1dURi52Y3Byb2og
Yi9Tb3VyY2UvV1RGL1dURi52Y3Byb2ovV1RGLnZjcHJvagppbmRleCAyMTkwZGFlMWVmZmVhZTMz
OTUzMzI3ZTNjYjczZTc3ZTZlZTQ2ZDU4Li4xY2M3YWU3MTk1ZDE3M2FiNGU2OTg1Zjg1ZWNjODc1
ZDVmMWM0N2NhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi52Y3Byb2ovV1RGLnZjcHJvagor
KysgYi9Tb3VyY2UvV1RGL1dURi52Y3Byb2ovV1RGLnZjcHJvagpAQCAtMzQzLDYgKzM0MywxMCBA
QAogCQkJCVJlbGF0aXZlUGF0aD0iLi5cd3RmXHdpblxPd25QdHJXaW4uY3BwIgogCQkJCT4KIAkJ
CTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlx3dGZcd2luXFdvcmtRdWV1
ZVdpbi5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgogCQk8L0ZpbHRlcj4KIAkJPEZpbHRlcgogCQkJ
TmFtZT0idW5pY29kZSIKQEAgLTEyMTMsNiArMTIxNywxNCBAQAogCQkJPgogCQk8L0ZpbGU+CiAJ
CTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXHd0ZlxXb3JrUXVldWUuY3BwIgorCQkJPgorCQk8
L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXHd0ZlxXb3JrUXVldWUuaCIKKwkJ
CT4KKwkJPC9GaWxlPgorCQk8RmlsZQogCQkJUmVsYXRpdmVQYXRoPSIuLlx3dGZcV1RGVGhyZWFk
RGF0YS5jcHAiCiAJCQk+CiAJCTwvRmlsZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCmluZGV4IDc3MjA0NjFlMjY0NjYxZmM4ZTk0MzVlOTA4ODE2NzRiY2QxYjc2NTgu
LjU4NTBlNzAzYmQzY2ZmM2JlNzY2YmRlYzA4NjVkM2FmNjM2MmZhYzkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dURi9X
VEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjM5LDYgKzIzOSw5IEBACiAJCUE4QTQ3
NDdFMTUxQTgyNUIwMDQxMjNGRiAvKiBWZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MzcwMTUxQTgyNUIwMDQxMjNGRiAvKiBWZWN0b3Iu
aCAqLzsgfTsKIAkJQThBNDc0N0YxNTFBODI1QjAwNDEyM0ZGIC8qIFZlY3RvclRyYWl0cy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDczNzExNTFB
ODI1QjAwNDEyM0ZGIC8qIFZlY3RvclRyYWl0cy5oICovOyB9OwogCQlBOEE0NzQ4MDE1MUE4MjVC
MDA0MTIzRkYgLyogVk1UYWdzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBOEE0NzM3MjE1MUE4MjVCMDA0MTIzRkYgLyogVk1UYWdzLmggKi87IH07CisJ
CUJDMkU2RThEMTE0MTk3MTUwMEE2M0IxRSAvKiBXb3JrUXVldWUuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMyRTZFN0QxMTQxOTcwQzAwQTYzQjFF
IC8qIFdvcmtRdWV1ZS5jcHAgKi87IH07CisJCUJDMkU2RThFMTE0MTk3MTUwMEE2M0IxRSAvKiBX
b3JrUXVldWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEJDMkU2RTdFMTE0MTk3MEMwMEE2M0IxRSAvKiBXb3JrUXVldWUuaCAqLzsgfTsKKwkJQkMwMDky
RjgxMTU4MzdBMzAwRTBBRTJBIC8qIFdvcmtRdWV1ZU1hYy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzAwOTJGNjExNTgzN0EzMDBFMEFFMkEgLyog
V29ya1F1ZXVlTWFjLmNwcCAqLzsgfTsKIAkJQThBNDc0ODYxNTFBODI1QjAwNDEyM0ZGIC8qIFdU
RlRocmVhZERhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQThBNDczN0ExNTFBODI1QjAwNDEyM0ZGIC8qIFdURlRocmVhZERhdGEuY3BwICovOyB9
OwogCQlBOEE0NzQ4NzE1MUE4MjVCMDA0MTIzRkYgLyogV1RGVGhyZWFkRGF0YS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDczN0IxNTFBODI1QjAw
NDEyM0ZGIC8qIFdURlRocmVhZERhdGEuaCAqLzsgfTsKIAkJQThBNDc0OEMxNTFBODI2NDAwNDEy
M0ZGIC8qIGNvbmZpZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQThBNDc0OEIxNTFBODI2NDAwNDEyM0ZGIC8qIGNvbmZpZy5oICovOyB9OwpAQCAtNDg3
LDYgKzQ5MCw5IEBACiAJCUE4QTQ3MzcwMTUxQTgyNUIwMDQxMjNGRiAvKiBWZWN0b3IuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUE4QTQ3MzcxMTUxQTgyNUIwMDQxMjNGRiAvKiBWZWN0b3JUcmFpdHMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmVjdG9yVHJhaXRzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QTQ3MzcyMTUxQTgyNUIwMDQxMjNGRiAvKiBWTVRhZ3Mu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVk1UYWdzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUJDMkU2RTdEMTE0MTk3MEMwMEE2M0IxRSAvKiBXb3JrUXVldWUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV29ya1F1ZXVlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkMyRTZFN0UxMTQxOTcwQzAwQTYzQjFFIC8q
IFdvcmtRdWV1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXb3JrUXVldWUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkMwMDkyRjYxMTU4MzdBMzAwRTBBRTJB
IC8qIFdvcmtRdWV1ZU1hYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXb3JrUXVldWVNYWMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEE0NzM3
QTE1MUE4MjVCMDA0MTIzRkYgLyogV1RGVGhyZWFkRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBXVEZUaHJlYWREYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQThBNDczN0IxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlRocmVhZERhdGEuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV1RGVGhyZWFkRGF0YS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlBOEE0NzQ4QjE1MUE4MjY0MDA0MTIzRkYgLyogY29uZmln
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGNvbmZpZy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtNzE3LDYgKzcyMyw5IEBACiAJCQkJQThBNDczNzAxNTFBODI1
QjAwNDEyM0ZGIC8qIFZlY3Rvci5oICovLAogCQkJCUE4QTQ3MzcxMTUxQTgyNUIwMDQxMjNGRiAv
KiBWZWN0b3JUcmFpdHMuaCAqLywKIAkJCQlBOEE0NzM3MjE1MUE4MjVCMDA0MTIzRkYgLyogVk1U
YWdzLmggKi8sCisJCQkJQkMyRTZFN0QxMTQxOTcwQzAwQTYzQjFFIC8qIFdvcmtRdWV1ZS5jcHAg
Ki8sCisJCQkJQkMyRTZFN0UxMTQxOTcwQzAwQTYzQjFFIC8qIFdvcmtRdWV1ZS5oICovLAorCQkJ
CUJDMDA5MkY2MTE1ODM3QTMwMEUwQUUyQSAvKiBXb3JrUXVldWVNYWMuY3BwICovLAogCQkJCUE4
QTQ3MzdBMTUxQTgyNUIwMDQxMjNGRiAvKiBXVEZUaHJlYWREYXRhLmNwcCAqLywKIAkJCQlBOEE0
NzM3QjE1MUE4MjVCMDA0MTIzRkYgLyogV1RGVGhyZWFkRGF0YS5oICovLAogCQkJCUE4NzZEQkQ3
MTUxODE2RTUwMERBREI5NSAvKiBQbGF0Zm9ybS5oICovLApAQCAtMTAzNyw2ICsxMDQ2LDcgQEAK
IAkJCQlBOEE0NzQ3RTE1MUE4MjVCMDA0MTIzRkYgLyogVmVjdG9yLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBOEE0NzQ3RjE1MUE4MjVCMDA0MTIzRkYgLyogVmVjdG9yVHJhaXRzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBOEE0NzQ4MDE1MUE4MjVCMDA0MTIzRkYgLyogVk1UYWdzLmggaW4gSGVhZGVy
cyAqLywKKwkJCQlCQzJFNkU4RTExNDE5NzE1MDBBNjNCMUUgLyogV29ya1F1ZXVlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBOEE0NzQ4NzE1MUE4MjVCMDA0MTIzRkYgLyogV1RGVGhyZWFkRGF0YS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0OEMxNTFBODI2NDAwNDEyM0ZGIC8qIGNvbmZpZy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMTQzRjYxMjAxNTY1RjBGOTAwREI1MTRBIC8qIFJBTVNpemUu
aCBpbiBIZWFkZXJzICovLApAQCAtMTE4Niw2ICsxMTk2LDggQEAKIAkJCQlBOEE0NzQ3NDE1MUE4
MjVCMDA0MTIzRkYgLyogVVJMQ2hhcmFjdGVyVHlwZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QThBNDc0NzcxNTFBODI1QjAwNDEyM0ZGIC8qIFVSTEVzY2FwZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBOEE0NzQ3QjE1MUE4MjVCMDA0MTIzRkYgLyogVVJMU2VnbWVudHMuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJQkMyRTZFOEQxMTQxOTcxNTAwQTYzQjFFIC8qIFdvcmtRdWV1ZS5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQlCQzAwOTJGODExNTgzN0EzMDBFMEFFMkEgLyogV29ya1F1ZXVlTWFj
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDg2MTUxQTgyNUIwMDQxMjNGRiAvKiBXVEZU
aHJlYWREYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0M0Y2MTFGMTU2NUYwRjkwMERCNTE0
QSAvKiBSQU1TaXplLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQK
aW5kZXggMjc0ZjA0Yzk3NDkzMTlhZWY0ODA0NDc5MTZkZDIyODI3MjUwODY4Zi4uYmU5NTRmMDQz
ODNkOWI4ZjliZTQzOTkxMDFlZTAyZmViZGY0MmFmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93
dGYvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKQEAg
LTEwMiw2ICsxMDIsNyBAQCBTRVQoV1RGX0hFQURFUlMKICAgICBWYWx1ZUNoZWNrLmgKICAgICBW
ZWN0b3IuaAogICAgIFZlY3RvclRyYWl0cy5oCisgICAgV29ya1F1ZXVlLmgKICAgICBXVEZUaHJl
YWREYXRhLmgKICAgICBkdG9hLmgKIApAQCAtMTYxLDYgKzE2Miw3IEBAIFNFVChXVEZfU09VUkNF
UwogICAgIFN0cmluZ0V4dHJhcy5jcHAKICAgICBUaHJlYWRpbmcuY3BwCiAgICAgVHlwZVRyYWl0
cy5jcHAKKyAgICBXb3JrUXVldWUuY3BwCiAgICAgV1RGVGhyZWFkRGF0YS5jcHAKICAgICBkdG9h
LmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVmbC5jbWFrZSBiL1Nv
dXJjZS9XVEYvd3RmL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IDFhMTNkYmJhMzU1ODRlMDU2YzQ5
MjkxZTM4N2EzMjI1NzEwZDEzMDguLmZkMTdmNTc4NWVkYmZkN2EyNzE4MmI0YTNkZWEyNGYwOTFl
ZmQ4NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBi
L1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC0xLDYgKzEsNyBAQAogTElTVChB
UFBFTkQgV1RGX1NPVVJDRVMKICAgICBlZmwvTWFpblRocmVhZEVmbC5jcHAKICAgICBlZmwvT3du
UHRyRWZsLmNwcAorICAgIGVmbC9Xb3JrUXVldWVFZmwuY3BwCiAgICAgZ29iamVjdC9HT3duUHRy
LmNwcAogICAgIGdvYmplY3QvR1JlZlB0ci5jcHAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1Q
cm9jZXNzSWRlbnRpZmllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY3ZmY1M2JjZDZjOWZiNGYyOTc3YTg4Yzg0
Yjc2OWMwZDhiZmQ3MTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9y
bVByb2Nlc3NJZGVudGlmaWVyLmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI2lm
bmRlZiBQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyX2gKKyNkZWZpbmUgUGxhdGZvcm1Qcm9jZXNz
SWRlbnRpZmllcl9oCisKKyNpZiBQTEFURk9STShRVCkKK2NsYXNzIFFQcm9jZXNzOworI2VsaWYg
UExBVEZPUk0oRUZMKQorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBX
VEYgeworCisjaWYgUExBVEZPUk0oTUFDKQordHlwZWRlZiBwaWRfdCBQbGF0Zm9ybVByb2Nlc3NJ
ZGVudGlmaWVyOworI2VsaWYgUExBVEZPUk0oV0lOKQordHlwZWRlZiBIQU5ETEUgUGxhdGZvcm1Q
cm9jZXNzSWRlbnRpZmllcjsKKyNlbGlmIFBMQVRGT1JNKFFUKQordHlwZWRlZiBRUHJvY2Vzcyog
UGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllcjsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyNpZmRlZiBH
X09TX1dJTjMyCit0eXBlZGVmIHZvaWQqIEdQaWQ7CisjZWxzZQordHlwZWRlZiBpbnQgR1BpZDsK
KyNlbmRpZgordHlwZWRlZiBHUGlkIFBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXI7CisjZWxpZiBQ
TEFURk9STShFRkwpCit0eXBlZGVmIHBpZF90IFBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXI7Cisj
ZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6UGxhdGZvcm1Qcm9jZXNz
SWRlbnRpZmllcjsKKworI2VuZGlmIC8vIFBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXJfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvV29ya1F1ZXVlLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1dv
cmtRdWV1ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGY1ZmQxNGViNGJjOWU1NTIwMTQ0MmMzMjhkYmFmMmYz
NjY1OGY2ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5jcHAK
QEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJXb3JrUXVldWUuaCIKKworbmFtZXNwYWNlIFdURiB7CisKK1dvcmtRdWV1ZTo6V29ya1F1
ZXVlKGNvbnN0IGNoYXIqIG5hbWUpCisgICAgOiBtX2lzVmFsaWQodHJ1ZSkKK3sKKyAgICBwbGF0
Zm9ybUluaXRpYWxpemUobmFtZSk7Cit9CisKK1dvcmtRdWV1ZTo6fldvcmtRdWV1ZSgpCit7Cisj
aWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2lzVmFsaWRNdXRl
eCk7CisgICAgQVNTRVJUKCFtX2lzVmFsaWQpOworI2VuZGlmCit9CisKK3ZvaWQgV29ya1F1ZXVl
OjppbnZhbGlkYXRlKCkKK3sKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2lz
VmFsaWRNdXRleCk7CisgICAgICAgIG1faXNWYWxpZCA9IGZhbHNlOworICAgIH0KKworICAgIHBs
YXRmb3JtSW52YWxpZGF0ZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5oIGIvU291cmNlL1dURi93dGYvV29ya1F1ZXVlLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNWMwY2I5ODY0OTJjNWQxNjRhZWRkOGE5YWI1ZjJlOWQ3MTk0YjlhMgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5oCkBAIC0wLDAgKzEsMjE2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXb3JrUXVldWVf
aAorI2RlZmluZSBXb3JrUXVldWVfaAorCisjaWYgT1MoREFSV0lOKQorI2lmIEhBVkUoRElTUEFU
Q0hfSCkKKyNpbmNsdWRlIDxkaXNwYXRjaC9kaXNwYXRjaC5oPgorI2VuZGlmCisjZW5kaWYKKwor
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uYWwuaD4KKyNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorCisjaWYgKFBMQVRGT1JNKFFUKSAmJiAhT1MoREFSV0lOKSkg
fHwgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShFRkwpCisjaW5jbHVkZSAiUGxhdGZvcm1Qcm9j
ZXNzSWRlbnRpZmllci5oIgorI2VuZGlmCisKKyNpZiBQTEFURk9STShRVCkgJiYgIU9TKERBUldJ
TikKKyNpbmNsdWRlIDxRU29ja2V0Tm90aWZpZXI+CitjbGFzcyBRT2JqZWN0OworY2xhc3MgUVRo
cmVhZDsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRy
Lmg+Cit0eXBlZGVmIGdib29sZWFuICgqR1NvdXJjZUZ1bmMpIChncG9pbnRlciBkYXRhKTsKKyNl
bGlmIFBMQVRGT1JNKEVGTCkKKyNpbmNsdWRlIDxFY29yZS5oPgorI2VuZGlmCisKK25hbWVzcGFj
ZSBXVEYgeworCitjbGFzcyBXb3JrUXVldWUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFdv
cmtRdWV1ZSk7CisKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBXb3JrUXVldWUoY29uc3QgY2hhciog
bmFtZSk7CisgICAgfldvcmtRdWV1ZSgpOworCisgICAgLy8gV2lsbCBkaXNwYXRjaCB0aGUgZ2l2
ZW4gZnVuY3Rpb24gdG8gcnVuIGFzIHNvb24gYXMgcG9zc2libGUuCisgICAgdm9pZCBkaXNwYXRj
aChjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7CisKKyAgICAvLyBXaWxsIGRpc3BhdGNoIHRoZSBn
aXZlbiBmdW5jdGlvbiBhZnRlciB0aGUgZ2l2ZW4gZGVsYXkgKGluIHNlY29uZHMpLgorICAgIHZv
aWQgZGlzcGF0Y2hBZnRlckRlbGF5KGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mLCBkb3VibGUgZGVs
YXkpOworCisgICAgdm9pZCBpbnZhbGlkYXRlKCk7CisKKyNpZiBPUyhEQVJXSU4pCisgICAgZW51
bSBNYWNoUG9ydEV2ZW50VHlwZSB7CisgICAgICAgIC8vIEZpcmVkIHdoZW4gdGhlcmUgaXMgZGF0
YSBvbiB0aGUgZ2l2ZW4gcmVjZWl2ZSByaWdodC4KKyAgICAgICAgTWFjaFBvcnREYXRhQXZhaWxh
YmxlLAorICAgICAgICAKKyAgICAgICAgLy8gRmlyZWQgd2hlbiB0aGUgcmVjZWl2ZSByaWdodCBm
b3IgdGhpcyBzZW5kIHJpZ2h0IGhhcyBiZWVuIGRlc3Ryb3llZC4KKyAgICAgICAgTWFjaFBvcnRE
ZWFkTmFtZU5vdGlmaWNhdGlvbgorICAgIH07CisgICAgCisgICAgLy8gV2lsbCBleGVjdXRlIHRo
ZSBnaXZlbiBmdW5jdGlvbiB3aGVuZXZlciB0aGUgZ2l2ZW4gbWFjaCBwb3J0IGV2ZW50IGZpcmVz
LgorICAgIC8vIE5vdGUgdGhhdCB0aGlzIHdpbGwgYWRvcHQgdGhlIG1hY2ggcG9ydCBhbmQgZGVz
dHJveSBpdCB3aGVuIHRoZSB3b3JrIHF1ZXVlIGlzIGludmFsaWRhdGVkLgorICAgIHZvaWQgcmVn
aXN0ZXJNYWNoUG9ydEV2ZW50SGFuZGxlcihtYWNoX3BvcnRfdCwgTWFjaFBvcnRFdmVudFR5cGUs
IGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsKKyAgICB2b2lkIHVucmVnaXN0ZXJNYWNoUG9ydEV2
ZW50SGFuZGxlcihtYWNoX3BvcnRfdCk7CisjZWxpZiBQTEFURk9STShXSU4pCisgICAgdm9pZCBy
ZWdpc3RlckhhbmRsZShIQU5ETEUsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsKKyAgICB2b2lk
IHVucmVnaXN0ZXJBbmRDbG9zZUhhbmRsZShIQU5ETEUpOworI2VsaWYgUExBVEZPUk0oUVQpCisg
ICAgUVNvY2tldE5vdGlmaWVyKiByZWdpc3RlclNvY2tldEV2ZW50SGFuZGxlcihpbnQsIFFTb2Nr
ZXROb3RpZmllcjo6VHlwZSwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOworICAgIHZvaWQgZGlz
cGF0Y2hPblRlcm1pbmF0aW9uKFBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIsIGNvbnN0IEZ1bmN0
aW9uPHZvaWQoKT4mKTsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICB2b2lkIHJlZ2lzdGVyRXZl
bnRTb3VyY2VIYW5kbGVyKGludCwgaW50LCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7CisgICAg
dm9pZCB1bnJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKGludCk7CisgICAgdm9pZCBkaXNwYXRj
aE9uVGVybWluYXRpb24oUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllciwgY29uc3QgRnVuY3Rpb248
dm9pZCgpPiYpOworI2VsaWYgUExBVEZPUk0oRUZMKQorICAgIHZvaWQgcmVnaXN0ZXJTb2NrZXRF
dmVudEhhbmRsZXIoaW50LCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7CisgICAgdm9pZCB1bnJl
Z2lzdGVyU29ja2V0RXZlbnRIYW5kbGVyKGludCk7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICAv
LyBGSVhNRTogVXNlIGFuIGF0b21pYyBib29sZWFuIGhlcmUgaW5zdGVhZC4KKyAgICBNdXRleCBt
X2lzVmFsaWRNdXRleDsKKyAgICBib29sIG1faXNWYWxpZDsKKworICAgIHZvaWQgcGxhdGZvcm1J
bml0aWFsaXplKGNvbnN0IGNoYXIqIG5hbWUpOworICAgIHZvaWQgcGxhdGZvcm1JbnZhbGlkYXRl
KCk7CisKKyNpZiBPUyhEQVJXSU4pCisjaWYgSEFWRShESVNQQVRDSF9IKQorICAgIHN0YXRpYyB2
b2lkIGV4ZWN1dGVGdW5jdGlvbih2b2lkKik7CisgICAgTXV0ZXggbV9ldmVudFNvdXJjZXNNdXRl
eDsKKyAgICBjbGFzcyBFdmVudFNvdXJjZTsKKyAgICBIYXNoTWFwPG1hY2hfcG9ydF90LCBFdmVu
dFNvdXJjZSo+IG1fZXZlbnRTb3VyY2VzOworICAgIGRpc3BhdGNoX3F1ZXVlX3QgbV9kaXNwYXRj
aFF1ZXVlOworI2VuZGlmCisjZWxpZiBQTEFURk9STShXSU4pCisgICAgY2xhc3MgV29ya0l0ZW1X
aW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8V29ya0l0ZW1XaW4+IHsKKyAgICBwdWJs
aWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdvcmtJdGVtV2luPiBjcmVhdGUoY29uc3Qg
RnVuY3Rpb248dm9pZCgpPiYsIFdvcmtRdWV1ZSopOworICAgICAgICB2aXJ0dWFsIH5Xb3JrSXRl
bVdpbigpOworCisgICAgICAgIEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKCkgeyByZXR1cm4g
bV9mdW5jdGlvbjsgfQorICAgICAgICBXb3JrUXVldWUqIHF1ZXVlKCkgY29uc3QgeyByZXR1cm4g
bV9xdWV1ZTsgfQorCisgICAgcHJvdGVjdGVkOgorICAgICAgICBXb3JrSXRlbVdpbihjb25zdCBG
dW5jdGlvbjx2b2lkKCk+JiwgV29ya1F1ZXVlKik7CisKKyAgICBwcml2YXRlOgorICAgICAgICBG
dW5jdGlvbjx2b2lkKCk+IG1fZnVuY3Rpb247CisgICAgICAgIFdvcmtRdWV1ZSogbV9xdWV1ZTsK
KyAgICB9OworCisgICAgY2xhc3MgSGFuZGxlV29ya0l0ZW0gOiBwdWJsaWMgV29ya0l0ZW1XaW4g
eworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SGFuZGxlV29ya0l0ZW0+
IGNyZWF0ZUJ5QWRvcHRpbmdIYW5kbGUoSEFORExFLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jiwg
V29ya1F1ZXVlKik7CisgICAgICAgIHZpcnR1YWwgfkhhbmRsZVdvcmtJdGVtKCk7CisKKyAgICAg
ICAgdm9pZCBzZXRXYWl0SGFuZGxlKEhBTkRMRSB3YWl0SGFuZGxlKSB7IG1fd2FpdEhhbmRsZSA9
IHdhaXRIYW5kbGU7IH0KKyAgICAgICAgSEFORExFIHdhaXRIYW5kbGUoKSBjb25zdCB7IHJldHVy
biBtX3dhaXRIYW5kbGU7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIEhhbmRsZVdvcmtJdGVt
KEhBTkRMRSwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYsIFdvcmtRdWV1ZSopOworCisgICAgICAg
IEhBTkRMRSBtX2hhbmRsZTsKKyAgICAgICAgSEFORExFIG1fd2FpdEhhbmRsZTsKKyAgICB9Owor
CisgICAgc3RhdGljIHZvaWQgQ0FMTEJBQ0sgaGFuZGxlQ2FsbGJhY2sodm9pZCogY29udGV4dCwg
Qk9PTEVBTiB0aW1lck9yV2FpdEZpcmVkKTsKKyAgICBzdGF0aWMgdm9pZCBDQUxMQkFDSyB0aW1l
ckNhbGxiYWNrKHZvaWQqIGNvbnRleHQsIEJPT0xFQU4gdGltZXJPcldhaXRGaXJlZCk7CisgICAg
c3RhdGljIERXT1JEIFdJTkFQSSB3b3JrVGhyZWFkQ2FsbGJhY2sodm9pZCogY29udGV4dCk7CisK
KyAgICBib29sIHRyeVJlZ2lzdGVyQXNXb3JrVGhyZWFkKCk7CisgICAgdm9pZCB1bnJlZ2lzdGVy
QXNXb3JrVGhyZWFkKCk7CisgICAgdm9pZCBwZXJmb3JtV29ya09uUmVnaXN0ZXJlZFdvcmtUaHJl
YWQoKTsKKworICAgIHN0YXRpYyB2b2lkIHVucmVnaXN0ZXJXYWl0QW5kRGVzdHJveUl0ZW1Tb29u
KFBhc3NSZWZQdHI8SGFuZGxlV29ya0l0ZW0+KTsKKyAgICBzdGF0aWMgRFdPUkQgV0lOQVBJIHVu
cmVnaXN0ZXJXYWl0QW5kRGVzdHJveUl0ZW1DYWxsYmFjayh2b2lkKiBjb250ZXh0KTsKKworICAg
IHZvbGF0aWxlIExPTkcgbV9pc1dvcmtUaHJlYWRSZWdpc3RlcmVkOworCisgICAgTXV0ZXggbV93
b3JrSXRlbVF1ZXVlTG9jazsKKyAgICBWZWN0b3I8UmVmUHRyPFdvcmtJdGVtV2luPiA+IG1fd29y
a0l0ZW1RdWV1ZTsKKworICAgIE11dGV4IG1faGFuZGxlc0xvY2s7CisgICAgSGFzaE1hcDxIQU5E
TEUsIFJlZlB0cjxIYW5kbGVXb3JrSXRlbT4gPiBtX2hhbmRsZXM7CisKKyAgICBIQU5ETEUgbV90
aW1lclF1ZXVlOworI2VsaWYgUExBVEZPUk0oUVQpCisgICAgY2xhc3MgV29ya0l0ZW1RdDsKKyAg
ICBRVGhyZWFkKiBtX3dvcmtUaHJlYWQ7CisgICAgZnJpZW5kIGNsYXNzIFdvcmtJdGVtUXQ7Cisj
ZWxpZiBQTEFURk9STShHVEspCisgICAgc3RhdGljIHZvaWQgc3RhcnRXb3JrUXVldWVUaHJlYWQo
V29ya1F1ZXVlKik7CisgICAgdm9pZCB3b3JrUXVldWVUaHJlYWRCb2R5KCk7CisgICAgdm9pZCBk
aXNwYXRjaE9uU291cmNlKEdTb3VyY2UqLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiwgR1NvdXJj
ZUZ1bmMpOworCisgICAgVGhyZWFkSWRlbnRpZmllciBtX3dvcmtRdWV1ZVRocmVhZDsKKyAgICBH
UmVmUHRyPEdNYWluQ29udGV4dD4gbV9ldmVudENvbnRleHQ7CisgICAgTXV0ZXggbV9ldmVudExv
b3BMb2NrOworICAgIEdSZWZQdHI8R01haW5Mb29wPiBtX2V2ZW50TG9vcDsKKyAgICBNdXRleCBt
X2V2ZW50U291cmNlc0xvY2s7CisgICAgY2xhc3MgRXZlbnRTb3VyY2U7CisgICAgSGFzaE1hcDxp
bnQsIFZlY3RvcjxFdmVudFNvdXJjZSo+ID4gbV9ldmVudFNvdXJjZXM7CisgICAgdHlwZWRlZiBI
YXNoTWFwPGludCwgVmVjdG9yPEV2ZW50U291cmNlKj4gPjo6aXRlcmF0b3IgRXZlbnRTb3VyY2VJ
dGVyYXRvcjsgCisjZWxpZiBQTEFURk9STShFRkwpCisgICAgZmRfc2V0IG1fZmlsZURlc2NyaXB0
b3JTZXQ7CisgICAgaW50IG1fbWF4RmlsZURlc2NyaXB0b3I7CisgICAgaW50IG1fcmVhZEZyb21Q
aXBlRGVzY3JpcHRvcjsKKyAgICBpbnQgbV93cml0ZVRvUGlwZURlc2NyaXB0b3I7CisgICAgYm9v
bCBtX3RocmVhZExvb3A7CisKKyAgICBWZWN0b3I8RnVuY3Rpb248dm9pZCgpPiA+IG1fd29ya0l0
ZW1RdWV1ZTsKKyAgICBNdXRleCBtX3dvcmtJdGVtUXVldWVMb2NrOworCisgICAgaW50IG1fc29j
a2V0RGVzY3JpcHRvcjsKKyAgICBGdW5jdGlvbjx2b2lkKCk+IG1fc29ja2V0RXZlbnRIYW5kbGVy
OworCisgICAgSGFzaE1hcDxpbnQsIE93blB0cjxFY29yZV9UaW1lcj4gPiBtX3RpbWVyczsKKwor
ICAgIHZvaWQgc2VuZE1lc3NhZ2VUb1RocmVhZChjb25zdCBjaGFyKik7CisgICAgc3RhdGljIHZv
aWQqIHdvcmtRdWV1ZVRocmVhZChXb3JrUXVldWUqKTsKKyAgICB2b2lkIHBlcmZvcm1Xb3JrKCk7
CisgICAgdm9pZCBwZXJmb3JtRmlsZURlc2NyaXB0b3JXb3JrKCk7CisgICAgc3RhdGljIGJvb2wg
dGltZXJGaXJlZCh2b2lkKik7CisjZW5kaWYKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1
c2luZyBXVEY6OldvcmtRdWV1ZTsKKworI2VuZGlmIC8vIFdvcmtRdWV1ZV9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL3d0Zi9lZmwvV29ya1F1ZXVlRWZsLmNwcCBiL1NvdXJjZS9XVEYvd3RmL2Vm
bC9Xb3JrUXVldWVFZmwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNhMzliYTllZDliMTI3MGZlN2RmOWU2Y2U2
ODVkYjQ3M2E1ZjU4YTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9lZmwvV29y
a1F1ZXVlRWZsLmNwcApAQCAtMCwwICsxLDE3MyBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIw
MTIgU2Ftc3VuZyBFbGVjdHJvbmljcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiV29ya1F1ZXVlLmgiCisKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCitjbGFzcyBU
aW1lcldvcmtJdGVtIHsKK3B1YmxpYzoKKyAgICBUaW1lcldvcmtJdGVtKGludCB0aW1lcklELCBj
b25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbiwgV29ya1F1ZXVlKiBxdWV1ZSkKKyAgICAg
ICAgOiBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQorICAgICAgICAsIG1fcXVldWUocXVldWUpCisgICAg
ICAgICwgbV90aW1lcklEKHRpbWVySUQpCisgICAgeworICAgIH0KKyAgICB+VGltZXJXb3JrSXRl
bSgpIHsgfQorCisgICAgRnVuY3Rpb248dm9pZCgpPiBmdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fZnVuY3Rpb247IH0KKyAgICBXb3JrUXVldWUqIHF1ZXVlKCkgY29uc3QgeyByZXR1cm4gbV9x
dWV1ZTsgfQorCisgICAgaW50IHRpbWVySUQoKSBjb25zdCB7IHJldHVybiBtX3RpbWVySUQ7IH0K
KworcHJpdmF0ZToKKyAgICBGdW5jdGlvbjx2b2lkKCk+IG1fZnVuY3Rpb247CisgICAgV29ya1F1
ZXVlKiBtX3F1ZXVlOworICAgIGludCBtX3RpbWVySUQ7Cit9OworCitzdGF0aWMgY29uc3QgaW50
IGludmFsaWRTb2NrZXREZXNjcmlwdG9yID0gLTE7CitzdGF0aWMgY29uc3QgaW50IHRocmVhZE1l
c3NhZ2VTaXplID0gMTsKK3N0YXRpYyBjb25zdCBjaGFyIGZpbmlzaFRocmVhZE1lc3NhZ2VbXSA9
ICJGIjsKK3N0YXRpYyBjb25zdCBjaGFyIHdha3VwVGhyZWFkTWVzc2FnZVtdID0gIlciOworCit2
b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXplKGNvbnN0IGNoYXIqIG5hbWUpCit7Cisg
ICAgaW50IGZkc1syXTsKKyAgICBpZiAocGlwZShmZHMpKQorICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKworICAgIG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvciA9IGZkc1swXTsKKyAgICBt
X3dyaXRlVG9QaXBlRGVzY3JpcHRvciA9IGZkc1sxXTsKKyAgICBGRF9aRVJPKCZtX2ZpbGVEZXNj
cmlwdG9yU2V0KTsKKyAgICBGRF9TRVQobV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yLCAmbV9maWxl
RGVzY3JpcHRvclNldCk7CisgICAgbV9tYXhGaWxlRGVzY3JpcHRvciA9IG1fcmVhZEZyb21QaXBl
RGVzY3JpcHRvcjsKKworICAgIG1fc29ja2V0RGVzY3JpcHRvciA9IGludmFsaWRTb2NrZXREZXNj
cmlwdG9yOworCisgICAgbV90aHJlYWRMb29wID0gdHJ1ZTsKKyAgICBjcmVhdGVUaHJlYWQocmVp
bnRlcnByZXRfY2FzdDxXVEY6OlRocmVhZEZ1bmN0aW9uPigmV29ya1F1ZXVlOjp3b3JrUXVldWVU
aHJlYWQpLCB0aGlzLCBuYW1lKTsKK30KKwordm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW52YWxp
ZGF0ZSgpCit7CisgICAgc2VuZE1lc3NhZ2VUb1RocmVhZChmaW5pc2hUaHJlYWRNZXNzYWdlKTsK
K30KKwordm9pZCBXb3JrUXVldWU6OnBlcmZvcm1Xb3JrKCkKK3sKKyAgICBtX3dvcmtJdGVtUXVl
dWVMb2NrLmxvY2soKTsKKworICAgIHdoaWxlICghbV93b3JrSXRlbVF1ZXVlLmlzRW1wdHkoKSkg
eworICAgICAgICBWZWN0b3I8RnVuY3Rpb248dm9pZCgpPiA+IHdvcmtJdGVtUXVldWU7CisgICAg
ICAgIG1fd29ya0l0ZW1RdWV1ZS5zd2FwKHdvcmtJdGVtUXVldWUpOworCisgICAgICAgIG1fd29y
a0l0ZW1RdWV1ZUxvY2sudW5sb2NrKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
d29ya0l0ZW1RdWV1ZS5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIHdvcmtJdGVtUXVldWVbaV0o
KTsKKyAgICAgICAgbV93b3JrSXRlbVF1ZXVlTG9jay5sb2NrKCk7CisgICAgfQorICAgIG1fd29y
a0l0ZW1RdWV1ZUxvY2sudW5sb2NrKCk7Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjpwZXJmb3JtRmls
ZURlc2NyaXB0b3JXb3JrKCkKK3sKKyAgICBmZF9zZXQgcmVhZEZpbGVEZXNjcmlwdG9yU2V0ID0g
bV9maWxlRGVzY3JpcHRvclNldDsKKworICAgIGlmIChzZWxlY3QobV9tYXhGaWxlRGVzY3JpcHRv
ciArIDEsICZyZWFkRmlsZURlc2NyaXB0b3JTZXQsIDAsIDAsIDApID49IDApIHsKKyAgICAgICAg
aWYgKEZEX0lTU0VUKG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvciwgJnJlYWRGaWxlRGVzY3JpcHRv
clNldCkpIHsKKyAgICAgICAgICAgIGNoYXIgcmVhZEJ1Zlt0aHJlYWRNZXNzYWdlU2l6ZV07Cisg
ICAgICAgICAgICBpZiAocmVhZChtX3JlYWRGcm9tUGlwZURlc2NyaXB0b3IsIHJlYWRCdWYsIHRo
cmVhZE1lc3NhZ2VTaXplKSA9PSAtMSkKKyAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxl
ZCB0byByZWFkIGZyb20gV29ya1F1ZXVlVGhyZWFkIHBpcGUiKTsKKyAgICAgICAgICAgIGlmICgh
c3RybmNtcChyZWFkQnVmLCBmaW5pc2hUaHJlYWRNZXNzYWdlLCB0aHJlYWRNZXNzYWdlU2l6ZSkp
CisgICAgICAgICAgICAgICAgbV90aHJlYWRMb29wID0gZmFsc2U7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAobV9zb2NrZXREZXNjcmlwdG9yICE9IGludmFsaWRTb2NrZXREZXNjcmlwdG9yICYm
IEZEX0lTU0VUKG1fc29ja2V0RGVzY3JpcHRvciwgJnJlYWRGaWxlRGVzY3JpcHRvclNldCkpCisg
ICAgICAgICAgICBtX3NvY2tldEV2ZW50SGFuZGxlcigpOworICAgIH0KK30KKwordm9pZCBXb3Jr
UXVldWU6OnNlbmRNZXNzYWdlVG9UaHJlYWQoY29uc3QgY2hhciogbWVzc2FnZSkKK3sKKyAgICBp
ZiAod3JpdGUobV93cml0ZVRvUGlwZURlc2NyaXB0b3IsIG1lc3NhZ2UsIHRocmVhZE1lc3NhZ2VT
aXplKSA9PSAtMSkKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gd2FrZSB1cCBXb3JrUXVl
dWUgVGhyZWFkIik7Cit9CisKK3ZvaWQqIFdvcmtRdWV1ZTo6d29ya1F1ZXVlVGhyZWFkKFdvcmtR
dWV1ZSogd29ya1F1ZXVlKQoreworICAgIHdoaWxlICh3b3JrUXVldWUtPm1fdGhyZWFkTG9vcCkg
eworICAgICAgICB3b3JrUXVldWUtPnBlcmZvcm1Xb3JrKCk7CisgICAgICAgIHdvcmtRdWV1ZS0+
cGVyZm9ybUZpbGVEZXNjcmlwdG9yV29yaygpOworICAgIH0KKworICAgIGNsb3NlKHdvcmtRdWV1
ZS0+bV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yKTsKKyAgICBjbG9zZSh3b3JrUXVldWUtPm1fd3Jp
dGVUb1BpcGVEZXNjcmlwdG9yKTsKKworICAgIHJldHVybiAwOworfQorCit2b2lkIFdvcmtRdWV1
ZTo6cmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIoaW50IGZpbGVEZXNjcmlwdG9yLCBjb25zdCBG
dW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKK3sKKyAgICBpZiAobV9zb2NrZXREZXNjcmlwdG9y
ICE9IGludmFsaWRTb2NrZXREZXNjcmlwdG9yKQorICAgICAgICBMT0dfRVJST1IoIiVkIGlzIGFs
cmVhZHkgcmVnaXN0ZXJkLiIsIGZpbGVEZXNjcmlwdG9yKTsKKworICAgIG1fc29ja2V0RGVzY3Jp
cHRvciA9IGZpbGVEZXNjcmlwdG9yOworICAgIG1fc29ja2V0RXZlbnRIYW5kbGVyID0gZnVuY3Rp
b247CisKKyAgICBpZiAoZmlsZURlc2NyaXB0b3IgPiBtX21heEZpbGVEZXNjcmlwdG9yKQorICAg
ICAgICBtX21heEZpbGVEZXNjcmlwdG9yID0gZmlsZURlc2NyaXB0b3I7CisgICAgRkRfU0VUKGZp
bGVEZXNjcmlwdG9yLCAmbV9maWxlRGVzY3JpcHRvclNldCk7Cit9CisKK3ZvaWQgV29ya1F1ZXVl
Ojp1bnJlZ2lzdGVyU29ja2V0RXZlbnRIYW5kbGVyKGludCBmaWxlRGVzY3JpcHRvcikKK3sKKyAg
ICBtX3NvY2tldERlc2NyaXB0b3IgPSBpbnZhbGlkU29ja2V0RGVzY3JpcHRvcjsKKworICAgIGlm
IChmaWxlRGVzY3JpcHRvciA9PSBtX21heEZpbGVEZXNjcmlwdG9yKQorICAgICAgICBtX21heEZp
bGVEZXNjcmlwdG9yID0gbV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yOworICAgIEZEX0NMUihmaWxl
RGVzY3JpcHRvciwgJm1fZmlsZURlc2NyaXB0b3JTZXQpOworfQorCit2b2lkIFdvcmtRdWV1ZTo6
ZGlzcGF0Y2goY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCit7CisgICAgTXV0ZXhM
b2NrZXIgbG9ja2VyKG1fd29ya0l0ZW1RdWV1ZUxvY2spOworICAgIG1fd29ya0l0ZW1RdWV1ZS5h
cHBlbmQoZnVuY3Rpb24pOworICAgIHNlbmRNZXNzYWdlVG9UaHJlYWQod2FrdXBUaHJlYWRNZXNz
YWdlKTsKK30KKworYm9vbCBXb3JrUXVldWU6OnRpbWVyRmlyZWQodm9pZCogZGF0YSkKK3sKKyAg
ICBUaW1lcldvcmtJdGVtKiBpdGVtID0gc3RhdGljX2Nhc3Q8VGltZXJXb3JrSXRlbSo+KGRhdGEp
OworICAgIGlmIChpdGVtICYmIGl0ZW0tPnF1ZXVlKCktPm1faXNWYWxpZCkgeworICAgICAgICBp
dGVtLT5xdWV1ZSgpLT5kaXNwYXRjaChpdGVtLT5mdW5jdGlvbigpKTsKKyAgICAgICAgaXRlbS0+
cXVldWUoKS0+bV90aW1lcnMudGFrZShpdGVtLT50aW1lcklEKCkpOworICAgICAgICBkZWxldGUg
aXRlbTsKKyAgICB9CisKKyAgICByZXR1cm4gRUNPUkVfQ0FMTEJBQ0tfQ0FOQ0VMOworfQorCit2
b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2hBZnRlckRlbGF5KGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4m
IGZ1bmN0aW9uLCBkb3VibGUgZGVsYXkpCit7CisgICAgc3RhdGljIGludCB0aW1lcklkID0gMDsK
KyAgICBtX3RpbWVycy5zZXQodGltZXJJZCwgYWRvcHRQdHIoZWNvcmVfdGltZXJfYWRkKGRlbGF5
LCByZWludGVycHJldF9jYXN0PEVjb3JlX1Rhc2tfQ2I+KHRpbWVyRmlyZWQpLCBuZXcgVGltZXJX
b3JrSXRlbSh0aW1lcklkLCBmdW5jdGlvbiwgdGhpcykpKSk7CisgICAgdGltZXJJZCsrOworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvZ3RrL1dvcmtRdWV1ZUd0ay5jcHAgYi9Tb3VyY2Uv
V1RGL3d0Zi9ndGsvV29ya1F1ZXVlR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iOTFmNjM1MWQ3M2IwMjEw
ZWVhYzY2OTY3MzU4ODdlZjhlYTZhNmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93
dGYvZ3RrL1dvcmtRdWV1ZUd0ay5jcHAKQEAgLTAsMCArMSwyMjkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90
b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXb3JrUXVldWUuaCIKKworI2luY2x1ZGUgPGdp
by9naW8uaD4KKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0
ci5oPgorCisvLyBXb3JrUXVldWU6OkV2ZW50U291cmNlCitjbGFzcyBXb3JrUXVldWU6OkV2ZW50
U291cmNlIHsKK3B1YmxpYzoKKyAgICBFdmVudFNvdXJjZShjb25zdCBGdW5jdGlvbjx2b2lkKCk+
JiBmdW5jdGlvbiwgV29ya1F1ZXVlKiB3b3JrUXVldWUsIEdDYW5jZWxsYWJsZSogY2FuY2VsbGFi
bGUpCisgICAgICAgIDogbV9mdW5jdGlvbihmdW5jdGlvbikKKyAgICAgICAgLCBtX3dvcmtRdWV1
ZSh3b3JrUXVldWUpCisgICAgICAgICwgbV9jYW5jZWxsYWJsZShjYW5jZWxsYWJsZSkKKyAgICB7
CisgICAgfQorCisgICAgdm9pZCBjYW5jZWwoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2NhbmNl
bGxhYmxlKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBnX2NhbmNlbGxhYmxlX2NhbmNl
bChtX2NhbmNlbGxhYmxlKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBleGVjdXRlRXZlbnRT
b3VyY2UoRXZlbnRTb3VyY2UqIGV2ZW50U291cmNlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGV2
ZW50U291cmNlKTsKKyAgICAgICAgV29ya1F1ZXVlKiBxdWV1ZSA9IGV2ZW50U291cmNlLT5tX3dv
cmtRdWV1ZTsKKyAgICAgICAgeworICAgICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHF1ZXVl
LT5tX2lzVmFsaWRNdXRleCk7CisgICAgICAgICAgICBpZiAoIXF1ZXVlLT5tX2lzVmFsaWQpCisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZXZlbnRTb3VyY2Ut
Pm1fZnVuY3Rpb24oKTsKKyAgICB9CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gcGVyZm9ybVdvcmtP
bmNlKEV2ZW50U291cmNlKiBldmVudFNvdXJjZSkKKyAgICB7CisgICAgICAgIGV4ZWN1dGVFdmVu
dFNvdXJjZShldmVudFNvdXJjZSk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgZ2Jvb2xlYW4gcGVyZm9ybVdvcmsoR1NvY2tldCogc29ja2V0LCBHSU9Db25kaXRp
b24gY29uZGl0aW9uLCBFdmVudFNvdXJjZSogZXZlbnRTb3VyY2UpCisgICAgeworICAgICAgICBp
ZiAoIShjb25kaXRpb24gJiBHX0lPX0lOKSAmJiAhKGNvbmRpdGlvbiAmIEdfSU9fSFVQKSAmJiAh
KGNvbmRpdGlvbiAmIEdfSU9fRVJSKSkgeworICAgICAgICAgICAgLy8gRXZlbnRTb3VyY2UgaGFz
IGJlZW4gY2FuY2VsbGVkLCByZXR1cm4gRkFMU0UgdG8gZGVzdHJveSB0aGUgc291cmNlLgorICAg
ICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisKKyAgICAgICAgZXhlY3V0ZUV2ZW50
U291cmNlKGV2ZW50U291cmNlKTsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCisgICAg
c3RhdGljIGdib29sZWFuIHBlcmZvcm1Xb3JrT25UZXJtaW5hdGlvbihHUGlkLCBnaW50LCBFdmVu
dFNvdXJjZSogZXZlbnRTb3VyY2UpCisgICAgeworICAgICAgICBleGVjdXRlRXZlbnRTb3VyY2Uo
ZXZlbnRTb3VyY2UpOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgc3RhdGlj
IHZvaWQgZGVsZXRlRXZlbnRTb3VyY2UoRXZlbnRTb3VyY2UqIGV2ZW50U291cmNlKSAKKyAgICB7
CisgICAgICAgIEFTU0VSVChldmVudFNvdXJjZSk7CisgICAgICAgIGRlbGV0ZSBldmVudFNvdXJj
ZTsKKyAgICB9CisgICAKK3B1YmxpYzoKKyAgICBGdW5jdGlvbjx2b2lkKCk+IG1fZnVuY3Rpb247
CisgICAgV29ya1F1ZXVlKiBtX3dvcmtRdWV1ZTsKKyAgICBHQ2FuY2VsbGFibGUqIG1fY2FuY2Vs
bGFibGU7Cit9OworCisvLyBXb3JrUXVldWUKK3N0YXRpYyBjb25zdCBzaXplX3Qga1Zpc3VhbFN0
dWRpb1RocmVhZE5hbWVMaW1pdCA9IDMxOworCit2b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1Jbml0
aWFsaXplKGNvbnN0IGNoYXIqIG5hbWUpCit7CisgICAgbV9ldmVudENvbnRleHQgPSBhZG9wdEdS
ZWYoZ19tYWluX2NvbnRleHRfbmV3KCkpOworICAgIEFTU0VSVChtX2V2ZW50Q29udGV4dCk7Cisg
ICAgbV9ldmVudExvb3AgPSBhZG9wdEdSZWYoZ19tYWluX2xvb3BfbmV3KG1fZXZlbnRDb250ZXh0
LmdldCgpLCBGQUxTRSkpOworICAgIEFTU0VSVChtX2V2ZW50TG9vcCk7CisKKyAgICAvLyBUaGlz
IG5hbWUgY2FuIGJlIGNvbS5hcHBsZS5XZWJLaXQuUHJvY2Vzc0xhdW5jaGVyIG9yIGNvbS5hcHBs
ZS5Db3JlSVBDLlJlY2VpdmVRdWV1ZS4KKyAgICAvLyBXZSBhcmUgdXNpbmcgdGhvc2UgbmFtZXMg
Zm9yIHRoZSB0aHJlYWQgbmFtZSwgYnV0IGJvdGggYXJlIGxvbmdlciB0aGFuIDMxIGNoYXJhY3Rl
cnMsCisgICAgLy8gd2hpY2ggaXMgdGhlIGxpbWl0IG9mIFZpc3VhbCBTdHVkaW8gZm9yIHRocmVh
ZCBuYW1lcy4KKyAgICAvLyBXaGVuIGxvZyBpcyBlbmFibGVkIGNyZWF0ZVRocmVhZCgpIHdpbGwg
YXNzZXJ0IGluc3RlYWQgb2YgdHJ1bmNhdGUgdGhlIG5hbWUsIHNvIHdlIG5lZWQKKyAgICAvLyB0
byBtYWtlIHN1cmUgd2UgZG9uJ3QgdXNlIGEgbmFtZSBsb25nZXIgdGhhbiAzMSBjaGFyYWN0ZXJz
LgorICAgIGNvbnN0IGNoYXIqIHRocmVhZE5hbWUgPSBnX3N0cnJzdHIobmFtZSwgIi4iKTsKKyAg
ICBpZiAodGhyZWFkTmFtZSkKKyAgICAgICAgdGhyZWFkTmFtZSsrOworICAgIGVsc2UKKyAgICAg
ICAgdGhyZWFkTmFtZSA9IG5hbWU7CisgICAgaWYgKHN0cmxlbih0aHJlYWROYW1lKSA+IGtWaXN1
YWxTdHVkaW9UaHJlYWROYW1lTGltaXQpCisgICAgICAgIHRocmVhZE5hbWUgKz0gc3RybGVuKHRo
cmVhZE5hbWUpIC0ga1Zpc3VhbFN0dWRpb1RocmVhZE5hbWVMaW1pdDsKKworICAgIG1fd29ya1F1
ZXVlVGhyZWFkID0gY3JlYXRlVGhyZWFkKHJlaW50ZXJwcmV0X2Nhc3Q8V1RGOjpUaHJlYWRGdW5j
dGlvbj4oJldvcmtRdWV1ZTo6c3RhcnRXb3JrUXVldWVUaHJlYWQpLCB0aGlzLCB0aHJlYWROYW1l
KTsKK30KKwordm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCit7CisgICAgTXV0
ZXhMb2NrZXIgbG9ja2VyKG1fZXZlbnRMb29wTG9jayk7CisKKyAgICBpZiAobV9ldmVudExvb3Ap
IHsKKyAgICAgICAgaWYgKGdfbWFpbl9sb29wX2lzX3J1bm5pbmcobV9ldmVudExvb3AuZ2V0KCkp
KQorICAgICAgICAgICAgZ19tYWluX2xvb3BfcXVpdChtX2V2ZW50TG9vcC5nZXQoKSk7CisgICAg
ICAgIG1fZXZlbnRMb29wLmNsZWFyKCk7CisgICAgfQorCisgICAgbV9ldmVudENvbnRleHQuY2xl
YXIoKTsKK30KKwordm9pZCBXb3JrUXVldWU6OnN0YXJ0V29ya1F1ZXVlVGhyZWFkKFdvcmtRdWV1
ZSogd29ya1F1ZXVlKQoreworICAgIHdvcmtRdWV1ZS0+d29ya1F1ZXVlVGhyZWFkQm9keSgpOwor
fQorCit2b2lkIFdvcmtRdWV1ZTo6d29ya1F1ZXVlVGhyZWFkQm9keSgpCit7CisgICAgZ19tYWlu
X2xvb3BfcnVuKG1fZXZlbnRMb29wLmdldCgpKTsKK30KKwordm9pZCBXb3JrUXVldWU6OnJlZ2lz
dGVyRXZlbnRTb3VyY2VIYW5kbGVyKGludCBmaWxlRGVzY3JpcHRvciwgaW50IGNvbmRpdGlvbiwg
Y29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCit7CisgICAgR1JlZlB0cjxHU29ja2V0
PiBzb2NrZXQgPSBhZG9wdEdSZWYoZ19zb2NrZXRfbmV3X2Zyb21fZmQoZmlsZURlc2NyaXB0b3Is
IDApKTsKKyAgICBBU1NFUlQoc29ja2V0KTsKKyAgICBHUmVmUHRyPEdDYW5jZWxsYWJsZT4gY2Fu
Y2VsbGFibGUgPSBhZG9wdEdSZWYoZ19jYW5jZWxsYWJsZV9uZXcoKSk7CisgICAgR1JlZlB0cjxH
U291cmNlPiBkaXNwYXRjaFNvdXJjZSA9IGFkb3B0R1JlZihnX3NvY2tldF9jcmVhdGVfc291cmNl
KHNvY2tldC5nZXQoKSwgc3RhdGljX2Nhc3Q8R0lPQ29uZGl0aW9uPihjb25kaXRpb24pLCBjYW5j
ZWxsYWJsZS5nZXQoKSkpOworICAgIEFTU0VSVChkaXNwYXRjaFNvdXJjZSk7CisgICAgRXZlbnRT
b3VyY2UqIGV2ZW50U291cmNlID0gbmV3IEV2ZW50U291cmNlKGZ1bmN0aW9uLCB0aGlzLCBjYW5j
ZWxsYWJsZS5nZXQoKSk7CisgICAgQVNTRVJUKGV2ZW50U291cmNlKTsKKworICAgIGdfc291cmNl
X3NldF9jYWxsYmFjayhkaXNwYXRjaFNvdXJjZS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxHU291
cmNlRnVuYz4oJldvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OnBlcmZvcm1Xb3JrKSwKKyAgICAgICAg
ZXZlbnRTb3VyY2UsIHJlaW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KCZXb3JrUXVldWU6
OkV2ZW50U291cmNlOjpkZWxldGVFdmVudFNvdXJjZSkpOworCisgICAgLy8gU2V0IHVwIHRoZSBl
dmVudCBzb3VyY2VzIHVuZGVyIHRoZSBtdXRleCBzaW5jZSB0aGlzIGlzIHNoYXJlZCBhY3Jvc3Mg
bXVsdGlwbGUgdGhyZWFkcy4KKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2V2
ZW50U291cmNlc0xvY2spOworICAgICAgICBWZWN0b3I8RXZlbnRTb3VyY2UqPiBzb3VyY2VzOwor
ICAgICAgICBFdmVudFNvdXJjZUl0ZXJhdG9yIGl0ID0gbV9ldmVudFNvdXJjZXMuZmluZChmaWxl
RGVzY3JpcHRvcik7CisgICAgICAgIGlmIChpdCAhPSBtX2V2ZW50U291cmNlcy5lbmQoKSkgCisg
ICAgICAgICAgICBzb3VyY2VzID0gaXQtPnNlY29uZDsKKworICAgICAgICBzb3VyY2VzLmFwcGVu
ZChldmVudFNvdXJjZSk7CisgICAgICAgIG1fZXZlbnRTb3VyY2VzLnNldChmaWxlRGVzY3JpcHRv
ciwgc291cmNlcyk7CisgICAgfQorCisgICAgZ19zb3VyY2VfYXR0YWNoKGRpc3BhdGNoU291cmNl
LmdldCgpLCBtX2V2ZW50Q29udGV4dC5nZXQoKSk7Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjp1bnJl
Z2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKGludCBmaWxlRGVzY3JpcHRvcikKK3sKKyAgICBBU1NF
UlQoZmlsZURlc2NyaXB0b3IpOworICAgIAorICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2V2ZW50
U291cmNlc0xvY2spOworICAgIAorICAgIEV2ZW50U291cmNlSXRlcmF0b3IgaXQgPSBtX2V2ZW50
U291cmNlcy5maW5kKGZpbGVEZXNjcmlwdG9yKTsKKyAgICBBU1NFUlQoaXQgIT0gbV9ldmVudFNv
dXJjZXMuZW5kKCkpOworICAgIEFTU0VSVChtX2V2ZW50U291cmNlcy5jb250YWlucyhmaWxlRGVz
Y3JpcHRvcikpOworCisgICAgaWYgKGl0ICE9IG1fZXZlbnRTb3VyY2VzLmVuZCgpKSB7CisgICAg
ICAgIFZlY3RvcjxFdmVudFNvdXJjZSo+IHNvdXJjZXMgPSBpdC0+c2Vjb25kOworICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc291cmNlcy5zaXplKCk7IGkrKykKKyAgICAgICAgICAg
IHNvdXJjZXNbaV0tPmNhbmNlbCgpOworCisgICAgICAgIG1fZXZlbnRTb3VyY2VzLnJlbW92ZShp
dCk7CisgICAgfQorfQorCit2b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2hPblNvdXJjZShHU291cmNl
KiBkaXNwYXRjaFNvdXJjZSwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24sIEdTb3Vy
Y2VGdW5jIHNvdXJjZUNhbGxiYWNrKQoreworICAgIEV2ZW50U291cmNlKiBldmVudFNvdXJjZSA9
IG5ldyBFdmVudFNvdXJjZShmdW5jdGlvbiwgdGhpcywgMCk7CisKKyAgICBnX3NvdXJjZV9zZXRf
Y2FsbGJhY2soZGlzcGF0Y2hTb3VyY2UsIHNvdXJjZUNhbGxiYWNrLCBldmVudFNvdXJjZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxHRGVzdHJveU5vdGlmeT4o
JldvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OmRlbGV0ZUV2ZW50U291cmNlKSk7CisKKyAgICBnX3Nv
dXJjZV9hdHRhY2goZGlzcGF0Y2hTb3VyY2UsIG1fZXZlbnRDb250ZXh0LmdldCgpKTsKK30KKwor
dm9pZCBXb3JrUXVldWU6OmRpc3BhdGNoKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9u
KQoreworICAgIEdSZWZQdHI8R1NvdXJjZT4gZGlzcGF0Y2hTb3VyY2UgPSBhZG9wdEdSZWYoZ19p
ZGxlX3NvdXJjZV9uZXcoKSk7CisgICAgQVNTRVJUKGRpc3BhdGNoU291cmNlKTsKKyAgICBnX3Nv
dXJjZV9zZXRfcHJpb3JpdHkoZGlzcGF0Y2hTb3VyY2UuZ2V0KCksIEdfUFJJT1JJVFlfREVGQVVM
VCk7CisKKyAgICBkaXNwYXRjaE9uU291cmNlKGRpc3BhdGNoU291cmNlLmdldCgpLCBmdW5jdGlv
biwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oJldvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6
OnBlcmZvcm1Xb3JrT25jZSkpOworfQorCit2b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2hBZnRlckRl
bGF5KGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uLCBkb3VibGUgZGVsYXkpCit7Cisg
ICAgR1JlZlB0cjxHU291cmNlPiBkaXNwYXRjaFNvdXJjZSA9IGFkb3B0R1JlZihnX3RpbWVvdXRf
c291cmNlX25ldyhzdGF0aWNfY2FzdDxndWludD4oZGVsYXkgKiAxMDAwKSkpOworICAgIEFTU0VS
VChkaXNwYXRjaFNvdXJjZSk7CisKKyAgICBkaXNwYXRjaE9uU291cmNlKGRpc3BhdGNoU291cmNl
LmdldCgpLCBmdW5jdGlvbiwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oJldvcmtRdWV1
ZTo6RXZlbnRTb3VyY2U6OnBlcmZvcm1Xb3JrT25jZSkpOworfQorCit2b2lkIFdvcmtRdWV1ZTo6
ZGlzcGF0Y2hPblRlcm1pbmF0aW9uKFBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIgcHJvY2Vzcywg
Y29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCit7CisgICAgR1JlZlB0cjxHU291cmNl
PiBkaXNwYXRjaFNvdXJjZSA9IGFkb3B0R1JlZihnX2NoaWxkX3dhdGNoX3NvdXJjZV9uZXcocHJv
Y2VzcykpOworICAgIEFTU0VSVChkaXNwYXRjaFNvdXJjZSk7CisKKyAgICBkaXNwYXRjaE9uU291
cmNlKGRpc3BhdGNoU291cmNlLmdldCgpLCBmdW5jdGlvbiwgcmVpbnRlcnByZXRfY2FzdDxHU291
cmNlRnVuYz4oJldvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OnBlcmZvcm1Xb3JrT25UZXJtaW5hdGlv
bikpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvbWFjL1dvcmtRdWV1ZU1hYy5jcHAg
Yi9Tb3VyY2UvV1RGL3d0Zi9tYWMvV29ya1F1ZXVlTWFjLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZTQ3M2Vl
NWNjODRlNTg0MjliMDQzOWNjZDkyMWFjMmM0OTJmZmFhCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dURi93dGYvbWFjL1dvcmtRdWV1ZU1hYy5jcHAKQEAgLTAsMCArMSwxNzggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV29ya1F1ZXVlLmgiCisKKyNp
bmNsdWRlIDxtYWNoL21hY2hfaW5pdC5oPgorI2luY2x1ZGUgPG1hY2gvbWFjaF9wb3J0Lmg+Cisj
aW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKwordm9pZCBXb3JrUXVldWU6OmV4ZWN1dGVGdW5j
dGlvbih2b2lkKiBjb250ZXh0KQoreworICAgIFdvcmtRdWV1ZSogcXVldWUgPSBzdGF0aWNfY2Fz
dDxXb3JrUXVldWUqPihkaXNwYXRjaF9nZXRfY29udGV4dChkaXNwYXRjaF9nZXRfY3VycmVudF9x
dWV1ZSgpKSk7CisgICAgT3duUHRyPEZ1bmN0aW9uPHZvaWQoKT4gPiBmdW5jdGlvbiA9IGFkb3B0
UHRyKHN0YXRpY19jYXN0PEZ1bmN0aW9uPHZvaWQoKT4qPihjb250ZXh0KSk7CisgICAgCisgICAg
eworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIocXVldWUtPm1faXNWYWxpZE11dGV4KTsKKyAg
ICAgICAgaWYgKCFxdWV1ZS0+bV9pc1ZhbGlkKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgICgqZnVuY3Rpb24pKCk7Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjpkaXNwYXRjaChjb25z
dCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKK3sKKyAgICBkaXNwYXRjaF9hc3luY19mKG1f
ZGlzcGF0Y2hRdWV1ZSwgbmV3IEZ1bmN0aW9uPHZvaWQoKT4oZnVuY3Rpb24pLCBleGVjdXRlRnVu
Y3Rpb24pOworfQorCit2b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2hBZnRlckRlbGF5KGNvbnN0IEZ1
bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uLCBkb3VibGUgZGVsYXkpCit7CisgICAgZGlzcGF0Y2hf
dGltZV90IGRlbGF5VGltZSA9IGRpc3BhdGNoX3RpbWUoRElTUEFUQ0hfVElNRV9OT1csIGRlbGF5
ICogTlNFQ19QRVJfU0VDKTsKKworICAgIGRpc3BhdGNoX2FmdGVyX2YoZGVsYXlUaW1lLCBtX2Rp
c3BhdGNoUXVldWUsIG5ldyBGdW5jdGlvbjx2b2lkKCk+KGZ1bmN0aW9uKSwgZXhlY3V0ZUZ1bmN0
aW9uKTsKK30KKworY2xhc3MgV29ya1F1ZXVlOjpFdmVudFNvdXJjZSB7CitwdWJsaWM6CisgICAg
RXZlbnRTb3VyY2UoTWFjaFBvcnRFdmVudFR5cGUgZXZlbnRUeXBlLCBkaXNwYXRjaF9zb3VyY2Vf
dCBkaXNwYXRjaFNvdXJjZSwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCisgICAg
ICAgIDogbV9ldmVudFR5cGUoZXZlbnRUeXBlKQorICAgICAgICAsIG1fZGlzcGF0Y2hTb3VyY2Uo
ZGlzcGF0Y2hTb3VyY2UpCisgICAgICAgICwgbV9mdW5jdGlvbihmdW5jdGlvbikKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIGRpc3BhdGNoX3NvdXJjZV90IGRpc3BhdGNoU291cmNlKCkgY29uc3Qg
eyByZXR1cm4gbV9kaXNwYXRjaFNvdXJjZTsgfQorICAgIAorICAgIHN0YXRpYyB2b2lkIGV2ZW50
SGFuZGxlcih2b2lkKiBzb3VyY2UpIAorICAgIHsKKyAgICAgICAgRXZlbnRTb3VyY2UqIGV2ZW50
U291cmNlID0gc3RhdGljX2Nhc3Q8RXZlbnRTb3VyY2UqPihzb3VyY2UpOworICAgICAgICAKKyAg
ICAgICAgZXZlbnRTb3VyY2UtPm1fZnVuY3Rpb24oKTsKKyAgICB9CisgICAgCisgICAgc3RhdGlj
IHZvaWQgY2FuY2VsSGFuZGxlcih2b2lkKiBzb3VyY2UpCisgICAgeworICAgICAgICBFdmVudFNv
dXJjZSogZXZlbnRTb3VyY2UgPSBzdGF0aWNfY2FzdDxFdmVudFNvdXJjZSo+KHNvdXJjZSk7Cisg
ICAgICAgIAorICAgICAgICBtYWNoX3BvcnRfdCBtYWNoUG9ydCA9IGRpc3BhdGNoX3NvdXJjZV9n
ZXRfaGFuZGxlKGV2ZW50U291cmNlLT5tX2Rpc3BhdGNoU291cmNlKTsKKyAgICAgICAgCisgICAg
ICAgIHN3aXRjaCAoZXZlbnRTb3VyY2UtPm1fZXZlbnRUeXBlKSB7CisgICAgICAgIGNhc2UgTWFj
aFBvcnREYXRhQXZhaWxhYmxlOgorICAgICAgICAgICAgLy8gUmVsZWFzZSBvdXIgcmVjZWl2ZSBy
aWdodC4KKyAgICAgICAgICAgIG1hY2hfcG9ydF9tb2RfcmVmcyhtYWNoX3Rhc2tfc2VsZigpLCBt
YWNoUG9ydCwgTUFDSF9QT1JUX1JJR0hUX1JFQ0VJVkUsIC0xKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIE1hY2hQb3J0RGVhZE5hbWVOb3RpZmljYXRpb246CisgICAgICAgICAg
ICAvLyBSZWxlYXNlIG91ciBzZW5kIHJpZ2h0LgorICAgICAgICAgICAgbWFjaF9wb3J0X2RlYWxs
b2NhdGUobWFjaF90YXNrX3NlbGYoKSwgbWFjaFBvcnQpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgZmluYWxpemVIYW5kbGVyKHZv
aWQqIHNvdXJjZSkKKyAgICB7CisgICAgICAgIEV2ZW50U291cmNlKiBldmVudFNvdXJjZSA9IHN0
YXRpY19jYXN0PEV2ZW50U291cmNlKj4oc291cmNlKTsKKyAgICAgICAgCisgICAgICAgIGRlbGV0
ZSBldmVudFNvdXJjZTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIE1hY2hQb3J0RXZlbnRU
eXBlIG1fZXZlbnRUeXBlOworICAgIAorICAgIC8vIFRoaXMgaXMgYSB3ZWFrIHJlZmVyZW5jZSwg
c2luY2UgbV9kaXNwYXRjaFNvdXJjZSByZWZlcmVuY2VzIHRoZSBldmVudCBzb3VyY2UuCisgICAg
ZGlzcGF0Y2hfc291cmNlX3QgbV9kaXNwYXRjaFNvdXJjZTsKKworICAgIEZ1bmN0aW9uPHZvaWQo
KT4gbV9mdW5jdGlvbjsKK307CisKK3ZvaWQgV29ya1F1ZXVlOjpyZWdpc3Rlck1hY2hQb3J0RXZl
bnRIYW5kbGVyKG1hY2hfcG9ydF90IG1hY2hQb3J0LCBNYWNoUG9ydEV2ZW50VHlwZSBldmVudFR5
cGUsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQoreworICAgIGRpc3BhdGNoX3Nv
dXJjZV90eXBlX3Qgc291cmNlVHlwZSA9IDA7CisgICAgc3dpdGNoIChldmVudFR5cGUpIHsKKyAg
ICBjYXNlIE1hY2hQb3J0RGF0YUF2YWlsYWJsZToKKyAgICAgICAgc291cmNlVHlwZSA9IERJU1BB
VENIX1NPVVJDRV9UWVBFX01BQ0hfUkVDVjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNYWNo
UG9ydERlYWROYW1lTm90aWZpY2F0aW9uOgorICAgICAgICBzb3VyY2VUeXBlID0gRElTUEFUQ0hf
U09VUkNFX1RZUEVfTUFDSF9TRU5EOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAg
ZGlzcGF0Y2hfc291cmNlX3QgZGlzcGF0Y2hTb3VyY2UgPSBkaXNwYXRjaF9zb3VyY2VfY3JlYXRl
KHNvdXJjZVR5cGUsIG1hY2hQb3J0LCAwLCBtX2Rpc3BhdGNoUXVldWUpOworICAgIAorICAgIEV2
ZW50U291cmNlKiBldmVudFNvdXJjZSA9IG5ldyBFdmVudFNvdXJjZShldmVudFR5cGUsIGRpc3Bh
dGNoU291cmNlLCBmdW5jdGlvbik7CisgICAgZGlzcGF0Y2hfc2V0X2NvbnRleHQoZGlzcGF0Y2hT
b3VyY2UsIGV2ZW50U291cmNlKTsKKyAgICAKKyAgICBkaXNwYXRjaF9zb3VyY2Vfc2V0X2V2ZW50
X2hhbmRsZXJfZihkaXNwYXRjaFNvdXJjZSwgJkV2ZW50U291cmNlOjpldmVudEhhbmRsZXIpOwor
ICAgIGRpc3BhdGNoX3NvdXJjZV9zZXRfY2FuY2VsX2hhbmRsZXJfZihkaXNwYXRjaFNvdXJjZSwg
JkV2ZW50U291cmNlOjpjYW5jZWxIYW5kbGVyKTsKKyAgICBkaXNwYXRjaF9zZXRfZmluYWxpemVy
X2YoZGlzcGF0Y2hTb3VyY2UsICZFdmVudFNvdXJjZTo6ZmluYWxpemVIYW5kbGVyKTsKKyAgICAK
KyAgICAvLyBBZGQgdGhlIHNvdXJjZSB0byBvdXIgc2V0IG9mIHNvdXJjZXMuCisgICAgeworICAg
ICAgICBNdXRleExvY2tlciBsb2NrZXIobV9ldmVudFNvdXJjZXNNdXRleCk7CisgICAgICAgIAor
ICAgICAgICBBU1NFUlQoIW1fZXZlbnRTb3VyY2VzLmNvbnRhaW5zKG1hY2hQb3J0KSk7CisgICAg
ICAgIAorICAgICAgICBtX2V2ZW50U291cmNlcy5zZXQobWFjaFBvcnQsIGV2ZW50U291cmNlKTsK
KyAgICAgICAgCisgICAgICAgIC8vIEFuZCBzdGFydCBpdCEKKyAgICAgICAgZGlzcGF0Y2hfcmVz
dW1lKGRpc3BhdGNoU291cmNlKTsKKyAgICB9Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjp1bnJlZ2lz
dGVyTWFjaFBvcnRFdmVudEhhbmRsZXIobWFjaF9wb3J0X3QgbWFjaFBvcnQpCit7CisgICAgQVNT
RVJUKG1hY2hQb3J0KTsKKyAgICAKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9ldmVudFNvdXJj
ZXNNdXRleCk7CisgICAgCisgICAgSGFzaE1hcDxtYWNoX3BvcnRfdCwgRXZlbnRTb3VyY2UqPjo6
aXRlcmF0b3IgaXQgPSBtX2V2ZW50U291cmNlcy5maW5kKG1hY2hQb3J0KTsKKyAgICBBU1NFUlQo
aXQgIT0gbV9ldmVudFNvdXJjZXMuZW5kKCkpOworICAgIAorICAgIEFTU0VSVChtX2V2ZW50U291
cmNlcy5jb250YWlucyhtYWNoUG9ydCkpOworCisgICAgRXZlbnRTb3VyY2UqIGV2ZW50U291cmNl
ID0gaXQtPnNlY29uZDsKKyAgICAvLyBDYW5jZWwgYW5kIHJlbGVhc2UgdGhlIHNvdXJjZS4gSXQg
d2lsbCBiZSBkZWxldGVkIGluIGl0cyBmaW5hbGl6ZSBoYW5kbGVyLgorICAgIGRpc3BhdGNoX3Nv
dXJjZV9jYW5jZWwoZXZlbnRTb3VyY2UtPmRpc3BhdGNoU291cmNlKCkpOworICAgIGRpc3BhdGNo
X3JlbGVhc2UoZXZlbnRTb3VyY2UtPmRpc3BhdGNoU291cmNlKCkpOworCisgICAgbV9ldmVudFNv
dXJjZXMucmVtb3ZlKGl0KTsgICAgCit9CisKK3ZvaWQgV29ya1F1ZXVlOjpwbGF0Zm9ybUluaXRp
YWxpemUoY29uc3QgY2hhciogbmFtZSkKK3sKKyAgICBtX2Rpc3BhdGNoUXVldWUgPSBkaXNwYXRj
aF9xdWV1ZV9jcmVhdGUobmFtZSwgMCk7CisgICAgZGlzcGF0Y2hfc2V0X2NvbnRleHQobV9kaXNw
YXRjaFF1ZXVlLCB0aGlzKTsKK30KKwordm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW52YWxpZGF0
ZSgpCit7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2V2
ZW50U291cmNlc011dGV4KTsKKyAgICBBU1NFUlQobV9ldmVudFNvdXJjZXMuaXNFbXB0eSgpKTsK
KyNlbmRpZgorCisgICAgZGlzcGF0Y2hfcmVsZWFzZShtX2Rpc3BhdGNoUXVldWUpOworfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvcXQvV29ya1F1ZXVlUXQuY3BwIGIvU291cmNlL1dURi93
dGYvcXQvV29ya1F1ZXVlUXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA1MDkxZmZkYTczOTYwYzYwYzQwZjFm
NGNlZWU5NTJjNjFjM2Q2NmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9xdC9X
b3JrUXVldWVRdC5jcHAKQEAgLTAsMCArMSwxMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEw
IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV29ya1F1ZXVlLmgiCisKKyNpbmNsdWRl
IDxRT2JqZWN0PgorI2luY2x1ZGUgPFFQcm9jZXNzPgorI2luY2x1ZGUgPFFUaHJlYWQ+CisjaW5j
bHVkZSA8d3RmL1RocmVhZGluZy5oPgorCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgV29ya1F1
ZXVlOjpXb3JrSXRlbVF0IDogcHVibGljIFFPYmplY3QgeworICAgIFFfT0JKRUNUCitwdWJsaWM6
CisgICAgV29ya0l0ZW1RdChXb3JrUXVldWUqIHdvcmtRdWV1ZSwgY29uc3QgRnVuY3Rpb248dm9p
ZCgpPiYgZnVuY3Rpb24pCisgICAgICAgIDogbV9xdWV1ZSh3b3JrUXVldWUpCisgICAgICAgICwg
bV9zb3VyY2UoMCkKKyAgICAgICAgLCBtX3NpZ25hbCgwKQorICAgICAgICAsIG1fZnVuY3Rpb24o
ZnVuY3Rpb24pCisgICAgeworICAgIH0KKworICAgIFdvcmtJdGVtUXQoV29ya1F1ZXVlKiB3b3Jr
UXVldWUsIFFPYmplY3QqIHNvdXJjZSwgY29uc3QgY2hhciogc2lnbmFsLCBjb25zdCBGdW5jdGlv
bjx2b2lkKCk+JiBmdW5jdGlvbikKKyAgICAgICAgOiBtX3F1ZXVlKHdvcmtRdWV1ZSkKKyAgICAg
ICAgLCBtX3NvdXJjZShzb3VyY2UpCisgICAgICAgICwgbV9zaWduYWwoc2lnbmFsKQorICAgICAg
ICAsIG1fZnVuY3Rpb24oZnVuY3Rpb24pCisgICAgeworICAgICAgICBjb25uZWN0KG1fc291cmNl
LCBtX3NpZ25hbCwgU0xPVChleGVjdXRlKCkpLCBRdDo6UXVldWVkQ29ubmVjdGlvbik7CisgICAg
fQorCisgICAgfldvcmtJdGVtUXQoKQorICAgIHsKKyAgICB9CisKKyAgICBRX1NMT1Qgdm9pZCBl
eGVjdXRlKCkgCisgICAgeyAKKyAgICAgICAgaWYgKG1fcXVldWUtPm1faXNWYWxpZCkKKyAgICAg
ICAgICAgIG1fZnVuY3Rpb24oKTsKKyAgICB9CisKKyAgICBRX1NMT1Qgdm9pZCBleGVjdXRlQW5k
RGVsZXRlKCkKKyAgICB7CisgICAgICAgIGV4ZWN1dGUoKTsKKyAgICAgICAgZGVsZXRlIHRoaXM7
CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHRpbWVyRXZlbnQoUVRpbWVyRXZlbnQqKQorICAg
IHsKKyAgICAgICAgZXhlY3V0ZUFuZERlbGV0ZSgpOworICAgIH0KKworICAgIFdvcmtRdWV1ZSog
bV9xdWV1ZTsKKyAgICBRT2JqZWN0KiBtX3NvdXJjZTsKKyAgICBjb25zdCBjaGFyKiBtX3NpZ25h
bDsKKyAgICBGdW5jdGlvbjx2b2lkKCk+IG1fZnVuY3Rpb247Cit9OworCitRU29ja2V0Tm90aWZp
ZXIqIFdvcmtRdWV1ZTo6cmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIoaW50IHNvY2tldERlc2Ny
aXB0b3IsIFFTb2NrZXROb3RpZmllcjo6VHlwZSB0eXBlLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+
JiBmdW5jdGlvbikKK3sKKyAgICBBU1NFUlQobV93b3JrVGhyZWFkKTsKKworICAgIFFTb2NrZXRO
b3RpZmllciogbm90aWZpZXIgPSBuZXcgUVNvY2tldE5vdGlmaWVyKHNvY2tldERlc2NyaXB0b3Is
IHR5cGUsIDApOworICAgIG5vdGlmaWVyLT5zZXRFbmFibGVkKGZhbHNlKTsKKyAgICBub3RpZmll
ci0+bW92ZVRvVGhyZWFkKG1fd29ya1RocmVhZCk7CisgICAgV29ya1F1ZXVlOjpXb3JrSXRlbVF0
KiBpdGVtUXQgPSBuZXcgV29ya1F1ZXVlOjpXb3JrSXRlbVF0KHRoaXMsIG5vdGlmaWVyLCBTSUdO
QUwoYWN0aXZhdGVkKGludCkpLCBmdW5jdGlvbik7CisgICAgaXRlbVF0LT5tb3ZlVG9UaHJlYWQo
bV93b3JrVGhyZWFkKTsKKyAgICBub3RpZmllci0+c2V0RW5hYmxlZCh0cnVlKTsKKyAgICByZXR1
cm4gbm90aWZpZXI7Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjpwbGF0Zm9ybUluaXRpYWxpemUoY29u
c3QgY2hhciopCit7CisgICAgbV93b3JrVGhyZWFkID0gbmV3IFFUaHJlYWQoKTsKKyAgICBtX3dv
cmtUaHJlYWQtPnN0YXJ0KCk7Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjpwbGF0Zm9ybUludmFsaWRh
dGUoKQoreworICAgIG1fd29ya1RocmVhZC0+ZXhpdCgpOworICAgIG1fd29ya1RocmVhZC0+d2Fp
dCgpOworICAgIGRlbGV0ZSBtX3dvcmtUaHJlYWQ7Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjpkaXNw
YXRjaChjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKK3sKKyAgICBXb3JrUXVldWU6
OldvcmtJdGVtUXQqIGl0ZW1RdCA9IG5ldyBXb3JrUXVldWU6OldvcmtJdGVtUXQodGhpcywgZnVu
Y3Rpb24pOworICAgIGl0ZW1RdC0+bW92ZVRvVGhyZWFkKG1fd29ya1RocmVhZCk7CisgICAgUU1l
dGFPYmplY3Q6Omludm9rZU1ldGhvZChpdGVtUXQsICJleGVjdXRlQW5kRGVsZXRlIiwgUXQ6OlF1
ZXVlZENvbm5lY3Rpb24pOworfQorCit2b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2hBZnRlckRlbGF5
KGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uLCBkb3VibGUgZGVsYXlJblNlY29uZCkK
K3sKKyAgICBXb3JrUXVldWU6OldvcmtJdGVtUXQqIGl0ZW1RdCA9IG5ldyBXb3JrUXVldWU6Oldv
cmtJdGVtUXQodGhpcywgZnVuY3Rpb24pOworICAgIGl0ZW1RdC0+c3RhcnRUaW1lcihzdGF0aWNf
Y2FzdDxpbnQ+KGRlbGF5SW5TZWNvbmQgKiAxMDAwKSk7CisgICAgaXRlbVF0LT5tb3ZlVG9UaHJl
YWQobV93b3JrVGhyZWFkKTsKK30KKwordm9pZCBXb3JrUXVldWU6OmRpc3BhdGNoT25UZXJtaW5h
dGlvbihQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyIHByb2Nlc3MsIGNvbnN0IEZ1bmN0aW9uPHZv
aWQoKT4mIGZ1bmN0aW9uKQoreworICAgIFdvcmtRdWV1ZTo6V29ya0l0ZW1RdCogaXRlbVF0ID0g
bmV3IFdvcmtRdWV1ZTo6V29ya0l0ZW1RdCh0aGlzLCBwcm9jZXNzLCBTSUdOQUwoZmluaXNoZWQo
aW50LCBRUHJvY2Vzczo6RXhpdFN0YXR1cykpLCBmdW5jdGlvbik7CisgICAgaXRlbVF0LT5tb3Zl
VG9UaHJlYWQobV93b3JrVGhyZWFkKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNpbmNs
dWRlICJXb3JrUXVldWVRdC5tb2MiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi93aW4vV29y
a1F1ZXVlV2luLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3dpbi9Xb3JrUXVldWVXaW4uY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmFhYmFkYmRhODk1ZTA3ZDllZTUzMzA3OTVjYzk0ZTYxN2ViOTFkN2IKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi93aW4vV29ya1F1ZXVlV2luLmNwcApAQCAtMCwwICsx
LDI5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXb3Jr
UXVldWUuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KKyNpbmNsdWRl
IDx3dGYvVGhyZWFkaW5nLmg+CisKK2lubGluZSBXb3JrUXVldWU6OldvcmtJdGVtV2luOjpXb3Jr
SXRlbVdpbihjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbiwgV29ya1F1ZXVlKiBxdWV1
ZSkKKyAgICA6IG1fZnVuY3Rpb24oZnVuY3Rpb24pCisgICAgLCBtX3F1ZXVlKHF1ZXVlKQorewor
fQorCitQYXNzUmVmUHRyPFdvcmtRdWV1ZTo6V29ya0l0ZW1XaW4+IFdvcmtRdWV1ZTo6V29ya0l0
ZW1XaW46OmNyZWF0ZShjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbiwgV29ya1F1ZXVl
KiBxdWV1ZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdvcmtJdGVtV2luKGZ1bmN0aW9u
LCBxdWV1ZSkpOworfQorCitXb3JrUXVldWU6OldvcmtJdGVtV2luOjp+V29ya0l0ZW1XaW4oKQor
eworfQorCitpbmxpbmUgV29ya1F1ZXVlOjpIYW5kbGVXb3JrSXRlbTo6SGFuZGxlV29ya0l0ZW0o
SEFORExFIGhhbmRsZSwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24sIFdvcmtRdWV1
ZSogcXVldWUpCisgICAgOiBXb3JrSXRlbVdpbihmdW5jdGlvbiwgcXVldWUpCisgICAgLCBtX2hh
bmRsZShoYW5kbGUpCisgICAgLCBtX3dhaXRIYW5kbGUoMCkKK3sKKyAgICBBU1NFUlRfQVJHKGhh
bmRsZSwgaGFuZGxlKTsKK30KKworUGFzc1JlZlB0cjxXb3JrUXVldWU6OkhhbmRsZVdvcmtJdGVt
PiBXb3JrUXVldWU6OkhhbmRsZVdvcmtJdGVtOjpjcmVhdGVCeUFkb3B0aW5nSGFuZGxlKEhBTkRM
RSBoYW5kbGUsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uLCBXb3JrUXVldWUqIHF1
ZXVlKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgSGFuZGxlV29ya0l0ZW0oaGFuZGxlLCBm
dW5jdGlvbiwgcXVldWUpKTsKK30KKworV29ya1F1ZXVlOjpIYW5kbGVXb3JrSXRlbTo6fkhhbmRs
ZVdvcmtJdGVtKCkKK3sKKyAgICA6OkNsb3NlSGFuZGxlKG1faGFuZGxlKTsKK30KKwordm9pZCBX
b3JrUXVldWU6OmhhbmRsZUNhbGxiYWNrKHZvaWQqIGNvbnRleHQsIEJPT0xFQU4gdGltZXJPcldh
aXRGaXJlZCkKK3sKKyAgICBBU1NFUlRfQVJHKGNvbnRleHQsIGNvbnRleHQpOworICAgIEFTU0VS
VF9BUkcodGltZXJPcldhaXRGaXJlZCwgIXRpbWVyT3JXYWl0RmlyZWQpOworCisgICAgV29ya0l0
ZW1XaW4qIGl0ZW0gPSBzdGF0aWNfY2FzdDxXb3JrSXRlbVdpbio+KGNvbnRleHQpOworICAgIFdv
cmtRdWV1ZSogcXVldWUgPSBpdGVtLT5xdWV1ZSgpOworCisgICAgeworICAgICAgICBNdXRleExv
Y2tlciBsb2NrKHF1ZXVlLT5tX3dvcmtJdGVtUXVldWVMb2NrKTsKKyAgICAgICAgcXVldWUtPm1f
d29ya0l0ZW1RdWV1ZS5hcHBlbmQoaXRlbSk7CisKKyAgICAgICAgLy8gSWYgbm8gb3RoZXIgdGhy
ZWFkIGlzIHBlcmZvcm1pbmcgd29yaywgd2UgY2FuIGRvIGl0IG9uIHRoaXMgdGhyZWFkLgorICAg
ICAgICBpZiAoIXF1ZXVlLT50cnlSZWdpc3RlckFzV29ya1RocmVhZCgpKSB7CisgICAgICAgICAg
ICAvLyBTb21lIG90aGVyIHRocmVhZCBpcyBwZXJmb3JtaW5nIHdvcmsuIFNpbmNlIHdlIGhvbGQg
dGhlIHF1ZXVlIGxvY2ssIHdlIGNhbiBiZSBzdXJlCisgICAgICAgICAgICAvLyB0aGF0IHRoZSB3
b3JrIHRocmVhZCBpcyBub3QgZXhpdGluZyBkdWUgdG8gYW4gZW1wdHkgcXVldWUgYW5kIHdpbGwg
cHJvY2VzcyB0aGUgd29yaworICAgICAgICAgICAgLy8gaXRlbSB3ZSBqdXN0IGFkZGVkIHRvIGl0
LiBJZiB3ZSB3ZXJlbid0IGhvbGRpbmcgdGhlIGxvY2sgd2UnZCBoYXZlIHRvIHNpZ25hbAorICAg
ICAgICAgICAgLy8gbV9wZXJmb3JtV29ya0V2ZW50IHRvIG1ha2Ugc3VyZSB0aGUgd29yayBpdGVt
IGdvdCBwaWNrZWQgdXAuCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBxdWV1ZS0+cGVyZm9ybVdvcmtPblJlZ2lzdGVyZWRXb3JrVGhyZWFkKCk7Cit9CisKK3Zv
aWQgV29ya1F1ZXVlOjpyZWdpc3RlckhhbmRsZShIQU5ETEUgaGFuZGxlLCBjb25zdCBGdW5jdGlv
bjx2b2lkKCk+JiBmdW5jdGlvbikKK3sKKyAgICBSZWZQdHI8SGFuZGxlV29ya0l0ZW0+IGhhbmRs
ZUl0ZW0gPSBIYW5kbGVXb3JrSXRlbTo6Y3JlYXRlQnlBZG9wdGluZ0hhbmRsZShoYW5kbGUsIGZ1
bmN0aW9uLCB0aGlzKTsKKworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9jayhtX2hhbmRs
ZXNMb2NrKTsKKyAgICAgICAgQVNTRVJUX0FSRyhoYW5kbGUsICFtX2hhbmRsZXMuY29udGFpbnMo
aGFuZGxlKSk7CisgICAgICAgIG1faGFuZGxlcy5zZXQoaGFuZGxlLCBoYW5kbGVJdGVtKTsKKyAg
ICB9CisKKyAgICBIQU5ETEUgd2FpdEhhbmRsZTsKKyAgICBpZiAoITo6UmVnaXN0ZXJXYWl0Rm9y
U2luZ2xlT2JqZWN0KCZ3YWl0SGFuZGxlLCBoYW5kbGUsIGhhbmRsZUNhbGxiYWNrLCBoYW5kbGVJ
dGVtLmdldCgpLCBJTkZJTklURSwgV1RfRVhFQ1VURURFRkFVTFQpKSB7CisgICAgICAgIERXT1JE
IGVycm9yID0gOjpHZXRMYXN0RXJyb3IoKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgfQorICAgIGhhbmRsZUl0ZW0tPnNldFdhaXRIYW5kbGUod2FpdEhhbmRsZSk7Cit9CisK
K3ZvaWQgV29ya1F1ZXVlOjp1bnJlZ2lzdGVyQW5kQ2xvc2VIYW5kbGUoSEFORExFIGhhbmRsZSkK
K3sKKyAgICBSZWZQdHI8SGFuZGxlV29ya0l0ZW0+IGl0ZW07CisgICAgeworICAgICAgICBNdXRl
eExvY2tlciBsb2NrZXIobV9oYW5kbGVzTG9jayk7CisgICAgICAgIEFTU0VSVF9BUkcoaGFuZGxl
LCBtX2hhbmRsZXMuY29udGFpbnMoaGFuZGxlKSk7CisgICAgICAgIGl0ZW0gPSBtX2hhbmRsZXMu
dGFrZShoYW5kbGUpOworICAgIH0KKworICAgIHVucmVnaXN0ZXJXYWl0QW5kRGVzdHJveUl0ZW1T
b29uKGl0ZW0ucmVsZWFzZSgpKTsKK30KKworRFdPUkQgV29ya1F1ZXVlOjp3b3JrVGhyZWFkQ2Fs
bGJhY2sodm9pZCogY29udGV4dCkKK3sKKyAgICBBU1NFUlRfQVJHKGNvbnRleHQsIGNvbnRleHQp
OworCisgICAgV29ya1F1ZXVlKiBxdWV1ZSA9IHN0YXRpY19jYXN0PFdvcmtRdWV1ZSo+KGNvbnRl
eHQpOworCisgICAgaWYgKCFxdWV1ZS0+dHJ5UmVnaXN0ZXJBc1dvcmtUaHJlYWQoKSkKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICBxdWV1ZS0+cGVyZm9ybVdvcmtPblJlZ2lzdGVyZWRXb3JrVGhy
ZWFkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjpwZXJmb3JtV29ya09u
UmVnaXN0ZXJlZFdvcmtUaHJlYWQoKQoreworICAgIEFTU0VSVChtX2lzV29ya1RocmVhZFJlZ2lz
dGVyZWQpOworCisgICAgYm9vbCBpc1ZhbGlkID0gdHJ1ZTsKKworICAgIG1fd29ya0l0ZW1RdWV1
ZUxvY2subG9jaygpOworCisgICAgd2hpbGUgKGlzVmFsaWQgJiYgIW1fd29ya0l0ZW1RdWV1ZS5p
c0VtcHR5KCkpIHsKKyAgICAgICAgVmVjdG9yPFJlZlB0cjxXb3JrSXRlbVdpbj4gPiB3b3JrSXRl
bVF1ZXVlOworICAgICAgICBtX3dvcmtJdGVtUXVldWUuc3dhcCh3b3JrSXRlbVF1ZXVlKTsKKwor
ICAgICAgICAvLyBBbGxvdyBtb3JlIHdvcmsgdG8gYmUgc2NoZWR1bGVkIHdoaWxlIHdlJ3JlIG5v
dCB1c2luZyB0aGUgcXVldWUgZGlyZWN0bHkuCisgICAgICAgIG1fd29ya0l0ZW1RdWV1ZUxvY2su
dW5sb2NrKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd29ya0l0ZW1RdWV1ZS5z
aXplKCk7ICsraSkgeworICAgICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1faXNWYWxpZE11
dGV4KTsKKyAgICAgICAgICAgIGlzVmFsaWQgPSBtX2lzVmFsaWQ7CisgICAgICAgICAgICBpZiAo
IWlzVmFsaWQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB3b3JrSXRlbVF1
ZXVlW2ldLT5mdW5jdGlvbigpKCk7CisgICAgICAgIH0KKyAgICAgICAgbV93b3JrSXRlbVF1ZXVl
TG9jay5sb2NrKCk7CisgICAgfQorCisgICAgLy8gT25lIGludmFyaWFudCB3ZSBtYWludGFpbiBp
cyB0aGF0IGFueSB3b3JrIHNjaGVkdWxlZCB3aGlsZSBhIHdvcmsgdGhyZWFkIGlzIHJlZ2lzdGVy
ZWQgd2lsbAorICAgIC8vIGJlIGhhbmRsZWQgYnkgdGhhdCB3b3JrIHRocmVhZC4gVW5yZWdpc3Rl
ciBhcyB0aGUgd29yayB0aHJlYWQgd2hpbGUgdGhlIHF1ZXVlIGxvY2sgaXMgc3RpbGwKKyAgICAv
LyBoZWxkIHNvIHRoYXQgbm8gd29yayBjYW4gYmUgc2NoZWR1bGVkIHdoaWxlIHdlJ3JlIHN0aWxs
IHJlZ2lzdGVyZWQuCisgICAgdW5yZWdpc3RlckFzV29ya1RocmVhZCgpOworCisgICAgbV93b3Jr
SXRlbVF1ZXVlTG9jay51bmxvY2soKTsKK30KKwordm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW5p
dGlhbGl6ZShjb25zdCBjaGFyKiBuYW1lKQoreworICAgIG1faXNXb3JrVGhyZWFkUmVnaXN0ZXJl
ZCA9IDA7CisgICAgbV90aW1lclF1ZXVlID0gOjpDcmVhdGVUaW1lclF1ZXVlKCk7CisgICAgQVNT
RVJUX1dJVEhfTUVTU0FHRShtX3RpbWVyUXVldWUsICI6OkNyZWF0ZVRpbWVyUXVldWUgZmFpbGVk
IHdpdGggZXJyb3IgJWx1IiwgOjpHZXRMYXN0RXJyb3IoKSk7Cit9CisKK2Jvb2wgV29ya1F1ZXVl
Ojp0cnlSZWdpc3RlckFzV29ya1RocmVhZCgpCit7CisgICAgTE9ORyByZXN1bHQgPSA6OkludGVy
bG9ja2VkQ29tcGFyZUV4Y2hhbmdlKCZtX2lzV29ya1RocmVhZFJlZ2lzdGVyZWQsIDEsIDApOwor
ICAgIEFTU0VSVCghcmVzdWx0IHx8IHJlc3VsdCA9PSAxKTsKKyAgICByZXR1cm4gIXJlc3VsdDsK
K30KKwordm9pZCBXb3JrUXVldWU6OnVucmVnaXN0ZXJBc1dvcmtUaHJlYWQoKQoreworICAgIExP
TkcgcmVzdWx0ID0gOjpJbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZSgmbV9pc1dvcmtUaHJlYWRS
ZWdpc3RlcmVkLCAwLCAxKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0ID09IDEp
OworfQorCit2b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKK3sKKyNpZiAhQVNT
RVJUX0RJU0FCTEVECisgICAgTXV0ZXhMb2NrZXIgbG9jayhtX2hhbmRsZXNMb2NrKTsKKyAgICBB
U1NFUlQobV9oYW5kbGVzLmlzRW1wdHkoKSk7CisjZW5kaWYKKworICAgIC8vIEZJWE1FOiBXZSBu
ZWVkIHRvIGVuc3VyZSB0aGF0IGFueSB0aW1lci1xdWV1ZSB0aW1lcnMgdGhhdCBmaXJlIGFmdGVy
IHRoaXMgcG9pbnQgZG9uJ3QgdHJ5IHRvCisgICAgLy8gYWNjZXNzIHRoaXMgV29ya1F1ZXVlIDxo
dHRwOi8vd2Via2l0Lm9yZy9iLzQ0NjkwPi4KKyAgICA6OkRlbGV0ZVRpbWVyUXVldWVFeChtX3Rp
bWVyUXVldWUsIDApOworfQorCit2b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2goY29uc3QgRnVuY3Rp
b248dm9pZCgpPiYgZnVuY3Rpb24pCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fd29ya0l0
ZW1RdWV1ZUxvY2spOworCisgICAgbV93b3JrSXRlbVF1ZXVlLmFwcGVuZChXb3JrSXRlbVdpbjo6
Y3JlYXRlKGZ1bmN0aW9uLCB0aGlzKSk7CisKKyAgICAvLyBTcGF3biBhIHdvcmsgdGhyZWFkIHRv
IHBlcmZvcm0gdGhlIHdvcmsgd2UganVzdCBhZGRlZC4gQXMgYW4gb3B0aW1pemF0aW9uLCB3ZSBh
dm9pZAorICAgIC8vIHNwYXduaW5nIHRoZSB0aHJlYWQgaWYgYSB3b3JrIHRocmVhZCBpcyBhbHJl
YWR5IHJlZ2lzdGVyZWQuIFRoaXMgcHJldmVudHMgbXVsdGlwbGUgd29yaworICAgIC8vIHRocmVh
ZHMgZnJvbSBiZWluZyBzcGF3bmVkIGluIG1vc3QgY2FzZXMuIChOb3RlIHRoYXQgd2hlbiBhIHdv
cmsgdGhyZWFkIGhhcyBiZWVuIHNwYXduZWQgYnV0CisgICAgLy8gaGFzbid0IHJlZ2lzdGVyZWQg
aXRzZWxmIHlldCwgbV9pc1dvcmtUaHJlYWRSZWdpc3RlcmVkIHdpbGwgYmUgZmFsc2UgYW5kIHdl
J2xsIGVuZCB1cAorICAgIC8vIHNwYXduaW5nIGEgc2Vjb25kIHdvcmsgdGhyZWFkIGhlcmUuIEJ1
dCB3b3JrIHRocmVhZCByZWdpc3RyYXRpb24gcHJvY2VzcyB3aWxsIGVuc3VyZSB0aGF0CisgICAg
Ly8gb25seSBvbmUgdGhyZWFkIGFjdHVhbGx5IGVuZHMgdXAgcGVyZm9ybWluZyB3b3JrLikKKyAg
ICBpZiAoIW1faXNXb3JrVGhyZWFkUmVnaXN0ZXJlZCkKKyAgICAgICAgOjpRdWV1ZVVzZXJXb3Jr
SXRlbSh3b3JrVGhyZWFkQ2FsbGJhY2ssIHRoaXMsIFdUX0VYRUNVVEVERUZBVUxUKTsKK30KKwor
c3RydWN0IFRpbWVyQ29udGV4dCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxUaW1lckNv
bnRleHQ+IHsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUaW1lckNvbnRleHQ+IGNyZWF0ZSgpIHsg
cmV0dXJuIGFkb3B0UmVmKG5ldyBUaW1lckNvbnRleHQpOyB9CisKKyAgICBXb3JrUXVldWUqIHF1
ZXVlOworICAgIEZ1bmN0aW9uPHZvaWQoKT4gZnVuY3Rpb247CisgICAgTXV0ZXggdGltZXJNdXRl
eDsKKyAgICBIQU5ETEUgdGltZXI7CisKK3ByaXZhdGU6CisgICAgVGltZXJDb250ZXh0KCkgOiBx
dWV1ZSgwKSwgdGltZXIoMCkgeyB9Cit9OworCit2b2lkIFdvcmtRdWV1ZTo6dGltZXJDYWxsYmFj
ayh2b2lkKiBjb250ZXh0LCBCT09MRUFOIHRpbWVyT3JXYWl0RmlyZWQpCit7CisgICAgQVNTRVJU
X0FSRyhjb250ZXh0LCBjb250ZXh0KTsKKyAgICBBU1NFUlRfVU5VU0VEKHRpbWVyT3JXYWl0Rmly
ZWQsIHRpbWVyT3JXYWl0RmlyZWQpOworCisgICAgLy8gQmFsYW5jZWQgYnkgbGVha1JlZiBpbiBz
Y2hlZHVsZVdvcmtBZnRlckRlbGF5LgorICAgIFJlZlB0cjxUaW1lckNvbnRleHQ+IHRpbWVyQ29u
dGV4dCA9IGFkb3B0UmVmKHN0YXRpY19jYXN0PFRpbWVyQ29udGV4dCo+KGNvbnRleHQpKTsKKwor
ICAgIHRpbWVyQ29udGV4dC0+cXVldWUtPmRpc3BhdGNoKHRpbWVyQ29udGV4dC0+ZnVuY3Rpb24p
OworCisgICAgTXV0ZXhMb2NrZXIgbG9jayh0aW1lckNvbnRleHQtPnRpbWVyTXV0ZXgpOworICAg
IEFTU0VSVCh0aW1lckNvbnRleHQtPnRpbWVyKTsKKyAgICBBU1NFUlQodGltZXJDb250ZXh0LT5x
dWV1ZS0+bV90aW1lclF1ZXVlKTsKKyAgICBpZiAoITo6RGVsZXRlVGltZXJRdWV1ZVRpbWVyKHRp
bWVyQ29udGV4dC0+cXVldWUtPm1fdGltZXJRdWV1ZSwgdGltZXJDb250ZXh0LT50aW1lciwgMCkp
CisgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoZmFsc2UsICI6OkRlbGV0ZVRpbWVyUXVldWVU
aW1lciBmYWlsZWQgd2l0aCBlcnJvciAlbHUiLCA6OkdldExhc3RFcnJvcigpKTsKK30KKwordm9p
ZCBXb3JrUXVldWU6OmRpc3BhdGNoQWZ0ZXJEZWxheShjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBm
dW5jdGlvbiwgZG91YmxlIGRlbGF5KQoreworICAgIEFTU0VSVChtX3RpbWVyUXVldWUpOworCisg
ICAgUmVmUHRyPFRpbWVyQ29udGV4dD4gY29udGV4dCA9IFRpbWVyQ29udGV4dDo6Y3JlYXRlKCk7
CisgICAgY29udGV4dC0+cXVldWUgPSB0aGlzOworICAgIGNvbnRleHQtPmZ1bmN0aW9uID0gZnVu
Y3Rpb247CisKKyAgICB7CisgICAgICAgIC8vIFRoZSB0aW1lciBjYWxsYmFjayBjb3VsZCBmaXJl
IGJlZm9yZSA6OkNyZWF0ZVRpbWVyUXVldWVUaW1lciBldmVuIHJldHVybnMsIHNvIHdlIHByb3Rl
Y3QKKyAgICAgICAgLy8gY29udGV4dC0+dGltZXIgd2l0aCBhIG11dGV4IHRvIGVuc3VyZSB0aGUg
dGltZXIgY2FsbGJhY2sgZG9lc24ndCBhY2Nlc3MgaXQgYmVmb3JlIHRoZQorICAgICAgICAvLyB0
aW1lciBoYW5kbGUgaGFzIGJlZW4gc3RvcmVkIGluIGl0LgorICAgICAgICBNdXRleExvY2tlciBs
b2NrKGNvbnRleHQtPnRpbWVyTXV0ZXgpOworCisgICAgICAgIC8vIFNpbmNlIG91ciB0aW1lciBj
YWxsYmFjayBpcyBxdWljaywgd2UgY2FuIGV4ZWN1dGUgaW4gdGhlIHRpbWVyIHRocmVhZCBpdHNl
bGYgYW5kIGF2b2lkCisgICAgICAgIC8vIGFuIGV4dHJhIHRocmVhZCBzd2l0Y2ggb3ZlciB0byBh
IHdvcmtlciB0aHJlYWQuCisgICAgICAgIGlmICghOjpDcmVhdGVUaW1lclF1ZXVlVGltZXIoJmNv
bnRleHQtPnRpbWVyLCBtX3RpbWVyUXVldWUsIHRpbWVyQ2FsbGJhY2ssIGNvbnRleHQuZ2V0KCks
IGRlbGF5ICogMTAwMCwgMCwgV1RfRVhFQ1VURUlOVElNRVJUSFJFQUQpKSB7CisgICAgICAgICAg
ICBBU1NFUlRfV0lUSF9NRVNTQUdFKGZhbHNlLCAiOjpDcmVhdGVUaW1lclF1ZXVlVGltZXIgZmFp
bGVkIHdpdGggZXJyb3IgJWx1IiwgOjpHZXRMYXN0RXJyb3IoKSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBUaGUgdGltZXIgY2FsbGJhY2sgd2lsbCBo
YW5kbGUgZGVzdHJveWluZyBjb250ZXh0LgorICAgIGNvbnRleHQucmVsZWFzZSgpLmxlYWtSZWYo
KTsKK30KKwordm9pZCBXb3JrUXVldWU6OnVucmVnaXN0ZXJXYWl0QW5kRGVzdHJveUl0ZW1Tb29u
KFBhc3NSZWZQdHI8SGFuZGxlV29ya0l0ZW0+IGl0ZW0pCit7CisgICAgLy8gV2UncmUgZ29pbmcg
dG8gbWFrZSBhIGJsb2NraW5nIGNhbGwgdG8gOjpVbnJlZ2lzdGVyV2FpdEV4IGJlZm9yZSBjbG9z
aW5nIHRoZSBoYW5kbGUuIChUaGUKKyAgICAvLyBibG9ja2luZyB2ZXJzaW9uIG9mIDo6VW5yZWdp
c3RlcldhaXRFeCBpcyBtdWNoIHNpbXBsZXIgdGhhbiB0aGUgbm9uLWJsb2NraW5nIHZlcnNpb24u
KSBJZiB3ZQorICAgIC8vIGRvIHRoaXMgb24gdGhlIGN1cnJlbnQgdGhyZWFkLCB3ZSdsbCBkZWFk
bG9jayBpZiB3ZSdyZSBjdXJyZW50bHkgaW4gYSBjYWxsYmFjayBmdW5jdGlvbiBmb3IKKyAgICAv
LyB0aGUgd2FpdCB3ZSdyZSB1bnJlZ2lzdGVyaW5nLiBTbyBpbnN0ZWFkIHdlIGRvIGl0IGFzeW5j
aHJvbm91c2x5IG9uIHNvbWUgb3RoZXIgd29ya2VyIHRocmVhZC4KKworICAgIDo6UXVldWVVc2Vy
V29ya0l0ZW0odW5yZWdpc3RlcldhaXRBbmREZXN0cm95SXRlbUNhbGxiYWNrLCBpdGVtLmxlYWtS
ZWYoKSwgV1RfRVhFQ1VURURFRkFVTFQpOworfQorCitEV09SRCBXSU5BUEkgV29ya1F1ZXVlOjp1
bnJlZ2lzdGVyV2FpdEFuZERlc3Ryb3lJdGVtQ2FsbGJhY2sodm9pZCogY29udGV4dCkKK3sKKyAg
ICBBU1NFUlRfQVJHKGNvbnRleHQsIGNvbnRleHQpOworICAgIFJlZlB0cjxIYW5kbGVXb3JrSXRl
bT4gaXRlbSA9IGFkb3B0UmVmKHN0YXRpY19jYXN0PEhhbmRsZVdvcmtJdGVtKj4oY29udGV4dCkp
OworCisgICAgLy8gTm93IHRoYXQgd2Uga25vdyB3ZSdyZSBub3QgaW4gYSBjYWxsYmFjayBmdW5j
dGlvbiBmb3IgdGhlIHdhaXQgd2UncmUgdW5yZWdpc3RlcmluZywgd2UgY2FuCisgICAgLy8gbWFr
ZSBhIGJsb2NraW5nIGNhbGwgdG8gOjpVbnJlZ2lzdGVyV2FpdEV4LgorICAgIGlmICghOjpVbnJl
Z2lzdGVyV2FpdEV4KGl0ZW0tPndhaXRIYW5kbGUoKSwgSU5WQUxJRF9IQU5ETEVfVkFMVUUpKSB7
CisgICAgICAgIERXT1JEIGVycm9yID0gOjpHZXRMYXN0RXJyb3IoKTsKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMu
dHh0CmluZGV4IDFkNDcwODg5YTNhMDBlMDI0MjNkNzYzYWZjZjNhNTZiNzU3MmQ2M2EuLjEzMzA1
MjQ1ZTk0YzBkYjU3YzE5NGQ0YmQwNWQ2M2UxMjU4NjQ2NTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0
CkBAIC0xMDIsNyArMTAyLDYgQEAgU0VUKFdlYktpdDJfSU5DTFVERV9ESVJFQ1RPUklFUwogU0VU
KFdlYktpdDJfU09VUkNFUwogICAgIFBsYXRmb3JtL0xvZ2dpbmcuY3BwCiAgICAgUGxhdGZvcm0v
TW9kdWxlLmNwcAotICAgIFBsYXRmb3JtL1dvcmtRdWV1ZS5jcHAKIAogICAgIFBsYXRmb3JtL0Nv
cmVJUEMvQXJndW1lbnRDb2RlcnMuY3BwCiAgICAgUGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVudERl
Y29kZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5saXN0LmFt
IGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCA2YzA2ZDVhZjkzNjQy
ZDQ1ODkzNTdiYTIxMzYyNmE2MDQ5NWNiNjc2Li4zZGQyZjY2ODdiMGU1NGY0NmRiYWI2NjRlNDI1
ZWU5MzM2YWFmNzM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5saXN0
LmFtCisrKyBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTI1Myw3ICsy
NTMsNiBAQCB3ZWJraXQyX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0Nv
cmVJUEMvdW5peC9Db25uZWN0aW9uVW5peC5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1BsYXRmb3Jt
L2d0ay9Mb2dnaW5nR3RrLmNwcCBcCiAJU291cmNlL1dlYktpdDIvUGxhdGZvcm0vZ3RrL01vZHVs
ZUd0ay5jcHAgXAotCVNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2d0ay9Xb3JrUXVldWVHdGsuY3Bw
IFwKIAlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Mb2dnaW5nLmNwcCBcCiAJU291cmNlL1dlYktp
dDIvUGxhdGZvcm0vTG9nZ2luZy5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Nb2R1bGUu
Y3BwIFwKQEAgLTI2MSw4ICsyNjAsNiBAQCB3ZWJraXQyX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtL1BsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIuaCBcCiAJU291cmNlL1dl
YktpdDIvUGxhdGZvcm0vU2hhcmVkTWVtb3J5LmggXAogCVNvdXJjZS9XZWJLaXQyL1BsYXRmb3Jt
L3VuaXgvU2hhcmVkTWVtb3J5VW5peC5jcHAgXAotCVNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1dv
cmtRdWV1ZS5jcHAgXAotCVNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1dvcmtRdWV1ZS5oIFwKIAlT
b3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94eS5jcHAgXAog
CVNvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclByb3h5LmggXAog
CVNvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvUGx1Z2luQ3JlYXRpb25QYXJhbWV0ZXJzLmNw
cCBcCkBAIC0xMTY5LDExICsxMTY2LDggQEAgd2Via2l0Ml9wbHVnaW5fcHJvY2Vzc19zb3VyY2Vz
ICs9IFwKIAlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3VuaXgvQ29ubmVjdGlvblVu
aXguY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Nb2R1bGUuY3BwIFwKIAlTb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybS9Nb2R1bGUuaCBcCi0JU291cmNlL1dlYktpdDIvUGxhdGZvcm0vV29y
a1F1ZXVlLmNwcCBcCi0JU291cmNlL1dlYktpdDIvUGxhdGZvcm0vV29ya1F1ZXVlLmggXAogCVNv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtL1NoYXJlZE1lbW9yeS5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybS9ndGsvTW9kdWxlR3RrLmNwcCBcCi0JU291cmNlL1dlYktpdDIvUGxhdGZvcm0vZ3Rr
L1dvcmtRdWV1ZUd0ay5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3VuaXgvU2hhcmVk
TWVtb3J5VW5peC5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvUGx1Z2luQ29u
dHJvbGxlclByb3h5LmNwcCBcCiAJU291cmNlL1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9QbHVnaW5D
b250cm9sbGVyUHJveHkuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9D
b3JlSVBDL0Nvbm5lY3Rpb24uaCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQ29u
bmVjdGlvbi5oCmluZGV4IDc3M2Y2ZTBkMTNmYjZjZWFjM2NiYWE1MGUzMGFmMTE3YzJlMDIwZWQu
LmEwMmY5MmUxNjAxMGJjNWI2MWRjYzc4MWZlNjM4MThmNGJhOTY5NDUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5oCkBAIC0zMiwxMSArMzIsMTEgQEAK
ICNpbmNsdWRlICJBcmd1bWVudEVuY29kZXIuaCIKICNpbmNsdWRlICJBcmd1bWVudHMuaCIKICNp
bmNsdWRlICJNZXNzYWdlSUQuaCIKLSNpbmNsdWRlICJXb3JrUXVldWUuaCIKICNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3Rm
L093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYvV29y
a1F1ZXVlLmg+CiAKICNpZiBPUyhEQVJXSU4pCiAjaW5jbHVkZSA8bWFjaC9tYWNoX3BvcnQuaD4K
QEAgLTQ3LDcgKzQ3LDcgQEAgY2xhc3MgUVNvY2tldE5vdGlmaWVyOwogI2VuZGlmCiAKICNpZiBQ
TEFURk9STShRVCkgfHwgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShFRkwpCi0jaW5jbHVkZSAi
UGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oIgorI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybVByb2Nl
c3NJZGVudGlmaWVyLmg+CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTI3LDcg
KzEyNyw3IEBAIHB1YmxpYzoKICNpZiBPUyhEQVJXSU4pCiAgICAgdm9pZCBzZXRTaG91bGRDbG9z
ZUNvbm5lY3Rpb25Pbk1hY2hFeGNlcHRpb25zKCk7CiAjZWxpZiBQTEFURk9STShRVCkKLSAgICB2
b2lkIHNldFNob3VsZENsb3NlQ29ubmVjdGlvbk9uUHJvY2Vzc1Rlcm1pbmF0aW9uKFdlYktpdDo6
UGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllcik7CisgICAgdm9pZCBzZXRTaG91bGRDbG9zZUNvbm5l
Y3Rpb25PblByb2Nlc3NUZXJtaW5hdGlvbihQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyKTsKICNl
bmRpZgogCiAgICAgdm9pZCBzZXRPbmx5U2VuZE1lc3NhZ2VzQXNEaXNwYXRjaFdoZW5XYWl0aW5n
Rm9yU3luY1JlcGx5V2hlblByb2Nlc3NpbmdTdWNoQU1lc3NhZ2UoYm9vbCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3VuaXgvQ29ubmVjdGlvblVuaXguY3Bw
IGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy91bml4L0Nvbm5lY3Rpb25Vbml4LmNw
cAppbmRleCA4ODVlNDk1Y2I3Njg4YzRlMzkxNzJhNzJiYWU5MmRlODk0MDVjOTg3Li40OWE1MDg5
MzNkYmM1ZmE5MzQzYzg4ZmJkZTk4Yzg0NDAzMGQ1MDE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3VuaXgvQ29ubmVjdGlvblVuaXguY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvdW5peC9Db25uZWN0aW9uVW5peC5jcHAKQEAgLTU1
Nyw3ICs1NTcsNyBAQCBib29sIENvbm5lY3Rpb246OnNlbmRPdXRnb2luZ01lc3NhZ2UoTWVzc2Fn
ZUlEIG1lc3NhZ2VJRCwgUGFzc093blB0cjxBcmd1bWVudEVuYwogfQogCiAjaWYgUExBVEZPUk0o
UVQpCi12b2lkIENvbm5lY3Rpb246OnNldFNob3VsZENsb3NlQ29ubmVjdGlvbk9uUHJvY2Vzc1Rl
cm1pbmF0aW9uKFdlYktpdDo6UGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllciBwcm9jZXNzKQordm9p
ZCBDb25uZWN0aW9uOjpzZXRTaG91bGRDbG9zZUNvbm5lY3Rpb25PblByb2Nlc3NUZXJtaW5hdGlv
bihQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyIHByb2Nlc3MpCiB7CiAgICAgbV9jb25uZWN0aW9u
UXVldWUuZGlzcGF0Y2hPblRlcm1pbmF0aW9uKHByb2Nlc3MsIFdURjo6YmluZCgmQ29ubmVjdGlv
bjo6Y29ubmVjdGlvbkRpZENsb3NlLCB0aGlzKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybS9QbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmggYi9Tb3VyY2UvV2ViS2l0
Mi9QbGF0Zm9ybS9QbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDk2ZWNiZTg3MjczYWZjZGNmYjA3OWRhNDBjMmU2NTMyYzhjZjg2NTMuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dDIvUGxhdGZvcm0vUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oCisrKyAvZGV2L251bGwKQEAg
LTEsNTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLQotI2lmbmRlZiBQbGF0Zm9ybVByb2Nlc3NJZGVu
dGlmaWVyX2gKLSNkZWZpbmUgUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllcl9oCi0KLSNpZiBQTEFU
Rk9STShRVCkKLWNsYXNzIFFQcm9jZXNzOwotI2VsaWYgUExBVEZPUk0oRUZMKQotI2luY2x1ZGUg
PHVuaXN0ZC5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi0jaWYgUExBVEZPUk0o
TUFDKQotdHlwZWRlZiBwaWRfdCBQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyOwotI2VsaWYgUExB
VEZPUk0oV0lOKQotdHlwZWRlZiBIQU5ETEUgUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllcjsKLSNl
bGlmIFBMQVRGT1JNKFFUKQotdHlwZWRlZiBRUHJvY2VzcyogUGxhdGZvcm1Qcm9jZXNzSWRlbnRp
ZmllcjsKLSNlbGlmIFBMQVRGT1JNKEdUSykKLSNpZmRlZiBHX09TX1dJTjMyCi10eXBlZGVmIHZv
aWQqIEdQaWQ7Ci0jZWxzZQotdHlwZWRlZiBpbnQgR1BpZDsKLSNlbmRpZgotdHlwZWRlZiBHUGlk
IFBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXI7Ci0jZWxpZiBQTEFURk9STShFRkwpCi10eXBlZGVm
IHBpZF90IFBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXI7Ci0jZW5kaWYKLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0IAotCi0jZW5kaWYgLy8gUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllcl9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrUXVldWUuY3BwIGIvU291cmNlL1dl
YktpdDIvUGxhdGZvcm0vV29ya1F1ZXVlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNmJjZGQyMjY0NDIzMDgyODA1NjBiODk0MjVhYjE2MDc3ZmNlYjVkYS4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9y
bS9Xb3JrUXVldWUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXb3JrUXVldWUuaCIKLQotV29ya1F1
ZXVlOjpXb3JrUXVldWUoY29uc3QgY2hhciogbmFtZSkKLSAgICA6IG1faXNWYWxpZCh0cnVlKQot
ewotICAgIHBsYXRmb3JtSW5pdGlhbGl6ZShuYW1lKTsKLX0KLQotV29ya1F1ZXVlOjp+V29ya1F1
ZXVlKCkKLXsKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1f
aXNWYWxpZE11dGV4KTsKLSAgICBBU1NFUlQoIW1faXNWYWxpZCk7Ci0jZW5kaWYKLX0KLQotdm9p
ZCBXb3JrUXVldWU6OmludmFsaWRhdGUoKQotewotICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIg
bG9ja2VyKG1faXNWYWxpZE11dGV4KTsKLSAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7Ci0gICAg
fQotCi0gICAgcGxhdGZvcm1JbnZhbGlkYXRlKCk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybS9Xb3JrUXVldWUuaCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1dvcmtR
dWV1ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjMwZGMwMjg1NWU1ZGEwOTRi
MTNmMWYxNTEzMjljMmRiNDE0MzBjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1dvcmtRdWV1ZS5oCisrKyAvZGV2
L251bGwKQEAgLTEsMjEwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEw
IE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaWZuZGVmIFdvcmtRdWV1ZV9oCi0jZGVmaW5lIFdvcmtRdWV1ZV9oCi0KLSNpZiBPUyhEQVJX
SU4pCi0jaWYgSEFWRShESVNQQVRDSF9IKQotI2luY2x1ZGUgPGRpc3BhdGNoL2Rpc3BhdGNoLmg+
Ci0jZW5kaWYKLSNlbmRpZgotCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3
dGYvRnVuY3Rpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3Rm
L1Bhc3NPd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0
Zi9UaHJlYWRpbmcuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLSNpZiAoUExBVEZPUk0o
UVQpICYmICFPUyhEQVJXSU4pKSB8fCBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKEVGTCkKLSNp
bmNsdWRlICJQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmgiCi0jZW5kaWYKLQotI2lmIFBMQVRG
T1JNKFFUKSAmJiAhT1MoREFSV0lOKQotI2luY2x1ZGUgPFFTb2NrZXROb3RpZmllcj4KLWNsYXNz
IFFPYmplY3Q7Ci1jbGFzcyBRVGhyZWFkOwotI2VsaWYgUExBVEZPUk0oR1RLKQotI2luY2x1ZGUg
PHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KLXR5cGVkZWYgZ2Jvb2xlYW4gKCpHU291cmNlRnVuYykg
KGdwb2ludGVyIGRhdGEpOwotI2VsaWYgUExBVEZPUk0oRUZMKQotI2luY2x1ZGUgPEVjb3JlLmg+
Ci0jZW5kaWYKLQotY2xhc3MgV29ya1F1ZXVlIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShX
b3JrUXVldWUpOwotCi1wdWJsaWM6Ci0gICAgZXhwbGljaXQgV29ya1F1ZXVlKGNvbnN0IGNoYXIq
IG5hbWUpOwotICAgIH5Xb3JrUXVldWUoKTsKLQotICAgIC8vIFdpbGwgZGlzcGF0Y2ggdGhlIGdp
dmVuIGZ1bmN0aW9uIHRvIHJ1biBhcyBzb29uIGFzIHBvc3NpYmxlLgotICAgIHZvaWQgZGlzcGF0
Y2goY29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOwotCi0gICAgLy8gV2lsbCBkaXNwYXRjaCB0aGUg
Z2l2ZW4gZnVuY3Rpb24gYWZ0ZXIgdGhlIGdpdmVuIGRlbGF5IChpbiBzZWNvbmRzKS4KLSAgICB2
b2lkIGRpc3BhdGNoQWZ0ZXJEZWxheShjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiwgZG91YmxlIGRl
bGF5KTsKLQotICAgIHZvaWQgaW52YWxpZGF0ZSgpOwotCi0jaWYgT1MoREFSV0lOKQotICAgIGVu
dW0gTWFjaFBvcnRFdmVudFR5cGUgewotICAgICAgICAvLyBGaXJlZCB3aGVuIHRoZXJlIGlzIGRh
dGEgb24gdGhlIGdpdmVuIHJlY2VpdmUgcmlnaHQuCi0gICAgICAgIE1hY2hQb3J0RGF0YUF2YWls
YWJsZSwKLSAgICAgICAgCi0gICAgICAgIC8vIEZpcmVkIHdoZW4gdGhlIHJlY2VpdmUgcmlnaHQg
Zm9yIHRoaXMgc2VuZCByaWdodCBoYXMgYmVlbiBkZXN0cm95ZWQuCi0gICAgICAgIE1hY2hQb3J0
RGVhZE5hbWVOb3RpZmljYXRpb24KLSAgICB9OwotICAgIAotICAgIC8vIFdpbGwgZXhlY3V0ZSB0
aGUgZ2l2ZW4gZnVuY3Rpb24gd2hlbmV2ZXIgdGhlIGdpdmVuIG1hY2ggcG9ydCBldmVudCBmaXJl
cy4KLSAgICAvLyBOb3RlIHRoYXQgdGhpcyB3aWxsIGFkb3B0IHRoZSBtYWNoIHBvcnQgYW5kIGRl
c3Ryb3kgaXQgd2hlbiB0aGUgd29yayBxdWV1ZSBpcyBpbnZhbGlkYXRlZC4KLSAgICB2b2lkIHJl
Z2lzdGVyTWFjaFBvcnRFdmVudEhhbmRsZXIobWFjaF9wb3J0X3QsIE1hY2hQb3J0RXZlbnRUeXBl
LCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyTWFjaFBvcnRF
dmVudEhhbmRsZXIobWFjaF9wb3J0X3QpOwotI2VsaWYgUExBVEZPUk0oV0lOKQotICAgIHZvaWQg
cmVnaXN0ZXJIYW5kbGUoSEFORExFLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7Ci0gICAgdm9p
ZCB1bnJlZ2lzdGVyQW5kQ2xvc2VIYW5kbGUoSEFORExFKTsKLSNlbGlmIFBMQVRGT1JNKFFUKQot
ICAgIFFTb2NrZXROb3RpZmllciogcmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIoaW50LCBRU29j
a2V0Tm90aWZpZXI6OlR5cGUsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsKLSAgICB2b2lkIGRp
c3BhdGNoT25UZXJtaW5hdGlvbihXZWJLaXQ6OlBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIsIGNv
bnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsKLSNlbGlmIFBMQVRGT1JNKEdUSykKLSAgICB2b2lkIHJl
Z2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKGludCwgaW50LCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+
Jik7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKGludCk7Ci0gICAgdm9p
ZCBkaXNwYXRjaE9uVGVybWluYXRpb24oV2ViS2l0OjpQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVy
LCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7Ci0jZWxpZiBQTEFURk9STShFRkwpCi0gICAgdm9p
ZCByZWdpc3RlclNvY2tldEV2ZW50SGFuZGxlcihpbnQsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4m
KTsKLSAgICB2b2lkIHVucmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIoaW50KTsKLSNlbmRpZgot
Ci1wcml2YXRlOgotICAgIC8vIEZJWE1FOiBVc2UgYW4gYXRvbWljIGJvb2xlYW4gaGVyZSBpbnN0
ZWFkLgotICAgIE11dGV4IG1faXNWYWxpZE11dGV4OwotICAgIGJvb2wgbV9pc1ZhbGlkOwotCi0g
ICAgdm9pZCBwbGF0Zm9ybUluaXRpYWxpemUoY29uc3QgY2hhciogbmFtZSk7Ci0gICAgdm9pZCBw
bGF0Zm9ybUludmFsaWRhdGUoKTsKLQotI2lmIE9TKERBUldJTikKLSNpZiBIQVZFKERJU1BBVENI
X0gpCi0gICAgc3RhdGljIHZvaWQgZXhlY3V0ZUZ1bmN0aW9uKHZvaWQqKTsKLSAgICBNdXRleCBt
X2V2ZW50U291cmNlc011dGV4OwotICAgIGNsYXNzIEV2ZW50U291cmNlOwotICAgIEhhc2hNYXA8
bWFjaF9wb3J0X3QsIEV2ZW50U291cmNlKj4gbV9ldmVudFNvdXJjZXM7Ci0gICAgZGlzcGF0Y2hf
cXVldWVfdCBtX2Rpc3BhdGNoUXVldWU7Ci0jZW5kaWYKLSNlbGlmIFBMQVRGT1JNKFdJTikKLSAg
ICBjbGFzcyBXb3JrSXRlbVdpbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxXb3JrSXRl
bVdpbj4gewotICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8V29ya0l0ZW1X
aW4+IGNyZWF0ZShjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiwgV29ya1F1ZXVlKik7Ci0gICAgICAg
IHZpcnR1YWwgfldvcmtJdGVtV2luKCk7Ci0KLSAgICAgICAgRnVuY3Rpb248dm9pZCgpPiYgZnVu
Y3Rpb24oKSB7IHJldHVybiBtX2Z1bmN0aW9uOyB9Ci0gICAgICAgIFdvcmtRdWV1ZSogcXVldWUo
KSBjb25zdCB7IHJldHVybiBtX3F1ZXVlOyB9Ci0KLSAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIFdv
cmtJdGVtV2luKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mLCBXb3JrUXVldWUqKTsKLQotICAgIHBy
aXZhdGU6Ci0gICAgICAgIEZ1bmN0aW9uPHZvaWQoKT4gbV9mdW5jdGlvbjsKLSAgICAgICAgV29y
a1F1ZXVlKiBtX3F1ZXVlOwotICAgIH07Ci0KLSAgICBjbGFzcyBIYW5kbGVXb3JrSXRlbSA6IHB1
YmxpYyBXb3JrSXRlbVdpbiB7Ci0gICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxIYW5kbGVXb3JrSXRlbT4gY3JlYXRlQnlBZG9wdGluZ0hhbmRsZShIQU5ETEUsIGNvbnN0IEZ1
bmN0aW9uPHZvaWQoKT4mLCBXb3JrUXVldWUqKTsKLSAgICAgICAgdmlydHVhbCB+SGFuZGxlV29y
a0l0ZW0oKTsKLQotICAgICAgICB2b2lkIHNldFdhaXRIYW5kbGUoSEFORExFIHdhaXRIYW5kbGUp
IHsgbV93YWl0SGFuZGxlID0gd2FpdEhhbmRsZTsgfQotICAgICAgICBIQU5ETEUgd2FpdEhhbmRs
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2FpdEhhbmRsZTsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAg
ICAgSGFuZGxlV29ya0l0ZW0oSEFORExFLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiwgV29ya1F1
ZXVlKik7Ci0KLSAgICAgICAgSEFORExFIG1faGFuZGxlOwotICAgICAgICBIQU5ETEUgbV93YWl0
SGFuZGxlOwotICAgIH07Ci0KLSAgICBzdGF0aWMgdm9pZCBDQUxMQkFDSyBoYW5kbGVDYWxsYmFj
ayh2b2lkKiBjb250ZXh0LCBCT09MRUFOIHRpbWVyT3JXYWl0RmlyZWQpOwotICAgIHN0YXRpYyB2
b2lkIENBTExCQUNLIHRpbWVyQ2FsbGJhY2sodm9pZCogY29udGV4dCwgQk9PTEVBTiB0aW1lck9y
V2FpdEZpcmVkKTsKLSAgICBzdGF0aWMgRFdPUkQgV0lOQVBJIHdvcmtUaHJlYWRDYWxsYmFjayh2
b2lkKiBjb250ZXh0KTsKLQotICAgIGJvb2wgdHJ5UmVnaXN0ZXJBc1dvcmtUaHJlYWQoKTsKLSAg
ICB2b2lkIHVucmVnaXN0ZXJBc1dvcmtUaHJlYWQoKTsKLSAgICB2b2lkIHBlcmZvcm1Xb3JrT25S
ZWdpc3RlcmVkV29ya1RocmVhZCgpOwotCi0gICAgc3RhdGljIHZvaWQgdW5yZWdpc3RlcldhaXRB
bmREZXN0cm95SXRlbVNvb24oUGFzc1JlZlB0cjxIYW5kbGVXb3JrSXRlbT4pOwotICAgIHN0YXRp
YyBEV09SRCBXSU5BUEkgdW5yZWdpc3RlcldhaXRBbmREZXN0cm95SXRlbUNhbGxiYWNrKHZvaWQq
IGNvbnRleHQpOwotCi0gICAgdm9sYXRpbGUgTE9ORyBtX2lzV29ya1RocmVhZFJlZ2lzdGVyZWQ7
Ci0KLSAgICBNdXRleCBtX3dvcmtJdGVtUXVldWVMb2NrOwotICAgIFZlY3RvcjxSZWZQdHI8V29y
a0l0ZW1XaW4+ID4gbV93b3JrSXRlbVF1ZXVlOwotCi0gICAgTXV0ZXggbV9oYW5kbGVzTG9jazsK
LSAgICBIYXNoTWFwPEhBTkRMRSwgUmVmUHRyPEhhbmRsZVdvcmtJdGVtPiA+IG1faGFuZGxlczsK
LQotICAgIEhBTkRMRSBtX3RpbWVyUXVldWU7Ci0jZWxpZiBQTEFURk9STShRVCkKLSAgICBjbGFz
cyBXb3JrSXRlbVF0OwotICAgIFFUaHJlYWQqIG1fd29ya1RocmVhZDsKLSAgICBmcmllbmQgY2xh
c3MgV29ya0l0ZW1RdDsKLSNlbGlmIFBMQVRGT1JNKEdUSykKLSAgICBzdGF0aWMgdm9pZCBzdGFy
dFdvcmtRdWV1ZVRocmVhZChXb3JrUXVldWUqKTsKLSAgICB2b2lkIHdvcmtRdWV1ZVRocmVhZEJv
ZHkoKTsKLSAgICB2b2lkIGRpc3BhdGNoT25Tb3VyY2UoR1NvdXJjZSosIGNvbnN0IEZ1bmN0aW9u
PHZvaWQoKT4mLCBHU291cmNlRnVuYyk7Ci0KLSAgICBUaHJlYWRJZGVudGlmaWVyIG1fd29ya1F1
ZXVlVGhyZWFkOwotICAgIEdSZWZQdHI8R01haW5Db250ZXh0PiBtX2V2ZW50Q29udGV4dDsKLSAg
ICBNdXRleCBtX2V2ZW50TG9vcExvY2s7Ci0gICAgR1JlZlB0cjxHTWFpbkxvb3A+IG1fZXZlbnRM
b29wOwotICAgIE11dGV4IG1fZXZlbnRTb3VyY2VzTG9jazsKLSAgICBjbGFzcyBFdmVudFNvdXJj
ZTsKLSAgICBIYXNoTWFwPGludCwgVmVjdG9yPEV2ZW50U291cmNlKj4gPiBtX2V2ZW50U291cmNl
czsKLSAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCBWZWN0b3I8RXZlbnRTb3VyY2UqPiA+OjppdGVy
YXRvciBFdmVudFNvdXJjZUl0ZXJhdG9yOyAKLSNlbGlmIFBMQVRGT1JNKEVGTCkKLSAgICBmZF9z
ZXQgbV9maWxlRGVzY3JpcHRvclNldDsKLSAgICBpbnQgbV9tYXhGaWxlRGVzY3JpcHRvcjsKLSAg
ICBpbnQgbV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yOwotICAgIGludCBtX3dyaXRlVG9QaXBlRGVz
Y3JpcHRvcjsKLSAgICBib29sIG1fdGhyZWFkTG9vcDsKLQotICAgIFZlY3RvcjxGdW5jdGlvbjx2
b2lkKCk+ID4gbV93b3JrSXRlbVF1ZXVlOwotICAgIE11dGV4IG1fd29ya0l0ZW1RdWV1ZUxvY2s7
Ci0KLSAgICBpbnQgbV9zb2NrZXREZXNjcmlwdG9yOwotICAgIEZ1bmN0aW9uPHZvaWQoKT4gbV9z
b2NrZXRFdmVudEhhbmRsZXI7Ci0KLSAgICBIYXNoTWFwPGludCwgT3duUHRyPEVjb3JlX1RpbWVy
PiA+IG1fdGltZXJzOwotCi0gICAgdm9pZCBzZW5kTWVzc2FnZVRvVGhyZWFkKGNvbnN0IGNoYXIq
KTsKLSAgICBzdGF0aWMgdm9pZCogd29ya1F1ZXVlVGhyZWFkKFdvcmtRdWV1ZSopOwotICAgIHZv
aWQgcGVyZm9ybVdvcmsoKTsKLSAgICB2b2lkIHBlcmZvcm1GaWxlRGVzY3JpcHRvcldvcmsoKTsK
LSAgICBzdGF0aWMgYm9vbCB0aW1lckZpcmVkKHZvaWQqKTsKLSNlbmRpZgotfTsKLQotI2VuZGlm
IC8vIFdvcmtRdWV1ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9lZmwv
V29ya1F1ZXVlRWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2VmbC9Xb3JrUXVldWVF
ZmwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTM5YmE5ZWQ5YjEyNzBmZTdk
ZjllNmNlNjg1ZGI0NzNhNWY1OGE3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2VmbC9Xb3JrUXVldWVFZmwuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsMTczICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAy
MDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAg
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIldvcmtRdWV1ZS5oIgotCi0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotY2xhc3Mg
VGltZXJXb3JrSXRlbSB7Ci1wdWJsaWM6Ci0gICAgVGltZXJXb3JrSXRlbShpbnQgdGltZXJJRCwg
Y29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24sIFdvcmtRdWV1ZSogcXVldWUpCi0gICAg
ICAgIDogbV9mdW5jdGlvbihmdW5jdGlvbikKLSAgICAgICAgLCBtX3F1ZXVlKHF1ZXVlKQotICAg
ICAgICAsIG1fdGltZXJJRCh0aW1lcklEKQotICAgIHsKLSAgICB9Ci0gICAgflRpbWVyV29ya0l0
ZW0oKSB7IH0KLQotICAgIEZ1bmN0aW9uPHZvaWQoKT4gZnVuY3Rpb24oKSBjb25zdCB7IHJldHVy
biBtX2Z1bmN0aW9uOyB9Ci0gICAgV29ya1F1ZXVlKiBxdWV1ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
cXVldWU7IH0KLQotICAgIGludCB0aW1lcklEKCkgY29uc3QgeyByZXR1cm4gbV90aW1lcklEOyB9
Ci0KLXByaXZhdGU6Ci0gICAgRnVuY3Rpb248dm9pZCgpPiBtX2Z1bmN0aW9uOwotICAgIFdvcmtR
dWV1ZSogbV9xdWV1ZTsKLSAgICBpbnQgbV90aW1lcklEOwotfTsKLQotc3RhdGljIGNvbnN0IGlu
dCBpbnZhbGlkU29ja2V0RGVzY3JpcHRvciA9IC0xOwotc3RhdGljIGNvbnN0IGludCB0aHJlYWRN
ZXNzYWdlU2l6ZSA9IDE7Ci1zdGF0aWMgY29uc3QgY2hhciBmaW5pc2hUaHJlYWRNZXNzYWdlW10g
PSAiRiI7Ci1zdGF0aWMgY29uc3QgY2hhciB3YWt1cFRocmVhZE1lc3NhZ2VbXSA9ICJXIjsKLQot
dm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW5pdGlhbGl6ZShjb25zdCBjaGFyKiBuYW1lKQotewot
ICAgIGludCBmZHNbMl07Ci0gICAgaWYgKHBpcGUoZmRzKSkKLSAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0KLSAgICBtX3JlYWRGcm9tUGlwZURlc2NyaXB0b3IgPSBmZHNbMF07Ci0gICAg
bV93cml0ZVRvUGlwZURlc2NyaXB0b3IgPSBmZHNbMV07Ci0gICAgRkRfWkVSTygmbV9maWxlRGVz
Y3JpcHRvclNldCk7Ci0gICAgRkRfU0VUKG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvciwgJm1fZmls
ZURlc2NyaXB0b3JTZXQpOwotICAgIG1fbWF4RmlsZURlc2NyaXB0b3IgPSBtX3JlYWRGcm9tUGlw
ZURlc2NyaXB0b3I7Ci0KLSAgICBtX3NvY2tldERlc2NyaXB0b3IgPSBpbnZhbGlkU29ja2V0RGVz
Y3JpcHRvcjsKLQotICAgIG1fdGhyZWFkTG9vcCA9IHRydWU7Ci0gICAgY3JlYXRlVGhyZWFkKHJl
aW50ZXJwcmV0X2Nhc3Q8V1RGOjpUaHJlYWRGdW5jdGlvbj4oJldvcmtRdWV1ZTo6d29ya1F1ZXVl
VGhyZWFkKSwgdGhpcywgbmFtZSk7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpwbGF0Zm9ybUludmFs
aWRhdGUoKQotewotICAgIHNlbmRNZXNzYWdlVG9UaHJlYWQoZmluaXNoVGhyZWFkTWVzc2FnZSk7
Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpwZXJmb3JtV29yaygpCi17Ci0gICAgbV93b3JrSXRlbVF1
ZXVlTG9jay5sb2NrKCk7Ci0KLSAgICB3aGlsZSAoIW1fd29ya0l0ZW1RdWV1ZS5pc0VtcHR5KCkp
IHsKLSAgICAgICAgVmVjdG9yPEZ1bmN0aW9uPHZvaWQoKT4gPiB3b3JrSXRlbVF1ZXVlOwotICAg
ICAgICBtX3dvcmtJdGVtUXVldWUuc3dhcCh3b3JrSXRlbVF1ZXVlKTsKLQotICAgICAgICBtX3dv
cmtJdGVtUXVldWVMb2NrLnVubG9jaygpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHdvcmtJdGVtUXVldWUuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICB3b3JrSXRlbVF1ZXVlW2ld
KCk7Ci0gICAgICAgIG1fd29ya0l0ZW1RdWV1ZUxvY2subG9jaygpOwotICAgIH0KLSAgICBtX3dv
cmtJdGVtUXVldWVMb2NrLnVubG9jaygpOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6cGVyZm9ybUZp
bGVEZXNjcmlwdG9yV29yaygpCi17Ci0gICAgZmRfc2V0IHJlYWRGaWxlRGVzY3JpcHRvclNldCA9
IG1fZmlsZURlc2NyaXB0b3JTZXQ7Ci0KLSAgICBpZiAoc2VsZWN0KG1fbWF4RmlsZURlc2NyaXB0
b3IgKyAxLCAmcmVhZEZpbGVEZXNjcmlwdG9yU2V0LCAwLCAwLCAwKSA+PSAwKSB7Ci0gICAgICAg
IGlmIChGRF9JU1NFVChtX3JlYWRGcm9tUGlwZURlc2NyaXB0b3IsICZyZWFkRmlsZURlc2NyaXB0
b3JTZXQpKSB7Ci0gICAgICAgICAgICBjaGFyIHJlYWRCdWZbdGhyZWFkTWVzc2FnZVNpemVdOwot
ICAgICAgICAgICAgaWYgKHJlYWQobV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yLCByZWFkQnVmLCB0
aHJlYWRNZXNzYWdlU2l6ZSkgPT0gLTEpCi0gICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWls
ZWQgdG8gcmVhZCBmcm9tIFdvcmtRdWV1ZVRocmVhZCBwaXBlIik7Ci0gICAgICAgICAgICBpZiAo
IXN0cm5jbXAocmVhZEJ1ZiwgZmluaXNoVGhyZWFkTWVzc2FnZSwgdGhyZWFkTWVzc2FnZVNpemUp
KQotICAgICAgICAgICAgICAgIG1fdGhyZWFkTG9vcCA9IGZhbHNlOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKG1fc29ja2V0RGVzY3JpcHRvciAhPSBpbnZhbGlkU29ja2V0RGVzY3JpcHRvciAm
JiBGRF9JU1NFVChtX3NvY2tldERlc2NyaXB0b3IsICZyZWFkRmlsZURlc2NyaXB0b3JTZXQpKQot
ICAgICAgICAgICAgbV9zb2NrZXRFdmVudEhhbmRsZXIoKTsKLSAgICB9Ci19Ci0KLXZvaWQgV29y
a1F1ZXVlOjpzZW5kTWVzc2FnZVRvVGhyZWFkKGNvbnN0IGNoYXIqIG1lc3NhZ2UpCi17Ci0gICAg
aWYgKHdyaXRlKG1fd3JpdGVUb1BpcGVEZXNjcmlwdG9yLCBtZXNzYWdlLCB0aHJlYWRNZXNzYWdl
U2l6ZSkgPT0gLTEpCi0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHdha2UgdXAgV29ya1F1
ZXVlIFRocmVhZCIpOwotfQotCi12b2lkKiBXb3JrUXVldWU6OndvcmtRdWV1ZVRocmVhZChXb3Jr
UXVldWUqIHdvcmtRdWV1ZSkKLXsKLSAgICB3aGlsZSAod29ya1F1ZXVlLT5tX3RocmVhZExvb3Ap
IHsKLSAgICAgICAgd29ya1F1ZXVlLT5wZXJmb3JtV29yaygpOwotICAgICAgICB3b3JrUXVldWUt
PnBlcmZvcm1GaWxlRGVzY3JpcHRvcldvcmsoKTsKLSAgICB9Ci0KLSAgICBjbG9zZSh3b3JrUXVl
dWUtPm1fcmVhZEZyb21QaXBlRGVzY3JpcHRvcik7Ci0gICAgY2xvc2Uod29ya1F1ZXVlLT5tX3dy
aXRlVG9QaXBlRGVzY3JpcHRvcik7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBXb3JrUXVl
dWU6OnJlZ2lzdGVyU29ja2V0RXZlbnRIYW5kbGVyKGludCBmaWxlRGVzY3JpcHRvciwgY29uc3Qg
RnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCi17Ci0gICAgaWYgKG1fc29ja2V0RGVzY3JpcHRv
ciAhPSBpbnZhbGlkU29ja2V0RGVzY3JpcHRvcikKLSAgICAgICAgTE9HX0VSUk9SKCIlZCBpcyBh
bHJlYWR5IHJlZ2lzdGVyZC4iLCBmaWxlRGVzY3JpcHRvcik7Ci0KLSAgICBtX3NvY2tldERlc2Ny
aXB0b3IgPSBmaWxlRGVzY3JpcHRvcjsKLSAgICBtX3NvY2tldEV2ZW50SGFuZGxlciA9IGZ1bmN0
aW9uOwotCi0gICAgaWYgKGZpbGVEZXNjcmlwdG9yID4gbV9tYXhGaWxlRGVzY3JpcHRvcikKLSAg
ICAgICAgbV9tYXhGaWxlRGVzY3JpcHRvciA9IGZpbGVEZXNjcmlwdG9yOwotICAgIEZEX1NFVChm
aWxlRGVzY3JpcHRvciwgJm1fZmlsZURlc2NyaXB0b3JTZXQpOwotfQotCi12b2lkIFdvcmtRdWV1
ZTo6dW5yZWdpc3RlclNvY2tldEV2ZW50SGFuZGxlcihpbnQgZmlsZURlc2NyaXB0b3IpCi17Ci0g
ICAgbV9zb2NrZXREZXNjcmlwdG9yID0gaW52YWxpZFNvY2tldERlc2NyaXB0b3I7Ci0KLSAgICBp
ZiAoZmlsZURlc2NyaXB0b3IgPT0gbV9tYXhGaWxlRGVzY3JpcHRvcikKLSAgICAgICAgbV9tYXhG
aWxlRGVzY3JpcHRvciA9IG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvcjsKLSAgICBGRF9DTFIoZmls
ZURlc2NyaXB0b3IsICZtX2ZpbGVEZXNjcmlwdG9yU2V0KTsKLX0KLQotdm9pZCBXb3JrUXVldWU6
OmRpc3BhdGNoKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQotewotICAgIE11dGV4
TG9ja2VyIGxvY2tlcihtX3dvcmtJdGVtUXVldWVMb2NrKTsKLSAgICBtX3dvcmtJdGVtUXVldWUu
YXBwZW5kKGZ1bmN0aW9uKTsKLSAgICBzZW5kTWVzc2FnZVRvVGhyZWFkKHdha3VwVGhyZWFkTWVz
c2FnZSk7Ci19Ci0KLWJvb2wgV29ya1F1ZXVlOjp0aW1lckZpcmVkKHZvaWQqIGRhdGEpCi17Ci0g
ICAgVGltZXJXb3JrSXRlbSogaXRlbSA9IHN0YXRpY19jYXN0PFRpbWVyV29ya0l0ZW0qPihkYXRh
KTsKLSAgICBpZiAoaXRlbSAmJiBpdGVtLT5xdWV1ZSgpLT5tX2lzVmFsaWQpIHsKLSAgICAgICAg
aXRlbS0+cXVldWUoKS0+ZGlzcGF0Y2goaXRlbS0+ZnVuY3Rpb24oKSk7Ci0gICAgICAgIGl0ZW0t
PnF1ZXVlKCktPm1fdGltZXJzLnRha2UoaXRlbS0+dGltZXJJRCgpKTsKLSAgICAgICAgZGVsZXRl
IGl0ZW07Ci0gICAgfQotCi0gICAgcmV0dXJuIEVDT1JFX0NBTExCQUNLX0NBTkNFTDsKLX0KLQot
dm9pZCBXb3JrUXVldWU6OmRpc3BhdGNoQWZ0ZXJEZWxheShjb25zdCBGdW5jdGlvbjx2b2lkKCk+
JiBmdW5jdGlvbiwgZG91YmxlIGRlbGF5KQotewotICAgIHN0YXRpYyBpbnQgdGltZXJJZCA9IDA7
Ci0gICAgbV90aW1lcnMuc2V0KHRpbWVySWQsIGFkb3B0UHRyKGVjb3JlX3RpbWVyX2FkZChkZWxh
eSwgcmVpbnRlcnByZXRfY2FzdDxFY29yZV9UYXNrX0NiPih0aW1lckZpcmVkKSwgbmV3IFRpbWVy
V29ya0l0ZW0odGltZXJJZCwgZnVuY3Rpb24sIHRoaXMpKSkpOwotICAgIHRpbWVySWQrKzsKLX0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2d0ay9Xb3JrUXVldWVHdGsuY3Bw
IGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vZ3RrL1dvcmtRdWV1ZUd0ay5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkZmFiODNjY2ZiMjRjOWYwMGVlNDBkMmRhYTFjOTViMTYz
ODJhNDMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYktpdDIvUGxhdGZvcm0vZ3RrL1dvcmtRdWV1ZUd0ay5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSwyMzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgot
ICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIldvcmtRdWV1ZS5oIgotCi0jaW5jbHVkZSAiV0tCYXNlLmgiCi0jaW5jbHVkZSA8Z2lvL2dp
by5oPgotI2luY2x1ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+
Ci0KLS8vIFdvcmtRdWV1ZTo6RXZlbnRTb3VyY2UKLWNsYXNzIFdvcmtRdWV1ZTo6RXZlbnRTb3Vy
Y2UgewotcHVibGljOgotICAgIEV2ZW50U291cmNlKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1
bmN0aW9uLCBXb3JrUXVldWUqIHdvcmtRdWV1ZSwgR0NhbmNlbGxhYmxlKiBjYW5jZWxsYWJsZSkK
LSAgICAgICAgOiBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQotICAgICAgICAsIG1fd29ya1F1ZXVlKHdv
cmtRdWV1ZSkKLSAgICAgICAgLCBtX2NhbmNlbGxhYmxlKGNhbmNlbGxhYmxlKQotICAgIHsKLSAg
ICB9Ci0KLSAgICB2b2lkIGNhbmNlbCgpCi0gICAgewotICAgICAgICBpZiAoIW1fY2FuY2VsbGFi
bGUpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGdfY2FuY2VsbGFibGVfY2FuY2VsKG1f
Y2FuY2VsbGFibGUpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGV4ZWN1dGVFdmVudFNvdXJj
ZShFdmVudFNvdXJjZSogZXZlbnRTb3VyY2UpCi0gICAgewotICAgICAgICBBU1NFUlQoZXZlbnRT
b3VyY2UpOwotICAgICAgICBXb3JrUXVldWUqIHF1ZXVlID0gZXZlbnRTb3VyY2UtPm1fd29ya1F1
ZXVlOwotICAgICAgICB7Ci0gICAgICAgICAgICBNdXRleExvY2tlciBsb2NrZXIocXVldWUtPm1f
aXNWYWxpZE11dGV4KTsKLSAgICAgICAgICAgIGlmICghcXVldWUtPm1faXNWYWxpZCkKLSAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBldmVudFNvdXJjZS0+bV9m
dW5jdGlvbigpOwotICAgIH0KLQotICAgIHN0YXRpYyBnYm9vbGVhbiBwZXJmb3JtV29ya09uY2Uo
RXZlbnRTb3VyY2UqIGV2ZW50U291cmNlKQotICAgIHsKLSAgICAgICAgZXhlY3V0ZUV2ZW50U291
cmNlKGV2ZW50U291cmNlKTsKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLQotICAgIHN0
YXRpYyBnYm9vbGVhbiBwZXJmb3JtV29yayhHU29ja2V0KiBzb2NrZXQsIEdJT0NvbmRpdGlvbiBj
b25kaXRpb24sIEV2ZW50U291cmNlKiBldmVudFNvdXJjZSkKLSAgICB7Ci0gICAgICAgIGlmICgh
KGNvbmRpdGlvbiAmIEdfSU9fSU4pICYmICEoY29uZGl0aW9uICYgR19JT19IVVApICYmICEoY29u
ZGl0aW9uICYgR19JT19FUlIpKSB7Ci0gICAgICAgICAgICAvLyBFdmVudFNvdXJjZSBoYXMgYmVl
biBjYW5jZWxsZWQsIHJldHVybiBGQUxTRSB0byBkZXN0cm95IHRoZSBzb3VyY2UuCi0gICAgICAg
ICAgICByZXR1cm4gRkFMU0U7Ci0gICAgICAgIH0KLQotICAgICAgICBleGVjdXRlRXZlbnRTb3Vy
Y2UoZXZlbnRTb3VyY2UpOwotICAgICAgICByZXR1cm4gVFJVRTsKLSAgICB9Ci0KLSAgICBzdGF0
aWMgZ2Jvb2xlYW4gcGVyZm9ybVdvcmtPblRlcm1pbmF0aW9uKEdQaWQsIGdpbnQsIEV2ZW50U291
cmNlKiBldmVudFNvdXJjZSkKLSAgICB7Ci0gICAgICAgIGV4ZWN1dGVFdmVudFNvdXJjZShldmVu
dFNvdXJjZSk7Ci0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9p
ZCBkZWxldGVFdmVudFNvdXJjZShFdmVudFNvdXJjZSogZXZlbnRTb3VyY2UpIAotICAgIHsKLSAg
ICAgICAgQVNTRVJUKGV2ZW50U291cmNlKTsKLSAgICAgICAgZGVsZXRlIGV2ZW50U291cmNlOwot
ICAgIH0KLSAgIAotcHVibGljOgotICAgIEZ1bmN0aW9uPHZvaWQoKT4gbV9mdW5jdGlvbjsKLSAg
ICBXb3JrUXVldWUqIG1fd29ya1F1ZXVlOwotICAgIEdDYW5jZWxsYWJsZSogbV9jYW5jZWxsYWJs
ZTsKLX07Ci0KLS8vIFdvcmtRdWV1ZQotc3RhdGljIGNvbnN0IHNpemVfdCBrVmlzdWFsU3R1ZGlv
VGhyZWFkTmFtZUxpbWl0ID0gMzE7Ci0KLXZvaWQgV29ya1F1ZXVlOjpwbGF0Zm9ybUluaXRpYWxp
emUoY29uc3QgY2hhciogbmFtZSkKLXsKLSAgICBtX2V2ZW50Q29udGV4dCA9IGFkb3B0R1JlZihn
X21haW5fY29udGV4dF9uZXcoKSk7Ci0gICAgQVNTRVJUKG1fZXZlbnRDb250ZXh0KTsKLSAgICBt
X2V2ZW50TG9vcCA9IGFkb3B0R1JlZihnX21haW5fbG9vcF9uZXcobV9ldmVudENvbnRleHQuZ2V0
KCksIEZBTFNFKSk7Ci0gICAgQVNTRVJUKG1fZXZlbnRMb29wKTsKLQotICAgIC8vIFRoaXMgbmFt
ZSBjYW4gYmUgY29tLmFwcGxlLldlYktpdC5Qcm9jZXNzTGF1bmNoZXIgb3IgY29tLmFwcGxlLkNv
cmVJUEMuUmVjZWl2ZVF1ZXVlLgotICAgIC8vIFdlIGFyZSB1c2luZyB0aG9zZSBuYW1lcyBmb3Ig
dGhlIHRocmVhZCBuYW1lLCBidXQgYm90aCBhcmUgbG9uZ2VyIHRoYW4gMzEgY2hhcmFjdGVycywK
LSAgICAvLyB3aGljaCBpcyB0aGUgbGltaXQgb2YgVmlzdWFsIFN0dWRpbyBmb3IgdGhyZWFkIG5h
bWVzLgotICAgIC8vIFdoZW4gbG9nIGlzIGVuYWJsZWQgY3JlYXRlVGhyZWFkKCkgd2lsbCBhc3Nl
cnQgaW5zdGVhZCBvZiB0cnVuY2F0ZSB0aGUgbmFtZSwgc28gd2UgbmVlZAotICAgIC8vIHRvIG1h
a2Ugc3VyZSB3ZSBkb24ndCB1c2UgYSBuYW1lIGxvbmdlciB0aGFuIDMxIGNoYXJhY3RlcnMuCi0g
ICAgY29uc3QgY2hhciogdGhyZWFkTmFtZSA9IGdfc3RycnN0cihuYW1lLCAiLiIpOwotICAgIGlm
ICh0aHJlYWROYW1lKQotICAgICAgICB0aHJlYWROYW1lKys7Ci0gICAgZWxzZQotICAgICAgICB0
aHJlYWROYW1lID0gbmFtZTsKLSAgICBpZiAoc3RybGVuKHRocmVhZE5hbWUpID4ga1Zpc3VhbFN0
dWRpb1RocmVhZE5hbWVMaW1pdCkKLSAgICAgICAgdGhyZWFkTmFtZSArPSBzdHJsZW4odGhyZWFk
TmFtZSkgLSBrVmlzdWFsU3R1ZGlvVGhyZWFkTmFtZUxpbWl0OwotCi0gICAgbV93b3JrUXVldWVU
aHJlYWQgPSBjcmVhdGVUaHJlYWQocmVpbnRlcnByZXRfY2FzdDxXVEY6OlRocmVhZEZ1bmN0aW9u
PigmV29ya1F1ZXVlOjpzdGFydFdvcmtRdWV1ZVRocmVhZCksIHRoaXMsIHRocmVhZE5hbWUpOwot
fQotCi12b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKLXsKLSAgICBNdXRleExv
Y2tlciBsb2NrZXIobV9ldmVudExvb3BMb2NrKTsKLQotICAgIGlmIChtX2V2ZW50TG9vcCkgewot
ICAgICAgICBpZiAoZ19tYWluX2xvb3BfaXNfcnVubmluZyhtX2V2ZW50TG9vcC5nZXQoKSkpCi0g
ICAgICAgICAgICBnX21haW5fbG9vcF9xdWl0KG1fZXZlbnRMb29wLmdldCgpKTsKLSAgICAgICAg
bV9ldmVudExvb3AuY2xlYXIoKTsKLSAgICB9Ci0KLSAgICBtX2V2ZW50Q29udGV4dC5jbGVhcigp
OwotfQotCi12b2lkIFdvcmtRdWV1ZTo6c3RhcnRXb3JrUXVldWVUaHJlYWQoV29ya1F1ZXVlKiB3
b3JrUXVldWUpCi17Ci0gICAgd29ya1F1ZXVlLT53b3JrUXVldWVUaHJlYWRCb2R5KCk7Ci19Ci0K
LXZvaWQgV29ya1F1ZXVlOjp3b3JrUXVldWVUaHJlYWRCb2R5KCkKLXsKLSAgICBnX21haW5fbG9v
cF9ydW4obV9ldmVudExvb3AuZ2V0KCkpOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6cmVnaXN0ZXJF
dmVudFNvdXJjZUhhbmRsZXIoaW50IGZpbGVEZXNjcmlwdG9yLCBpbnQgY29uZGl0aW9uLCBjb25z
dCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKLXsKLSAgICBHUmVmUHRyPEdTb2NrZXQ+IHNv
Y2tldCA9IGFkb3B0R1JlZihnX3NvY2tldF9uZXdfZnJvbV9mZChmaWxlRGVzY3JpcHRvciwgMCkp
OwotICAgIEFTU0VSVChzb2NrZXQpOwotICAgIEdSZWZQdHI8R0NhbmNlbGxhYmxlPiBjYW5jZWxs
YWJsZSA9IGFkb3B0R1JlZihnX2NhbmNlbGxhYmxlX25ldygpKTsKLSAgICBHUmVmUHRyPEdTb3Vy
Y2U+IGRpc3BhdGNoU291cmNlID0gYWRvcHRHUmVmKGdfc29ja2V0X2NyZWF0ZV9zb3VyY2Uoc29j
a2V0LmdldCgpLCBzdGF0aWNfY2FzdDxHSU9Db25kaXRpb24+KGNvbmRpdGlvbiksIGNhbmNlbGxh
YmxlLmdldCgpKSk7Ci0gICAgQVNTRVJUKGRpc3BhdGNoU291cmNlKTsKLSAgICBFdmVudFNvdXJj
ZSogZXZlbnRTb3VyY2UgPSBuZXcgRXZlbnRTb3VyY2UoZnVuY3Rpb24sIHRoaXMsIGNhbmNlbGxh
YmxlLmdldCgpKTsKLSAgICBBU1NFUlQoZXZlbnRTb3VyY2UpOwotCi0gICAgZ19zb3VyY2Vfc2V0
X2NhbGxiYWNrKGRpc3BhdGNoU291cmNlLmdldCgpLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VG
dW5jPigmV29ya1F1ZXVlOjpFdmVudFNvdXJjZTo6cGVyZm9ybVdvcmspLAotICAgICAgICBldmVu
dFNvdXJjZSwgcmVpbnRlcnByZXRfY2FzdDxHRGVzdHJveU5vdGlmeT4oJldvcmtRdWV1ZTo6RXZl
bnRTb3VyY2U6OmRlbGV0ZUV2ZW50U291cmNlKSk7Ci0KLSAgICAvLyBTZXQgdXAgdGhlIGV2ZW50
IHNvdXJjZXMgdW5kZXIgdGhlIG11dGV4IHNpbmNlIHRoaXMgaXMgc2hhcmVkIGFjcm9zcyBtdWx0
aXBsZSB0aHJlYWRzLgotICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZXZlbnRT
b3VyY2VzTG9jayk7Ci0gICAgICAgIFZlY3RvcjxFdmVudFNvdXJjZSo+IHNvdXJjZXM7Ci0gICAg
ICAgIEV2ZW50U291cmNlSXRlcmF0b3IgaXQgPSBtX2V2ZW50U291cmNlcy5maW5kKGZpbGVEZXNj
cmlwdG9yKTsKLSAgICAgICAgaWYgKGl0ICE9IG1fZXZlbnRTb3VyY2VzLmVuZCgpKSAKLSAgICAg
ICAgICAgIHNvdXJjZXMgPSBpdC0+c2Vjb25kOwotCi0gICAgICAgIHNvdXJjZXMuYXBwZW5kKGV2
ZW50U291cmNlKTsKLSAgICAgICAgbV9ldmVudFNvdXJjZXMuc2V0KGZpbGVEZXNjcmlwdG9yLCBz
b3VyY2VzKTsKLSAgICB9Ci0KLSAgICBnX3NvdXJjZV9hdHRhY2goZGlzcGF0Y2hTb3VyY2UuZ2V0
KCksIG1fZXZlbnRDb250ZXh0LmdldCgpKTsKLX0KLQotdm9pZCBXb3JrUXVldWU6OnVucmVnaXN0
ZXJFdmVudFNvdXJjZUhhbmRsZXIoaW50IGZpbGVEZXNjcmlwdG9yKQotewotICAgIEFTU0VSVChm
aWxlRGVzY3JpcHRvcik7Ci0gICAgCi0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZXZlbnRTb3Vy
Y2VzTG9jayk7Ci0gICAgCi0gICAgRXZlbnRTb3VyY2VJdGVyYXRvciBpdCA9IG1fZXZlbnRTb3Vy
Y2VzLmZpbmQoZmlsZURlc2NyaXB0b3IpOwotICAgIEFTU0VSVChpdCAhPSBtX2V2ZW50U291cmNl
cy5lbmQoKSk7Ci0gICAgQVNTRVJUKG1fZXZlbnRTb3VyY2VzLmNvbnRhaW5zKGZpbGVEZXNjcmlw
dG9yKSk7Ci0KLSAgICBpZiAoaXQgIT0gbV9ldmVudFNvdXJjZXMuZW5kKCkpIHsKLSAgICAgICAg
VmVjdG9yPEV2ZW50U291cmNlKj4gc291cmNlcyA9IGl0LT5zZWNvbmQ7Ci0gICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBzb3VyY2VzLnNpemUoKTsgaSsrKQotICAgICAgICAgICAgc291
cmNlc1tpXS0+Y2FuY2VsKCk7Ci0KLSAgICAgICAgbV9ldmVudFNvdXJjZXMucmVtb3ZlKGl0KTsK
LSAgICB9Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpkaXNwYXRjaE9uU291cmNlKEdTb3VyY2UqIGRp
c3BhdGNoU291cmNlLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbiwgR1NvdXJjZUZ1
bmMgc291cmNlQ2FsbGJhY2spCi17Ci0gICAgRXZlbnRTb3VyY2UqIGV2ZW50U291cmNlID0gbmV3
IEV2ZW50U291cmNlKGZ1bmN0aW9uLCB0aGlzLCAwKTsKLQotICAgIGdfc291cmNlX3NldF9jYWxs
YmFjayhkaXNwYXRjaFNvdXJjZSwgc291cmNlQ2FsbGJhY2ssIGV2ZW50U291cmNlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PEdEZXN0cm95Tm90aWZ5PigmV29y
a1F1ZXVlOjpFdmVudFNvdXJjZTo6ZGVsZXRlRXZlbnRTb3VyY2UpKTsKLQotICAgIGdfc291cmNl
X2F0dGFjaChkaXNwYXRjaFNvdXJjZSwgbV9ldmVudENvbnRleHQuZ2V0KCkpOwotfQotCi12b2lk
IFdvcmtRdWV1ZTo6ZGlzcGF0Y2goY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCi17
Ci0gICAgR1JlZlB0cjxHU291cmNlPiBkaXNwYXRjaFNvdXJjZSA9IGFkb3B0R1JlZihnX2lkbGVf
c291cmNlX25ldygpKTsKLSAgICBBU1NFUlQoZGlzcGF0Y2hTb3VyY2UpOwotICAgIGdfc291cmNl
X3NldF9wcmlvcml0eShkaXNwYXRjaFNvdXJjZS5nZXQoKSwgR19QUklPUklUWV9ERUZBVUxUKTsK
LQotICAgIGRpc3BhdGNoT25Tb3VyY2UoZGlzcGF0Y2hTb3VyY2UuZ2V0KCksIGZ1bmN0aW9uLCBy
ZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPigmV29ya1F1ZXVlOjpFdmVudFNvdXJjZTo6cGVy
Zm9ybVdvcmtPbmNlKSk7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpkaXNwYXRjaEFmdGVyRGVsYXko
Y29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24sIGRvdWJsZSBkZWxheSkKLXsKLSAgICBH
UmVmUHRyPEdTb3VyY2U+IGRpc3BhdGNoU291cmNlID0gYWRvcHRHUmVmKGdfdGltZW91dF9zb3Vy
Y2VfbmV3KHN0YXRpY19jYXN0PGd1aW50PihkZWxheSAqIDEwMDApKSk7Ci0gICAgQVNTRVJUKGRp
c3BhdGNoU291cmNlKTsKLQotICAgIGRpc3BhdGNoT25Tb3VyY2UoZGlzcGF0Y2hTb3VyY2UuZ2V0
KCksIGZ1bmN0aW9uLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPigmV29ya1F1ZXVlOjpF
dmVudFNvdXJjZTo6cGVyZm9ybVdvcmtPbmNlKSk7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpkaXNw
YXRjaE9uVGVybWluYXRpb24oV2ViS2l0OjpQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyIHByb2Nl
c3MsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQotewotICAgIEdSZWZQdHI8R1Nv
dXJjZT4gZGlzcGF0Y2hTb3VyY2UgPSBhZG9wdEdSZWYoZ19jaGlsZF93YXRjaF9zb3VyY2VfbmV3
KHByb2Nlc3MpKTsKLSAgICBBU1NFUlQoZGlzcGF0Y2hTb3VyY2UpOwotCi0gICAgZGlzcGF0Y2hP
blNvdXJjZShkaXNwYXRjaFNvdXJjZS5nZXQoKSwgZnVuY3Rpb24sIHJlaW50ZXJwcmV0X2Nhc3Q8
R1NvdXJjZUZ1bmM+KCZXb3JrUXVldWU6OkV2ZW50U291cmNlOjpwZXJmb3JtV29ya09uVGVybWlu
YXRpb24pKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL21hYy9Xb3Jr
UXVldWVNYWMuY3BwIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vbWFjL1dvcmtRdWV1ZU1hYy5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlNDczZWU1Y2M4NGU1ODQyOWIwNDM5
Y2NkOTIxYWMyYzQ5MmZmYWEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vbWFjL1dvcmtRdWV1ZU1hYy5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSwxNzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJXb3JrUXVldWUuaCIKLQotI2luY2x1ZGUgPG1hY2gvbWFjaF9pbml0
Lmg+Ci0jaW5jbHVkZSA8bWFjaC9tYWNoX3BvcnQuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc093blB0
ci5oPgotCi12b2lkIFdvcmtRdWV1ZTo6ZXhlY3V0ZUZ1bmN0aW9uKHZvaWQqIGNvbnRleHQpCi17
Ci0gICAgV29ya1F1ZXVlKiBxdWV1ZSA9IHN0YXRpY19jYXN0PFdvcmtRdWV1ZSo+KGRpc3BhdGNo
X2dldF9jb250ZXh0KGRpc3BhdGNoX2dldF9jdXJyZW50X3F1ZXVlKCkpKTsKLSAgICBPd25QdHI8
RnVuY3Rpb248dm9pZCgpPiA+IGZ1bmN0aW9uID0gYWRvcHRQdHIoc3RhdGljX2Nhc3Q8RnVuY3Rp
b248dm9pZCgpPio+KGNvbnRleHQpKTsKLSAgICAKLSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2Vy
IGxvY2tlcihxdWV1ZS0+bV9pc1ZhbGlkTXV0ZXgpOwotICAgICAgICBpZiAoIXF1ZXVlLT5tX2lz
VmFsaWQpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgKCpmdW5jdGlvbikoKTsK
LX0KLQotdm9pZCBXb3JrUXVldWU6OmRpc3BhdGNoKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1
bmN0aW9uKQotewotICAgIGRpc3BhdGNoX2FzeW5jX2YobV9kaXNwYXRjaFF1ZXVlLCBuZXcgRnVu
Y3Rpb248dm9pZCgpPihmdW5jdGlvbiksIGV4ZWN1dGVGdW5jdGlvbik7Ci19Ci0KLXZvaWQgV29y
a1F1ZXVlOjpkaXNwYXRjaEFmdGVyRGVsYXkoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rp
b24sIGRvdWJsZSBkZWxheSkKLXsKLSAgICBkaXNwYXRjaF90aW1lX3QgZGVsYXlUaW1lID0gZGlz
cGF0Y2hfdGltZShESVNQQVRDSF9USU1FX05PVywgZGVsYXkgKiBOU0VDX1BFUl9TRUMpOwotCi0g
ICAgZGlzcGF0Y2hfYWZ0ZXJfZihkZWxheVRpbWUsIG1fZGlzcGF0Y2hRdWV1ZSwgbmV3IEZ1bmN0
aW9uPHZvaWQoKT4oZnVuY3Rpb24pLCBleGVjdXRlRnVuY3Rpb24pOwotfQotCi1jbGFzcyBXb3Jr
UXVldWU6OkV2ZW50U291cmNlIHsKLXB1YmxpYzoKLSAgICBFdmVudFNvdXJjZShNYWNoUG9ydEV2
ZW50VHlwZSBldmVudFR5cGUsIGRpc3BhdGNoX3NvdXJjZV90IGRpc3BhdGNoU291cmNlLCBjb25z
dCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKLSAgICAgICAgOiBtX2V2ZW50VHlwZShldmVu
dFR5cGUpCi0gICAgICAgICwgbV9kaXNwYXRjaFNvdXJjZShkaXNwYXRjaFNvdXJjZSkKLSAgICAg
ICAgLCBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgZGlzcGF0
Y2hfc291cmNlX3QgZGlzcGF0Y2hTb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX2Rpc3BhdGNoU291
cmNlOyB9Ci0gICAgCi0gICAgc3RhdGljIHZvaWQgZXZlbnRIYW5kbGVyKHZvaWQqIHNvdXJjZSkg
Ci0gICAgewotICAgICAgICBFdmVudFNvdXJjZSogZXZlbnRTb3VyY2UgPSBzdGF0aWNfY2FzdDxF
dmVudFNvdXJjZSo+KHNvdXJjZSk7Ci0gICAgICAgIAotICAgICAgICBldmVudFNvdXJjZS0+bV9m
dW5jdGlvbigpOwotICAgIH0KLSAgICAKLSAgICBzdGF0aWMgdm9pZCBjYW5jZWxIYW5kbGVyKHZv
aWQqIHNvdXJjZSkKLSAgICB7Ci0gICAgICAgIEV2ZW50U291cmNlKiBldmVudFNvdXJjZSA9IHN0
YXRpY19jYXN0PEV2ZW50U291cmNlKj4oc291cmNlKTsKLSAgICAgICAgCi0gICAgICAgIG1hY2hf
cG9ydF90IG1hY2hQb3J0ID0gZGlzcGF0Y2hfc291cmNlX2dldF9oYW5kbGUoZXZlbnRTb3VyY2Ut
Pm1fZGlzcGF0Y2hTb3VyY2UpOwotICAgICAgICAKLSAgICAgICAgc3dpdGNoIChldmVudFNvdXJj
ZS0+bV9ldmVudFR5cGUpIHsKLSAgICAgICAgY2FzZSBNYWNoUG9ydERhdGFBdmFpbGFibGU6Ci0g
ICAgICAgICAgICAvLyBSZWxlYXNlIG91ciByZWNlaXZlIHJpZ2h0LgotICAgICAgICAgICAgbWFj
aF9wb3J0X21vZF9yZWZzKG1hY2hfdGFza19zZWxmKCksIG1hY2hQb3J0LCBNQUNIX1BPUlRfUklH
SFRfUkVDRUlWRSwgLTEpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTWFjaFBv
cnREZWFkTmFtZU5vdGlmaWNhdGlvbjoKLSAgICAgICAgICAgIC8vIFJlbGVhc2Ugb3VyIHNlbmQg
cmlnaHQuCi0gICAgICAgICAgICBtYWNoX3BvcnRfZGVhbGxvY2F0ZShtYWNoX3Rhc2tfc2VsZigp
LCBtYWNoUG9ydCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICAK
LSAgICBzdGF0aWMgdm9pZCBmaW5hbGl6ZUhhbmRsZXIodm9pZCogc291cmNlKQotICAgIHsKLSAg
ICAgICAgRXZlbnRTb3VyY2UqIGV2ZW50U291cmNlID0gc3RhdGljX2Nhc3Q8RXZlbnRTb3VyY2Uq
Pihzb3VyY2UpOwotICAgICAgICAKLSAgICAgICAgZGVsZXRlIGV2ZW50U291cmNlOwotICAgIH0K
LSAgICAKLXByaXZhdGU6Ci0gICAgTWFjaFBvcnRFdmVudFR5cGUgbV9ldmVudFR5cGU7Ci0gICAg
Ci0gICAgLy8gVGhpcyBpcyBhIHdlYWsgcmVmZXJlbmNlLCBzaW5jZSBtX2Rpc3BhdGNoU291cmNl
IHJlZmVyZW5jZXMgdGhlIGV2ZW50IHNvdXJjZS4KLSAgICBkaXNwYXRjaF9zb3VyY2VfdCBtX2Rp
c3BhdGNoU291cmNlOwotCi0gICAgRnVuY3Rpb248dm9pZCgpPiBtX2Z1bmN0aW9uOwotfTsKLQot
dm9pZCBXb3JrUXVldWU6OnJlZ2lzdGVyTWFjaFBvcnRFdmVudEhhbmRsZXIobWFjaF9wb3J0X3Qg
bWFjaFBvcnQsIE1hY2hQb3J0RXZlbnRUeXBlIGV2ZW50VHlwZSwgY29uc3QgRnVuY3Rpb248dm9p
ZCgpPiYgZnVuY3Rpb24pCi17Ci0gICAgZGlzcGF0Y2hfc291cmNlX3R5cGVfdCBzb3VyY2VUeXBl
ID0gMDsKLSAgICBzd2l0Y2ggKGV2ZW50VHlwZSkgewotICAgIGNhc2UgTWFjaFBvcnREYXRhQXZh
aWxhYmxlOgotICAgICAgICBzb3VyY2VUeXBlID0gRElTUEFUQ0hfU09VUkNFX1RZUEVfTUFDSF9S
RUNWOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE1hY2hQb3J0RGVhZE5hbWVOb3RpZmljYXRp
b246Ci0gICAgICAgIHNvdXJjZVR5cGUgPSBESVNQQVRDSF9TT1VSQ0VfVFlQRV9NQUNIX1NFTkQ7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAKLSAgICBkaXNwYXRjaF9zb3VyY2VfdCBkaXNw
YXRjaFNvdXJjZSA9IGRpc3BhdGNoX3NvdXJjZV9jcmVhdGUoc291cmNlVHlwZSwgbWFjaFBvcnQs
IDAsIG1fZGlzcGF0Y2hRdWV1ZSk7Ci0gICAgCi0gICAgRXZlbnRTb3VyY2UqIGV2ZW50U291cmNl
ID0gbmV3IEV2ZW50U291cmNlKGV2ZW50VHlwZSwgZGlzcGF0Y2hTb3VyY2UsIGZ1bmN0aW9uKTsK
LSAgICBkaXNwYXRjaF9zZXRfY29udGV4dChkaXNwYXRjaFNvdXJjZSwgZXZlbnRTb3VyY2UpOwot
ICAgIAotICAgIGRpc3BhdGNoX3NvdXJjZV9zZXRfZXZlbnRfaGFuZGxlcl9mKGRpc3BhdGNoU291
cmNlLCAmRXZlbnRTb3VyY2U6OmV2ZW50SGFuZGxlcik7Ci0gICAgZGlzcGF0Y2hfc291cmNlX3Nl
dF9jYW5jZWxfaGFuZGxlcl9mKGRpc3BhdGNoU291cmNlLCAmRXZlbnRTb3VyY2U6OmNhbmNlbEhh
bmRsZXIpOwotICAgIGRpc3BhdGNoX3NldF9maW5hbGl6ZXJfZihkaXNwYXRjaFNvdXJjZSwgJkV2
ZW50U291cmNlOjpmaW5hbGl6ZUhhbmRsZXIpOwotICAgIAotICAgIC8vIEFkZCB0aGUgc291cmNl
IHRvIG91ciBzZXQgb2Ygc291cmNlcy4KLSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tl
cihtX2V2ZW50U291cmNlc011dGV4KTsKLSAgICAgICAgCi0gICAgICAgIEFTU0VSVCghbV9ldmVu
dFNvdXJjZXMuY29udGFpbnMobWFjaFBvcnQpKTsKLSAgICAgICAgCi0gICAgICAgIG1fZXZlbnRT
b3VyY2VzLnNldChtYWNoUG9ydCwgZXZlbnRTb3VyY2UpOwotICAgICAgICAKLSAgICAgICAgLy8g
QW5kIHN0YXJ0IGl0IQotICAgICAgICBkaXNwYXRjaF9yZXN1bWUoZGlzcGF0Y2hTb3VyY2UpOwot
ICAgIH0KLX0KLQotdm9pZCBXb3JrUXVldWU6OnVucmVnaXN0ZXJNYWNoUG9ydEV2ZW50SGFuZGxl
cihtYWNoX3BvcnRfdCBtYWNoUG9ydCkKLXsKLSAgICBBU1NFUlQobWFjaFBvcnQpOwotICAgIAot
ICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2V2ZW50U291cmNlc011dGV4KTsKLSAgICAKLSAgICBI
YXNoTWFwPG1hY2hfcG9ydF90LCBFdmVudFNvdXJjZSo+OjppdGVyYXRvciBpdCA9IG1fZXZlbnRT
b3VyY2VzLmZpbmQobWFjaFBvcnQpOwotICAgIEFTU0VSVChpdCAhPSBtX2V2ZW50U291cmNlcy5l
bmQoKSk7Ci0gICAgCi0gICAgQVNTRVJUKG1fZXZlbnRTb3VyY2VzLmNvbnRhaW5zKG1hY2hQb3J0
KSk7Ci0KLSAgICBFdmVudFNvdXJjZSogZXZlbnRTb3VyY2UgPSBpdC0+c2Vjb25kOwotICAgIC8v
IENhbmNlbCBhbmQgcmVsZWFzZSB0aGUgc291cmNlLiBJdCB3aWxsIGJlIGRlbGV0ZWQgaW4gaXRz
IGZpbmFsaXplIGhhbmRsZXIuCi0gICAgZGlzcGF0Y2hfc291cmNlX2NhbmNlbChldmVudFNvdXJj
ZS0+ZGlzcGF0Y2hTb3VyY2UoKSk7Ci0gICAgZGlzcGF0Y2hfcmVsZWFzZShldmVudFNvdXJjZS0+
ZGlzcGF0Y2hTb3VyY2UoKSk7Ci0KLSAgICBtX2V2ZW50U291cmNlcy5yZW1vdmUoaXQpOyAgICAK
LX0KLQotdm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW5pdGlhbGl6ZShjb25zdCBjaGFyKiBuYW1l
KQotewotICAgIG1fZGlzcGF0Y2hRdWV1ZSA9IGRpc3BhdGNoX3F1ZXVlX2NyZWF0ZShuYW1lLCAw
KTsKLSAgICBkaXNwYXRjaF9zZXRfY29udGV4dChtX2Rpc3BhdGNoUXVldWUsIHRoaXMpOwotfQot
Ci12b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKLXsKLSNpZiAhQVNTRVJUX0RJ
U0FCTEVECi0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZXZlbnRTb3VyY2VzTXV0ZXgpOwotICAg
IEFTU0VSVChtX2V2ZW50U291cmNlcy5pc0VtcHR5KCkpOwotI2VuZGlmCi0KLSAgICBkaXNwYXRj
aF9yZWxlYXNlKG1fZGlzcGF0Y2hRdWV1ZSk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9QbGF0Zm9ybS9xdC9Xb3JrUXVldWVRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9x
dC9Xb3JrUXVldWVRdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhYTJiZTNk
MGI4Yjc0ODUyOWEyODhmZWUyZDU5NGZkYjllNDk5MjYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vcXQvV29ya1F1
ZXVlUXQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTMwICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV29ya1F1ZXVlLmgiCi0K
LSNpbmNsdWRlIDxRTG9jYWxTb2NrZXQ+Ci0jaW5jbHVkZSA8UU9iamVjdD4KLSNpbmNsdWRlIDxR
VGhyZWFkPgotI2luY2x1ZGUgPFFQcm9jZXNzPgotI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVt
ZW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+Ci0KLWNsYXNzIFdvcmtRdWV1ZTo6
V29ya0l0ZW1RdCA6IHB1YmxpYyBRT2JqZWN0IHsKLSAgICBRX09CSkVDVAotcHVibGljOgotICAg
IFdvcmtJdGVtUXQoV29ya1F1ZXVlKiB3b3JrUXVldWUsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4m
IGZ1bmN0aW9uKQotICAgICAgICA6IG1fcXVldWUod29ya1F1ZXVlKQotICAgICAgICAsIG1fc291
cmNlKDApCi0gICAgICAgICwgbV9zaWduYWwoMCkKLSAgICAgICAgLCBtX2Z1bmN0aW9uKGZ1bmN0
aW9uKQotICAgIHsKLSAgICB9Ci0KLSAgICBXb3JrSXRlbVF0KFdvcmtRdWV1ZSogd29ya1F1ZXVl
LCBRT2JqZWN0KiBzb3VyY2UsIGNvbnN0IGNoYXIqIHNpZ25hbCwgY29uc3QgRnVuY3Rpb248dm9p
ZCgpPiYgZnVuY3Rpb24pCi0gICAgICAgIDogbV9xdWV1ZSh3b3JrUXVldWUpCi0gICAgICAgICwg
bV9zb3VyY2Uoc291cmNlKQotICAgICAgICAsIG1fc2lnbmFsKHNpZ25hbCkKLSAgICAgICAgLCBt
X2Z1bmN0aW9uKGZ1bmN0aW9uKQotICAgIHsKLSAgICAgICAgY29ubmVjdChtX3NvdXJjZSwgbV9z
aWduYWwsIFNMT1QoZXhlY3V0ZSgpKSwgUXQ6OlF1ZXVlZENvbm5lY3Rpb24pOwotICAgIH0KLQot
ICAgIH5Xb3JrSXRlbVF0KCkKLSAgICB7Ci0gICAgfQotCi0gICAgUV9TTE9UIHZvaWQgZXhlY3V0
ZSgpIAotICAgIHsgCi0gICAgICAgIGlmIChtX3F1ZXVlLT5tX2lzVmFsaWQpCi0gICAgICAgICAg
ICBtX2Z1bmN0aW9uKCk7Ci0gICAgfQotCi0gICAgUV9TTE9UIHZvaWQgZXhlY3V0ZUFuZERlbGV0
ZSgpCi0gICAgewotICAgICAgICBleGVjdXRlKCk7Ci0gICAgICAgIGRlbGV0ZSB0aGlzOwotICAg
IH0KLQotICAgIHZpcnR1YWwgdm9pZCB0aW1lckV2ZW50KFFUaW1lckV2ZW50KikKLSAgICB7Ci0g
ICAgICAgIGV4ZWN1dGVBbmREZWxldGUoKTsKLSAgICB9Ci0KLSAgICBXb3JrUXVldWUqIG1fcXVl
dWU7Ci0gICAgUU9iamVjdCogbV9zb3VyY2U7Ci0gICAgY29uc3QgY2hhciogbV9zaWduYWw7Ci0g
ICAgRnVuY3Rpb248dm9pZCgpPiBtX2Z1bmN0aW9uOwotfTsKLQotUVNvY2tldE5vdGlmaWVyKiBX
b3JrUXVldWU6OnJlZ2lzdGVyU29ja2V0RXZlbnRIYW5kbGVyKGludCBzb2NrZXREZXNjcmlwdG9y
LCBRU29ja2V0Tm90aWZpZXI6OlR5cGUgdHlwZSwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVu
Y3Rpb24pCi17Ci0gICAgQVNTRVJUKG1fd29ya1RocmVhZCk7Ci0KLSAgICBRU29ja2V0Tm90aWZp
ZXIqIG5vdGlmaWVyID0gbmV3IFFTb2NrZXROb3RpZmllcihzb2NrZXREZXNjcmlwdG9yLCB0eXBl
LCAwKTsKLSAgICBub3RpZmllci0+c2V0RW5hYmxlZChmYWxzZSk7Ci0gICAgbm90aWZpZXItPm1v
dmVUb1RocmVhZChtX3dvcmtUaHJlYWQpOwotICAgIFdvcmtRdWV1ZTo6V29ya0l0ZW1RdCogaXRl
bVF0ID0gbmV3IFdvcmtRdWV1ZTo6V29ya0l0ZW1RdCh0aGlzLCBub3RpZmllciwgU0lHTkFMKGFj
dGl2YXRlZChpbnQpKSwgZnVuY3Rpb24pOwotICAgIGl0ZW1RdC0+bW92ZVRvVGhyZWFkKG1fd29y
a1RocmVhZCk7Ci0gICAgbm90aWZpZXItPnNldEVuYWJsZWQodHJ1ZSk7Ci0gICAgcmV0dXJuIG5v
dGlmaWVyOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXplKGNvbnN0IGNo
YXIqKQotewotICAgIG1fd29ya1RocmVhZCA9IG5ldyBRVGhyZWFkKCk7Ci0gICAgbV93b3JrVGhy
ZWFkLT5zdGFydCgpOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1JbnZhbGlkYXRlKCkK
LXsKLSAgICBtX3dvcmtUaHJlYWQtPmV4aXQoKTsKLSAgICBtX3dvcmtUaHJlYWQtPndhaXQoKTsK
LSAgICBkZWxldGUgbV93b3JrVGhyZWFkOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2go
Y29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCi17Ci0gICAgV29ya1F1ZXVlOjpXb3Jr
SXRlbVF0KiBpdGVtUXQgPSBuZXcgV29ya1F1ZXVlOjpXb3JrSXRlbVF0KHRoaXMsIGZ1bmN0aW9u
KTsKLSAgICBpdGVtUXQtPm1vdmVUb1RocmVhZChtX3dvcmtUaHJlYWQpOwotICAgIFFNZXRhT2Jq
ZWN0OjppbnZva2VNZXRob2QoaXRlbVF0LCAiZXhlY3V0ZUFuZERlbGV0ZSIsIFF0OjpRdWV1ZWRD
b25uZWN0aW9uKTsKLX0KLQotdm9pZCBXb3JrUXVldWU6OmRpc3BhdGNoQWZ0ZXJEZWxheShjb25z
dCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbiwgZG91YmxlIGRlbGF5SW5TZWNvbmQpCi17Ci0g
ICAgV29ya1F1ZXVlOjpXb3JrSXRlbVF0KiBpdGVtUXQgPSBuZXcgV29ya1F1ZXVlOjpXb3JrSXRl
bVF0KHRoaXMsIGZ1bmN0aW9uKTsKLSAgICBpdGVtUXQtPnN0YXJ0VGltZXIoc3RhdGljX2Nhc3Q8
aW50PihkZWxheUluU2Vjb25kICogMTAwMCkpOwotICAgIGl0ZW1RdC0+bW92ZVRvVGhyZWFkKG1f
d29ya1RocmVhZCk7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpkaXNwYXRjaE9uVGVybWluYXRpb24o
V2ViS2l0OjpQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyIHByb2Nlc3MsIGNvbnN0IEZ1bmN0aW9u
PHZvaWQoKT4mIGZ1bmN0aW9uKQotewotICAgIFdvcmtRdWV1ZTo6V29ya0l0ZW1RdCogaXRlbVF0
ID0gbmV3IFdvcmtRdWV1ZTo6V29ya0l0ZW1RdCh0aGlzLCBwcm9jZXNzLCBTSUdOQUwoZmluaXNo
ZWQoaW50LCBRUHJvY2Vzczo6RXhpdFN0YXR1cykpLCBmdW5jdGlvbik7Ci0gICAgaXRlbVF0LT5t
b3ZlVG9UaHJlYWQobV93b3JrVGhyZWFkKTsKLX0KLQotI2luY2x1ZGUgIldvcmtRdWV1ZVF0Lm1v
YyIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3dpbi9Xb3JrUXVldWVXaW4u
Y3BwIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vd2luL1dvcmtRdWV1ZVdpbi5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhYmFkYmRhODk1ZTA3ZDllZTUzMzA3OTVjYzk0ZTYx
N2ViOTFkN2IuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYktpdDIvUGxhdGZvcm0vd2luL1dvcmtRdWV1ZVdpbi5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwyOTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJXb3JrUXVldWUuaCIKLQotI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQu
aD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+Ci0KLWlubGluZSBXb3JrUXVldWU6OldvcmtJ
dGVtV2luOjpXb3JrSXRlbVdpbihjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbiwgV29y
a1F1ZXVlKiBxdWV1ZSkKLSAgICA6IG1fZnVuY3Rpb24oZnVuY3Rpb24pCi0gICAgLCBtX3F1ZXVl
KHF1ZXVlKQotewotfQotCi1QYXNzUmVmUHRyPFdvcmtRdWV1ZTo6V29ya0l0ZW1XaW4+IFdvcmtR
dWV1ZTo6V29ya0l0ZW1XaW46OmNyZWF0ZShjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlv
biwgV29ya1F1ZXVlKiBxdWV1ZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdvcmtJdGVt
V2luKGZ1bmN0aW9uLCBxdWV1ZSkpOwotfQotCi1Xb3JrUXVldWU6OldvcmtJdGVtV2luOjp+V29y
a0l0ZW1XaW4oKQotewotfQotCi1pbmxpbmUgV29ya1F1ZXVlOjpIYW5kbGVXb3JrSXRlbTo6SGFu
ZGxlV29ya0l0ZW0oSEFORExFIGhhbmRsZSwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rp
b24sIFdvcmtRdWV1ZSogcXVldWUpCi0gICAgOiBXb3JrSXRlbVdpbihmdW5jdGlvbiwgcXVldWUp
Ci0gICAgLCBtX2hhbmRsZShoYW5kbGUpCi0gICAgLCBtX3dhaXRIYW5kbGUoMCkKLXsKLSAgICBB
U1NFUlRfQVJHKGhhbmRsZSwgaGFuZGxlKTsKLX0KLQotUGFzc1JlZlB0cjxXb3JrUXVldWU6Okhh
bmRsZVdvcmtJdGVtPiBXb3JrUXVldWU6OkhhbmRsZVdvcmtJdGVtOjpjcmVhdGVCeUFkb3B0aW5n
SGFuZGxlKEhBTkRMRSBoYW5kbGUsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uLCBX
b3JrUXVldWUqIHF1ZXVlKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgSGFuZGxlV29ya0l0
ZW0oaGFuZGxlLCBmdW5jdGlvbiwgcXVldWUpKTsKLX0KLQotV29ya1F1ZXVlOjpIYW5kbGVXb3Jr
SXRlbTo6fkhhbmRsZVdvcmtJdGVtKCkKLXsKLSAgICA6OkNsb3NlSGFuZGxlKG1faGFuZGxlKTsK
LX0KLQotdm9pZCBXb3JrUXVldWU6OmhhbmRsZUNhbGxiYWNrKHZvaWQqIGNvbnRleHQsIEJPT0xF
QU4gdGltZXJPcldhaXRGaXJlZCkKLXsKLSAgICBBU1NFUlRfQVJHKGNvbnRleHQsIGNvbnRleHQp
OwotICAgIEFTU0VSVF9BUkcodGltZXJPcldhaXRGaXJlZCwgIXRpbWVyT3JXYWl0RmlyZWQpOwot
Ci0gICAgV29ya0l0ZW1XaW4qIGl0ZW0gPSBzdGF0aWNfY2FzdDxXb3JrSXRlbVdpbio+KGNvbnRl
eHQpOwotICAgIFdvcmtRdWV1ZSogcXVldWUgPSBpdGVtLT5xdWV1ZSgpOwotCi0gICAgewotICAg
ICAgICBNdXRleExvY2tlciBsb2NrKHF1ZXVlLT5tX3dvcmtJdGVtUXVldWVMb2NrKTsKLSAgICAg
ICAgcXVldWUtPm1fd29ya0l0ZW1RdWV1ZS5hcHBlbmQoaXRlbSk7Ci0KLSAgICAgICAgLy8gSWYg
bm8gb3RoZXIgdGhyZWFkIGlzIHBlcmZvcm1pbmcgd29yaywgd2UgY2FuIGRvIGl0IG9uIHRoaXMg
dGhyZWFkLgotICAgICAgICBpZiAoIXF1ZXVlLT50cnlSZWdpc3RlckFzV29ya1RocmVhZCgpKSB7
Ci0gICAgICAgICAgICAvLyBTb21lIG90aGVyIHRocmVhZCBpcyBwZXJmb3JtaW5nIHdvcmsuIFNp
bmNlIHdlIGhvbGQgdGhlIHF1ZXVlIGxvY2ssIHdlIGNhbiBiZSBzdXJlCi0gICAgICAgICAgICAv
LyB0aGF0IHRoZSB3b3JrIHRocmVhZCBpcyBub3QgZXhpdGluZyBkdWUgdG8gYW4gZW1wdHkgcXVl
dWUgYW5kIHdpbGwgcHJvY2VzcyB0aGUgd29yawotICAgICAgICAgICAgLy8gaXRlbSB3ZSBqdXN0
IGFkZGVkIHRvIGl0LiBJZiB3ZSB3ZXJlbid0IGhvbGRpbmcgdGhlIGxvY2sgd2UnZCBoYXZlIHRv
IHNpZ25hbAotICAgICAgICAgICAgLy8gbV9wZXJmb3JtV29ya0V2ZW50IHRvIG1ha2Ugc3VyZSB0
aGUgd29yayBpdGVtIGdvdCBwaWNrZWQgdXAuCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBxdWV1ZS0+cGVyZm9ybVdvcmtPblJlZ2lzdGVyZWRXb3JrVGhyZWFk
KCk7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpyZWdpc3RlckhhbmRsZShIQU5ETEUgaGFuZGxlLCBj
b25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKLXsKLSAgICBSZWZQdHI8SGFuZGxlV29y
a0l0ZW0+IGhhbmRsZUl0ZW0gPSBIYW5kbGVXb3JrSXRlbTo6Y3JlYXRlQnlBZG9wdGluZ0hhbmRs
ZShoYW5kbGUsIGZ1bmN0aW9uLCB0aGlzKTsKLQotICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIg
bG9jayhtX2hhbmRsZXNMb2NrKTsKLSAgICAgICAgQVNTRVJUX0FSRyhoYW5kbGUsICFtX2hhbmRs
ZXMuY29udGFpbnMoaGFuZGxlKSk7Ci0gICAgICAgIG1faGFuZGxlcy5zZXQoaGFuZGxlLCBoYW5k
bGVJdGVtKTsKLSAgICB9Ci0KLSAgICBIQU5ETEUgd2FpdEhhbmRsZTsKLSAgICBpZiAoITo6UmVn
aXN0ZXJXYWl0Rm9yU2luZ2xlT2JqZWN0KCZ3YWl0SGFuZGxlLCBoYW5kbGUsIGhhbmRsZUNhbGxi
YWNrLCBoYW5kbGVJdGVtLmdldCgpLCBJTkZJTklURSwgV1RfRVhFQ1VURURFRkFVTFQpKSB7Ci0g
ICAgICAgIERXT1JEIGVycm9yID0gOjpHZXRMYXN0RXJyb3IoKTsKLSAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgfQotICAgIGhhbmRsZUl0ZW0tPnNldFdhaXRIYW5kbGUod2FpdEhh
bmRsZSk7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjp1bnJlZ2lzdGVyQW5kQ2xvc2VIYW5kbGUoSEFO
RExFIGhhbmRsZSkKLXsKLSAgICBSZWZQdHI8SGFuZGxlV29ya0l0ZW0+IGl0ZW07Ci0gICAgewot
ICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9oYW5kbGVzTG9jayk7Ci0gICAgICAgIEFTU0VS
VF9BUkcoaGFuZGxlLCBtX2hhbmRsZXMuY29udGFpbnMoaGFuZGxlKSk7Ci0gICAgICAgIGl0ZW0g
PSBtX2hhbmRsZXMudGFrZShoYW5kbGUpOwotICAgIH0KLQotICAgIHVucmVnaXN0ZXJXYWl0QW5k
RGVzdHJveUl0ZW1Tb29uKGl0ZW0ucmVsZWFzZSgpKTsKLX0KLQotRFdPUkQgV29ya1F1ZXVlOjp3
b3JrVGhyZWFkQ2FsbGJhY2sodm9pZCogY29udGV4dCkKLXsKLSAgICBBU1NFUlRfQVJHKGNvbnRl
eHQsIGNvbnRleHQpOwotCi0gICAgV29ya1F1ZXVlKiBxdWV1ZSA9IHN0YXRpY19jYXN0PFdvcmtR
dWV1ZSo+KGNvbnRleHQpOwotCi0gICAgaWYgKCFxdWV1ZS0+dHJ5UmVnaXN0ZXJBc1dvcmtUaHJl
YWQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBxdWV1ZS0+cGVyZm9ybVdvcmtPblJlZ2lz
dGVyZWRXb3JrVGhyZWFkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpw
ZXJmb3JtV29ya09uUmVnaXN0ZXJlZFdvcmtUaHJlYWQoKQotewotICAgIEFTU0VSVChtX2lzV29y
a1RocmVhZFJlZ2lzdGVyZWQpOwotCi0gICAgYm9vbCBpc1ZhbGlkID0gdHJ1ZTsKLQotICAgIG1f
d29ya0l0ZW1RdWV1ZUxvY2subG9jaygpOwotCi0gICAgd2hpbGUgKGlzVmFsaWQgJiYgIW1fd29y
a0l0ZW1RdWV1ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgVmVjdG9yPFJlZlB0cjxXb3JrSXRlbVdp
bj4gPiB3b3JrSXRlbVF1ZXVlOwotICAgICAgICBtX3dvcmtJdGVtUXVldWUuc3dhcCh3b3JrSXRl
bVF1ZXVlKTsKLQotICAgICAgICAvLyBBbGxvdyBtb3JlIHdvcmsgdG8gYmUgc2NoZWR1bGVkIHdo
aWxlIHdlJ3JlIG5vdCB1c2luZyB0aGUgcXVldWUgZGlyZWN0bHkuCi0gICAgICAgIG1fd29ya0l0
ZW1RdWV1ZUxvY2sudW5sb2NrKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd29y
a0l0ZW1RdWV1ZS5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2Vy
KG1faXNWYWxpZE11dGV4KTsKLSAgICAgICAgICAgIGlzVmFsaWQgPSBtX2lzVmFsaWQ7Ci0gICAg
ICAgICAgICBpZiAoIWlzVmFsaWQpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB3b3JrSXRlbVF1ZXVlW2ldLT5mdW5jdGlvbigpKCk7Ci0gICAgICAgIH0KLSAgICAgICAgbV93
b3JrSXRlbVF1ZXVlTG9jay5sb2NrKCk7Ci0gICAgfQotCi0gICAgLy8gT25lIGludmFyaWFudCB3
ZSBtYWludGFpbiBpcyB0aGF0IGFueSB3b3JrIHNjaGVkdWxlZCB3aGlsZSBhIHdvcmsgdGhyZWFk
IGlzIHJlZ2lzdGVyZWQgd2lsbAotICAgIC8vIGJlIGhhbmRsZWQgYnkgdGhhdCB3b3JrIHRocmVh
ZC4gVW5yZWdpc3RlciBhcyB0aGUgd29yayB0aHJlYWQgd2hpbGUgdGhlIHF1ZXVlIGxvY2sgaXMg
c3RpbGwKLSAgICAvLyBoZWxkIHNvIHRoYXQgbm8gd29yayBjYW4gYmUgc2NoZWR1bGVkIHdoaWxl
IHdlJ3JlIHN0aWxsIHJlZ2lzdGVyZWQuCi0gICAgdW5yZWdpc3RlckFzV29ya1RocmVhZCgpOwot
Ci0gICAgbV93b3JrSXRlbVF1ZXVlTG9jay51bmxvY2soKTsKLX0KLQotdm9pZCBXb3JrUXVldWU6
OnBsYXRmb3JtSW5pdGlhbGl6ZShjb25zdCBjaGFyKiBuYW1lKQotewotICAgIG1faXNXb3JrVGhy
ZWFkUmVnaXN0ZXJlZCA9IDA7Ci0gICAgbV90aW1lclF1ZXVlID0gOjpDcmVhdGVUaW1lclF1ZXVl
KCk7Ci0gICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX3RpbWVyUXVldWUsICI6OkNyZWF0ZVRpbWVy
UXVldWUgZmFpbGVkIHdpdGggZXJyb3IgJWx1IiwgOjpHZXRMYXN0RXJyb3IoKSk7Ci19Ci0KLWJv
b2wgV29ya1F1ZXVlOjp0cnlSZWdpc3RlckFzV29ya1RocmVhZCgpCi17Ci0gICAgTE9ORyByZXN1
bHQgPSA6OkludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlKCZtX2lzV29ya1RocmVhZFJlZ2lzdGVy
ZWQsIDEsIDApOwotICAgIEFTU0VSVCghcmVzdWx0IHx8IHJlc3VsdCA9PSAxKTsKLSAgICByZXR1
cm4gIXJlc3VsdDsKLX0KLQotdm9pZCBXb3JrUXVldWU6OnVucmVnaXN0ZXJBc1dvcmtUaHJlYWQo
KQotewotICAgIExPTkcgcmVzdWx0ID0gOjpJbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZSgmbV9p
c1dvcmtUaHJlYWRSZWdpc3RlcmVkLCAwLCAxKTsKLSAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwg
cmVzdWx0ID09IDEpOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1JbnZhbGlkYXRlKCkK
LXsKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgTXV0ZXhMb2NrZXIgbG9jayhtX2hhbmRsZXNM
b2NrKTsKLSAgICBBU1NFUlQobV9oYW5kbGVzLmlzRW1wdHkoKSk7Ci0jZW5kaWYKLQotICAgIC8v
IEZJWE1FOiBXZSBuZWVkIHRvIGVuc3VyZSB0aGF0IGFueSB0aW1lci1xdWV1ZSB0aW1lcnMgdGhh
dCBmaXJlIGFmdGVyIHRoaXMgcG9pbnQgZG9uJ3QgdHJ5IHRvCi0gICAgLy8gYWNjZXNzIHRoaXMg
V29ya1F1ZXVlIDxodHRwOi8vd2Via2l0Lm9yZy9iLzQ0NjkwPi4KLSAgICA6OkRlbGV0ZVRpbWVy
UXVldWVFeChtX3RpbWVyUXVldWUsIDApOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2go
Y29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCi17Ci0gICAgTXV0ZXhMb2NrZXIgbG9j
a2VyKG1fd29ya0l0ZW1RdWV1ZUxvY2spOwotCi0gICAgbV93b3JrSXRlbVF1ZXVlLmFwcGVuZChX
b3JrSXRlbVdpbjo6Y3JlYXRlKGZ1bmN0aW9uLCB0aGlzKSk7Ci0KLSAgICAvLyBTcGF3biBhIHdv
cmsgdGhyZWFkIHRvIHBlcmZvcm0gdGhlIHdvcmsgd2UganVzdCBhZGRlZC4gQXMgYW4gb3B0aW1p
emF0aW9uLCB3ZSBhdm9pZAotICAgIC8vIHNwYXduaW5nIHRoZSB0aHJlYWQgaWYgYSB3b3JrIHRo
cmVhZCBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQuIFRoaXMgcHJldmVudHMgbXVsdGlwbGUgd29yawot
ICAgIC8vIHRocmVhZHMgZnJvbSBiZWluZyBzcGF3bmVkIGluIG1vc3QgY2FzZXMuIChOb3RlIHRo
YXQgd2hlbiBhIHdvcmsgdGhyZWFkIGhhcyBiZWVuIHNwYXduZWQgYnV0Ci0gICAgLy8gaGFzbid0
IHJlZ2lzdGVyZWQgaXRzZWxmIHlldCwgbV9pc1dvcmtUaHJlYWRSZWdpc3RlcmVkIHdpbGwgYmUg
ZmFsc2UgYW5kIHdlJ2xsIGVuZCB1cAotICAgIC8vIHNwYXduaW5nIGEgc2Vjb25kIHdvcmsgdGhy
ZWFkIGhlcmUuIEJ1dCB3b3JrIHRocmVhZCByZWdpc3RyYXRpb24gcHJvY2VzcyB3aWxsIGVuc3Vy
ZSB0aGF0Ci0gICAgLy8gb25seSBvbmUgdGhyZWFkIGFjdHVhbGx5IGVuZHMgdXAgcGVyZm9ybWlu
ZyB3b3JrLikKLSAgICBpZiAoIW1faXNXb3JrVGhyZWFkUmVnaXN0ZXJlZCkKLSAgICAgICAgOjpR
dWV1ZVVzZXJXb3JrSXRlbSh3b3JrVGhyZWFkQ2FsbGJhY2ssIHRoaXMsIFdUX0VYRUNVVEVERUZB
VUxUKTsKLX0KLQotc3RydWN0IFRpbWVyQ29udGV4dCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291
bnRlZDxUaW1lckNvbnRleHQ+IHsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxUaW1lckNvbnRleHQ+
IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBUaW1lckNvbnRleHQpOyB9Ci0KLSAgICBX
b3JrUXVldWUqIHF1ZXVlOwotICAgIEZ1bmN0aW9uPHZvaWQoKT4gZnVuY3Rpb247Ci0gICAgTXV0
ZXggdGltZXJNdXRleDsKLSAgICBIQU5ETEUgdGltZXI7Ci0KLXByaXZhdGU6Ci0gICAgVGltZXJD
b250ZXh0KCkgOiBxdWV1ZSgwKSwgdGltZXIoMCkgeyB9Ci19OwotCi12b2lkIFdvcmtRdWV1ZTo6
dGltZXJDYWxsYmFjayh2b2lkKiBjb250ZXh0LCBCT09MRUFOIHRpbWVyT3JXYWl0RmlyZWQpCi17
Ci0gICAgQVNTRVJUX0FSRyhjb250ZXh0LCBjb250ZXh0KTsKLSAgICBBU1NFUlRfVU5VU0VEKHRp
bWVyT3JXYWl0RmlyZWQsIHRpbWVyT3JXYWl0RmlyZWQpOwotCi0gICAgLy8gQmFsYW5jZWQgYnkg
bGVha1JlZiBpbiBzY2hlZHVsZVdvcmtBZnRlckRlbGF5LgotICAgIFJlZlB0cjxUaW1lckNvbnRl
eHQ+IHRpbWVyQ29udGV4dCA9IGFkb3B0UmVmKHN0YXRpY19jYXN0PFRpbWVyQ29udGV4dCo+KGNv
bnRleHQpKTsKLQotICAgIHRpbWVyQ29udGV4dC0+cXVldWUtPmRpc3BhdGNoKHRpbWVyQ29udGV4
dC0+ZnVuY3Rpb24pOwotCi0gICAgTXV0ZXhMb2NrZXIgbG9jayh0aW1lckNvbnRleHQtPnRpbWVy
TXV0ZXgpOwotICAgIEFTU0VSVCh0aW1lckNvbnRleHQtPnRpbWVyKTsKLSAgICBBU1NFUlQodGlt
ZXJDb250ZXh0LT5xdWV1ZS0+bV90aW1lclF1ZXVlKTsKLSAgICBpZiAoITo6RGVsZXRlVGltZXJR
dWV1ZVRpbWVyKHRpbWVyQ29udGV4dC0+cXVldWUtPm1fdGltZXJRdWV1ZSwgdGltZXJDb250ZXh0
LT50aW1lciwgMCkpCi0gICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoZmFsc2UsICI6OkRlbGV0
ZVRpbWVyUXVldWVUaW1lciBmYWlsZWQgd2l0aCBlcnJvciAlbHUiLCA6OkdldExhc3RFcnJvcigp
KTsKLX0KLQotdm9pZCBXb3JrUXVldWU6OmRpc3BhdGNoQWZ0ZXJEZWxheShjb25zdCBGdW5jdGlv
bjx2b2lkKCk+JiBmdW5jdGlvbiwgZG91YmxlIGRlbGF5KQotewotICAgIEFTU0VSVChtX3RpbWVy
UXVldWUpOwotCi0gICAgUmVmUHRyPFRpbWVyQ29udGV4dD4gY29udGV4dCA9IFRpbWVyQ29udGV4
dDo6Y3JlYXRlKCk7Ci0gICAgY29udGV4dC0+cXVldWUgPSB0aGlzOwotICAgIGNvbnRleHQtPmZ1
bmN0aW9uID0gZnVuY3Rpb247Ci0KLSAgICB7Ci0gICAgICAgIC8vIFRoZSB0aW1lciBjYWxsYmFj
ayBjb3VsZCBmaXJlIGJlZm9yZSA6OkNyZWF0ZVRpbWVyUXVldWVUaW1lciBldmVuIHJldHVybnMs
IHNvIHdlIHByb3RlY3QKLSAgICAgICAgLy8gY29udGV4dC0+dGltZXIgd2l0aCBhIG11dGV4IHRv
IGVuc3VyZSB0aGUgdGltZXIgY2FsbGJhY2sgZG9lc24ndCBhY2Nlc3MgaXQgYmVmb3JlIHRoZQot
ICAgICAgICAvLyB0aW1lciBoYW5kbGUgaGFzIGJlZW4gc3RvcmVkIGluIGl0LgotICAgICAgICBN
dXRleExvY2tlciBsb2NrKGNvbnRleHQtPnRpbWVyTXV0ZXgpOwotCi0gICAgICAgIC8vIFNpbmNl
IG91ciB0aW1lciBjYWxsYmFjayBpcyBxdWljaywgd2UgY2FuIGV4ZWN1dGUgaW4gdGhlIHRpbWVy
IHRocmVhZCBpdHNlbGYgYW5kIGF2b2lkCi0gICAgICAgIC8vIGFuIGV4dHJhIHRocmVhZCBzd2l0
Y2ggb3ZlciB0byBhIHdvcmtlciB0aHJlYWQuCi0gICAgICAgIGlmICghOjpDcmVhdGVUaW1lclF1
ZXVlVGltZXIoJmNvbnRleHQtPnRpbWVyLCBtX3RpbWVyUXVldWUsIHRpbWVyQ2FsbGJhY2ssIGNv
bnRleHQuZ2V0KCksIGRlbGF5ICogMTAwMCwgMCwgV1RfRVhFQ1VURUlOVElNRVJUSFJFQUQpKSB7
Ci0gICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGZhbHNlLCAiOjpDcmVhdGVUaW1lclF1
ZXVlVGltZXIgZmFpbGVkIHdpdGggZXJyb3IgJWx1IiwgOjpHZXRMYXN0RXJyb3IoKSk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBUaGUgdGltZXIgY2Fs
bGJhY2sgd2lsbCBoYW5kbGUgZGVzdHJveWluZyBjb250ZXh0LgotICAgIGNvbnRleHQucmVsZWFz
ZSgpLmxlYWtSZWYoKTsKLX0KLQotdm9pZCBXb3JrUXVldWU6OnVucmVnaXN0ZXJXYWl0QW5kRGVz
dHJveUl0ZW1Tb29uKFBhc3NSZWZQdHI8SGFuZGxlV29ya0l0ZW0+IGl0ZW0pCi17Ci0gICAgLy8g
V2UncmUgZ29pbmcgdG8gbWFrZSBhIGJsb2NraW5nIGNhbGwgdG8gOjpVbnJlZ2lzdGVyV2FpdEV4
IGJlZm9yZSBjbG9zaW5nIHRoZSBoYW5kbGUuIChUaGUKLSAgICAvLyBibG9ja2luZyB2ZXJzaW9u
IG9mIDo6VW5yZWdpc3RlcldhaXRFeCBpcyBtdWNoIHNpbXBsZXIgdGhhbiB0aGUgbm9uLWJsb2Nr
aW5nIHZlcnNpb24uKSBJZiB3ZQotICAgIC8vIGRvIHRoaXMgb24gdGhlIGN1cnJlbnQgdGhyZWFk
LCB3ZSdsbCBkZWFkbG9jayBpZiB3ZSdyZSBjdXJyZW50bHkgaW4gYSBjYWxsYmFjayBmdW5jdGlv
biBmb3IKLSAgICAvLyB0aGUgd2FpdCB3ZSdyZSB1bnJlZ2lzdGVyaW5nLiBTbyBpbnN0ZWFkIHdl
IGRvIGl0IGFzeW5jaHJvbm91c2x5IG9uIHNvbWUgb3RoZXIgd29ya2VyIHRocmVhZC4KLQotICAg
IDo6UXVldWVVc2VyV29ya0l0ZW0odW5yZWdpc3RlcldhaXRBbmREZXN0cm95SXRlbUNhbGxiYWNr
LCBpdGVtLmxlYWtSZWYoKSwgV1RfRVhFQ1VURURFRkFVTFQpOwotfQotCi1EV09SRCBXSU5BUEkg
V29ya1F1ZXVlOjp1bnJlZ2lzdGVyV2FpdEFuZERlc3Ryb3lJdGVtQ2FsbGJhY2sodm9pZCogY29u
dGV4dCkKLXsKLSAgICBBU1NFUlRfQVJHKGNvbnRleHQsIGNvbnRleHQpOwotICAgIFJlZlB0cjxI
YW5kbGVXb3JrSXRlbT4gaXRlbSA9IGFkb3B0UmVmKHN0YXRpY19jYXN0PEhhbmRsZVdvcmtJdGVt
Kj4oY29udGV4dCkpOwotCi0gICAgLy8gTm93IHRoYXQgd2Uga25vdyB3ZSdyZSBub3QgaW4gYSBj
YWxsYmFjayBmdW5jdGlvbiBmb3IgdGhlIHdhaXQgd2UncmUgdW5yZWdpc3RlcmluZywgd2UgY2Fu
Ci0gICAgLy8gbWFrZSBhIGJsb2NraW5nIGNhbGwgdG8gOjpVbnJlZ2lzdGVyV2FpdEV4LgotICAg
IGlmICghOjpVbnJlZ2lzdGVyV2FpdEV4KGl0ZW0tPndhaXRIYW5kbGUoKSwgSU5WQUxJRF9IQU5E
TEVfVkFMVUUpKSB7Ci0gICAgICAgIERXT1JEIGVycm9yID0gOjpHZXRMYXN0RXJyb3IoKTsKLSAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJL
aXQyL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IDdkMDYxODRjMWJiOWRkZWI2YTc1ZWVlMjNlYzc1
YzdiOTdjOGFiZDUuLmY5YjMzNjMzMmM1ZDEzZDcwZjQ0NmJhODkyNzAyODcyZjBiNWIyOTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC04LDcgKzgsNiBAQCBMSVNUKEFQUEVORCBXZWJL
aXQyX0xJTktfRkxBR1MKIAogTElTVChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgUGxhdGZv
cm0vZWZsL01vZHVsZUVmbC5jcHAKLSAgICBQbGF0Zm9ybS9lZmwvV29ya1F1ZXVlRWZsLmNwcAog
ICAgIFBsYXRmb3JtL3VuaXgvU2hhcmVkTWVtb3J5VW5peC5jcHAKIAogICAgIFBsYXRmb3JtL0Nv
cmVJUEMvdW5peC9Db25uZWN0aW9uVW5peC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCmluZGV4IDJjYThjMmUwMzEw
ZTlkMDg5YWFmYWNlNWZiZmJkM2E2NTVmOTA2ZTUuLmYxNDZlOTkzZDUyYWFlODAyNzlmMWZkYjE0
YWY0MzlhNzY1M2I4NjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKKysr
IGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQpAQCAtMzAsOSArMzAsNyBAQCBIRUFERVJTICs9
IFwKICAgICBQbGF0Zm9ybS9Db3JlSVBDL01lc3NhZ2VTZW5kZXIuaCBcCiAgICAgUGxhdGZvcm0v
TG9nZ2luZy5oIFwKICAgICBQbGF0Zm9ybS9Nb2R1bGUuaCBcCi0gICAgUGxhdGZvcm0vUGxhdGZv
cm1Qcm9jZXNzSWRlbnRpZmllci5oIFwKICAgICBQbGF0Zm9ybS9TaGFyZWRNZW1vcnkuaCBcCi0g
ICAgUGxhdGZvcm0vV29ya1F1ZXVlLmggXAogICAgIFBsdWdpblByb2Nlc3MvUGx1Z2luQ29udHJv
bGxlclByb3h5LmggXAogICAgIFBsdWdpblByb2Nlc3MvUGx1Z2luQ3JlYXRpb25QYXJhbWV0ZXJz
LmggXAogICAgIFBsdWdpblByb2Nlc3MvUGx1Z2luUHJvY2Vzcy5oIFwKQEAgLTQwNiw3ICs0MDQs
NiBAQCBTT1VSQ0VTICs9IFwKICAgICBQbGF0Zm9ybS9Db3JlSVBDL0RhdGFSZWZlcmVuY2UuY3Bw
IFwKICAgICBQbGF0Zm9ybS9Mb2dnaW5nLmNwcCBcCiAgICAgUGxhdGZvcm0vTW9kdWxlLmNwcCBc
Ci0gICAgUGxhdGZvcm0vV29ya1F1ZXVlLmNwcCBcCiAgICAgUGxhdGZvcm0vcXQvTG9nZ2luZ1F0
LmNwcCBcCiAgICAgUGxhdGZvcm0vcXQvTW9kdWxlUXQuY3BwIFwKICAgICBQbHVnaW5Qcm9jZXNz
L1BsdWdpbkNvbnRyb2xsZXJQcm94eS5jcHAgXApAQCAtODEzLDE0ICs4MTAsMTIgQEAgbWFjOiB7
CiAgICAgU09VUkNFUyArPSBcCiAgICAgICAgIFBsYXRmb3JtL0NvcmVJUEMvbWFjL0Nvbm5lY3Rp
b25NYWMuY3BwIFwKICAgICAgICAgUGxhdGZvcm0vbWFjL01hY2hVdGlsaXRpZXMuY3BwIFwKLSAg
ICAgICAgUGxhdGZvcm0vbWFjL1dvcmtRdWV1ZU1hYy5jcHAgXAogICAgICAgICBQbGF0Zm9ybS9t
YWMvU2hhcmVkTWVtb3J5TWFjLmNwcAogCiB9IGVsc2UgewogICAgIFNPVVJDRVMgKz0gXAogICAg
ICAgICBQbGF0Zm9ybS9Db3JlSVBDL3VuaXgvQXR0YWNobWVudFVuaXguY3BwIFwKICAgICAgICAg
UGxhdGZvcm0vQ29yZUlQQy91bml4L0Nvbm5lY3Rpb25Vbml4LmNwcCBcCi0gICAgICAgIFBsYXRm
b3JtL3F0L1dvcmtRdWV1ZVF0LmNwcCBcCiAgICAgICAgIFBsYXRmb3JtL3VuaXgvU2hhcmVkTWVt
b3J5VW5peC5jcHAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xh
dW5jaGVyL1Byb2Nlc3NMYXVuY2hlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1
bmNoZXIvUHJvY2Vzc0xhdW5jaGVyLmNwcAppbmRleCBiYTIyZGRhMmRhN2JjNWI0OGQzMzU4Njlh
ZmEzODBjN2JiMzY4MjllLi42N2RlZjc2ODIxZmEwYjUwZGFmZTliOWNlNTE2OGM1ZWZkOTgwMzM0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvUHJvY2Vzc0xh
dW5jaGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvUHJvY2Vz
c0xhdW5jaGVyLmNwcApAQCAtMjYsOCArMjYsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIlByb2Nlc3NMYXVuY2hlci5oIgogCi0jaW5jbHVkZSAiV29ya1F1ZXVlLmgiCiAjaW5j
bHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KIAog
bmFtZXNwYWNlIFdlYktpdCB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9MYXVuY2hlci9Qcm9jZXNzTGF1bmNoZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9M
YXVuY2hlci9Qcm9jZXNzTGF1bmNoZXIuaAppbmRleCBiYzFmODY3ZjNjMjkxNTUyMzYzMGM2NzYx
MWYwNWNlOTczZGVkNTNiLi5kNjFiZDc5ZGJkYjBjMTg3NjJkMWYyNzAwMTY3Y2FlM2FlZDhmOTMx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvUHJvY2Vzc0xh
dW5jaGVyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL1Byb2Nlc3NM
YXVuY2hlci5oCkBAIC0yNyw3ICsyNyw3IEBACiAjZGVmaW5lIFdlYlByb2Nlc3NMYXVuY2hlcl9o
CiAKICNpbmNsdWRlICJDb25uZWN0aW9uLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Qcm9jZXNzSWRl
bnRpZmllci5oIgorI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmg+CiAj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL1RocmVhZExhdW5jaGVy
LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvVGhyZWFkTGF1bmNoZXIuaApp
bmRleCBmM2E1MzEyYTJjNGY3N2ViZjIwZmQyYzQ4OTY2ZjM1YWNiMGFkOGQxLi45YzZiMTI0OTZm
MGUzNTZiZWUyYWI1ZDY4NTk1M2U2ZDE2YWFkMmJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvTGF1bmNoZXIvVGhyZWFkTGF1bmNoZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvTGF1bmNoZXIvVGhyZWFkTGF1bmNoZXIuaApAQCAtMjcsNyArMjcsNyBAQAog
I2RlZmluZSBUaHJlYWRMYXVuY2hlcl9oCiAKICNpbmNsdWRlICJDb25uZWN0aW9uLmgiCi0jaW5j
bHVkZSAiUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oIgorI2luY2x1ZGUgPHd0Zi9QbGF0Zm9y
bVByb2Nlc3NJZGVudGlmaWVyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9UaHJlYWRpbmcuaD4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5o
CmluZGV4IDU3YWI4NmMyNDI5M2IxYWQyMjIyNDEyZWI1OGU5YTlmNTZjOGM1NDguLjBlOTViZTU0
YjdhMWFlZWE1MDA0M2JjZjc1NDNjZjFiMTczNjI1OTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmgKQEAgLTQwLDcgKzQwLDYgQEAKICNlbmRpZgogI2luY2x1ZGUgIkxh
eWVyVHJlZUNvbnRleHQuaCIKICNpbmNsdWRlICJOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVz
dE1hbmFnZXJQcm94eS5oIgotI2luY2x1ZGUgIlBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIuaCIK
ICNpbmNsdWRlICJTYW5kYm94RXh0ZW5zaW9uLmgiCiAjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFw
LmgiCiAjaW5jbHVkZSAiV0tCYXNlLmgiCkBAIC03Myw2ICs3Miw3IEBACiAjaW5jbHVkZSA8d3Rm
L093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oPgog
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJv
Y2Vzc1Byb3h5LmgKaW5kZXggOGU3NjhiZmI2YTg4OWQ5YWQ2YjM2MDAwNzY5NGIyNTY3NmNlYTY4
Ni4uNjQxOWE3YTM1MzhjNjFmZThkNDU3OWMzMDZkMjM0YjY1NWRkYzEyMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaApAQCAtMjYsNyArMjYsNiBAQAogI2lm
bmRlZiBXZWJQcm9jZXNzUHJveHlfaAogI2RlZmluZSBXZWJQcm9jZXNzUHJveHlfaAogCi0jaW5j
bHVkZSAiUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIlBsdWdpbkluZm9T
dG9yZS5oIgogI2luY2x1ZGUgIlByb2Nlc3NMYXVuY2hlci5oIgogI2luY2x1ZGUgIlByb2Nlc3NN
b2RlbC5oIgpAQCAtMzksNiArMzgsNyBAQAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9QbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdDIvV2Vi
S2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDYwNzdmNmQzZTM4YTQ1MTAxMjM4
YjU0MjM3OGNjMjg3ZTA0ZGJhZjAuLmVhZDQ3OGE2ODQwODQ0ZjJhZWFkM2Y2NjQwM2ZhYTIxOTFj
YzBiMDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKQEAgLTQ3Niw3ICs0NzYsNiBAQAogCQlCNjM0MDNGOTE0OTEwRDU3MDAxMDcwQjUg
LyogQVBJT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEI2MzQwM0Y4MTQ5MTBENTcwMDEwNzBCNSAvKiBBUElPYmplY3QuY3BwICovOyB9Owog
CQlCODc4QjYxNTEzMzQyOERDMDA2ODg4RTkgLyogQ29ycmVjdGlvblBhbmVsLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCODc4QjYxMzEzMzQyOERDMDA2
ODg4RTkgLyogQ29ycmVjdGlvblBhbmVsLmggKi87IH07CiAJCUI4NzhCNjE2MTMzNDI4REMwMDY4
ODhFOSAvKiBDb3JyZWN0aW9uUGFuZWwubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCODc4QjYxNDEzMzQyOERDMDA2ODg4RTkgLyogQ29ycmVjdGlvblBh
bmVsLm1tICovOyB9OwotCQlCQzAwOTJGODExNTgzN0EzMDBFMEFFMkEgLyogV29ya1F1ZXVlTWFj
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMDA5
MkY2MTE1ODM3QTMwMEUwQUUyQSAvKiBXb3JrUXVldWVNYWMuY3BwICovOyB9OwogCQlCQzAzMkQ3
NTEwRjQzNzhEMDA1OEMxNUEgLyogV2ViQ2hyb21lQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzAzMkQ2MDEwRjQzNzhEMDA1OEMxNUEgLyog
V2ViQ2hyb21lQ2xpZW50LmggKi87IH07CiAJCUJDMDMyRDc3MTBGNDM3OEQwMDU4QzE1QSAvKiBX
ZWJDb250ZXh0TWVudUNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQkMwMzJENjIxMEY0Mzc4RDAwNThDMTVBIC8qIFdlYkNvbnRleHRNZW51Q2xp
ZW50LmggKi87IH07CiAJCUJDMDMyRDdCMTBGNDM3OEQwMDU4QzE1QSAvKiBXZWJEcmFnQ2xpZW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzAzMkQ2
NjEwRjQzNzhEMDA1OEMxNUEgLyogV2ViRHJhZ0NsaWVudC5oICovOyB9OwpAQCAtNTY5LDggKzU2
OCw2IEBACiAJCUJDMkQwMjE3MTJBQzQxQ0IwMEU3MzJBMyAvKiBTYW1lRG9jdW1lbnROYXZpZ2F0
aW9uVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QkMyRDAyMTYxMkFDNDFDQjAwRTczMkEzIC8qIFNhbWVEb2N1bWVudE5hdmlnYXRpb25UeXBlLmgg
Ki87IH07CiAJCUJDMkQwMjE5MTJBQzQyNkMwMEU3MzJBMyAvKiBXS1BhZ2VMb2FkVHlwZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMkQwMjE4MTJB
QzQyNkMwMEU3MzJBMyAvKiBXS1BhZ2VMb2FkVHlwZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQzJERkJBMzEyQTc2MUE1MDBFNzMyQTMgLyog
V2ViUHJlZmVyZW5jZXNDRi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCQzJERkJBMjEyQTc2MUE1MDBFNzMyQTMgLyogV2ViUHJlZmVyZW5jZXNDRi5j
cHAgKi87IH07Ci0JCUJDMkU2RThEMTE0MTk3MTUwMEE2M0IxRSAvKiBXb3JrUXVldWUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMyRTZFN0QxMTQx
OTcwQzAwQTYzQjFFIC8qIFdvcmtRdWV1ZS5jcHAgKi87IH07Ci0JCUJDMkU2RThFMTE0MTk3MTUw
MEE2M0IxRSAvKiBXb3JrUXVldWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEJDMkU2RTdFMTE0MTk3MEMwMEE2M0IxRSAvKiBXb3JrUXVldWUuaCAqLzsg
fTsKIAkJQkMzMDY1QzQxMjU5MkY4OTAwRTcxMjc4IC8qIFdlYlByb2Nlc3NNYWMubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzMwNjVDMzEyNTkyRjg5
MDBFNzEyNzggLyogV2ViUHJvY2Vzc01hYy5tbSAqLzsgfTsKIAkJQkMzMDY1RkExMjU5MzQ0RTAw
RTcxMjc4IC8qIENhY2hlTW9kZWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEJDMzA2NUY5MTI1OTM0NEUwMEU3MTI3OCAvKiBDYWNoZU1vZGVsLmggKi87
IH07CiAJCUJDMzA2NkJFMTI1QTQ0MjEwMEU3MTI3OCAvKiBXZWJQcm9jZXNzTWVzc2FnZVJlY2Vp
dmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJD
MzA2NkJDMTI1QTQ0MjEwMEU3MTI3OCAvKiBXZWJQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcCAq
LzsgfTsKQEAgLTE1MTQsNyArMTUxMSw2IEBACiAJCUI2MzQwM0Y4MTQ5MTBENTcwMDEwNzBCNSAv
KiBBUElPYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQVBJ
T2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjg3OEI2MTMxMzM0MjhE
QzAwNjg4OEU5IC8qIENvcnJlY3Rpb25QYW5lbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDb3JyZWN0aW9uUGFuZWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
Qjg3OEI2MTQxMzM0MjhEQzAwNjg4OEU5IC8qIENvcnJlY3Rpb25QYW5lbC5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENvcnJlY3Rpb25QYW5lbC5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQkMwMDkyRjYxMTU4MzdBMzAwRTBBRTJBIC8qIFdvcmtR
dWV1ZU1hYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXb3JrUXVl
dWVNYWMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzAzMkQ2MDEwRjQzNzhE
MDA1OEMxNUEgLyogV2ViQ2hyb21lQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdlYkNocm9tZUNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlC
QzAzMkQ2MjEwRjQzNzhEMDA1OEMxNUEgLyogV2ViQ29udGV4dE1lbnVDbGllbnQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29udGV4dE1lbnVDbGllbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMwMzJENjYxMEY0Mzc4RDAwNThDMTVBIC8qIFdlYkRy
YWdDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViRHJhZ0NsaWVu
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTYxMyw4ICsxNjA5LDYgQEAKIAkJ
QkMyRDAyMTYxMkFDNDFDQjAwRTczMkEzIC8qIFNhbWVEb2N1bWVudE5hdmlnYXRpb25UeXBlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNhbWVEb2N1bWVudE5hdmlnYXRpb25U
eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMkQwMjE4MTJBQzQyNkMwMEU3
MzJBMyAvKiBXS1BhZ2VMb2FkVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV0tQYWdlTG9hZFR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMkRG
QkEyMTJBNzYxQTUwMEU3MzJBMyAvKiBXZWJQcmVmZXJlbmNlc0NGLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYlByZWZlcmVuY2VzQ0YuY3BwOyBwYXRoID0gY2Yv
V2ViUHJlZmVyZW5jZXNDRi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUJDMkU2
RTdEMTE0MTk3MEMwMEE2M0IxRSAvKiBXb3JrUXVldWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gV29ya1F1ZXVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJQkMyRTZFN0UxMTQxOTcwQzAwQTYzQjFFIC8qIFdvcmtRdWV1ZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXb3JrUXVldWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQkMzMDY1QzMxMjU5MkY4OTAwRTcxMjc4IC8qIFdlYlByb2Nlc3NNYWMubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJQcm9jZXNzTWFjLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzMwNjVGOTEyNTkzNDRFMDBFNzEyNzggLyog
Q2FjaGVNb2RlbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWNoZU1vZGVs
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMzA2NkI5MTI1QTQzNjMwMEU3MTI3
OCAvKiBXZWJQcm9jZXNzLm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFdlYlBy
b2Nlc3MubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMjk4LDcg
KzIyOTIsNiBAQAogCQkJCTFBMjRCRjM5MTIwODk2QTYwMEZCQjA1OSAvKiBTaGFyZWRNZW1vcnlN
YWMuY3BwICovLAogCQkJCTI5NkJEODVCMTUwMTlCQzMwMDcxRjQyNCAvKiBTdHJpbmdVdGlsaXRp
ZXMuaCAqLywKIAkJCQkyOTZCRDg1QzE1MDE5QkMzMDA3MUY0MjQgLyogU3RyaW5nVXRpbGl0aWVz
Lm1tICovLAotCQkJCUJDMDA5MkY2MTE1ODM3QTMwMEUwQUUyQSAvKiBXb3JrUXVldWVNYWMuY3Bw
ICovLAogCQkJKTsKIAkJCXBhdGggPSBtYWM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpA
QCAtMzMzNiw4ICszMzI5LDYgQEAKIAkJCQlDMEUzQUE0NDEyMDlFMkJBMDBBNDlEMDEgLyogTW9k
dWxlLmggKi8sCiAJCQkJQkM4NzgwRkIxMTYxQzJCODAwQ0MyNzY4IC8qIFBsYXRmb3JtUHJvY2Vz
c0lkZW50aWZpZXIuaCAqLywKIAkJCQkxQTI0QkVEMzEyMDg5NEQxMDBGQkIwNTkgLyogU2hhcmVk
TWVtb3J5LmggKi8sCi0JCQkJQkMyRTZFN0QxMTQxOTcwQzAwQTYzQjFFIC8qIFdvcmtRdWV1ZS5j
cHAgKi8sCi0JCQkJQkMyRTZFN0UxMTQxOTcwQzAwQTYzQjFFIC8qIFdvcmtRdWV1ZS5oICovLAog
CQkJKTsKIAkJCXBhdGggPSBQbGF0Zm9ybTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBA
IC00MTg5LDcgKzQxODAsNiBAQAogCQkJCUJDODY5OUI1MTE2QUFEQUEwMDJBOTI1QiAvKiBXS1Zp
ZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDODY5OUI3MTE2QUFEQUEwMDJBOTI1QiAvKiBXS1Zp
ZXdJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkZBNjE3OUYxMkYwQjk5RDAwMzNFMENB
IC8qIFdLVmlld1ByaXZhdGUuaCBpbiBIZWFkZXJzICovLAotCQkJCUJDMkU2RThFMTE0MTk3MTUw
MEE2M0IxRSAvKiBXb3JrUXVldWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxN0JGOTk2MTREMEE3
M0UwMEE1QTA2OSAvKiBOZXRzY2FwZVNhbmRib3hGdW5jdGlvbnMuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDRTA5Mzc4MTRGQjEyOEMwMDExMzhEOSAvKiBMYXllckhvc3RpbmdDb250ZXh0LmggaW4g
SGVhZGVycyAqLywKIAkJCQkyOTZCRDg1RDE1MDE5QkMzMDA3MUY0MjQgLyogU3RyaW5nVXRpbGl0
aWVzLmggaW4gSGVhZGVycyAqLywKQEAgLTQ5MzYsOCArNDkyNiw2IEBACiAJCQkJQkM0MDc2MkMx
MjRGRjA0MDAwNjhGMjBBIC8qIFdLVVJMUmVzcG9uc2VOUy5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CUY2MTEzRTI4MTI2Q0UxOUIwMDU3RDBBNyAvKiBXS1VzZXJDb250ZW50VVJMUGF0dGVybi5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCQzg2OTlCNjExNkFBREFBMDAyQTkyNUIgLyogV0tWaWV3Lm1t
IGluIFNvdXJjZXMgKi8sCi0JCQkJQkMyRTZFOEQxMTQxOTcxNTAwQTYzQjFFIC8qIFdvcmtRdWV1
ZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCQzAwOTJGODExNTgzN0EzMDBFMEFFMkEgLyogV29y
a1F1ZXVlTWFjLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxN0JGOTk4MTREMEFBODMwMEE1QTA2
OSAvKiBOZXRzY2FwZVNhbmRib3hGdW5jdGlvbnMubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQ0Uw
OTM3NzE0RkIxMjhDMDAxMTM4RDkgLyogTGF5ZXJIb3N0aW5nQ29udGV4dC5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCTI5NkJEODVFMTUwMTlCQzMwMDcxRjQyNCAvKiBTdHJpbmdVdGlsaXRpZXMubW0g
aW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL3dpbi9XZWJLaXQyLnZj
cHJvaiBiL1NvdXJjZS9XZWJLaXQyL3dpbi9XZWJLaXQyLnZjcHJvagppbmRleCAwYTM4YzRiODIy
YTgyNDc5OGZmOGM0ZWUyZjNjZDI0ODliN2I2ZDBmLi4zNzI1MmI2MTQzODI3NjljZjJiYWU2ZmE1
YTMwMzZkMzNhMDMyNWU0IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViS2l0Mi93aW4vV2ViS2l0Mi52
Y3Byb2oKKysrIGIvU291cmNlL1dlYktpdDIvd2luL1dlYktpdDIudmNwcm9qCkBAIC0zOTM0LDE0
ICszOTM0LDYgQEAKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFBsYXRmb3JtXFNoYXJlZE1lbW9yeS5o
IgogCQkJCT4KIAkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxQbGF0
Zm9ybVxXb3JrUXVldWUuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVs
YXRpdmVQYXRoPSIuLlxQbGF0Zm9ybVxXb3JrUXVldWUuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+CiAJ
CQk8RmlsdGVyCiAJCQkJTmFtZT0iY2ciCiAJCQkJPgpAQCAtMzk4MSwxMCArMzk3Myw2IEBACiAJ
CQkJCVJlbGF0aXZlUGF0aD0iLi5cUGxhdGZvcm1cd2luXFNoYXJlZE1lbW9yeVdpbi5jcHAiCiAJ
CQkJCT4KIAkJCQk8L0ZpbGU+Ci0JCQkJPEZpbGUKLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxQbGF0
Zm9ybVx3aW5cV29ya1F1ZXVlV2luLmNwcCIKLQkJCQkJPgotCQkJCTwvRmlsZT4KIAkJCTwvRmls
dGVyPgogCQkJPEZpbHRlcgogCQkJCU5hbWU9IkNvcmVJUEMiCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151242</attachid>
            <date>2012-07-09 06:03:28 -0700</date>
            <delta_ts>2012-07-11 00:52:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90780-20120709220309.patch</filename>
            <type>text/plain</type>
            <size>129760</size>
            <attacher name="Kwang Yul Seo">skyul</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyMDk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGZlNDBlYjkzNzY4NDhlYTgyZTgzYjEw
ZjllNzgyMGM1MDllMjdhMDMuLjkxYzAwZmY0NGFmMGIyODgzZjY0NDM4YWM1ZmY5MzkwNjg2OWZj
OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTI4IEBACisyMDEyLTA3LTA5ICBLd2FuZyBZdWwgU2VvICA8c2t5
dWxAY29tcGFueTEwMC5uZXQ+CisKKyAgICAgICAgTW92ZSBXb3JrUXVldWUgdG8gV1RGCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDc4MAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEN1cnJlbnRseSwgV29y
a1F1ZXVlIGlzIGluIFdlYktpdDIuIEJ5IG1vdmluZyBXb3JrUXVldWUgYW5kCisgICAgICAgIFBs
YXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIgdG8gV1RGLCBXZWJDb3JlIGNvZGUgY2FuIHVzZSBpdC4K
KworICAgICAgICBUaGlzIHBhdGNoIGlzIHJlcXVpcmVkIGZvciBwYXJhbGxlbCBpbWFnZSBkZWNv
ZGVycyBiZWNhdXNlCisgICAgICAgIFdvcmtRdWV1ZSBpcyB1c2VkIHRvIG1ha2UgaW1hZ2UgZGVj
b2Rpbmcgb2ZmIHRoZSBtYWluIHRocmVhZC4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3Qu
YW06CisgICAgICAgICogV1RGLnBybzoKKyAgICAgICAgKiBXVEYudmNwcm9qL1dURi52Y3Byb2o6
CisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3Rm
L0NNYWtlTGlzdHMudHh0OgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAg
ICAgKiB3dGYvUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYktpdDIvUGxhdGZvcm0vUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oLgorICAgICAgICAo
V1RGKToKKyAgICAgICAgKiB3dGYvV29ya1F1ZXVlLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtL1dvcmtRdWV1ZS5jcHAuCisgICAgICAgIChXVEYpOgorICAgICAgICAo
V1RGOjpXb3JrUXVldWU6OldvcmtRdWV1ZSk6CisgICAgICAgIChXVEY6OldvcmtRdWV1ZTo6fldv
cmtRdWV1ZSk6CisgICAgICAgIChXVEY6OldvcmtRdWV1ZTo6aW52YWxpZGF0ZSk6CisgICAgICAg
ICogd3RmL1dvcmtRdWV1ZS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvUGxhdGZvcm0v
V29ya1F1ZXVlLmguCisgICAgICAgIChXVEYpOgorICAgICAgICAoV29ya1F1ZXVlKToKKyAgICAg
ICAgKFdvcmtJdGVtV2luKToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpXb3JrSXRlbVdpbjo6
ZnVuY3Rpb24pOgorICAgICAgICAoV1RGOjpXb3JrUXVldWU6OldvcmtJdGVtV2luOjpxdWV1ZSk6
CisgICAgICAgIChIYW5kbGVXb3JrSXRlbSk6CisgICAgICAgIChXVEY6OldvcmtRdWV1ZTo6SGFu
ZGxlV29ya0l0ZW06OnNldFdhaXRIYW5kbGUpOgorICAgICAgICAoV1RGOjpXb3JrUXVldWU6Okhh
bmRsZVdvcmtJdGVtOjp3YWl0SGFuZGxlKToKKyAgICAgICAgKiB3dGYvZWZsL1dvcmtRdWV1ZUVm
bC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9lZmwvV29ya1F1ZXVl
RWZsLmNwcC4KKyAgICAgICAgKFRpbWVyV29ya0l0ZW0pOgorICAgICAgICAoVGltZXJXb3JrSXRl
bTo6VGltZXJXb3JrSXRlbSk6CisgICAgICAgIChUaW1lcldvcmtJdGVtOjp+VGltZXJXb3JrSXRl
bSk6CisgICAgICAgIChUaW1lcldvcmtJdGVtOjpmdW5jdGlvbik6CisgICAgICAgIChUaW1lcldv
cmtJdGVtOjpxdWV1ZSk6CisgICAgICAgIChUaW1lcldvcmtJdGVtOjp0aW1lcklEKToKKyAgICAg
ICAgKFdvcmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXplKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6
cGxhdGZvcm1JbnZhbGlkYXRlKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6cGVyZm9ybVdvcmspOgor
ICAgICAgICAoV29ya1F1ZXVlOjpwZXJmb3JtRmlsZURlc2NyaXB0b3JXb3JrKToKKyAgICAgICAg
KFdvcmtRdWV1ZTo6c2VuZE1lc3NhZ2VUb1RocmVhZCk6CisgICAgICAgIChXb3JrUXVldWU6Ondv
cmtRdWV1ZVRocmVhZCk6CisgICAgICAgIChXb3JrUXVldWU6OnJlZ2lzdGVyU29ja2V0RXZlbnRI
YW5kbGVyKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6dW5yZWdpc3RlclNvY2tldEV2ZW50SGFuZGxl
cik6CisgICAgICAgIChXb3JrUXVldWU6OmRpc3BhdGNoKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6
dGltZXJGaXJlZCk6CisgICAgICAgIChXb3JrUXVldWU6OmRpc3BhdGNoQWZ0ZXJEZWxheSk6Cisg
ICAgICAgICogd3RmL2d0ay9Xb3JrUXVldWVHdGsuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dl
YktpdDIvUGxhdGZvcm0vZ3RrL1dvcmtRdWV1ZUd0ay5jcHAuCisgICAgICAgIChXb3JrUXVldWU6
OkV2ZW50U291cmNlKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OkV2ZW50U291
cmNlKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OmNhbmNlbCk6CisgICAgICAg
IChXb3JrUXVldWU6OkV2ZW50U291cmNlOjpleGVjdXRlRXZlbnRTb3VyY2UpOgorICAgICAgICAo
V29ya1F1ZXVlOjpFdmVudFNvdXJjZTo6cGVyZm9ybVdvcmtPbmNlKToKKyAgICAgICAgKFdvcmtR
dWV1ZTo6RXZlbnRTb3VyY2U6OnBlcmZvcm1Xb3JrKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6RXZl
bnRTb3VyY2U6OnBlcmZvcm1Xb3JrT25UZXJtaW5hdGlvbik6CisgICAgICAgIChXb3JrUXVldWU6
OkV2ZW50U291cmNlOjpkZWxldGVFdmVudFNvdXJjZSk6CisgICAgICAgIChXb3JrUXVldWU6OnBs
YXRmb3JtSW5pdGlhbGl6ZSk6CisgICAgICAgIChXb3JrUXVldWU6OnBsYXRmb3JtSW52YWxpZGF0
ZSk6CisgICAgICAgIChXb3JrUXVldWU6OnN0YXJ0V29ya1F1ZXVlVGhyZWFkKToKKyAgICAgICAg
KFdvcmtRdWV1ZTo6d29ya1F1ZXVlVGhyZWFkQm9keSk6CisgICAgICAgIChXb3JrUXVldWU6OnJl
Z2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6dW5yZWdpc3Rl
ckV2ZW50U291cmNlSGFuZGxlcik6CisgICAgICAgIChXb3JrUXVldWU6OmRpc3BhdGNoT25Tb3Vy
Y2UpOgorICAgICAgICAoV29ya1F1ZXVlOjpkaXNwYXRjaCk6CisgICAgICAgIChXb3JrUXVldWU6
OmRpc3BhdGNoQWZ0ZXJEZWxheSk6CisgICAgICAgIChXb3JrUXVldWU6OmRpc3BhdGNoT25UZXJt
aW5hdGlvbik6CisgICAgICAgICogd3RmL21hYy9Xb3JrUXVldWVNYWMuY3BwOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYktpdDIvUGxhdGZvcm0vbWFjL1dvcmtRdWV1ZU1hYy5jcHAuCisgICAgICAg
IChXb3JrUXVldWU6OmV4ZWN1dGVGdW5jdGlvbik6CisgICAgICAgIChXb3JrUXVldWU6OmRpc3Bh
dGNoKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6ZGlzcGF0Y2hBZnRlckRlbGF5KToKKyAgICAgICAg
KFdvcmtRdWV1ZTo6RXZlbnRTb3VyY2UpOgorICAgICAgICAoV29ya1F1ZXVlOjpFdmVudFNvdXJj
ZTo6RXZlbnRTb3VyY2UpOgorICAgICAgICAoV29ya1F1ZXVlOjpFdmVudFNvdXJjZTo6ZGlzcGF0
Y2hTb3VyY2UpOgorICAgICAgICAoV29ya1F1ZXVlOjpFdmVudFNvdXJjZTo6ZXZlbnRIYW5kbGVy
KToKKyAgICAgICAgKFdvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OmNhbmNlbEhhbmRsZXIpOgorICAg
ICAgICAoV29ya1F1ZXVlOjpFdmVudFNvdXJjZTo6ZmluYWxpemVIYW5kbGVyKToKKyAgICAgICAg
KFdvcmtRdWV1ZTo6cmVnaXN0ZXJNYWNoUG9ydEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXb3Jr
UXVldWU6OnVucmVnaXN0ZXJNYWNoUG9ydEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXb3JrUXVl
dWU6OnBsYXRmb3JtSW5pdGlhbGl6ZSk6CisgICAgICAgIChXb3JrUXVldWU6OnBsYXRmb3JtSW52
YWxpZGF0ZSk6CisgICAgICAgICogd3RmL3F0L1dvcmtRdWV1ZVF0LmNwcDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3F0L1dvcmtRdWV1ZVF0LmNwcC4KKyAgICAgICAgKFdU
Rik6CisgICAgICAgIChXb3JrUXVldWU6OldvcmtJdGVtUXQpOgorICAgICAgICAoV1RGOjpXb3Jr
UXVldWU6OldvcmtJdGVtUXQ6OldvcmtJdGVtUXQpOgorICAgICAgICAoV1RGOjpXb3JrUXVldWU6
OldvcmtJdGVtUXQ6On5Xb3JrSXRlbVF0KToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpXb3Jr
SXRlbVF0OjpleGVjdXRlKToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpXb3JrSXRlbVF0Ojpl
eGVjdXRlQW5kRGVsZXRlKToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpXb3JrSXRlbVF0Ojp0
aW1lckV2ZW50KToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpyZWdpc3RlclNvY2tldEV2ZW50
SGFuZGxlcik6CisgICAgICAgIChXVEY6OldvcmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXplKToK
KyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpwbGF0Zm9ybUludmFsaWRhdGUpOgorICAgICAgICAo
V1RGOjpXb3JrUXVldWU6OmRpc3BhdGNoKToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpkaXNw
YXRjaEFmdGVyRGVsYXkpOgorICAgICAgICAoV1RGOjpXb3JrUXVldWU6OmRpc3BhdGNoT25UZXJt
aW5hdGlvbik6CisgICAgICAgICogd3RmL3dpbi9Xb3JrUXVldWVXaW4uY3BwOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYktpdDIvUGxhdGZvcm0vd2luL1dvcmtRdWV1ZVdpbi5jcHAuCisgICAgICAg
IChXb3JrUXVldWU6OldvcmtJdGVtV2luOjpXb3JrSXRlbVdpbik6CisgICAgICAgIChXb3JrUXVl
dWU6OldvcmtJdGVtV2luOjpjcmVhdGUpOgorICAgICAgICAoV29ya1F1ZXVlOjpXb3JrSXRlbVdp
bjo6fldvcmtJdGVtV2luKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6SGFuZGxlV29ya0l0ZW06Okhh
bmRsZVdvcmtJdGVtKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6SGFuZGxlV29ya0l0ZW06OmNyZWF0
ZUJ5QWRvcHRpbmdIYW5kbGUpOgorICAgICAgICAoV29ya1F1ZXVlOjpIYW5kbGVXb3JrSXRlbTo6
fkhhbmRsZVdvcmtJdGVtKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6aGFuZGxlQ2FsbGJhY2spOgor
ICAgICAgICAoV29ya1F1ZXVlOjpyZWdpc3RlckhhbmRsZSk6CisgICAgICAgIChXb3JrUXVldWU6
OnVucmVnaXN0ZXJBbmRDbG9zZUhhbmRsZSk6CisgICAgICAgIChXb3JrUXVldWU6OndvcmtUaHJl
YWRDYWxsYmFjayk6CisgICAgICAgIChXb3JrUXVldWU6OnBlcmZvcm1Xb3JrT25SZWdpc3RlcmVk
V29ya1RocmVhZCk6CisgICAgICAgIChXb3JrUXVldWU6OnBsYXRmb3JtSW5pdGlhbGl6ZSk6Cisg
ICAgICAgIChXb3JrUXVldWU6OnRyeVJlZ2lzdGVyQXNXb3JrVGhyZWFkKToKKyAgICAgICAgKFdv
cmtRdWV1ZTo6dW5yZWdpc3RlckFzV29ya1RocmVhZCk6CisgICAgICAgIChXb3JrUXVldWU6OnBs
YXRmb3JtSW52YWxpZGF0ZSk6CisgICAgICAgIChXb3JrUXVldWU6OmRpc3BhdGNoKToKKyAgICAg
ICAgKFRpbWVyQ29udGV4dDo6Y3JlYXRlKToKKyAgICAgICAgKFRpbWVyQ29udGV4dCk6CisgICAg
ICAgIChUaW1lckNvbnRleHQ6OlRpbWVyQ29udGV4dCk6CisgICAgICAgIChXb3JrUXVldWU6OnRp
bWVyQ2FsbGJhY2spOgorICAgICAgICAoV29ya1F1ZXVlOjpkaXNwYXRjaEFmdGVyRGVsYXkpOgor
ICAgICAgICAoV29ya1F1ZXVlOjp1bnJlZ2lzdGVyV2FpdEFuZERlc3Ryb3lJdGVtU29vbik6Cisg
ICAgICAgIChXb3JrUXVldWU6OnVucmVnaXN0ZXJXYWl0QW5kRGVzdHJveUl0ZW1DYWxsYmFjayk6
CisKIDIwMTItMDctMDggIExhc3psbyBHb21ib3MgIDxsYXN6bG8uMS5nb21ib3NAbm9raWEuY29t
PgogCiAgICAgICAgIEludHJvZHVjZSBhIGJ1aWxkIGZsYWcgZm9yIGxvdyBxdWFsaXR5IEpQRUcg
aW1hZ2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cKaW5kZXggMDhlMGZlOWFmN2I4ZTBkYzUxNGJiMjVhNjRkOGY2NGE5ZDVm
MTlhZS4uOTE4YzBkNzVjYjMxYTZlNmI2NjFjMzc4NWNjZWY2ZDk4MmJiMzZiMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDMyIEBACisyMDEyLTA3LTA5ICBLd2FuZyBZdWwgU2VvICA8c2t5dWxAY29t
cGFueTEwMC5uZXQ+CisKKyAgICAgICAgTW92ZSBXb3JrUXVldWUgdG8gV1RGCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDc4MAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEN1cnJlbnRseSwgV29ya1F1ZXVl
IGlzIGluIFdlYktpdDIuIEJ5IG1vdmluZyBXb3JrUXVldWUgYW5kCisgICAgICAgIFBsYXRmb3Jt
UHJvY2Vzc0lkZW50aWZpZXIgdG8gV1RGLCBXZWJDb3JlIGNvZGUgY2FuIHVzZSBpdC4KKworICAg
ICAgICBUaGlzIHBhdGNoIGlzIHJlcXVpcmVkIGZvciBwYXJhbGxlbCBpbWFnZSBkZWNvZGVycyBi
ZWNhdXNlCisgICAgICAgIFdvcmtRdWV1ZSBpcyB1c2VkIHRvIG1ha2UgaW1hZ2UgZGVjb2Rpbmcg
b2ZmIHRoZSBtYWluIHRocmVhZC4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAg
ICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogUGxhdGZvcm0vQ29yZUlQQy9Db25u
ZWN0aW9uLmg6CisgICAgICAgIChDb25uZWN0aW9uKToKKyAgICAgICAgKiBQbGF0Zm9ybS9Db3Jl
SVBDL3VuaXgvQ29ubmVjdGlvblVuaXguY3BwOgorICAgICAgICAoQ29yZUlQQzo6Q29ubmVjdGlv
bjo6c2V0U2hvdWxkQ2xvc2VDb25uZWN0aW9uT25Qcm9jZXNzVGVybWluYXRpb24pOgorICAgICAg
ICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICog
VUlQcm9jZXNzL0xhdW5jaGVyL1Byb2Nlc3NMYXVuY2hlci5jcHA6CisgICAgICAgICogVUlQcm9j
ZXNzL0xhdW5jaGVyL1Byb2Nlc3NMYXVuY2hlci5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9MYXVu
Y2hlci9UaHJlYWRMYXVuY2hlci5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHku
aDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5Lmg6CisgICAgICAgICogV2Vi
S2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHdpbi9XZWJLaXQyLnZj
cHJvajoKKwogMjAxMi0wNy0wNiAgQ2hyaXN0b3BoZSBEdW1leiAgPGNocmlzdG9waGUuZHVtZXpA
aW50ZWwuY29tPgogCiAgICAgICAgIFtXSzJdIEFkZCBzdXBwb3J0IGZvciBOZXR3b3JrIEluZm9y
bWF0aW9uIEFQSQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9HTlVtYWtlZmlsZS5saXN0LmFtIGIv
U291cmNlL1dURi9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IGM1ZjQ4YTZjZTU1OWEyNGNjMjBi
NzA3NThkZjhiYzRhODRkYzllZWQuLmNmMmEwOGU3Yzk5ZTE2MmZmOWFmMWZmNzE3ZDljOGVjOGVk
ZDA2MmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9T
b3VyY2UvV1RGL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTE2NCw2ICsxNjQsOCBAQCB3dGZfc291
cmNlcyArPSBcCiAgICAgU291cmNlL1dURi93dGYvVmFsdWVDaGVjay5oIFwKICAgICBTb3VyY2Uv
V1RGL3d0Zi9WZWN0b3IuaCBcCiAgICAgU291cmNlL1dURi93dGYvVmVjdG9yVHJhaXRzLmggXAor
ICAgIFNvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5jcHAgXAorICAgIFNvdXJjZS9XVEYvd3RmL1dv
cmtRdWV1ZS5oIFwKICAgICBTb3VyY2UvV1RGL3d0Zi9XVEZUaHJlYWREYXRhLmNwcCBcCiAgICAg
U291cmNlL1dURi93dGYvV1RGVGhyZWFkRGF0YS5oIFwKICAgICBTb3VyY2UvV1RGL3d0Zi9kdG9h
LmNwcCBcCkBAIC0xOTQsNiArMTk2LDcgQEAgd3RmX3NvdXJjZXMgKz0gXAogICAgIFNvdXJjZS9X
VEYvd3RmL2dvYmplY3QvR2xpYlV0aWxpdGllcy5jcHAgXAogICAgIFNvdXJjZS9XVEYvd3RmL2dv
YmplY3QvR2xpYlV0aWxpdGllcy5oIFwKICAgICBTb3VyY2UvV1RGL3d0Zi9ndGsvTWFpblRocmVh
ZEd0ay5jcHAgXAorICAgIFNvdXJjZS9XVEYvd3RmL2d0ay9Xb3JrUXVldWVHdGsuY3BwIFwKICAg
ICBTb3VyY2UvV1RGL3d0Zi90ZXh0L0FTQ0lJRmFzdFBhdGguaCBcCiAgICAgU291cmNlL1dURi93
dGYvdGV4dC9BdG9taWNTdHJpbmcuY3BwIFwKICAgICBTb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21p
Y1N0cmluZy5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnBybyBiL1NvdXJjZS9XVEYv
V1RGLnBybwppbmRleCAwOTYyZWYwYjUwYTUxN2JkMGUyZDQ1NjJkZjhkZWZkNmY1MWExZjA0Li44
ODZiMmYzYTdiNmUzYTg1NWRkYjA2MzFiYjc2NzU1NGU1Mjc1OGNiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL1dURi5wcm8KKysrIGIvU291cmNlL1dURi9XVEYucHJvCkBAIC0xNjMsNiArMTYzLDcg
QEAgSEVBREVSUyArPSBcCiAgICAgVmVjdG9yLmggXAogICAgIFZlY3RvclRyYWl0cy5oIFwKICAg
ICBWTVRhZ3MuaCBcCisgICAgV29ya1F1ZXVlLmggXAogICAgIFdURlRocmVhZERhdGEuaAogCiB1
bml4OiBIRUFERVJTICs9IFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaApAQCAtMTk5LDYg
KzIwMCw3IEBAIFNPVVJDRVMgKz0gXAogICAgIE9TUmFuZG9tU291cmNlLmNwcCBcCiAgICAgcXQv
TWFpblRocmVhZFF0LmNwcCBcCiAgICAgcXQvU3RyaW5nUXQuY3BwIFwKKyAgICBxdC9Xb3JrUXVl
dWVRdC5jcHAgXAogICAgIFBhZ2VBbGxvY2F0aW9uQWxpZ25lZC5jcHAgXAogICAgIFBhZ2VCbG9j
ay5jcHAgXAogICAgIFBhcmFsbGVsSm9ic0dlbmVyaWMuY3BwIFwKQEAgLTIwOSw2ICsyMTEsNyBA
QCBTT1VSQ0VTICs9IFwKICAgICBUQ1N5c3RlbUFsbG9jLmNwcCBcCiAgICAgVGhyZWFkaW5nLmNw
cCBcCiAgICAgVHlwZVRyYWl0cy5jcHAgXAorICAgIFdvcmtRdWV1ZS5jcHAgXAogICAgIFdURlRo
cmVhZERhdGEuY3BwIFwKICAgICB0ZXh0L0F0b21pY1N0cmluZy5jcHAgXAogICAgIHRleHQvQ1N0
cmluZy5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9XVEYudmNwcm9qL1dURi52Y3Byb2og
Yi9Tb3VyY2UvV1RGL1dURi52Y3Byb2ovV1RGLnZjcHJvagppbmRleCAyMTkwZGFlMWVmZmVhZTMz
OTUzMzI3ZTNjYjczZTc3ZTZlZTQ2ZDU4Li4xY2M3YWU3MTk1ZDE3M2FiNGU2OTg1Zjg1ZWNjODc1
ZDVmMWM0N2NhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi52Y3Byb2ovV1RGLnZjcHJvagor
KysgYi9Tb3VyY2UvV1RGL1dURi52Y3Byb2ovV1RGLnZjcHJvagpAQCAtMzQzLDYgKzM0MywxMCBA
QAogCQkJCVJlbGF0aXZlUGF0aD0iLi5cd3RmXHdpblxPd25QdHJXaW4uY3BwIgogCQkJCT4KIAkJ
CTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlx3dGZcd2luXFdvcmtRdWV1
ZVdpbi5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgogCQk8L0ZpbHRlcj4KIAkJPEZpbHRlcgogCQkJ
TmFtZT0idW5pY29kZSIKQEAgLTEyMTMsNiArMTIxNywxNCBAQAogCQkJPgogCQk8L0ZpbGU+CiAJ
CTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXHd0ZlxXb3JrUXVldWUuY3BwIgorCQkJPgorCQk8
L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXHd0ZlxXb3JrUXVldWUuaCIKKwkJ
CT4KKwkJPC9GaWxlPgorCQk8RmlsZQogCQkJUmVsYXRpdmVQYXRoPSIuLlx3dGZcV1RGVGhyZWFk
RGF0YS5jcHAiCiAJCQk+CiAJCTwvRmlsZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCmluZGV4IDc3MjA0NjFlMjY0NjYxZmM4ZTk0MzVlOTA4ODE2NzRiY2QxYjc2NTgu
LmZjZDAyMWVlNWNmMTRkMWI1MmJkMjg3NTYwOGIxZjdmZDg3NzM1ZTMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dURi9X
VEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjM5LDYgKzIzOSw5IEBACiAJCUE4QTQ3
NDdFMTUxQTgyNUIwMDQxMjNGRiAvKiBWZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MzcwMTUxQTgyNUIwMDQxMjNGRiAvKiBWZWN0b3Iu
aCAqLzsgfTsKIAkJQThBNDc0N0YxNTFBODI1QjAwNDEyM0ZGIC8qIFZlY3RvclRyYWl0cy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDczNzExNTFB
ODI1QjAwNDEyM0ZGIC8qIFZlY3RvclRyYWl0cy5oICovOyB9OwogCQlBOEE0NzQ4MDE1MUE4MjVC
MDA0MTIzRkYgLyogVk1UYWdzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBOEE0NzM3MjE1MUE4MjVCMDA0MTIzRkYgLyogVk1UYWdzLmggKi87IH07CisJ
CUJDMkU2RThEMTE0MTk3MTUwMEE2M0IxRSAvKiBXb3JrUXVldWUuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMyRTZFN0QxMTQxOTcwQzAwQTYzQjFF
IC8qIFdvcmtRdWV1ZS5jcHAgKi87IH07CisJCUJDMkU2RThFMTE0MTk3MTUwMEE2M0IxRSAvKiBX
b3JrUXVldWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEJDMkU2RTdFMTE0MTk3MEMwMEE2M0IxRSAvKiBXb3JrUXVldWUuaCAqLzsgfTsKKwkJQkMwMDky
RjgxMTU4MzdBMzAwRTBBRTJBIC8qIFdvcmtRdWV1ZU1hYy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzAwOTJGNjExNTgzN0EzMDBFMEFFMkEgLyog
V29ya1F1ZXVlTWFjLmNwcCAqLzsgfTsKIAkJQThBNDc0ODYxNTFBODI1QjAwNDEyM0ZGIC8qIFdU
RlRocmVhZERhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQThBNDczN0ExNTFBODI1QjAwNDEyM0ZGIC8qIFdURlRocmVhZERhdGEuY3BwICovOyB9
OwogCQlBOEE0NzQ4NzE1MUE4MjVCMDA0MTIzRkYgLyogV1RGVGhyZWFkRGF0YS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDczN0IxNTFBODI1QjAw
NDEyM0ZGIC8qIFdURlRocmVhZERhdGEuaCAqLzsgfTsKIAkJQThBNDc0OEMxNTFBODI2NDAwNDEy
M0ZGIC8qIGNvbmZpZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQThBNDc0OEIxNTFBODI2NDAwNDEyM0ZGIC8qIGNvbmZpZy5oICovOyB9OwpAQCAtNDg3
LDYgKzQ5MCw5IEBACiAJCUE4QTQ3MzcwMTUxQTgyNUIwMDQxMjNGRiAvKiBWZWN0b3IuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUE4QTQ3MzcxMTUxQTgyNUIwMDQxMjNGRiAvKiBWZWN0b3JUcmFpdHMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmVjdG9yVHJhaXRzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QTQ3MzcyMTUxQTgyNUIwMDQxMjNGRiAvKiBWTVRhZ3Mu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVk1UYWdzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUJDMkU2RTdEMTE0MTk3MEMwMEE2M0IxRSAvKiBXb3JrUXVldWUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV29ya1F1ZXVlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkMyRTZFN0UxMTQxOTcwQzAwQTYzQjFFIC8q
IFdvcmtRdWV1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXb3JrUXVldWUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkMwMDkyRjYxMTU4MzdBMzAwRTBBRTJB
IC8qIFdvcmtRdWV1ZU1hYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXb3JrUXVldWVNYWMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEE0NzM3
QTE1MUE4MjVCMDA0MTIzRkYgLyogV1RGVGhyZWFkRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBXVEZUaHJlYWREYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQThBNDczN0IxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlRocmVhZERhdGEuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV1RGVGhyZWFkRGF0YS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlBOEE0NzQ4QjE1MUE4MjY0MDA0MTIzRkYgLyogY29uZmln
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGNvbmZpZy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtNzE3LDYgKzcyMyw4IEBACiAJCQkJQThBNDczNzAxNTFBODI1
QjAwNDEyM0ZGIC8qIFZlY3Rvci5oICovLAogCQkJCUE4QTQ3MzcxMTUxQTgyNUIwMDQxMjNGRiAv
KiBWZWN0b3JUcmFpdHMuaCAqLywKIAkJCQlBOEE0NzM3MjE1MUE4MjVCMDA0MTIzRkYgLyogVk1U
YWdzLmggKi8sCisJCQkJQkMyRTZFN0QxMTQxOTcwQzAwQTYzQjFFIC8qIFdvcmtRdWV1ZS5jcHAg
Ki8sCisJCQkJQkMyRTZFN0UxMTQxOTcwQzAwQTYzQjFFIC8qIFdvcmtRdWV1ZS5oICovLAogCQkJ
CUE4QTQ3MzdBMTUxQTgyNUIwMDQxMjNGRiAvKiBXVEZUaHJlYWREYXRhLmNwcCAqLywKIAkJCQlB
OEE0NzM3QjE1MUE4MjVCMDA0MTIzRkYgLyogV1RGVGhyZWFkRGF0YS5oICovLAogCQkJCUE4NzZE
QkQ3MTUxODE2RTUwMERBREI5NSAvKiBQbGF0Zm9ybS5oICovLApAQCAtNzU2LDYgKzc2NCw3IEBA
CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCUE4QTQ3MkM1MTUxQTgy
NUEwMDQxMjNGRiAvKiBNYWluVGhyZWFkTWFjLm1tICovLAorCQkJCUJDMDA5MkY2MTE1ODM3QTMw
MEUwQUUyQSAvKiBXb3JrUXVldWVNYWMuY3BwICovLAogCQkJKTsKIAkJCXBhdGggPSBtYWM7CiAJ
CQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMTAzNyw2ICsxMDQ2LDcgQEAKIAkJCQlBOEE0
NzQ3RTE1MUE4MjVCMDA0MTIzRkYgLyogVmVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0
NzQ3RjE1MUE4MjVCMDA0MTIzRkYgLyogVmVjdG9yVHJhaXRzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBOEE0NzQ4MDE1MUE4MjVCMDA0MTIzRkYgLyogVk1UYWdzLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlCQzJFNkU4RTExNDE5NzE1MDBBNjNCMUUgLyogV29ya1F1ZXVlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBOEE0NzQ4NzE1MUE4MjVCMDA0MTIzRkYgLyogV1RGVGhyZWFkRGF0YS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQThBNDc0OEMxNTFBODI2NDAwNDEyM0ZGIC8qIGNvbmZpZy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMTQzRjYxMjAxNTY1RjBGOTAwREI1MTRBIC8qIFJBTVNpemUuaCBpbiBIZWFk
ZXJzICovLApAQCAtMTE4Niw2ICsxMTk2LDggQEAKIAkJCQlBOEE0NzQ3NDE1MUE4MjVCMDA0MTIz
RkYgLyogVVJMQ2hhcmFjdGVyVHlwZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDc0Nzcx
NTFBODI1QjAwNDEyM0ZGIC8qIFVSTEVzY2FwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0
NzQ3QjE1MUE4MjVCMDA0MTIzRkYgLyogVVJMU2VnbWVudHMuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJQkMyRTZFOEQxMTQxOTcxNTAwQTYzQjFFIC8qIFdvcmtRdWV1ZS5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQlCQzAwOTJGODExNTgzN0EzMDBFMEFFMkEgLyogV29ya1F1ZXVlTWFjLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE4QTQ3NDg2MTUxQTgyNUIwMDQxMjNGRiAvKiBXVEZUaHJlYWREYXRh
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0M0Y2MTFGMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1T
aXplLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKaW5kZXggMjc0
ZjA0Yzk3NDkzMTlhZWY0ODA0NDc5MTZkZDIyODI3MjUwODY4Zi4uYmU5NTRmMDQzODNkOWI4Zjli
ZTQzOTkxMDFlZTAyZmViZGY0MmFmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvQ01ha2VM
aXN0cy50eHQKKysrIGIvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKQEAgLTEwMiw2ICsx
MDIsNyBAQCBTRVQoV1RGX0hFQURFUlMKICAgICBWYWx1ZUNoZWNrLmgKICAgICBWZWN0b3IuaAog
ICAgIFZlY3RvclRyYWl0cy5oCisgICAgV29ya1F1ZXVlLmgKICAgICBXVEZUaHJlYWREYXRhLmgK
ICAgICBkdG9hLmgKIApAQCAtMTYxLDYgKzE2Miw3IEBAIFNFVChXVEZfU09VUkNFUwogICAgIFN0
cmluZ0V4dHJhcy5jcHAKICAgICBUaHJlYWRpbmcuY3BwCiAgICAgVHlwZVRyYWl0cy5jcHAKKyAg
ICBXb3JrUXVldWUuY3BwCiAgICAgV1RGVGhyZWFkRGF0YS5jcHAKICAgICBkdG9hLmNwcAogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XVEYv
d3RmL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IDFhMTNkYmJhMzU1ODRlMDU2YzQ5MjkxZTM4N2Ez
MjI1NzEwZDEzMDguLmZkMTdmNTc4NWVkYmZkN2EyNzE4MmI0YTNkZWEyNGYwOTFlZmQ4NzYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9X
VEYvd3RmL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC0xLDYgKzEsNyBAQAogTElTVChBUFBFTkQgV1RG
X1NPVVJDRVMKICAgICBlZmwvTWFpblRocmVhZEVmbC5jcHAKICAgICBlZmwvT3duUHRyRWZsLmNw
cAorICAgIGVmbC9Xb3JrUXVldWVFZmwuY3BwCiAgICAgZ29iamVjdC9HT3duUHRyLmNwcAogICAg
IGdvYmplY3QvR1JlZlB0ci5jcHAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGxhdGZv
cm1Qcm9jZXNzSWRlbnRpZmllci5oIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1Qcm9jZXNzSWRl
bnRpZmllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY3ZmY1M2JjZDZjOWZiNGYyOTc3YTg4Yzg0Yjc2OWMwZDhi
ZmQ3MTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybVByb2Nlc3NJ
ZGVudGlmaWVyLmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI2lmbmRlZiBQbGF0
Zm9ybVByb2Nlc3NJZGVudGlmaWVyX2gKKyNkZWZpbmUgUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmll
cl9oCisKKyNpZiBQTEFURk9STShRVCkKK2NsYXNzIFFQcm9jZXNzOworI2VsaWYgUExBVEZPUk0o
RUZMKQorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXVEYgeworCisj
aWYgUExBVEZPUk0oTUFDKQordHlwZWRlZiBwaWRfdCBQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVy
OworI2VsaWYgUExBVEZPUk0oV0lOKQordHlwZWRlZiBIQU5ETEUgUGxhdGZvcm1Qcm9jZXNzSWRl
bnRpZmllcjsKKyNlbGlmIFBMQVRGT1JNKFFUKQordHlwZWRlZiBRUHJvY2VzcyogUGxhdGZvcm1Q
cm9jZXNzSWRlbnRpZmllcjsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyNpZmRlZiBHX09TX1dJTjMy
Cit0eXBlZGVmIHZvaWQqIEdQaWQ7CisjZWxzZQordHlwZWRlZiBpbnQgR1BpZDsKKyNlbmRpZgor
dHlwZWRlZiBHUGlkIFBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXI7CisjZWxpZiBQTEFURk9STShF
RkwpCit0eXBlZGVmIHBpZF90IFBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXI7CisjZW5kaWYKKwor
fSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6UGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmll
cjsKKworI2VuZGlmIC8vIFBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXJfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dURi93dGYvV29ya1F1ZXVlLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uOGY1ZmQxNGViNGJjOWU1NTIwMTQ0MmMzMjhkYmFmMmYzNjY1OGY2ZQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5jcHAKQEAgLTAsMCAr
MSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXb3Jr
UXVldWUuaCIKKworbmFtZXNwYWNlIFdURiB7CisKK1dvcmtRdWV1ZTo6V29ya1F1ZXVlKGNvbnN0
IGNoYXIqIG5hbWUpCisgICAgOiBtX2lzVmFsaWQodHJ1ZSkKK3sKKyAgICBwbGF0Zm9ybUluaXRp
YWxpemUobmFtZSk7Cit9CisKK1dvcmtRdWV1ZTo6fldvcmtRdWV1ZSgpCit7CisjaWYgIUFTU0VS
VF9ESVNBQkxFRAorICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2lzVmFsaWRNdXRleCk7CisgICAg
QVNTRVJUKCFtX2lzVmFsaWQpOworI2VuZGlmCit9CisKK3ZvaWQgV29ya1F1ZXVlOjppbnZhbGlk
YXRlKCkKK3sKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2lzVmFsaWRNdXRl
eCk7CisgICAgICAgIG1faXNWYWxpZCA9IGZhbHNlOworICAgIH0KKworICAgIHBsYXRmb3JtSW52
YWxpZGF0ZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL1dvcmtRdWV1ZS5oIGIvU291cmNlL1dURi93dGYvV29ya1F1ZXVlLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNWMwY2I5ODY0OTJjNWQxNjRhZWRkOGE5YWI1ZjJlOWQ3MTk0YjlhMgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5oCkBAIC0wLDAgKzEsMjE2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXb3JrUXVldWVfaAorI2RlZmlu
ZSBXb3JrUXVldWVfaAorCisjaWYgT1MoREFSV0lOKQorI2lmIEhBVkUoRElTUEFUQ0hfSCkKKyNp
bmNsdWRlIDxkaXNwYXRjaC9kaXNwYXRjaC5oPgorI2VuZGlmCisjZW5kaWYKKworI2luY2x1ZGUg
PHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uYWwuaD4KKyNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorCisjaWYgKFBMQVRGT1JNKFFUKSAmJiAhT1MoREFSV0lOKSkgfHwgUExBVEZP
Uk0oR1RLKSB8fCBQTEFURk9STShFRkwpCisjaW5jbHVkZSAiUGxhdGZvcm1Qcm9jZXNzSWRlbnRp
Zmllci5oIgorI2VuZGlmCisKKyNpZiBQTEFURk9STShRVCkgJiYgIU9TKERBUldJTikKKyNpbmNs
dWRlIDxRU29ja2V0Tm90aWZpZXI+CitjbGFzcyBRT2JqZWN0OworY2xhc3MgUVRocmVhZDsKKyNl
bGlmIFBMQVRGT1JNKEdUSykKKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+Cit0eXBl
ZGVmIGdib29sZWFuICgqR1NvdXJjZUZ1bmMpIChncG9pbnRlciBkYXRhKTsKKyNlbGlmIFBMQVRG
T1JNKEVGTCkKKyNpbmNsdWRlIDxFY29yZS5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXVEYgewor
CitjbGFzcyBXb3JrUXVldWUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFdvcmtRdWV1ZSk7
CisKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBXb3JrUXVldWUoY29uc3QgY2hhciogbmFtZSk7Cisg
ICAgfldvcmtRdWV1ZSgpOworCisgICAgLy8gV2lsbCBkaXNwYXRjaCB0aGUgZ2l2ZW4gZnVuY3Rp
b24gdG8gcnVuIGFzIHNvb24gYXMgcG9zc2libGUuCisgICAgdm9pZCBkaXNwYXRjaChjb25zdCBG
dW5jdGlvbjx2b2lkKCk+Jik7CisKKyAgICAvLyBXaWxsIGRpc3BhdGNoIHRoZSBnaXZlbiBmdW5j
dGlvbiBhZnRlciB0aGUgZ2l2ZW4gZGVsYXkgKGluIHNlY29uZHMpLgorICAgIHZvaWQgZGlzcGF0
Y2hBZnRlckRlbGF5KGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mLCBkb3VibGUgZGVsYXkpOworCisg
ICAgdm9pZCBpbnZhbGlkYXRlKCk7CisKKyNpZiBPUyhEQVJXSU4pCisgICAgZW51bSBNYWNoUG9y
dEV2ZW50VHlwZSB7CisgICAgICAgIC8vIEZpcmVkIHdoZW4gdGhlcmUgaXMgZGF0YSBvbiB0aGUg
Z2l2ZW4gcmVjZWl2ZSByaWdodC4KKyAgICAgICAgTWFjaFBvcnREYXRhQXZhaWxhYmxlLAorICAg
ICAgICAKKyAgICAgICAgLy8gRmlyZWQgd2hlbiB0aGUgcmVjZWl2ZSByaWdodCBmb3IgdGhpcyBz
ZW5kIHJpZ2h0IGhhcyBiZWVuIGRlc3Ryb3llZC4KKyAgICAgICAgTWFjaFBvcnREZWFkTmFtZU5v
dGlmaWNhdGlvbgorICAgIH07CisgICAgCisgICAgLy8gV2lsbCBleGVjdXRlIHRoZSBnaXZlbiBm
dW5jdGlvbiB3aGVuZXZlciB0aGUgZ2l2ZW4gbWFjaCBwb3J0IGV2ZW50IGZpcmVzLgorICAgIC8v
IE5vdGUgdGhhdCB0aGlzIHdpbGwgYWRvcHQgdGhlIG1hY2ggcG9ydCBhbmQgZGVzdHJveSBpdCB3
aGVuIHRoZSB3b3JrIHF1ZXVlIGlzIGludmFsaWRhdGVkLgorICAgIHZvaWQgcmVnaXN0ZXJNYWNo
UG9ydEV2ZW50SGFuZGxlcihtYWNoX3BvcnRfdCwgTWFjaFBvcnRFdmVudFR5cGUsIGNvbnN0IEZ1
bmN0aW9uPHZvaWQoKT4mKTsKKyAgICB2b2lkIHVucmVnaXN0ZXJNYWNoUG9ydEV2ZW50SGFuZGxl
cihtYWNoX3BvcnRfdCk7CisjZWxpZiBQTEFURk9STShXSU4pCisgICAgdm9pZCByZWdpc3Rlckhh
bmRsZShIQU5ETEUsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsKKyAgICB2b2lkIHVucmVnaXN0
ZXJBbmRDbG9zZUhhbmRsZShIQU5ETEUpOworI2VsaWYgUExBVEZPUk0oUVQpCisgICAgUVNvY2tl
dE5vdGlmaWVyKiByZWdpc3RlclNvY2tldEV2ZW50SGFuZGxlcihpbnQsIFFTb2NrZXROb3RpZmll
cjo6VHlwZSwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOworICAgIHZvaWQgZGlzcGF0Y2hPblRl
cm1pbmF0aW9uKFBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIsIGNvbnN0IEZ1bmN0aW9uPHZvaWQo
KT4mKTsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICB2b2lkIHJlZ2lzdGVyRXZlbnRTb3VyY2VI
YW5kbGVyKGludCwgaW50LCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7CisgICAgdm9pZCB1bnJl
Z2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKGludCk7CisgICAgdm9pZCBkaXNwYXRjaE9uVGVybWlu
YXRpb24oUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllciwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYp
OworI2VsaWYgUExBVEZPUk0oRUZMKQorICAgIHZvaWQgcmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRs
ZXIoaW50LCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7CisgICAgdm9pZCB1bnJlZ2lzdGVyU29j
a2V0RXZlbnRIYW5kbGVyKGludCk7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICAvLyBGSVhNRTog
VXNlIGFuIGF0b21pYyBib29sZWFuIGhlcmUgaW5zdGVhZC4KKyAgICBNdXRleCBtX2lzVmFsaWRN
dXRleDsKKyAgICBib29sIG1faXNWYWxpZDsKKworICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXpl
KGNvbnN0IGNoYXIqIG5hbWUpOworICAgIHZvaWQgcGxhdGZvcm1JbnZhbGlkYXRlKCk7CisKKyNp
ZiBPUyhEQVJXSU4pCisjaWYgSEFWRShESVNQQVRDSF9IKQorICAgIHN0YXRpYyB2b2lkIGV4ZWN1
dGVGdW5jdGlvbih2b2lkKik7CisgICAgTXV0ZXggbV9ldmVudFNvdXJjZXNNdXRleDsKKyAgICBj
bGFzcyBFdmVudFNvdXJjZTsKKyAgICBIYXNoTWFwPG1hY2hfcG9ydF90LCBFdmVudFNvdXJjZSo+
IG1fZXZlbnRTb3VyY2VzOworICAgIGRpc3BhdGNoX3F1ZXVlX3QgbV9kaXNwYXRjaFF1ZXVlOwor
I2VuZGlmCisjZWxpZiBQTEFURk9STShXSU4pCisgICAgY2xhc3MgV29ya0l0ZW1XaW4gOiBwdWJs
aWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8V29ya0l0ZW1XaW4+IHsKKyAgICBwdWJsaWM6CisgICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdvcmtJdGVtV2luPiBjcmVhdGUoY29uc3QgRnVuY3Rpb248
dm9pZCgpPiYsIFdvcmtRdWV1ZSopOworICAgICAgICB2aXJ0dWFsIH5Xb3JrSXRlbVdpbigpOwor
CisgICAgICAgIEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKCkgeyByZXR1cm4gbV9mdW5jdGlv
bjsgfQorICAgICAgICBXb3JrUXVldWUqIHF1ZXVlKCkgY29uc3QgeyByZXR1cm4gbV9xdWV1ZTsg
fQorCisgICAgcHJvdGVjdGVkOgorICAgICAgICBXb3JrSXRlbVdpbihjb25zdCBGdW5jdGlvbjx2
b2lkKCk+JiwgV29ya1F1ZXVlKik7CisKKyAgICBwcml2YXRlOgorICAgICAgICBGdW5jdGlvbjx2
b2lkKCk+IG1fZnVuY3Rpb247CisgICAgICAgIFdvcmtRdWV1ZSogbV9xdWV1ZTsKKyAgICB9Owor
CisgICAgY2xhc3MgSGFuZGxlV29ya0l0ZW0gOiBwdWJsaWMgV29ya0l0ZW1XaW4geworICAgIHB1
YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SGFuZGxlV29ya0l0ZW0+IGNyZWF0ZUJ5
QWRvcHRpbmdIYW5kbGUoSEFORExFLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiwgV29ya1F1ZXVl
Kik7CisgICAgICAgIHZpcnR1YWwgfkhhbmRsZVdvcmtJdGVtKCk7CisKKyAgICAgICAgdm9pZCBz
ZXRXYWl0SGFuZGxlKEhBTkRMRSB3YWl0SGFuZGxlKSB7IG1fd2FpdEhhbmRsZSA9IHdhaXRIYW5k
bGU7IH0KKyAgICAgICAgSEFORExFIHdhaXRIYW5kbGUoKSBjb25zdCB7IHJldHVybiBtX3dhaXRI
YW5kbGU7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIEhhbmRsZVdvcmtJdGVtKEhBTkRMRSwg
Y29uc3QgRnVuY3Rpb248dm9pZCgpPiYsIFdvcmtRdWV1ZSopOworCisgICAgICAgIEhBTkRMRSBt
X2hhbmRsZTsKKyAgICAgICAgSEFORExFIG1fd2FpdEhhbmRsZTsKKyAgICB9OworCisgICAgc3Rh
dGljIHZvaWQgQ0FMTEJBQ0sgaGFuZGxlQ2FsbGJhY2sodm9pZCogY29udGV4dCwgQk9PTEVBTiB0
aW1lck9yV2FpdEZpcmVkKTsKKyAgICBzdGF0aWMgdm9pZCBDQUxMQkFDSyB0aW1lckNhbGxiYWNr
KHZvaWQqIGNvbnRleHQsIEJPT0xFQU4gdGltZXJPcldhaXRGaXJlZCk7CisgICAgc3RhdGljIERX
T1JEIFdJTkFQSSB3b3JrVGhyZWFkQ2FsbGJhY2sodm9pZCogY29udGV4dCk7CisKKyAgICBib29s
IHRyeVJlZ2lzdGVyQXNXb3JrVGhyZWFkKCk7CisgICAgdm9pZCB1bnJlZ2lzdGVyQXNXb3JrVGhy
ZWFkKCk7CisgICAgdm9pZCBwZXJmb3JtV29ya09uUmVnaXN0ZXJlZFdvcmtUaHJlYWQoKTsKKwor
ICAgIHN0YXRpYyB2b2lkIHVucmVnaXN0ZXJXYWl0QW5kRGVzdHJveUl0ZW1Tb29uKFBhc3NSZWZQ
dHI8SGFuZGxlV29ya0l0ZW0+KTsKKyAgICBzdGF0aWMgRFdPUkQgV0lOQVBJIHVucmVnaXN0ZXJX
YWl0QW5kRGVzdHJveUl0ZW1DYWxsYmFjayh2b2lkKiBjb250ZXh0KTsKKworICAgIHZvbGF0aWxl
IExPTkcgbV9pc1dvcmtUaHJlYWRSZWdpc3RlcmVkOworCisgICAgTXV0ZXggbV93b3JrSXRlbVF1
ZXVlTG9jazsKKyAgICBWZWN0b3I8UmVmUHRyPFdvcmtJdGVtV2luPiA+IG1fd29ya0l0ZW1RdWV1
ZTsKKworICAgIE11dGV4IG1faGFuZGxlc0xvY2s7CisgICAgSGFzaE1hcDxIQU5ETEUsIFJlZlB0
cjxIYW5kbGVXb3JrSXRlbT4gPiBtX2hhbmRsZXM7CisKKyAgICBIQU5ETEUgbV90aW1lclF1ZXVl
OworI2VsaWYgUExBVEZPUk0oUVQpCisgICAgY2xhc3MgV29ya0l0ZW1RdDsKKyAgICBRVGhyZWFk
KiBtX3dvcmtUaHJlYWQ7CisgICAgZnJpZW5kIGNsYXNzIFdvcmtJdGVtUXQ7CisjZWxpZiBQTEFU
Rk9STShHVEspCisgICAgc3RhdGljIHZvaWQgc3RhcnRXb3JrUXVldWVUaHJlYWQoV29ya1F1ZXVl
Kik7CisgICAgdm9pZCB3b3JrUXVldWVUaHJlYWRCb2R5KCk7CisgICAgdm9pZCBkaXNwYXRjaE9u
U291cmNlKEdTb3VyY2UqLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiwgR1NvdXJjZUZ1bmMpOwor
CisgICAgVGhyZWFkSWRlbnRpZmllciBtX3dvcmtRdWV1ZVRocmVhZDsKKyAgICBHUmVmUHRyPEdN
YWluQ29udGV4dD4gbV9ldmVudENvbnRleHQ7CisgICAgTXV0ZXggbV9ldmVudExvb3BMb2NrOwor
ICAgIEdSZWZQdHI8R01haW5Mb29wPiBtX2V2ZW50TG9vcDsKKyAgICBNdXRleCBtX2V2ZW50U291
cmNlc0xvY2s7CisgICAgY2xhc3MgRXZlbnRTb3VyY2U7CisgICAgSGFzaE1hcDxpbnQsIFZlY3Rv
cjxFdmVudFNvdXJjZSo+ID4gbV9ldmVudFNvdXJjZXM7CisgICAgdHlwZWRlZiBIYXNoTWFwPGlu
dCwgVmVjdG9yPEV2ZW50U291cmNlKj4gPjo6aXRlcmF0b3IgRXZlbnRTb3VyY2VJdGVyYXRvcjsg
CisjZWxpZiBQTEFURk9STShFRkwpCisgICAgZmRfc2V0IG1fZmlsZURlc2NyaXB0b3JTZXQ7Cisg
ICAgaW50IG1fbWF4RmlsZURlc2NyaXB0b3I7CisgICAgaW50IG1fcmVhZEZyb21QaXBlRGVzY3Jp
cHRvcjsKKyAgICBpbnQgbV93cml0ZVRvUGlwZURlc2NyaXB0b3I7CisgICAgYm9vbCBtX3RocmVh
ZExvb3A7CisKKyAgICBWZWN0b3I8RnVuY3Rpb248dm9pZCgpPiA+IG1fd29ya0l0ZW1RdWV1ZTsK
KyAgICBNdXRleCBtX3dvcmtJdGVtUXVldWVMb2NrOworCisgICAgaW50IG1fc29ja2V0RGVzY3Jp
cHRvcjsKKyAgICBGdW5jdGlvbjx2b2lkKCk+IG1fc29ja2V0RXZlbnRIYW5kbGVyOworCisgICAg
SGFzaE1hcDxpbnQsIE93blB0cjxFY29yZV9UaW1lcj4gPiBtX3RpbWVyczsKKworICAgIHZvaWQg
c2VuZE1lc3NhZ2VUb1RocmVhZChjb25zdCBjaGFyKik7CisgICAgc3RhdGljIHZvaWQqIHdvcmtR
dWV1ZVRocmVhZChXb3JrUXVldWUqKTsKKyAgICB2b2lkIHBlcmZvcm1Xb3JrKCk7CisgICAgdm9p
ZCBwZXJmb3JtRmlsZURlc2NyaXB0b3JXb3JrKCk7CisgICAgc3RhdGljIGJvb2wgdGltZXJGaXJl
ZCh2b2lkKik7CisjZW5kaWYKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6
OldvcmtRdWV1ZTsKKworI2VuZGlmIC8vIFdvcmtRdWV1ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi9lZmwvV29ya1F1ZXVlRWZsLmNwcCBiL1NvdXJjZS9XVEYvd3RmL2VmbC9Xb3JrUXVl
dWVFZmwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNhMzliYTllZDliMTI3MGZlN2RmOWU2Y2U2ODVkYjQ3M2E1
ZjU4YTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9lZmwvV29ya1F1ZXVlRWZs
LmNwcApAQCAtMCwwICsxLDE3MyBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3Vu
ZyBFbGVjdHJvbmljcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
CisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV29ya1F1
ZXVlLmgiCisKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCitjbGFzcyBUaW1lcldvcmtJ
dGVtIHsKK3B1YmxpYzoKKyAgICBUaW1lcldvcmtJdGVtKGludCB0aW1lcklELCBjb25zdCBGdW5j
dGlvbjx2b2lkKCk+JiBmdW5jdGlvbiwgV29ya1F1ZXVlKiBxdWV1ZSkKKyAgICAgICAgOiBtX2Z1
bmN0aW9uKGZ1bmN0aW9uKQorICAgICAgICAsIG1fcXVldWUocXVldWUpCisgICAgICAgICwgbV90
aW1lcklEKHRpbWVySUQpCisgICAgeworICAgIH0KKyAgICB+VGltZXJXb3JrSXRlbSgpIHsgfQor
CisgICAgRnVuY3Rpb248dm9pZCgpPiBmdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZnVuY3Rp
b247IH0KKyAgICBXb3JrUXVldWUqIHF1ZXVlKCkgY29uc3QgeyByZXR1cm4gbV9xdWV1ZTsgfQor
CisgICAgaW50IHRpbWVySUQoKSBjb25zdCB7IHJldHVybiBtX3RpbWVySUQ7IH0KKworcHJpdmF0
ZToKKyAgICBGdW5jdGlvbjx2b2lkKCk+IG1fZnVuY3Rpb247CisgICAgV29ya1F1ZXVlKiBtX3F1
ZXVlOworICAgIGludCBtX3RpbWVySUQ7Cit9OworCitzdGF0aWMgY29uc3QgaW50IGludmFsaWRT
b2NrZXREZXNjcmlwdG9yID0gLTE7CitzdGF0aWMgY29uc3QgaW50IHRocmVhZE1lc3NhZ2VTaXpl
ID0gMTsKK3N0YXRpYyBjb25zdCBjaGFyIGZpbmlzaFRocmVhZE1lc3NhZ2VbXSA9ICJGIjsKK3N0
YXRpYyBjb25zdCBjaGFyIHdha3VwVGhyZWFkTWVzc2FnZVtdID0gIlciOworCit2b2lkIFdvcmtR
dWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXplKGNvbnN0IGNoYXIqIG5hbWUpCit7CisgICAgaW50IGZk
c1syXTsKKyAgICBpZiAocGlwZShmZHMpKQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KworICAgIG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvciA9IGZkc1swXTsKKyAgICBtX3dyaXRlVG9Q
aXBlRGVzY3JpcHRvciA9IGZkc1sxXTsKKyAgICBGRF9aRVJPKCZtX2ZpbGVEZXNjcmlwdG9yU2V0
KTsKKyAgICBGRF9TRVQobV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yLCAmbV9maWxlRGVzY3JpcHRv
clNldCk7CisgICAgbV9tYXhGaWxlRGVzY3JpcHRvciA9IG1fcmVhZEZyb21QaXBlRGVzY3JpcHRv
cjsKKworICAgIG1fc29ja2V0RGVzY3JpcHRvciA9IGludmFsaWRTb2NrZXREZXNjcmlwdG9yOwor
CisgICAgbV90aHJlYWRMb29wID0gdHJ1ZTsKKyAgICBjcmVhdGVUaHJlYWQocmVpbnRlcnByZXRf
Y2FzdDxXVEY6OlRocmVhZEZ1bmN0aW9uPigmV29ya1F1ZXVlOjp3b3JrUXVldWVUaHJlYWQpLCB0
aGlzLCBuYW1lKTsKK30KKwordm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCit7
CisgICAgc2VuZE1lc3NhZ2VUb1RocmVhZChmaW5pc2hUaHJlYWRNZXNzYWdlKTsKK30KKwordm9p
ZCBXb3JrUXVldWU6OnBlcmZvcm1Xb3JrKCkKK3sKKyAgICBtX3dvcmtJdGVtUXVldWVMb2NrLmxv
Y2soKTsKKworICAgIHdoaWxlICghbV93b3JrSXRlbVF1ZXVlLmlzRW1wdHkoKSkgeworICAgICAg
ICBWZWN0b3I8RnVuY3Rpb248dm9pZCgpPiA+IHdvcmtJdGVtUXVldWU7CisgICAgICAgIG1fd29y
a0l0ZW1RdWV1ZS5zd2FwKHdvcmtJdGVtUXVldWUpOworCisgICAgICAgIG1fd29ya0l0ZW1RdWV1
ZUxvY2sudW5sb2NrKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd29ya0l0ZW1R
dWV1ZS5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIHdvcmtJdGVtUXVldWVbaV0oKTsKKyAgICAg
ICAgbV93b3JrSXRlbVF1ZXVlTG9jay5sb2NrKCk7CisgICAgfQorICAgIG1fd29ya0l0ZW1RdWV1
ZUxvY2sudW5sb2NrKCk7Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjpwZXJmb3JtRmlsZURlc2NyaXB0
b3JXb3JrKCkKK3sKKyAgICBmZF9zZXQgcmVhZEZpbGVEZXNjcmlwdG9yU2V0ID0gbV9maWxlRGVz
Y3JpcHRvclNldDsKKworICAgIGlmIChzZWxlY3QobV9tYXhGaWxlRGVzY3JpcHRvciArIDEsICZy
ZWFkRmlsZURlc2NyaXB0b3JTZXQsIDAsIDAsIDApID49IDApIHsKKyAgICAgICAgaWYgKEZEX0lT
U0VUKG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvciwgJnJlYWRGaWxlRGVzY3JpcHRvclNldCkpIHsK
KyAgICAgICAgICAgIGNoYXIgcmVhZEJ1Zlt0aHJlYWRNZXNzYWdlU2l6ZV07CisgICAgICAgICAg
ICBpZiAocmVhZChtX3JlYWRGcm9tUGlwZURlc2NyaXB0b3IsIHJlYWRCdWYsIHRocmVhZE1lc3Nh
Z2VTaXplKSA9PSAtMSkKKyAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byByZWFk
IGZyb20gV29ya1F1ZXVlVGhyZWFkIHBpcGUiKTsKKyAgICAgICAgICAgIGlmICghc3RybmNtcChy
ZWFkQnVmLCBmaW5pc2hUaHJlYWRNZXNzYWdlLCB0aHJlYWRNZXNzYWdlU2l6ZSkpCisgICAgICAg
ICAgICAgICAgbV90aHJlYWRMb29wID0gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
bV9zb2NrZXREZXNjcmlwdG9yICE9IGludmFsaWRTb2NrZXREZXNjcmlwdG9yICYmIEZEX0lTU0VU
KG1fc29ja2V0RGVzY3JpcHRvciwgJnJlYWRGaWxlRGVzY3JpcHRvclNldCkpCisgICAgICAgICAg
ICBtX3NvY2tldEV2ZW50SGFuZGxlcigpOworICAgIH0KK30KKwordm9pZCBXb3JrUXVldWU6OnNl
bmRNZXNzYWdlVG9UaHJlYWQoY29uc3QgY2hhciogbWVzc2FnZSkKK3sKKyAgICBpZiAod3JpdGUo
bV93cml0ZVRvUGlwZURlc2NyaXB0b3IsIG1lc3NhZ2UsIHRocmVhZE1lc3NhZ2VTaXplKSA9PSAt
MSkKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gd2FrZSB1cCBXb3JrUXVldWUgVGhyZWFk
Iik7Cit9CisKK3ZvaWQqIFdvcmtRdWV1ZTo6d29ya1F1ZXVlVGhyZWFkKFdvcmtRdWV1ZSogd29y
a1F1ZXVlKQoreworICAgIHdoaWxlICh3b3JrUXVldWUtPm1fdGhyZWFkTG9vcCkgeworICAgICAg
ICB3b3JrUXVldWUtPnBlcmZvcm1Xb3JrKCk7CisgICAgICAgIHdvcmtRdWV1ZS0+cGVyZm9ybUZp
bGVEZXNjcmlwdG9yV29yaygpOworICAgIH0KKworICAgIGNsb3NlKHdvcmtRdWV1ZS0+bV9yZWFk
RnJvbVBpcGVEZXNjcmlwdG9yKTsKKyAgICBjbG9zZSh3b3JrUXVldWUtPm1fd3JpdGVUb1BpcGVE
ZXNjcmlwdG9yKTsKKworICAgIHJldHVybiAwOworfQorCit2b2lkIFdvcmtRdWV1ZTo6cmVnaXN0
ZXJTb2NrZXRFdmVudEhhbmRsZXIoaW50IGZpbGVEZXNjcmlwdG9yLCBjb25zdCBGdW5jdGlvbjx2
b2lkKCk+JiBmdW5jdGlvbikKK3sKKyAgICBpZiAobV9zb2NrZXREZXNjcmlwdG9yICE9IGludmFs
aWRTb2NrZXREZXNjcmlwdG9yKQorICAgICAgICBMT0dfRVJST1IoIiVkIGlzIGFscmVhZHkgcmVn
aXN0ZXJkLiIsIGZpbGVEZXNjcmlwdG9yKTsKKworICAgIG1fc29ja2V0RGVzY3JpcHRvciA9IGZp
bGVEZXNjcmlwdG9yOworICAgIG1fc29ja2V0RXZlbnRIYW5kbGVyID0gZnVuY3Rpb247CisKKyAg
ICBpZiAoZmlsZURlc2NyaXB0b3IgPiBtX21heEZpbGVEZXNjcmlwdG9yKQorICAgICAgICBtX21h
eEZpbGVEZXNjcmlwdG9yID0gZmlsZURlc2NyaXB0b3I7CisgICAgRkRfU0VUKGZpbGVEZXNjcmlw
dG9yLCAmbV9maWxlRGVzY3JpcHRvclNldCk7Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjp1bnJlZ2lz
dGVyU29ja2V0RXZlbnRIYW5kbGVyKGludCBmaWxlRGVzY3JpcHRvcikKK3sKKyAgICBtX3NvY2tl
dERlc2NyaXB0b3IgPSBpbnZhbGlkU29ja2V0RGVzY3JpcHRvcjsKKworICAgIGlmIChmaWxlRGVz
Y3JpcHRvciA9PSBtX21heEZpbGVEZXNjcmlwdG9yKQorICAgICAgICBtX21heEZpbGVEZXNjcmlw
dG9yID0gbV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yOworICAgIEZEX0NMUihmaWxlRGVzY3JpcHRv
ciwgJm1fZmlsZURlc2NyaXB0b3JTZXQpOworfQorCit2b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2go
Y29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCit7CisgICAgTXV0ZXhMb2NrZXIgbG9j
a2VyKG1fd29ya0l0ZW1RdWV1ZUxvY2spOworICAgIG1fd29ya0l0ZW1RdWV1ZS5hcHBlbmQoZnVu
Y3Rpb24pOworICAgIHNlbmRNZXNzYWdlVG9UaHJlYWQod2FrdXBUaHJlYWRNZXNzYWdlKTsKK30K
KworYm9vbCBXb3JrUXVldWU6OnRpbWVyRmlyZWQodm9pZCogZGF0YSkKK3sKKyAgICBUaW1lcldv
cmtJdGVtKiBpdGVtID0gc3RhdGljX2Nhc3Q8VGltZXJXb3JrSXRlbSo+KGRhdGEpOworICAgIGlm
IChpdGVtICYmIGl0ZW0tPnF1ZXVlKCktPm1faXNWYWxpZCkgeworICAgICAgICBpdGVtLT5xdWV1
ZSgpLT5kaXNwYXRjaChpdGVtLT5mdW5jdGlvbigpKTsKKyAgICAgICAgaXRlbS0+cXVldWUoKS0+
bV90aW1lcnMudGFrZShpdGVtLT50aW1lcklEKCkpOworICAgICAgICBkZWxldGUgaXRlbTsKKyAg
ICB9CisKKyAgICByZXR1cm4gRUNPUkVfQ0FMTEJBQ0tfQ0FOQ0VMOworfQorCit2b2lkIFdvcmtR
dWV1ZTo6ZGlzcGF0Y2hBZnRlckRlbGF5KGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9u
LCBkb3VibGUgZGVsYXkpCit7CisgICAgc3RhdGljIGludCB0aW1lcklkID0gMDsKKyAgICBtX3Rp
bWVycy5zZXQodGltZXJJZCwgYWRvcHRQdHIoZWNvcmVfdGltZXJfYWRkKGRlbGF5LCByZWludGVy
cHJldF9jYXN0PEVjb3JlX1Rhc2tfQ2I+KHRpbWVyRmlyZWQpLCBuZXcgVGltZXJXb3JrSXRlbSh0
aW1lcklkLCBmdW5jdGlvbiwgdGhpcykpKSk7CisgICAgdGltZXJJZCsrOworfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvZ3RrL1dvcmtRdWV1ZUd0ay5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9n
dGsvV29ya1F1ZXVlR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iOTFmNjM1MWQ3M2IwMjEwZWVhYzY2OTY3
MzU4ODdlZjhlYTZhNmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvZ3RrL1dv
cmtRdWV1ZUd0ay5jcHAKQEAgLTAsMCArMSwyMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9i
aWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJXb3JrUXVldWUuaCIKKworI2luY2x1ZGUgPGdpby9naW8uaD4K
KyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorCisv
LyBXb3JrUXVldWU6OkV2ZW50U291cmNlCitjbGFzcyBXb3JrUXVldWU6OkV2ZW50U291cmNlIHsK
K3B1YmxpYzoKKyAgICBFdmVudFNvdXJjZShjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlv
biwgV29ya1F1ZXVlKiB3b3JrUXVldWUsIEdDYW5jZWxsYWJsZSogY2FuY2VsbGFibGUpCisgICAg
ICAgIDogbV9mdW5jdGlvbihmdW5jdGlvbikKKyAgICAgICAgLCBtX3dvcmtRdWV1ZSh3b3JrUXVl
dWUpCisgICAgICAgICwgbV9jYW5jZWxsYWJsZShjYW5jZWxsYWJsZSkKKyAgICB7CisgICAgfQor
CisgICAgdm9pZCBjYW5jZWwoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2NhbmNlbGxhYmxlKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBnX2NhbmNlbGxhYmxlX2NhbmNlbChtX2NhbmNl
bGxhYmxlKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBleGVjdXRlRXZlbnRTb3VyY2UoRXZl
bnRTb3VyY2UqIGV2ZW50U291cmNlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGV2ZW50U291cmNl
KTsKKyAgICAgICAgV29ya1F1ZXVlKiBxdWV1ZSA9IGV2ZW50U291cmNlLT5tX3dvcmtRdWV1ZTsK
KyAgICAgICAgeworICAgICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHF1ZXVlLT5tX2lzVmFs
aWRNdXRleCk7CisgICAgICAgICAgICBpZiAoIXF1ZXVlLT5tX2lzVmFsaWQpCisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZXZlbnRTb3VyY2UtPm1fZnVuY3Rp
b24oKTsKKyAgICB9CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gcGVyZm9ybVdvcmtPbmNlKEV2ZW50
U291cmNlKiBldmVudFNvdXJjZSkKKyAgICB7CisgICAgICAgIGV4ZWN1dGVFdmVudFNvdXJjZShl
dmVudFNvdXJjZSk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICBzdGF0aWMg
Z2Jvb2xlYW4gcGVyZm9ybVdvcmsoR1NvY2tldCogc29ja2V0LCBHSU9Db25kaXRpb24gY29uZGl0
aW9uLCBFdmVudFNvdXJjZSogZXZlbnRTb3VyY2UpCisgICAgeworICAgICAgICBpZiAoIShjb25k
aXRpb24gJiBHX0lPX0lOKSAmJiAhKGNvbmRpdGlvbiAmIEdfSU9fSFVQKSAmJiAhKGNvbmRpdGlv
biAmIEdfSU9fRVJSKSkgeworICAgICAgICAgICAgLy8gRXZlbnRTb3VyY2UgaGFzIGJlZW4gY2Fu
Y2VsbGVkLCByZXR1cm4gRkFMU0UgdG8gZGVzdHJveSB0aGUgc291cmNlLgorICAgICAgICAgICAg
cmV0dXJuIEZBTFNFOworICAgICAgICB9CisKKyAgICAgICAgZXhlY3V0ZUV2ZW50U291cmNlKGV2
ZW50U291cmNlKTsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCisgICAgc3RhdGljIGdi
b29sZWFuIHBlcmZvcm1Xb3JrT25UZXJtaW5hdGlvbihHUGlkLCBnaW50LCBFdmVudFNvdXJjZSog
ZXZlbnRTb3VyY2UpCisgICAgeworICAgICAgICBleGVjdXRlRXZlbnRTb3VyY2UoZXZlbnRTb3Vy
Y2UpOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgZGVs
ZXRlRXZlbnRTb3VyY2UoRXZlbnRTb3VyY2UqIGV2ZW50U291cmNlKSAKKyAgICB7CisgICAgICAg
IEFTU0VSVChldmVudFNvdXJjZSk7CisgICAgICAgIGRlbGV0ZSBldmVudFNvdXJjZTsKKyAgICB9
CisgICAKK3B1YmxpYzoKKyAgICBGdW5jdGlvbjx2b2lkKCk+IG1fZnVuY3Rpb247CisgICAgV29y
a1F1ZXVlKiBtX3dvcmtRdWV1ZTsKKyAgICBHQ2FuY2VsbGFibGUqIG1fY2FuY2VsbGFibGU7Cit9
OworCisvLyBXb3JrUXVldWUKK3N0YXRpYyBjb25zdCBzaXplX3Qga1Zpc3VhbFN0dWRpb1RocmVh
ZE5hbWVMaW1pdCA9IDMxOworCit2b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXplKGNv
bnN0IGNoYXIqIG5hbWUpCit7CisgICAgbV9ldmVudENvbnRleHQgPSBhZG9wdEdSZWYoZ19tYWlu
X2NvbnRleHRfbmV3KCkpOworICAgIEFTU0VSVChtX2V2ZW50Q29udGV4dCk7CisgICAgbV9ldmVu
dExvb3AgPSBhZG9wdEdSZWYoZ19tYWluX2xvb3BfbmV3KG1fZXZlbnRDb250ZXh0LmdldCgpLCBG
QUxTRSkpOworICAgIEFTU0VSVChtX2V2ZW50TG9vcCk7CisKKyAgICAvLyBUaGlzIG5hbWUgY2Fu
IGJlIGNvbS5hcHBsZS5XZWJLaXQuUHJvY2Vzc0xhdW5jaGVyIG9yIGNvbS5hcHBsZS5Db3JlSVBD
LlJlY2VpdmVRdWV1ZS4KKyAgICAvLyBXZSBhcmUgdXNpbmcgdGhvc2UgbmFtZXMgZm9yIHRoZSB0
aHJlYWQgbmFtZSwgYnV0IGJvdGggYXJlIGxvbmdlciB0aGFuIDMxIGNoYXJhY3RlcnMsCisgICAg
Ly8gd2hpY2ggaXMgdGhlIGxpbWl0IG9mIFZpc3VhbCBTdHVkaW8gZm9yIHRocmVhZCBuYW1lcy4K
KyAgICAvLyBXaGVuIGxvZyBpcyBlbmFibGVkIGNyZWF0ZVRocmVhZCgpIHdpbGwgYXNzZXJ0IGlu
c3RlYWQgb2YgdHJ1bmNhdGUgdGhlIG5hbWUsIHNvIHdlIG5lZWQKKyAgICAvLyB0byBtYWtlIHN1
cmUgd2UgZG9uJ3QgdXNlIGEgbmFtZSBsb25nZXIgdGhhbiAzMSBjaGFyYWN0ZXJzLgorICAgIGNv
bnN0IGNoYXIqIHRocmVhZE5hbWUgPSBnX3N0cnJzdHIobmFtZSwgIi4iKTsKKyAgICBpZiAodGhy
ZWFkTmFtZSkKKyAgICAgICAgdGhyZWFkTmFtZSsrOworICAgIGVsc2UKKyAgICAgICAgdGhyZWFk
TmFtZSA9IG5hbWU7CisgICAgaWYgKHN0cmxlbih0aHJlYWROYW1lKSA+IGtWaXN1YWxTdHVkaW9U
aHJlYWROYW1lTGltaXQpCisgICAgICAgIHRocmVhZE5hbWUgKz0gc3RybGVuKHRocmVhZE5hbWUp
IC0ga1Zpc3VhbFN0dWRpb1RocmVhZE5hbWVMaW1pdDsKKworICAgIG1fd29ya1F1ZXVlVGhyZWFk
ID0gY3JlYXRlVGhyZWFkKHJlaW50ZXJwcmV0X2Nhc3Q8V1RGOjpUaHJlYWRGdW5jdGlvbj4oJldv
cmtRdWV1ZTo6c3RhcnRXb3JrUXVldWVUaHJlYWQpLCB0aGlzLCB0aHJlYWROYW1lKTsKK30KKwor
dm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCit7CisgICAgTXV0ZXhMb2NrZXIg
bG9ja2VyKG1fZXZlbnRMb29wTG9jayk7CisKKyAgICBpZiAobV9ldmVudExvb3ApIHsKKyAgICAg
ICAgaWYgKGdfbWFpbl9sb29wX2lzX3J1bm5pbmcobV9ldmVudExvb3AuZ2V0KCkpKQorICAgICAg
ICAgICAgZ19tYWluX2xvb3BfcXVpdChtX2V2ZW50TG9vcC5nZXQoKSk7CisgICAgICAgIG1fZXZl
bnRMb29wLmNsZWFyKCk7CisgICAgfQorCisgICAgbV9ldmVudENvbnRleHQuY2xlYXIoKTsKK30K
Kwordm9pZCBXb3JrUXVldWU6OnN0YXJ0V29ya1F1ZXVlVGhyZWFkKFdvcmtRdWV1ZSogd29ya1F1
ZXVlKQoreworICAgIHdvcmtRdWV1ZS0+d29ya1F1ZXVlVGhyZWFkQm9keSgpOworfQorCit2b2lk
IFdvcmtRdWV1ZTo6d29ya1F1ZXVlVGhyZWFkQm9keSgpCit7CisgICAgZ19tYWluX2xvb3BfcnVu
KG1fZXZlbnRMb29wLmdldCgpKTsKK30KKwordm9pZCBXb3JrUXVldWU6OnJlZ2lzdGVyRXZlbnRT
b3VyY2VIYW5kbGVyKGludCBmaWxlRGVzY3JpcHRvciwgaW50IGNvbmRpdGlvbiwgY29uc3QgRnVu
Y3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCit7CisgICAgR1JlZlB0cjxHU29ja2V0PiBzb2NrZXQg
PSBhZG9wdEdSZWYoZ19zb2NrZXRfbmV3X2Zyb21fZmQoZmlsZURlc2NyaXB0b3IsIDApKTsKKyAg
ICBBU1NFUlQoc29ja2V0KTsKKyAgICBHUmVmUHRyPEdDYW5jZWxsYWJsZT4gY2FuY2VsbGFibGUg
PSBhZG9wdEdSZWYoZ19jYW5jZWxsYWJsZV9uZXcoKSk7CisgICAgR1JlZlB0cjxHU291cmNlPiBk
aXNwYXRjaFNvdXJjZSA9IGFkb3B0R1JlZihnX3NvY2tldF9jcmVhdGVfc291cmNlKHNvY2tldC5n
ZXQoKSwgc3RhdGljX2Nhc3Q8R0lPQ29uZGl0aW9uPihjb25kaXRpb24pLCBjYW5jZWxsYWJsZS5n
ZXQoKSkpOworICAgIEFTU0VSVChkaXNwYXRjaFNvdXJjZSk7CisgICAgRXZlbnRTb3VyY2UqIGV2
ZW50U291cmNlID0gbmV3IEV2ZW50U291cmNlKGZ1bmN0aW9uLCB0aGlzLCBjYW5jZWxsYWJsZS5n
ZXQoKSk7CisgICAgQVNTRVJUKGV2ZW50U291cmNlKTsKKworICAgIGdfc291cmNlX3NldF9jYWxs
YmFjayhkaXNwYXRjaFNvdXJjZS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4o
JldvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OnBlcmZvcm1Xb3JrKSwKKyAgICAgICAgZXZlbnRTb3Vy
Y2UsIHJlaW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KCZXb3JrUXVldWU6OkV2ZW50U291
cmNlOjpkZWxldGVFdmVudFNvdXJjZSkpOworCisgICAgLy8gU2V0IHVwIHRoZSBldmVudCBzb3Vy
Y2VzIHVuZGVyIHRoZSBtdXRleCBzaW5jZSB0aGlzIGlzIHNoYXJlZCBhY3Jvc3MgbXVsdGlwbGUg
dGhyZWFkcy4KKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2V2ZW50U291cmNl
c0xvY2spOworICAgICAgICBWZWN0b3I8RXZlbnRTb3VyY2UqPiBzb3VyY2VzOworICAgICAgICBF
dmVudFNvdXJjZUl0ZXJhdG9yIGl0ID0gbV9ldmVudFNvdXJjZXMuZmluZChmaWxlRGVzY3JpcHRv
cik7CisgICAgICAgIGlmIChpdCAhPSBtX2V2ZW50U291cmNlcy5lbmQoKSkgCisgICAgICAgICAg
ICBzb3VyY2VzID0gaXQtPnNlY29uZDsKKworICAgICAgICBzb3VyY2VzLmFwcGVuZChldmVudFNv
dXJjZSk7CisgICAgICAgIG1fZXZlbnRTb3VyY2VzLnNldChmaWxlRGVzY3JpcHRvciwgc291cmNl
cyk7CisgICAgfQorCisgICAgZ19zb3VyY2VfYXR0YWNoKGRpc3BhdGNoU291cmNlLmdldCgpLCBt
X2V2ZW50Q29udGV4dC5nZXQoKSk7Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjp1bnJlZ2lzdGVyRXZl
bnRTb3VyY2VIYW5kbGVyKGludCBmaWxlRGVzY3JpcHRvcikKK3sKKyAgICBBU1NFUlQoZmlsZURl
c2NyaXB0b3IpOworICAgIAorICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2V2ZW50U291cmNlc0xv
Y2spOworICAgIAorICAgIEV2ZW50U291cmNlSXRlcmF0b3IgaXQgPSBtX2V2ZW50U291cmNlcy5m
aW5kKGZpbGVEZXNjcmlwdG9yKTsKKyAgICBBU1NFUlQoaXQgIT0gbV9ldmVudFNvdXJjZXMuZW5k
KCkpOworICAgIEFTU0VSVChtX2V2ZW50U291cmNlcy5jb250YWlucyhmaWxlRGVzY3JpcHRvcikp
OworCisgICAgaWYgKGl0ICE9IG1fZXZlbnRTb3VyY2VzLmVuZCgpKSB7CisgICAgICAgIFZlY3Rv
cjxFdmVudFNvdXJjZSo+IHNvdXJjZXMgPSBpdC0+c2Vjb25kOworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc291cmNlcy5zaXplKCk7IGkrKykKKyAgICAgICAgICAgIHNvdXJjZXNb
aV0tPmNhbmNlbCgpOworCisgICAgICAgIG1fZXZlbnRTb3VyY2VzLnJlbW92ZShpdCk7CisgICAg
fQorfQorCit2b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2hPblNvdXJjZShHU291cmNlKiBkaXNwYXRj
aFNvdXJjZSwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24sIEdTb3VyY2VGdW5jIHNv
dXJjZUNhbGxiYWNrKQoreworICAgIEV2ZW50U291cmNlKiBldmVudFNvdXJjZSA9IG5ldyBFdmVu
dFNvdXJjZShmdW5jdGlvbiwgdGhpcywgMCk7CisKKyAgICBnX3NvdXJjZV9zZXRfY2FsbGJhY2so
ZGlzcGF0Y2hTb3VyY2UsIHNvdXJjZUNhbGxiYWNrLCBldmVudFNvdXJjZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxHRGVzdHJveU5vdGlmeT4oJldvcmtRdWV1
ZTo6RXZlbnRTb3VyY2U6OmRlbGV0ZUV2ZW50U291cmNlKSk7CisKKyAgICBnX3NvdXJjZV9hdHRh
Y2goZGlzcGF0Y2hTb3VyY2UsIG1fZXZlbnRDb250ZXh0LmdldCgpKTsKK30KKwordm9pZCBXb3Jr
UXVldWU6OmRpc3BhdGNoKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQoreworICAg
IEdSZWZQdHI8R1NvdXJjZT4gZGlzcGF0Y2hTb3VyY2UgPSBhZG9wdEdSZWYoZ19pZGxlX3NvdXJj
ZV9uZXcoKSk7CisgICAgQVNTRVJUKGRpc3BhdGNoU291cmNlKTsKKyAgICBnX3NvdXJjZV9zZXRf
cHJpb3JpdHkoZGlzcGF0Y2hTb3VyY2UuZ2V0KCksIEdfUFJJT1JJVFlfREVGQVVMVCk7CisKKyAg
ICBkaXNwYXRjaE9uU291cmNlKGRpc3BhdGNoU291cmNlLmdldCgpLCBmdW5jdGlvbiwgcmVpbnRl
cnByZXRfY2FzdDxHU291cmNlRnVuYz4oJldvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OnBlcmZvcm1X
b3JrT25jZSkpOworfQorCit2b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2hBZnRlckRlbGF5KGNvbnN0
IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uLCBkb3VibGUgZGVsYXkpCit7CisgICAgR1JlZlB0
cjxHU291cmNlPiBkaXNwYXRjaFNvdXJjZSA9IGFkb3B0R1JlZihnX3RpbWVvdXRfc291cmNlX25l
dyhzdGF0aWNfY2FzdDxndWludD4oZGVsYXkgKiAxMDAwKSkpOworICAgIEFTU0VSVChkaXNwYXRj
aFNvdXJjZSk7CisKKyAgICBkaXNwYXRjaE9uU291cmNlKGRpc3BhdGNoU291cmNlLmdldCgpLCBm
dW5jdGlvbiwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oJldvcmtRdWV1ZTo6RXZlbnRT
b3VyY2U6OnBlcmZvcm1Xb3JrT25jZSkpOworfQorCit2b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2hP
blRlcm1pbmF0aW9uKFBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIgcHJvY2VzcywgY29uc3QgRnVu
Y3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCit7CisgICAgR1JlZlB0cjxHU291cmNlPiBkaXNwYXRj
aFNvdXJjZSA9IGFkb3B0R1JlZihnX2NoaWxkX3dhdGNoX3NvdXJjZV9uZXcocHJvY2VzcykpOwor
ICAgIEFTU0VSVChkaXNwYXRjaFNvdXJjZSk7CisKKyAgICBkaXNwYXRjaE9uU291cmNlKGRpc3Bh
dGNoU291cmNlLmdldCgpLCBmdW5jdGlvbiwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4o
JldvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OnBlcmZvcm1Xb3JrT25UZXJtaW5hdGlvbikpOworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvbWFjL1dvcmtRdWV1ZU1hYy5jcHAgYi9Tb3VyY2Uv
V1RGL3d0Zi9tYWMvV29ya1F1ZXVlTWFjLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZTQ3M2VlNWNjODRlNTg0
MjliMDQzOWNjZDkyMWFjMmM0OTJmZmFhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93
dGYvbWFjL1dvcmtRdWV1ZU1hYy5jcHAKQEAgLTAsMCArMSwxNzggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV29ya1F1ZXVlLmgiCisKKyNpbmNsdWRlIDxt
YWNoL21hY2hfaW5pdC5oPgorI2luY2x1ZGUgPG1hY2gvbWFjaF9wb3J0Lmg+CisjaW5jbHVkZSA8
d3RmL1Bhc3NPd25QdHIuaD4KKwordm9pZCBXb3JrUXVldWU6OmV4ZWN1dGVGdW5jdGlvbih2b2lk
KiBjb250ZXh0KQoreworICAgIFdvcmtRdWV1ZSogcXVldWUgPSBzdGF0aWNfY2FzdDxXb3JrUXVl
dWUqPihkaXNwYXRjaF9nZXRfY29udGV4dChkaXNwYXRjaF9nZXRfY3VycmVudF9xdWV1ZSgpKSk7
CisgICAgT3duUHRyPEZ1bmN0aW9uPHZvaWQoKT4gPiBmdW5jdGlvbiA9IGFkb3B0UHRyKHN0YXRp
Y19jYXN0PEZ1bmN0aW9uPHZvaWQoKT4qPihjb250ZXh0KSk7CisgICAgCisgICAgeworICAgICAg
ICBNdXRleExvY2tlciBsb2NrZXIocXVldWUtPm1faXNWYWxpZE11dGV4KTsKKyAgICAgICAgaWYg
KCFxdWV1ZS0+bV9pc1ZhbGlkKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgICgq
ZnVuY3Rpb24pKCk7Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjpkaXNwYXRjaChjb25zdCBGdW5jdGlv
bjx2b2lkKCk+JiBmdW5jdGlvbikKK3sKKyAgICBkaXNwYXRjaF9hc3luY19mKG1fZGlzcGF0Y2hR
dWV1ZSwgbmV3IEZ1bmN0aW9uPHZvaWQoKT4oZnVuY3Rpb24pLCBleGVjdXRlRnVuY3Rpb24pOwor
fQorCit2b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2hBZnRlckRlbGF5KGNvbnN0IEZ1bmN0aW9uPHZv
aWQoKT4mIGZ1bmN0aW9uLCBkb3VibGUgZGVsYXkpCit7CisgICAgZGlzcGF0Y2hfdGltZV90IGRl
bGF5VGltZSA9IGRpc3BhdGNoX3RpbWUoRElTUEFUQ0hfVElNRV9OT1csIGRlbGF5ICogTlNFQ19Q
RVJfU0VDKTsKKworICAgIGRpc3BhdGNoX2FmdGVyX2YoZGVsYXlUaW1lLCBtX2Rpc3BhdGNoUXVl
dWUsIG5ldyBGdW5jdGlvbjx2b2lkKCk+KGZ1bmN0aW9uKSwgZXhlY3V0ZUZ1bmN0aW9uKTsKK30K
KworY2xhc3MgV29ya1F1ZXVlOjpFdmVudFNvdXJjZSB7CitwdWJsaWM6CisgICAgRXZlbnRTb3Vy
Y2UoTWFjaFBvcnRFdmVudFR5cGUgZXZlbnRUeXBlLCBkaXNwYXRjaF9zb3VyY2VfdCBkaXNwYXRj
aFNvdXJjZSwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCisgICAgICAgIDogbV9l
dmVudFR5cGUoZXZlbnRUeXBlKQorICAgICAgICAsIG1fZGlzcGF0Y2hTb3VyY2UoZGlzcGF0Y2hT
b3VyY2UpCisgICAgICAgICwgbV9mdW5jdGlvbihmdW5jdGlvbikKKyAgICB7CisgICAgfQorICAg
IAorICAgIGRpc3BhdGNoX3NvdXJjZV90IGRpc3BhdGNoU291cmNlKCkgY29uc3QgeyByZXR1cm4g
bV9kaXNwYXRjaFNvdXJjZTsgfQorICAgIAorICAgIHN0YXRpYyB2b2lkIGV2ZW50SGFuZGxlcih2
b2lkKiBzb3VyY2UpIAorICAgIHsKKyAgICAgICAgRXZlbnRTb3VyY2UqIGV2ZW50U291cmNlID0g
c3RhdGljX2Nhc3Q8RXZlbnRTb3VyY2UqPihzb3VyY2UpOworICAgICAgICAKKyAgICAgICAgZXZl
bnRTb3VyY2UtPm1fZnVuY3Rpb24oKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgY2Fu
Y2VsSGFuZGxlcih2b2lkKiBzb3VyY2UpCisgICAgeworICAgICAgICBFdmVudFNvdXJjZSogZXZl
bnRTb3VyY2UgPSBzdGF0aWNfY2FzdDxFdmVudFNvdXJjZSo+KHNvdXJjZSk7CisgICAgICAgIAor
ICAgICAgICBtYWNoX3BvcnRfdCBtYWNoUG9ydCA9IGRpc3BhdGNoX3NvdXJjZV9nZXRfaGFuZGxl
KGV2ZW50U291cmNlLT5tX2Rpc3BhdGNoU291cmNlKTsKKyAgICAgICAgCisgICAgICAgIHN3aXRj
aCAoZXZlbnRTb3VyY2UtPm1fZXZlbnRUeXBlKSB7CisgICAgICAgIGNhc2UgTWFjaFBvcnREYXRh
QXZhaWxhYmxlOgorICAgICAgICAgICAgLy8gUmVsZWFzZSBvdXIgcmVjZWl2ZSByaWdodC4KKyAg
ICAgICAgICAgIG1hY2hfcG9ydF9tb2RfcmVmcyhtYWNoX3Rhc2tfc2VsZigpLCBtYWNoUG9ydCwg
TUFDSF9QT1JUX1JJR0hUX1JFQ0VJVkUsIC0xKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIE1hY2hQb3J0RGVhZE5hbWVOb3RpZmljYXRpb246CisgICAgICAgICAgICAvLyBSZWxl
YXNlIG91ciBzZW5kIHJpZ2h0LgorICAgICAgICAgICAgbWFjaF9wb3J0X2RlYWxsb2NhdGUobWFj
aF90YXNrX3NlbGYoKSwgbWFjaFBvcnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgZmluYWxpemVIYW5kbGVyKHZvaWQqIHNvdXJj
ZSkKKyAgICB7CisgICAgICAgIEV2ZW50U291cmNlKiBldmVudFNvdXJjZSA9IHN0YXRpY19jYXN0
PEV2ZW50U291cmNlKj4oc291cmNlKTsKKyAgICAgICAgCisgICAgICAgIGRlbGV0ZSBldmVudFNv
dXJjZTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIE1hY2hQb3J0RXZlbnRUeXBlIG1fZXZl
bnRUeXBlOworICAgIAorICAgIC8vIFRoaXMgaXMgYSB3ZWFrIHJlZmVyZW5jZSwgc2luY2UgbV9k
aXNwYXRjaFNvdXJjZSByZWZlcmVuY2VzIHRoZSBldmVudCBzb3VyY2UuCisgICAgZGlzcGF0Y2hf
c291cmNlX3QgbV9kaXNwYXRjaFNvdXJjZTsKKworICAgIEZ1bmN0aW9uPHZvaWQoKT4gbV9mdW5j
dGlvbjsKK307CisKK3ZvaWQgV29ya1F1ZXVlOjpyZWdpc3Rlck1hY2hQb3J0RXZlbnRIYW5kbGVy
KG1hY2hfcG9ydF90IG1hY2hQb3J0LCBNYWNoUG9ydEV2ZW50VHlwZSBldmVudFR5cGUsIGNvbnN0
IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQoreworICAgIGRpc3BhdGNoX3NvdXJjZV90eXBl
X3Qgc291cmNlVHlwZSA9IDA7CisgICAgc3dpdGNoIChldmVudFR5cGUpIHsKKyAgICBjYXNlIE1h
Y2hQb3J0RGF0YUF2YWlsYWJsZToKKyAgICAgICAgc291cmNlVHlwZSA9IERJU1BBVENIX1NPVVJD
RV9UWVBFX01BQ0hfUkVDVjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNYWNoUG9ydERlYWRO
YW1lTm90aWZpY2F0aW9uOgorICAgICAgICBzb3VyY2VUeXBlID0gRElTUEFUQ0hfU09VUkNFX1RZ
UEVfTUFDSF9TRU5EOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgZGlzcGF0Y2hf
c291cmNlX3QgZGlzcGF0Y2hTb3VyY2UgPSBkaXNwYXRjaF9zb3VyY2VfY3JlYXRlKHNvdXJjZVR5
cGUsIG1hY2hQb3J0LCAwLCBtX2Rpc3BhdGNoUXVldWUpOworICAgIAorICAgIEV2ZW50U291cmNl
KiBldmVudFNvdXJjZSA9IG5ldyBFdmVudFNvdXJjZShldmVudFR5cGUsIGRpc3BhdGNoU291cmNl
LCBmdW5jdGlvbik7CisgICAgZGlzcGF0Y2hfc2V0X2NvbnRleHQoZGlzcGF0Y2hTb3VyY2UsIGV2
ZW50U291cmNlKTsKKyAgICAKKyAgICBkaXNwYXRjaF9zb3VyY2Vfc2V0X2V2ZW50X2hhbmRsZXJf
ZihkaXNwYXRjaFNvdXJjZSwgJkV2ZW50U291cmNlOjpldmVudEhhbmRsZXIpOworICAgIGRpc3Bh
dGNoX3NvdXJjZV9zZXRfY2FuY2VsX2hhbmRsZXJfZihkaXNwYXRjaFNvdXJjZSwgJkV2ZW50U291
cmNlOjpjYW5jZWxIYW5kbGVyKTsKKyAgICBkaXNwYXRjaF9zZXRfZmluYWxpemVyX2YoZGlzcGF0
Y2hTb3VyY2UsICZFdmVudFNvdXJjZTo6ZmluYWxpemVIYW5kbGVyKTsKKyAgICAKKyAgICAvLyBB
ZGQgdGhlIHNvdXJjZSB0byBvdXIgc2V0IG9mIHNvdXJjZXMuCisgICAgeworICAgICAgICBNdXRl
eExvY2tlciBsb2NrZXIobV9ldmVudFNvdXJjZXNNdXRleCk7CisgICAgICAgIAorICAgICAgICBB
U1NFUlQoIW1fZXZlbnRTb3VyY2VzLmNvbnRhaW5zKG1hY2hQb3J0KSk7CisgICAgICAgIAorICAg
ICAgICBtX2V2ZW50U291cmNlcy5zZXQobWFjaFBvcnQsIGV2ZW50U291cmNlKTsKKyAgICAgICAg
CisgICAgICAgIC8vIEFuZCBzdGFydCBpdCEKKyAgICAgICAgZGlzcGF0Y2hfcmVzdW1lKGRpc3Bh
dGNoU291cmNlKTsKKyAgICB9Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjp1bnJlZ2lzdGVyTWFjaFBv
cnRFdmVudEhhbmRsZXIobWFjaF9wb3J0X3QgbWFjaFBvcnQpCit7CisgICAgQVNTRVJUKG1hY2hQ
b3J0KTsKKyAgICAKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9ldmVudFNvdXJjZXNNdXRleCk7
CisgICAgCisgICAgSGFzaE1hcDxtYWNoX3BvcnRfdCwgRXZlbnRTb3VyY2UqPjo6aXRlcmF0b3Ig
aXQgPSBtX2V2ZW50U291cmNlcy5maW5kKG1hY2hQb3J0KTsKKyAgICBBU1NFUlQoaXQgIT0gbV9l
dmVudFNvdXJjZXMuZW5kKCkpOworICAgIAorICAgIEFTU0VSVChtX2V2ZW50U291cmNlcy5jb250
YWlucyhtYWNoUG9ydCkpOworCisgICAgRXZlbnRTb3VyY2UqIGV2ZW50U291cmNlID0gaXQtPnNl
Y29uZDsKKyAgICAvLyBDYW5jZWwgYW5kIHJlbGVhc2UgdGhlIHNvdXJjZS4gSXQgd2lsbCBiZSBk
ZWxldGVkIGluIGl0cyBmaW5hbGl6ZSBoYW5kbGVyLgorICAgIGRpc3BhdGNoX3NvdXJjZV9jYW5j
ZWwoZXZlbnRTb3VyY2UtPmRpc3BhdGNoU291cmNlKCkpOworICAgIGRpc3BhdGNoX3JlbGVhc2Uo
ZXZlbnRTb3VyY2UtPmRpc3BhdGNoU291cmNlKCkpOworCisgICAgbV9ldmVudFNvdXJjZXMucmVt
b3ZlKGl0KTsgICAgCit9CisKK3ZvaWQgV29ya1F1ZXVlOjpwbGF0Zm9ybUluaXRpYWxpemUoY29u
c3QgY2hhciogbmFtZSkKK3sKKyAgICBtX2Rpc3BhdGNoUXVldWUgPSBkaXNwYXRjaF9xdWV1ZV9j
cmVhdGUobmFtZSwgMCk7CisgICAgZGlzcGF0Y2hfc2V0X2NvbnRleHQobV9kaXNwYXRjaFF1ZXVl
LCB0aGlzKTsKK30KKwordm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCit7Cisj
aWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2V2ZW50U291cmNl
c011dGV4KTsKKyAgICBBU1NFUlQobV9ldmVudFNvdXJjZXMuaXNFbXB0eSgpKTsKKyNlbmRpZgor
CisgICAgZGlzcGF0Y2hfcmVsZWFzZShtX2Rpc3BhdGNoUXVldWUpOworfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dURi93dGYvcXQvV29ya1F1ZXVlUXQuY3BwIGIvU291cmNlL1dURi93dGYvcXQvV29y
a1F1ZXVlUXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA1MDkxZmZkYTczOTYwYzYwYzQwZjFmNGNlZWU5NTJj
NjFjM2Q2NmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9xdC9Xb3JrUXVldWVR
dC5jcHAKQEAgLTAsMCArMSwxMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENv
cnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV29ya1F1ZXVlLmgiCisKKyNpbmNsdWRlIDxRT2JqZWN0
PgorI2luY2x1ZGUgPFFQcm9jZXNzPgorI2luY2x1ZGUgPFFUaHJlYWQ+CisjaW5jbHVkZSA8d3Rm
L1RocmVhZGluZy5oPgorCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgV29ya1F1ZXVlOjpXb3Jr
SXRlbVF0IDogcHVibGljIFFPYmplY3QgeworICAgIFFfT0JKRUNUCitwdWJsaWM6CisgICAgV29y
a0l0ZW1RdChXb3JrUXVldWUqIHdvcmtRdWV1ZSwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVu
Y3Rpb24pCisgICAgICAgIDogbV9xdWV1ZSh3b3JrUXVldWUpCisgICAgICAgICwgbV9zb3VyY2Uo
MCkKKyAgICAgICAgLCBtX3NpZ25hbCgwKQorICAgICAgICAsIG1fZnVuY3Rpb24oZnVuY3Rpb24p
CisgICAgeworICAgIH0KKworICAgIFdvcmtJdGVtUXQoV29ya1F1ZXVlKiB3b3JrUXVldWUsIFFP
YmplY3QqIHNvdXJjZSwgY29uc3QgY2hhciogc2lnbmFsLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+
JiBmdW5jdGlvbikKKyAgICAgICAgOiBtX3F1ZXVlKHdvcmtRdWV1ZSkKKyAgICAgICAgLCBtX3Nv
dXJjZShzb3VyY2UpCisgICAgICAgICwgbV9zaWduYWwoc2lnbmFsKQorICAgICAgICAsIG1fZnVu
Y3Rpb24oZnVuY3Rpb24pCisgICAgeworICAgICAgICBjb25uZWN0KG1fc291cmNlLCBtX3NpZ25h
bCwgU0xPVChleGVjdXRlKCkpLCBRdDo6UXVldWVkQ29ubmVjdGlvbik7CisgICAgfQorCisgICAg
fldvcmtJdGVtUXQoKQorICAgIHsKKyAgICB9CisKKyAgICBRX1NMT1Qgdm9pZCBleGVjdXRlKCkg
CisgICAgeyAKKyAgICAgICAgaWYgKG1fcXVldWUtPm1faXNWYWxpZCkKKyAgICAgICAgICAgIG1f
ZnVuY3Rpb24oKTsKKyAgICB9CisKKyAgICBRX1NMT1Qgdm9pZCBleGVjdXRlQW5kRGVsZXRlKCkK
KyAgICB7CisgICAgICAgIGV4ZWN1dGUoKTsKKyAgICAgICAgZGVsZXRlIHRoaXM7CisgICAgfQor
CisgICAgdmlydHVhbCB2b2lkIHRpbWVyRXZlbnQoUVRpbWVyRXZlbnQqKQorICAgIHsKKyAgICAg
ICAgZXhlY3V0ZUFuZERlbGV0ZSgpOworICAgIH0KKworICAgIFdvcmtRdWV1ZSogbV9xdWV1ZTsK
KyAgICBRT2JqZWN0KiBtX3NvdXJjZTsKKyAgICBjb25zdCBjaGFyKiBtX3NpZ25hbDsKKyAgICBG
dW5jdGlvbjx2b2lkKCk+IG1fZnVuY3Rpb247Cit9OworCitRU29ja2V0Tm90aWZpZXIqIFdvcmtR
dWV1ZTo6cmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIoaW50IHNvY2tldERlc2NyaXB0b3IsIFFT
b2NrZXROb3RpZmllcjo6VHlwZSB0eXBlLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlv
bikKK3sKKyAgICBBU1NFUlQobV93b3JrVGhyZWFkKTsKKworICAgIFFTb2NrZXROb3RpZmllciog
bm90aWZpZXIgPSBuZXcgUVNvY2tldE5vdGlmaWVyKHNvY2tldERlc2NyaXB0b3IsIHR5cGUsIDAp
OworICAgIG5vdGlmaWVyLT5zZXRFbmFibGVkKGZhbHNlKTsKKyAgICBub3RpZmllci0+bW92ZVRv
VGhyZWFkKG1fd29ya1RocmVhZCk7CisgICAgV29ya1F1ZXVlOjpXb3JrSXRlbVF0KiBpdGVtUXQg
PSBuZXcgV29ya1F1ZXVlOjpXb3JrSXRlbVF0KHRoaXMsIG5vdGlmaWVyLCBTSUdOQUwoYWN0aXZh
dGVkKGludCkpLCBmdW5jdGlvbik7CisgICAgaXRlbVF0LT5tb3ZlVG9UaHJlYWQobV93b3JrVGhy
ZWFkKTsKKyAgICBub3RpZmllci0+c2V0RW5hYmxlZCh0cnVlKTsKKyAgICByZXR1cm4gbm90aWZp
ZXI7Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjpwbGF0Zm9ybUluaXRpYWxpemUoY29uc3QgY2hhciop
Cit7CisgICAgbV93b3JrVGhyZWFkID0gbmV3IFFUaHJlYWQoKTsKKyAgICBtX3dvcmtUaHJlYWQt
PnN0YXJ0KCk7Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjpwbGF0Zm9ybUludmFsaWRhdGUoKQorewor
ICAgIG1fd29ya1RocmVhZC0+ZXhpdCgpOworICAgIG1fd29ya1RocmVhZC0+d2FpdCgpOworICAg
IGRlbGV0ZSBtX3dvcmtUaHJlYWQ7Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjpkaXNwYXRjaChjb25z
dCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKK3sKKyAgICBXb3JrUXVldWU6OldvcmtJdGVt
UXQqIGl0ZW1RdCA9IG5ldyBXb3JrUXVldWU6OldvcmtJdGVtUXQodGhpcywgZnVuY3Rpb24pOwor
ICAgIGl0ZW1RdC0+bW92ZVRvVGhyZWFkKG1fd29ya1RocmVhZCk7CisgICAgUU1ldGFPYmplY3Q6
Omludm9rZU1ldGhvZChpdGVtUXQsICJleGVjdXRlQW5kRGVsZXRlIiwgUXQ6OlF1ZXVlZENvbm5l
Y3Rpb24pOworfQorCit2b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2hBZnRlckRlbGF5KGNvbnN0IEZ1
bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uLCBkb3VibGUgZGVsYXlJblNlY29uZCkKK3sKKyAgICBX
b3JrUXVldWU6OldvcmtJdGVtUXQqIGl0ZW1RdCA9IG5ldyBXb3JrUXVldWU6OldvcmtJdGVtUXQo
dGhpcywgZnVuY3Rpb24pOworICAgIGl0ZW1RdC0+c3RhcnRUaW1lcihzdGF0aWNfY2FzdDxpbnQ+
KGRlbGF5SW5TZWNvbmQgKiAxMDAwKSk7CisgICAgaXRlbVF0LT5tb3ZlVG9UaHJlYWQobV93b3Jr
VGhyZWFkKTsKK30KKwordm9pZCBXb3JrUXVldWU6OmRpc3BhdGNoT25UZXJtaW5hdGlvbihQbGF0
Zm9ybVByb2Nlc3NJZGVudGlmaWVyIHByb2Nlc3MsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1
bmN0aW9uKQoreworICAgIFdvcmtRdWV1ZTo6V29ya0l0ZW1RdCogaXRlbVF0ID0gbmV3IFdvcmtR
dWV1ZTo6V29ya0l0ZW1RdCh0aGlzLCBwcm9jZXNzLCBTSUdOQUwoZmluaXNoZWQoaW50LCBRUHJv
Y2Vzczo6RXhpdFN0YXR1cykpLCBmdW5jdGlvbik7CisgICAgaXRlbVF0LT5tb3ZlVG9UaHJlYWQo
bV93b3JrVGhyZWFkKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNpbmNsdWRlICJXb3Jr
UXVldWVRdC5tb2MiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi93aW4vV29ya1F1ZXVlV2lu
LmNwcCBiL1NvdXJjZS9XVEYvd3RmL3dpbi9Xb3JrUXVldWVXaW4uY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFh
YmFkYmRhODk1ZTA3ZDllZTUzMzA3OTVjYzk0ZTYxN2ViOTFkN2IKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi93aW4vV29ya1F1ZXVlV2luLmNwcApAQCAtMCwwICsxLDI5MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXb3JrUXVldWUuaCIK
KworI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVGhy
ZWFkaW5nLmg+CisKK2lubGluZSBXb3JrUXVldWU6OldvcmtJdGVtV2luOjpXb3JrSXRlbVdpbihj
b25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbiwgV29ya1F1ZXVlKiBxdWV1ZSkKKyAgICA6
IG1fZnVuY3Rpb24oZnVuY3Rpb24pCisgICAgLCBtX3F1ZXVlKHF1ZXVlKQoreworfQorCitQYXNz
UmVmUHRyPFdvcmtRdWV1ZTo6V29ya0l0ZW1XaW4+IFdvcmtRdWV1ZTo6V29ya0l0ZW1XaW46OmNy
ZWF0ZShjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbiwgV29ya1F1ZXVlKiBxdWV1ZSkK
K3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdvcmtJdGVtV2luKGZ1bmN0aW9uLCBxdWV1ZSkp
OworfQorCitXb3JrUXVldWU6OldvcmtJdGVtV2luOjp+V29ya0l0ZW1XaW4oKQoreworfQorCitp
bmxpbmUgV29ya1F1ZXVlOjpIYW5kbGVXb3JrSXRlbTo6SGFuZGxlV29ya0l0ZW0oSEFORExFIGhh
bmRsZSwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24sIFdvcmtRdWV1ZSogcXVldWUp
CisgICAgOiBXb3JrSXRlbVdpbihmdW5jdGlvbiwgcXVldWUpCisgICAgLCBtX2hhbmRsZShoYW5k
bGUpCisgICAgLCBtX3dhaXRIYW5kbGUoMCkKK3sKKyAgICBBU1NFUlRfQVJHKGhhbmRsZSwgaGFu
ZGxlKTsKK30KKworUGFzc1JlZlB0cjxXb3JrUXVldWU6OkhhbmRsZVdvcmtJdGVtPiBXb3JrUXVl
dWU6OkhhbmRsZVdvcmtJdGVtOjpjcmVhdGVCeUFkb3B0aW5nSGFuZGxlKEhBTkRMRSBoYW5kbGUs
IGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uLCBXb3JrUXVldWUqIHF1ZXVlKQorewor
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgSGFuZGxlV29ya0l0ZW0oaGFuZGxlLCBmdW5jdGlvbiwg
cXVldWUpKTsKK30KKworV29ya1F1ZXVlOjpIYW5kbGVXb3JrSXRlbTo6fkhhbmRsZVdvcmtJdGVt
KCkKK3sKKyAgICA6OkNsb3NlSGFuZGxlKG1faGFuZGxlKTsKK30KKwordm9pZCBXb3JrUXVldWU6
OmhhbmRsZUNhbGxiYWNrKHZvaWQqIGNvbnRleHQsIEJPT0xFQU4gdGltZXJPcldhaXRGaXJlZCkK
K3sKKyAgICBBU1NFUlRfQVJHKGNvbnRleHQsIGNvbnRleHQpOworICAgIEFTU0VSVF9BUkcodGlt
ZXJPcldhaXRGaXJlZCwgIXRpbWVyT3JXYWl0RmlyZWQpOworCisgICAgV29ya0l0ZW1XaW4qIGl0
ZW0gPSBzdGF0aWNfY2FzdDxXb3JrSXRlbVdpbio+KGNvbnRleHQpOworICAgIFdvcmtRdWV1ZSog
cXVldWUgPSBpdGVtLT5xdWV1ZSgpOworCisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2Nr
KHF1ZXVlLT5tX3dvcmtJdGVtUXVldWVMb2NrKTsKKyAgICAgICAgcXVldWUtPm1fd29ya0l0ZW1R
dWV1ZS5hcHBlbmQoaXRlbSk7CisKKyAgICAgICAgLy8gSWYgbm8gb3RoZXIgdGhyZWFkIGlzIHBl
cmZvcm1pbmcgd29yaywgd2UgY2FuIGRvIGl0IG9uIHRoaXMgdGhyZWFkLgorICAgICAgICBpZiAo
IXF1ZXVlLT50cnlSZWdpc3RlckFzV29ya1RocmVhZCgpKSB7CisgICAgICAgICAgICAvLyBTb21l
IG90aGVyIHRocmVhZCBpcyBwZXJmb3JtaW5nIHdvcmsuIFNpbmNlIHdlIGhvbGQgdGhlIHF1ZXVl
IGxvY2ssIHdlIGNhbiBiZSBzdXJlCisgICAgICAgICAgICAvLyB0aGF0IHRoZSB3b3JrIHRocmVh
ZCBpcyBub3QgZXhpdGluZyBkdWUgdG8gYW4gZW1wdHkgcXVldWUgYW5kIHdpbGwgcHJvY2VzcyB0
aGUgd29yaworICAgICAgICAgICAgLy8gaXRlbSB3ZSBqdXN0IGFkZGVkIHRvIGl0LiBJZiB3ZSB3
ZXJlbid0IGhvbGRpbmcgdGhlIGxvY2sgd2UnZCBoYXZlIHRvIHNpZ25hbAorICAgICAgICAgICAg
Ly8gbV9wZXJmb3JtV29ya0V2ZW50IHRvIG1ha2Ugc3VyZSB0aGUgd29yayBpdGVtIGdvdCBwaWNr
ZWQgdXAuCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBxdWV1
ZS0+cGVyZm9ybVdvcmtPblJlZ2lzdGVyZWRXb3JrVGhyZWFkKCk7Cit9CisKK3ZvaWQgV29ya1F1
ZXVlOjpyZWdpc3RlckhhbmRsZShIQU5ETEUgaGFuZGxlLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+
JiBmdW5jdGlvbikKK3sKKyAgICBSZWZQdHI8SGFuZGxlV29ya0l0ZW0+IGhhbmRsZUl0ZW0gPSBI
YW5kbGVXb3JrSXRlbTo6Y3JlYXRlQnlBZG9wdGluZ0hhbmRsZShoYW5kbGUsIGZ1bmN0aW9uLCB0
aGlzKTsKKworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9jayhtX2hhbmRsZXNMb2NrKTsK
KyAgICAgICAgQVNTRVJUX0FSRyhoYW5kbGUsICFtX2hhbmRsZXMuY29udGFpbnMoaGFuZGxlKSk7
CisgICAgICAgIG1faGFuZGxlcy5zZXQoaGFuZGxlLCBoYW5kbGVJdGVtKTsKKyAgICB9CisKKyAg
ICBIQU5ETEUgd2FpdEhhbmRsZTsKKyAgICBpZiAoITo6UmVnaXN0ZXJXYWl0Rm9yU2luZ2xlT2Jq
ZWN0KCZ3YWl0SGFuZGxlLCBoYW5kbGUsIGhhbmRsZUNhbGxiYWNrLCBoYW5kbGVJdGVtLmdldCgp
LCBJTkZJTklURSwgV1RfRVhFQ1VURURFRkFVTFQpKSB7CisgICAgICAgIERXT1JEIGVycm9yID0g
OjpHZXRMYXN0RXJyb3IoKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQor
ICAgIGhhbmRsZUl0ZW0tPnNldFdhaXRIYW5kbGUod2FpdEhhbmRsZSk7Cit9CisKK3ZvaWQgV29y
a1F1ZXVlOjp1bnJlZ2lzdGVyQW5kQ2xvc2VIYW5kbGUoSEFORExFIGhhbmRsZSkKK3sKKyAgICBS
ZWZQdHI8SGFuZGxlV29ya0l0ZW0+IGl0ZW07CisgICAgeworICAgICAgICBNdXRleExvY2tlciBs
b2NrZXIobV9oYW5kbGVzTG9jayk7CisgICAgICAgIEFTU0VSVF9BUkcoaGFuZGxlLCBtX2hhbmRs
ZXMuY29udGFpbnMoaGFuZGxlKSk7CisgICAgICAgIGl0ZW0gPSBtX2hhbmRsZXMudGFrZShoYW5k
bGUpOworICAgIH0KKworICAgIHVucmVnaXN0ZXJXYWl0QW5kRGVzdHJveUl0ZW1Tb29uKGl0ZW0u
cmVsZWFzZSgpKTsKK30KKworRFdPUkQgV29ya1F1ZXVlOjp3b3JrVGhyZWFkQ2FsbGJhY2sodm9p
ZCogY29udGV4dCkKK3sKKyAgICBBU1NFUlRfQVJHKGNvbnRleHQsIGNvbnRleHQpOworCisgICAg
V29ya1F1ZXVlKiBxdWV1ZSA9IHN0YXRpY19jYXN0PFdvcmtRdWV1ZSo+KGNvbnRleHQpOworCisg
ICAgaWYgKCFxdWV1ZS0+dHJ5UmVnaXN0ZXJBc1dvcmtUaHJlYWQoKSkKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICBxdWV1ZS0+cGVyZm9ybVdvcmtPblJlZ2lzdGVyZWRXb3JrVGhyZWFkKCk7Cisg
ICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjpwZXJmb3JtV29ya09uUmVnaXN0ZXJl
ZFdvcmtUaHJlYWQoKQoreworICAgIEFTU0VSVChtX2lzV29ya1RocmVhZFJlZ2lzdGVyZWQpOwor
CisgICAgYm9vbCBpc1ZhbGlkID0gdHJ1ZTsKKworICAgIG1fd29ya0l0ZW1RdWV1ZUxvY2subG9j
aygpOworCisgICAgd2hpbGUgKGlzVmFsaWQgJiYgIW1fd29ya0l0ZW1RdWV1ZS5pc0VtcHR5KCkp
IHsKKyAgICAgICAgVmVjdG9yPFJlZlB0cjxXb3JrSXRlbVdpbj4gPiB3b3JrSXRlbVF1ZXVlOwor
ICAgICAgICBtX3dvcmtJdGVtUXVldWUuc3dhcCh3b3JrSXRlbVF1ZXVlKTsKKworICAgICAgICAv
LyBBbGxvdyBtb3JlIHdvcmsgdG8gYmUgc2NoZWR1bGVkIHdoaWxlIHdlJ3JlIG5vdCB1c2luZyB0
aGUgcXVldWUgZGlyZWN0bHkuCisgICAgICAgIG1fd29ya0l0ZW1RdWV1ZUxvY2sudW5sb2NrKCk7
CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd29ya0l0ZW1RdWV1ZS5zaXplKCk7ICsr
aSkgeworICAgICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1faXNWYWxpZE11dGV4KTsKKyAg
ICAgICAgICAgIGlzVmFsaWQgPSBtX2lzVmFsaWQ7CisgICAgICAgICAgICBpZiAoIWlzVmFsaWQp
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB3b3JrSXRlbVF1ZXVlW2ldLT5m
dW5jdGlvbigpKCk7CisgICAgICAgIH0KKyAgICAgICAgbV93b3JrSXRlbVF1ZXVlTG9jay5sb2Nr
KCk7CisgICAgfQorCisgICAgLy8gT25lIGludmFyaWFudCB3ZSBtYWludGFpbiBpcyB0aGF0IGFu
eSB3b3JrIHNjaGVkdWxlZCB3aGlsZSBhIHdvcmsgdGhyZWFkIGlzIHJlZ2lzdGVyZWQgd2lsbAor
ICAgIC8vIGJlIGhhbmRsZWQgYnkgdGhhdCB3b3JrIHRocmVhZC4gVW5yZWdpc3RlciBhcyB0aGUg
d29yayB0aHJlYWQgd2hpbGUgdGhlIHF1ZXVlIGxvY2sgaXMgc3RpbGwKKyAgICAvLyBoZWxkIHNv
IHRoYXQgbm8gd29yayBjYW4gYmUgc2NoZWR1bGVkIHdoaWxlIHdlJ3JlIHN0aWxsIHJlZ2lzdGVy
ZWQuCisgICAgdW5yZWdpc3RlckFzV29ya1RocmVhZCgpOworCisgICAgbV93b3JrSXRlbVF1ZXVl
TG9jay51bmxvY2soKTsKK30KKwordm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW5pdGlhbGl6ZShj
b25zdCBjaGFyKiBuYW1lKQoreworICAgIG1faXNXb3JrVGhyZWFkUmVnaXN0ZXJlZCA9IDA7Cisg
ICAgbV90aW1lclF1ZXVlID0gOjpDcmVhdGVUaW1lclF1ZXVlKCk7CisgICAgQVNTRVJUX1dJVEhf
TUVTU0FHRShtX3RpbWVyUXVldWUsICI6OkNyZWF0ZVRpbWVyUXVldWUgZmFpbGVkIHdpdGggZXJy
b3IgJWx1IiwgOjpHZXRMYXN0RXJyb3IoKSk7Cit9CisKK2Jvb2wgV29ya1F1ZXVlOjp0cnlSZWdp
c3RlckFzV29ya1RocmVhZCgpCit7CisgICAgTE9ORyByZXN1bHQgPSA6OkludGVybG9ja2VkQ29t
cGFyZUV4Y2hhbmdlKCZtX2lzV29ya1RocmVhZFJlZ2lzdGVyZWQsIDEsIDApOworICAgIEFTU0VS
VCghcmVzdWx0IHx8IHJlc3VsdCA9PSAxKTsKKyAgICByZXR1cm4gIXJlc3VsdDsKK30KKwordm9p
ZCBXb3JrUXVldWU6OnVucmVnaXN0ZXJBc1dvcmtUaHJlYWQoKQoreworICAgIExPTkcgcmVzdWx0
ID0gOjpJbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZSgmbV9pc1dvcmtUaHJlYWRSZWdpc3RlcmVk
LCAwLCAxKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0ID09IDEpOworfQorCit2
b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKK3sKKyNpZiAhQVNTRVJUX0RJU0FC
TEVECisgICAgTXV0ZXhMb2NrZXIgbG9jayhtX2hhbmRsZXNMb2NrKTsKKyAgICBBU1NFUlQobV9o
YW5kbGVzLmlzRW1wdHkoKSk7CisjZW5kaWYKKworICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIGVu
c3VyZSB0aGF0IGFueSB0aW1lci1xdWV1ZSB0aW1lcnMgdGhhdCBmaXJlIGFmdGVyIHRoaXMgcG9p
bnQgZG9uJ3QgdHJ5IHRvCisgICAgLy8gYWNjZXNzIHRoaXMgV29ya1F1ZXVlIDxodHRwOi8vd2Vi
a2l0Lm9yZy9iLzQ0NjkwPi4KKyAgICA6OkRlbGV0ZVRpbWVyUXVldWVFeChtX3RpbWVyUXVldWUs
IDApOworfQorCit2b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2goY29uc3QgRnVuY3Rpb248dm9pZCgp
PiYgZnVuY3Rpb24pCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fd29ya0l0ZW1RdWV1ZUxv
Y2spOworCisgICAgbV93b3JrSXRlbVF1ZXVlLmFwcGVuZChXb3JrSXRlbVdpbjo6Y3JlYXRlKGZ1
bmN0aW9uLCB0aGlzKSk7CisKKyAgICAvLyBTcGF3biBhIHdvcmsgdGhyZWFkIHRvIHBlcmZvcm0g
dGhlIHdvcmsgd2UganVzdCBhZGRlZC4gQXMgYW4gb3B0aW1pemF0aW9uLCB3ZSBhdm9pZAorICAg
IC8vIHNwYXduaW5nIHRoZSB0aHJlYWQgaWYgYSB3b3JrIHRocmVhZCBpcyBhbHJlYWR5IHJlZ2lz
dGVyZWQuIFRoaXMgcHJldmVudHMgbXVsdGlwbGUgd29yaworICAgIC8vIHRocmVhZHMgZnJvbSBi
ZWluZyBzcGF3bmVkIGluIG1vc3QgY2FzZXMuIChOb3RlIHRoYXQgd2hlbiBhIHdvcmsgdGhyZWFk
IGhhcyBiZWVuIHNwYXduZWQgYnV0CisgICAgLy8gaGFzbid0IHJlZ2lzdGVyZWQgaXRzZWxmIHll
dCwgbV9pc1dvcmtUaHJlYWRSZWdpc3RlcmVkIHdpbGwgYmUgZmFsc2UgYW5kIHdlJ2xsIGVuZCB1
cAorICAgIC8vIHNwYXduaW5nIGEgc2Vjb25kIHdvcmsgdGhyZWFkIGhlcmUuIEJ1dCB3b3JrIHRo
cmVhZCByZWdpc3RyYXRpb24gcHJvY2VzcyB3aWxsIGVuc3VyZSB0aGF0CisgICAgLy8gb25seSBv
bmUgdGhyZWFkIGFjdHVhbGx5IGVuZHMgdXAgcGVyZm9ybWluZyB3b3JrLikKKyAgICBpZiAoIW1f
aXNXb3JrVGhyZWFkUmVnaXN0ZXJlZCkKKyAgICAgICAgOjpRdWV1ZVVzZXJXb3JrSXRlbSh3b3Jr
VGhyZWFkQ2FsbGJhY2ssIHRoaXMsIFdUX0VYRUNVVEVERUZBVUxUKTsKK30KKworc3RydWN0IFRp
bWVyQ29udGV4dCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxUaW1lckNvbnRleHQ+IHsK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUaW1lckNvbnRleHQ+IGNyZWF0ZSgpIHsgcmV0dXJuIGFk
b3B0UmVmKG5ldyBUaW1lckNvbnRleHQpOyB9CisKKyAgICBXb3JrUXVldWUqIHF1ZXVlOworICAg
IEZ1bmN0aW9uPHZvaWQoKT4gZnVuY3Rpb247CisgICAgTXV0ZXggdGltZXJNdXRleDsKKyAgICBI
QU5ETEUgdGltZXI7CisKK3ByaXZhdGU6CisgICAgVGltZXJDb250ZXh0KCkgOiBxdWV1ZSgwKSwg
dGltZXIoMCkgeyB9Cit9OworCit2b2lkIFdvcmtRdWV1ZTo6dGltZXJDYWxsYmFjayh2b2lkKiBj
b250ZXh0LCBCT09MRUFOIHRpbWVyT3JXYWl0RmlyZWQpCit7CisgICAgQVNTRVJUX0FSRyhjb250
ZXh0LCBjb250ZXh0KTsKKyAgICBBU1NFUlRfVU5VU0VEKHRpbWVyT3JXYWl0RmlyZWQsIHRpbWVy
T3JXYWl0RmlyZWQpOworCisgICAgLy8gQmFsYW5jZWQgYnkgbGVha1JlZiBpbiBzY2hlZHVsZVdv
cmtBZnRlckRlbGF5LgorICAgIFJlZlB0cjxUaW1lckNvbnRleHQ+IHRpbWVyQ29udGV4dCA9IGFk
b3B0UmVmKHN0YXRpY19jYXN0PFRpbWVyQ29udGV4dCo+KGNvbnRleHQpKTsKKworICAgIHRpbWVy
Q29udGV4dC0+cXVldWUtPmRpc3BhdGNoKHRpbWVyQ29udGV4dC0+ZnVuY3Rpb24pOworCisgICAg
TXV0ZXhMb2NrZXIgbG9jayh0aW1lckNvbnRleHQtPnRpbWVyTXV0ZXgpOworICAgIEFTU0VSVCh0
aW1lckNvbnRleHQtPnRpbWVyKTsKKyAgICBBU1NFUlQodGltZXJDb250ZXh0LT5xdWV1ZS0+bV90
aW1lclF1ZXVlKTsKKyAgICBpZiAoITo6RGVsZXRlVGltZXJRdWV1ZVRpbWVyKHRpbWVyQ29udGV4
dC0+cXVldWUtPm1fdGltZXJRdWV1ZSwgdGltZXJDb250ZXh0LT50aW1lciwgMCkpCisgICAgICAg
IEFTU0VSVF9XSVRIX01FU1NBR0UoZmFsc2UsICI6OkRlbGV0ZVRpbWVyUXVldWVUaW1lciBmYWls
ZWQgd2l0aCBlcnJvciAlbHUiLCA6OkdldExhc3RFcnJvcigpKTsKK30KKwordm9pZCBXb3JrUXVl
dWU6OmRpc3BhdGNoQWZ0ZXJEZWxheShjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbiwg
ZG91YmxlIGRlbGF5KQoreworICAgIEFTU0VSVChtX3RpbWVyUXVldWUpOworCisgICAgUmVmUHRy
PFRpbWVyQ29udGV4dD4gY29udGV4dCA9IFRpbWVyQ29udGV4dDo6Y3JlYXRlKCk7CisgICAgY29u
dGV4dC0+cXVldWUgPSB0aGlzOworICAgIGNvbnRleHQtPmZ1bmN0aW9uID0gZnVuY3Rpb247CisK
KyAgICB7CisgICAgICAgIC8vIFRoZSB0aW1lciBjYWxsYmFjayBjb3VsZCBmaXJlIGJlZm9yZSA6
OkNyZWF0ZVRpbWVyUXVldWVUaW1lciBldmVuIHJldHVybnMsIHNvIHdlIHByb3RlY3QKKyAgICAg
ICAgLy8gY29udGV4dC0+dGltZXIgd2l0aCBhIG11dGV4IHRvIGVuc3VyZSB0aGUgdGltZXIgY2Fs
bGJhY2sgZG9lc24ndCBhY2Nlc3MgaXQgYmVmb3JlIHRoZQorICAgICAgICAvLyB0aW1lciBoYW5k
bGUgaGFzIGJlZW4gc3RvcmVkIGluIGl0LgorICAgICAgICBNdXRleExvY2tlciBsb2NrKGNvbnRl
eHQtPnRpbWVyTXV0ZXgpOworCisgICAgICAgIC8vIFNpbmNlIG91ciB0aW1lciBjYWxsYmFjayBp
cyBxdWljaywgd2UgY2FuIGV4ZWN1dGUgaW4gdGhlIHRpbWVyIHRocmVhZCBpdHNlbGYgYW5kIGF2
b2lkCisgICAgICAgIC8vIGFuIGV4dHJhIHRocmVhZCBzd2l0Y2ggb3ZlciB0byBhIHdvcmtlciB0
aHJlYWQuCisgICAgICAgIGlmICghOjpDcmVhdGVUaW1lclF1ZXVlVGltZXIoJmNvbnRleHQtPnRp
bWVyLCBtX3RpbWVyUXVldWUsIHRpbWVyQ2FsbGJhY2ssIGNvbnRleHQuZ2V0KCksIGRlbGF5ICog
MTAwMCwgMCwgV1RfRVhFQ1VURUlOVElNRVJUSFJFQUQpKSB7CisgICAgICAgICAgICBBU1NFUlRf
V0lUSF9NRVNTQUdFKGZhbHNlLCAiOjpDcmVhdGVUaW1lclF1ZXVlVGltZXIgZmFpbGVkIHdpdGgg
ZXJyb3IgJWx1IiwgOjpHZXRMYXN0RXJyb3IoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICAvLyBUaGUgdGltZXIgY2FsbGJhY2sgd2lsbCBoYW5kbGUgZGVz
dHJveWluZyBjb250ZXh0LgorICAgIGNvbnRleHQucmVsZWFzZSgpLmxlYWtSZWYoKTsKK30KKwor
dm9pZCBXb3JrUXVldWU6OnVucmVnaXN0ZXJXYWl0QW5kRGVzdHJveUl0ZW1Tb29uKFBhc3NSZWZQ
dHI8SGFuZGxlV29ya0l0ZW0+IGl0ZW0pCit7CisgICAgLy8gV2UncmUgZ29pbmcgdG8gbWFrZSBh
IGJsb2NraW5nIGNhbGwgdG8gOjpVbnJlZ2lzdGVyV2FpdEV4IGJlZm9yZSBjbG9zaW5nIHRoZSBo
YW5kbGUuIChUaGUKKyAgICAvLyBibG9ja2luZyB2ZXJzaW9uIG9mIDo6VW5yZWdpc3RlcldhaXRF
eCBpcyBtdWNoIHNpbXBsZXIgdGhhbiB0aGUgbm9uLWJsb2NraW5nIHZlcnNpb24uKSBJZiB3ZQor
ICAgIC8vIGRvIHRoaXMgb24gdGhlIGN1cnJlbnQgdGhyZWFkLCB3ZSdsbCBkZWFkbG9jayBpZiB3
ZSdyZSBjdXJyZW50bHkgaW4gYSBjYWxsYmFjayBmdW5jdGlvbiBmb3IKKyAgICAvLyB0aGUgd2Fp
dCB3ZSdyZSB1bnJlZ2lzdGVyaW5nLiBTbyBpbnN0ZWFkIHdlIGRvIGl0IGFzeW5jaHJvbm91c2x5
IG9uIHNvbWUgb3RoZXIgd29ya2VyIHRocmVhZC4KKworICAgIDo6UXVldWVVc2VyV29ya0l0ZW0o
dW5yZWdpc3RlcldhaXRBbmREZXN0cm95SXRlbUNhbGxiYWNrLCBpdGVtLmxlYWtSZWYoKSwgV1Rf
RVhFQ1VURURFRkFVTFQpOworfQorCitEV09SRCBXSU5BUEkgV29ya1F1ZXVlOjp1bnJlZ2lzdGVy
V2FpdEFuZERlc3Ryb3lJdGVtQ2FsbGJhY2sodm9pZCogY29udGV4dCkKK3sKKyAgICBBU1NFUlRf
QVJHKGNvbnRleHQsIGNvbnRleHQpOworICAgIFJlZlB0cjxIYW5kbGVXb3JrSXRlbT4gaXRlbSA9
IGFkb3B0UmVmKHN0YXRpY19jYXN0PEhhbmRsZVdvcmtJdGVtKj4oY29udGV4dCkpOworCisgICAg
Ly8gTm93IHRoYXQgd2Uga25vdyB3ZSdyZSBub3QgaW4gYSBjYWxsYmFjayBmdW5jdGlvbiBmb3Ig
dGhlIHdhaXQgd2UncmUgdW5yZWdpc3RlcmluZywgd2UgY2FuCisgICAgLy8gbWFrZSBhIGJsb2Nr
aW5nIGNhbGwgdG8gOjpVbnJlZ2lzdGVyV2FpdEV4LgorICAgIGlmICghOjpVbnJlZ2lzdGVyV2Fp
dEV4KGl0ZW0tPndhaXRIYW5kbGUoKSwgSU5WQUxJRF9IQU5ETEVfVkFMVUUpKSB7CisgICAgICAg
IERXT1JEIGVycm9yID0gOjpHZXRMYXN0RXJyb3IoKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CmluZGV4
IDFkNDcwODg5YTNhMDBlMDI0MjNkNzYzYWZjZjNhNTZiNzU3MmQ2M2EuLjEzMzA1MjQ1ZTk0YzBk
YjU3YzE5NGQ0YmQwNWQ2M2UxMjU4NjQ2NTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NN
YWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CkBAIC0xMDIs
NyArMTAyLDYgQEAgU0VUKFdlYktpdDJfSU5DTFVERV9ESVJFQ1RPUklFUwogU0VUKFdlYktpdDJf
U09VUkNFUwogICAgIFBsYXRmb3JtL0xvZ2dpbmcuY3BwCiAgICAgUGxhdGZvcm0vTW9kdWxlLmNw
cAotICAgIFBsYXRmb3JtL1dvcmtRdWV1ZS5jcHAKIAogICAgIFBsYXRmb3JtL0NvcmVJUEMvQXJn
dW1lbnRDb2RlcnMuY3BwCiAgICAgUGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVudERlY29kZXIuY3Bw
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNl
L1dlYktpdDIvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCA2YzA2ZDVhZjkzNjQyZDQ1ODkzNTdi
YTIxMzYyNmE2MDQ5NWNiNjc2Li4zZGQyZjY2ODdiMGU1NGY0NmRiYWI2NjRlNDI1ZWU5MzM2YWFm
NzM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBi
L1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTI1Myw3ICsyNTMsNiBAQCB3
ZWJraXQyX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvdW5p
eC9Db25uZWN0aW9uVW5peC5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2d0ay9Mb2dn
aW5nR3RrLmNwcCBcCiAJU291cmNlL1dlYktpdDIvUGxhdGZvcm0vZ3RrL01vZHVsZUd0ay5jcHAg
XAotCVNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2d0ay9Xb3JrUXVldWVHdGsuY3BwIFwKIAlTb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybS9Mb2dnaW5nLmNwcCBcCiAJU291cmNlL1dlYktpdDIvUGxhdGZv
cm0vTG9nZ2luZy5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Nb2R1bGUuY3BwIFwKQEAg
LTI2MSw4ICsyNjAsNiBAQCB3ZWJraXQyX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJLaXQyL1Bs
YXRmb3JtL1BsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIuaCBcCiAJU291cmNlL1dlYktpdDIvUGxh
dGZvcm0vU2hhcmVkTWVtb3J5LmggXAogCVNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3VuaXgvU2hh
cmVkTWVtb3J5VW5peC5jcHAgXAotCVNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1dvcmtRdWV1ZS5j
cHAgXAotCVNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1dvcmtRdWV1ZS5oIFwKIAlTb3VyY2UvV2Vi
S2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94eS5jcHAgXAogCVNvdXJjZS9X
ZWJLaXQyL1BsdWdpblByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclByb3h5LmggXAogCVNvdXJjZS9X
ZWJLaXQyL1BsdWdpblByb2Nlc3MvUGx1Z2luQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcCBcCkBAIC0x
MTY5LDExICsxMTY2LDggQEAgd2Via2l0Ml9wbHVnaW5fcHJvY2Vzc19zb3VyY2VzICs9IFwKIAlT
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3VuaXgvQ29ubmVjdGlvblVuaXguY3BwIFwK
IAlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Nb2R1bGUuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybS9Nb2R1bGUuaCBcCi0JU291cmNlL1dlYktpdDIvUGxhdGZvcm0vV29ya1F1ZXVlLmNw
cCBcCi0JU291cmNlL1dlYktpdDIvUGxhdGZvcm0vV29ya1F1ZXVlLmggXAogCVNvdXJjZS9XZWJL
aXQyL1BsYXRmb3JtL1NoYXJlZE1lbW9yeS5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9n
dGsvTW9kdWxlR3RrLmNwcCBcCi0JU291cmNlL1dlYktpdDIvUGxhdGZvcm0vZ3RrL1dvcmtRdWV1
ZUd0ay5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3VuaXgvU2hhcmVkTWVtb3J5VW5p
eC5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclBy
b3h5LmNwcCBcCiAJU291cmNlL1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9sbGVy
UHJveHkuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0Nv
bm5lY3Rpb24uaCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5o
CmluZGV4IDc3M2Y2ZTBkMTNmYjZjZWFjM2NiYWE1MGUzMGFmMTE3YzJlMDIwZWQuLmEwMmY5MmUx
NjAxMGJjNWI2MWRjYzc4MWZlNjM4MThmNGJhOTY5NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1BsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1Bs
YXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5oCkBAIC0zMiwxMSArMzIsMTEgQEAKICNpbmNsdWRl
ICJBcmd1bWVudEVuY29kZXIuaCIKICNpbmNsdWRlICJBcmd1bWVudHMuaCIKICNpbmNsdWRlICJN
ZXNzYWdlSUQuaCIKLSNpbmNsdWRlICJXb3JrUXVldWUuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5o
PgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYvV29ya1F1ZXVlLmg+
CiAKICNpZiBPUyhEQVJXSU4pCiAjaW5jbHVkZSA8bWFjaC9tYWNoX3BvcnQuaD4KQEAgLTQ3LDcg
KzQ3LDcgQEAgY2xhc3MgUVNvY2tldE5vdGlmaWVyOwogI2VuZGlmCiAKICNpZiBQTEFURk9STShR
VCkgfHwgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShFRkwpCi0jaW5jbHVkZSAiUGxhdGZvcm1Q
cm9jZXNzSWRlbnRpZmllci5oIgorI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybVByb2Nlc3NJZGVudGlm
aWVyLmg+CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTI3LDcgKzEyNyw3IEBA
IHB1YmxpYzoKICNpZiBPUyhEQVJXSU4pCiAgICAgdm9pZCBzZXRTaG91bGRDbG9zZUNvbm5lY3Rp
b25Pbk1hY2hFeGNlcHRpb25zKCk7CiAjZWxpZiBQTEFURk9STShRVCkKLSAgICB2b2lkIHNldFNo
b3VsZENsb3NlQ29ubmVjdGlvbk9uUHJvY2Vzc1Rlcm1pbmF0aW9uKFdlYktpdDo6UGxhdGZvcm1Q
cm9jZXNzSWRlbnRpZmllcik7CisgICAgdm9pZCBzZXRTaG91bGRDbG9zZUNvbm5lY3Rpb25PblBy
b2Nlc3NUZXJtaW5hdGlvbihQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyKTsKICNlbmRpZgogCiAg
ICAgdm9pZCBzZXRPbmx5U2VuZE1lc3NhZ2VzQXNEaXNwYXRjaFdoZW5XYWl0aW5nRm9yU3luY1Jl
cGx5V2hlblByb2Nlc3NpbmdTdWNoQU1lc3NhZ2UoYm9vbCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3VuaXgvQ29ubmVjdGlvblVuaXguY3BwIGIvU291cmNl
L1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy91bml4L0Nvbm5lY3Rpb25Vbml4LmNwcAppbmRleCA4
ODVlNDk1Y2I3Njg4YzRlMzkxNzJhNzJiYWU5MmRlODk0MDVjOTg3Li40OWE1MDg5MzNkYmM1ZmE5
MzQzYzg4ZmJkZTk4Yzg0NDAzMGQ1MDE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybS9Db3JlSVBDL3VuaXgvQ29ubmVjdGlvblVuaXguY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtL0NvcmVJUEMvdW5peC9Db25uZWN0aW9uVW5peC5jcHAKQEAgLTU1Nyw3ICs1NTcs
NyBAQCBib29sIENvbm5lY3Rpb246OnNlbmRPdXRnb2luZ01lc3NhZ2UoTWVzc2FnZUlEIG1lc3Nh
Z2VJRCwgUGFzc093blB0cjxBcmd1bWVudEVuYwogfQogCiAjaWYgUExBVEZPUk0oUVQpCi12b2lk
IENvbm5lY3Rpb246OnNldFNob3VsZENsb3NlQ29ubmVjdGlvbk9uUHJvY2Vzc1Rlcm1pbmF0aW9u
KFdlYktpdDo6UGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllciBwcm9jZXNzKQordm9pZCBDb25uZWN0
aW9uOjpzZXRTaG91bGRDbG9zZUNvbm5lY3Rpb25PblByb2Nlc3NUZXJtaW5hdGlvbihQbGF0Zm9y
bVByb2Nlc3NJZGVudGlmaWVyIHByb2Nlc3MpCiB7CiAgICAgbV9jb25uZWN0aW9uUXVldWUuZGlz
cGF0Y2hPblRlcm1pbmF0aW9uKHByb2Nlc3MsIFdURjo6YmluZCgmQ29ubmVjdGlvbjo6Y29ubmVj
dGlvbkRpZENsb3NlLCB0aGlzKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybS9QbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9y
bS9QbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDk2ZWNiZTg3MjczYWZjZGNmYjA3OWRhNDBjMmU2NTMyYzhjZjg2NTMuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZv
cm0vUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLQotI2lmbmRlZiBQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyX2gK
LSNkZWZpbmUgUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllcl9oCi0KLSNpZiBQTEFURk9STShRVCkK
LWNsYXNzIFFQcm9jZXNzOwotI2VsaWYgUExBVEZPUk0oRUZMKQotI2luY2x1ZGUgPHVuaXN0ZC5o
PgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi0jaWYgUExBVEZPUk0oTUFDKQotdHlw
ZWRlZiBwaWRfdCBQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyOwotI2VsaWYgUExBVEZPUk0oV0lO
KQotdHlwZWRlZiBIQU5ETEUgUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllcjsKLSNlbGlmIFBMQVRG
T1JNKFFUKQotdHlwZWRlZiBRUHJvY2VzcyogUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllcjsKLSNl
bGlmIFBMQVRGT1JNKEdUSykKLSNpZmRlZiBHX09TX1dJTjMyCi10eXBlZGVmIHZvaWQqIEdQaWQ7
Ci0jZWxzZQotdHlwZWRlZiBpbnQgR1BpZDsKLSNlbmRpZgotdHlwZWRlZiBHUGlkIFBsYXRmb3Jt
UHJvY2Vzc0lkZW50aWZpZXI7Ci0jZWxpZiBQTEFURk9STShFRkwpCi10eXBlZGVmIHBpZF90IFBs
YXRmb3JtUHJvY2Vzc0lkZW50aWZpZXI7Ci0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0
IAotCi0jZW5kaWYgLy8gUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllcl9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrUXVldWUuY3BwIGIvU291cmNlL1dlYktpdDIvUGxh
dGZvcm0vV29ya1F1ZXVlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmJjZGQy
MjY0NDIzMDgyODA1NjBiODk0MjVhYjE2MDc3ZmNlYjVkYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrUXVl
dWUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXb3JrUXVldWUuaCIKLQotV29ya1F1ZXVlOjpXb3Jr
UXVldWUoY29uc3QgY2hhciogbmFtZSkKLSAgICA6IG1faXNWYWxpZCh0cnVlKQotewotICAgIHBs
YXRmb3JtSW5pdGlhbGl6ZShuYW1lKTsKLX0KLQotV29ya1F1ZXVlOjp+V29ya1F1ZXVlKCkKLXsK
LSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1faXNWYWxpZE11
dGV4KTsKLSAgICBBU1NFUlQoIW1faXNWYWxpZCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBXb3JrUXVl
dWU6OmludmFsaWRhdGUoKQotewotICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1f
aXNWYWxpZE11dGV4KTsKLSAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7Ci0gICAgfQotCi0gICAg
cGxhdGZvcm1JbnZhbGlkYXRlKCk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybS9Xb3JrUXVldWUuaCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1dvcmtRdWV1ZS5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjMwZGMwMjg1NWU1ZGEwOTRiMTNmMWYxNTEz
MjljMmRiNDE0MzBjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1dvcmtRdWV1ZS5oCisrKyAvZGV2L251bGwKQEAg
LTEsMjEwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xh
IE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVm
IFdvcmtRdWV1ZV9oCi0jZGVmaW5lIFdvcmtRdWV1ZV9oCi0KLSNpZiBPUyhEQVJXSU4pCi0jaWYg
SEFWRShESVNQQVRDSF9IKQotI2luY2x1ZGUgPGRpc3BhdGNoL2Rpc3BhdGNoLmg+Ci0jZW5kaWYK
LSNlbmRpZgotCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvRnVuY3Rp
b25hbC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25Q
dHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRp
bmcuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLSNpZiAoUExBVEZPUk0oUVQpICYmICFP
UyhEQVJXSU4pKSB8fCBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKEVGTCkKLSNpbmNsdWRlICJQ
bGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmgiCi0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKFFUKSAm
JiAhT1MoREFSV0lOKQotI2luY2x1ZGUgPFFTb2NrZXROb3RpZmllcj4KLWNsYXNzIFFPYmplY3Q7
Ci1jbGFzcyBRVGhyZWFkOwotI2VsaWYgUExBVEZPUk0oR1RLKQotI2luY2x1ZGUgPHd0Zi9nb2Jq
ZWN0L0dSZWZQdHIuaD4KLXR5cGVkZWYgZ2Jvb2xlYW4gKCpHU291cmNlRnVuYykgKGdwb2ludGVy
IGRhdGEpOwotI2VsaWYgUExBVEZPUk0oRUZMKQotI2luY2x1ZGUgPEVjb3JlLmg+Ci0jZW5kaWYK
LQotY2xhc3MgV29ya1F1ZXVlIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXb3JrUXVldWUp
OwotCi1wdWJsaWM6Ci0gICAgZXhwbGljaXQgV29ya1F1ZXVlKGNvbnN0IGNoYXIqIG5hbWUpOwot
ICAgIH5Xb3JrUXVldWUoKTsKLQotICAgIC8vIFdpbGwgZGlzcGF0Y2ggdGhlIGdpdmVuIGZ1bmN0
aW9uIHRvIHJ1biBhcyBzb29uIGFzIHBvc3NpYmxlLgotICAgIHZvaWQgZGlzcGF0Y2goY29uc3Qg
RnVuY3Rpb248dm9pZCgpPiYpOwotCi0gICAgLy8gV2lsbCBkaXNwYXRjaCB0aGUgZ2l2ZW4gZnVu
Y3Rpb24gYWZ0ZXIgdGhlIGdpdmVuIGRlbGF5IChpbiBzZWNvbmRzKS4KLSAgICB2b2lkIGRpc3Bh
dGNoQWZ0ZXJEZWxheShjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiwgZG91YmxlIGRlbGF5KTsKLQot
ICAgIHZvaWQgaW52YWxpZGF0ZSgpOwotCi0jaWYgT1MoREFSV0lOKQotICAgIGVudW0gTWFjaFBv
cnRFdmVudFR5cGUgewotICAgICAgICAvLyBGaXJlZCB3aGVuIHRoZXJlIGlzIGRhdGEgb24gdGhl
IGdpdmVuIHJlY2VpdmUgcmlnaHQuCi0gICAgICAgIE1hY2hQb3J0RGF0YUF2YWlsYWJsZSwKLSAg
ICAgICAgCi0gICAgICAgIC8vIEZpcmVkIHdoZW4gdGhlIHJlY2VpdmUgcmlnaHQgZm9yIHRoaXMg
c2VuZCByaWdodCBoYXMgYmVlbiBkZXN0cm95ZWQuCi0gICAgICAgIE1hY2hQb3J0RGVhZE5hbWVO
b3RpZmljYXRpb24KLSAgICB9OwotICAgIAotICAgIC8vIFdpbGwgZXhlY3V0ZSB0aGUgZ2l2ZW4g
ZnVuY3Rpb24gd2hlbmV2ZXIgdGhlIGdpdmVuIG1hY2ggcG9ydCBldmVudCBmaXJlcy4KLSAgICAv
LyBOb3RlIHRoYXQgdGhpcyB3aWxsIGFkb3B0IHRoZSBtYWNoIHBvcnQgYW5kIGRlc3Ryb3kgaXQg
d2hlbiB0aGUgd29yayBxdWV1ZSBpcyBpbnZhbGlkYXRlZC4KLSAgICB2b2lkIHJlZ2lzdGVyTWFj
aFBvcnRFdmVudEhhbmRsZXIobWFjaF9wb3J0X3QsIE1hY2hQb3J0RXZlbnRUeXBlLCBjb25zdCBG
dW5jdGlvbjx2b2lkKCk+Jik7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyTWFjaFBvcnRFdmVudEhhbmRs
ZXIobWFjaF9wb3J0X3QpOwotI2VsaWYgUExBVEZPUk0oV0lOKQotICAgIHZvaWQgcmVnaXN0ZXJI
YW5kbGUoSEFORExFLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7Ci0gICAgdm9pZCB1bnJlZ2lz
dGVyQW5kQ2xvc2VIYW5kbGUoSEFORExFKTsKLSNlbGlmIFBMQVRGT1JNKFFUKQotICAgIFFTb2Nr
ZXROb3RpZmllciogcmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIoaW50LCBRU29ja2V0Tm90aWZp
ZXI6OlR5cGUsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsKLSAgICB2b2lkIGRpc3BhdGNoT25U
ZXJtaW5hdGlvbihXZWJLaXQ6OlBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIsIGNvbnN0IEZ1bmN0
aW9uPHZvaWQoKT4mKTsKLSNlbGlmIFBMQVRGT1JNKEdUSykKLSAgICB2b2lkIHJlZ2lzdGVyRXZl
bnRTb3VyY2VIYW5kbGVyKGludCwgaW50LCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7Ci0gICAg
dm9pZCB1bnJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKGludCk7Ci0gICAgdm9pZCBkaXNwYXRj
aE9uVGVybWluYXRpb24oV2ViS2l0OjpQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLCBjb25zdCBG
dW5jdGlvbjx2b2lkKCk+Jik7Ci0jZWxpZiBQTEFURk9STShFRkwpCi0gICAgdm9pZCByZWdpc3Rl
clNvY2tldEV2ZW50SGFuZGxlcihpbnQsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsKLSAgICB2
b2lkIHVucmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIoaW50KTsKLSNlbmRpZgotCi1wcml2YXRl
OgotICAgIC8vIEZJWE1FOiBVc2UgYW4gYXRvbWljIGJvb2xlYW4gaGVyZSBpbnN0ZWFkLgotICAg
IE11dGV4IG1faXNWYWxpZE11dGV4OwotICAgIGJvb2wgbV9pc1ZhbGlkOwotCi0gICAgdm9pZCBw
bGF0Zm9ybUluaXRpYWxpemUoY29uc3QgY2hhciogbmFtZSk7Ci0gICAgdm9pZCBwbGF0Zm9ybUlu
dmFsaWRhdGUoKTsKLQotI2lmIE9TKERBUldJTikKLSNpZiBIQVZFKERJU1BBVENIX0gpCi0gICAg
c3RhdGljIHZvaWQgZXhlY3V0ZUZ1bmN0aW9uKHZvaWQqKTsKLSAgICBNdXRleCBtX2V2ZW50U291
cmNlc011dGV4OwotICAgIGNsYXNzIEV2ZW50U291cmNlOwotICAgIEhhc2hNYXA8bWFjaF9wb3J0
X3QsIEV2ZW50U291cmNlKj4gbV9ldmVudFNvdXJjZXM7Ci0gICAgZGlzcGF0Y2hfcXVldWVfdCBt
X2Rpc3BhdGNoUXVldWU7Ci0jZW5kaWYKLSNlbGlmIFBMQVRGT1JNKFdJTikKLSAgICBjbGFzcyBX
b3JrSXRlbVdpbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxXb3JrSXRlbVdpbj4gewot
ICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8V29ya0l0ZW1XaW4+IGNyZWF0
ZShjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiwgV29ya1F1ZXVlKik7Ci0gICAgICAgIHZpcnR1YWwg
fldvcmtJdGVtV2luKCk7Ci0KLSAgICAgICAgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24oKSB7
IHJldHVybiBtX2Z1bmN0aW9uOyB9Ci0gICAgICAgIFdvcmtRdWV1ZSogcXVldWUoKSBjb25zdCB7
IHJldHVybiBtX3F1ZXVlOyB9Ci0KLSAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIFdvcmtJdGVtV2lu
KGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mLCBXb3JrUXVldWUqKTsKLQotICAgIHByaXZhdGU6Ci0g
ICAgICAgIEZ1bmN0aW9uPHZvaWQoKT4gbV9mdW5jdGlvbjsKLSAgICAgICAgV29ya1F1ZXVlKiBt
X3F1ZXVlOwotICAgIH07Ci0KLSAgICBjbGFzcyBIYW5kbGVXb3JrSXRlbSA6IHB1YmxpYyBXb3Jr
SXRlbVdpbiB7Ci0gICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxIYW5kbGVX
b3JrSXRlbT4gY3JlYXRlQnlBZG9wdGluZ0hhbmRsZShIQU5ETEUsIGNvbnN0IEZ1bmN0aW9uPHZv
aWQoKT4mLCBXb3JrUXVldWUqKTsKLSAgICAgICAgdmlydHVhbCB+SGFuZGxlV29ya0l0ZW0oKTsK
LQotICAgICAgICB2b2lkIHNldFdhaXRIYW5kbGUoSEFORExFIHdhaXRIYW5kbGUpIHsgbV93YWl0
SGFuZGxlID0gd2FpdEhhbmRsZTsgfQotICAgICAgICBIQU5ETEUgd2FpdEhhbmRsZSgpIGNvbnN0
IHsgcmV0dXJuIG1fd2FpdEhhbmRsZTsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgSGFuZGxl
V29ya0l0ZW0oSEFORExFLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiwgV29ya1F1ZXVlKik7Ci0K
LSAgICAgICAgSEFORExFIG1faGFuZGxlOwotICAgICAgICBIQU5ETEUgbV93YWl0SGFuZGxlOwot
ICAgIH07Ci0KLSAgICBzdGF0aWMgdm9pZCBDQUxMQkFDSyBoYW5kbGVDYWxsYmFjayh2b2lkKiBj
b250ZXh0LCBCT09MRUFOIHRpbWVyT3JXYWl0RmlyZWQpOwotICAgIHN0YXRpYyB2b2lkIENBTExC
QUNLIHRpbWVyQ2FsbGJhY2sodm9pZCogY29udGV4dCwgQk9PTEVBTiB0aW1lck9yV2FpdEZpcmVk
KTsKLSAgICBzdGF0aWMgRFdPUkQgV0lOQVBJIHdvcmtUaHJlYWRDYWxsYmFjayh2b2lkKiBjb250
ZXh0KTsKLQotICAgIGJvb2wgdHJ5UmVnaXN0ZXJBc1dvcmtUaHJlYWQoKTsKLSAgICB2b2lkIHVu
cmVnaXN0ZXJBc1dvcmtUaHJlYWQoKTsKLSAgICB2b2lkIHBlcmZvcm1Xb3JrT25SZWdpc3RlcmVk
V29ya1RocmVhZCgpOwotCi0gICAgc3RhdGljIHZvaWQgdW5yZWdpc3RlcldhaXRBbmREZXN0cm95
SXRlbVNvb24oUGFzc1JlZlB0cjxIYW5kbGVXb3JrSXRlbT4pOwotICAgIHN0YXRpYyBEV09SRCBX
SU5BUEkgdW5yZWdpc3RlcldhaXRBbmREZXN0cm95SXRlbUNhbGxiYWNrKHZvaWQqIGNvbnRleHQp
OwotCi0gICAgdm9sYXRpbGUgTE9ORyBtX2lzV29ya1RocmVhZFJlZ2lzdGVyZWQ7Ci0KLSAgICBN
dXRleCBtX3dvcmtJdGVtUXVldWVMb2NrOwotICAgIFZlY3RvcjxSZWZQdHI8V29ya0l0ZW1XaW4+
ID4gbV93b3JrSXRlbVF1ZXVlOwotCi0gICAgTXV0ZXggbV9oYW5kbGVzTG9jazsKLSAgICBIYXNo
TWFwPEhBTkRMRSwgUmVmUHRyPEhhbmRsZVdvcmtJdGVtPiA+IG1faGFuZGxlczsKLQotICAgIEhB
TkRMRSBtX3RpbWVyUXVldWU7Ci0jZWxpZiBQTEFURk9STShRVCkKLSAgICBjbGFzcyBXb3JrSXRl
bVF0OwotICAgIFFUaHJlYWQqIG1fd29ya1RocmVhZDsKLSAgICBmcmllbmQgY2xhc3MgV29ya0l0
ZW1RdDsKLSNlbGlmIFBMQVRGT1JNKEdUSykKLSAgICBzdGF0aWMgdm9pZCBzdGFydFdvcmtRdWV1
ZVRocmVhZChXb3JrUXVldWUqKTsKLSAgICB2b2lkIHdvcmtRdWV1ZVRocmVhZEJvZHkoKTsKLSAg
ICB2b2lkIGRpc3BhdGNoT25Tb3VyY2UoR1NvdXJjZSosIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4m
LCBHU291cmNlRnVuYyk7Ci0KLSAgICBUaHJlYWRJZGVudGlmaWVyIG1fd29ya1F1ZXVlVGhyZWFk
OwotICAgIEdSZWZQdHI8R01haW5Db250ZXh0PiBtX2V2ZW50Q29udGV4dDsKLSAgICBNdXRleCBt
X2V2ZW50TG9vcExvY2s7Ci0gICAgR1JlZlB0cjxHTWFpbkxvb3A+IG1fZXZlbnRMb29wOwotICAg
IE11dGV4IG1fZXZlbnRTb3VyY2VzTG9jazsKLSAgICBjbGFzcyBFdmVudFNvdXJjZTsKLSAgICBI
YXNoTWFwPGludCwgVmVjdG9yPEV2ZW50U291cmNlKj4gPiBtX2V2ZW50U291cmNlczsKLSAgICB0
eXBlZGVmIEhhc2hNYXA8aW50LCBWZWN0b3I8RXZlbnRTb3VyY2UqPiA+OjppdGVyYXRvciBFdmVu
dFNvdXJjZUl0ZXJhdG9yOyAKLSNlbGlmIFBMQVRGT1JNKEVGTCkKLSAgICBmZF9zZXQgbV9maWxl
RGVzY3JpcHRvclNldDsKLSAgICBpbnQgbV9tYXhGaWxlRGVzY3JpcHRvcjsKLSAgICBpbnQgbV9y
ZWFkRnJvbVBpcGVEZXNjcmlwdG9yOwotICAgIGludCBtX3dyaXRlVG9QaXBlRGVzY3JpcHRvcjsK
LSAgICBib29sIG1fdGhyZWFkTG9vcDsKLQotICAgIFZlY3RvcjxGdW5jdGlvbjx2b2lkKCk+ID4g
bV93b3JrSXRlbVF1ZXVlOwotICAgIE11dGV4IG1fd29ya0l0ZW1RdWV1ZUxvY2s7Ci0KLSAgICBp
bnQgbV9zb2NrZXREZXNjcmlwdG9yOwotICAgIEZ1bmN0aW9uPHZvaWQoKT4gbV9zb2NrZXRFdmVu
dEhhbmRsZXI7Ci0KLSAgICBIYXNoTWFwPGludCwgT3duUHRyPEVjb3JlX1RpbWVyPiA+IG1fdGlt
ZXJzOwotCi0gICAgdm9pZCBzZW5kTWVzc2FnZVRvVGhyZWFkKGNvbnN0IGNoYXIqKTsKLSAgICBz
dGF0aWMgdm9pZCogd29ya1F1ZXVlVGhyZWFkKFdvcmtRdWV1ZSopOwotICAgIHZvaWQgcGVyZm9y
bVdvcmsoKTsKLSAgICB2b2lkIHBlcmZvcm1GaWxlRGVzY3JpcHRvcldvcmsoKTsKLSAgICBzdGF0
aWMgYm9vbCB0aW1lckZpcmVkKHZvaWQqKTsKLSNlbmRpZgotfTsKLQotI2VuZGlmIC8vIFdvcmtR
dWV1ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9lZmwvV29ya1F1ZXVl
RWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2VmbC9Xb3JrUXVldWVFZmwuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTM5YmE5ZWQ5YjEyNzBmZTdkZjllNmNlNjg1
ZGI0NzNhNWY1OGE3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2VmbC9Xb3JrUXVldWVFZmwuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsMTczICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1
bmcgRWxlY3Ryb25pY3MKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
LQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldvcmtR
dWV1ZS5oIgotCi0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotY2xhc3MgVGltZXJXb3Jr
SXRlbSB7Ci1wdWJsaWM6Ci0gICAgVGltZXJXb3JrSXRlbShpbnQgdGltZXJJRCwgY29uc3QgRnVu
Y3Rpb248dm9pZCgpPiYgZnVuY3Rpb24sIFdvcmtRdWV1ZSogcXVldWUpCi0gICAgICAgIDogbV9m
dW5jdGlvbihmdW5jdGlvbikKLSAgICAgICAgLCBtX3F1ZXVlKHF1ZXVlKQotICAgICAgICAsIG1f
dGltZXJJRCh0aW1lcklEKQotICAgIHsKLSAgICB9Ci0gICAgflRpbWVyV29ya0l0ZW0oKSB7IH0K
LQotICAgIEZ1bmN0aW9uPHZvaWQoKT4gZnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2Z1bmN0
aW9uOyB9Ci0gICAgV29ya1F1ZXVlKiBxdWV1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcXVldWU7IH0K
LQotICAgIGludCB0aW1lcklEKCkgY29uc3QgeyByZXR1cm4gbV90aW1lcklEOyB9Ci0KLXByaXZh
dGU6Ci0gICAgRnVuY3Rpb248dm9pZCgpPiBtX2Z1bmN0aW9uOwotICAgIFdvcmtRdWV1ZSogbV9x
dWV1ZTsKLSAgICBpbnQgbV90aW1lcklEOwotfTsKLQotc3RhdGljIGNvbnN0IGludCBpbnZhbGlk
U29ja2V0RGVzY3JpcHRvciA9IC0xOwotc3RhdGljIGNvbnN0IGludCB0aHJlYWRNZXNzYWdlU2l6
ZSA9IDE7Ci1zdGF0aWMgY29uc3QgY2hhciBmaW5pc2hUaHJlYWRNZXNzYWdlW10gPSAiRiI7Ci1z
dGF0aWMgY29uc3QgY2hhciB3YWt1cFRocmVhZE1lc3NhZ2VbXSA9ICJXIjsKLQotdm9pZCBXb3Jr
UXVldWU6OnBsYXRmb3JtSW5pdGlhbGl6ZShjb25zdCBjaGFyKiBuYW1lKQotewotICAgIGludCBm
ZHNbMl07Ci0gICAgaWYgKHBpcGUoZmRzKSkKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0KLSAgICBtX3JlYWRGcm9tUGlwZURlc2NyaXB0b3IgPSBmZHNbMF07Ci0gICAgbV93cml0ZVRv
UGlwZURlc2NyaXB0b3IgPSBmZHNbMV07Ci0gICAgRkRfWkVSTygmbV9maWxlRGVzY3JpcHRvclNl
dCk7Ci0gICAgRkRfU0VUKG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvciwgJm1fZmlsZURlc2NyaXB0
b3JTZXQpOwotICAgIG1fbWF4RmlsZURlc2NyaXB0b3IgPSBtX3JlYWRGcm9tUGlwZURlc2NyaXB0
b3I7Ci0KLSAgICBtX3NvY2tldERlc2NyaXB0b3IgPSBpbnZhbGlkU29ja2V0RGVzY3JpcHRvcjsK
LQotICAgIG1fdGhyZWFkTG9vcCA9IHRydWU7Ci0gICAgY3JlYXRlVGhyZWFkKHJlaW50ZXJwcmV0
X2Nhc3Q8V1RGOjpUaHJlYWRGdW5jdGlvbj4oJldvcmtRdWV1ZTo6d29ya1F1ZXVlVGhyZWFkKSwg
dGhpcywgbmFtZSk7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpwbGF0Zm9ybUludmFsaWRhdGUoKQot
ewotICAgIHNlbmRNZXNzYWdlVG9UaHJlYWQoZmluaXNoVGhyZWFkTWVzc2FnZSk7Ci19Ci0KLXZv
aWQgV29ya1F1ZXVlOjpwZXJmb3JtV29yaygpCi17Ci0gICAgbV93b3JrSXRlbVF1ZXVlTG9jay5s
b2NrKCk7Ci0KLSAgICB3aGlsZSAoIW1fd29ya0l0ZW1RdWV1ZS5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgVmVjdG9yPEZ1bmN0aW9uPHZvaWQoKT4gPiB3b3JrSXRlbVF1ZXVlOwotICAgICAgICBtX3dv
cmtJdGVtUXVldWUuc3dhcCh3b3JrSXRlbVF1ZXVlKTsKLQotICAgICAgICBtX3dvcmtJdGVtUXVl
dWVMb2NrLnVubG9jaygpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdvcmtJdGVt
UXVldWUuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICB3b3JrSXRlbVF1ZXVlW2ldKCk7Ci0gICAg
ICAgIG1fd29ya0l0ZW1RdWV1ZUxvY2subG9jaygpOwotICAgIH0KLSAgICBtX3dvcmtJdGVtUXVl
dWVMb2NrLnVubG9jaygpOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6cGVyZm9ybUZpbGVEZXNjcmlw
dG9yV29yaygpCi17Ci0gICAgZmRfc2V0IHJlYWRGaWxlRGVzY3JpcHRvclNldCA9IG1fZmlsZURl
c2NyaXB0b3JTZXQ7Ci0KLSAgICBpZiAoc2VsZWN0KG1fbWF4RmlsZURlc2NyaXB0b3IgKyAxLCAm
cmVhZEZpbGVEZXNjcmlwdG9yU2V0LCAwLCAwLCAwKSA+PSAwKSB7Ci0gICAgICAgIGlmIChGRF9J
U1NFVChtX3JlYWRGcm9tUGlwZURlc2NyaXB0b3IsICZyZWFkRmlsZURlc2NyaXB0b3JTZXQpKSB7
Ci0gICAgICAgICAgICBjaGFyIHJlYWRCdWZbdGhyZWFkTWVzc2FnZVNpemVdOwotICAgICAgICAg
ICAgaWYgKHJlYWQobV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yLCByZWFkQnVmLCB0aHJlYWRNZXNz
YWdlU2l6ZSkgPT0gLTEpCi0gICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmVh
ZCBmcm9tIFdvcmtRdWV1ZVRocmVhZCBwaXBlIik7Ci0gICAgICAgICAgICBpZiAoIXN0cm5jbXAo
cmVhZEJ1ZiwgZmluaXNoVGhyZWFkTWVzc2FnZSwgdGhyZWFkTWVzc2FnZVNpemUpKQotICAgICAg
ICAgICAgICAgIG1fdGhyZWFkTG9vcCA9IGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KG1fc29ja2V0RGVzY3JpcHRvciAhPSBpbnZhbGlkU29ja2V0RGVzY3JpcHRvciAmJiBGRF9JU1NF
VChtX3NvY2tldERlc2NyaXB0b3IsICZyZWFkRmlsZURlc2NyaXB0b3JTZXQpKQotICAgICAgICAg
ICAgbV9zb2NrZXRFdmVudEhhbmRsZXIoKTsKLSAgICB9Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpz
ZW5kTWVzc2FnZVRvVGhyZWFkKGNvbnN0IGNoYXIqIG1lc3NhZ2UpCi17Ci0gICAgaWYgKHdyaXRl
KG1fd3JpdGVUb1BpcGVEZXNjcmlwdG9yLCBtZXNzYWdlLCB0aHJlYWRNZXNzYWdlU2l6ZSkgPT0g
LTEpCi0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHdha2UgdXAgV29ya1F1ZXVlIFRocmVh
ZCIpOwotfQotCi12b2lkKiBXb3JrUXVldWU6OndvcmtRdWV1ZVRocmVhZChXb3JrUXVldWUqIHdv
cmtRdWV1ZSkKLXsKLSAgICB3aGlsZSAod29ya1F1ZXVlLT5tX3RocmVhZExvb3ApIHsKLSAgICAg
ICAgd29ya1F1ZXVlLT5wZXJmb3JtV29yaygpOwotICAgICAgICB3b3JrUXVldWUtPnBlcmZvcm1G
aWxlRGVzY3JpcHRvcldvcmsoKTsKLSAgICB9Ci0KLSAgICBjbG9zZSh3b3JrUXVldWUtPm1fcmVh
ZEZyb21QaXBlRGVzY3JpcHRvcik7Ci0gICAgY2xvc2Uod29ya1F1ZXVlLT5tX3dyaXRlVG9QaXBl
RGVzY3JpcHRvcik7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBXb3JrUXVldWU6OnJlZ2lz
dGVyU29ja2V0RXZlbnRIYW5kbGVyKGludCBmaWxlRGVzY3JpcHRvciwgY29uc3QgRnVuY3Rpb248
dm9pZCgpPiYgZnVuY3Rpb24pCi17Ci0gICAgaWYgKG1fc29ja2V0RGVzY3JpcHRvciAhPSBpbnZh
bGlkU29ja2V0RGVzY3JpcHRvcikKLSAgICAgICAgTE9HX0VSUk9SKCIlZCBpcyBhbHJlYWR5IHJl
Z2lzdGVyZC4iLCBmaWxlRGVzY3JpcHRvcik7Ci0KLSAgICBtX3NvY2tldERlc2NyaXB0b3IgPSBm
aWxlRGVzY3JpcHRvcjsKLSAgICBtX3NvY2tldEV2ZW50SGFuZGxlciA9IGZ1bmN0aW9uOwotCi0g
ICAgaWYgKGZpbGVEZXNjcmlwdG9yID4gbV9tYXhGaWxlRGVzY3JpcHRvcikKLSAgICAgICAgbV9t
YXhGaWxlRGVzY3JpcHRvciA9IGZpbGVEZXNjcmlwdG9yOwotICAgIEZEX1NFVChmaWxlRGVzY3Jp
cHRvciwgJm1fZmlsZURlc2NyaXB0b3JTZXQpOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6dW5yZWdp
c3RlclNvY2tldEV2ZW50SGFuZGxlcihpbnQgZmlsZURlc2NyaXB0b3IpCi17Ci0gICAgbV9zb2Nr
ZXREZXNjcmlwdG9yID0gaW52YWxpZFNvY2tldERlc2NyaXB0b3I7Ci0KLSAgICBpZiAoZmlsZURl
c2NyaXB0b3IgPT0gbV9tYXhGaWxlRGVzY3JpcHRvcikKLSAgICAgICAgbV9tYXhGaWxlRGVzY3Jp
cHRvciA9IG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvcjsKLSAgICBGRF9DTFIoZmlsZURlc2NyaXB0
b3IsICZtX2ZpbGVEZXNjcmlwdG9yU2V0KTsKLX0KLQotdm9pZCBXb3JrUXVldWU6OmRpc3BhdGNo
KGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQotewotICAgIE11dGV4TG9ja2VyIGxv
Y2tlcihtX3dvcmtJdGVtUXVldWVMb2NrKTsKLSAgICBtX3dvcmtJdGVtUXVldWUuYXBwZW5kKGZ1
bmN0aW9uKTsKLSAgICBzZW5kTWVzc2FnZVRvVGhyZWFkKHdha3VwVGhyZWFkTWVzc2FnZSk7Ci19
Ci0KLWJvb2wgV29ya1F1ZXVlOjp0aW1lckZpcmVkKHZvaWQqIGRhdGEpCi17Ci0gICAgVGltZXJX
b3JrSXRlbSogaXRlbSA9IHN0YXRpY19jYXN0PFRpbWVyV29ya0l0ZW0qPihkYXRhKTsKLSAgICBp
ZiAoaXRlbSAmJiBpdGVtLT5xdWV1ZSgpLT5tX2lzVmFsaWQpIHsKLSAgICAgICAgaXRlbS0+cXVl
dWUoKS0+ZGlzcGF0Y2goaXRlbS0+ZnVuY3Rpb24oKSk7Ci0gICAgICAgIGl0ZW0tPnF1ZXVlKCkt
Pm1fdGltZXJzLnRha2UoaXRlbS0+dGltZXJJRCgpKTsKLSAgICAgICAgZGVsZXRlIGl0ZW07Ci0g
ICAgfQotCi0gICAgcmV0dXJuIEVDT1JFX0NBTExCQUNLX0NBTkNFTDsKLX0KLQotdm9pZCBXb3Jr
UXVldWU6OmRpc3BhdGNoQWZ0ZXJEZWxheShjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlv
biwgZG91YmxlIGRlbGF5KQotewotICAgIHN0YXRpYyBpbnQgdGltZXJJZCA9IDA7Ci0gICAgbV90
aW1lcnMuc2V0KHRpbWVySWQsIGFkb3B0UHRyKGVjb3JlX3RpbWVyX2FkZChkZWxheSwgcmVpbnRl
cnByZXRfY2FzdDxFY29yZV9UYXNrX0NiPih0aW1lckZpcmVkKSwgbmV3IFRpbWVyV29ya0l0ZW0o
dGltZXJJZCwgZnVuY3Rpb24sIHRoaXMpKSkpOwotICAgIHRpbWVySWQrKzsKLX0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2d0ay9Xb3JrUXVldWVHdGsuY3BwIGIvU291cmNl
L1dlYktpdDIvUGxhdGZvcm0vZ3RrL1dvcmtRdWV1ZUd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDFkZmFiODNjY2ZiMjRjOWYwMGVlNDBkMmRhYTFjOTViMTYzODJhNDMuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dDIvUGxhdGZvcm0vZ3RrL1dvcmtRdWV1ZUd0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMzAg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgotICogQ29weXJp
Z2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFBvcnRpb25z
IENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldvcmtR
dWV1ZS5oIgotCi0jaW5jbHVkZSAiV0tCYXNlLmgiCi0jaW5jbHVkZSA8Z2lvL2dpby5oPgotI2lu
Y2x1ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+Ci0KLS8vIFdv
cmtRdWV1ZTo6RXZlbnRTb3VyY2UKLWNsYXNzIFdvcmtRdWV1ZTo6RXZlbnRTb3VyY2UgewotcHVi
bGljOgotICAgIEV2ZW50U291cmNlKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uLCBX
b3JrUXVldWUqIHdvcmtRdWV1ZSwgR0NhbmNlbGxhYmxlKiBjYW5jZWxsYWJsZSkKLSAgICAgICAg
OiBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQotICAgICAgICAsIG1fd29ya1F1ZXVlKHdvcmtRdWV1ZSkK
LSAgICAgICAgLCBtX2NhbmNlbGxhYmxlKGNhbmNlbGxhYmxlKQotICAgIHsKLSAgICB9Ci0KLSAg
ICB2b2lkIGNhbmNlbCgpCi0gICAgewotICAgICAgICBpZiAoIW1fY2FuY2VsbGFibGUpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIGdfY2FuY2VsbGFibGVfY2FuY2VsKG1fY2FuY2VsbGFi
bGUpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGV4ZWN1dGVFdmVudFNvdXJjZShFdmVudFNv
dXJjZSogZXZlbnRTb3VyY2UpCi0gICAgewotICAgICAgICBBU1NFUlQoZXZlbnRTb3VyY2UpOwot
ICAgICAgICBXb3JrUXVldWUqIHF1ZXVlID0gZXZlbnRTb3VyY2UtPm1fd29ya1F1ZXVlOwotICAg
ICAgICB7Ci0gICAgICAgICAgICBNdXRleExvY2tlciBsb2NrZXIocXVldWUtPm1faXNWYWxpZE11
dGV4KTsKLSAgICAgICAgICAgIGlmICghcXVldWUtPm1faXNWYWxpZCkKLSAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBldmVudFNvdXJjZS0+bV9mdW5jdGlvbigp
OwotICAgIH0KLQotICAgIHN0YXRpYyBnYm9vbGVhbiBwZXJmb3JtV29ya09uY2UoRXZlbnRTb3Vy
Y2UqIGV2ZW50U291cmNlKQotICAgIHsKLSAgICAgICAgZXhlY3V0ZUV2ZW50U291cmNlKGV2ZW50
U291cmNlKTsKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLQotICAgIHN0YXRpYyBnYm9v
bGVhbiBwZXJmb3JtV29yayhHU29ja2V0KiBzb2NrZXQsIEdJT0NvbmRpdGlvbiBjb25kaXRpb24s
IEV2ZW50U291cmNlKiBldmVudFNvdXJjZSkKLSAgICB7Ci0gICAgICAgIGlmICghKGNvbmRpdGlv
biAmIEdfSU9fSU4pICYmICEoY29uZGl0aW9uICYgR19JT19IVVApICYmICEoY29uZGl0aW9uICYg
R19JT19FUlIpKSB7Ci0gICAgICAgICAgICAvLyBFdmVudFNvdXJjZSBoYXMgYmVlbiBjYW5jZWxs
ZWQsIHJldHVybiBGQUxTRSB0byBkZXN0cm95IHRoZSBzb3VyY2UuCi0gICAgICAgICAgICByZXR1
cm4gRkFMU0U7Ci0gICAgICAgIH0KLQotICAgICAgICBleGVjdXRlRXZlbnRTb3VyY2UoZXZlbnRT
b3VyY2UpOwotICAgICAgICByZXR1cm4gVFJVRTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZ2Jvb2xl
YW4gcGVyZm9ybVdvcmtPblRlcm1pbmF0aW9uKEdQaWQsIGdpbnQsIEV2ZW50U291cmNlKiBldmVu
dFNvdXJjZSkKLSAgICB7Ci0gICAgICAgIGV4ZWN1dGVFdmVudFNvdXJjZShldmVudFNvdXJjZSk7
Ci0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBkZWxldGVF
dmVudFNvdXJjZShFdmVudFNvdXJjZSogZXZlbnRTb3VyY2UpIAotICAgIHsKLSAgICAgICAgQVNT
RVJUKGV2ZW50U291cmNlKTsKLSAgICAgICAgZGVsZXRlIGV2ZW50U291cmNlOwotICAgIH0KLSAg
IAotcHVibGljOgotICAgIEZ1bmN0aW9uPHZvaWQoKT4gbV9mdW5jdGlvbjsKLSAgICBXb3JrUXVl
dWUqIG1fd29ya1F1ZXVlOwotICAgIEdDYW5jZWxsYWJsZSogbV9jYW5jZWxsYWJsZTsKLX07Ci0K
LS8vIFdvcmtRdWV1ZQotc3RhdGljIGNvbnN0IHNpemVfdCBrVmlzdWFsU3R1ZGlvVGhyZWFkTmFt
ZUxpbWl0ID0gMzE7Ci0KLXZvaWQgV29ya1F1ZXVlOjpwbGF0Zm9ybUluaXRpYWxpemUoY29uc3Qg
Y2hhciogbmFtZSkKLXsKLSAgICBtX2V2ZW50Q29udGV4dCA9IGFkb3B0R1JlZihnX21haW5fY29u
dGV4dF9uZXcoKSk7Ci0gICAgQVNTRVJUKG1fZXZlbnRDb250ZXh0KTsKLSAgICBtX2V2ZW50TG9v
cCA9IGFkb3B0R1JlZihnX21haW5fbG9vcF9uZXcobV9ldmVudENvbnRleHQuZ2V0KCksIEZBTFNF
KSk7Ci0gICAgQVNTRVJUKG1fZXZlbnRMb29wKTsKLQotICAgIC8vIFRoaXMgbmFtZSBjYW4gYmUg
Y29tLmFwcGxlLldlYktpdC5Qcm9jZXNzTGF1bmNoZXIgb3IgY29tLmFwcGxlLkNvcmVJUEMuUmVj
ZWl2ZVF1ZXVlLgotICAgIC8vIFdlIGFyZSB1c2luZyB0aG9zZSBuYW1lcyBmb3IgdGhlIHRocmVh
ZCBuYW1lLCBidXQgYm90aCBhcmUgbG9uZ2VyIHRoYW4gMzEgY2hhcmFjdGVycywKLSAgICAvLyB3
aGljaCBpcyB0aGUgbGltaXQgb2YgVmlzdWFsIFN0dWRpbyBmb3IgdGhyZWFkIG5hbWVzLgotICAg
IC8vIFdoZW4gbG9nIGlzIGVuYWJsZWQgY3JlYXRlVGhyZWFkKCkgd2lsbCBhc3NlcnQgaW5zdGVh
ZCBvZiB0cnVuY2F0ZSB0aGUgbmFtZSwgc28gd2UgbmVlZAotICAgIC8vIHRvIG1ha2Ugc3VyZSB3
ZSBkb24ndCB1c2UgYSBuYW1lIGxvbmdlciB0aGFuIDMxIGNoYXJhY3RlcnMuCi0gICAgY29uc3Qg
Y2hhciogdGhyZWFkTmFtZSA9IGdfc3RycnN0cihuYW1lLCAiLiIpOwotICAgIGlmICh0aHJlYWRO
YW1lKQotICAgICAgICB0aHJlYWROYW1lKys7Ci0gICAgZWxzZQotICAgICAgICB0aHJlYWROYW1l
ID0gbmFtZTsKLSAgICBpZiAoc3RybGVuKHRocmVhZE5hbWUpID4ga1Zpc3VhbFN0dWRpb1RocmVh
ZE5hbWVMaW1pdCkKLSAgICAgICAgdGhyZWFkTmFtZSArPSBzdHJsZW4odGhyZWFkTmFtZSkgLSBr
VmlzdWFsU3R1ZGlvVGhyZWFkTmFtZUxpbWl0OwotCi0gICAgbV93b3JrUXVldWVUaHJlYWQgPSBj
cmVhdGVUaHJlYWQocmVpbnRlcnByZXRfY2FzdDxXVEY6OlRocmVhZEZ1bmN0aW9uPigmV29ya1F1
ZXVlOjpzdGFydFdvcmtRdWV1ZVRocmVhZCksIHRoaXMsIHRocmVhZE5hbWUpOwotfQotCi12b2lk
IFdvcmtRdWV1ZTo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKLXsKLSAgICBNdXRleExvY2tlciBsb2Nr
ZXIobV9ldmVudExvb3BMb2NrKTsKLQotICAgIGlmIChtX2V2ZW50TG9vcCkgewotICAgICAgICBp
ZiAoZ19tYWluX2xvb3BfaXNfcnVubmluZyhtX2V2ZW50TG9vcC5nZXQoKSkpCi0gICAgICAgICAg
ICBnX21haW5fbG9vcF9xdWl0KG1fZXZlbnRMb29wLmdldCgpKTsKLSAgICAgICAgbV9ldmVudExv
b3AuY2xlYXIoKTsKLSAgICB9Ci0KLSAgICBtX2V2ZW50Q29udGV4dC5jbGVhcigpOwotfQotCi12
b2lkIFdvcmtRdWV1ZTo6c3RhcnRXb3JrUXVldWVUaHJlYWQoV29ya1F1ZXVlKiB3b3JrUXVldWUp
Ci17Ci0gICAgd29ya1F1ZXVlLT53b3JrUXVldWVUaHJlYWRCb2R5KCk7Ci19Ci0KLXZvaWQgV29y
a1F1ZXVlOjp3b3JrUXVldWVUaHJlYWRCb2R5KCkKLXsKLSAgICBnX21haW5fbG9vcF9ydW4obV9l
dmVudExvb3AuZ2V0KCkpOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6cmVnaXN0ZXJFdmVudFNvdXJj
ZUhhbmRsZXIoaW50IGZpbGVEZXNjcmlwdG9yLCBpbnQgY29uZGl0aW9uLCBjb25zdCBGdW5jdGlv
bjx2b2lkKCk+JiBmdW5jdGlvbikKLXsKLSAgICBHUmVmUHRyPEdTb2NrZXQ+IHNvY2tldCA9IGFk
b3B0R1JlZihnX3NvY2tldF9uZXdfZnJvbV9mZChmaWxlRGVzY3JpcHRvciwgMCkpOwotICAgIEFT
U0VSVChzb2NrZXQpOwotICAgIEdSZWZQdHI8R0NhbmNlbGxhYmxlPiBjYW5jZWxsYWJsZSA9IGFk
b3B0R1JlZihnX2NhbmNlbGxhYmxlX25ldygpKTsKLSAgICBHUmVmUHRyPEdTb3VyY2U+IGRpc3Bh
dGNoU291cmNlID0gYWRvcHRHUmVmKGdfc29ja2V0X2NyZWF0ZV9zb3VyY2Uoc29ja2V0LmdldCgp
LCBzdGF0aWNfY2FzdDxHSU9Db25kaXRpb24+KGNvbmRpdGlvbiksIGNhbmNlbGxhYmxlLmdldCgp
KSk7Ci0gICAgQVNTRVJUKGRpc3BhdGNoU291cmNlKTsKLSAgICBFdmVudFNvdXJjZSogZXZlbnRT
b3VyY2UgPSBuZXcgRXZlbnRTb3VyY2UoZnVuY3Rpb24sIHRoaXMsIGNhbmNlbGxhYmxlLmdldCgp
KTsKLSAgICBBU1NFUlQoZXZlbnRTb3VyY2UpOwotCi0gICAgZ19zb3VyY2Vfc2V0X2NhbGxiYWNr
KGRpc3BhdGNoU291cmNlLmdldCgpLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPigmV29y
a1F1ZXVlOjpFdmVudFNvdXJjZTo6cGVyZm9ybVdvcmspLAotICAgICAgICBldmVudFNvdXJjZSwg
cmVpbnRlcnByZXRfY2FzdDxHRGVzdHJveU5vdGlmeT4oJldvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6
OmRlbGV0ZUV2ZW50U291cmNlKSk7Ci0KLSAgICAvLyBTZXQgdXAgdGhlIGV2ZW50IHNvdXJjZXMg
dW5kZXIgdGhlIG11dGV4IHNpbmNlIHRoaXMgaXMgc2hhcmVkIGFjcm9zcyBtdWx0aXBsZSB0aHJl
YWRzLgotICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZXZlbnRTb3VyY2VzTG9j
ayk7Ci0gICAgICAgIFZlY3RvcjxFdmVudFNvdXJjZSo+IHNvdXJjZXM7Ci0gICAgICAgIEV2ZW50
U291cmNlSXRlcmF0b3IgaXQgPSBtX2V2ZW50U291cmNlcy5maW5kKGZpbGVEZXNjcmlwdG9yKTsK
LSAgICAgICAgaWYgKGl0ICE9IG1fZXZlbnRTb3VyY2VzLmVuZCgpKSAKLSAgICAgICAgICAgIHNv
dXJjZXMgPSBpdC0+c2Vjb25kOwotCi0gICAgICAgIHNvdXJjZXMuYXBwZW5kKGV2ZW50U291cmNl
KTsKLSAgICAgICAgbV9ldmVudFNvdXJjZXMuc2V0KGZpbGVEZXNjcmlwdG9yLCBzb3VyY2VzKTsK
LSAgICB9Ci0KLSAgICBnX3NvdXJjZV9hdHRhY2goZGlzcGF0Y2hTb3VyY2UuZ2V0KCksIG1fZXZl
bnRDb250ZXh0LmdldCgpKTsKLX0KLQotdm9pZCBXb3JrUXVldWU6OnVucmVnaXN0ZXJFdmVudFNv
dXJjZUhhbmRsZXIoaW50IGZpbGVEZXNjcmlwdG9yKQotewotICAgIEFTU0VSVChmaWxlRGVzY3Jp
cHRvcik7Ci0gICAgCi0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZXZlbnRTb3VyY2VzTG9jayk7
Ci0gICAgCi0gICAgRXZlbnRTb3VyY2VJdGVyYXRvciBpdCA9IG1fZXZlbnRTb3VyY2VzLmZpbmQo
ZmlsZURlc2NyaXB0b3IpOwotICAgIEFTU0VSVChpdCAhPSBtX2V2ZW50U291cmNlcy5lbmQoKSk7
Ci0gICAgQVNTRVJUKG1fZXZlbnRTb3VyY2VzLmNvbnRhaW5zKGZpbGVEZXNjcmlwdG9yKSk7Ci0K
LSAgICBpZiAoaXQgIT0gbV9ldmVudFNvdXJjZXMuZW5kKCkpIHsKLSAgICAgICAgVmVjdG9yPEV2
ZW50U291cmNlKj4gc291cmNlcyA9IGl0LT5zZWNvbmQ7Ci0gICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBzb3VyY2VzLnNpemUoKTsgaSsrKQotICAgICAgICAgICAgc291cmNlc1tpXS0+
Y2FuY2VsKCk7Ci0KLSAgICAgICAgbV9ldmVudFNvdXJjZXMucmVtb3ZlKGl0KTsKLSAgICB9Ci19
Ci0KLXZvaWQgV29ya1F1ZXVlOjpkaXNwYXRjaE9uU291cmNlKEdTb3VyY2UqIGRpc3BhdGNoU291
cmNlLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbiwgR1NvdXJjZUZ1bmMgc291cmNl
Q2FsbGJhY2spCi17Ci0gICAgRXZlbnRTb3VyY2UqIGV2ZW50U291cmNlID0gbmV3IEV2ZW50U291
cmNlKGZ1bmN0aW9uLCB0aGlzLCAwKTsKLQotICAgIGdfc291cmNlX3NldF9jYWxsYmFjayhkaXNw
YXRjaFNvdXJjZSwgc291cmNlQ2FsbGJhY2ssIGV2ZW50U291cmNlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICByZWludGVycHJldF9jYXN0PEdEZXN0cm95Tm90aWZ5PigmV29ya1F1ZXVlOjpF
dmVudFNvdXJjZTo6ZGVsZXRlRXZlbnRTb3VyY2UpKTsKLQotICAgIGdfc291cmNlX2F0dGFjaChk
aXNwYXRjaFNvdXJjZSwgbV9ldmVudENvbnRleHQuZ2V0KCkpOwotfQotCi12b2lkIFdvcmtRdWV1
ZTo6ZGlzcGF0Y2goY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCi17Ci0gICAgR1Jl
ZlB0cjxHU291cmNlPiBkaXNwYXRjaFNvdXJjZSA9IGFkb3B0R1JlZihnX2lkbGVfc291cmNlX25l
dygpKTsKLSAgICBBU1NFUlQoZGlzcGF0Y2hTb3VyY2UpOwotICAgIGdfc291cmNlX3NldF9wcmlv
cml0eShkaXNwYXRjaFNvdXJjZS5nZXQoKSwgR19QUklPUklUWV9ERUZBVUxUKTsKLQotICAgIGRp
c3BhdGNoT25Tb3VyY2UoZGlzcGF0Y2hTb3VyY2UuZ2V0KCksIGZ1bmN0aW9uLCByZWludGVycHJl
dF9jYXN0PEdTb3VyY2VGdW5jPigmV29ya1F1ZXVlOjpFdmVudFNvdXJjZTo6cGVyZm9ybVdvcmtP
bmNlKSk7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpkaXNwYXRjaEFmdGVyRGVsYXkoY29uc3QgRnVu
Y3Rpb248dm9pZCgpPiYgZnVuY3Rpb24sIGRvdWJsZSBkZWxheSkKLXsKLSAgICBHUmVmUHRyPEdT
b3VyY2U+IGRpc3BhdGNoU291cmNlID0gYWRvcHRHUmVmKGdfdGltZW91dF9zb3VyY2VfbmV3KHN0
YXRpY19jYXN0PGd1aW50PihkZWxheSAqIDEwMDApKSk7Ci0gICAgQVNTRVJUKGRpc3BhdGNoU291
cmNlKTsKLQotICAgIGRpc3BhdGNoT25Tb3VyY2UoZGlzcGF0Y2hTb3VyY2UuZ2V0KCksIGZ1bmN0
aW9uLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPigmV29ya1F1ZXVlOjpFdmVudFNvdXJj
ZTo6cGVyZm9ybVdvcmtPbmNlKSk7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpkaXNwYXRjaE9uVGVy
bWluYXRpb24oV2ViS2l0OjpQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyIHByb2Nlc3MsIGNvbnN0
IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQotewotICAgIEdSZWZQdHI8R1NvdXJjZT4gZGlz
cGF0Y2hTb3VyY2UgPSBhZG9wdEdSZWYoZ19jaGlsZF93YXRjaF9zb3VyY2VfbmV3KHByb2Nlc3Mp
KTsKLSAgICBBU1NFUlQoZGlzcGF0Y2hTb3VyY2UpOwotCi0gICAgZGlzcGF0Y2hPblNvdXJjZShk
aXNwYXRjaFNvdXJjZS5nZXQoKSwgZnVuY3Rpb24sIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1
bmM+KCZXb3JrUXVldWU6OkV2ZW50U291cmNlOjpwZXJmb3JtV29ya09uVGVybWluYXRpb24pKTsK
LX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL21hYy9Xb3JrUXVldWVNYWMu
Y3BwIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vbWFjL1dvcmtRdWV1ZU1hYy5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlNDczZWU1Y2M4NGU1ODQyOWIwNDM5Y2NkOTIxYWMy
YzQ5MmZmYWEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYktpdDIvUGxhdGZvcm0vbWFjL1dvcmtRdWV1ZU1hYy5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwxNzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJXb3JrUXVldWUuaCIKLQotI2luY2x1ZGUgPG1hY2gvbWFjaF9pbml0Lmg+Ci0jaW5j
bHVkZSA8bWFjaC9tYWNoX3BvcnQuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgotCi12
b2lkIFdvcmtRdWV1ZTo6ZXhlY3V0ZUZ1bmN0aW9uKHZvaWQqIGNvbnRleHQpCi17Ci0gICAgV29y
a1F1ZXVlKiBxdWV1ZSA9IHN0YXRpY19jYXN0PFdvcmtRdWV1ZSo+KGRpc3BhdGNoX2dldF9jb250
ZXh0KGRpc3BhdGNoX2dldF9jdXJyZW50X3F1ZXVlKCkpKTsKLSAgICBPd25QdHI8RnVuY3Rpb248
dm9pZCgpPiA+IGZ1bmN0aW9uID0gYWRvcHRQdHIoc3RhdGljX2Nhc3Q8RnVuY3Rpb248dm9pZCgp
Pio+KGNvbnRleHQpKTsKLSAgICAKLSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihx
dWV1ZS0+bV9pc1ZhbGlkTXV0ZXgpOwotICAgICAgICBpZiAoIXF1ZXVlLT5tX2lzVmFsaWQpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgKCpmdW5jdGlvbikoKTsKLX0KLQotdm9p
ZCBXb3JrUXVldWU6OmRpc3BhdGNoKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQot
ewotICAgIGRpc3BhdGNoX2FzeW5jX2YobV9kaXNwYXRjaFF1ZXVlLCBuZXcgRnVuY3Rpb248dm9p
ZCgpPihmdW5jdGlvbiksIGV4ZWN1dGVGdW5jdGlvbik7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpk
aXNwYXRjaEFmdGVyRGVsYXkoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24sIGRvdWJs
ZSBkZWxheSkKLXsKLSAgICBkaXNwYXRjaF90aW1lX3QgZGVsYXlUaW1lID0gZGlzcGF0Y2hfdGlt
ZShESVNQQVRDSF9USU1FX05PVywgZGVsYXkgKiBOU0VDX1BFUl9TRUMpOwotCi0gICAgZGlzcGF0
Y2hfYWZ0ZXJfZihkZWxheVRpbWUsIG1fZGlzcGF0Y2hRdWV1ZSwgbmV3IEZ1bmN0aW9uPHZvaWQo
KT4oZnVuY3Rpb24pLCBleGVjdXRlRnVuY3Rpb24pOwotfQotCi1jbGFzcyBXb3JrUXVldWU6OkV2
ZW50U291cmNlIHsKLXB1YmxpYzoKLSAgICBFdmVudFNvdXJjZShNYWNoUG9ydEV2ZW50VHlwZSBl
dmVudFR5cGUsIGRpc3BhdGNoX3NvdXJjZV90IGRpc3BhdGNoU291cmNlLCBjb25zdCBGdW5jdGlv
bjx2b2lkKCk+JiBmdW5jdGlvbikKLSAgICAgICAgOiBtX2V2ZW50VHlwZShldmVudFR5cGUpCi0g
ICAgICAgICwgbV9kaXNwYXRjaFNvdXJjZShkaXNwYXRjaFNvdXJjZSkKLSAgICAgICAgLCBtX2Z1
bmN0aW9uKGZ1bmN0aW9uKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgZGlzcGF0Y2hfc291cmNl
X3QgZGlzcGF0Y2hTb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX2Rpc3BhdGNoU291cmNlOyB9Ci0g
ICAgCi0gICAgc3RhdGljIHZvaWQgZXZlbnRIYW5kbGVyKHZvaWQqIHNvdXJjZSkgCi0gICAgewot
ICAgICAgICBFdmVudFNvdXJjZSogZXZlbnRTb3VyY2UgPSBzdGF0aWNfY2FzdDxFdmVudFNvdXJj
ZSo+KHNvdXJjZSk7Ci0gICAgICAgIAotICAgICAgICBldmVudFNvdXJjZS0+bV9mdW5jdGlvbigp
OwotICAgIH0KLSAgICAKLSAgICBzdGF0aWMgdm9pZCBjYW5jZWxIYW5kbGVyKHZvaWQqIHNvdXJj
ZSkKLSAgICB7Ci0gICAgICAgIEV2ZW50U291cmNlKiBldmVudFNvdXJjZSA9IHN0YXRpY19jYXN0
PEV2ZW50U291cmNlKj4oc291cmNlKTsKLSAgICAgICAgCi0gICAgICAgIG1hY2hfcG9ydF90IG1h
Y2hQb3J0ID0gZGlzcGF0Y2hfc291cmNlX2dldF9oYW5kbGUoZXZlbnRTb3VyY2UtPm1fZGlzcGF0
Y2hTb3VyY2UpOwotICAgICAgICAKLSAgICAgICAgc3dpdGNoIChldmVudFNvdXJjZS0+bV9ldmVu
dFR5cGUpIHsKLSAgICAgICAgY2FzZSBNYWNoUG9ydERhdGFBdmFpbGFibGU6Ci0gICAgICAgICAg
ICAvLyBSZWxlYXNlIG91ciByZWNlaXZlIHJpZ2h0LgotICAgICAgICAgICAgbWFjaF9wb3J0X21v
ZF9yZWZzKG1hY2hfdGFza19zZWxmKCksIG1hY2hQb3J0LCBNQUNIX1BPUlRfUklHSFRfUkVDRUlW
RSwgLTEpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTWFjaFBvcnREZWFkTmFt
ZU5vdGlmaWNhdGlvbjoKLSAgICAgICAgICAgIC8vIFJlbGVhc2Ugb3VyIHNlbmQgcmlnaHQuCi0g
ICAgICAgICAgICBtYWNoX3BvcnRfZGVhbGxvY2F0ZShtYWNoX3Rhc2tfc2VsZigpLCBtYWNoUG9y
dCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBzdGF0
aWMgdm9pZCBmaW5hbGl6ZUhhbmRsZXIodm9pZCogc291cmNlKQotICAgIHsKLSAgICAgICAgRXZl
bnRTb3VyY2UqIGV2ZW50U291cmNlID0gc3RhdGljX2Nhc3Q8RXZlbnRTb3VyY2UqPihzb3VyY2Up
OwotICAgICAgICAKLSAgICAgICAgZGVsZXRlIGV2ZW50U291cmNlOwotICAgIH0KLSAgICAKLXBy
aXZhdGU6Ci0gICAgTWFjaFBvcnRFdmVudFR5cGUgbV9ldmVudFR5cGU7Ci0gICAgCi0gICAgLy8g
VGhpcyBpcyBhIHdlYWsgcmVmZXJlbmNlLCBzaW5jZSBtX2Rpc3BhdGNoU291cmNlIHJlZmVyZW5j
ZXMgdGhlIGV2ZW50IHNvdXJjZS4KLSAgICBkaXNwYXRjaF9zb3VyY2VfdCBtX2Rpc3BhdGNoU291
cmNlOwotCi0gICAgRnVuY3Rpb248dm9pZCgpPiBtX2Z1bmN0aW9uOwotfTsKLQotdm9pZCBXb3Jr
UXVldWU6OnJlZ2lzdGVyTWFjaFBvcnRFdmVudEhhbmRsZXIobWFjaF9wb3J0X3QgbWFjaFBvcnQs
IE1hY2hQb3J0RXZlbnRUeXBlIGV2ZW50VHlwZSwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVu
Y3Rpb24pCi17Ci0gICAgZGlzcGF0Y2hfc291cmNlX3R5cGVfdCBzb3VyY2VUeXBlID0gMDsKLSAg
ICBzd2l0Y2ggKGV2ZW50VHlwZSkgewotICAgIGNhc2UgTWFjaFBvcnREYXRhQXZhaWxhYmxlOgot
ICAgICAgICBzb3VyY2VUeXBlID0gRElTUEFUQ0hfU09VUkNFX1RZUEVfTUFDSF9SRUNWOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIE1hY2hQb3J0RGVhZE5hbWVOb3RpZmljYXRpb246Ci0gICAg
ICAgIHNvdXJjZVR5cGUgPSBESVNQQVRDSF9TT1VSQ0VfVFlQRV9NQUNIX1NFTkQ7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLSAgICAKLSAgICBkaXNwYXRjaF9zb3VyY2VfdCBkaXNwYXRjaFNvdXJj
ZSA9IGRpc3BhdGNoX3NvdXJjZV9jcmVhdGUoc291cmNlVHlwZSwgbWFjaFBvcnQsIDAsIG1fZGlz
cGF0Y2hRdWV1ZSk7Ci0gICAgCi0gICAgRXZlbnRTb3VyY2UqIGV2ZW50U291cmNlID0gbmV3IEV2
ZW50U291cmNlKGV2ZW50VHlwZSwgZGlzcGF0Y2hTb3VyY2UsIGZ1bmN0aW9uKTsKLSAgICBkaXNw
YXRjaF9zZXRfY29udGV4dChkaXNwYXRjaFNvdXJjZSwgZXZlbnRTb3VyY2UpOwotICAgIAotICAg
IGRpc3BhdGNoX3NvdXJjZV9zZXRfZXZlbnRfaGFuZGxlcl9mKGRpc3BhdGNoU291cmNlLCAmRXZl
bnRTb3VyY2U6OmV2ZW50SGFuZGxlcik7Ci0gICAgZGlzcGF0Y2hfc291cmNlX3NldF9jYW5jZWxf
aGFuZGxlcl9mKGRpc3BhdGNoU291cmNlLCAmRXZlbnRTb3VyY2U6OmNhbmNlbEhhbmRsZXIpOwot
ICAgIGRpc3BhdGNoX3NldF9maW5hbGl6ZXJfZihkaXNwYXRjaFNvdXJjZSwgJkV2ZW50U291cmNl
OjpmaW5hbGl6ZUhhbmRsZXIpOwotICAgIAotICAgIC8vIEFkZCB0aGUgc291cmNlIHRvIG91ciBz
ZXQgb2Ygc291cmNlcy4KLSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2V2ZW50
U291cmNlc011dGV4KTsKLSAgICAgICAgCi0gICAgICAgIEFTU0VSVCghbV9ldmVudFNvdXJjZXMu
Y29udGFpbnMobWFjaFBvcnQpKTsKLSAgICAgICAgCi0gICAgICAgIG1fZXZlbnRTb3VyY2VzLnNl
dChtYWNoUG9ydCwgZXZlbnRTb3VyY2UpOwotICAgICAgICAKLSAgICAgICAgLy8gQW5kIHN0YXJ0
IGl0IQotICAgICAgICBkaXNwYXRjaF9yZXN1bWUoZGlzcGF0Y2hTb3VyY2UpOwotICAgIH0KLX0K
LQotdm9pZCBXb3JrUXVldWU6OnVucmVnaXN0ZXJNYWNoUG9ydEV2ZW50SGFuZGxlcihtYWNoX3Bv
cnRfdCBtYWNoUG9ydCkKLXsKLSAgICBBU1NFUlQobWFjaFBvcnQpOwotICAgIAotICAgIE11dGV4
TG9ja2VyIGxvY2tlcihtX2V2ZW50U291cmNlc011dGV4KTsKLSAgICAKLSAgICBIYXNoTWFwPG1h
Y2hfcG9ydF90LCBFdmVudFNvdXJjZSo+OjppdGVyYXRvciBpdCA9IG1fZXZlbnRTb3VyY2VzLmZp
bmQobWFjaFBvcnQpOwotICAgIEFTU0VSVChpdCAhPSBtX2V2ZW50U291cmNlcy5lbmQoKSk7Ci0g
ICAgCi0gICAgQVNTRVJUKG1fZXZlbnRTb3VyY2VzLmNvbnRhaW5zKG1hY2hQb3J0KSk7Ci0KLSAg
ICBFdmVudFNvdXJjZSogZXZlbnRTb3VyY2UgPSBpdC0+c2Vjb25kOwotICAgIC8vIENhbmNlbCBh
bmQgcmVsZWFzZSB0aGUgc291cmNlLiBJdCB3aWxsIGJlIGRlbGV0ZWQgaW4gaXRzIGZpbmFsaXpl
IGhhbmRsZXIuCi0gICAgZGlzcGF0Y2hfc291cmNlX2NhbmNlbChldmVudFNvdXJjZS0+ZGlzcGF0
Y2hTb3VyY2UoKSk7Ci0gICAgZGlzcGF0Y2hfcmVsZWFzZShldmVudFNvdXJjZS0+ZGlzcGF0Y2hT
b3VyY2UoKSk7Ci0KLSAgICBtX2V2ZW50U291cmNlcy5yZW1vdmUoaXQpOyAgICAKLX0KLQotdm9p
ZCBXb3JrUXVldWU6OnBsYXRmb3JtSW5pdGlhbGl6ZShjb25zdCBjaGFyKiBuYW1lKQotewotICAg
IG1fZGlzcGF0Y2hRdWV1ZSA9IGRpc3BhdGNoX3F1ZXVlX2NyZWF0ZShuYW1lLCAwKTsKLSAgICBk
aXNwYXRjaF9zZXRfY29udGV4dChtX2Rpc3BhdGNoUXVldWUsIHRoaXMpOwotfQotCi12b2lkIFdv
cmtRdWV1ZTo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKLXsKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0g
ICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZXZlbnRTb3VyY2VzTXV0ZXgpOwotICAgIEFTU0VSVCht
X2V2ZW50U291cmNlcy5pc0VtcHR5KCkpOwotI2VuZGlmCi0KLSAgICBkaXNwYXRjaF9yZWxlYXNl
KG1fZGlzcGF0Y2hRdWV1ZSk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9y
bS9xdC9Xb3JrUXVldWVRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9xdC9Xb3JrUXVl
dWVRdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhYTJiZTNkMGI4Yjc0ODUy
OWEyODhmZWUyZDU5NGZkYjllNDk5MjYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vcXQvV29ya1F1ZXVlUXQuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsMTMwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEw
IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV29ya1F1ZXVlLmgiCi0KLSNpbmNsdWRl
IDxRTG9jYWxTb2NrZXQ+Ci0jaW5jbHVkZSA8UU9iamVjdD4KLSNpbmNsdWRlIDxRVGhyZWFkPgot
I2luY2x1ZGUgPFFQcm9jZXNzPgotI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4K
LSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+Ci0KLWNsYXNzIFdvcmtRdWV1ZTo6V29ya0l0ZW1R
dCA6IHB1YmxpYyBRT2JqZWN0IHsKLSAgICBRX09CSkVDVAotcHVibGljOgotICAgIFdvcmtJdGVt
UXQoV29ya1F1ZXVlKiB3b3JrUXVldWUsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9u
KQotICAgICAgICA6IG1fcXVldWUod29ya1F1ZXVlKQotICAgICAgICAsIG1fc291cmNlKDApCi0g
ICAgICAgICwgbV9zaWduYWwoMCkKLSAgICAgICAgLCBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQotICAg
IHsKLSAgICB9Ci0KLSAgICBXb3JrSXRlbVF0KFdvcmtRdWV1ZSogd29ya1F1ZXVlLCBRT2JqZWN0
KiBzb3VyY2UsIGNvbnN0IGNoYXIqIHNpZ25hbCwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVu
Y3Rpb24pCi0gICAgICAgIDogbV9xdWV1ZSh3b3JrUXVldWUpCi0gICAgICAgICwgbV9zb3VyY2Uo
c291cmNlKQotICAgICAgICAsIG1fc2lnbmFsKHNpZ25hbCkKLSAgICAgICAgLCBtX2Z1bmN0aW9u
KGZ1bmN0aW9uKQotICAgIHsKLSAgICAgICAgY29ubmVjdChtX3NvdXJjZSwgbV9zaWduYWwsIFNM
T1QoZXhlY3V0ZSgpKSwgUXQ6OlF1ZXVlZENvbm5lY3Rpb24pOwotICAgIH0KLQotICAgIH5Xb3Jr
SXRlbVF0KCkKLSAgICB7Ci0gICAgfQotCi0gICAgUV9TTE9UIHZvaWQgZXhlY3V0ZSgpIAotICAg
IHsgCi0gICAgICAgIGlmIChtX3F1ZXVlLT5tX2lzVmFsaWQpCi0gICAgICAgICAgICBtX2Z1bmN0
aW9uKCk7Ci0gICAgfQotCi0gICAgUV9TTE9UIHZvaWQgZXhlY3V0ZUFuZERlbGV0ZSgpCi0gICAg
ewotICAgICAgICBleGVjdXRlKCk7Ci0gICAgICAgIGRlbGV0ZSB0aGlzOwotICAgIH0KLQotICAg
IHZpcnR1YWwgdm9pZCB0aW1lckV2ZW50KFFUaW1lckV2ZW50KikKLSAgICB7Ci0gICAgICAgIGV4
ZWN1dGVBbmREZWxldGUoKTsKLSAgICB9Ci0KLSAgICBXb3JrUXVldWUqIG1fcXVldWU7Ci0gICAg
UU9iamVjdCogbV9zb3VyY2U7Ci0gICAgY29uc3QgY2hhciogbV9zaWduYWw7Ci0gICAgRnVuY3Rp
b248dm9pZCgpPiBtX2Z1bmN0aW9uOwotfTsKLQotUVNvY2tldE5vdGlmaWVyKiBXb3JrUXVldWU6
OnJlZ2lzdGVyU29ja2V0RXZlbnRIYW5kbGVyKGludCBzb2NrZXREZXNjcmlwdG9yLCBRU29ja2V0
Tm90aWZpZXI6OlR5cGUgdHlwZSwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCi17
Ci0gICAgQVNTRVJUKG1fd29ya1RocmVhZCk7Ci0KLSAgICBRU29ja2V0Tm90aWZpZXIqIG5vdGlm
aWVyID0gbmV3IFFTb2NrZXROb3RpZmllcihzb2NrZXREZXNjcmlwdG9yLCB0eXBlLCAwKTsKLSAg
ICBub3RpZmllci0+c2V0RW5hYmxlZChmYWxzZSk7Ci0gICAgbm90aWZpZXItPm1vdmVUb1RocmVh
ZChtX3dvcmtUaHJlYWQpOwotICAgIFdvcmtRdWV1ZTo6V29ya0l0ZW1RdCogaXRlbVF0ID0gbmV3
IFdvcmtRdWV1ZTo6V29ya0l0ZW1RdCh0aGlzLCBub3RpZmllciwgU0lHTkFMKGFjdGl2YXRlZChp
bnQpKSwgZnVuY3Rpb24pOwotICAgIGl0ZW1RdC0+bW92ZVRvVGhyZWFkKG1fd29ya1RocmVhZCk7
Ci0gICAgbm90aWZpZXItPnNldEVuYWJsZWQodHJ1ZSk7Ci0gICAgcmV0dXJuIG5vdGlmaWVyOwot
fQotCi12b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXplKGNvbnN0IGNoYXIqKQotewot
ICAgIG1fd29ya1RocmVhZCA9IG5ldyBRVGhyZWFkKCk7Ci0gICAgbV93b3JrVGhyZWFkLT5zdGFy
dCgpOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKLXsKLSAgICBt
X3dvcmtUaHJlYWQtPmV4aXQoKTsKLSAgICBtX3dvcmtUaHJlYWQtPndhaXQoKTsKLSAgICBkZWxl
dGUgbV93b3JrVGhyZWFkOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2goY29uc3QgRnVu
Y3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCi17Ci0gICAgV29ya1F1ZXVlOjpXb3JrSXRlbVF0KiBp
dGVtUXQgPSBuZXcgV29ya1F1ZXVlOjpXb3JrSXRlbVF0KHRoaXMsIGZ1bmN0aW9uKTsKLSAgICBp
dGVtUXQtPm1vdmVUb1RocmVhZChtX3dvcmtUaHJlYWQpOwotICAgIFFNZXRhT2JqZWN0OjppbnZv
a2VNZXRob2QoaXRlbVF0LCAiZXhlY3V0ZUFuZERlbGV0ZSIsIFF0OjpRdWV1ZWRDb25uZWN0aW9u
KTsKLX0KLQotdm9pZCBXb3JrUXVldWU6OmRpc3BhdGNoQWZ0ZXJEZWxheShjb25zdCBGdW5jdGlv
bjx2b2lkKCk+JiBmdW5jdGlvbiwgZG91YmxlIGRlbGF5SW5TZWNvbmQpCi17Ci0gICAgV29ya1F1
ZXVlOjpXb3JrSXRlbVF0KiBpdGVtUXQgPSBuZXcgV29ya1F1ZXVlOjpXb3JrSXRlbVF0KHRoaXMs
IGZ1bmN0aW9uKTsKLSAgICBpdGVtUXQtPnN0YXJ0VGltZXIoc3RhdGljX2Nhc3Q8aW50PihkZWxh
eUluU2Vjb25kICogMTAwMCkpOwotICAgIGl0ZW1RdC0+bW92ZVRvVGhyZWFkKG1fd29ya1RocmVh
ZCk7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpkaXNwYXRjaE9uVGVybWluYXRpb24oV2ViS2l0OjpQ
bGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyIHByb2Nlc3MsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4m
IGZ1bmN0aW9uKQotewotICAgIFdvcmtRdWV1ZTo6V29ya0l0ZW1RdCogaXRlbVF0ID0gbmV3IFdv
cmtRdWV1ZTo6V29ya0l0ZW1RdCh0aGlzLCBwcm9jZXNzLCBTSUdOQUwoZmluaXNoZWQoaW50LCBR
UHJvY2Vzczo6RXhpdFN0YXR1cykpLCBmdW5jdGlvbik7Ci0gICAgaXRlbVF0LT5tb3ZlVG9UaHJl
YWQobV93b3JrVGhyZWFkKTsKLX0KLQotI2luY2x1ZGUgIldvcmtRdWV1ZVF0Lm1vYyIKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3dpbi9Xb3JrUXVldWVXaW4uY3BwIGIvU291
cmNlL1dlYktpdDIvUGxhdGZvcm0vd2luL1dvcmtRdWV1ZVdpbi5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGFhYmFkYmRhODk1ZTA3ZDllZTUzMzA3OTVjYzk0ZTYxN2ViOTFkN2Iu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YktpdDIvUGxhdGZvcm0vd2luL1dvcmtRdWV1ZVdpbi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwy
OTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJX
b3JrUXVldWUuaCIKLQotI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KLSNpbmNs
dWRlIDx3dGYvVGhyZWFkaW5nLmg+Ci0KLWlubGluZSBXb3JrUXVldWU6OldvcmtJdGVtV2luOjpX
b3JrSXRlbVdpbihjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbiwgV29ya1F1ZXVlKiBx
dWV1ZSkKLSAgICA6IG1fZnVuY3Rpb24oZnVuY3Rpb24pCi0gICAgLCBtX3F1ZXVlKHF1ZXVlKQot
ewotfQotCi1QYXNzUmVmUHRyPFdvcmtRdWV1ZTo6V29ya0l0ZW1XaW4+IFdvcmtRdWV1ZTo6V29y
a0l0ZW1XaW46OmNyZWF0ZShjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbiwgV29ya1F1
ZXVlKiBxdWV1ZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdvcmtJdGVtV2luKGZ1bmN0
aW9uLCBxdWV1ZSkpOwotfQotCi1Xb3JrUXVldWU6OldvcmtJdGVtV2luOjp+V29ya0l0ZW1XaW4o
KQotewotfQotCi1pbmxpbmUgV29ya1F1ZXVlOjpIYW5kbGVXb3JrSXRlbTo6SGFuZGxlV29ya0l0
ZW0oSEFORExFIGhhbmRsZSwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24sIFdvcmtR
dWV1ZSogcXVldWUpCi0gICAgOiBXb3JrSXRlbVdpbihmdW5jdGlvbiwgcXVldWUpCi0gICAgLCBt
X2hhbmRsZShoYW5kbGUpCi0gICAgLCBtX3dhaXRIYW5kbGUoMCkKLXsKLSAgICBBU1NFUlRfQVJH
KGhhbmRsZSwgaGFuZGxlKTsKLX0KLQotUGFzc1JlZlB0cjxXb3JrUXVldWU6OkhhbmRsZVdvcmtJ
dGVtPiBXb3JrUXVldWU6OkhhbmRsZVdvcmtJdGVtOjpjcmVhdGVCeUFkb3B0aW5nSGFuZGxlKEhB
TkRMRSBoYW5kbGUsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uLCBXb3JrUXVldWUq
IHF1ZXVlKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgSGFuZGxlV29ya0l0ZW0oaGFuZGxl
LCBmdW5jdGlvbiwgcXVldWUpKTsKLX0KLQotV29ya1F1ZXVlOjpIYW5kbGVXb3JrSXRlbTo6fkhh
bmRsZVdvcmtJdGVtKCkKLXsKLSAgICA6OkNsb3NlSGFuZGxlKG1faGFuZGxlKTsKLX0KLQotdm9p
ZCBXb3JrUXVldWU6OmhhbmRsZUNhbGxiYWNrKHZvaWQqIGNvbnRleHQsIEJPT0xFQU4gdGltZXJP
cldhaXRGaXJlZCkKLXsKLSAgICBBU1NFUlRfQVJHKGNvbnRleHQsIGNvbnRleHQpOwotICAgIEFT
U0VSVF9BUkcodGltZXJPcldhaXRGaXJlZCwgIXRpbWVyT3JXYWl0RmlyZWQpOwotCi0gICAgV29y
a0l0ZW1XaW4qIGl0ZW0gPSBzdGF0aWNfY2FzdDxXb3JrSXRlbVdpbio+KGNvbnRleHQpOwotICAg
IFdvcmtRdWV1ZSogcXVldWUgPSBpdGVtLT5xdWV1ZSgpOwotCi0gICAgewotICAgICAgICBNdXRl
eExvY2tlciBsb2NrKHF1ZXVlLT5tX3dvcmtJdGVtUXVldWVMb2NrKTsKLSAgICAgICAgcXVldWUt
Pm1fd29ya0l0ZW1RdWV1ZS5hcHBlbmQoaXRlbSk7Ci0KLSAgICAgICAgLy8gSWYgbm8gb3RoZXIg
dGhyZWFkIGlzIHBlcmZvcm1pbmcgd29yaywgd2UgY2FuIGRvIGl0IG9uIHRoaXMgdGhyZWFkLgot
ICAgICAgICBpZiAoIXF1ZXVlLT50cnlSZWdpc3RlckFzV29ya1RocmVhZCgpKSB7Ci0gICAgICAg
ICAgICAvLyBTb21lIG90aGVyIHRocmVhZCBpcyBwZXJmb3JtaW5nIHdvcmsuIFNpbmNlIHdlIGhv
bGQgdGhlIHF1ZXVlIGxvY2ssIHdlIGNhbiBiZSBzdXJlCi0gICAgICAgICAgICAvLyB0aGF0IHRo
ZSB3b3JrIHRocmVhZCBpcyBub3QgZXhpdGluZyBkdWUgdG8gYW4gZW1wdHkgcXVldWUgYW5kIHdp
bGwgcHJvY2VzcyB0aGUgd29yawotICAgICAgICAgICAgLy8gaXRlbSB3ZSBqdXN0IGFkZGVkIHRv
IGl0LiBJZiB3ZSB3ZXJlbid0IGhvbGRpbmcgdGhlIGxvY2sgd2UnZCBoYXZlIHRvIHNpZ25hbAot
ICAgICAgICAgICAgLy8gbV9wZXJmb3JtV29ya0V2ZW50IHRvIG1ha2Ugc3VyZSB0aGUgd29yayBp
dGVtIGdvdCBwaWNrZWQgdXAuCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBxdWV1ZS0+cGVyZm9ybVdvcmtPblJlZ2lzdGVyZWRXb3JrVGhyZWFkKCk7Ci19Ci0K
LXZvaWQgV29ya1F1ZXVlOjpyZWdpc3RlckhhbmRsZShIQU5ETEUgaGFuZGxlLCBjb25zdCBGdW5j
dGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKLXsKLSAgICBSZWZQdHI8SGFuZGxlV29ya0l0ZW0+IGhh
bmRsZUl0ZW0gPSBIYW5kbGVXb3JrSXRlbTo6Y3JlYXRlQnlBZG9wdGluZ0hhbmRsZShoYW5kbGUs
IGZ1bmN0aW9uLCB0aGlzKTsKLQotICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9jayhtX2hh
bmRsZXNMb2NrKTsKLSAgICAgICAgQVNTRVJUX0FSRyhoYW5kbGUsICFtX2hhbmRsZXMuY29udGFp
bnMoaGFuZGxlKSk7Ci0gICAgICAgIG1faGFuZGxlcy5zZXQoaGFuZGxlLCBoYW5kbGVJdGVtKTsK
LSAgICB9Ci0KLSAgICBIQU5ETEUgd2FpdEhhbmRsZTsKLSAgICBpZiAoITo6UmVnaXN0ZXJXYWl0
Rm9yU2luZ2xlT2JqZWN0KCZ3YWl0SGFuZGxlLCBoYW5kbGUsIGhhbmRsZUNhbGxiYWNrLCBoYW5k
bGVJdGVtLmdldCgpLCBJTkZJTklURSwgV1RfRVhFQ1VURURFRkFVTFQpKSB7Ci0gICAgICAgIERX
T1JEIGVycm9yID0gOjpHZXRMYXN0RXJyb3IoKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgfQotICAgIGhhbmRsZUl0ZW0tPnNldFdhaXRIYW5kbGUod2FpdEhhbmRsZSk7Ci19
Ci0KLXZvaWQgV29ya1F1ZXVlOjp1bnJlZ2lzdGVyQW5kQ2xvc2VIYW5kbGUoSEFORExFIGhhbmRs
ZSkKLXsKLSAgICBSZWZQdHI8SGFuZGxlV29ya0l0ZW0+IGl0ZW07Ci0gICAgewotICAgICAgICBN
dXRleExvY2tlciBsb2NrZXIobV9oYW5kbGVzTG9jayk7Ci0gICAgICAgIEFTU0VSVF9BUkcoaGFu
ZGxlLCBtX2hhbmRsZXMuY29udGFpbnMoaGFuZGxlKSk7Ci0gICAgICAgIGl0ZW0gPSBtX2hhbmRs
ZXMudGFrZShoYW5kbGUpOwotICAgIH0KLQotICAgIHVucmVnaXN0ZXJXYWl0QW5kRGVzdHJveUl0
ZW1Tb29uKGl0ZW0ucmVsZWFzZSgpKTsKLX0KLQotRFdPUkQgV29ya1F1ZXVlOjp3b3JrVGhyZWFk
Q2FsbGJhY2sodm9pZCogY29udGV4dCkKLXsKLSAgICBBU1NFUlRfQVJHKGNvbnRleHQsIGNvbnRl
eHQpOwotCi0gICAgV29ya1F1ZXVlKiBxdWV1ZSA9IHN0YXRpY19jYXN0PFdvcmtRdWV1ZSo+KGNv
bnRleHQpOwotCi0gICAgaWYgKCFxdWV1ZS0+dHJ5UmVnaXN0ZXJBc1dvcmtUaHJlYWQoKSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICBxdWV1ZS0+cGVyZm9ybVdvcmtPblJlZ2lzdGVyZWRXb3Jr
VGhyZWFkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpwZXJmb3JtV29y
a09uUmVnaXN0ZXJlZFdvcmtUaHJlYWQoKQotewotICAgIEFTU0VSVChtX2lzV29ya1RocmVhZFJl
Z2lzdGVyZWQpOwotCi0gICAgYm9vbCBpc1ZhbGlkID0gdHJ1ZTsKLQotICAgIG1fd29ya0l0ZW1R
dWV1ZUxvY2subG9jaygpOwotCi0gICAgd2hpbGUgKGlzVmFsaWQgJiYgIW1fd29ya0l0ZW1RdWV1
ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgVmVjdG9yPFJlZlB0cjxXb3JrSXRlbVdpbj4gPiB3b3Jr
SXRlbVF1ZXVlOwotICAgICAgICBtX3dvcmtJdGVtUXVldWUuc3dhcCh3b3JrSXRlbVF1ZXVlKTsK
LQotICAgICAgICAvLyBBbGxvdyBtb3JlIHdvcmsgdG8gYmUgc2NoZWR1bGVkIHdoaWxlIHdlJ3Jl
IG5vdCB1c2luZyB0aGUgcXVldWUgZGlyZWN0bHkuCi0gICAgICAgIG1fd29ya0l0ZW1RdWV1ZUxv
Y2sudW5sb2NrKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd29ya0l0ZW1RdWV1
ZS5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1faXNWYWxp
ZE11dGV4KTsKLSAgICAgICAgICAgIGlzVmFsaWQgPSBtX2lzVmFsaWQ7Ci0gICAgICAgICAgICBp
ZiAoIWlzVmFsaWQpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB3b3JrSXRl
bVF1ZXVlW2ldLT5mdW5jdGlvbigpKCk7Ci0gICAgICAgIH0KLSAgICAgICAgbV93b3JrSXRlbVF1
ZXVlTG9jay5sb2NrKCk7Ci0gICAgfQotCi0gICAgLy8gT25lIGludmFyaWFudCB3ZSBtYWludGFp
biBpcyB0aGF0IGFueSB3b3JrIHNjaGVkdWxlZCB3aGlsZSBhIHdvcmsgdGhyZWFkIGlzIHJlZ2lz
dGVyZWQgd2lsbAotICAgIC8vIGJlIGhhbmRsZWQgYnkgdGhhdCB3b3JrIHRocmVhZC4gVW5yZWdp
c3RlciBhcyB0aGUgd29yayB0aHJlYWQgd2hpbGUgdGhlIHF1ZXVlIGxvY2sgaXMgc3RpbGwKLSAg
ICAvLyBoZWxkIHNvIHRoYXQgbm8gd29yayBjYW4gYmUgc2NoZWR1bGVkIHdoaWxlIHdlJ3JlIHN0
aWxsIHJlZ2lzdGVyZWQuCi0gICAgdW5yZWdpc3RlckFzV29ya1RocmVhZCgpOwotCi0gICAgbV93
b3JrSXRlbVF1ZXVlTG9jay51bmxvY2soKTsKLX0KLQotdm9pZCBXb3JrUXVldWU6OnBsYXRmb3Jt
SW5pdGlhbGl6ZShjb25zdCBjaGFyKiBuYW1lKQotewotICAgIG1faXNXb3JrVGhyZWFkUmVnaXN0
ZXJlZCA9IDA7Ci0gICAgbV90aW1lclF1ZXVlID0gOjpDcmVhdGVUaW1lclF1ZXVlKCk7Ci0gICAg
QVNTRVJUX1dJVEhfTUVTU0FHRShtX3RpbWVyUXVldWUsICI6OkNyZWF0ZVRpbWVyUXVldWUgZmFp
bGVkIHdpdGggZXJyb3IgJWx1IiwgOjpHZXRMYXN0RXJyb3IoKSk7Ci19Ci0KLWJvb2wgV29ya1F1
ZXVlOjp0cnlSZWdpc3RlckFzV29ya1RocmVhZCgpCi17Ci0gICAgTE9ORyByZXN1bHQgPSA6Oklu
dGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlKCZtX2lzV29ya1RocmVhZFJlZ2lzdGVyZWQsIDEsIDAp
OwotICAgIEFTU0VSVCghcmVzdWx0IHx8IHJlc3VsdCA9PSAxKTsKLSAgICByZXR1cm4gIXJlc3Vs
dDsKLX0KLQotdm9pZCBXb3JrUXVldWU6OnVucmVnaXN0ZXJBc1dvcmtUaHJlYWQoKQotewotICAg
IExPTkcgcmVzdWx0ID0gOjpJbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZSgmbV9pc1dvcmtUaHJl
YWRSZWdpc3RlcmVkLCAwLCAxKTsKLSAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0ID09
IDEpOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKLXsKLSNpZiAh
QVNTRVJUX0RJU0FCTEVECi0gICAgTXV0ZXhMb2NrZXIgbG9jayhtX2hhbmRsZXNMb2NrKTsKLSAg
ICBBU1NFUlQobV9oYW5kbGVzLmlzRW1wdHkoKSk7Ci0jZW5kaWYKLQotICAgIC8vIEZJWE1FOiBX
ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IGFueSB0aW1lci1xdWV1ZSB0aW1lcnMgdGhhdCBmaXJlIGFm
dGVyIHRoaXMgcG9pbnQgZG9uJ3QgdHJ5IHRvCi0gICAgLy8gYWNjZXNzIHRoaXMgV29ya1F1ZXVl
IDxodHRwOi8vd2Via2l0Lm9yZy9iLzQ0NjkwPi4KLSAgICA6OkRlbGV0ZVRpbWVyUXVldWVFeCht
X3RpbWVyUXVldWUsIDApOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2goY29uc3QgRnVu
Y3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCi17Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fd29y
a0l0ZW1RdWV1ZUxvY2spOwotCi0gICAgbV93b3JrSXRlbVF1ZXVlLmFwcGVuZChXb3JrSXRlbVdp
bjo6Y3JlYXRlKGZ1bmN0aW9uLCB0aGlzKSk7Ci0KLSAgICAvLyBTcGF3biBhIHdvcmsgdGhyZWFk
IHRvIHBlcmZvcm0gdGhlIHdvcmsgd2UganVzdCBhZGRlZC4gQXMgYW4gb3B0aW1pemF0aW9uLCB3
ZSBhdm9pZAotICAgIC8vIHNwYXduaW5nIHRoZSB0aHJlYWQgaWYgYSB3b3JrIHRocmVhZCBpcyBh
bHJlYWR5IHJlZ2lzdGVyZWQuIFRoaXMgcHJldmVudHMgbXVsdGlwbGUgd29yawotICAgIC8vIHRo
cmVhZHMgZnJvbSBiZWluZyBzcGF3bmVkIGluIG1vc3QgY2FzZXMuIChOb3RlIHRoYXQgd2hlbiBh
IHdvcmsgdGhyZWFkIGhhcyBiZWVuIHNwYXduZWQgYnV0Ci0gICAgLy8gaGFzbid0IHJlZ2lzdGVy
ZWQgaXRzZWxmIHlldCwgbV9pc1dvcmtUaHJlYWRSZWdpc3RlcmVkIHdpbGwgYmUgZmFsc2UgYW5k
IHdlJ2xsIGVuZCB1cAotICAgIC8vIHNwYXduaW5nIGEgc2Vjb25kIHdvcmsgdGhyZWFkIGhlcmUu
IEJ1dCB3b3JrIHRocmVhZCByZWdpc3RyYXRpb24gcHJvY2VzcyB3aWxsIGVuc3VyZSB0aGF0Ci0g
ICAgLy8gb25seSBvbmUgdGhyZWFkIGFjdHVhbGx5IGVuZHMgdXAgcGVyZm9ybWluZyB3b3JrLikK
LSAgICBpZiAoIW1faXNXb3JrVGhyZWFkUmVnaXN0ZXJlZCkKLSAgICAgICAgOjpRdWV1ZVVzZXJX
b3JrSXRlbSh3b3JrVGhyZWFkQ2FsbGJhY2ssIHRoaXMsIFdUX0VYRUNVVEVERUZBVUxUKTsKLX0K
LQotc3RydWN0IFRpbWVyQ29udGV4dCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxUaW1l
ckNvbnRleHQ+IHsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxUaW1lckNvbnRleHQ+IGNyZWF0ZSgp
IHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBUaW1lckNvbnRleHQpOyB9Ci0KLSAgICBXb3JrUXVldWUq
IHF1ZXVlOwotICAgIEZ1bmN0aW9uPHZvaWQoKT4gZnVuY3Rpb247Ci0gICAgTXV0ZXggdGltZXJN
dXRleDsKLSAgICBIQU5ETEUgdGltZXI7Ci0KLXByaXZhdGU6Ci0gICAgVGltZXJDb250ZXh0KCkg
OiBxdWV1ZSgwKSwgdGltZXIoMCkgeyB9Ci19OwotCi12b2lkIFdvcmtRdWV1ZTo6dGltZXJDYWxs
YmFjayh2b2lkKiBjb250ZXh0LCBCT09MRUFOIHRpbWVyT3JXYWl0RmlyZWQpCi17Ci0gICAgQVNT
RVJUX0FSRyhjb250ZXh0LCBjb250ZXh0KTsKLSAgICBBU1NFUlRfVU5VU0VEKHRpbWVyT3JXYWl0
RmlyZWQsIHRpbWVyT3JXYWl0RmlyZWQpOwotCi0gICAgLy8gQmFsYW5jZWQgYnkgbGVha1JlZiBp
biBzY2hlZHVsZVdvcmtBZnRlckRlbGF5LgotICAgIFJlZlB0cjxUaW1lckNvbnRleHQ+IHRpbWVy
Q29udGV4dCA9IGFkb3B0UmVmKHN0YXRpY19jYXN0PFRpbWVyQ29udGV4dCo+KGNvbnRleHQpKTsK
LQotICAgIHRpbWVyQ29udGV4dC0+cXVldWUtPmRpc3BhdGNoKHRpbWVyQ29udGV4dC0+ZnVuY3Rp
b24pOwotCi0gICAgTXV0ZXhMb2NrZXIgbG9jayh0aW1lckNvbnRleHQtPnRpbWVyTXV0ZXgpOwot
ICAgIEFTU0VSVCh0aW1lckNvbnRleHQtPnRpbWVyKTsKLSAgICBBU1NFUlQodGltZXJDb250ZXh0
LT5xdWV1ZS0+bV90aW1lclF1ZXVlKTsKLSAgICBpZiAoITo6RGVsZXRlVGltZXJRdWV1ZVRpbWVy
KHRpbWVyQ29udGV4dC0+cXVldWUtPm1fdGltZXJRdWV1ZSwgdGltZXJDb250ZXh0LT50aW1lciwg
MCkpCi0gICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoZmFsc2UsICI6OkRlbGV0ZVRpbWVyUXVl
dWVUaW1lciBmYWlsZWQgd2l0aCBlcnJvciAlbHUiLCA6OkdldExhc3RFcnJvcigpKTsKLX0KLQot
dm9pZCBXb3JrUXVldWU6OmRpc3BhdGNoQWZ0ZXJEZWxheShjb25zdCBGdW5jdGlvbjx2b2lkKCk+
JiBmdW5jdGlvbiwgZG91YmxlIGRlbGF5KQotewotICAgIEFTU0VSVChtX3RpbWVyUXVldWUpOwot
Ci0gICAgUmVmUHRyPFRpbWVyQ29udGV4dD4gY29udGV4dCA9IFRpbWVyQ29udGV4dDo6Y3JlYXRl
KCk7Ci0gICAgY29udGV4dC0+cXVldWUgPSB0aGlzOwotICAgIGNvbnRleHQtPmZ1bmN0aW9uID0g
ZnVuY3Rpb247Ci0KLSAgICB7Ci0gICAgICAgIC8vIFRoZSB0aW1lciBjYWxsYmFjayBjb3VsZCBm
aXJlIGJlZm9yZSA6OkNyZWF0ZVRpbWVyUXVldWVUaW1lciBldmVuIHJldHVybnMsIHNvIHdlIHBy
b3RlY3QKLSAgICAgICAgLy8gY29udGV4dC0+dGltZXIgd2l0aCBhIG11dGV4IHRvIGVuc3VyZSB0
aGUgdGltZXIgY2FsbGJhY2sgZG9lc24ndCBhY2Nlc3MgaXQgYmVmb3JlIHRoZQotICAgICAgICAv
LyB0aW1lciBoYW5kbGUgaGFzIGJlZW4gc3RvcmVkIGluIGl0LgotICAgICAgICBNdXRleExvY2tl
ciBsb2NrKGNvbnRleHQtPnRpbWVyTXV0ZXgpOwotCi0gICAgICAgIC8vIFNpbmNlIG91ciB0aW1l
ciBjYWxsYmFjayBpcyBxdWljaywgd2UgY2FuIGV4ZWN1dGUgaW4gdGhlIHRpbWVyIHRocmVhZCBp
dHNlbGYgYW5kIGF2b2lkCi0gICAgICAgIC8vIGFuIGV4dHJhIHRocmVhZCBzd2l0Y2ggb3ZlciB0
byBhIHdvcmtlciB0aHJlYWQuCi0gICAgICAgIGlmICghOjpDcmVhdGVUaW1lclF1ZXVlVGltZXIo
JmNvbnRleHQtPnRpbWVyLCBtX3RpbWVyUXVldWUsIHRpbWVyQ2FsbGJhY2ssIGNvbnRleHQuZ2V0
KCksIGRlbGF5ICogMTAwMCwgMCwgV1RfRVhFQ1VURUlOVElNRVJUSFJFQUQpKSB7Ci0gICAgICAg
ICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGZhbHNlLCAiOjpDcmVhdGVUaW1lclF1ZXVlVGltZXIg
ZmFpbGVkIHdpdGggZXJyb3IgJWx1IiwgOjpHZXRMYXN0RXJyb3IoKSk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBUaGUgdGltZXIgY2FsbGJhY2sgd2ls
bCBoYW5kbGUgZGVzdHJveWluZyBjb250ZXh0LgotICAgIGNvbnRleHQucmVsZWFzZSgpLmxlYWtS
ZWYoKTsKLX0KLQotdm9pZCBXb3JrUXVldWU6OnVucmVnaXN0ZXJXYWl0QW5kRGVzdHJveUl0ZW1T
b29uKFBhc3NSZWZQdHI8SGFuZGxlV29ya0l0ZW0+IGl0ZW0pCi17Ci0gICAgLy8gV2UncmUgZ29p
bmcgdG8gbWFrZSBhIGJsb2NraW5nIGNhbGwgdG8gOjpVbnJlZ2lzdGVyV2FpdEV4IGJlZm9yZSBj
bG9zaW5nIHRoZSBoYW5kbGUuIChUaGUKLSAgICAvLyBibG9ja2luZyB2ZXJzaW9uIG9mIDo6VW5y
ZWdpc3RlcldhaXRFeCBpcyBtdWNoIHNpbXBsZXIgdGhhbiB0aGUgbm9uLWJsb2NraW5nIHZlcnNp
b24uKSBJZiB3ZQotICAgIC8vIGRvIHRoaXMgb24gdGhlIGN1cnJlbnQgdGhyZWFkLCB3ZSdsbCBk
ZWFkbG9jayBpZiB3ZSdyZSBjdXJyZW50bHkgaW4gYSBjYWxsYmFjayBmdW5jdGlvbiBmb3IKLSAg
ICAvLyB0aGUgd2FpdCB3ZSdyZSB1bnJlZ2lzdGVyaW5nLiBTbyBpbnN0ZWFkIHdlIGRvIGl0IGFz
eW5jaHJvbm91c2x5IG9uIHNvbWUgb3RoZXIgd29ya2VyIHRocmVhZC4KLQotICAgIDo6UXVldWVV
c2VyV29ya0l0ZW0odW5yZWdpc3RlcldhaXRBbmREZXN0cm95SXRlbUNhbGxiYWNrLCBpdGVtLmxl
YWtSZWYoKSwgV1RfRVhFQ1VURURFRkFVTFQpOwotfQotCi1EV09SRCBXSU5BUEkgV29ya1F1ZXVl
Ojp1bnJlZ2lzdGVyV2FpdEFuZERlc3Ryb3lJdGVtQ2FsbGJhY2sodm9pZCogY29udGV4dCkKLXsK
LSAgICBBU1NFUlRfQVJHKGNvbnRleHQsIGNvbnRleHQpOwotICAgIFJlZlB0cjxIYW5kbGVXb3Jr
SXRlbT4gaXRlbSA9IGFkb3B0UmVmKHN0YXRpY19jYXN0PEhhbmRsZVdvcmtJdGVtKj4oY29udGV4
dCkpOwotCi0gICAgLy8gTm93IHRoYXQgd2Uga25vdyB3ZSdyZSBub3QgaW4gYSBjYWxsYmFjayBm
dW5jdGlvbiBmb3IgdGhlIHdhaXQgd2UncmUgdW5yZWdpc3RlcmluZywgd2UgY2FuCi0gICAgLy8g
bWFrZSBhIGJsb2NraW5nIGNhbGwgdG8gOjpVbnJlZ2lzdGVyV2FpdEV4LgotICAgIGlmICghOjpV
bnJlZ2lzdGVyV2FpdEV4KGl0ZW0tPndhaXRIYW5kbGUoKSwgSU5WQUxJRF9IQU5ETEVfVkFMVUUp
KSB7Ci0gICAgICAgIERXT1JEIGVycm9yID0gOjpHZXRMYXN0RXJyb3IoKTsKLSAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJLaXQyL1BsYXRm
b3JtRWZsLmNtYWtlCmluZGV4IDdkMDYxODRjMWJiOWRkZWI2YTc1ZWVlMjNlYzc1YzdiOTdjOGFi
ZDUuLmY5YjMzNjMzMmM1ZDEzZDcwZjQ0NmJhODkyNzAyODcyZjBiNWIyOTEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQyL1Bs
YXRmb3JtRWZsLmNtYWtlCkBAIC04LDcgKzgsNiBAQCBMSVNUKEFQUEVORCBXZWJLaXQyX0xJTktf
RkxBR1MKIAogTElTVChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgUGxhdGZvcm0vZWZsL01v
ZHVsZUVmbC5jcHAKLSAgICBQbGF0Zm9ybS9lZmwvV29ya1F1ZXVlRWZsLmNwcAogICAgIFBsYXRm
b3JtL3VuaXgvU2hhcmVkTWVtb3J5VW5peC5jcHAKIAogICAgIFBsYXRmb3JtL0NvcmVJUEMvdW5p
eC9Db25uZWN0aW9uVW5peC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5w
cmkgYi9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCmluZGV4IDJjYThjMmUwMzEwZTlkMDg5YWFm
YWNlNWZiZmJkM2E2NTVmOTA2ZTUuLmYxNDZlOTkzZDUyYWFlODAyNzlmMWZkYjE0YWY0MzlhNzY1
M2I4NjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKKysrIGIvU291cmNl
L1dlYktpdDIvVGFyZ2V0LnByaQpAQCAtMzAsOSArMzAsNyBAQCBIRUFERVJTICs9IFwKICAgICBQ
bGF0Zm9ybS9Db3JlSVBDL01lc3NhZ2VTZW5kZXIuaCBcCiAgICAgUGxhdGZvcm0vTG9nZ2luZy5o
IFwKICAgICBQbGF0Zm9ybS9Nb2R1bGUuaCBcCi0gICAgUGxhdGZvcm0vUGxhdGZvcm1Qcm9jZXNz
SWRlbnRpZmllci5oIFwKICAgICBQbGF0Zm9ybS9TaGFyZWRNZW1vcnkuaCBcCi0gICAgUGxhdGZv
cm0vV29ya1F1ZXVlLmggXAogICAgIFBsdWdpblByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclByb3h5
LmggXAogICAgIFBsdWdpblByb2Nlc3MvUGx1Z2luQ3JlYXRpb25QYXJhbWV0ZXJzLmggXAogICAg
IFBsdWdpblByb2Nlc3MvUGx1Z2luUHJvY2Vzcy5oIFwKQEAgLTQwNiw3ICs0MDQsNiBAQCBTT1VS
Q0VTICs9IFwKICAgICBQbGF0Zm9ybS9Db3JlSVBDL0RhdGFSZWZlcmVuY2UuY3BwIFwKICAgICBQ
bGF0Zm9ybS9Mb2dnaW5nLmNwcCBcCiAgICAgUGxhdGZvcm0vTW9kdWxlLmNwcCBcCi0gICAgUGxh
dGZvcm0vV29ya1F1ZXVlLmNwcCBcCiAgICAgUGxhdGZvcm0vcXQvTG9nZ2luZ1F0LmNwcCBcCiAg
ICAgUGxhdGZvcm0vcXQvTW9kdWxlUXQuY3BwIFwKICAgICBQbHVnaW5Qcm9jZXNzL1BsdWdpbkNv
bnRyb2xsZXJQcm94eS5jcHAgXApAQCAtODEzLDE0ICs4MTAsMTIgQEAgbWFjOiB7CiAgICAgU09V
UkNFUyArPSBcCiAgICAgICAgIFBsYXRmb3JtL0NvcmVJUEMvbWFjL0Nvbm5lY3Rpb25NYWMuY3Bw
IFwKICAgICAgICAgUGxhdGZvcm0vbWFjL01hY2hVdGlsaXRpZXMuY3BwIFwKLSAgICAgICAgUGxh
dGZvcm0vbWFjL1dvcmtRdWV1ZU1hYy5jcHAgXAogICAgICAgICBQbGF0Zm9ybS9tYWMvU2hhcmVk
TWVtb3J5TWFjLmNwcAogCiB9IGVsc2UgewogICAgIFNPVVJDRVMgKz0gXAogICAgICAgICBQbGF0
Zm9ybS9Db3JlSVBDL3VuaXgvQXR0YWNobWVudFVuaXguY3BwIFwKICAgICAgICAgUGxhdGZvcm0v
Q29yZUlQQy91bml4L0Nvbm5lY3Rpb25Vbml4LmNwcCBcCi0gICAgICAgIFBsYXRmb3JtL3F0L1dv
cmtRdWV1ZVF0LmNwcCBcCiAgICAgICAgIFBsYXRmb3JtL3VuaXgvU2hhcmVkTWVtb3J5VW5peC5j
cHAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL1By
b2Nlc3NMYXVuY2hlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvUHJv
Y2Vzc0xhdW5jaGVyLmNwcAppbmRleCBiYTIyZGRhMmRhN2JjNWI0OGQzMzU4NjlhZmEzODBjN2Ji
MzY4MjllLi42N2RlZjc2ODIxZmEwYjUwZGFmZTliOWNlNTE2OGM1ZWZkOTgwMzM0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvUHJvY2Vzc0xhdW5jaGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvUHJvY2Vzc0xhdW5jaGVy
LmNwcApAQCAtMjYsOCArMjYsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlBy
b2Nlc3NMYXVuY2hlci5oIgogCi0jaW5jbHVkZSAiV29ya1F1ZXVlLmgiCiAjaW5jbHVkZSA8d3Rm
L1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KIAogbmFtZXNwYWNl
IFdlYktpdCB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hl
ci9Qcm9jZXNzTGF1bmNoZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9Q
cm9jZXNzTGF1bmNoZXIuaAppbmRleCBiYzFmODY3ZjNjMjkxNTUyMzYzMGM2NzYxMWYwNWNlOTcz
ZGVkNTNiLi5kNjFiZDc5ZGJkYjBjMTg3NjJkMWYyNzAwMTY3Y2FlM2FlZDhmOTMxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvUHJvY2Vzc0xhdW5jaGVyLmgK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL1Byb2Nlc3NMYXVuY2hlci5o
CkBAIC0yNyw3ICsyNyw3IEBACiAjZGVmaW5lIFdlYlByb2Nlc3NMYXVuY2hlcl9oCiAKICNpbmNs
dWRlICJDb25uZWN0aW9uLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5o
IgorI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmg+CiAjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL1RocmVhZExhdW5jaGVyLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvVGhyZWFkTGF1bmNoZXIuaAppbmRleCBmM2E1
MzEyYTJjNGY3N2ViZjIwZmQyYzQ4OTY2ZjM1YWNiMGFkOGQxLi45YzZiMTI0OTZmMGUzNTZiZWUy
YWI1ZDY4NTk1M2U2ZDE2YWFkMmJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvTGF1bmNoZXIvVGhyZWFkTGF1bmNoZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvTGF1bmNoZXIvVGhyZWFkTGF1bmNoZXIuaApAQCAtMjcsNyArMjcsNyBAQAogI2RlZmluZSBU
aHJlYWRMYXVuY2hlcl9oCiAKICNpbmNsdWRlICJDb25uZWN0aW9uLmgiCi0jaW5jbHVkZSAiUGxh
dGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oIgorI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybVByb2Nlc3NJ
ZGVudGlmaWVyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9UaHJl
YWRpbmcuaD4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCmluZGV4IDU3
YWI4NmMyNDI5M2IxYWQyMjIyNDEyZWI1OGU5YTlmNTZjOGM1NDguLjBlOTViZTU0YjdhMWFlZWE1
MDA0M2JjZjc1NDNjZjFiMTczNjI1OTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmgKQEAgLTQwLDcgKzQwLDYgQEAKICNlbmRpZgogI2luY2x1ZGUgIkxheWVyVHJlZUNv
bnRleHQuaCIKICNpbmNsdWRlICJOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQ
cm94eS5oIgotI2luY2x1ZGUgIlBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIuaCIKICNpbmNsdWRl
ICJTYW5kYm94RXh0ZW5zaW9uLmgiCiAjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCiAjaW5j
bHVkZSAiV0tCYXNlLmgiCkBAIC03Myw2ICs3Miw3IEBACiAjaW5jbHVkZSA8d3RmL093blB0ci5o
PgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oPgogI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UHJvY2Vzc1Byb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5
LmgKaW5kZXggOGU3NjhiZmI2YTg4OWQ5YWQ2YjM2MDAwNzY5NGIyNTY3NmNlYTY4Ni4uNjQxOWE3
YTM1MzhjNjFmZThkNDU3OWMzMDZkMjM0YjY1NWRkYzEyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaApAQCAtMjYsNyArMjYsNiBAQAogI2lmbmRlZiBXZWJQ
cm9jZXNzUHJveHlfaAogI2RlZmluZSBXZWJQcm9jZXNzUHJveHlfaAogCi0jaW5jbHVkZSAiUGxh
dGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIlBsdWdpbkluZm9TdG9yZS5oIgog
I2luY2x1ZGUgIlByb2Nlc3NMYXVuY2hlci5oIgogI2luY2x1ZGUgIlByb2Nlc3NNb2RlbC5oIgpA
QCAtMzksNiArMzgsNyBAQAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9Q
bGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViS2l0
Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDYwNzdmNmQzZTM4YTQ1MTAxMjM4YjU0MjM3OGNj
Mjg3ZTA0ZGJhZjAuLmVhZDQ3OGE2ODQwODQ0ZjJhZWFkM2Y2NjQwM2ZhYTIxOTFjYzBiMDAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
QEAgLTQ3Niw3ICs0NzYsNiBAQAogCQlCNjM0MDNGOTE0OTEwRDU3MDAxMDcwQjUgLyogQVBJT2Jq
ZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI2
MzQwM0Y4MTQ5MTBENTcwMDEwNzBCNSAvKiBBUElPYmplY3QuY3BwICovOyB9OwogCQlCODc4QjYx
NTEzMzQyOERDMDA2ODg4RTkgLyogQ29ycmVjdGlvblBhbmVsLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCODc4QjYxMzEzMzQyOERDMDA2ODg4RTkgLyog
Q29ycmVjdGlvblBhbmVsLmggKi87IH07CiAJCUI4NzhCNjE2MTMzNDI4REMwMDY4ODhFOSAvKiBD
b3JyZWN0aW9uUGFuZWwubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCODc4QjYxNDEzMzQyOERDMDA2ODg4RTkgLyogQ29ycmVjdGlvblBhbmVsLm1tICov
OyB9OwotCQlCQzAwOTJGODExNTgzN0EzMDBFMEFFMkEgLyogV29ya1F1ZXVlTWFjLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMDA5MkY2MTE1ODM3
QTMwMEUwQUUyQSAvKiBXb3JrUXVldWVNYWMuY3BwICovOyB9OwogCQlCQzAzMkQ3NTEwRjQzNzhE
MDA1OEMxNUEgLyogV2ViQ2hyb21lQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCQzAzMkQ2MDEwRjQzNzhEMDA1OEMxNUEgLyogV2ViQ2hyb21l
Q2xpZW50LmggKi87IH07CiAJCUJDMDMyRDc3MTBGNDM3OEQwMDU4QzE1QSAvKiBXZWJDb250ZXh0
TWVudUNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQkMwMzJENjIxMEY0Mzc4RDAwNThDMTVBIC8qIFdlYkNvbnRleHRNZW51Q2xpZW50LmggKi87
IH07CiAJCUJDMDMyRDdCMTBGNDM3OEQwMDU4QzE1QSAvKiBXZWJEcmFnQ2xpZW50LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzAzMkQ2NjEwRjQzNzhE
MDA1OEMxNUEgLyogV2ViRHJhZ0NsaWVudC5oICovOyB9OwpAQCAtNTY5LDggKzU2OCw2IEBACiAJ
CUJDMkQwMjE3MTJBQzQxQ0IwMEU3MzJBMyAvKiBTYW1lRG9jdW1lbnROYXZpZ2F0aW9uVHlwZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMyRDAyMTYx
MkFDNDFDQjAwRTczMkEzIC8qIFNhbWVEb2N1bWVudE5hdmlnYXRpb25UeXBlLmggKi87IH07CiAJ
CUJDMkQwMjE5MTJBQzQyNkMwMEU3MzJBMyAvKiBXS1BhZ2VMb2FkVHlwZXMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMkQwMjE4MTJBQzQyNkMwMEU3
MzJBMyAvKiBXS1BhZ2VMb2FkVHlwZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlCQzJERkJBMzEyQTc2MUE1MDBFNzMyQTMgLyogV2ViUHJlZmVy
ZW5jZXNDRi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCQzJERkJBMjEyQTc2MUE1MDBFNzMyQTMgLyogV2ViUHJlZmVyZW5jZXNDRi5jcHAgKi87IH07
Ci0JCUJDMkU2RThEMTE0MTk3MTUwMEE2M0IxRSAvKiBXb3JrUXVldWUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMyRTZFN0QxMTQxOTcwQzAwQTYz
QjFFIC8qIFdvcmtRdWV1ZS5jcHAgKi87IH07Ci0JCUJDMkU2RThFMTE0MTk3MTUwMEE2M0IxRSAv
KiBXb3JrUXVldWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEJDMkU2RTdFMTE0MTk3MEMwMEE2M0IxRSAvKiBXb3JrUXVldWUuaCAqLzsgfTsKIAkJQkMz
MDY1QzQxMjU5MkY4OTAwRTcxMjc4IC8qIFdlYlByb2Nlc3NNYWMubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzMwNjVDMzEyNTkyRjg5MDBFNzEyNzgg
LyogV2ViUHJvY2Vzc01hYy5tbSAqLzsgfTsKIAkJQkMzMDY1RkExMjU5MzQ0RTAwRTcxMjc4IC8q
IENhY2hlTW9kZWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEJDMzA2NUY5MTI1OTM0NEUwMEU3MTI3OCAvKiBDYWNoZU1vZGVsLmggKi87IH07CiAJCUJD
MzA2NkJFMTI1QTQ0MjEwMEU3MTI3OCAvKiBXZWJQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMzA2NkJDMTI1
QTQ0MjEwMEU3MTI3OCAvKiBXZWJQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKQEAg
LTE1MTQsNyArMTUxMSw2IEBACiAJCUI2MzQwM0Y4MTQ5MTBENTcwMDEwNzBCNSAvKiBBUElPYmpl
Y3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQVBJT2JqZWN0LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjg3OEI2MTMxMzM0MjhEQzAwNjg4OEU5
IC8qIENvcnJlY3Rpb25QYW5lbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
b3JyZWN0aW9uUGFuZWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjg3OEI2MTQx
MzM0MjhEQzAwNjg4OEU5IC8qIENvcnJlY3Rpb25QYW5lbC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IENvcnJlY3Rpb25QYW5lbC5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJQkMwMDkyRjYxMTU4MzdBMzAwRTBBRTJBIC8qIFdvcmtRdWV1ZU1hYy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXb3JrUXVldWVNYWMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzAzMkQ2MDEwRjQzNzhEMDA1OEMxNUEg
LyogV2ViQ2hyb21lQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdl
YkNocm9tZUNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzAzMkQ2MjEw
RjQzNzhEMDA1OEMxNUEgLyogV2ViQ29udGV4dE1lbnVDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29udGV4dE1lbnVDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQkMwMzJENjYxMEY0Mzc4RDAwNThDMTVBIC8qIFdlYkRyYWdDbGllbnQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViRHJhZ0NsaWVudC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTYxMyw4ICsxNjA5LDYgQEAKIAkJQkMyRDAyMTYx
MkFDNDFDQjAwRTczMkEzIC8qIFNhbWVEb2N1bWVudE5hdmlnYXRpb25UeXBlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNhbWVEb2N1bWVudE5hdmlnYXRpb25UeXBlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMkQwMjE4MTJBQzQyNkMwMEU3MzJBMyAvKiBX
S1BhZ2VMb2FkVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tQYWdl
TG9hZFR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMkRGQkEyMTJBNzYx
QTUwMEU3MzJBMyAvKiBXZWJQcmVmZXJlbmNlc0NGLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IFdlYlByZWZlcmVuY2VzQ0YuY3BwOyBwYXRoID0gY2YvV2ViUHJlZmVy
ZW5jZXNDRi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUJDMkU2RTdEMTE0MTk3
MEMwMEE2M0IxRSAvKiBXb3JrUXVldWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV29ya1F1ZXVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQkMy
RTZFN0UxMTQxOTcwQzAwQTYzQjFFIC8qIFdvcmtRdWV1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXb3JrUXVldWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QkMzMDY1QzMxMjU5MkY4OTAwRTcxMjc4IC8qIFdlYlByb2Nlc3NNYWMubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJQcm9jZXNzTWFjLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlCQzMwNjVGOTEyNTkzNDRFMDBFNzEyNzggLyogQ2FjaGVNb2Rl
bC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWNoZU1vZGVsLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMzA2NkI5MTI1QTQzNjMwMEU3MTI3OCAvKiBXZWJQ
cm9jZXNzLm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFdlYlByb2Nlc3MubWVz
c2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMjk4LDcgKzIyOTIsNiBA
QAogCQkJCTFBMjRCRjM5MTIwODk2QTYwMEZCQjA1OSAvKiBTaGFyZWRNZW1vcnlNYWMuY3BwICov
LAogCQkJCTI5NkJEODVCMTUwMTlCQzMwMDcxRjQyNCAvKiBTdHJpbmdVdGlsaXRpZXMuaCAqLywK
IAkJCQkyOTZCRDg1QzE1MDE5QkMzMDA3MUY0MjQgLyogU3RyaW5nVXRpbGl0aWVzLm1tICovLAot
CQkJCUJDMDA5MkY2MTE1ODM3QTMwMEUwQUUyQSAvKiBXb3JrUXVldWVNYWMuY3BwICovLAogCQkJ
KTsKIAkJCXBhdGggPSBtYWM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMzMzNiw4
ICszMzI5LDYgQEAKIAkJCQlDMEUzQUE0NDEyMDlFMkJBMDBBNDlEMDEgLyogTW9kdWxlLmggKi8s
CiAJCQkJQkM4NzgwRkIxMTYxQzJCODAwQ0MyNzY4IC8qIFBsYXRmb3JtUHJvY2Vzc0lkZW50aWZp
ZXIuaCAqLywKIAkJCQkxQTI0QkVEMzEyMDg5NEQxMDBGQkIwNTkgLyogU2hhcmVkTWVtb3J5Lmgg
Ki8sCi0JCQkJQkMyRTZFN0QxMTQxOTcwQzAwQTYzQjFFIC8qIFdvcmtRdWV1ZS5jcHAgKi8sCi0J
CQkJQkMyRTZFN0UxMTQxOTcwQzAwQTYzQjFFIC8qIFdvcmtRdWV1ZS5oICovLAogCQkJKTsKIAkJ
CXBhdGggPSBQbGF0Zm9ybTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC00MTg5LDcg
KzQxODAsNiBAQAogCQkJCUJDODY5OUI1MTE2QUFEQUEwMDJBOTI1QiAvKiBXS1ZpZXcuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDODY5OUI3MTE2QUFEQUEwMDJBOTI1QiAvKiBXS1ZpZXdJbnRlcm5h
bC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkZBNjE3OUYxMkYwQjk5RDAwMzNFMENBIC8qIFdLVmll
d1ByaXZhdGUuaCBpbiBIZWFkZXJzICovLAotCQkJCUJDMkU2RThFMTE0MTk3MTUwMEE2M0IxRSAv
KiBXb3JrUXVldWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxN0JGOTk2MTREMEE3M0UwMEE1QTA2
OSAvKiBOZXRzY2FwZVNhbmRib3hGdW5jdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRTA5
Mzc4MTRGQjEyOEMwMDExMzhEOSAvKiBMYXllckhvc3RpbmdDb250ZXh0LmggaW4gSGVhZGVycyAq
LywKIAkJCQkyOTZCRDg1RDE1MDE5QkMzMDA3MUY0MjQgLyogU3RyaW5nVXRpbGl0aWVzLmggaW4g
SGVhZGVycyAqLywKQEAgLTQ5MzYsOCArNDkyNiw2IEBACiAJCQkJQkM0MDc2MkMxMjRGRjA0MDAw
NjhGMjBBIC8qIFdLVVJMUmVzcG9uc2VOUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUY2MTEzRTI4
MTI2Q0UxOUIwMDU3RDBBNyAvKiBXS1VzZXJDb250ZW50VVJMUGF0dGVybi5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCQzg2OTlCNjExNkFBREFBMDAyQTkyNUIgLyogV0tWaWV3Lm1tIGluIFNvdXJj
ZXMgKi8sCi0JCQkJQkMyRTZFOEQxMTQxOTcxNTAwQTYzQjFFIC8qIFdvcmtRdWV1ZS5jcHAgaW4g
U291cmNlcyAqLywKLQkJCQlCQzAwOTJGODExNTgzN0EzMDBFMEFFMkEgLyogV29ya1F1ZXVlTWFj
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxN0JGOTk4MTREMEFBODMwMEE1QTA2OSAvKiBOZXRz
Y2FwZVNhbmRib3hGdW5jdGlvbnMubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQ0UwOTM3NzE0RkIx
MjhDMDAxMTM4RDkgLyogTGF5ZXJIb3N0aW5nQ29udGV4dC5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CTI5NkJEODVFMTUwMTlCQzMwMDcxRjQyNCAvKiBTdHJpbmdVdGlsaXRpZXMubW0gaW4gU291cmNl
cyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL3dpbi9XZWJLaXQyLnZjcHJvaiBiL1Nv
dXJjZS9XZWJLaXQyL3dpbi9XZWJLaXQyLnZjcHJvagppbmRleCAwYTM4YzRiODIyYTgyNDc5OGZm
OGM0ZWUyZjNjZDI0ODliN2I2ZDBmLi4zNzI1MmI2MTQzODI3NjljZjJiYWU2ZmE1YTMwMzZkMzNh
MDMyNWU0IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViS2l0Mi93aW4vV2ViS2l0Mi52Y3Byb2oKKysr
IGIvU291cmNlL1dlYktpdDIvd2luL1dlYktpdDIudmNwcm9qCkBAIC0zOTM0LDE0ICszOTM0LDYg
QEAKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFBsYXRmb3JtXFNoYXJlZE1lbW9yeS5oIgogCQkJCT4K
IAkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxQbGF0Zm9ybVxXb3Jr
UXVldWUuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRo
PSIuLlxQbGF0Zm9ybVxXb3JrUXVldWUuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+CiAJCQk8RmlsdGVy
CiAJCQkJTmFtZT0iY2ciCiAJCQkJPgpAQCAtMzk4MSwxMCArMzk3Myw2IEBACiAJCQkJCVJlbGF0
aXZlUGF0aD0iLi5cUGxhdGZvcm1cd2luXFNoYXJlZE1lbW9yeVdpbi5jcHAiCiAJCQkJCT4KIAkJ
CQk8L0ZpbGU+Ci0JCQkJPEZpbGUKLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxQbGF0Zm9ybVx3aW5c
V29ya1F1ZXVlV2luLmNwcCIKLQkJCQkJPgotCQkJCTwvRmlsZT4KIAkJCTwvRmlsdGVyPgogCQkJ
PEZpbHRlcgogCQkJCU5hbWU9IkNvcmVJUEMiCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151627</attachid>
            <date>2012-07-11 00:51:09 -0700</date>
            <delta_ts>2012-07-11 01:32:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90780-20120711165036.patch</filename>
            <type>text/plain</type>
            <size>132245</size>
            <attacher name="Kwonjin Jeong">gram</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyMjk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
MWNiZWZhMzY5ZGIyNDBjNWEyZDk4ZGQwZDYxYWMyZjBjMTUyMGZhLi5hM2Y5ZmM3ZjYzNjQ2NjE0
YjM3NTRkNzY3ZjRkN2MxMDc2OTQ0NGFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxOCBAQAorMjAxMi0wNy0xMSAgS3dvbmppbiBKZW9uZyAgPGdyYW1AY29tcGFueTEwMC5u
ZXQ+CisKKyAgICAgICAgTW92ZSBXb3JrUXVldWUgdG8gV1RGCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDc4MAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEN1cnJlbnRseSwgV29ya1F1ZXVlIGlzIGluIFdl
YktpdDIuIEJ5IG1vdmluZyBXb3JrUXVldWUgYW5kCisgICAgICAgIFBsYXRmb3JtUHJvY2Vzc0lk
ZW50aWZpZXIgdG8gV1RGLCBXZWJDb3JlIGNvZGUgY2FuIHVzZSBpdC4KKworICAgICAgICBUaGlz
IHBhdGNoIGlzIHJlcXVpcmVkIGZvciBwYXJhbGxlbCBpbWFnZSBkZWNvZGVycyBiZWNhdXNlCisg
ICAgICAgIFdvcmtRdWV1ZSBpcyB1c2VkIHRvIG1ha2UgaW1hZ2UgZGVjb2Rpbmcgb2ZmIHRoZSBt
YWluIHRocmVhZC4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLm9yZGVyOgorCiAyMDEyLTA3
LTEwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lP
TihyMTIyMTY2KTogSXQgbWFkZSAxNzAgdGVzdHMgY3Jhc2ggb24gMzIgYml0IHBsYXRmb3Jtcwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpp
bmRleCAwNjZmOTc1ZDlhMmMxNTgyZDZjM2Q5OGNjZGVlMGJiMzc5NjVlN2EwLi43ODI3ODQ0NDhl
ZGRhNTNkOWZkMjI2ZTdkY2ZlNGQwMjJkMGNjNjQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzMCBAQAorMjAx
Mi0wNy0xMSAgS3dvbmppbiBKZW9uZyAgPGdyYW1AY29tcGFueTEwMC5uZXQ+CisKKyAgICAgICAg
TW92ZSBXb3JrUXVldWUgdG8gV1RGCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD05MDc4MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEN1cnJlbnRseSwgV29ya1F1ZXVlIGlzIGluIFdlYktpdDIuIEJ5IG1vdmlu
ZyBXb3JrUXVldWUgYW5kCisgICAgICAgIFBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIgdG8gV1RG
LCBXZWJDb3JlIGNvZGUgY2FuIHVzZSBpdC4KKworICAgICAgICBUaGlzIHBhdGNoIGlzIHJlcXVp
cmVkIGZvciBwYXJhbGxlbCBpbWFnZSBkZWNvZGVycyBiZWNhdXNlCisgICAgICAgIFdvcmtRdWV1
ZSBpcyB1c2VkIHRvIG1ha2UgaW1hZ2UgZGVjb2Rpbmcgb2ZmIHRoZSBtYWluIHRocmVhZC4KKwor
ICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogV1RGLnBybzoKKyAgICAg
ICAgKiBXVEYudmNwcm9qL1dURi52Y3Byb2o6CisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL0NNYWtlTGlzdHMudHh0OgorICAgICAgICAqIHd0
Zi9QbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAgICAgKiB3dGYvUGxhdGZvcm1Qcm9jZXNzSWRlbnRp
Zmllci5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvUGxhdGZvcm0vUGxhdGZvcm1Qcm9j
ZXNzSWRlbnRpZmllci5oLgorICAgICAgICAoV1RGKToKKyAgICAgICAgKiB3dGYvV29ya1F1ZXVl
LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1dvcmtRdWV1ZS5jcHAu
CisgICAgICAgIChXVEYpOgorICAgICAgICAoV1RGOjpXb3JrUXVldWU6OldvcmtRdWV1ZSk6Cisg
ICAgICAgIChXVEY6OldvcmtRdWV1ZTo6fldvcmtRdWV1ZSk6CisgICAgICAgIChXVEY6OldvcmtR
dWV1ZTo6aW52YWxpZGF0ZSk6CisgICAgICAgICogd3RmL1dvcmtRdWV1ZS5oOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYktpdDIvUGxhdGZvcm0vV29ya1F1ZXVlLmguCisgICAgICAgIChXVEYpOgor
ICAgICAgICAoV29ya1F1ZXVlKToKKyAgICAgICAgKFdvcmtJdGVtV2luKToKKyAgICAgICAgKFdU
Rjo6V29ya1F1ZXVlOjpXb3JrSXRlbVdpbjo6ZnVuY3Rpb24pOgorICAgICAgICAoV1RGOjpXb3Jr
UXVldWU6OldvcmtJdGVtV2luOjpxdWV1ZSk6CisgICAgICAgIChIYW5kbGVXb3JrSXRlbSk6Cisg
ICAgICAgIChXVEY6OldvcmtRdWV1ZTo6SGFuZGxlV29ya0l0ZW06OnNldFdhaXRIYW5kbGUpOgor
ICAgICAgICAoV1RGOjpXb3JrUXVldWU6OkhhbmRsZVdvcmtJdGVtOjp3YWl0SGFuZGxlKToKKyAg
ICAgICAgKiB3dGYvZWZsL1dvcmtRdWV1ZUVmbC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybS9lZmwvV29ya1F1ZXVlRWZsLmNwcC4KKyAgICAgICAgKFRpbWVyV29ya0l0
ZW0pOgorICAgICAgICAoVGltZXJXb3JrSXRlbTo6VGltZXJXb3JrSXRlbSk6CisgICAgICAgIChU
aW1lcldvcmtJdGVtOjp+VGltZXJXb3JrSXRlbSk6CisgICAgICAgIChUaW1lcldvcmtJdGVtOjpm
dW5jdGlvbik6CisgICAgICAgIChUaW1lcldvcmtJdGVtOjpxdWV1ZSk6CisgICAgICAgIChUaW1l
cldvcmtJdGVtOjp0aW1lcklEKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFs
aXplKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6cGxhdGZvcm1JbnZhbGlkYXRlKToKKyAgICAgICAg
KFdvcmtRdWV1ZTo6cGVyZm9ybVdvcmspOgorICAgICAgICAoV29ya1F1ZXVlOjpwZXJmb3JtRmls
ZURlc2NyaXB0b3JXb3JrKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6c2VuZE1lc3NhZ2VUb1RocmVh
ZCk6CisgICAgICAgIChXb3JrUXVldWU6OndvcmtRdWV1ZVRocmVhZCk6CisgICAgICAgIChXb3Jr
UXVldWU6OnJlZ2lzdGVyU29ja2V0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6
dW5yZWdpc3RlclNvY2tldEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXb3JrUXVldWU6OmRpc3Bh
dGNoKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6dGltZXJGaXJlZCk6CisgICAgICAgIChXb3JrUXVl
dWU6OmRpc3BhdGNoQWZ0ZXJEZWxheSk6CisgICAgICAgICogd3RmL2d0ay9Xb3JrUXVldWVHdGsu
Y3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvUGxhdGZvcm0vZ3RrL1dvcmtRdWV1ZUd0
ay5jcHAuCisgICAgICAgIChXb3JrUXVldWU6OkV2ZW50U291cmNlKToKKyAgICAgICAgKFdvcmtR
dWV1ZTo6RXZlbnRTb3VyY2U6OkV2ZW50U291cmNlKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6RXZl
bnRTb3VyY2U6OmNhbmNlbCk6CisgICAgICAgIChXb3JrUXVldWU6OkV2ZW50U291cmNlOjpleGVj
dXRlRXZlbnRTb3VyY2UpOgorICAgICAgICAoV29ya1F1ZXVlOjpFdmVudFNvdXJjZTo6cGVyZm9y
bVdvcmtPbmNlKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OnBlcmZvcm1Xb3Jr
KToKKyAgICAgICAgKFdvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OnBlcmZvcm1Xb3JrT25UZXJtaW5h
dGlvbik6CisgICAgICAgIChXb3JrUXVldWU6OkV2ZW50U291cmNlOjpkZWxldGVFdmVudFNvdXJj
ZSk6CisgICAgICAgIChXb3JrUXVldWU6OnBsYXRmb3JtSW5pdGlhbGl6ZSk6CisgICAgICAgIChX
b3JrUXVldWU6OnBsYXRmb3JtSW52YWxpZGF0ZSk6CisgICAgICAgIChXb3JrUXVldWU6OnN0YXJ0
V29ya1F1ZXVlVGhyZWFkKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6d29ya1F1ZXVlVGhyZWFkQm9k
eSk6CisgICAgICAgIChXb3JrUXVldWU6OnJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKToKKyAg
ICAgICAgKFdvcmtRdWV1ZTo6dW5yZWdpc3RlckV2ZW50U291cmNlSGFuZGxlcik6CisgICAgICAg
IChXb3JrUXVldWU6OmRpc3BhdGNoT25Tb3VyY2UpOgorICAgICAgICAoV29ya1F1ZXVlOjpkaXNw
YXRjaCk6CisgICAgICAgIChXb3JrUXVldWU6OmRpc3BhdGNoQWZ0ZXJEZWxheSk6CisgICAgICAg
IChXb3JrUXVldWU6OmRpc3BhdGNoT25UZXJtaW5hdGlvbik6CisgICAgICAgICogd3RmL21hYy9X
b3JrUXVldWVNYWMuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvUGxhdGZvcm0vbWFj
L1dvcmtRdWV1ZU1hYy5jcHAuCisgICAgICAgIChXVEYpOgorICAgICAgICAoV1RGOjpXb3JrUXVl
dWU6OmV4ZWN1dGVGdW5jdGlvbik6CisgICAgICAgIChXVEY6OldvcmtRdWV1ZTo6ZGlzcGF0Y2gp
OgorICAgICAgICAoV1RGOjpXb3JrUXVldWU6OmRpc3BhdGNoQWZ0ZXJEZWxheSk6CisgICAgICAg
IChXb3JrUXVldWU6OkV2ZW50U291cmNlKToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpFdmVu
dFNvdXJjZTo6RXZlbnRTb3VyY2UpOgorICAgICAgICAoV1RGOjpXb3JrUXVldWU6OkV2ZW50U291
cmNlOjpkaXNwYXRjaFNvdXJjZSk6CisgICAgICAgIChXVEY6OldvcmtRdWV1ZTo6RXZlbnRTb3Vy
Y2U6OmV2ZW50SGFuZGxlcik6CisgICAgICAgIChXVEY6OldvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6
OmNhbmNlbEhhbmRsZXIpOgorICAgICAgICAoV1RGOjpXb3JrUXVldWU6OkV2ZW50U291cmNlOjpm
aW5hbGl6ZUhhbmRsZXIpOgorICAgICAgICAoV1RGOjpXb3JrUXVldWU6OnJlZ2lzdGVyTWFjaFBv
cnRFdmVudEhhbmRsZXIpOgorICAgICAgICAoV1RGOjpXb3JrUXVldWU6OnVucmVnaXN0ZXJNYWNo
UG9ydEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXVEY6OldvcmtRdWV1ZTo6cGxhdGZvcm1Jbml0
aWFsaXplKToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpwbGF0Zm9ybUludmFsaWRhdGUpOgor
ICAgICAgICAqIHd0Zi9xdC9Xb3JrUXVldWVRdC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybS9xdC9Xb3JrUXVldWVRdC5jcHAuCisgICAgICAgIChXVEYpOgorICAgICAg
ICAoV29ya1F1ZXVlOjpXb3JrSXRlbVF0KToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpXb3Jr
SXRlbVF0OjpXb3JrSXRlbVF0KToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpXb3JrSXRlbVF0
Ojp+V29ya0l0ZW1RdCk6CisgICAgICAgIChXVEY6OldvcmtRdWV1ZTo6V29ya0l0ZW1RdDo6ZXhl
Y3V0ZSk6CisgICAgICAgIChXVEY6OldvcmtRdWV1ZTo6V29ya0l0ZW1RdDo6ZXhlY3V0ZUFuZERl
bGV0ZSk6CisgICAgICAgIChXVEY6OldvcmtRdWV1ZTo6V29ya0l0ZW1RdDo6dGltZXJFdmVudCk6
CisgICAgICAgIChXVEY6OldvcmtRdWV1ZTo6cmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIpOgor
ICAgICAgICAoV1RGOjpXb3JrUXVldWU6OnBsYXRmb3JtSW5pdGlhbGl6ZSk6CisgICAgICAgIChX
VEY6OldvcmtRdWV1ZTo6cGxhdGZvcm1JbnZhbGlkYXRlKToKKyAgICAgICAgKFdURjo6V29ya1F1
ZXVlOjpkaXNwYXRjaCk6CisgICAgICAgIChXVEY6OldvcmtRdWV1ZTo6ZGlzcGF0Y2hBZnRlckRl
bGF5KToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpkaXNwYXRjaE9uVGVybWluYXRpb24pOgor
ICAgICAgICAqIHd0Zi93aW4vV29ya1F1ZXVlV2luLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtL3dpbi9Xb3JrUXVldWVXaW4uY3BwLgorICAgICAgICAoV1RGKToKKyAg
ICAgICAgKFdURjo6V29ya1F1ZXVlOjpXb3JrSXRlbVdpbjo6V29ya0l0ZW1XaW4pOgorICAgICAg
ICAoV1RGOjpXb3JrUXVldWU6OldvcmtJdGVtV2luOjpjcmVhdGUpOgorICAgICAgICAoV1RGOjpX
b3JrUXVldWU6OldvcmtJdGVtV2luOjp+V29ya0l0ZW1XaW4pOgorICAgICAgICAoV1RGOjpXb3Jr
UXVldWU6OkhhbmRsZVdvcmtJdGVtOjpIYW5kbGVXb3JrSXRlbSk6CisgICAgICAgIChXVEY6Oldv
cmtRdWV1ZTo6SGFuZGxlV29ya0l0ZW06OmNyZWF0ZUJ5QWRvcHRpbmdIYW5kbGUpOgorICAgICAg
ICAoV1RGOjpXb3JrUXVldWU6OkhhbmRsZVdvcmtJdGVtOjp+SGFuZGxlV29ya0l0ZW0pOgorICAg
ICAgICAoV1RGOjpXb3JrUXVldWU6OmhhbmRsZUNhbGxiYWNrKToKKyAgICAgICAgKFdURjo6V29y
a1F1ZXVlOjpyZWdpc3RlckhhbmRsZSk6CisgICAgICAgIChXVEY6OldvcmtRdWV1ZTo6dW5yZWdp
c3RlckFuZENsb3NlSGFuZGxlKToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjp3b3JrVGhyZWFk
Q2FsbGJhY2spOgorICAgICAgICAoV1RGOjpXb3JrUXVldWU6OnBlcmZvcm1Xb3JrT25SZWdpc3Rl
cmVkV29ya1RocmVhZCk6CisgICAgICAgIChXVEY6OldvcmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFs
aXplKToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjp0cnlSZWdpc3RlckFzV29ya1RocmVhZCk6
CisgICAgICAgIChXVEY6OldvcmtRdWV1ZTo6dW5yZWdpc3RlckFzV29ya1RocmVhZCk6CisgICAg
ICAgIChXVEY6OldvcmtRdWV1ZTo6cGxhdGZvcm1JbnZhbGlkYXRlKToKKyAgICAgICAgKFdURjo6
V29ya1F1ZXVlOjpkaXNwYXRjaCk6CisgICAgICAgIChXVEY6OlRpbWVyQ29udGV4dDo6Y3JlYXRl
KToKKyAgICAgICAgKFRpbWVyQ29udGV4dCk6CisgICAgICAgIChXVEY6OlRpbWVyQ29udGV4dDo6
VGltZXJDb250ZXh0KToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjp0aW1lckNhbGxiYWNrKToK
KyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpkaXNwYXRjaEFmdGVyRGVsYXkpOgorICAgICAgICAo
V1RGOjpXb3JrUXVldWU6OnVucmVnaXN0ZXJXYWl0QW5kRGVzdHJveUl0ZW1Tb29uKToKKyAgICAg
ICAgKFdURjo6V29ya1F1ZXVlOjp1bnJlZ2lzdGVyV2FpdEFuZERlc3Ryb3lJdGVtQ2FsbGJhY2sp
OgorCiAyMDEyLTA3LTEwICBKb2NlbHluIFR1cmNvdHRlICA8am9jZWx5bi50dXJjb3R0ZUBub2tp
YS5jb20+CiAKICAgICAgICAgUmUtZW5hYmxlIF9fZGVjbHNwZWMoZGx7aW1wb3J0LGV4cG9ydH0p
IGZvciBNaW5HVyB3aGVuIHVzaW5nIEVYUE9SVF9NQUNST1MKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCBmODcxMmUy
YjkyNjEzNmVhN2Q2NjI5YjAzYzk5ZDJjYjJiZDJmODk5Li40MzJjNjUzYTc3OGY0MDNiY2M5ZWRl
ZWQ3NzEyY2ZlNmFmZTJiY2Q4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzIgQEAKKzIwMTItMDct
MTEgIEt3b25qaW4gSmVvbmcgIDxncmFtQGNvbXBhbnkxMDAubmV0PgorCisgICAgICAgIE1vdmUg
V29ya1F1ZXVlIHRvIFdURgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9OTA3ODAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBDdXJyZW50bHksIFdvcmtRdWV1ZSBpcyBpbiBXZWJLaXQyLiBCeSBtb3ZpbmcgV29y
a1F1ZXVlIGFuZAorICAgICAgICBQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyIHRvIFdURiwgV2Vi
Q29yZSBjb2RlIGNhbiB1c2UgaXQuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpcyByZXF1aXJlZCBm
b3IgcGFyYWxsZWwgaW1hZ2UgZGVjb2RlcnMgYmVjYXVzZQorICAgICAgICBXb3JrUXVldWUgaXMg
dXNlZCB0byBtYWtlIGltYWdlIGRlY29kaW5nIG9mZiB0aGUgbWFpbiB0aHJlYWQuCisKKyAgICAg
ICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAg
ICAgICAqIFBsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5oOgorICAgICAgICAoQ29ubmVjdGlv
bik6CisgICAgICAgICogUGxhdGZvcm0vQ29yZUlQQy91bml4L0Nvbm5lY3Rpb25Vbml4LmNwcDoK
KyAgICAgICAgKENvcmVJUEM6OkNvbm5lY3Rpb246OnNldFNob3VsZENsb3NlQ29ubmVjdGlvbk9u
UHJvY2Vzc1Rlcm1pbmF0aW9uKToKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAg
ICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFVJUHJvY2Vzcy9MYXVuY2hlci9Qcm9jZXNzTGF1
bmNoZXIuY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9MYXVuY2hlci9Qcm9jZXNzTGF1bmNoZXIu
aDoKKyAgICAgICAgKiBVSVByb2Nlc3MvTGF1bmNoZXIvVGhyZWFkTGF1bmNoZXIuaDoKKyAgICAg
ICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBy
b2Nlc3NQcm94eS5oOgorICAgICAgICAqIFdlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKyAgICAgICAgKiB3aW4vV2ViS2l0Mi52Y3Byb2o6CisKIDIwMTItMDctMTAgIE5vJ2FtIFJv
c2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4KIAogICAgICAgICBbUXRdIEVuYWJs
ZSBhbnRpYWxpYXNpbmcgZm9yIFRleHR1cmVNYXBwZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5vcmRlciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS5vcmRlcgppbmRleCAzYTQ1MDA3NWExMzQzZTU5ZTdiMWVkYTExYTVmN2Nk
ODAzYzg2NWFhLi43NDk3ZDlmMDM2MjkwZjRjY2M4OTJhNjBlZjk5YTk4YjFlZTVlNmJhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUub3JkZXIKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLm9yZGVyCkBAIC0yNDk0LDMgKzI0
OTQsMTAgQEAgX19aTjNXVEY2VmVjdG9ySU4zSlNDMTBBU1RCdWlsZGVyMTRBc3NpZ25tZW50SW5m
b0VMbTEwRUUxNGV4cGFuZENhcGFjaXR5RW0KIF9jdGlfb3BfcHV0X2J5X2lkX2RpcmVjdF9nZW5l
cmljCiBfX1pOM1dURjlIYXNoVGFibGVJUE4zSlNDMTZGdW5jdGlvbkJvZHlOb2RlRVN0NHBhaXJJ
UzNfakVOU18xOFBhaXJGaXJzdEV4dHJhY3RvcklTNV9FRU5TXzdQdHJIYXNoSVMzX0VFTlNfMTRQ
YWlySGFzaFRyYWl0c0lOU18xMEhhc2hUcmFpdHNJUzNfRUVOU0JfSWpFRUVFU0NfRTRmaW5kSVMz
X05TXzIySWRlbnRpdHlIYXNoVHJhbnNsYXRvcklTM19TNV9TOV9FRUVFTlNfMTdIYXNoVGFibGVJ
dGVyYXRvcklTM19TNV9TN19TOV9TRV9TQ19FRVJLVF8KIF9fWk4zV1RGOUhhc2hUYWJsZUlQTjNK
U0MxNkZ1bmN0aW9uQm9keU5vZGVFU3Q0cGFpcklTM19qRU5TXzE4UGFpckZpcnN0RXh0cmFjdG9y
SVM1X0VFTlNfN1B0ckhhc2hJUzNfRUVOU18xNFBhaXJIYXNoVHJhaXRzSU5TXzEwSGFzaFRyYWl0
c0lTM19FRU5TQl9JakVFRUVTQ19FNmV4cGFuZEV2CitfX1pOM1dURjlXb3JrUXVldWVDMUVQS2MK
K19fWk4zV1RGOVdvcmtRdWV1ZUQxRXYKK19fWk4zV1RGOVdvcmtRdWV1ZTI4cmVnaXN0ZXJNYWNo
UG9ydEV2ZW50SGFuZGxlckVqTlMwXzE3TWFjaFBvcnRFdmVudFR5cGVFUktOU184RnVuY3Rpb25J
RnZ2RUVFCitfX1pOM1dURjlXb3JrUXVldWUzMHVucmVnaXN0ZXJNYWNoUG9ydEV2ZW50SGFuZGxl
ckVqCitfX1pOM1dURjlXb3JrUXVldWU4ZGlzcGF0Y2hFUktOU184RnVuY3Rpb25JRnZ2RUVFCitf
X1pOM1dURjlXb3JrUXVldWUxOGRpc3BhdGNoQWZ0ZXJEZWxheUVSS05TXzhGdW5jdGlvbklGdnZF
RUVkCitfX1pOM1dURjlXb3JrUXVldWUxMGludmFsaWRhdGVFdgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dURi9HTlVtYWtlZmlsZS5saXN0LmFt
CmluZGV4IGM1ZjQ4YTZjZTU1OWEyNGNjMjBiNzA3NThkZjhiYzRhODRkYzllZWQuLmNmMmEwOGU3
Yzk5ZTE2MmZmOWFmMWZmNzE3ZDljOGVjOGVkZDA2MmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
R05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV1RGL0dOVW1ha2VmaWxlLmxpc3QuYW0K
QEAgLTE2NCw2ICsxNjQsOCBAQCB3dGZfc291cmNlcyArPSBcCiAgICAgU291cmNlL1dURi93dGYv
VmFsdWVDaGVjay5oIFwKICAgICBTb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaCBcCiAgICAgU291cmNl
L1dURi93dGYvVmVjdG9yVHJhaXRzLmggXAorICAgIFNvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5j
cHAgXAorICAgIFNvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5oIFwKICAgICBTb3VyY2UvV1RGL3d0
Zi9XVEZUaHJlYWREYXRhLmNwcCBcCiAgICAgU291cmNlL1dURi93dGYvV1RGVGhyZWFkRGF0YS5o
IFwKICAgICBTb3VyY2UvV1RGL3d0Zi9kdG9hLmNwcCBcCkBAIC0xOTQsNiArMTk2LDcgQEAgd3Rm
X3NvdXJjZXMgKz0gXAogICAgIFNvdXJjZS9XVEYvd3RmL2dvYmplY3QvR2xpYlV0aWxpdGllcy5j
cHAgXAogICAgIFNvdXJjZS9XVEYvd3RmL2dvYmplY3QvR2xpYlV0aWxpdGllcy5oIFwKICAgICBT
b3VyY2UvV1RGL3d0Zi9ndGsvTWFpblRocmVhZEd0ay5jcHAgXAorICAgIFNvdXJjZS9XVEYvd3Rm
L2d0ay9Xb3JrUXVldWVHdGsuY3BwIFwKICAgICBTb3VyY2UvV1RGL3d0Zi90ZXh0L0FTQ0lJRmFz
dFBhdGguaCBcCiAgICAgU291cmNlL1dURi93dGYvdGV4dC9BdG9taWNTdHJpbmcuY3BwIFwKICAg
ICBTb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21pY1N0cmluZy5oIFwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XVEYvV1RGLnBybyBiL1NvdXJjZS9XVEYvV1RGLnBybwppbmRleCAwOTYyZWYwYjUwYTUxN2Jk
MGUyZDQ1NjJkZjhkZWZkNmY1MWExZjA0Li44ODZiMmYzYTdiNmUzYTg1NWRkYjA2MzFiYjc2NzU1
NGU1Mjc1OGNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi5wcm8KKysrIGIvU291cmNlL1dU
Ri9XVEYucHJvCkBAIC0xNjMsNiArMTYzLDcgQEAgSEVBREVSUyArPSBcCiAgICAgVmVjdG9yLmgg
XAogICAgIFZlY3RvclRyYWl0cy5oIFwKICAgICBWTVRhZ3MuaCBcCisgICAgV29ya1F1ZXVlLmgg
XAogICAgIFdURlRocmVhZERhdGEuaAogCiB1bml4OiBIRUFERVJTICs9IFRocmVhZElkZW50aWZp
ZXJEYXRhUHRocmVhZHMuaApAQCAtMTk5LDYgKzIwMCw3IEBAIFNPVVJDRVMgKz0gXAogICAgIE9T
UmFuZG9tU291cmNlLmNwcCBcCiAgICAgcXQvTWFpblRocmVhZFF0LmNwcCBcCiAgICAgcXQvU3Ry
aW5nUXQuY3BwIFwKKyAgICBxdC9Xb3JrUXVldWVRdC5jcHAgXAogICAgIFBhZ2VBbGxvY2F0aW9u
QWxpZ25lZC5jcHAgXAogICAgIFBhZ2VCbG9jay5jcHAgXAogICAgIFBhcmFsbGVsSm9ic0dlbmVy
aWMuY3BwIFwKQEAgLTIwOSw2ICsyMTEsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBUQ1N5c3RlbUFs
bG9jLmNwcCBcCiAgICAgVGhyZWFkaW5nLmNwcCBcCiAgICAgVHlwZVRyYWl0cy5jcHAgXAorICAg
IFdvcmtRdWV1ZS5jcHAgXAogICAgIFdURlRocmVhZERhdGEuY3BwIFwKICAgICB0ZXh0L0F0b21p
Y1N0cmluZy5jcHAgXAogICAgIHRleHQvQ1N0cmluZy5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi9XVEYudmNwcm9qL1dURi52Y3Byb2ogYi9Tb3VyY2UvV1RGL1dURi52Y3Byb2ovV1RGLnZj
cHJvagppbmRleCAyMTkwZGFlMWVmZmVhZTMzOTUzMzI3ZTNjYjczZTc3ZTZlZTQ2ZDU4Li4xY2M3
YWU3MTk1ZDE3M2FiNGU2OTg1Zjg1ZWNjODc1ZDVmMWM0N2NhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL1dURi52Y3Byb2ovV1RGLnZjcHJvagorKysgYi9Tb3VyY2UvV1RGL1dURi52Y3Byb2ovV1RG
LnZjcHJvagpAQCAtMzQzLDYgKzM0MywxMCBAQAogCQkJCVJlbGF0aXZlUGF0aD0iLi5cd3RmXHdp
blxPd25QdHJXaW4uY3BwIgogCQkJCT4KIAkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRp
dmVQYXRoPSIuLlx3dGZcd2luXFdvcmtRdWV1ZVdpbi5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgog
CQk8L0ZpbHRlcj4KIAkJPEZpbHRlcgogCQkJTmFtZT0idW5pY29kZSIKQEAgLTEyMTMsNiArMTIx
NywxNCBAQAogCQkJPgogCQk8L0ZpbGU+CiAJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXHd0
ZlxXb3JrUXVldWUuY3BwIgorCQkJPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBh
dGg9Ii4uXHd0ZlxXb3JrUXVldWUuaCIKKwkJCT4KKwkJPC9GaWxlPgorCQk8RmlsZQogCQkJUmVs
YXRpdmVQYXRoPSIuLlx3dGZcV1RGVGhyZWFkRGF0YS5jcHAiCiAJCQk+CiAJCTwvRmlsZT4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3Vy
Y2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDc3MjA0NjFlMjY0NjYx
ZmM4ZTk0MzVlOTA4ODE2NzRiY2QxYjc2NTguLmZjZDAyMWVlNWNmMTRkMWI1MmJkMjg3NTYwOGIx
ZjdmZDg3NzM1ZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKKysrIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpA
QCAtMjM5LDYgKzIzOSw5IEBACiAJCUE4QTQ3NDdFMTUxQTgyNUIwMDQxMjNGRiAvKiBWZWN0b3Iu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3Mzcw
MTUxQTgyNUIwMDQxMjNGRiAvKiBWZWN0b3IuaCAqLzsgfTsKIAkJQThBNDc0N0YxNTFBODI1QjAw
NDEyM0ZGIC8qIFZlY3RvclRyYWl0cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQThBNDczNzExNTFBODI1QjAwNDEyM0ZGIC8qIFZlY3RvclRyYWl0cy5o
ICovOyB9OwogCQlBOEE0NzQ4MDE1MUE4MjVCMDA0MTIzRkYgLyogVk1UYWdzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzM3MjE1MUE4MjVCMDA0
MTIzRkYgLyogVk1UYWdzLmggKi87IH07CisJCUJDMkU2RThEMTE0MTk3MTUwMEE2M0IxRSAvKiBX
b3JrUXVldWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQkMyRTZFN0QxMTQxOTcwQzAwQTYzQjFFIC8qIFdvcmtRdWV1ZS5jcHAgKi87IH07CisJCUJD
MkU2RThFMTE0MTk3MTUwMEE2M0IxRSAvKiBXb3JrUXVldWUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMkU2RTdFMTE0MTk3MEMwMEE2M0IxRSAvKiBX
b3JrUXVldWUuaCAqLzsgfTsKKwkJQkMwMDkyRjgxMTU4MzdBMzAwRTBBRTJBIC8qIFdvcmtRdWV1
ZU1hYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
QzAwOTJGNjExNTgzN0EzMDBFMEFFMkEgLyogV29ya1F1ZXVlTWFjLmNwcCAqLzsgfTsKIAkJQThB
NDc0ODYxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlRocmVhZERhdGEuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDczN0ExNTFBODI1QjAwNDEyM0ZG
IC8qIFdURlRocmVhZERhdGEuY3BwICovOyB9OwogCQlBOEE0NzQ4NzE1MUE4MjVCMDA0MTIzRkYg
LyogV1RGVGhyZWFkRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQThBNDczN0IxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlRocmVhZERhdGEuaCAqLzsg
fTsKIAkJQThBNDc0OEMxNTFBODI2NDAwNDEyM0ZGIC8qIGNvbmZpZy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDc0OEIxNTFBODI2NDAwNDEyM0ZG
IC8qIGNvbmZpZy5oICovOyB9OwpAQCAtNDg3LDYgKzQ5MCw5IEBACiAJCUE4QTQ3MzcwMTUxQTgy
NUIwMDQxMjNGRiAvKiBWZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VmVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QTQ3MzcxMTUxQTgyNUIw
MDQxMjNGRiAvKiBWZWN0b3JUcmFpdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVmVjdG9yVHJhaXRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QTQ3Mzcy
MTUxQTgyNUIwMDQxMjNGRiAvKiBWTVRhZ3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVk1UYWdzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDMkU2RTdEMTE0
MTk3MEMwMEE2M0IxRSAvKiBXb3JrUXVldWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gV29ya1F1ZXVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QkMyRTZFN0UxMTQxOTcwQzAwQTYzQjFFIC8qIFdvcmtRdWV1ZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXb3JrUXVldWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQkMwMDkyRjYxMTU4MzdBMzAwRTBBRTJBIC8qIFdvcmtRdWV1ZU1hYy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXb3JrUXVldWVNYWMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlBOEE0NzM3QTE1MUE4MjVCMDA0MTIzRkYgLyogV1RGVGhyZWFk
RGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXVEZUaHJlYWRE
YXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDczN0IxNTFBODI1QjAw
NDEyM0ZGIC8qIFdURlRocmVhZERhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV1RGVGhyZWFkRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEE0NzQ4
QjE1MUE4MjY0MDA0MTIzRkYgLyogY29uZmlnLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IGNvbmZpZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzE3LDYgKzcy
Myw4IEBACiAJCQkJQThBNDczNzAxNTFBODI1QjAwNDEyM0ZGIC8qIFZlY3Rvci5oICovLAogCQkJ
CUE4QTQ3MzcxMTUxQTgyNUIwMDQxMjNGRiAvKiBWZWN0b3JUcmFpdHMuaCAqLywKIAkJCQlBOEE0
NzM3MjE1MUE4MjVCMDA0MTIzRkYgLyogVk1UYWdzLmggKi8sCisJCQkJQkMyRTZFN0QxMTQxOTcw
QzAwQTYzQjFFIC8qIFdvcmtRdWV1ZS5jcHAgKi8sCisJCQkJQkMyRTZFN0UxMTQxOTcwQzAwQTYz
QjFFIC8qIFdvcmtRdWV1ZS5oICovLAogCQkJCUE4QTQ3MzdBMTUxQTgyNUIwMDQxMjNGRiAvKiBX
VEZUaHJlYWREYXRhLmNwcCAqLywKIAkJCQlBOEE0NzM3QjE1MUE4MjVCMDA0MTIzRkYgLyogV1RG
VGhyZWFkRGF0YS5oICovLAogCQkJCUE4NzZEQkQ3MTUxODE2RTUwMERBREI5NSAvKiBQbGF0Zm9y
bS5oICovLApAQCAtNzU2LDYgKzc2NCw3IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxk
cmVuID0gKAogCQkJCUE4QTQ3MkM1MTUxQTgyNUEwMDQxMjNGRiAvKiBNYWluVGhyZWFkTWFjLm1t
ICovLAorCQkJCUJDMDA5MkY2MTE1ODM3QTMwMEUwQUUyQSAvKiBXb3JrUXVldWVNYWMuY3BwICov
LAogCQkJKTsKIAkJCXBhdGggPSBtYWM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAt
MTAzNyw2ICsxMDQ2LDcgQEAKIAkJCQlBOEE0NzQ3RTE1MUE4MjVCMDA0MTIzRkYgLyogVmVjdG9y
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ3RjE1MUE4MjVCMDA0MTIzRkYgLyogVmVjdG9y
VHJhaXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ4MDE1MUE4MjVCMDA0MTIzRkYgLyog
Vk1UYWdzLmggaW4gSGVhZGVycyAqLywKKwkJCQlCQzJFNkU4RTExNDE5NzE1MDBBNjNCMUUgLyog
V29ya1F1ZXVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ4NzE1MUE4MjVCMDA0MTIzRkYg
LyogV1RGVGhyZWFkRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0OEMxNTFBODI2NDAw
NDEyM0ZGIC8qIGNvbmZpZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQzRjYxMjAxNTY1RjBGOTAw
REI1MTRBIC8qIFJBTVNpemUuaCBpbiBIZWFkZXJzICovLApAQCAtMTE4Niw2ICsxMTk2LDggQEAK
IAkJCQlBOEE0NzQ3NDE1MUE4MjVCMDA0MTIzRkYgLyogVVJMQ2hhcmFjdGVyVHlwZXMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQThBNDc0NzcxNTFBODI1QjAwNDEyM0ZGIC8qIFVSTEVzY2FwZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQ3QjE1MUE4MjVCMDA0MTIzRkYgLyogVVJMU2Vn
bWVudHMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQkMyRTZFOEQxMTQxOTcxNTAwQTYzQjFFIC8q
IFdvcmtRdWV1ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCQzAwOTJGODExNTgzN0EzMDBFMEFF
MkEgLyogV29ya1F1ZXVlTWFjLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDg2MTUxQTgy
NUIwMDQxMjNGRiAvKiBXVEZUaHJlYWREYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0M0Y2
MTFGMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dURi93
dGYvQ01ha2VMaXN0cy50eHQKaW5kZXggMjc0ZjA0Yzk3NDkzMTlhZWY0ODA0NDc5MTZkZDIyODI3
MjUwODY4Zi4uYmU5NTRmMDQzODNkOWI4ZjliZTQzOTkxMDFlZTAyZmViZGY0MmFmOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dURi93dGYv
Q01ha2VMaXN0cy50eHQKQEAgLTEwMiw2ICsxMDIsNyBAQCBTRVQoV1RGX0hFQURFUlMKICAgICBW
YWx1ZUNoZWNrLmgKICAgICBWZWN0b3IuaAogICAgIFZlY3RvclRyYWl0cy5oCisgICAgV29ya1F1
ZXVlLmgKICAgICBXVEZUaHJlYWREYXRhLmgKICAgICBkdG9hLmgKIApAQCAtMTYxLDYgKzE2Miw3
IEBAIFNFVChXVEZfU09VUkNFUwogICAgIFN0cmluZ0V4dHJhcy5jcHAKICAgICBUaHJlYWRpbmcu
Y3BwCiAgICAgVHlwZVRyYWl0cy5jcHAKKyAgICBXb3JrUXVldWUuY3BwCiAgICAgV1RGVGhyZWFk
RGF0YS5jcHAKICAgICBkdG9hLmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0
Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IDFh
MTNkYmJhMzU1ODRlMDU2YzQ5MjkxZTM4N2EzMjI1NzEwZDEzMDguLmZkMTdmNTc4NWVkYmZkN2Ey
NzE4MmI0YTNkZWEyNGYwOTFlZmQ4NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRm
b3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC0x
LDYgKzEsNyBAQAogTElTVChBUFBFTkQgV1RGX1NPVVJDRVMKICAgICBlZmwvTWFpblRocmVhZEVm
bC5jcHAKICAgICBlZmwvT3duUHRyRWZsLmNwcAorICAgIGVmbC9Xb3JrUXVldWVFZmwuY3BwCiAg
ICAgZ29iamVjdC9HT3duUHRyLmNwcAogICAgIGdvYmplY3QvR1JlZlB0ci5jcHAKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oIGIvU291cmNl
L1dURi93dGYvUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY3ZmY1M2Jj
ZDZjOWZiNGYyOTc3YTg4Yzg0Yjc2OWMwZDhiZmQ3MTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV1RGL3d0Zi9QbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmgKQEAgLTAsMCArMSw1OSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKworI2lmbmRlZiBQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyX2gKKyNkZWZp
bmUgUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllcl9oCisKKyNpZiBQTEFURk9STShRVCkKK2NsYXNz
IFFQcm9jZXNzOworI2VsaWYgUExBVEZPUk0oRUZMKQorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2Vu
ZGlmCisKK25hbWVzcGFjZSBXVEYgeworCisjaWYgUExBVEZPUk0oTUFDKQordHlwZWRlZiBwaWRf
dCBQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyOworI2VsaWYgUExBVEZPUk0oV0lOKQordHlwZWRl
ZiBIQU5ETEUgUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllcjsKKyNlbGlmIFBMQVRGT1JNKFFUKQor
dHlwZWRlZiBRUHJvY2VzcyogUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllcjsKKyNlbGlmIFBMQVRG
T1JNKEdUSykKKyNpZmRlZiBHX09TX1dJTjMyCit0eXBlZGVmIHZvaWQqIEdQaWQ7CisjZWxzZQor
dHlwZWRlZiBpbnQgR1BpZDsKKyNlbmRpZgordHlwZWRlZiBHUGlkIFBsYXRmb3JtUHJvY2Vzc0lk
ZW50aWZpZXI7CisjZWxpZiBQTEFURk9STShFRkwpCit0eXBlZGVmIHBpZF90IFBsYXRmb3JtUHJv
Y2Vzc0lkZW50aWZpZXI7CisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdU
Rjo6UGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllcjsKKworI2VuZGlmIC8vIFBsYXRmb3JtUHJvY2Vz
c0lkZW50aWZpZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvV29ya1F1ZXVlLmNwcCBi
L1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGY1ZmQxNGViNGJjOWU1
NTIwMTQ0MmMzMjhkYmFmMmYzNjY1OGY2ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYv
d3RmL1dvcmtRdWV1ZS5jcHAKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJXb3JrUXVldWUuaCIKKworbmFtZXNwYWNlIFdURiB7CisK
K1dvcmtRdWV1ZTo6V29ya1F1ZXVlKGNvbnN0IGNoYXIqIG5hbWUpCisgICAgOiBtX2lzVmFsaWQo
dHJ1ZSkKK3sKKyAgICBwbGF0Zm9ybUluaXRpYWxpemUobmFtZSk7Cit9CisKK1dvcmtRdWV1ZTo6
fldvcmtRdWV1ZSgpCit7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIE11dGV4TG9ja2VyIGxv
Y2tlcihtX2lzVmFsaWRNdXRleCk7CisgICAgQVNTRVJUKCFtX2lzVmFsaWQpOworI2VuZGlmCit9
CisKK3ZvaWQgV29ya1F1ZXVlOjppbnZhbGlkYXRlKCkKK3sKKyAgICB7CisgICAgICAgIE11dGV4
TG9ja2VyIGxvY2tlcihtX2lzVmFsaWRNdXRleCk7CisgICAgICAgIG1faXNWYWxpZCA9IGZhbHNl
OworICAgIH0KKworICAgIHBsYXRmb3JtSW52YWxpZGF0ZSgpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5oIGIvU291cmNlL1dU
Ri93dGYvV29ya1F1ZXVlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTJiOTIxYTAxNzRiOWFiZThmMTU1NTcwZTUx
NzM5NTUwODY3ODhiNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1
ZS5oCkBAIC0wLDAgKzEsMjE2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBN
b3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBXb3JrUXVldWVfaAorI2RlZmluZSBXb3JrUXVldWVfaAorCisjaWYgT1MoREFSV0lO
KQorI2lmIEhBVkUoRElTUEFUQ0hfSCkKKyNpbmNsdWRlIDxkaXNwYXRjaC9kaXNwYXRjaC5oPgor
I2VuZGlmCisjZW5kaWYKKworI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3Rm
L0Z1bmN0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Q
YXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYv
VGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCisjaWYgKFBMQVRGT1JNKFFU
KSAmJiAhT1MoREFSV0lOKSkgfHwgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShFRkwpCisjaW5j
bHVkZSAiUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oIgorI2VuZGlmCisKKyNpZiBQTEFURk9S
TShRVCkgJiYgIU9TKERBUldJTikKKyNpbmNsdWRlIDxRU29ja2V0Tm90aWZpZXI+CitjbGFzcyBR
T2JqZWN0OworY2xhc3MgUVRocmVhZDsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyNpbmNsdWRlIDx3
dGYvZ29iamVjdC9HUmVmUHRyLmg+Cit0eXBlZGVmIGdib29sZWFuICgqR1NvdXJjZUZ1bmMpIChn
cG9pbnRlciBkYXRhKTsKKyNlbGlmIFBMQVRGT1JNKEVGTCkKKyNpbmNsdWRlIDxFY29yZS5oPgor
I2VuZGlmCisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBXb3JrUXVldWUgeworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKFdvcmtRdWV1ZSk7CisKK3B1YmxpYzoKKyAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgZXhwbGljaXQgV29ya1F1ZXVlKGNvbnN0IGNoYXIqIG5hbWUpOworICAgIFdURl9FWFBP
UlRfUFJJVkFURSB+V29ya1F1ZXVlKCk7CisKKyAgICAvLyBXaWxsIGRpc3BhdGNoIHRoZSBnaXZl
biBmdW5jdGlvbiB0byBydW4gYXMgc29vbiBhcyBwb3NzaWJsZS4KKyAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgdm9pZCBkaXNwYXRjaChjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7CisKKyAgICAvLyBX
aWxsIGRpc3BhdGNoIHRoZSBnaXZlbiBmdW5jdGlvbiBhZnRlciB0aGUgZ2l2ZW4gZGVsYXkgKGlu
IHNlY29uZHMpLgorICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGRpc3BhdGNoQWZ0ZXJEZWxh
eShjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiwgZG91YmxlIGRlbGF5KTsKKworICAgIFdURl9FWFBP
UlRfUFJJVkFURSB2b2lkIGludmFsaWRhdGUoKTsKKworI2lmIE9TKERBUldJTikKKyAgICBlbnVt
IE1hY2hQb3J0RXZlbnRUeXBlIHsKKyAgICAgICAgLy8gRmlyZWQgd2hlbiB0aGVyZSBpcyBkYXRh
IG9uIHRoZSBnaXZlbiByZWNlaXZlIHJpZ2h0LgorICAgICAgICBNYWNoUG9ydERhdGFBdmFpbGFi
bGUsCisgICAgICAgIAorICAgICAgICAvLyBGaXJlZCB3aGVuIHRoZSByZWNlaXZlIHJpZ2h0IGZv
ciB0aGlzIHNlbmQgcmlnaHQgaGFzIGJlZW4gZGVzdHJveWVkLgorICAgICAgICBNYWNoUG9ydERl
YWROYW1lTm90aWZpY2F0aW9uCisgICAgfTsKKyAgICAKKyAgICAvLyBXaWxsIGV4ZWN1dGUgdGhl
IGdpdmVuIGZ1bmN0aW9uIHdoZW5ldmVyIHRoZSBnaXZlbiBtYWNoIHBvcnQgZXZlbnQgZmlyZXMu
CisgICAgLy8gTm90ZSB0aGF0IHRoaXMgd2lsbCBhZG9wdCB0aGUgbWFjaCBwb3J0IGFuZCBkZXN0
cm95IGl0IHdoZW4gdGhlIHdvcmsgcXVldWUgaXMgaW52YWxpZGF0ZWQuCisgICAgV1RGX0VYUE9S
VF9QUklWQVRFIHZvaWQgcmVnaXN0ZXJNYWNoUG9ydEV2ZW50SGFuZGxlcihtYWNoX3BvcnRfdCwg
TWFjaFBvcnRFdmVudFR5cGUsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsKKyAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgdm9pZCB1bnJlZ2lzdGVyTWFjaFBvcnRFdmVudEhhbmRsZXIobWFjaF9wb3J0
X3QpOworI2VsaWYgUExBVEZPUk0oV0lOKQorICAgIHZvaWQgcmVnaXN0ZXJIYW5kbGUoSEFORExF
LCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7CisgICAgdm9pZCB1bnJlZ2lzdGVyQW5kQ2xvc2VI
YW5kbGUoSEFORExFKTsKKyNlbGlmIFBMQVRGT1JNKFFUKQorICAgIFFTb2NrZXROb3RpZmllciog
cmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIoaW50LCBRU29ja2V0Tm90aWZpZXI6OlR5cGUsIGNv
bnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsKKyAgICB2b2lkIGRpc3BhdGNoT25UZXJtaW5hdGlvbihQ
bGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7CisjZWxp
ZiBQTEFURk9STShHVEspCisgICAgdm9pZCByZWdpc3RlckV2ZW50U291cmNlSGFuZGxlcihpbnQs
IGludCwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOworICAgIHZvaWQgdW5yZWdpc3RlckV2ZW50
U291cmNlSGFuZGxlcihpbnQpOworICAgIHZvaWQgZGlzcGF0Y2hPblRlcm1pbmF0aW9uKFBsYXRm
b3JtUHJvY2Vzc0lkZW50aWZpZXIsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsKKyNlbGlmIFBM
QVRGT1JNKEVGTCkKKyAgICB2b2lkIHJlZ2lzdGVyU29ja2V0RXZlbnRIYW5kbGVyKGludCwgY29u
c3QgRnVuY3Rpb248dm9pZCgpPiYpOworICAgIHZvaWQgdW5yZWdpc3RlclNvY2tldEV2ZW50SGFu
ZGxlcihpbnQpOworI2VuZGlmCisKK3ByaXZhdGU6CisgICAgLy8gRklYTUU6IFVzZSBhbiBhdG9t
aWMgYm9vbGVhbiBoZXJlIGluc3RlYWQuCisgICAgTXV0ZXggbV9pc1ZhbGlkTXV0ZXg7CisgICAg
Ym9vbCBtX2lzVmFsaWQ7CisKKyAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZShjb25zdCBjaGFy
KiBuYW1lKTsKKyAgICB2b2lkIHBsYXRmb3JtSW52YWxpZGF0ZSgpOworCisjaWYgT1MoREFSV0lO
KQorI2lmIEhBVkUoRElTUEFUQ0hfSCkKKyAgICBzdGF0aWMgdm9pZCBleGVjdXRlRnVuY3Rpb24o
dm9pZCopOworICAgIE11dGV4IG1fZXZlbnRTb3VyY2VzTXV0ZXg7CisgICAgY2xhc3MgRXZlbnRT
b3VyY2U7CisgICAgSGFzaE1hcDxtYWNoX3BvcnRfdCwgRXZlbnRTb3VyY2UqPiBtX2V2ZW50U291
cmNlczsKKyAgICBkaXNwYXRjaF9xdWV1ZV90IG1fZGlzcGF0Y2hRdWV1ZTsKKyNlbmRpZgorI2Vs
aWYgUExBVEZPUk0oV0lOKQorICAgIGNsYXNzIFdvcmtJdGVtV2luIDogcHVibGljIFRocmVhZFNh
ZmVSZWZDb3VudGVkPFdvcmtJdGVtV2luPiB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxXb3JrSXRlbVdpbj4gY3JlYXRlKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mLCBX
b3JrUXVldWUqKTsKKyAgICAgICAgdmlydHVhbCB+V29ya0l0ZW1XaW4oKTsKKworICAgICAgICBG
dW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbigpIHsgcmV0dXJuIG1fZnVuY3Rpb247IH0KKyAgICAg
ICAgV29ya1F1ZXVlKiBxdWV1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcXVldWU7IH0KKworICAgIHBy
b3RlY3RlZDoKKyAgICAgICAgV29ya0l0ZW1XaW4oY29uc3QgRnVuY3Rpb248dm9pZCgpPiYsIFdv
cmtRdWV1ZSopOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgRnVuY3Rpb248dm9pZCgpPiBtX2Z1
bmN0aW9uOworICAgICAgICBXb3JrUXVldWUqIG1fcXVldWU7CisgICAgfTsKKworICAgIGNsYXNz
IEhhbmRsZVdvcmtJdGVtIDogcHVibGljIFdvcmtJdGVtV2luIHsKKyAgICBwdWJsaWM6CisgICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhhbmRsZVdvcmtJdGVtPiBjcmVhdGVCeUFkb3B0aW5nSGFu
ZGxlKEhBTkRMRSwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYsIFdvcmtRdWV1ZSopOworICAgICAg
ICB2aXJ0dWFsIH5IYW5kbGVXb3JrSXRlbSgpOworCisgICAgICAgIHZvaWQgc2V0V2FpdEhhbmRs
ZShIQU5ETEUgd2FpdEhhbmRsZSkgeyBtX3dhaXRIYW5kbGUgPSB3YWl0SGFuZGxlOyB9CisgICAg
ICAgIEhBTkRMRSB3YWl0SGFuZGxlKCkgY29uc3QgeyByZXR1cm4gbV93YWl0SGFuZGxlOyB9CisK
KyAgICBwcml2YXRlOgorICAgICAgICBIYW5kbGVXb3JrSXRlbShIQU5ETEUsIGNvbnN0IEZ1bmN0
aW9uPHZvaWQoKT4mLCBXb3JrUXVldWUqKTsKKworICAgICAgICBIQU5ETEUgbV9oYW5kbGU7Cisg
ICAgICAgIEhBTkRMRSBtX3dhaXRIYW5kbGU7CisgICAgfTsKKworICAgIHN0YXRpYyB2b2lkIENB
TExCQUNLIGhhbmRsZUNhbGxiYWNrKHZvaWQqIGNvbnRleHQsIEJPT0xFQU4gdGltZXJPcldhaXRG
aXJlZCk7CisgICAgc3RhdGljIHZvaWQgQ0FMTEJBQ0sgdGltZXJDYWxsYmFjayh2b2lkKiBjb250
ZXh0LCBCT09MRUFOIHRpbWVyT3JXYWl0RmlyZWQpOworICAgIHN0YXRpYyBEV09SRCBXSU5BUEkg
d29ya1RocmVhZENhbGxiYWNrKHZvaWQqIGNvbnRleHQpOworCisgICAgYm9vbCB0cnlSZWdpc3Rl
ckFzV29ya1RocmVhZCgpOworICAgIHZvaWQgdW5yZWdpc3RlckFzV29ya1RocmVhZCgpOworICAg
IHZvaWQgcGVyZm9ybVdvcmtPblJlZ2lzdGVyZWRXb3JrVGhyZWFkKCk7CisKKyAgICBzdGF0aWMg
dm9pZCB1bnJlZ2lzdGVyV2FpdEFuZERlc3Ryb3lJdGVtU29vbihQYXNzUmVmUHRyPEhhbmRsZVdv
cmtJdGVtPik7CisgICAgc3RhdGljIERXT1JEIFdJTkFQSSB1bnJlZ2lzdGVyV2FpdEFuZERlc3Ry
b3lJdGVtQ2FsbGJhY2sodm9pZCogY29udGV4dCk7CisKKyAgICB2b2xhdGlsZSBMT05HIG1faXNX
b3JrVGhyZWFkUmVnaXN0ZXJlZDsKKworICAgIE11dGV4IG1fd29ya0l0ZW1RdWV1ZUxvY2s7Cisg
ICAgVmVjdG9yPFJlZlB0cjxXb3JrSXRlbVdpbj4gPiBtX3dvcmtJdGVtUXVldWU7CisKKyAgICBN
dXRleCBtX2hhbmRsZXNMb2NrOworICAgIEhhc2hNYXA8SEFORExFLCBSZWZQdHI8SGFuZGxlV29y
a0l0ZW0+ID4gbV9oYW5kbGVzOworCisgICAgSEFORExFIG1fdGltZXJRdWV1ZTsKKyNlbGlmIFBM
QVRGT1JNKFFUKQorICAgIGNsYXNzIFdvcmtJdGVtUXQ7CisgICAgUVRocmVhZCogbV93b3JrVGhy
ZWFkOworICAgIGZyaWVuZCBjbGFzcyBXb3JrSXRlbVF0OworI2VsaWYgUExBVEZPUk0oR1RLKQor
ICAgIHN0YXRpYyB2b2lkIHN0YXJ0V29ya1F1ZXVlVGhyZWFkKFdvcmtRdWV1ZSopOworICAgIHZv
aWQgd29ya1F1ZXVlVGhyZWFkQm9keSgpOworICAgIHZvaWQgZGlzcGF0Y2hPblNvdXJjZShHU291
cmNlKiwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYsIEdTb3VyY2VGdW5jKTsKKworICAgIFRocmVh
ZElkZW50aWZpZXIgbV93b3JrUXVldWVUaHJlYWQ7CisgICAgR1JlZlB0cjxHTWFpbkNvbnRleHQ+
IG1fZXZlbnRDb250ZXh0OworICAgIE11dGV4IG1fZXZlbnRMb29wTG9jazsKKyAgICBHUmVmUHRy
PEdNYWluTG9vcD4gbV9ldmVudExvb3A7CisgICAgTXV0ZXggbV9ldmVudFNvdXJjZXNMb2NrOwor
ICAgIGNsYXNzIEV2ZW50U291cmNlOworICAgIEhhc2hNYXA8aW50LCBWZWN0b3I8RXZlbnRTb3Vy
Y2UqPiA+IG1fZXZlbnRTb3VyY2VzOworICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIFZlY3RvcjxF
dmVudFNvdXJjZSo+ID46Oml0ZXJhdG9yIEV2ZW50U291cmNlSXRlcmF0b3I7IAorI2VsaWYgUExB
VEZPUk0oRUZMKQorICAgIGZkX3NldCBtX2ZpbGVEZXNjcmlwdG9yU2V0OworICAgIGludCBtX21h
eEZpbGVEZXNjcmlwdG9yOworICAgIGludCBtX3JlYWRGcm9tUGlwZURlc2NyaXB0b3I7CisgICAg
aW50IG1fd3JpdGVUb1BpcGVEZXNjcmlwdG9yOworICAgIGJvb2wgbV90aHJlYWRMb29wOworCisg
ICAgVmVjdG9yPEZ1bmN0aW9uPHZvaWQoKT4gPiBtX3dvcmtJdGVtUXVldWU7CisgICAgTXV0ZXgg
bV93b3JrSXRlbVF1ZXVlTG9jazsKKworICAgIGludCBtX3NvY2tldERlc2NyaXB0b3I7CisgICAg
RnVuY3Rpb248dm9pZCgpPiBtX3NvY2tldEV2ZW50SGFuZGxlcjsKKworICAgIEhhc2hNYXA8aW50
LCBPd25QdHI8RWNvcmVfVGltZXI+ID4gbV90aW1lcnM7CisKKyAgICB2b2lkIHNlbmRNZXNzYWdl
VG9UaHJlYWQoY29uc3QgY2hhciopOworICAgIHN0YXRpYyB2b2lkKiB3b3JrUXVldWVUaHJlYWQo
V29ya1F1ZXVlKik7CisgICAgdm9pZCBwZXJmb3JtV29yaygpOworICAgIHZvaWQgcGVyZm9ybUZp
bGVEZXNjcmlwdG9yV29yaygpOworICAgIHN0YXRpYyBib29sIHRpbWVyRmlyZWQodm9pZCopOwor
I2VuZGlmCit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpXb3JrUXVldWU7
CisKKyNlbmRpZiAvLyBXb3JrUXVldWVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvZWZs
L1dvcmtRdWV1ZUVmbC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9lZmwvV29ya1F1ZXVlRWZsLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4zYTM5YmE5ZWQ5YjEyNzBmZTdkZjllNmNlNjg1ZGI0NzNhNWY1OGE3Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvZWZsL1dvcmtRdWV1ZUVmbC5jcHAKQEAgLTAs
MCArMSwxNzMgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25p
Y3MKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldvcmtRdWV1ZS5oIgorCisj
aW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworY2xhc3MgVGltZXJXb3JrSXRlbSB7CitwdWJs
aWM6CisgICAgVGltZXJXb3JrSXRlbShpbnQgdGltZXJJRCwgY29uc3QgRnVuY3Rpb248dm9pZCgp
PiYgZnVuY3Rpb24sIFdvcmtRdWV1ZSogcXVldWUpCisgICAgICAgIDogbV9mdW5jdGlvbihmdW5j
dGlvbikKKyAgICAgICAgLCBtX3F1ZXVlKHF1ZXVlKQorICAgICAgICAsIG1fdGltZXJJRCh0aW1l
cklEKQorICAgIHsKKyAgICB9CisgICAgflRpbWVyV29ya0l0ZW0oKSB7IH0KKworICAgIEZ1bmN0
aW9uPHZvaWQoKT4gZnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2Z1bmN0aW9uOyB9CisgICAg
V29ya1F1ZXVlKiBxdWV1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcXVldWU7IH0KKworICAgIGludCB0
aW1lcklEKCkgY29uc3QgeyByZXR1cm4gbV90aW1lcklEOyB9CisKK3ByaXZhdGU6CisgICAgRnVu
Y3Rpb248dm9pZCgpPiBtX2Z1bmN0aW9uOworICAgIFdvcmtRdWV1ZSogbV9xdWV1ZTsKKyAgICBp
bnQgbV90aW1lcklEOworfTsKKworc3RhdGljIGNvbnN0IGludCBpbnZhbGlkU29ja2V0RGVzY3Jp
cHRvciA9IC0xOworc3RhdGljIGNvbnN0IGludCB0aHJlYWRNZXNzYWdlU2l6ZSA9IDE7CitzdGF0
aWMgY29uc3QgY2hhciBmaW5pc2hUaHJlYWRNZXNzYWdlW10gPSAiRiI7CitzdGF0aWMgY29uc3Qg
Y2hhciB3YWt1cFRocmVhZE1lc3NhZ2VbXSA9ICJXIjsKKwordm9pZCBXb3JrUXVldWU6OnBsYXRm
b3JtSW5pdGlhbGl6ZShjb25zdCBjaGFyKiBuYW1lKQoreworICAgIGludCBmZHNbMl07CisgICAg
aWYgKHBpcGUoZmRzKSkKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICBtX3Jl
YWRGcm9tUGlwZURlc2NyaXB0b3IgPSBmZHNbMF07CisgICAgbV93cml0ZVRvUGlwZURlc2NyaXB0
b3IgPSBmZHNbMV07CisgICAgRkRfWkVSTygmbV9maWxlRGVzY3JpcHRvclNldCk7CisgICAgRkRf
U0VUKG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvciwgJm1fZmlsZURlc2NyaXB0b3JTZXQpOworICAg
IG1fbWF4RmlsZURlc2NyaXB0b3IgPSBtX3JlYWRGcm9tUGlwZURlc2NyaXB0b3I7CisKKyAgICBt
X3NvY2tldERlc2NyaXB0b3IgPSBpbnZhbGlkU29ja2V0RGVzY3JpcHRvcjsKKworICAgIG1fdGhy
ZWFkTG9vcCA9IHRydWU7CisgICAgY3JlYXRlVGhyZWFkKHJlaW50ZXJwcmV0X2Nhc3Q8V1RGOjpU
aHJlYWRGdW5jdGlvbj4oJldvcmtRdWV1ZTo6d29ya1F1ZXVlVGhyZWFkKSwgdGhpcywgbmFtZSk7
Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjpwbGF0Zm9ybUludmFsaWRhdGUoKQoreworICAgIHNlbmRN
ZXNzYWdlVG9UaHJlYWQoZmluaXNoVGhyZWFkTWVzc2FnZSk7Cit9CisKK3ZvaWQgV29ya1F1ZXVl
OjpwZXJmb3JtV29yaygpCit7CisgICAgbV93b3JrSXRlbVF1ZXVlTG9jay5sb2NrKCk7CisKKyAg
ICB3aGlsZSAoIW1fd29ya0l0ZW1RdWV1ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgVmVjdG9yPEZ1
bmN0aW9uPHZvaWQoKT4gPiB3b3JrSXRlbVF1ZXVlOworICAgICAgICBtX3dvcmtJdGVtUXVldWUu
c3dhcCh3b3JrSXRlbVF1ZXVlKTsKKworICAgICAgICBtX3dvcmtJdGVtUXVldWVMb2NrLnVubG9j
aygpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdvcmtJdGVtUXVldWUuc2l6ZSgp
OyArK2kpCisgICAgICAgICAgICB3b3JrSXRlbVF1ZXVlW2ldKCk7CisgICAgICAgIG1fd29ya0l0
ZW1RdWV1ZUxvY2subG9jaygpOworICAgIH0KKyAgICBtX3dvcmtJdGVtUXVldWVMb2NrLnVubG9j
aygpOworfQorCit2b2lkIFdvcmtRdWV1ZTo6cGVyZm9ybUZpbGVEZXNjcmlwdG9yV29yaygpCit7
CisgICAgZmRfc2V0IHJlYWRGaWxlRGVzY3JpcHRvclNldCA9IG1fZmlsZURlc2NyaXB0b3JTZXQ7
CisKKyAgICBpZiAoc2VsZWN0KG1fbWF4RmlsZURlc2NyaXB0b3IgKyAxLCAmcmVhZEZpbGVEZXNj
cmlwdG9yU2V0LCAwLCAwLCAwKSA+PSAwKSB7CisgICAgICAgIGlmIChGRF9JU1NFVChtX3JlYWRG
cm9tUGlwZURlc2NyaXB0b3IsICZyZWFkRmlsZURlc2NyaXB0b3JTZXQpKSB7CisgICAgICAgICAg
ICBjaGFyIHJlYWRCdWZbdGhyZWFkTWVzc2FnZVNpemVdOworICAgICAgICAgICAgaWYgKHJlYWQo
bV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yLCByZWFkQnVmLCB0aHJlYWRNZXNzYWdlU2l6ZSkgPT0g
LTEpCisgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmVhZCBmcm9tIFdvcmtR
dWV1ZVRocmVhZCBwaXBlIik7CisgICAgICAgICAgICBpZiAoIXN0cm5jbXAocmVhZEJ1ZiwgZmlu
aXNoVGhyZWFkTWVzc2FnZSwgdGhyZWFkTWVzc2FnZVNpemUpKQorICAgICAgICAgICAgICAgIG1f
dGhyZWFkTG9vcCA9IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1fc29ja2V0RGVz
Y3JpcHRvciAhPSBpbnZhbGlkU29ja2V0RGVzY3JpcHRvciAmJiBGRF9JU1NFVChtX3NvY2tldERl
c2NyaXB0b3IsICZyZWFkRmlsZURlc2NyaXB0b3JTZXQpKQorICAgICAgICAgICAgbV9zb2NrZXRF
dmVudEhhbmRsZXIoKTsKKyAgICB9Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjpzZW5kTWVzc2FnZVRv
VGhyZWFkKGNvbnN0IGNoYXIqIG1lc3NhZ2UpCit7CisgICAgaWYgKHdyaXRlKG1fd3JpdGVUb1Bp
cGVEZXNjcmlwdG9yLCBtZXNzYWdlLCB0aHJlYWRNZXNzYWdlU2l6ZSkgPT0gLTEpCisgICAgICAg
IExPR19FUlJPUigiRmFpbGVkIHRvIHdha2UgdXAgV29ya1F1ZXVlIFRocmVhZCIpOworfQorCit2
b2lkKiBXb3JrUXVldWU6OndvcmtRdWV1ZVRocmVhZChXb3JrUXVldWUqIHdvcmtRdWV1ZSkKK3sK
KyAgICB3aGlsZSAod29ya1F1ZXVlLT5tX3RocmVhZExvb3ApIHsKKyAgICAgICAgd29ya1F1ZXVl
LT5wZXJmb3JtV29yaygpOworICAgICAgICB3b3JrUXVldWUtPnBlcmZvcm1GaWxlRGVzY3JpcHRv
cldvcmsoKTsKKyAgICB9CisKKyAgICBjbG9zZSh3b3JrUXVldWUtPm1fcmVhZEZyb21QaXBlRGVz
Y3JpcHRvcik7CisgICAgY2xvc2Uod29ya1F1ZXVlLT5tX3dyaXRlVG9QaXBlRGVzY3JpcHRvcik7
CisKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBXb3JrUXVldWU6OnJlZ2lzdGVyU29ja2V0RXZl
bnRIYW5kbGVyKGludCBmaWxlRGVzY3JpcHRvciwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVu
Y3Rpb24pCit7CisgICAgaWYgKG1fc29ja2V0RGVzY3JpcHRvciAhPSBpbnZhbGlkU29ja2V0RGVz
Y3JpcHRvcikKKyAgICAgICAgTE9HX0VSUk9SKCIlZCBpcyBhbHJlYWR5IHJlZ2lzdGVyZC4iLCBm
aWxlRGVzY3JpcHRvcik7CisKKyAgICBtX3NvY2tldERlc2NyaXB0b3IgPSBmaWxlRGVzY3JpcHRv
cjsKKyAgICBtX3NvY2tldEV2ZW50SGFuZGxlciA9IGZ1bmN0aW9uOworCisgICAgaWYgKGZpbGVE
ZXNjcmlwdG9yID4gbV9tYXhGaWxlRGVzY3JpcHRvcikKKyAgICAgICAgbV9tYXhGaWxlRGVzY3Jp
cHRvciA9IGZpbGVEZXNjcmlwdG9yOworICAgIEZEX1NFVChmaWxlRGVzY3JpcHRvciwgJm1fZmls
ZURlc2NyaXB0b3JTZXQpOworfQorCit2b2lkIFdvcmtRdWV1ZTo6dW5yZWdpc3RlclNvY2tldEV2
ZW50SGFuZGxlcihpbnQgZmlsZURlc2NyaXB0b3IpCit7CisgICAgbV9zb2NrZXREZXNjcmlwdG9y
ID0gaW52YWxpZFNvY2tldERlc2NyaXB0b3I7CisKKyAgICBpZiAoZmlsZURlc2NyaXB0b3IgPT0g
bV9tYXhGaWxlRGVzY3JpcHRvcikKKyAgICAgICAgbV9tYXhGaWxlRGVzY3JpcHRvciA9IG1fcmVh
ZEZyb21QaXBlRGVzY3JpcHRvcjsKKyAgICBGRF9DTFIoZmlsZURlc2NyaXB0b3IsICZtX2ZpbGVE
ZXNjcmlwdG9yU2V0KTsKK30KKwordm9pZCBXb3JrUXVldWU6OmRpc3BhdGNoKGNvbnN0IEZ1bmN0
aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3dvcmtJ
dGVtUXVldWVMb2NrKTsKKyAgICBtX3dvcmtJdGVtUXVldWUuYXBwZW5kKGZ1bmN0aW9uKTsKKyAg
ICBzZW5kTWVzc2FnZVRvVGhyZWFkKHdha3VwVGhyZWFkTWVzc2FnZSk7Cit9CisKK2Jvb2wgV29y
a1F1ZXVlOjp0aW1lckZpcmVkKHZvaWQqIGRhdGEpCit7CisgICAgVGltZXJXb3JrSXRlbSogaXRl
bSA9IHN0YXRpY19jYXN0PFRpbWVyV29ya0l0ZW0qPihkYXRhKTsKKyAgICBpZiAoaXRlbSAmJiBp
dGVtLT5xdWV1ZSgpLT5tX2lzVmFsaWQpIHsKKyAgICAgICAgaXRlbS0+cXVldWUoKS0+ZGlzcGF0
Y2goaXRlbS0+ZnVuY3Rpb24oKSk7CisgICAgICAgIGl0ZW0tPnF1ZXVlKCktPm1fdGltZXJzLnRh
a2UoaXRlbS0+dGltZXJJRCgpKTsKKyAgICAgICAgZGVsZXRlIGl0ZW07CisgICAgfQorCisgICAg
cmV0dXJuIEVDT1JFX0NBTExCQUNLX0NBTkNFTDsKK30KKwordm9pZCBXb3JrUXVldWU6OmRpc3Bh
dGNoQWZ0ZXJEZWxheShjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbiwgZG91YmxlIGRl
bGF5KQoreworICAgIHN0YXRpYyBpbnQgdGltZXJJZCA9IDA7CisgICAgbV90aW1lcnMuc2V0KHRp
bWVySWQsIGFkb3B0UHRyKGVjb3JlX3RpbWVyX2FkZChkZWxheSwgcmVpbnRlcnByZXRfY2FzdDxF
Y29yZV9UYXNrX0NiPih0aW1lckZpcmVkKSwgbmV3IFRpbWVyV29ya0l0ZW0odGltZXJJZCwgZnVu
Y3Rpb24sIHRoaXMpKSkpOworICAgIHRpbWVySWQrKzsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL2d0ay9Xb3JrUXVldWVHdGsuY3BwIGIvU291cmNlL1dURi93dGYvZ3RrL1dvcmtRdWV1
ZUd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYjkxZjYzNTFkNzNiMDIxMGVlYWM2Njk2NzM1ODg3ZWY4ZWE2
YTZkNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL2d0ay9Xb3JrUXVldWVHdGsu
Y3BwCkBAIC0wLDAgKzEsMjI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBT
LkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiV29ya1F1ZXVlLmgiCisKKyNpbmNsdWRlIDxnaW8vZ2lvLmg+CisjaW5jbHVkZSA8
Z2xpYi5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKworLy8gV29ya1F1ZXVl
OjpFdmVudFNvdXJjZQorY2xhc3MgV29ya1F1ZXVlOjpFdmVudFNvdXJjZSB7CitwdWJsaWM6Cisg
ICAgRXZlbnRTb3VyY2UoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24sIFdvcmtRdWV1
ZSogd29ya1F1ZXVlLCBHQ2FuY2VsbGFibGUqIGNhbmNlbGxhYmxlKQorICAgICAgICA6IG1fZnVu
Y3Rpb24oZnVuY3Rpb24pCisgICAgICAgICwgbV93b3JrUXVldWUod29ya1F1ZXVlKQorICAgICAg
ICAsIG1fY2FuY2VsbGFibGUoY2FuY2VsbGFibGUpCisgICAgeworICAgIH0KKworICAgIHZvaWQg
Y2FuY2VsKCkKKyAgICB7CisgICAgICAgIGlmICghbV9jYW5jZWxsYWJsZSkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgZ19jYW5jZWxsYWJsZV9jYW5jZWwobV9jYW5jZWxsYWJsZSk7Cisg
ICAgfQorCisgICAgc3RhdGljIHZvaWQgZXhlY3V0ZUV2ZW50U291cmNlKEV2ZW50U291cmNlKiBl
dmVudFNvdXJjZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChldmVudFNvdXJjZSk7CisgICAgICAg
IFdvcmtRdWV1ZSogcXVldWUgPSBldmVudFNvdXJjZS0+bV93b3JrUXVldWU7CisgICAgICAgIHsK
KyAgICAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihxdWV1ZS0+bV9pc1ZhbGlkTXV0ZXgpOwor
ICAgICAgICAgICAgaWYgKCFxdWV1ZS0+bV9pc1ZhbGlkKQorICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIGV2ZW50U291cmNlLT5tX2Z1bmN0aW9uKCk7CisgICAg
fQorCisgICAgc3RhdGljIGdib29sZWFuIHBlcmZvcm1Xb3JrT25jZShFdmVudFNvdXJjZSogZXZl
bnRTb3VyY2UpCisgICAgeworICAgICAgICBleGVjdXRlRXZlbnRTb3VyY2UoZXZlbnRTb3VyY2Up
OworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgc3RhdGljIGdib29sZWFuIHBl
cmZvcm1Xb3JrKEdTb2NrZXQqIHNvY2tldCwgR0lPQ29uZGl0aW9uIGNvbmRpdGlvbiwgRXZlbnRT
b3VyY2UqIGV2ZW50U291cmNlKQorICAgIHsKKyAgICAgICAgaWYgKCEoY29uZGl0aW9uICYgR19J
T19JTikgJiYgIShjb25kaXRpb24gJiBHX0lPX0hVUCkgJiYgIShjb25kaXRpb24gJiBHX0lPX0VS
UikpIHsKKyAgICAgICAgICAgIC8vIEV2ZW50U291cmNlIGhhcyBiZWVuIGNhbmNlbGxlZCwgcmV0
dXJuIEZBTFNFIHRvIGRlc3Ryb3kgdGhlIHNvdXJjZS4KKyAgICAgICAgICAgIHJldHVybiBGQUxT
RTsKKyAgICAgICAgfQorCisgICAgICAgIGV4ZWN1dGVFdmVudFNvdXJjZShldmVudFNvdXJjZSk7
CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKworICAgIHN0YXRpYyBnYm9vbGVhbiBwZXJm
b3JtV29ya09uVGVybWluYXRpb24oR1BpZCwgZ2ludCwgRXZlbnRTb3VyY2UqIGV2ZW50U291cmNl
KQorICAgIHsKKyAgICAgICAgZXhlY3V0ZUV2ZW50U291cmNlKGV2ZW50U291cmNlKTsKKyAgICAg
ICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGRlbGV0ZUV2ZW50U291
cmNlKEV2ZW50U291cmNlKiBldmVudFNvdXJjZSkgCisgICAgeworICAgICAgICBBU1NFUlQoZXZl
bnRTb3VyY2UpOworICAgICAgICBkZWxldGUgZXZlbnRTb3VyY2U7CisgICAgfQorICAgCitwdWJs
aWM6CisgICAgRnVuY3Rpb248dm9pZCgpPiBtX2Z1bmN0aW9uOworICAgIFdvcmtRdWV1ZSogbV93
b3JrUXVldWU7CisgICAgR0NhbmNlbGxhYmxlKiBtX2NhbmNlbGxhYmxlOworfTsKKworLy8gV29y
a1F1ZXVlCitzdGF0aWMgY29uc3Qgc2l6ZV90IGtWaXN1YWxTdHVkaW9UaHJlYWROYW1lTGltaXQg
PSAzMTsKKwordm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW5pdGlhbGl6ZShjb25zdCBjaGFyKiBu
YW1lKQoreworICAgIG1fZXZlbnRDb250ZXh0ID0gYWRvcHRHUmVmKGdfbWFpbl9jb250ZXh0X25l
dygpKTsKKyAgICBBU1NFUlQobV9ldmVudENvbnRleHQpOworICAgIG1fZXZlbnRMb29wID0gYWRv
cHRHUmVmKGdfbWFpbl9sb29wX25ldyhtX2V2ZW50Q29udGV4dC5nZXQoKSwgRkFMU0UpKTsKKyAg
ICBBU1NFUlQobV9ldmVudExvb3ApOworCisgICAgLy8gVGhpcyBuYW1lIGNhbiBiZSBjb20uYXBw
bGUuV2ViS2l0LlByb2Nlc3NMYXVuY2hlciBvciBjb20uYXBwbGUuQ29yZUlQQy5SZWNlaXZlUXVl
dWUuCisgICAgLy8gV2UgYXJlIHVzaW5nIHRob3NlIG5hbWVzIGZvciB0aGUgdGhyZWFkIG5hbWUs
IGJ1dCBib3RoIGFyZSBsb25nZXIgdGhhbiAzMSBjaGFyYWN0ZXJzLAorICAgIC8vIHdoaWNoIGlz
IHRoZSBsaW1pdCBvZiBWaXN1YWwgU3R1ZGlvIGZvciB0aHJlYWQgbmFtZXMuCisgICAgLy8gV2hl
biBsb2cgaXMgZW5hYmxlZCBjcmVhdGVUaHJlYWQoKSB3aWxsIGFzc2VydCBpbnN0ZWFkIG9mIHRy
dW5jYXRlIHRoZSBuYW1lLCBzbyB3ZSBuZWVkCisgICAgLy8gdG8gbWFrZSBzdXJlIHdlIGRvbid0
IHVzZSBhIG5hbWUgbG9uZ2VyIHRoYW4gMzEgY2hhcmFjdGVycy4KKyAgICBjb25zdCBjaGFyKiB0
aHJlYWROYW1lID0gZ19zdHJyc3RyKG5hbWUsICIuIik7CisgICAgaWYgKHRocmVhZE5hbWUpCisg
ICAgICAgIHRocmVhZE5hbWUrKzsKKyAgICBlbHNlCisgICAgICAgIHRocmVhZE5hbWUgPSBuYW1l
OworICAgIGlmIChzdHJsZW4odGhyZWFkTmFtZSkgPiBrVmlzdWFsU3R1ZGlvVGhyZWFkTmFtZUxp
bWl0KQorICAgICAgICB0aHJlYWROYW1lICs9IHN0cmxlbih0aHJlYWROYW1lKSAtIGtWaXN1YWxT
dHVkaW9UaHJlYWROYW1lTGltaXQ7CisKKyAgICBtX3dvcmtRdWV1ZVRocmVhZCA9IGNyZWF0ZVRo
cmVhZChyZWludGVycHJldF9jYXN0PFdURjo6VGhyZWFkRnVuY3Rpb24+KCZXb3JrUXVldWU6OnN0
YXJ0V29ya1F1ZXVlVGhyZWFkKSwgdGhpcywgdGhyZWFkTmFtZSk7Cit9CisKK3ZvaWQgV29ya1F1
ZXVlOjpwbGF0Zm9ybUludmFsaWRhdGUoKQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2V2
ZW50TG9vcExvY2spOworCisgICAgaWYgKG1fZXZlbnRMb29wKSB7CisgICAgICAgIGlmIChnX21h
aW5fbG9vcF9pc19ydW5uaW5nKG1fZXZlbnRMb29wLmdldCgpKSkKKyAgICAgICAgICAgIGdfbWFp
bl9sb29wX3F1aXQobV9ldmVudExvb3AuZ2V0KCkpOworICAgICAgICBtX2V2ZW50TG9vcC5jbGVh
cigpOworICAgIH0KKworICAgIG1fZXZlbnRDb250ZXh0LmNsZWFyKCk7Cit9CisKK3ZvaWQgV29y
a1F1ZXVlOjpzdGFydFdvcmtRdWV1ZVRocmVhZChXb3JrUXVldWUqIHdvcmtRdWV1ZSkKK3sKKyAg
ICB3b3JrUXVldWUtPndvcmtRdWV1ZVRocmVhZEJvZHkoKTsKK30KKwordm9pZCBXb3JrUXVldWU6
OndvcmtRdWV1ZVRocmVhZEJvZHkoKQoreworICAgIGdfbWFpbl9sb29wX3J1bihtX2V2ZW50TG9v
cC5nZXQoKSk7Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjpyZWdpc3RlckV2ZW50U291cmNlSGFuZGxl
cihpbnQgZmlsZURlc2NyaXB0b3IsIGludCBjb25kaXRpb24sIGNvbnN0IEZ1bmN0aW9uPHZvaWQo
KT4mIGZ1bmN0aW9uKQoreworICAgIEdSZWZQdHI8R1NvY2tldD4gc29ja2V0ID0gYWRvcHRHUmVm
KGdfc29ja2V0X25ld19mcm9tX2ZkKGZpbGVEZXNjcmlwdG9yLCAwKSk7CisgICAgQVNTRVJUKHNv
Y2tldCk7CisgICAgR1JlZlB0cjxHQ2FuY2VsbGFibGU+IGNhbmNlbGxhYmxlID0gYWRvcHRHUmVm
KGdfY2FuY2VsbGFibGVfbmV3KCkpOworICAgIEdSZWZQdHI8R1NvdXJjZT4gZGlzcGF0Y2hTb3Vy
Y2UgPSBhZG9wdEdSZWYoZ19zb2NrZXRfY3JlYXRlX3NvdXJjZShzb2NrZXQuZ2V0KCksIHN0YXRp
Y19jYXN0PEdJT0NvbmRpdGlvbj4oY29uZGl0aW9uKSwgY2FuY2VsbGFibGUuZ2V0KCkpKTsKKyAg
ICBBU1NFUlQoZGlzcGF0Y2hTb3VyY2UpOworICAgIEV2ZW50U291cmNlKiBldmVudFNvdXJjZSA9
IG5ldyBFdmVudFNvdXJjZShmdW5jdGlvbiwgdGhpcywgY2FuY2VsbGFibGUuZ2V0KCkpOworICAg
IEFTU0VSVChldmVudFNvdXJjZSk7CisKKyAgICBnX3NvdXJjZV9zZXRfY2FsbGJhY2soZGlzcGF0
Y2hTb3VyY2UuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KCZXb3JrUXVldWU6
OkV2ZW50U291cmNlOjpwZXJmb3JtV29yayksCisgICAgICAgIGV2ZW50U291cmNlLCByZWludGVy
cHJldF9jYXN0PEdEZXN0cm95Tm90aWZ5PigmV29ya1F1ZXVlOjpFdmVudFNvdXJjZTo6ZGVsZXRl
RXZlbnRTb3VyY2UpKTsKKworICAgIC8vIFNldCB1cCB0aGUgZXZlbnQgc291cmNlcyB1bmRlciB0
aGUgbXV0ZXggc2luY2UgdGhpcyBpcyBzaGFyZWQgYWNyb3NzIG11bHRpcGxlIHRocmVhZHMuCisg
ICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9ldmVudFNvdXJjZXNMb2NrKTsKKyAg
ICAgICAgVmVjdG9yPEV2ZW50U291cmNlKj4gc291cmNlczsKKyAgICAgICAgRXZlbnRTb3VyY2VJ
dGVyYXRvciBpdCA9IG1fZXZlbnRTb3VyY2VzLmZpbmQoZmlsZURlc2NyaXB0b3IpOworICAgICAg
ICBpZiAoaXQgIT0gbV9ldmVudFNvdXJjZXMuZW5kKCkpIAorICAgICAgICAgICAgc291cmNlcyA9
IGl0LT5zZWNvbmQ7CisKKyAgICAgICAgc291cmNlcy5hcHBlbmQoZXZlbnRTb3VyY2UpOworICAg
ICAgICBtX2V2ZW50U291cmNlcy5zZXQoZmlsZURlc2NyaXB0b3IsIHNvdXJjZXMpOworICAgIH0K
KworICAgIGdfc291cmNlX2F0dGFjaChkaXNwYXRjaFNvdXJjZS5nZXQoKSwgbV9ldmVudENvbnRl
eHQuZ2V0KCkpOworfQorCit2b2lkIFdvcmtRdWV1ZTo6dW5yZWdpc3RlckV2ZW50U291cmNlSGFu
ZGxlcihpbnQgZmlsZURlc2NyaXB0b3IpCit7CisgICAgQVNTRVJUKGZpbGVEZXNjcmlwdG9yKTsK
KyAgICAKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9ldmVudFNvdXJjZXNMb2NrKTsKKyAgICAK
KyAgICBFdmVudFNvdXJjZUl0ZXJhdG9yIGl0ID0gbV9ldmVudFNvdXJjZXMuZmluZChmaWxlRGVz
Y3JpcHRvcik7CisgICAgQVNTRVJUKGl0ICE9IG1fZXZlbnRTb3VyY2VzLmVuZCgpKTsKKyAgICBB
U1NFUlQobV9ldmVudFNvdXJjZXMuY29udGFpbnMoZmlsZURlc2NyaXB0b3IpKTsKKworICAgIGlm
IChpdCAhPSBtX2V2ZW50U291cmNlcy5lbmQoKSkgeworICAgICAgICBWZWN0b3I8RXZlbnRTb3Vy
Y2UqPiBzb3VyY2VzID0gaXQtPnNlY29uZDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHNvdXJjZXMuc2l6ZSgpOyBpKyspCisgICAgICAgICAgICBzb3VyY2VzW2ldLT5jYW5jZWwo
KTsKKworICAgICAgICBtX2V2ZW50U291cmNlcy5yZW1vdmUoaXQpOworICAgIH0KK30KKwordm9p
ZCBXb3JrUXVldWU6OmRpc3BhdGNoT25Tb3VyY2UoR1NvdXJjZSogZGlzcGF0Y2hTb3VyY2UsIGNv
bnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uLCBHU291cmNlRnVuYyBzb3VyY2VDYWxsYmFj
aykKK3sKKyAgICBFdmVudFNvdXJjZSogZXZlbnRTb3VyY2UgPSBuZXcgRXZlbnRTb3VyY2UoZnVu
Y3Rpb24sIHRoaXMsIDApOworCisgICAgZ19zb3VyY2Vfc2V0X2NhbGxiYWNrKGRpc3BhdGNoU291
cmNlLCBzb3VyY2VDYWxsYmFjaywgZXZlbnRTb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KCZXb3JrUXVldWU6OkV2ZW50U291
cmNlOjpkZWxldGVFdmVudFNvdXJjZSkpOworCisgICAgZ19zb3VyY2VfYXR0YWNoKGRpc3BhdGNo
U291cmNlLCBtX2V2ZW50Q29udGV4dC5nZXQoKSk7Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjpkaXNw
YXRjaChjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKK3sKKyAgICBHUmVmUHRyPEdT
b3VyY2U+IGRpc3BhdGNoU291cmNlID0gYWRvcHRHUmVmKGdfaWRsZV9zb3VyY2VfbmV3KCkpOwor
ICAgIEFTU0VSVChkaXNwYXRjaFNvdXJjZSk7CisgICAgZ19zb3VyY2Vfc2V0X3ByaW9yaXR5KGRp
c3BhdGNoU291cmNlLmdldCgpLCBHX1BSSU9SSVRZX0RFRkFVTFQpOworCisgICAgZGlzcGF0Y2hP
blNvdXJjZShkaXNwYXRjaFNvdXJjZS5nZXQoKSwgZnVuY3Rpb24sIHJlaW50ZXJwcmV0X2Nhc3Q8
R1NvdXJjZUZ1bmM+KCZXb3JrUXVldWU6OkV2ZW50U291cmNlOjpwZXJmb3JtV29ya09uY2UpKTsK
K30KKwordm9pZCBXb3JrUXVldWU6OmRpc3BhdGNoQWZ0ZXJEZWxheShjb25zdCBGdW5jdGlvbjx2
b2lkKCk+JiBmdW5jdGlvbiwgZG91YmxlIGRlbGF5KQoreworICAgIEdSZWZQdHI8R1NvdXJjZT4g
ZGlzcGF0Y2hTb3VyY2UgPSBhZG9wdEdSZWYoZ190aW1lb3V0X3NvdXJjZV9uZXcoc3RhdGljX2Nh
c3Q8Z3VpbnQ+KGRlbGF5ICogMTAwMCkpKTsKKyAgICBBU1NFUlQoZGlzcGF0Y2hTb3VyY2UpOwor
CisgICAgZGlzcGF0Y2hPblNvdXJjZShkaXNwYXRjaFNvdXJjZS5nZXQoKSwgZnVuY3Rpb24sIHJl
aW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KCZXb3JrUXVldWU6OkV2ZW50U291cmNlOjpwZXJm
b3JtV29ya09uY2UpKTsKK30KKwordm9pZCBXb3JrUXVldWU6OmRpc3BhdGNoT25UZXJtaW5hdGlv
bihQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyIHByb2Nlc3MsIGNvbnN0IEZ1bmN0aW9uPHZvaWQo
KT4mIGZ1bmN0aW9uKQoreworICAgIEdSZWZQdHI8R1NvdXJjZT4gZGlzcGF0Y2hTb3VyY2UgPSBh
ZG9wdEdSZWYoZ19jaGlsZF93YXRjaF9zb3VyY2VfbmV3KHByb2Nlc3MpKTsKKyAgICBBU1NFUlQo
ZGlzcGF0Y2hTb3VyY2UpOworCisgICAgZGlzcGF0Y2hPblNvdXJjZShkaXNwYXRjaFNvdXJjZS5n
ZXQoKSwgZnVuY3Rpb24sIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KCZXb3JrUXVldWU6
OkV2ZW50U291cmNlOjpwZXJmb3JtV29ya09uVGVybWluYXRpb24pKTsKK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL21hYy9Xb3JrUXVldWVNYWMuY3BwIGIvU291cmNlL1dURi93dGYvbWFj
L1dvcmtRdWV1ZU1hYy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGFlZTdiMjQ4MzliMGEzMjNiYTJiYWI4OTA5
NTljYTNkYmM3MzNkNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL21hYy9Xb3Jr
UXVldWVNYWMuY3BwCkBAIC0wLDAgKzEsMTgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIldvcmtRdWV1ZS5oIgorCisjaW5jbHVkZSA8bWFjaC9tYWNoX2lu
aXQuaD4KKyNpbmNsdWRlIDxtYWNoL21hY2hfcG9ydC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3du
UHRyLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit2b2lkIFdvcmtRdWV1ZTo6ZXhlY3V0ZUZ1bmN0
aW9uKHZvaWQqIGNvbnRleHQpCit7CisgICAgV29ya1F1ZXVlKiBxdWV1ZSA9IHN0YXRpY19jYXN0
PFdvcmtRdWV1ZSo+KGRpc3BhdGNoX2dldF9jb250ZXh0KGRpc3BhdGNoX2dldF9jdXJyZW50X3F1
ZXVlKCkpKTsKKyAgICBPd25QdHI8RnVuY3Rpb248dm9pZCgpPiA+IGZ1bmN0aW9uID0gYWRvcHRQ
dHIoc3RhdGljX2Nhc3Q8RnVuY3Rpb248dm9pZCgpPio+KGNvbnRleHQpKTsKKyAgICAKKyAgICB7
CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihxdWV1ZS0+bV9pc1ZhbGlkTXV0ZXgpOworICAg
ICAgICBpZiAoIXF1ZXVlLT5tX2lzVmFsaWQpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgKCpmdW5jdGlvbikoKTsKK30KKwordm9pZCBXb3JrUXVldWU6OmRpc3BhdGNoKGNvbnN0
IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQoreworICAgIGRpc3BhdGNoX2FzeW5jX2YobV9k
aXNwYXRjaFF1ZXVlLCBuZXcgRnVuY3Rpb248dm9pZCgpPihmdW5jdGlvbiksIGV4ZWN1dGVGdW5j
dGlvbik7Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjpkaXNwYXRjaEFmdGVyRGVsYXkoY29uc3QgRnVu
Y3Rpb248dm9pZCgpPiYgZnVuY3Rpb24sIGRvdWJsZSBkZWxheSkKK3sKKyAgICBkaXNwYXRjaF90
aW1lX3QgZGVsYXlUaW1lID0gZGlzcGF0Y2hfdGltZShESVNQQVRDSF9USU1FX05PVywgZGVsYXkg
KiBOU0VDX1BFUl9TRUMpOworCisgICAgZGlzcGF0Y2hfYWZ0ZXJfZihkZWxheVRpbWUsIG1fZGlz
cGF0Y2hRdWV1ZSwgbmV3IEZ1bmN0aW9uPHZvaWQoKT4oZnVuY3Rpb24pLCBleGVjdXRlRnVuY3Rp
b24pOworfQorCitjbGFzcyBXb3JrUXVldWU6OkV2ZW50U291cmNlIHsKK3B1YmxpYzoKKyAgICBF
dmVudFNvdXJjZShNYWNoUG9ydEV2ZW50VHlwZSBldmVudFR5cGUsIGRpc3BhdGNoX3NvdXJjZV90
IGRpc3BhdGNoU291cmNlLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKKyAgICAg
ICAgOiBtX2V2ZW50VHlwZShldmVudFR5cGUpCisgICAgICAgICwgbV9kaXNwYXRjaFNvdXJjZShk
aXNwYXRjaFNvdXJjZSkKKyAgICAgICAgLCBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQorICAgIHsKKyAg
ICB9CisgICAgCisgICAgZGlzcGF0Y2hfc291cmNlX3QgZGlzcGF0Y2hTb3VyY2UoKSBjb25zdCB7
IHJldHVybiBtX2Rpc3BhdGNoU291cmNlOyB9CisgICAgCisgICAgc3RhdGljIHZvaWQgZXZlbnRI
YW5kbGVyKHZvaWQqIHNvdXJjZSkgCisgICAgeworICAgICAgICBFdmVudFNvdXJjZSogZXZlbnRT
b3VyY2UgPSBzdGF0aWNfY2FzdDxFdmVudFNvdXJjZSo+KHNvdXJjZSk7CisgICAgICAgIAorICAg
ICAgICBldmVudFNvdXJjZS0+bV9mdW5jdGlvbigpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMg
dm9pZCBjYW5jZWxIYW5kbGVyKHZvaWQqIHNvdXJjZSkKKyAgICB7CisgICAgICAgIEV2ZW50U291
cmNlKiBldmVudFNvdXJjZSA9IHN0YXRpY19jYXN0PEV2ZW50U291cmNlKj4oc291cmNlKTsKKyAg
ICAgICAgCisgICAgICAgIG1hY2hfcG9ydF90IG1hY2hQb3J0ID0gZGlzcGF0Y2hfc291cmNlX2dl
dF9oYW5kbGUoZXZlbnRTb3VyY2UtPm1fZGlzcGF0Y2hTb3VyY2UpOworICAgICAgICAKKyAgICAg
ICAgc3dpdGNoIChldmVudFNvdXJjZS0+bV9ldmVudFR5cGUpIHsKKyAgICAgICAgY2FzZSBNYWNo
UG9ydERhdGFBdmFpbGFibGU6CisgICAgICAgICAgICAvLyBSZWxlYXNlIG91ciByZWNlaXZlIHJp
Z2h0LgorICAgICAgICAgICAgbWFjaF9wb3J0X21vZF9yZWZzKG1hY2hfdGFza19zZWxmKCksIG1h
Y2hQb3J0LCBNQUNIX1BPUlRfUklHSFRfUkVDRUlWRSwgLTEpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgTWFjaFBvcnREZWFkTmFtZU5vdGlmaWNhdGlvbjoKKyAgICAgICAgICAg
IC8vIFJlbGVhc2Ugb3VyIHNlbmQgcmlnaHQuCisgICAgICAgICAgICBtYWNoX3BvcnRfZGVhbGxv
Y2F0ZShtYWNoX3Rhc2tfc2VsZigpLCBtYWNoUG9ydCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCBmaW5hbGl6ZUhhbmRsZXIodm9p
ZCogc291cmNlKQorICAgIHsKKyAgICAgICAgRXZlbnRTb3VyY2UqIGV2ZW50U291cmNlID0gc3Rh
dGljX2Nhc3Q8RXZlbnRTb3VyY2UqPihzb3VyY2UpOworICAgICAgICAKKyAgICAgICAgZGVsZXRl
IGV2ZW50U291cmNlOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgTWFjaFBvcnRFdmVudFR5
cGUgbV9ldmVudFR5cGU7CisgICAgCisgICAgLy8gVGhpcyBpcyBhIHdlYWsgcmVmZXJlbmNlLCBz
aW5jZSBtX2Rpc3BhdGNoU291cmNlIHJlZmVyZW5jZXMgdGhlIGV2ZW50IHNvdXJjZS4KKyAgICBk
aXNwYXRjaF9zb3VyY2VfdCBtX2Rpc3BhdGNoU291cmNlOworCisgICAgRnVuY3Rpb248dm9pZCgp
PiBtX2Z1bmN0aW9uOworfTsKKwordm9pZCBXb3JrUXVldWU6OnJlZ2lzdGVyTWFjaFBvcnRFdmVu
dEhhbmRsZXIobWFjaF9wb3J0X3QgbWFjaFBvcnQsIE1hY2hQb3J0RXZlbnRUeXBlIGV2ZW50VHlw
ZSwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCit7CisgICAgZGlzcGF0Y2hfc291
cmNlX3R5cGVfdCBzb3VyY2VUeXBlID0gMDsKKyAgICBzd2l0Y2ggKGV2ZW50VHlwZSkgeworICAg
IGNhc2UgTWFjaFBvcnREYXRhQXZhaWxhYmxlOgorICAgICAgICBzb3VyY2VUeXBlID0gRElTUEFU
Q0hfU09VUkNFX1RZUEVfTUFDSF9SRUNWOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE1hY2hQ
b3J0RGVhZE5hbWVOb3RpZmljYXRpb246CisgICAgICAgIHNvdXJjZVR5cGUgPSBESVNQQVRDSF9T
T1VSQ0VfVFlQRV9NQUNIX1NFTkQ7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBk
aXNwYXRjaF9zb3VyY2VfdCBkaXNwYXRjaFNvdXJjZSA9IGRpc3BhdGNoX3NvdXJjZV9jcmVhdGUo
c291cmNlVHlwZSwgbWFjaFBvcnQsIDAsIG1fZGlzcGF0Y2hRdWV1ZSk7CisgICAgCisgICAgRXZl
bnRTb3VyY2UqIGV2ZW50U291cmNlID0gbmV3IEV2ZW50U291cmNlKGV2ZW50VHlwZSwgZGlzcGF0
Y2hTb3VyY2UsIGZ1bmN0aW9uKTsKKyAgICBkaXNwYXRjaF9zZXRfY29udGV4dChkaXNwYXRjaFNv
dXJjZSwgZXZlbnRTb3VyY2UpOworICAgIAorICAgIGRpc3BhdGNoX3NvdXJjZV9zZXRfZXZlbnRf
aGFuZGxlcl9mKGRpc3BhdGNoU291cmNlLCAmRXZlbnRTb3VyY2U6OmV2ZW50SGFuZGxlcik7Cisg
ICAgZGlzcGF0Y2hfc291cmNlX3NldF9jYW5jZWxfaGFuZGxlcl9mKGRpc3BhdGNoU291cmNlLCAm
RXZlbnRTb3VyY2U6OmNhbmNlbEhhbmRsZXIpOworICAgIGRpc3BhdGNoX3NldF9maW5hbGl6ZXJf
ZihkaXNwYXRjaFNvdXJjZSwgJkV2ZW50U291cmNlOjpmaW5hbGl6ZUhhbmRsZXIpOworICAgIAor
ICAgIC8vIEFkZCB0aGUgc291cmNlIHRvIG91ciBzZXQgb2Ygc291cmNlcy4KKyAgICB7CisgICAg
ICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2V2ZW50U291cmNlc011dGV4KTsKKyAgICAgICAgCisg
ICAgICAgIEFTU0VSVCghbV9ldmVudFNvdXJjZXMuY29udGFpbnMobWFjaFBvcnQpKTsKKyAgICAg
ICAgCisgICAgICAgIG1fZXZlbnRTb3VyY2VzLnNldChtYWNoUG9ydCwgZXZlbnRTb3VyY2UpOwor
ICAgICAgICAKKyAgICAgICAgLy8gQW5kIHN0YXJ0IGl0IQorICAgICAgICBkaXNwYXRjaF9yZXN1
bWUoZGlzcGF0Y2hTb3VyY2UpOworICAgIH0KK30KKwordm9pZCBXb3JrUXVldWU6OnVucmVnaXN0
ZXJNYWNoUG9ydEV2ZW50SGFuZGxlcihtYWNoX3BvcnRfdCBtYWNoUG9ydCkKK3sKKyAgICBBU1NF
UlQobWFjaFBvcnQpOworICAgIAorICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2V2ZW50U291cmNl
c011dGV4KTsKKyAgICAKKyAgICBIYXNoTWFwPG1hY2hfcG9ydF90LCBFdmVudFNvdXJjZSo+Ojpp
dGVyYXRvciBpdCA9IG1fZXZlbnRTb3VyY2VzLmZpbmQobWFjaFBvcnQpOworICAgIEFTU0VSVChp
dCAhPSBtX2V2ZW50U291cmNlcy5lbmQoKSk7CisgICAgCisgICAgQVNTRVJUKG1fZXZlbnRTb3Vy
Y2VzLmNvbnRhaW5zKG1hY2hQb3J0KSk7CisKKyAgICBFdmVudFNvdXJjZSogZXZlbnRTb3VyY2Ug
PSBpdC0+c2Vjb25kOworICAgIC8vIENhbmNlbCBhbmQgcmVsZWFzZSB0aGUgc291cmNlLiBJdCB3
aWxsIGJlIGRlbGV0ZWQgaW4gaXRzIGZpbmFsaXplIGhhbmRsZXIuCisgICAgZGlzcGF0Y2hfc291
cmNlX2NhbmNlbChldmVudFNvdXJjZS0+ZGlzcGF0Y2hTb3VyY2UoKSk7CisgICAgZGlzcGF0Y2hf
cmVsZWFzZShldmVudFNvdXJjZS0+ZGlzcGF0Y2hTb3VyY2UoKSk7CisKKyAgICBtX2V2ZW50U291
cmNlcy5yZW1vdmUoaXQpOyAgICAKK30KKwordm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW5pdGlh
bGl6ZShjb25zdCBjaGFyKiBuYW1lKQoreworICAgIG1fZGlzcGF0Y2hRdWV1ZSA9IGRpc3BhdGNo
X3F1ZXVlX2NyZWF0ZShuYW1lLCAwKTsKKyAgICBkaXNwYXRjaF9zZXRfY29udGV4dChtX2Rpc3Bh
dGNoUXVldWUsIHRoaXMpOworfQorCit2b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1JbnZhbGlkYXRl
KCkKK3sKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZXZl
bnRTb3VyY2VzTXV0ZXgpOworICAgIEFTU0VSVChtX2V2ZW50U291cmNlcy5pc0VtcHR5KCkpOwor
I2VuZGlmCisKKyAgICBkaXNwYXRjaF9yZWxlYXNlKG1fZGlzcGF0Y2hRdWV1ZSk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvcXQvV29ya1F1ZXVl
UXQuY3BwIGIvU291cmNlL1dURi93dGYvcXQvV29ya1F1ZXVlUXQuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA1
MDkxZmZkYTczOTYwYzYwYzQwZjFmNGNlZWU5NTJjNjFjM2Q2NmIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi9xdC9Xb3JrUXVldWVRdC5jcHAKQEAgLTAsMCArMSwxMzIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lk
aWFyeSgtaWVzKQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV29y
a1F1ZXVlLmgiCisKKyNpbmNsdWRlIDxRT2JqZWN0PgorI2luY2x1ZGUgPFFQcm9jZXNzPgorI2lu
Y2x1ZGUgPFFUaHJlYWQ+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCituYW1lc3BhY2Ug
V1RGIHsKKworY2xhc3MgV29ya1F1ZXVlOjpXb3JrSXRlbVF0IDogcHVibGljIFFPYmplY3Qgewor
ICAgIFFfT0JKRUNUCitwdWJsaWM6CisgICAgV29ya0l0ZW1RdChXb3JrUXVldWUqIHdvcmtRdWV1
ZSwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCisgICAgICAgIDogbV9xdWV1ZSh3
b3JrUXVldWUpCisgICAgICAgICwgbV9zb3VyY2UoMCkKKyAgICAgICAgLCBtX3NpZ25hbCgwKQor
ICAgICAgICAsIG1fZnVuY3Rpb24oZnVuY3Rpb24pCisgICAgeworICAgIH0KKworICAgIFdvcmtJ
dGVtUXQoV29ya1F1ZXVlKiB3b3JrUXVldWUsIFFPYmplY3QqIHNvdXJjZSwgY29uc3QgY2hhciog
c2lnbmFsLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKKyAgICAgICAgOiBtX3F1
ZXVlKHdvcmtRdWV1ZSkKKyAgICAgICAgLCBtX3NvdXJjZShzb3VyY2UpCisgICAgICAgICwgbV9z
aWduYWwoc2lnbmFsKQorICAgICAgICAsIG1fZnVuY3Rpb24oZnVuY3Rpb24pCisgICAgeworICAg
ICAgICBjb25uZWN0KG1fc291cmNlLCBtX3NpZ25hbCwgU0xPVChleGVjdXRlKCkpLCBRdDo6UXVl
dWVkQ29ubmVjdGlvbik7CisgICAgfQorCisgICAgfldvcmtJdGVtUXQoKQorICAgIHsKKyAgICB9
CisKKyAgICBRX1NMT1Qgdm9pZCBleGVjdXRlKCkgCisgICAgeyAKKyAgICAgICAgaWYgKG1fcXVl
dWUtPm1faXNWYWxpZCkKKyAgICAgICAgICAgIG1fZnVuY3Rpb24oKTsKKyAgICB9CisKKyAgICBR
X1NMT1Qgdm9pZCBleGVjdXRlQW5kRGVsZXRlKCkKKyAgICB7CisgICAgICAgIGV4ZWN1dGUoKTsK
KyAgICAgICAgZGVsZXRlIHRoaXM7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHRpbWVyRXZl
bnQoUVRpbWVyRXZlbnQqKQorICAgIHsKKyAgICAgICAgZXhlY3V0ZUFuZERlbGV0ZSgpOworICAg
IH0KKworICAgIFdvcmtRdWV1ZSogbV9xdWV1ZTsKKyAgICBRT2JqZWN0KiBtX3NvdXJjZTsKKyAg
ICBjb25zdCBjaGFyKiBtX3NpZ25hbDsKKyAgICBGdW5jdGlvbjx2b2lkKCk+IG1fZnVuY3Rpb247
Cit9OworCitRU29ja2V0Tm90aWZpZXIqIFdvcmtRdWV1ZTo6cmVnaXN0ZXJTb2NrZXRFdmVudEhh
bmRsZXIoaW50IHNvY2tldERlc2NyaXB0b3IsIFFTb2NrZXROb3RpZmllcjo6VHlwZSB0eXBlLCBj
b25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKK3sKKyAgICBBU1NFUlQobV93b3JrVGhy
ZWFkKTsKKworICAgIFFTb2NrZXROb3RpZmllciogbm90aWZpZXIgPSBuZXcgUVNvY2tldE5vdGlm
aWVyKHNvY2tldERlc2NyaXB0b3IsIHR5cGUsIDApOworICAgIG5vdGlmaWVyLT5zZXRFbmFibGVk
KGZhbHNlKTsKKyAgICBub3RpZmllci0+bW92ZVRvVGhyZWFkKG1fd29ya1RocmVhZCk7CisgICAg
V29ya1F1ZXVlOjpXb3JrSXRlbVF0KiBpdGVtUXQgPSBuZXcgV29ya1F1ZXVlOjpXb3JrSXRlbVF0
KHRoaXMsIG5vdGlmaWVyLCBTSUdOQUwoYWN0aXZhdGVkKGludCkpLCBmdW5jdGlvbik7CisgICAg
aXRlbVF0LT5tb3ZlVG9UaHJlYWQobV93b3JrVGhyZWFkKTsKKyAgICBub3RpZmllci0+c2V0RW5h
YmxlZCh0cnVlKTsKKyAgICByZXR1cm4gbm90aWZpZXI7Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjpw
bGF0Zm9ybUluaXRpYWxpemUoY29uc3QgY2hhciopCit7CisgICAgbV93b3JrVGhyZWFkID0gbmV3
IFFUaHJlYWQoKTsKKyAgICBtX3dvcmtUaHJlYWQtPnN0YXJ0KCk7Cit9CisKK3ZvaWQgV29ya1F1
ZXVlOjpwbGF0Zm9ybUludmFsaWRhdGUoKQoreworICAgIG1fd29ya1RocmVhZC0+ZXhpdCgpOwor
ICAgIG1fd29ya1RocmVhZC0+d2FpdCgpOworICAgIGRlbGV0ZSBtX3dvcmtUaHJlYWQ7Cit9CisK
K3ZvaWQgV29ya1F1ZXVlOjpkaXNwYXRjaChjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlv
bikKK3sKKyAgICBXb3JrUXVldWU6OldvcmtJdGVtUXQqIGl0ZW1RdCA9IG5ldyBXb3JrUXVldWU6
OldvcmtJdGVtUXQodGhpcywgZnVuY3Rpb24pOworICAgIGl0ZW1RdC0+bW92ZVRvVGhyZWFkKG1f
d29ya1RocmVhZCk7CisgICAgUU1ldGFPYmplY3Q6Omludm9rZU1ldGhvZChpdGVtUXQsICJleGVj
dXRlQW5kRGVsZXRlIiwgUXQ6OlF1ZXVlZENvbm5lY3Rpb24pOworfQorCit2b2lkIFdvcmtRdWV1
ZTo6ZGlzcGF0Y2hBZnRlckRlbGF5KGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uLCBk
b3VibGUgZGVsYXlJblNlY29uZCkKK3sKKyAgICBXb3JrUXVldWU6OldvcmtJdGVtUXQqIGl0ZW1R
dCA9IG5ldyBXb3JrUXVldWU6OldvcmtJdGVtUXQodGhpcywgZnVuY3Rpb24pOworICAgIGl0ZW1R
dC0+c3RhcnRUaW1lcihzdGF0aWNfY2FzdDxpbnQ+KGRlbGF5SW5TZWNvbmQgKiAxMDAwKSk7Cisg
ICAgaXRlbVF0LT5tb3ZlVG9UaHJlYWQobV93b3JrVGhyZWFkKTsKK30KKwordm9pZCBXb3JrUXVl
dWU6OmRpc3BhdGNoT25UZXJtaW5hdGlvbihQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyIHByb2Nl
c3MsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQoreworICAgIFdvcmtRdWV1ZTo6
V29ya0l0ZW1RdCogaXRlbVF0ID0gbmV3IFdvcmtRdWV1ZTo6V29ya0l0ZW1RdCh0aGlzLCBwcm9j
ZXNzLCBTSUdOQUwoZmluaXNoZWQoaW50LCBRUHJvY2Vzczo6RXhpdFN0YXR1cykpLCBmdW5jdGlv
bik7CisgICAgaXRlbVF0LT5tb3ZlVG9UaHJlYWQobV93b3JrVGhyZWFkKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV1RGCisKKyNpbmNsdWRlICJXb3JrUXVldWVRdC5tb2MiCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi93aW4vV29ya1F1ZXVlV2luLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3dpbi9X
b3JrUXVldWVXaW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZmNzYwNTcxM2JmOTM2MDJjZDM1MTQ2ZmZhNGRh
NThiOGM2ZTUyZjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi93aW4vV29ya1F1
ZXVlV2luLmNwcApAQCAtMCwwICsxLDI5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXb3JrUXVldWUuaCIKKworI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcu
aD4KKworbmFtZXNwYWNlIFdURiB7CisKK2lubGluZSBXb3JrUXVldWU6OldvcmtJdGVtV2luOjpX
b3JrSXRlbVdpbihjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbiwgV29ya1F1ZXVlKiBx
dWV1ZSkKKyAgICA6IG1fZnVuY3Rpb24oZnVuY3Rpb24pCisgICAgLCBtX3F1ZXVlKHF1ZXVlKQor
eworfQorCitQYXNzUmVmUHRyPFdvcmtRdWV1ZTo6V29ya0l0ZW1XaW4+IFdvcmtRdWV1ZTo6V29y
a0l0ZW1XaW46OmNyZWF0ZShjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbiwgV29ya1F1
ZXVlKiBxdWV1ZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdvcmtJdGVtV2luKGZ1bmN0
aW9uLCBxdWV1ZSkpOworfQorCitXb3JrUXVldWU6OldvcmtJdGVtV2luOjp+V29ya0l0ZW1XaW4o
KQoreworfQorCitpbmxpbmUgV29ya1F1ZXVlOjpIYW5kbGVXb3JrSXRlbTo6SGFuZGxlV29ya0l0
ZW0oSEFORExFIGhhbmRsZSwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24sIFdvcmtR
dWV1ZSogcXVldWUpCisgICAgOiBXb3JrSXRlbVdpbihmdW5jdGlvbiwgcXVldWUpCisgICAgLCBt
X2hhbmRsZShoYW5kbGUpCisgICAgLCBtX3dhaXRIYW5kbGUoMCkKK3sKKyAgICBBU1NFUlRfQVJH
KGhhbmRsZSwgaGFuZGxlKTsKK30KKworUGFzc1JlZlB0cjxXb3JrUXVldWU6OkhhbmRsZVdvcmtJ
dGVtPiBXb3JrUXVldWU6OkhhbmRsZVdvcmtJdGVtOjpjcmVhdGVCeUFkb3B0aW5nSGFuZGxlKEhB
TkRMRSBoYW5kbGUsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uLCBXb3JrUXVldWUq
IHF1ZXVlKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgSGFuZGxlV29ya0l0ZW0oaGFuZGxl
LCBmdW5jdGlvbiwgcXVldWUpKTsKK30KKworV29ya1F1ZXVlOjpIYW5kbGVXb3JrSXRlbTo6fkhh
bmRsZVdvcmtJdGVtKCkKK3sKKyAgICA6OkNsb3NlSGFuZGxlKG1faGFuZGxlKTsKK30KKwordm9p
ZCBXb3JrUXVldWU6OmhhbmRsZUNhbGxiYWNrKHZvaWQqIGNvbnRleHQsIEJPT0xFQU4gdGltZXJP
cldhaXRGaXJlZCkKK3sKKyAgICBBU1NFUlRfQVJHKGNvbnRleHQsIGNvbnRleHQpOworICAgIEFT
U0VSVF9BUkcodGltZXJPcldhaXRGaXJlZCwgIXRpbWVyT3JXYWl0RmlyZWQpOworCisgICAgV29y
a0l0ZW1XaW4qIGl0ZW0gPSBzdGF0aWNfY2FzdDxXb3JrSXRlbVdpbio+KGNvbnRleHQpOworICAg
IFdvcmtRdWV1ZSogcXVldWUgPSBpdGVtLT5xdWV1ZSgpOworCisgICAgeworICAgICAgICBNdXRl
eExvY2tlciBsb2NrKHF1ZXVlLT5tX3dvcmtJdGVtUXVldWVMb2NrKTsKKyAgICAgICAgcXVldWUt
Pm1fd29ya0l0ZW1RdWV1ZS5hcHBlbmQoaXRlbSk7CisKKyAgICAgICAgLy8gSWYgbm8gb3RoZXIg
dGhyZWFkIGlzIHBlcmZvcm1pbmcgd29yaywgd2UgY2FuIGRvIGl0IG9uIHRoaXMgdGhyZWFkLgor
ICAgICAgICBpZiAoIXF1ZXVlLT50cnlSZWdpc3RlckFzV29ya1RocmVhZCgpKSB7CisgICAgICAg
ICAgICAvLyBTb21lIG90aGVyIHRocmVhZCBpcyBwZXJmb3JtaW5nIHdvcmsuIFNpbmNlIHdlIGhv
bGQgdGhlIHF1ZXVlIGxvY2ssIHdlIGNhbiBiZSBzdXJlCisgICAgICAgICAgICAvLyB0aGF0IHRo
ZSB3b3JrIHRocmVhZCBpcyBub3QgZXhpdGluZyBkdWUgdG8gYW4gZW1wdHkgcXVldWUgYW5kIHdp
bGwgcHJvY2VzcyB0aGUgd29yaworICAgICAgICAgICAgLy8gaXRlbSB3ZSBqdXN0IGFkZGVkIHRv
IGl0LiBJZiB3ZSB3ZXJlbid0IGhvbGRpbmcgdGhlIGxvY2sgd2UnZCBoYXZlIHRvIHNpZ25hbAor
ICAgICAgICAgICAgLy8gbV9wZXJmb3JtV29ya0V2ZW50IHRvIG1ha2Ugc3VyZSB0aGUgd29yayBp
dGVtIGdvdCBwaWNrZWQgdXAuCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBxdWV1ZS0+cGVyZm9ybVdvcmtPblJlZ2lzdGVyZWRXb3JrVGhyZWFkKCk7Cit9CisK
K3ZvaWQgV29ya1F1ZXVlOjpyZWdpc3RlckhhbmRsZShIQU5ETEUgaGFuZGxlLCBjb25zdCBGdW5j
dGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKK3sKKyAgICBSZWZQdHI8SGFuZGxlV29ya0l0ZW0+IGhh
bmRsZUl0ZW0gPSBIYW5kbGVXb3JrSXRlbTo6Y3JlYXRlQnlBZG9wdGluZ0hhbmRsZShoYW5kbGUs
IGZ1bmN0aW9uLCB0aGlzKTsKKworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9jayhtX2hh
bmRsZXNMb2NrKTsKKyAgICAgICAgQVNTRVJUX0FSRyhoYW5kbGUsICFtX2hhbmRsZXMuY29udGFp
bnMoaGFuZGxlKSk7CisgICAgICAgIG1faGFuZGxlcy5zZXQoaGFuZGxlLCBoYW5kbGVJdGVtKTsK
KyAgICB9CisKKyAgICBIQU5ETEUgd2FpdEhhbmRsZTsKKyAgICBpZiAoITo6UmVnaXN0ZXJXYWl0
Rm9yU2luZ2xlT2JqZWN0KCZ3YWl0SGFuZGxlLCBoYW5kbGUsIGhhbmRsZUNhbGxiYWNrLCBoYW5k
bGVJdGVtLmdldCgpLCBJTkZJTklURSwgV1RfRVhFQ1VURURFRkFVTFQpKSB7CisgICAgICAgIERX
T1JEIGVycm9yID0gOjpHZXRMYXN0RXJyb3IoKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgfQorICAgIGhhbmRsZUl0ZW0tPnNldFdhaXRIYW5kbGUod2FpdEhhbmRsZSk7Cit9
CisKK3ZvaWQgV29ya1F1ZXVlOjp1bnJlZ2lzdGVyQW5kQ2xvc2VIYW5kbGUoSEFORExFIGhhbmRs
ZSkKK3sKKyAgICBSZWZQdHI8SGFuZGxlV29ya0l0ZW0+IGl0ZW07CisgICAgeworICAgICAgICBN
dXRleExvY2tlciBsb2NrZXIobV9oYW5kbGVzTG9jayk7CisgICAgICAgIEFTU0VSVF9BUkcoaGFu
ZGxlLCBtX2hhbmRsZXMuY29udGFpbnMoaGFuZGxlKSk7CisgICAgICAgIGl0ZW0gPSBtX2hhbmRs
ZXMudGFrZShoYW5kbGUpOworICAgIH0KKworICAgIHVucmVnaXN0ZXJXYWl0QW5kRGVzdHJveUl0
ZW1Tb29uKGl0ZW0ucmVsZWFzZSgpKTsKK30KKworRFdPUkQgV29ya1F1ZXVlOjp3b3JrVGhyZWFk
Q2FsbGJhY2sodm9pZCogY29udGV4dCkKK3sKKyAgICBBU1NFUlRfQVJHKGNvbnRleHQsIGNvbnRl
eHQpOworCisgICAgV29ya1F1ZXVlKiBxdWV1ZSA9IHN0YXRpY19jYXN0PFdvcmtRdWV1ZSo+KGNv
bnRleHQpOworCisgICAgaWYgKCFxdWV1ZS0+dHJ5UmVnaXN0ZXJBc1dvcmtUaHJlYWQoKSkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICBxdWV1ZS0+cGVyZm9ybVdvcmtPblJlZ2lzdGVyZWRXb3Jr
VGhyZWFkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjpwZXJmb3JtV29y
a09uUmVnaXN0ZXJlZFdvcmtUaHJlYWQoKQoreworICAgIEFTU0VSVChtX2lzV29ya1RocmVhZFJl
Z2lzdGVyZWQpOworCisgICAgYm9vbCBpc1ZhbGlkID0gdHJ1ZTsKKworICAgIG1fd29ya0l0ZW1R
dWV1ZUxvY2subG9jaygpOworCisgICAgd2hpbGUgKGlzVmFsaWQgJiYgIW1fd29ya0l0ZW1RdWV1
ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgVmVjdG9yPFJlZlB0cjxXb3JrSXRlbVdpbj4gPiB3b3Jr
SXRlbVF1ZXVlOworICAgICAgICBtX3dvcmtJdGVtUXVldWUuc3dhcCh3b3JrSXRlbVF1ZXVlKTsK
KworICAgICAgICAvLyBBbGxvdyBtb3JlIHdvcmsgdG8gYmUgc2NoZWR1bGVkIHdoaWxlIHdlJ3Jl
IG5vdCB1c2luZyB0aGUgcXVldWUgZGlyZWN0bHkuCisgICAgICAgIG1fd29ya0l0ZW1RdWV1ZUxv
Y2sudW5sb2NrKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd29ya0l0ZW1RdWV1
ZS5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1faXNWYWxp
ZE11dGV4KTsKKyAgICAgICAgICAgIGlzVmFsaWQgPSBtX2lzVmFsaWQ7CisgICAgICAgICAgICBp
ZiAoIWlzVmFsaWQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB3b3JrSXRl
bVF1ZXVlW2ldLT5mdW5jdGlvbigpKCk7CisgICAgICAgIH0KKyAgICAgICAgbV93b3JrSXRlbVF1
ZXVlTG9jay5sb2NrKCk7CisgICAgfQorCisgICAgLy8gT25lIGludmFyaWFudCB3ZSBtYWludGFp
biBpcyB0aGF0IGFueSB3b3JrIHNjaGVkdWxlZCB3aGlsZSBhIHdvcmsgdGhyZWFkIGlzIHJlZ2lz
dGVyZWQgd2lsbAorICAgIC8vIGJlIGhhbmRsZWQgYnkgdGhhdCB3b3JrIHRocmVhZC4gVW5yZWdp
c3RlciBhcyB0aGUgd29yayB0aHJlYWQgd2hpbGUgdGhlIHF1ZXVlIGxvY2sgaXMgc3RpbGwKKyAg
ICAvLyBoZWxkIHNvIHRoYXQgbm8gd29yayBjYW4gYmUgc2NoZWR1bGVkIHdoaWxlIHdlJ3JlIHN0
aWxsIHJlZ2lzdGVyZWQuCisgICAgdW5yZWdpc3RlckFzV29ya1RocmVhZCgpOworCisgICAgbV93
b3JrSXRlbVF1ZXVlTG9jay51bmxvY2soKTsKK30KKwordm9pZCBXb3JrUXVldWU6OnBsYXRmb3Jt
SW5pdGlhbGl6ZShjb25zdCBjaGFyKiBuYW1lKQoreworICAgIG1faXNXb3JrVGhyZWFkUmVnaXN0
ZXJlZCA9IDA7CisgICAgbV90aW1lclF1ZXVlID0gOjpDcmVhdGVUaW1lclF1ZXVlKCk7CisgICAg
QVNTRVJUX1dJVEhfTUVTU0FHRShtX3RpbWVyUXVldWUsICI6OkNyZWF0ZVRpbWVyUXVldWUgZmFp
bGVkIHdpdGggZXJyb3IgJWx1IiwgOjpHZXRMYXN0RXJyb3IoKSk7Cit9CisKK2Jvb2wgV29ya1F1
ZXVlOjp0cnlSZWdpc3RlckFzV29ya1RocmVhZCgpCit7CisgICAgTE9ORyByZXN1bHQgPSA6Oklu
dGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlKCZtX2lzV29ya1RocmVhZFJlZ2lzdGVyZWQsIDEsIDAp
OworICAgIEFTU0VSVCghcmVzdWx0IHx8IHJlc3VsdCA9PSAxKTsKKyAgICByZXR1cm4gIXJlc3Vs
dDsKK30KKwordm9pZCBXb3JrUXVldWU6OnVucmVnaXN0ZXJBc1dvcmtUaHJlYWQoKQoreworICAg
IExPTkcgcmVzdWx0ID0gOjpJbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZSgmbV9pc1dvcmtUaHJl
YWRSZWdpc3RlcmVkLCAwLCAxKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0ID09
IDEpOworfQorCit2b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKK3sKKyNpZiAh
QVNTRVJUX0RJU0FCTEVECisgICAgTXV0ZXhMb2NrZXIgbG9jayhtX2hhbmRsZXNMb2NrKTsKKyAg
ICBBU1NFUlQobV9oYW5kbGVzLmlzRW1wdHkoKSk7CisjZW5kaWYKKworICAgIC8vIEZJWE1FOiBX
ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IGFueSB0aW1lci1xdWV1ZSB0aW1lcnMgdGhhdCBmaXJlIGFm
dGVyIHRoaXMgcG9pbnQgZG9uJ3QgdHJ5IHRvCisgICAgLy8gYWNjZXNzIHRoaXMgV29ya1F1ZXVl
IDxodHRwOi8vd2Via2l0Lm9yZy9iLzQ0NjkwPi4KKyAgICA6OkRlbGV0ZVRpbWVyUXVldWVFeCht
X3RpbWVyUXVldWUsIDApOworfQorCit2b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2goY29uc3QgRnVu
Y3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fd29y
a0l0ZW1RdWV1ZUxvY2spOworCisgICAgbV93b3JrSXRlbVF1ZXVlLmFwcGVuZChXb3JrSXRlbVdp
bjo6Y3JlYXRlKGZ1bmN0aW9uLCB0aGlzKSk7CisKKyAgICAvLyBTcGF3biBhIHdvcmsgdGhyZWFk
IHRvIHBlcmZvcm0gdGhlIHdvcmsgd2UganVzdCBhZGRlZC4gQXMgYW4gb3B0aW1pemF0aW9uLCB3
ZSBhdm9pZAorICAgIC8vIHNwYXduaW5nIHRoZSB0aHJlYWQgaWYgYSB3b3JrIHRocmVhZCBpcyBh
bHJlYWR5IHJlZ2lzdGVyZWQuIFRoaXMgcHJldmVudHMgbXVsdGlwbGUgd29yaworICAgIC8vIHRo
cmVhZHMgZnJvbSBiZWluZyBzcGF3bmVkIGluIG1vc3QgY2FzZXMuIChOb3RlIHRoYXQgd2hlbiBh
IHdvcmsgdGhyZWFkIGhhcyBiZWVuIHNwYXduZWQgYnV0CisgICAgLy8gaGFzbid0IHJlZ2lzdGVy
ZWQgaXRzZWxmIHlldCwgbV9pc1dvcmtUaHJlYWRSZWdpc3RlcmVkIHdpbGwgYmUgZmFsc2UgYW5k
IHdlJ2xsIGVuZCB1cAorICAgIC8vIHNwYXduaW5nIGEgc2Vjb25kIHdvcmsgdGhyZWFkIGhlcmUu
IEJ1dCB3b3JrIHRocmVhZCByZWdpc3RyYXRpb24gcHJvY2VzcyB3aWxsIGVuc3VyZSB0aGF0Cisg
ICAgLy8gb25seSBvbmUgdGhyZWFkIGFjdHVhbGx5IGVuZHMgdXAgcGVyZm9ybWluZyB3b3JrLikK
KyAgICBpZiAoIW1faXNXb3JrVGhyZWFkUmVnaXN0ZXJlZCkKKyAgICAgICAgOjpRdWV1ZVVzZXJX
b3JrSXRlbSh3b3JrVGhyZWFkQ2FsbGJhY2ssIHRoaXMsIFdUX0VYRUNVVEVERUZBVUxUKTsKK30K
Kworc3RydWN0IFRpbWVyQ29udGV4dCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxUaW1l
ckNvbnRleHQ+IHsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUaW1lckNvbnRleHQ+IGNyZWF0ZSgp
IHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBUaW1lckNvbnRleHQpOyB9CisKKyAgICBXb3JrUXVldWUq
IHF1ZXVlOworICAgIEZ1bmN0aW9uPHZvaWQoKT4gZnVuY3Rpb247CisgICAgTXV0ZXggdGltZXJN
dXRleDsKKyAgICBIQU5ETEUgdGltZXI7CisKK3ByaXZhdGU6CisgICAgVGltZXJDb250ZXh0KCkg
OiBxdWV1ZSgwKSwgdGltZXIoMCkgeyB9Cit9OworCit2b2lkIFdvcmtRdWV1ZTo6dGltZXJDYWxs
YmFjayh2b2lkKiBjb250ZXh0LCBCT09MRUFOIHRpbWVyT3JXYWl0RmlyZWQpCit7CisgICAgQVNT
RVJUX0FSRyhjb250ZXh0LCBjb250ZXh0KTsKKyAgICBBU1NFUlRfVU5VU0VEKHRpbWVyT3JXYWl0
RmlyZWQsIHRpbWVyT3JXYWl0RmlyZWQpOworCisgICAgLy8gQmFsYW5jZWQgYnkgbGVha1JlZiBp
biBzY2hlZHVsZVdvcmtBZnRlckRlbGF5LgorICAgIFJlZlB0cjxUaW1lckNvbnRleHQ+IHRpbWVy
Q29udGV4dCA9IGFkb3B0UmVmKHN0YXRpY19jYXN0PFRpbWVyQ29udGV4dCo+KGNvbnRleHQpKTsK
KworICAgIHRpbWVyQ29udGV4dC0+cXVldWUtPmRpc3BhdGNoKHRpbWVyQ29udGV4dC0+ZnVuY3Rp
b24pOworCisgICAgTXV0ZXhMb2NrZXIgbG9jayh0aW1lckNvbnRleHQtPnRpbWVyTXV0ZXgpOwor
ICAgIEFTU0VSVCh0aW1lckNvbnRleHQtPnRpbWVyKTsKKyAgICBBU1NFUlQodGltZXJDb250ZXh0
LT5xdWV1ZS0+bV90aW1lclF1ZXVlKTsKKyAgICBpZiAoITo6RGVsZXRlVGltZXJRdWV1ZVRpbWVy
KHRpbWVyQ29udGV4dC0+cXVldWUtPm1fdGltZXJRdWV1ZSwgdGltZXJDb250ZXh0LT50aW1lciwg
MCkpCisgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoZmFsc2UsICI6OkRlbGV0ZVRpbWVyUXVl
dWVUaW1lciBmYWlsZWQgd2l0aCBlcnJvciAlbHUiLCA6OkdldExhc3RFcnJvcigpKTsKK30KKwor
dm9pZCBXb3JrUXVldWU6OmRpc3BhdGNoQWZ0ZXJEZWxheShjb25zdCBGdW5jdGlvbjx2b2lkKCk+
JiBmdW5jdGlvbiwgZG91YmxlIGRlbGF5KQoreworICAgIEFTU0VSVChtX3RpbWVyUXVldWUpOwor
CisgICAgUmVmUHRyPFRpbWVyQ29udGV4dD4gY29udGV4dCA9IFRpbWVyQ29udGV4dDo6Y3JlYXRl
KCk7CisgICAgY29udGV4dC0+cXVldWUgPSB0aGlzOworICAgIGNvbnRleHQtPmZ1bmN0aW9uID0g
ZnVuY3Rpb247CisKKyAgICB7CisgICAgICAgIC8vIFRoZSB0aW1lciBjYWxsYmFjayBjb3VsZCBm
aXJlIGJlZm9yZSA6OkNyZWF0ZVRpbWVyUXVldWVUaW1lciBldmVuIHJldHVybnMsIHNvIHdlIHBy
b3RlY3QKKyAgICAgICAgLy8gY29udGV4dC0+dGltZXIgd2l0aCBhIG11dGV4IHRvIGVuc3VyZSB0
aGUgdGltZXIgY2FsbGJhY2sgZG9lc24ndCBhY2Nlc3MgaXQgYmVmb3JlIHRoZQorICAgICAgICAv
LyB0aW1lciBoYW5kbGUgaGFzIGJlZW4gc3RvcmVkIGluIGl0LgorICAgICAgICBNdXRleExvY2tl
ciBsb2NrKGNvbnRleHQtPnRpbWVyTXV0ZXgpOworCisgICAgICAgIC8vIFNpbmNlIG91ciB0aW1l
ciBjYWxsYmFjayBpcyBxdWljaywgd2UgY2FuIGV4ZWN1dGUgaW4gdGhlIHRpbWVyIHRocmVhZCBp
dHNlbGYgYW5kIGF2b2lkCisgICAgICAgIC8vIGFuIGV4dHJhIHRocmVhZCBzd2l0Y2ggb3ZlciB0
byBhIHdvcmtlciB0aHJlYWQuCisgICAgICAgIGlmICghOjpDcmVhdGVUaW1lclF1ZXVlVGltZXIo
JmNvbnRleHQtPnRpbWVyLCBtX3RpbWVyUXVldWUsIHRpbWVyQ2FsbGJhY2ssIGNvbnRleHQuZ2V0
KCksIGRlbGF5ICogMTAwMCwgMCwgV1RfRVhFQ1VURUlOVElNRVJUSFJFQUQpKSB7CisgICAgICAg
ICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGZhbHNlLCAiOjpDcmVhdGVUaW1lclF1ZXVlVGltZXIg
ZmFpbGVkIHdpdGggZXJyb3IgJWx1IiwgOjpHZXRMYXN0RXJyb3IoKSk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBUaGUgdGltZXIgY2FsbGJhY2sgd2ls
bCBoYW5kbGUgZGVzdHJveWluZyBjb250ZXh0LgorICAgIGNvbnRleHQucmVsZWFzZSgpLmxlYWtS
ZWYoKTsKK30KKwordm9pZCBXb3JrUXVldWU6OnVucmVnaXN0ZXJXYWl0QW5kRGVzdHJveUl0ZW1T
b29uKFBhc3NSZWZQdHI8SGFuZGxlV29ya0l0ZW0+IGl0ZW0pCit7CisgICAgLy8gV2UncmUgZ29p
bmcgdG8gbWFrZSBhIGJsb2NraW5nIGNhbGwgdG8gOjpVbnJlZ2lzdGVyV2FpdEV4IGJlZm9yZSBj
bG9zaW5nIHRoZSBoYW5kbGUuIChUaGUKKyAgICAvLyBibG9ja2luZyB2ZXJzaW9uIG9mIDo6VW5y
ZWdpc3RlcldhaXRFeCBpcyBtdWNoIHNpbXBsZXIgdGhhbiB0aGUgbm9uLWJsb2NraW5nIHZlcnNp
b24uKSBJZiB3ZQorICAgIC8vIGRvIHRoaXMgb24gdGhlIGN1cnJlbnQgdGhyZWFkLCB3ZSdsbCBk
ZWFkbG9jayBpZiB3ZSdyZSBjdXJyZW50bHkgaW4gYSBjYWxsYmFjayBmdW5jdGlvbiBmb3IKKyAg
ICAvLyB0aGUgd2FpdCB3ZSdyZSB1bnJlZ2lzdGVyaW5nLiBTbyBpbnN0ZWFkIHdlIGRvIGl0IGFz
eW5jaHJvbm91c2x5IG9uIHNvbWUgb3RoZXIgd29ya2VyIHRocmVhZC4KKworICAgIDo6UXVldWVV
c2VyV29ya0l0ZW0odW5yZWdpc3RlcldhaXRBbmREZXN0cm95SXRlbUNhbGxiYWNrLCBpdGVtLmxl
YWtSZWYoKSwgV1RfRVhFQ1VURURFRkFVTFQpOworfQorCitEV09SRCBXSU5BUEkgV29ya1F1ZXVl
Ojp1bnJlZ2lzdGVyV2FpdEFuZERlc3Ryb3lJdGVtQ2FsbGJhY2sodm9pZCogY29udGV4dCkKK3sK
KyAgICBBU1NFUlRfQVJHKGNvbnRleHQsIGNvbnRleHQpOworICAgIFJlZlB0cjxIYW5kbGVXb3Jr
SXRlbT4gaXRlbSA9IGFkb3B0UmVmKHN0YXRpY19jYXN0PEhhbmRsZVdvcmtJdGVtKj4oY29udGV4
dCkpOworCisgICAgLy8gTm93IHRoYXQgd2Uga25vdyB3ZSdyZSBub3QgaW4gYSBjYWxsYmFjayBm
dW5jdGlvbiBmb3IgdGhlIHdhaXQgd2UncmUgdW5yZWdpc3RlcmluZywgd2UgY2FuCisgICAgLy8g
bWFrZSBhIGJsb2NraW5nIGNhbGwgdG8gOjpVbnJlZ2lzdGVyV2FpdEV4LgorICAgIGlmICghOjpV
bnJlZ2lzdGVyV2FpdEV4KGl0ZW0tPndhaXRIYW5kbGUoKSwgSU5WQUxJRF9IQU5ETEVfVkFMVUUp
KSB7CisgICAgICAgIERXT1JEIGVycm9yID0gOjpHZXRMYXN0RXJyb3IoKTsKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQgYi9T
b3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dAppbmRleCAwMzUwMWJjNWY4Y2VkZTEzMTZlMWYz
MGQ5NGQ0OWU1MGViZDdkNzE4Li42MzJmMjdhZWQwY2M1YzZkMDY3ZWQ0MjFiMDc2MzBhZDY3NTQ4
Y2Y4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dApAQCAtMTAyLDcgKzEwMiw2IEBAIFNFVChXZWJLaXQy
X0lOQ0xVREVfRElSRUNUT1JJRVMKIFNFVChXZWJLaXQyX1NPVVJDRVMKICAgICBQbGF0Zm9ybS9M
b2dnaW5nLmNwcAogICAgIFBsYXRmb3JtL01vZHVsZS5jcHAKLSAgICBQbGF0Zm9ybS9Xb3JrUXVl
dWUuY3BwCiAKICAgICBQbGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50Q29kZXJzLmNwcAogICAgIFBs
YXRmb3JtL0NvcmVJUEMvQXJndW1lbnREZWNvZGVyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmxp
c3QuYW0KaW5kZXggZDQyMGFmYTIyZjE0YTQwMDc5MTE2NjgxM2M1MWYzMjFmYWU5Zjk2ZS4uZmJk
ZmU2NjE1ODNiNDdkMjYzYTQ3OWU5MzIyOGZjM2Y3YzhjNzhkNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtl
ZmlsZS5saXN0LmFtCkBAIC0yNTYsNyArMjU2LDYgQEAgd2Via2l0Ml9zb3VyY2VzICs9IFwKIAlT
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3VuaXgvQ29ubmVjdGlvblVuaXguY3BwIFwK
IAlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9ndGsvTG9nZ2luZ0d0ay5jcHAgXAogCVNvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtL2d0ay9Nb2R1bGVHdGsuY3BwIFwKLQlTb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybS9ndGsvV29ya1F1ZXVlR3RrLmNwcCBcCiAJU291cmNlL1dlYktpdDIvUGxhdGZvcm0vTG9n
Z2luZy5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0xvZ2dpbmcuaCBcCiAJU291cmNl
L1dlYktpdDIvUGxhdGZvcm0vTW9kdWxlLmNwcCBcCkBAIC0yNjQsOCArMjYzLDYgQEAgd2Via2l0
Ml9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9QbGF0Zm9ybVByb2Nlc3NJ
ZGVudGlmaWVyLmggXAogCVNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1NoYXJlZE1lbW9yeS5oIFwK
IAlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS91bml4L1NoYXJlZE1lbW9yeVVuaXguY3BwIFwKLQlT
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrUXVldWUuY3BwIFwKLQlTb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybS9Xb3JrUXVldWUuaCBcCiAJU291cmNlL1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9QbHVn
aW5Db250cm9sbGVyUHJveHkuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1Bs
dWdpbkNvbnRyb2xsZXJQcm94eS5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1Bs
dWdpbkNyZWF0aW9uUGFyYW1ldGVycy5jcHAgXApAQCAtMTE4MCwxMSArMTE3Nyw4IEBAIHdlYmtp
dDJfcGx1Z2luX3Byb2Nlc3Nfc291cmNlcyArPSBcCiAJU291cmNlL1dlYktpdDIvUGxhdGZvcm0v
Q29yZUlQQy91bml4L0Nvbm5lY3Rpb25Vbml4LmNwcCBcCiAJU291cmNlL1dlYktpdDIvUGxhdGZv
cm0vTW9kdWxlLmNwcCBcCiAJU291cmNlL1dlYktpdDIvUGxhdGZvcm0vTW9kdWxlLmggXAotCVNv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtL1dvcmtRdWV1ZS5jcHAgXAotCVNvdXJjZS9XZWJLaXQyL1Bs
YXRmb3JtL1dvcmtRdWV1ZS5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9TaGFyZWRNZW1v
cnkuaCBcCiAJU291cmNlL1dlYktpdDIvUGxhdGZvcm0vZ3RrL01vZHVsZUd0ay5jcHAgXAotCVNv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtL2d0ay9Xb3JrUXVldWVHdGsuY3BwIFwKIAlTb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybS91bml4L1NoYXJlZE1lbW9yeVVuaXguY3BwIFwKIAlTb3VyY2UvV2ViS2l0
Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94eS5jcHAgXAogCVNvdXJjZS9XZWJL
aXQyL1BsdWdpblByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclByb3h5LmggXApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Db25uZWN0aW9uLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uaAppbmRleCA3NzNmNmUwZDEzZmI2Y2Vh
YzNjYmFhNTBlMzBhZjExN2MyZTAyMGVkLi5hMDJmOTJlMTYwMTBiYzViNjFkY2M3ODFmZTYzODE4
ZjRiYTk2OTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0Nv
bm5lY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rp
b24uaApAQCAtMzIsMTEgKzMyLDExIEBACiAjaW5jbHVkZSAiQXJndW1lbnRFbmNvZGVyLmgiCiAj
aW5jbHVkZSAiQXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiTWVzc2FnZUlELmgiCi0jaW5jbHVkZSAi
V29ya1F1ZXVlLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFk
aW5nLmg+CisjaW5jbHVkZSA8d3RmL1dvcmtRdWV1ZS5oPgogCiAjaWYgT1MoREFSV0lOKQogI2lu
Y2x1ZGUgPG1hY2gvbWFjaF9wb3J0Lmg+CkBAIC00Nyw3ICs0Nyw3IEBAIGNsYXNzIFFTb2NrZXRO
b3RpZmllcjsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEdUSykgfHwg
UExBVEZPUk0oRUZMKQotI2luY2x1ZGUgIlBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIuaCIKKyNp
bmNsdWRlIDx3dGYvUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oPgogI2VuZGlmCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKQEAgLTEyNyw3ICsxMjcsNyBAQCBwdWJsaWM6CiAjaWYgT1MoREFSV0lO
KQogICAgIHZvaWQgc2V0U2hvdWxkQ2xvc2VDb25uZWN0aW9uT25NYWNoRXhjZXB0aW9ucygpOwog
I2VsaWYgUExBVEZPUk0oUVQpCi0gICAgdm9pZCBzZXRTaG91bGRDbG9zZUNvbm5lY3Rpb25PblBy
b2Nlc3NUZXJtaW5hdGlvbihXZWJLaXQ6OlBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIpOworICAg
IHZvaWQgc2V0U2hvdWxkQ2xvc2VDb25uZWN0aW9uT25Qcm9jZXNzVGVybWluYXRpb24oUGxhdGZv
cm1Qcm9jZXNzSWRlbnRpZmllcik7CiAjZW5kaWYKIAogICAgIHZvaWQgc2V0T25seVNlbmRNZXNz
YWdlc0FzRGlzcGF0Y2hXaGVuV2FpdGluZ0ZvclN5bmNSZXBseVdoZW5Qcm9jZXNzaW5nU3VjaEFN
ZXNzYWdlKGJvb2wpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQ
Qy91bml4L0Nvbm5lY3Rpb25Vbml4LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJ
UEMvdW5peC9Db25uZWN0aW9uVW5peC5jcHAKaW5kZXggODg1ZTQ5NWNiNzY4OGM0ZTM5MTcyYTcy
YmFlOTJkZTg5NDA1Yzk4Ny4uNDlhNTA4OTMzZGJjNWZhOTM0M2M4OGZiZGU5OGM4NDQwMzBkNTAx
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy91bml4L0Nvbm5l
Y3Rpb25Vbml4LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3VuaXgv
Q29ubmVjdGlvblVuaXguY3BwCkBAIC01NTcsNyArNTU3LDcgQEAgYm9vbCBDb25uZWN0aW9uOjpz
ZW5kT3V0Z29pbmdNZXNzYWdlKE1lc3NhZ2VJRCBtZXNzYWdlSUQsIFBhc3NPd25QdHI8QXJndW1l
bnRFbmMKIH0KIAogI2lmIFBMQVRGT1JNKFFUKQotdm9pZCBDb25uZWN0aW9uOjpzZXRTaG91bGRD
bG9zZUNvbm5lY3Rpb25PblByb2Nlc3NUZXJtaW5hdGlvbihXZWJLaXQ6OlBsYXRmb3JtUHJvY2Vz
c0lkZW50aWZpZXIgcHJvY2VzcykKK3ZvaWQgQ29ubmVjdGlvbjo6c2V0U2hvdWxkQ2xvc2VDb25u
ZWN0aW9uT25Qcm9jZXNzVGVybWluYXRpb24oUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllciBwcm9j
ZXNzKQogewogICAgIG1fY29ubmVjdGlvblF1ZXVlLmRpc3BhdGNoT25UZXJtaW5hdGlvbihwcm9j
ZXNzLCBXVEY6OmJpbmQoJkNvbm5lY3Rpb246OmNvbm5lY3Rpb25EaWRDbG9zZSwgdGhpcykpOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vUGxhdGZvcm1Qcm9jZXNzSWRl
bnRpZmllci5oIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vUGxhdGZvcm1Qcm9jZXNzSWRlbnRp
Zmllci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NmVjYmU4NzI3M2FmY2RjZmIw
NzlkYTQwYzJlNjUzMmM4Y2Y4NjUzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1BsYXRmb3JtUHJvY2Vzc0lkZW50
aWZpZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0KLSNp
Zm5kZWYgUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllcl9oCi0jZGVmaW5lIFBsYXRmb3JtUHJvY2Vz
c0lkZW50aWZpZXJfaAotCi0jaWYgUExBVEZPUk0oUVQpCi1jbGFzcyBRUHJvY2VzczsKLSNlbGlm
IFBMQVRGT1JNKEVGTCkKLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2Ug
V2ViS2l0IHsKLQotI2lmIFBMQVRGT1JNKE1BQykKLXR5cGVkZWYgcGlkX3QgUGxhdGZvcm1Qcm9j
ZXNzSWRlbnRpZmllcjsKLSNlbGlmIFBMQVRGT1JNKFdJTikKLXR5cGVkZWYgSEFORExFIFBsYXRm
b3JtUHJvY2Vzc0lkZW50aWZpZXI7Ci0jZWxpZiBQTEFURk9STShRVCkKLXR5cGVkZWYgUVByb2Nl
c3MqIFBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXI7Ci0jZWxpZiBQTEFURk9STShHVEspCi0jaWZk
ZWYgR19PU19XSU4zMgotdHlwZWRlZiB2b2lkKiBHUGlkOwotI2Vsc2UKLXR5cGVkZWYgaW50IEdQ
aWQ7Ci0jZW5kaWYKLXR5cGVkZWYgR1BpZCBQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyOwotI2Vs
aWYgUExBVEZPUk0oRUZMKQotdHlwZWRlZiBwaWRfdCBQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVy
OwotI2VuZGlmCi0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdCAKLQotI2VuZGlmIC8vIFBsYXRmb3Jt
UHJvY2Vzc0lkZW50aWZpZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0v
V29ya1F1ZXVlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1dvcmtRdWV1ZS5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiY2RkMjI2NDQyMzA4MjgwNTYwYjg5NDI1YWIx
NjA3N2ZjZWI1ZGEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vV29ya1F1ZXVlLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDUxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiV29ya1F1ZXVlLmgiCi0KLVdvcmtRdWV1ZTo6V29ya1F1ZXVlKGNvbnN0IGNoYXIqIG5hbWUp
Ci0gICAgOiBtX2lzVmFsaWQodHJ1ZSkKLXsKLSAgICBwbGF0Zm9ybUluaXRpYWxpemUobmFtZSk7
Ci19Ci0KLVdvcmtRdWV1ZTo6fldvcmtRdWV1ZSgpCi17Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAot
ICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2lzVmFsaWRNdXRleCk7Ci0gICAgQVNTRVJUKCFtX2lz
VmFsaWQpOwotI2VuZGlmCi19Ci0KLXZvaWQgV29ya1F1ZXVlOjppbnZhbGlkYXRlKCkKLXsKLSAg
ICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2lzVmFsaWRNdXRleCk7Ci0gICAgICAg
IG1faXNWYWxpZCA9IGZhbHNlOwotICAgIH0KLQotICAgIHBsYXRmb3JtSW52YWxpZGF0ZSgpOwot
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vV29ya1F1ZXVlLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrUXVldWUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggZDYzMGRjMDI4NTVlNWRhMDk0YjEzZjFmMTUxMzI5YzJkYjQxNDMwYy4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybS9Xb3JrUXVldWUuaAorKysgL2Rldi9udWxsCkBAIC0xLDIxMCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFBv
cnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBXb3JrUXVldWVfaAotI2RlZmluZSBX
b3JrUXVldWVfaAotCi0jaWYgT1MoREFSV0lOKQotI2lmIEhBVkUoRElTUEFUQ0hfSCkKLSNpbmNs
dWRlIDxkaXNwYXRjaC9kaXNwYXRjaC5oPgotI2VuZGlmCi0jZW5kaWYKLQotI2luY2x1ZGUgPHd0
Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL0Z1bmN0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgotCi0jaWYgKFBMQVRGT1JNKFFUKSAmJiAhT1MoREFSV0lOKSkgfHwgUExBVEZPUk0o
R1RLKSB8fCBQTEFURk9STShFRkwpCi0jaW5jbHVkZSAiUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmll
ci5oIgotI2VuZGlmCi0KLSNpZiBQTEFURk9STShRVCkgJiYgIU9TKERBUldJTikKLSNpbmNsdWRl
IDxRU29ja2V0Tm90aWZpZXI+Ci1jbGFzcyBRT2JqZWN0OwotY2xhc3MgUVRocmVhZDsKLSNlbGlm
IFBMQVRGT1JNKEdUSykKLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+Ci10eXBlZGVm
IGdib29sZWFuICgqR1NvdXJjZUZ1bmMpIChncG9pbnRlciBkYXRhKTsKLSNlbGlmIFBMQVRGT1JN
KEVGTCkKLSNpbmNsdWRlIDxFY29yZS5oPgotI2VuZGlmCi0KLWNsYXNzIFdvcmtRdWV1ZSB7Ci0g
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoV29ya1F1ZXVlKTsKLQotcHVibGljOgotICAgIGV4cGxp
Y2l0IFdvcmtRdWV1ZShjb25zdCBjaGFyKiBuYW1lKTsKLSAgICB+V29ya1F1ZXVlKCk7Ci0KLSAg
ICAvLyBXaWxsIGRpc3BhdGNoIHRoZSBnaXZlbiBmdW5jdGlvbiB0byBydW4gYXMgc29vbiBhcyBw
b3NzaWJsZS4KLSAgICB2b2lkIGRpc3BhdGNoKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsKLQot
ICAgIC8vIFdpbGwgZGlzcGF0Y2ggdGhlIGdpdmVuIGZ1bmN0aW9uIGFmdGVyIHRoZSBnaXZlbiBk
ZWxheSAoaW4gc2Vjb25kcykuCi0gICAgdm9pZCBkaXNwYXRjaEFmdGVyRGVsYXkoY29uc3QgRnVu
Y3Rpb248dm9pZCgpPiYsIGRvdWJsZSBkZWxheSk7Ci0KLSAgICB2b2lkIGludmFsaWRhdGUoKTsK
LQotI2lmIE9TKERBUldJTikKLSAgICBlbnVtIE1hY2hQb3J0RXZlbnRUeXBlIHsKLSAgICAgICAg
Ly8gRmlyZWQgd2hlbiB0aGVyZSBpcyBkYXRhIG9uIHRoZSBnaXZlbiByZWNlaXZlIHJpZ2h0Lgot
ICAgICAgICBNYWNoUG9ydERhdGFBdmFpbGFibGUsCi0gICAgICAgIAotICAgICAgICAvLyBGaXJl
ZCB3aGVuIHRoZSByZWNlaXZlIHJpZ2h0IGZvciB0aGlzIHNlbmQgcmlnaHQgaGFzIGJlZW4gZGVz
dHJveWVkLgotICAgICAgICBNYWNoUG9ydERlYWROYW1lTm90aWZpY2F0aW9uCi0gICAgfTsKLSAg
ICAKLSAgICAvLyBXaWxsIGV4ZWN1dGUgdGhlIGdpdmVuIGZ1bmN0aW9uIHdoZW5ldmVyIHRoZSBn
aXZlbiBtYWNoIHBvcnQgZXZlbnQgZmlyZXMuCi0gICAgLy8gTm90ZSB0aGF0IHRoaXMgd2lsbCBh
ZG9wdCB0aGUgbWFjaCBwb3J0IGFuZCBkZXN0cm95IGl0IHdoZW4gdGhlIHdvcmsgcXVldWUgaXMg
aW52YWxpZGF0ZWQuCi0gICAgdm9pZCByZWdpc3Rlck1hY2hQb3J0RXZlbnRIYW5kbGVyKG1hY2hf
cG9ydF90LCBNYWNoUG9ydEV2ZW50VHlwZSwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOwotICAg
IHZvaWQgdW5yZWdpc3Rlck1hY2hQb3J0RXZlbnRIYW5kbGVyKG1hY2hfcG9ydF90KTsKLSNlbGlm
IFBMQVRGT1JNKFdJTikKLSAgICB2b2lkIHJlZ2lzdGVySGFuZGxlKEhBTkRMRSwgY29uc3QgRnVu
Y3Rpb248dm9pZCgpPiYpOwotICAgIHZvaWQgdW5yZWdpc3RlckFuZENsb3NlSGFuZGxlKEhBTkRM
RSk7Ci0jZWxpZiBQTEFURk9STShRVCkKLSAgICBRU29ja2V0Tm90aWZpZXIqIHJlZ2lzdGVyU29j
a2V0RXZlbnRIYW5kbGVyKGludCwgUVNvY2tldE5vdGlmaWVyOjpUeXBlLCBjb25zdCBGdW5jdGlv
bjx2b2lkKCk+Jik7Ci0gICAgdm9pZCBkaXNwYXRjaE9uVGVybWluYXRpb24oV2ViS2l0OjpQbGF0
Zm9ybVByb2Nlc3NJZGVudGlmaWVyLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7Ci0jZWxpZiBQ
TEFURk9STShHVEspCi0gICAgdm9pZCByZWdpc3RlckV2ZW50U291cmNlSGFuZGxlcihpbnQsIGlu
dCwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOwotICAgIHZvaWQgdW5yZWdpc3RlckV2ZW50U291
cmNlSGFuZGxlcihpbnQpOwotICAgIHZvaWQgZGlzcGF0Y2hPblRlcm1pbmF0aW9uKFdlYktpdDo6
UGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllciwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOwotI2Vs
aWYgUExBVEZPUk0oRUZMKQotICAgIHZvaWQgcmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIoaW50
LCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyU29ja2V0RXZl
bnRIYW5kbGVyKGludCk7Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICAvLyBGSVhNRTogVXNlIGFu
IGF0b21pYyBib29sZWFuIGhlcmUgaW5zdGVhZC4KLSAgICBNdXRleCBtX2lzVmFsaWRNdXRleDsK
LSAgICBib29sIG1faXNWYWxpZDsKLQotICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplKGNvbnN0
IGNoYXIqIG5hbWUpOwotICAgIHZvaWQgcGxhdGZvcm1JbnZhbGlkYXRlKCk7Ci0KLSNpZiBPUyhE
QVJXSU4pCi0jaWYgSEFWRShESVNQQVRDSF9IKQotICAgIHN0YXRpYyB2b2lkIGV4ZWN1dGVGdW5j
dGlvbih2b2lkKik7Ci0gICAgTXV0ZXggbV9ldmVudFNvdXJjZXNNdXRleDsKLSAgICBjbGFzcyBF
dmVudFNvdXJjZTsKLSAgICBIYXNoTWFwPG1hY2hfcG9ydF90LCBFdmVudFNvdXJjZSo+IG1fZXZl
bnRTb3VyY2VzOwotICAgIGRpc3BhdGNoX3F1ZXVlX3QgbV9kaXNwYXRjaFF1ZXVlOwotI2VuZGlm
Ci0jZWxpZiBQTEFURk9STShXSU4pCi0gICAgY2xhc3MgV29ya0l0ZW1XaW4gOiBwdWJsaWMgVGhy
ZWFkU2FmZVJlZkNvdW50ZWQ8V29ya0l0ZW1XaW4+IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFdvcmtJdGVtV2luPiBjcmVhdGUoY29uc3QgRnVuY3Rpb248dm9pZCgp
PiYsIFdvcmtRdWV1ZSopOwotICAgICAgICB2aXJ0dWFsIH5Xb3JrSXRlbVdpbigpOwotCi0gICAg
ICAgIEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKCkgeyByZXR1cm4gbV9mdW5jdGlvbjsgfQot
ICAgICAgICBXb3JrUXVldWUqIHF1ZXVlKCkgY29uc3QgeyByZXR1cm4gbV9xdWV1ZTsgfQotCi0g
ICAgcHJvdGVjdGVkOgotICAgICAgICBXb3JrSXRlbVdpbihjb25zdCBGdW5jdGlvbjx2b2lkKCk+
JiwgV29ya1F1ZXVlKik7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBGdW5jdGlvbjx2b2lkKCk+
IG1fZnVuY3Rpb247Ci0gICAgICAgIFdvcmtRdWV1ZSogbV9xdWV1ZTsKLSAgICB9OwotCi0gICAg
Y2xhc3MgSGFuZGxlV29ya0l0ZW0gOiBwdWJsaWMgV29ya0l0ZW1XaW4gewotICAgIHB1YmxpYzoK
LSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SGFuZGxlV29ya0l0ZW0+IGNyZWF0ZUJ5QWRvcHRp
bmdIYW5kbGUoSEFORExFLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiwgV29ya1F1ZXVlKik7Ci0g
ICAgICAgIHZpcnR1YWwgfkhhbmRsZVdvcmtJdGVtKCk7Ci0KLSAgICAgICAgdm9pZCBzZXRXYWl0
SGFuZGxlKEhBTkRMRSB3YWl0SGFuZGxlKSB7IG1fd2FpdEhhbmRsZSA9IHdhaXRIYW5kbGU7IH0K
LSAgICAgICAgSEFORExFIHdhaXRIYW5kbGUoKSBjb25zdCB7IHJldHVybiBtX3dhaXRIYW5kbGU7
IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIEhhbmRsZVdvcmtJdGVtKEhBTkRMRSwgY29uc3Qg
RnVuY3Rpb248dm9pZCgpPiYsIFdvcmtRdWV1ZSopOwotCi0gICAgICAgIEhBTkRMRSBtX2hhbmRs
ZTsKLSAgICAgICAgSEFORExFIG1fd2FpdEhhbmRsZTsKLSAgICB9OwotCi0gICAgc3RhdGljIHZv
aWQgQ0FMTEJBQ0sgaGFuZGxlQ2FsbGJhY2sodm9pZCogY29udGV4dCwgQk9PTEVBTiB0aW1lck9y
V2FpdEZpcmVkKTsKLSAgICBzdGF0aWMgdm9pZCBDQUxMQkFDSyB0aW1lckNhbGxiYWNrKHZvaWQq
IGNvbnRleHQsIEJPT0xFQU4gdGltZXJPcldhaXRGaXJlZCk7Ci0gICAgc3RhdGljIERXT1JEIFdJ
TkFQSSB3b3JrVGhyZWFkQ2FsbGJhY2sodm9pZCogY29udGV4dCk7Ci0KLSAgICBib29sIHRyeVJl
Z2lzdGVyQXNXb3JrVGhyZWFkKCk7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyQXNXb3JrVGhyZWFkKCk7
Ci0gICAgdm9pZCBwZXJmb3JtV29ya09uUmVnaXN0ZXJlZFdvcmtUaHJlYWQoKTsKLQotICAgIHN0
YXRpYyB2b2lkIHVucmVnaXN0ZXJXYWl0QW5kRGVzdHJveUl0ZW1Tb29uKFBhc3NSZWZQdHI8SGFu
ZGxlV29ya0l0ZW0+KTsKLSAgICBzdGF0aWMgRFdPUkQgV0lOQVBJIHVucmVnaXN0ZXJXYWl0QW5k
RGVzdHJveUl0ZW1DYWxsYmFjayh2b2lkKiBjb250ZXh0KTsKLQotICAgIHZvbGF0aWxlIExPTkcg
bV9pc1dvcmtUaHJlYWRSZWdpc3RlcmVkOwotCi0gICAgTXV0ZXggbV93b3JrSXRlbVF1ZXVlTG9j
azsKLSAgICBWZWN0b3I8UmVmUHRyPFdvcmtJdGVtV2luPiA+IG1fd29ya0l0ZW1RdWV1ZTsKLQot
ICAgIE11dGV4IG1faGFuZGxlc0xvY2s7Ci0gICAgSGFzaE1hcDxIQU5ETEUsIFJlZlB0cjxIYW5k
bGVXb3JrSXRlbT4gPiBtX2hhbmRsZXM7Ci0KLSAgICBIQU5ETEUgbV90aW1lclF1ZXVlOwotI2Vs
aWYgUExBVEZPUk0oUVQpCi0gICAgY2xhc3MgV29ya0l0ZW1RdDsKLSAgICBRVGhyZWFkKiBtX3dv
cmtUaHJlYWQ7Ci0gICAgZnJpZW5kIGNsYXNzIFdvcmtJdGVtUXQ7Ci0jZWxpZiBQTEFURk9STShH
VEspCi0gICAgc3RhdGljIHZvaWQgc3RhcnRXb3JrUXVldWVUaHJlYWQoV29ya1F1ZXVlKik7Ci0g
ICAgdm9pZCB3b3JrUXVldWVUaHJlYWRCb2R5KCk7Ci0gICAgdm9pZCBkaXNwYXRjaE9uU291cmNl
KEdTb3VyY2UqLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiwgR1NvdXJjZUZ1bmMpOwotCi0gICAg
VGhyZWFkSWRlbnRpZmllciBtX3dvcmtRdWV1ZVRocmVhZDsKLSAgICBHUmVmUHRyPEdNYWluQ29u
dGV4dD4gbV9ldmVudENvbnRleHQ7Ci0gICAgTXV0ZXggbV9ldmVudExvb3BMb2NrOwotICAgIEdS
ZWZQdHI8R01haW5Mb29wPiBtX2V2ZW50TG9vcDsKLSAgICBNdXRleCBtX2V2ZW50U291cmNlc0xv
Y2s7Ci0gICAgY2xhc3MgRXZlbnRTb3VyY2U7Ci0gICAgSGFzaE1hcDxpbnQsIFZlY3RvcjxFdmVu
dFNvdXJjZSo+ID4gbV9ldmVudFNvdXJjZXM7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPGludCwgVmVj
dG9yPEV2ZW50U291cmNlKj4gPjo6aXRlcmF0b3IgRXZlbnRTb3VyY2VJdGVyYXRvcjsgCi0jZWxp
ZiBQTEFURk9STShFRkwpCi0gICAgZmRfc2V0IG1fZmlsZURlc2NyaXB0b3JTZXQ7Ci0gICAgaW50
IG1fbWF4RmlsZURlc2NyaXB0b3I7Ci0gICAgaW50IG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvcjsK
LSAgICBpbnQgbV93cml0ZVRvUGlwZURlc2NyaXB0b3I7Ci0gICAgYm9vbCBtX3RocmVhZExvb3A7
Ci0KLSAgICBWZWN0b3I8RnVuY3Rpb248dm9pZCgpPiA+IG1fd29ya0l0ZW1RdWV1ZTsKLSAgICBN
dXRleCBtX3dvcmtJdGVtUXVldWVMb2NrOwotCi0gICAgaW50IG1fc29ja2V0RGVzY3JpcHRvcjsK
LSAgICBGdW5jdGlvbjx2b2lkKCk+IG1fc29ja2V0RXZlbnRIYW5kbGVyOwotCi0gICAgSGFzaE1h
cDxpbnQsIE93blB0cjxFY29yZV9UaW1lcj4gPiBtX3RpbWVyczsKLQotICAgIHZvaWQgc2VuZE1l
c3NhZ2VUb1RocmVhZChjb25zdCBjaGFyKik7Ci0gICAgc3RhdGljIHZvaWQqIHdvcmtRdWV1ZVRo
cmVhZChXb3JrUXVldWUqKTsKLSAgICB2b2lkIHBlcmZvcm1Xb3JrKCk7Ci0gICAgdm9pZCBwZXJm
b3JtRmlsZURlc2NyaXB0b3JXb3JrKCk7Ci0gICAgc3RhdGljIGJvb2wgdGltZXJGaXJlZCh2b2lk
Kik7Ci0jZW5kaWYKLX07Ci0KLSNlbmRpZiAvLyBXb3JrUXVldWVfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvUGxhdGZvcm0vZWZsL1dvcmtRdWV1ZUVmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9QbGF0Zm9ybS9lZmwvV29ya1F1ZXVlRWZsLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNDFmZmVkZjUzMzFhMmEyZWVmZDZiOGM3ZjRmOGZiMGI3Y2Y0NDYxYi4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybS9lZmwvV29ya1F1ZXVlRWZsLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE3MyArMCwwIEBA
Ci0vKgotICAgIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCi0KLSAgICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAg
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXb3JrUXVldWUuaCIKLQotI2luY2x1ZGUgPHd0
Zi9Bc3NlcnRpb25zLmg+Ci0KLWNsYXNzIFRpbWVyV29ya0l0ZW0gewotcHVibGljOgotICAgIFRp
bWVyV29ya0l0ZW0oaW50IHRpbWVySUQsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9u
LCBXb3JrUXVldWUqIHF1ZXVlKQotICAgICAgICA6IG1fZnVuY3Rpb24oZnVuY3Rpb24pCi0gICAg
ICAgICwgbV9xdWV1ZShxdWV1ZSkKLSAgICAgICAgLCBtX3RpbWVySUQodGltZXJJRCkKLSAgICB7
Ci0gICAgfQotICAgIH5UaW1lcldvcmtJdGVtKCkgeyB9Ci0KLSAgICBGdW5jdGlvbjx2b2lkKCk+
IGZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9mdW5jdGlvbjsgfQotICAgIFdvcmtRdWV1ZSog
cXVldWUoKSBjb25zdCB7IHJldHVybiBtX3F1ZXVlOyB9Ci0KLSAgICBpbnQgdGltZXJJRCgpIGNv
bnN0IHsgcmV0dXJuIG1fdGltZXJJRDsgfQotCi1wcml2YXRlOgotICAgIEZ1bmN0aW9uPHZvaWQo
KT4gbV9mdW5jdGlvbjsKLSAgICBXb3JrUXVldWUqIG1fcXVldWU7Ci0gICAgaW50IG1fdGltZXJJ
RDsKLX07Ci0KLXN0YXRpYyBjb25zdCBpbnQgaW52YWxpZFNvY2tldERlc2NyaXB0b3IgPSAtMTsK
LXN0YXRpYyBjb25zdCBpbnQgdGhyZWFkTWVzc2FnZVNpemUgPSAxOwotc3RhdGljIGNvbnN0IGNo
YXIgZmluaXNoVGhyZWFkTWVzc2FnZVtdID0gIkYiOwotc3RhdGljIGNvbnN0IGNoYXIgd2FrdXBU
aHJlYWRNZXNzYWdlW10gPSAiVyI7Ci0KLXZvaWQgV29ya1F1ZXVlOjpwbGF0Zm9ybUluaXRpYWxp
emUoY29uc3QgY2hhciogbmFtZSkKLXsKLSAgICBpbnQgZmRzWzJdOwotICAgIGlmIChwaXBlKGZk
cykpCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotCi0gICAgbV9yZWFkRnJvbVBpcGVE
ZXNjcmlwdG9yID0gZmRzWzBdOwotICAgIG1fd3JpdGVUb1BpcGVEZXNjcmlwdG9yID0gZmRzWzFd
OwotICAgIEZEX1pFUk8oJm1fZmlsZURlc2NyaXB0b3JTZXQpOwotICAgIEZEX1NFVChtX3JlYWRG
cm9tUGlwZURlc2NyaXB0b3IsICZtX2ZpbGVEZXNjcmlwdG9yU2V0KTsKLSAgICBtX21heEZpbGVE
ZXNjcmlwdG9yID0gbV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yOwotCi0gICAgbV9zb2NrZXREZXNj
cmlwdG9yID0gaW52YWxpZFNvY2tldERlc2NyaXB0b3I7Ci0KLSAgICBtX3RocmVhZExvb3AgPSB0
cnVlOwotICAgIGNyZWF0ZVRocmVhZChyZWludGVycHJldF9jYXN0PFdURjo6VGhyZWFkRnVuY3Rp
b24+KCZXb3JrUXVldWU6OndvcmtRdWV1ZVRocmVhZCksIHRoaXMsIG5hbWUpOwotfQotCi12b2lk
IFdvcmtRdWV1ZTo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKLXsKLSAgICBzZW5kTWVzc2FnZVRvVGhy
ZWFkKGZpbmlzaFRocmVhZE1lc3NhZ2UpOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6cGVyZm9ybVdv
cmsoKQotewotICAgIG1fd29ya0l0ZW1RdWV1ZUxvY2subG9jaygpOwotCi0gICAgd2hpbGUgKCFt
X3dvcmtJdGVtUXVldWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFZlY3RvcjxGdW5jdGlvbjx2b2lk
KCk+ID4gd29ya0l0ZW1RdWV1ZTsKLSAgICAgICAgbV93b3JrSXRlbVF1ZXVlLnN3YXAod29ya0l0
ZW1RdWV1ZSk7Ci0KLSAgICAgICAgbV93b3JrSXRlbVF1ZXVlTG9jay51bmxvY2soKTsKLSAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3b3JrSXRlbVF1ZXVlLnNpemUoKTsgKytpKQotICAg
ICAgICAgICAgd29ya0l0ZW1RdWV1ZVtpXSgpOwotICAgICAgICBtX3dvcmtJdGVtUXVldWVMb2Nr
LmxvY2soKTsKLSAgICB9Ci0gICAgbV93b3JrSXRlbVF1ZXVlTG9jay51bmxvY2soKTsKLX0KLQot
dm9pZCBXb3JrUXVldWU6OnBlcmZvcm1GaWxlRGVzY3JpcHRvcldvcmsoKQotewotICAgIGZkX3Nl
dCByZWFkRmlsZURlc2NyaXB0b3JTZXQgPSBtX2ZpbGVEZXNjcmlwdG9yU2V0OwotCi0gICAgaWYg
KHNlbGVjdChtX21heEZpbGVEZXNjcmlwdG9yICsgMSwgJnJlYWRGaWxlRGVzY3JpcHRvclNldCwg
MCwgMCwgMCkgPj0gMCkgewotICAgICAgICBpZiAoRkRfSVNTRVQobV9yZWFkRnJvbVBpcGVEZXNj
cmlwdG9yLCAmcmVhZEZpbGVEZXNjcmlwdG9yU2V0KSkgewotICAgICAgICAgICAgY2hhciByZWFk
QnVmW3RocmVhZE1lc3NhZ2VTaXplXTsKLSAgICAgICAgICAgIGlmIChyZWFkKG1fcmVhZEZyb21Q
aXBlRGVzY3JpcHRvciwgcmVhZEJ1ZiwgdGhyZWFkTWVzc2FnZVNpemUpID09IC0xKQotICAgICAg
ICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHJlYWQgZnJvbSBXb3JrUXVldWVUaHJlYWQg
cGlwZSIpOwotICAgICAgICAgICAgaWYgKCFzdHJuY21wKHJlYWRCdWYsIGZpbmlzaFRocmVhZE1l
c3NhZ2UsIHRocmVhZE1lc3NhZ2VTaXplKSkKLSAgICAgICAgICAgICAgICBtX3RocmVhZExvb3Ag
PSBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtX3NvY2tldERlc2NyaXB0b3IgIT0g
aW52YWxpZFNvY2tldERlc2NyaXB0b3IgJiYgRkRfSVNTRVQobV9zb2NrZXREZXNjcmlwdG9yLCAm
cmVhZEZpbGVEZXNjcmlwdG9yU2V0KSkKLSAgICAgICAgICAgIG1fc29ja2V0RXZlbnRIYW5kbGVy
KCk7Ci0gICAgfQotfQotCi12b2lkIFdvcmtRdWV1ZTo6c2VuZE1lc3NhZ2VUb1RocmVhZChjb25z
dCBjaGFyKiBtZXNzYWdlKQotewotICAgIGlmICh3cml0ZShtX3dyaXRlVG9QaXBlRGVzY3JpcHRv
ciwgbWVzc2FnZSwgdGhyZWFkTWVzc2FnZVNpemUpID09IC0xKQotICAgICAgICBMT0dfRVJST1Io
IkZhaWxlZCB0byB3YWtlIHVwIFdvcmtRdWV1ZSBUaHJlYWQiKTsKLX0KLQotdm9pZCogV29ya1F1
ZXVlOjp3b3JrUXVldWVUaHJlYWQoV29ya1F1ZXVlKiB3b3JrUXVldWUpCi17Ci0gICAgd2hpbGUg
KHdvcmtRdWV1ZS0+bV90aHJlYWRMb29wKSB7Ci0gICAgICAgIHdvcmtRdWV1ZS0+cGVyZm9ybVdv
cmsoKTsKLSAgICAgICAgd29ya1F1ZXVlLT5wZXJmb3JtRmlsZURlc2NyaXB0b3JXb3JrKCk7Ci0g
ICAgfQotCi0gICAgY2xvc2Uod29ya1F1ZXVlLT5tX3JlYWRGcm9tUGlwZURlc2NyaXB0b3IpOwot
ICAgIGNsb3NlKHdvcmtRdWV1ZS0+bV93cml0ZVRvUGlwZURlc2NyaXB0b3IpOwotCi0gICAgcmV0
dXJuIDA7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpyZWdpc3RlclNvY2tldEV2ZW50SGFuZGxlcihp
bnQgZmlsZURlc2NyaXB0b3IsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQotewot
ICAgIGlmIChtX3NvY2tldERlc2NyaXB0b3IgIT0gaW52YWxpZFNvY2tldERlc2NyaXB0b3IpCi0g
ICAgICAgIExPR19FUlJPUigiJWQgaXMgYWxyZWFkeSByZWdpc3RlcmQuIiwgZmlsZURlc2NyaXB0
b3IpOwotCi0gICAgbV9zb2NrZXREZXNjcmlwdG9yID0gZmlsZURlc2NyaXB0b3I7Ci0gICAgbV9z
b2NrZXRFdmVudEhhbmRsZXIgPSBmdW5jdGlvbjsKLQotICAgIGlmIChmaWxlRGVzY3JpcHRvciA+
IG1fbWF4RmlsZURlc2NyaXB0b3IpCi0gICAgICAgIG1fbWF4RmlsZURlc2NyaXB0b3IgPSBmaWxl
RGVzY3JpcHRvcjsKLSAgICBGRF9TRVQoZmlsZURlc2NyaXB0b3IsICZtX2ZpbGVEZXNjcmlwdG9y
U2V0KTsKLX0KLQotdm9pZCBXb3JrUXVldWU6OnVucmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIo
aW50IGZpbGVEZXNjcmlwdG9yKQotewotICAgIG1fc29ja2V0RGVzY3JpcHRvciA9IGludmFsaWRT
b2NrZXREZXNjcmlwdG9yOwotCi0gICAgaWYgKGZpbGVEZXNjcmlwdG9yID09IG1fbWF4RmlsZURl
c2NyaXB0b3IpCi0gICAgICAgIG1fbWF4RmlsZURlc2NyaXB0b3IgPSBtX3JlYWRGcm9tUGlwZURl
c2NyaXB0b3I7Ci0gICAgRkRfQ0xSKGZpbGVEZXNjcmlwdG9yLCAmbV9maWxlRGVzY3JpcHRvclNl
dCk7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpkaXNwYXRjaChjb25zdCBGdW5jdGlvbjx2b2lkKCk+
JiBmdW5jdGlvbikKLXsKLSAgICBNdXRleExvY2tlciBsb2NrZXIobV93b3JrSXRlbVF1ZXVlTG9j
ayk7Ci0gICAgbV93b3JrSXRlbVF1ZXVlLmFwcGVuZChmdW5jdGlvbik7Ci0gICAgc2VuZE1lc3Nh
Z2VUb1RocmVhZCh3YWt1cFRocmVhZE1lc3NhZ2UpOwotfQotCi1ib29sIFdvcmtRdWV1ZTo6dGlt
ZXJGaXJlZCh2b2lkKiBkYXRhKQotewotICAgIFRpbWVyV29ya0l0ZW0qIGl0ZW0gPSBzdGF0aWNf
Y2FzdDxUaW1lcldvcmtJdGVtKj4oZGF0YSk7Ci0gICAgaWYgKGl0ZW0gJiYgaXRlbS0+cXVldWUo
KS0+bV9pc1ZhbGlkKSB7Ci0gICAgICAgIGl0ZW0tPnF1ZXVlKCktPmRpc3BhdGNoKGl0ZW0tPmZ1
bmN0aW9uKCkpOwotICAgICAgICBpdGVtLT5xdWV1ZSgpLT5tX3RpbWVycy50YWtlKGl0ZW0tPnRp
bWVySUQoKSk7Ci0gICAgICAgIGRlbGV0ZSBpdGVtOwotICAgIH0KLQotICAgIHJldHVybiBFQ09S
RV9DQUxMQkFDS19DQU5DRUw7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpkaXNwYXRjaEFmdGVyRGVs
YXkoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24sIGRvdWJsZSBkZWxheSkKLXsKLSAg
ICBzdGF0aWMgaW50IHRpbWVySWQgPSAxOwotICAgIG1fdGltZXJzLnNldCh0aW1lcklkLCBhZG9w
dFB0cihlY29yZV90aW1lcl9hZGQoZGVsYXksIHJlaW50ZXJwcmV0X2Nhc3Q8RWNvcmVfVGFza19D
Yj4odGltZXJGaXJlZCksIG5ldyBUaW1lcldvcmtJdGVtKHRpbWVySWQsIGZ1bmN0aW9uLCB0aGlz
KSkpKTsKLSAgICB0aW1lcklkKys7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybS9ndGsvV29ya1F1ZXVlR3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2d0ay9X
b3JrUXVldWVHdGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZGZhYjgzY2Nm
YjI0YzlmMDBlZTQwZDJkYWExYzk1YjE2MzgyYTQzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2d0ay9Xb3JrUXVl
dWVHdGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjMwICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90
b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXb3JrUXVldWUuaCIKLQotI2luY2x1ZGUgIldL
QmFzZS5oIgotI2luY2x1ZGUgPGdpby9naW8uaD4KLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVk
ZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgotCi0vLyBXb3JrUXVldWU6OkV2ZW50U291cmNlCi1j
bGFzcyBXb3JrUXVldWU6OkV2ZW50U291cmNlIHsKLXB1YmxpYzoKLSAgICBFdmVudFNvdXJjZShj
b25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbiwgV29ya1F1ZXVlKiB3b3JrUXVldWUsIEdD
YW5jZWxsYWJsZSogY2FuY2VsbGFibGUpCi0gICAgICAgIDogbV9mdW5jdGlvbihmdW5jdGlvbikK
LSAgICAgICAgLCBtX3dvcmtRdWV1ZSh3b3JrUXVldWUpCi0gICAgICAgICwgbV9jYW5jZWxsYWJs
ZShjYW5jZWxsYWJsZSkKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBjYW5jZWwoKQotICAgIHsK
LSAgICAgICAgaWYgKCFtX2NhbmNlbGxhYmxlKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBnX2NhbmNlbGxhYmxlX2NhbmNlbChtX2NhbmNlbGxhYmxlKTsKLSAgICB9Ci0KLSAgICBzdGF0
aWMgdm9pZCBleGVjdXRlRXZlbnRTb3VyY2UoRXZlbnRTb3VyY2UqIGV2ZW50U291cmNlKQotICAg
IHsKLSAgICAgICAgQVNTRVJUKGV2ZW50U291cmNlKTsKLSAgICAgICAgV29ya1F1ZXVlKiBxdWV1
ZSA9IGV2ZW50U291cmNlLT5tX3dvcmtRdWV1ZTsKLSAgICAgICAgewotICAgICAgICAgICAgTXV0
ZXhMb2NrZXIgbG9ja2VyKHF1ZXVlLT5tX2lzVmFsaWRNdXRleCk7Ci0gICAgICAgICAgICBpZiAo
IXF1ZXVlLT5tX2lzVmFsaWQpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0K
LSAgICAgICAgZXZlbnRTb3VyY2UtPm1fZnVuY3Rpb24oKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMg
Z2Jvb2xlYW4gcGVyZm9ybVdvcmtPbmNlKEV2ZW50U291cmNlKiBldmVudFNvdXJjZSkKLSAgICB7
Ci0gICAgICAgIGV4ZWN1dGVFdmVudFNvdXJjZShldmVudFNvdXJjZSk7Ci0gICAgICAgIHJldHVy
biBGQUxTRTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZ2Jvb2xlYW4gcGVyZm9ybVdvcmsoR1NvY2tl
dCogc29ja2V0LCBHSU9Db25kaXRpb24gY29uZGl0aW9uLCBFdmVudFNvdXJjZSogZXZlbnRTb3Vy
Y2UpCi0gICAgewotICAgICAgICBpZiAoIShjb25kaXRpb24gJiBHX0lPX0lOKSAmJiAhKGNvbmRp
dGlvbiAmIEdfSU9fSFVQKSAmJiAhKGNvbmRpdGlvbiAmIEdfSU9fRVJSKSkgewotICAgICAgICAg
ICAgLy8gRXZlbnRTb3VyY2UgaGFzIGJlZW4gY2FuY2VsbGVkLCByZXR1cm4gRkFMU0UgdG8gZGVz
dHJveSB0aGUgc291cmNlLgotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgICAgICB9Ci0K
LSAgICAgICAgZXhlY3V0ZUV2ZW50U291cmNlKGV2ZW50U291cmNlKTsKLSAgICAgICAgcmV0dXJu
IFRSVUU7Ci0gICAgfQotCi0gICAgc3RhdGljIGdib29sZWFuIHBlcmZvcm1Xb3JrT25UZXJtaW5h
dGlvbihHUGlkLCBnaW50LCBFdmVudFNvdXJjZSogZXZlbnRTb3VyY2UpCi0gICAgewotICAgICAg
ICBleGVjdXRlRXZlbnRTb3VyY2UoZXZlbnRTb3VyY2UpOwotICAgICAgICByZXR1cm4gRkFMU0U7
Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgZGVsZXRlRXZlbnRTb3VyY2UoRXZlbnRTb3VyY2Uq
IGV2ZW50U291cmNlKSAKLSAgICB7Ci0gICAgICAgIEFTU0VSVChldmVudFNvdXJjZSk7Ci0gICAg
ICAgIGRlbGV0ZSBldmVudFNvdXJjZTsKLSAgICB9Ci0gICAKLXB1YmxpYzoKLSAgICBGdW5jdGlv
bjx2b2lkKCk+IG1fZnVuY3Rpb247Ci0gICAgV29ya1F1ZXVlKiBtX3dvcmtRdWV1ZTsKLSAgICBH
Q2FuY2VsbGFibGUqIG1fY2FuY2VsbGFibGU7Ci19OwotCi0vLyBXb3JrUXVldWUKLXN0YXRpYyBj
b25zdCBzaXplX3Qga1Zpc3VhbFN0dWRpb1RocmVhZE5hbWVMaW1pdCA9IDMxOwotCi12b2lkIFdv
cmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXplKGNvbnN0IGNoYXIqIG5hbWUpCi17Ci0gICAgbV9l
dmVudENvbnRleHQgPSBhZG9wdEdSZWYoZ19tYWluX2NvbnRleHRfbmV3KCkpOwotICAgIEFTU0VS
VChtX2V2ZW50Q29udGV4dCk7Ci0gICAgbV9ldmVudExvb3AgPSBhZG9wdEdSZWYoZ19tYWluX2xv
b3BfbmV3KG1fZXZlbnRDb250ZXh0LmdldCgpLCBGQUxTRSkpOwotICAgIEFTU0VSVChtX2V2ZW50
TG9vcCk7Ci0KLSAgICAvLyBUaGlzIG5hbWUgY2FuIGJlIGNvbS5hcHBsZS5XZWJLaXQuUHJvY2Vz
c0xhdW5jaGVyIG9yIGNvbS5hcHBsZS5Db3JlSVBDLlJlY2VpdmVRdWV1ZS4KLSAgICAvLyBXZSBh
cmUgdXNpbmcgdGhvc2UgbmFtZXMgZm9yIHRoZSB0aHJlYWQgbmFtZSwgYnV0IGJvdGggYXJlIGxv
bmdlciB0aGFuIDMxIGNoYXJhY3RlcnMsCi0gICAgLy8gd2hpY2ggaXMgdGhlIGxpbWl0IG9mIFZp
c3VhbCBTdHVkaW8gZm9yIHRocmVhZCBuYW1lcy4KLSAgICAvLyBXaGVuIGxvZyBpcyBlbmFibGVk
IGNyZWF0ZVRocmVhZCgpIHdpbGwgYXNzZXJ0IGluc3RlYWQgb2YgdHJ1bmNhdGUgdGhlIG5hbWUs
IHNvIHdlIG5lZWQKLSAgICAvLyB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgdXNlIGEgbmFtZSBsb25n
ZXIgdGhhbiAzMSBjaGFyYWN0ZXJzLgotICAgIGNvbnN0IGNoYXIqIHRocmVhZE5hbWUgPSBnX3N0
cnJzdHIobmFtZSwgIi4iKTsKLSAgICBpZiAodGhyZWFkTmFtZSkKLSAgICAgICAgdGhyZWFkTmFt
ZSsrOwotICAgIGVsc2UKLSAgICAgICAgdGhyZWFkTmFtZSA9IG5hbWU7Ci0gICAgaWYgKHN0cmxl
bih0aHJlYWROYW1lKSA+IGtWaXN1YWxTdHVkaW9UaHJlYWROYW1lTGltaXQpCi0gICAgICAgIHRo
cmVhZE5hbWUgKz0gc3RybGVuKHRocmVhZE5hbWUpIC0ga1Zpc3VhbFN0dWRpb1RocmVhZE5hbWVM
aW1pdDsKLQotICAgIG1fd29ya1F1ZXVlVGhyZWFkID0gY3JlYXRlVGhyZWFkKHJlaW50ZXJwcmV0
X2Nhc3Q8V1RGOjpUaHJlYWRGdW5jdGlvbj4oJldvcmtRdWV1ZTo6c3RhcnRXb3JrUXVldWVUaHJl
YWQpLCB0aGlzLCB0aHJlYWROYW1lKTsKLX0KLQotdm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW52
YWxpZGF0ZSgpCi17Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZXZlbnRMb29wTG9jayk7Ci0K
LSAgICBpZiAobV9ldmVudExvb3ApIHsKLSAgICAgICAgaWYgKGdfbWFpbl9sb29wX2lzX3J1bm5p
bmcobV9ldmVudExvb3AuZ2V0KCkpKQotICAgICAgICAgICAgZ19tYWluX2xvb3BfcXVpdChtX2V2
ZW50TG9vcC5nZXQoKSk7Ci0gICAgICAgIG1fZXZlbnRMb29wLmNsZWFyKCk7Ci0gICAgfQotCi0g
ICAgbV9ldmVudENvbnRleHQuY2xlYXIoKTsKLX0KLQotdm9pZCBXb3JrUXVldWU6OnN0YXJ0V29y
a1F1ZXVlVGhyZWFkKFdvcmtRdWV1ZSogd29ya1F1ZXVlKQotewotICAgIHdvcmtRdWV1ZS0+d29y
a1F1ZXVlVGhyZWFkQm9keSgpOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6d29ya1F1ZXVlVGhyZWFk
Qm9keSgpCi17Ci0gICAgZ19tYWluX2xvb3BfcnVuKG1fZXZlbnRMb29wLmdldCgpKTsKLX0KLQot
dm9pZCBXb3JrUXVldWU6OnJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKGludCBmaWxlRGVzY3Jp
cHRvciwgaW50IGNvbmRpdGlvbiwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCi17
Ci0gICAgR1JlZlB0cjxHU29ja2V0PiBzb2NrZXQgPSBhZG9wdEdSZWYoZ19zb2NrZXRfbmV3X2Zy
b21fZmQoZmlsZURlc2NyaXB0b3IsIDApKTsKLSAgICBBU1NFUlQoc29ja2V0KTsKLSAgICBHUmVm
UHRyPEdDYW5jZWxsYWJsZT4gY2FuY2VsbGFibGUgPSBhZG9wdEdSZWYoZ19jYW5jZWxsYWJsZV9u
ZXcoKSk7Ci0gICAgR1JlZlB0cjxHU291cmNlPiBkaXNwYXRjaFNvdXJjZSA9IGFkb3B0R1JlZihn
X3NvY2tldF9jcmVhdGVfc291cmNlKHNvY2tldC5nZXQoKSwgc3RhdGljX2Nhc3Q8R0lPQ29uZGl0
aW9uPihjb25kaXRpb24pLCBjYW5jZWxsYWJsZS5nZXQoKSkpOwotICAgIEFTU0VSVChkaXNwYXRj
aFNvdXJjZSk7Ci0gICAgRXZlbnRTb3VyY2UqIGV2ZW50U291cmNlID0gbmV3IEV2ZW50U291cmNl
KGZ1bmN0aW9uLCB0aGlzLCBjYW5jZWxsYWJsZS5nZXQoKSk7Ci0gICAgQVNTRVJUKGV2ZW50U291
cmNlKTsKLQotICAgIGdfc291cmNlX3NldF9jYWxsYmFjayhkaXNwYXRjaFNvdXJjZS5nZXQoKSwg
cmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oJldvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OnBl
cmZvcm1Xb3JrKSwKLSAgICAgICAgZXZlbnRTb3VyY2UsIHJlaW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ry
b3lOb3RpZnk+KCZXb3JrUXVldWU6OkV2ZW50U291cmNlOjpkZWxldGVFdmVudFNvdXJjZSkpOwot
Ci0gICAgLy8gU2V0IHVwIHRoZSBldmVudCBzb3VyY2VzIHVuZGVyIHRoZSBtdXRleCBzaW5jZSB0
aGlzIGlzIHNoYXJlZCBhY3Jvc3MgbXVsdGlwbGUgdGhyZWFkcy4KLSAgICB7Ci0gICAgICAgIE11
dGV4TG9ja2VyIGxvY2tlcihtX2V2ZW50U291cmNlc0xvY2spOwotICAgICAgICBWZWN0b3I8RXZl
bnRTb3VyY2UqPiBzb3VyY2VzOwotICAgICAgICBFdmVudFNvdXJjZUl0ZXJhdG9yIGl0ID0gbV9l
dmVudFNvdXJjZXMuZmluZChmaWxlRGVzY3JpcHRvcik7Ci0gICAgICAgIGlmIChpdCAhPSBtX2V2
ZW50U291cmNlcy5lbmQoKSkgCi0gICAgICAgICAgICBzb3VyY2VzID0gaXQtPnNlY29uZDsKLQot
ICAgICAgICBzb3VyY2VzLmFwcGVuZChldmVudFNvdXJjZSk7Ci0gICAgICAgIG1fZXZlbnRTb3Vy
Y2VzLnNldChmaWxlRGVzY3JpcHRvciwgc291cmNlcyk7Ci0gICAgfQotCi0gICAgZ19zb3VyY2Vf
YXR0YWNoKGRpc3BhdGNoU291cmNlLmdldCgpLCBtX2V2ZW50Q29udGV4dC5nZXQoKSk7Ci19Ci0K
LXZvaWQgV29ya1F1ZXVlOjp1bnJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKGludCBmaWxlRGVz
Y3JpcHRvcikKLXsKLSAgICBBU1NFUlQoZmlsZURlc2NyaXB0b3IpOwotICAgIAotICAgIE11dGV4
TG9ja2VyIGxvY2tlcihtX2V2ZW50U291cmNlc0xvY2spOwotICAgIAotICAgIEV2ZW50U291cmNl
SXRlcmF0b3IgaXQgPSBtX2V2ZW50U291cmNlcy5maW5kKGZpbGVEZXNjcmlwdG9yKTsKLSAgICBB
U1NFUlQoaXQgIT0gbV9ldmVudFNvdXJjZXMuZW5kKCkpOwotICAgIEFTU0VSVChtX2V2ZW50U291
cmNlcy5jb250YWlucyhmaWxlRGVzY3JpcHRvcikpOwotCi0gICAgaWYgKGl0ICE9IG1fZXZlbnRT
b3VyY2VzLmVuZCgpKSB7Ci0gICAgICAgIFZlY3RvcjxFdmVudFNvdXJjZSo+IHNvdXJjZXMgPSBp
dC0+c2Vjb25kOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc291cmNlcy5zaXpl
KCk7IGkrKykKLSAgICAgICAgICAgIHNvdXJjZXNbaV0tPmNhbmNlbCgpOwotCi0gICAgICAgIG1f
ZXZlbnRTb3VyY2VzLnJlbW92ZShpdCk7Ci0gICAgfQotfQotCi12b2lkIFdvcmtRdWV1ZTo6ZGlz
cGF0Y2hPblNvdXJjZShHU291cmNlKiBkaXNwYXRjaFNvdXJjZSwgY29uc3QgRnVuY3Rpb248dm9p
ZCgpPiYgZnVuY3Rpb24sIEdTb3VyY2VGdW5jIHNvdXJjZUNhbGxiYWNrKQotewotICAgIEV2ZW50
U291cmNlKiBldmVudFNvdXJjZSA9IG5ldyBFdmVudFNvdXJjZShmdW5jdGlvbiwgdGhpcywgMCk7
Ci0KLSAgICBnX3NvdXJjZV9zZXRfY2FsbGJhY2soZGlzcGF0Y2hTb3VyY2UsIHNvdXJjZUNhbGxi
YWNrLCBldmVudFNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRf
Y2FzdDxHRGVzdHJveU5vdGlmeT4oJldvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OmRlbGV0ZUV2ZW50
U291cmNlKSk7Ci0KLSAgICBnX3NvdXJjZV9hdHRhY2goZGlzcGF0Y2hTb3VyY2UsIG1fZXZlbnRD
b250ZXh0LmdldCgpKTsKLX0KLQotdm9pZCBXb3JrUXVldWU6OmRpc3BhdGNoKGNvbnN0IEZ1bmN0
aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQotewotICAgIEdSZWZQdHI8R1NvdXJjZT4gZGlzcGF0Y2hT
b3VyY2UgPSBhZG9wdEdSZWYoZ19pZGxlX3NvdXJjZV9uZXcoKSk7Ci0gICAgQVNTRVJUKGRpc3Bh
dGNoU291cmNlKTsKLSAgICBnX3NvdXJjZV9zZXRfcHJpb3JpdHkoZGlzcGF0Y2hTb3VyY2UuZ2V0
KCksIEdfUFJJT1JJVFlfREVGQVVMVCk7Ci0KLSAgICBkaXNwYXRjaE9uU291cmNlKGRpc3BhdGNo
U291cmNlLmdldCgpLCBmdW5jdGlvbiwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oJldv
cmtRdWV1ZTo6RXZlbnRTb3VyY2U6OnBlcmZvcm1Xb3JrT25jZSkpOwotfQotCi12b2lkIFdvcmtR
dWV1ZTo6ZGlzcGF0Y2hBZnRlckRlbGF5KGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9u
LCBkb3VibGUgZGVsYXkpCi17Ci0gICAgR1JlZlB0cjxHU291cmNlPiBkaXNwYXRjaFNvdXJjZSA9
IGFkb3B0R1JlZihnX3RpbWVvdXRfc291cmNlX25ldyhzdGF0aWNfY2FzdDxndWludD4oZGVsYXkg
KiAxMDAwKSkpOwotICAgIEFTU0VSVChkaXNwYXRjaFNvdXJjZSk7Ci0KLSAgICBkaXNwYXRjaE9u
U291cmNlKGRpc3BhdGNoU291cmNlLmdldCgpLCBmdW5jdGlvbiwgcmVpbnRlcnByZXRfY2FzdDxH
U291cmNlRnVuYz4oJldvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OnBlcmZvcm1Xb3JrT25jZSkpOwot
fQotCi12b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2hPblRlcm1pbmF0aW9uKFdlYktpdDo6UGxhdGZv
cm1Qcm9jZXNzSWRlbnRpZmllciBwcm9jZXNzLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5j
dGlvbikKLXsKLSAgICBHUmVmUHRyPEdTb3VyY2U+IGRpc3BhdGNoU291cmNlID0gYWRvcHRHUmVm
KGdfY2hpbGRfd2F0Y2hfc291cmNlX25ldyhwcm9jZXNzKSk7Ci0gICAgQVNTRVJUKGRpc3BhdGNo
U291cmNlKTsKLQotICAgIGRpc3BhdGNoT25Tb3VyY2UoZGlzcGF0Y2hTb3VyY2UuZ2V0KCksIGZ1
bmN0aW9uLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPigmV29ya1F1ZXVlOjpFdmVudFNv
dXJjZTo6cGVyZm9ybVdvcmtPblRlcm1pbmF0aW9uKSk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybS9tYWMvV29ya1F1ZXVlTWFjLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1Bs
YXRmb3JtL21hYy9Xb3JrUXVldWVNYWMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBhZTQ3M2VlNWNjODRlNTg0MjliMDQzOWNjZDkyMWFjMmM0OTJmZmFhLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3Jt
L21hYy9Xb3JrUXVldWVNYWMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTc4ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV29ya1F1ZXVlLmgiCi0K
LSNpbmNsdWRlIDxtYWNoL21hY2hfaW5pdC5oPgotI2luY2x1ZGUgPG1hY2gvbWFjaF9wb3J0Lmg+
Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLQotdm9pZCBXb3JrUXVldWU6OmV4ZWN1dGVG
dW5jdGlvbih2b2lkKiBjb250ZXh0KQotewotICAgIFdvcmtRdWV1ZSogcXVldWUgPSBzdGF0aWNf
Y2FzdDxXb3JrUXVldWUqPihkaXNwYXRjaF9nZXRfY29udGV4dChkaXNwYXRjaF9nZXRfY3VycmVu
dF9xdWV1ZSgpKSk7Ci0gICAgT3duUHRyPEZ1bmN0aW9uPHZvaWQoKT4gPiBmdW5jdGlvbiA9IGFk
b3B0UHRyKHN0YXRpY19jYXN0PEZ1bmN0aW9uPHZvaWQoKT4qPihjb250ZXh0KSk7Ci0gICAgCi0g
ICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIocXVldWUtPm1faXNWYWxpZE11dGV4KTsK
LSAgICAgICAgaWYgKCFxdWV1ZS0+bV9pc1ZhbGlkKQotICAgICAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgICgqZnVuY3Rpb24pKCk7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpkaXNwYXRjaChj
b25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKLXsKLSAgICBkaXNwYXRjaF9hc3luY19m
KG1fZGlzcGF0Y2hRdWV1ZSwgbmV3IEZ1bmN0aW9uPHZvaWQoKT4oZnVuY3Rpb24pLCBleGVjdXRl
RnVuY3Rpb24pOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2hBZnRlckRlbGF5KGNvbnN0
IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uLCBkb3VibGUgZGVsYXkpCi17Ci0gICAgZGlzcGF0
Y2hfdGltZV90IGRlbGF5VGltZSA9IGRpc3BhdGNoX3RpbWUoRElTUEFUQ0hfVElNRV9OT1csIGRl
bGF5ICogTlNFQ19QRVJfU0VDKTsKLQotICAgIGRpc3BhdGNoX2FmdGVyX2YoZGVsYXlUaW1lLCBt
X2Rpc3BhdGNoUXVldWUsIG5ldyBGdW5jdGlvbjx2b2lkKCk+KGZ1bmN0aW9uKSwgZXhlY3V0ZUZ1
bmN0aW9uKTsKLX0KLQotY2xhc3MgV29ya1F1ZXVlOjpFdmVudFNvdXJjZSB7Ci1wdWJsaWM6Ci0g
ICAgRXZlbnRTb3VyY2UoTWFjaFBvcnRFdmVudFR5cGUgZXZlbnRUeXBlLCBkaXNwYXRjaF9zb3Vy
Y2VfdCBkaXNwYXRjaFNvdXJjZSwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCi0g
ICAgICAgIDogbV9ldmVudFR5cGUoZXZlbnRUeXBlKQotICAgICAgICAsIG1fZGlzcGF0Y2hTb3Vy
Y2UoZGlzcGF0Y2hTb3VyY2UpCi0gICAgICAgICwgbV9mdW5jdGlvbihmdW5jdGlvbikKLSAgICB7
Ci0gICAgfQotICAgIAotICAgIGRpc3BhdGNoX3NvdXJjZV90IGRpc3BhdGNoU291cmNlKCkgY29u
c3QgeyByZXR1cm4gbV9kaXNwYXRjaFNvdXJjZTsgfQotICAgIAotICAgIHN0YXRpYyB2b2lkIGV2
ZW50SGFuZGxlcih2b2lkKiBzb3VyY2UpIAotICAgIHsKLSAgICAgICAgRXZlbnRTb3VyY2UqIGV2
ZW50U291cmNlID0gc3RhdGljX2Nhc3Q8RXZlbnRTb3VyY2UqPihzb3VyY2UpOwotICAgICAgICAK
LSAgICAgICAgZXZlbnRTb3VyY2UtPm1fZnVuY3Rpb24oKTsKLSAgICB9Ci0gICAgCi0gICAgc3Rh
dGljIHZvaWQgY2FuY2VsSGFuZGxlcih2b2lkKiBzb3VyY2UpCi0gICAgewotICAgICAgICBFdmVu
dFNvdXJjZSogZXZlbnRTb3VyY2UgPSBzdGF0aWNfY2FzdDxFdmVudFNvdXJjZSo+KHNvdXJjZSk7
Ci0gICAgICAgIAotICAgICAgICBtYWNoX3BvcnRfdCBtYWNoUG9ydCA9IGRpc3BhdGNoX3NvdXJj
ZV9nZXRfaGFuZGxlKGV2ZW50U291cmNlLT5tX2Rpc3BhdGNoU291cmNlKTsKLSAgICAgICAgCi0g
ICAgICAgIHN3aXRjaCAoZXZlbnRTb3VyY2UtPm1fZXZlbnRUeXBlKSB7Ci0gICAgICAgIGNhc2Ug
TWFjaFBvcnREYXRhQXZhaWxhYmxlOgotICAgICAgICAgICAgLy8gUmVsZWFzZSBvdXIgcmVjZWl2
ZSByaWdodC4KLSAgICAgICAgICAgIG1hY2hfcG9ydF9tb2RfcmVmcyhtYWNoX3Rhc2tfc2VsZigp
LCBtYWNoUG9ydCwgTUFDSF9QT1JUX1JJR0hUX1JFQ0VJVkUsIC0xKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIE1hY2hQb3J0RGVhZE5hbWVOb3RpZmljYXRpb246Ci0gICAgICAg
ICAgICAvLyBSZWxlYXNlIG91ciBzZW5kIHJpZ2h0LgotICAgICAgICAgICAgbWFjaF9wb3J0X2Rl
YWxsb2NhdGUobWFjaF90YXNrX3NlbGYoKSwgbWFjaFBvcnQpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgc3RhdGljIHZvaWQgZmluYWxpemVIYW5kbGVy
KHZvaWQqIHNvdXJjZSkKLSAgICB7Ci0gICAgICAgIEV2ZW50U291cmNlKiBldmVudFNvdXJjZSA9
IHN0YXRpY19jYXN0PEV2ZW50U291cmNlKj4oc291cmNlKTsKLSAgICAgICAgCi0gICAgICAgIGRl
bGV0ZSBldmVudFNvdXJjZTsKLSAgICB9Ci0gICAgCi1wcml2YXRlOgotICAgIE1hY2hQb3J0RXZl
bnRUeXBlIG1fZXZlbnRUeXBlOwotICAgIAotICAgIC8vIFRoaXMgaXMgYSB3ZWFrIHJlZmVyZW5j
ZSwgc2luY2UgbV9kaXNwYXRjaFNvdXJjZSByZWZlcmVuY2VzIHRoZSBldmVudCBzb3VyY2UuCi0g
ICAgZGlzcGF0Y2hfc291cmNlX3QgbV9kaXNwYXRjaFNvdXJjZTsKLQotICAgIEZ1bmN0aW9uPHZv
aWQoKT4gbV9mdW5jdGlvbjsKLX07Ci0KLXZvaWQgV29ya1F1ZXVlOjpyZWdpc3Rlck1hY2hQb3J0
RXZlbnRIYW5kbGVyKG1hY2hfcG9ydF90IG1hY2hQb3J0LCBNYWNoUG9ydEV2ZW50VHlwZSBldmVu
dFR5cGUsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQotewotICAgIGRpc3BhdGNo
X3NvdXJjZV90eXBlX3Qgc291cmNlVHlwZSA9IDA7Ci0gICAgc3dpdGNoIChldmVudFR5cGUpIHsK
LSAgICBjYXNlIE1hY2hQb3J0RGF0YUF2YWlsYWJsZToKLSAgICAgICAgc291cmNlVHlwZSA9IERJ
U1BBVENIX1NPVVJDRV9UWVBFX01BQ0hfUkVDVjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBN
YWNoUG9ydERlYWROYW1lTm90aWZpY2F0aW9uOgotICAgICAgICBzb3VyY2VUeXBlID0gRElTUEFU
Q0hfU09VUkNFX1RZUEVfTUFDSF9TRU5EOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgCi0g
ICAgZGlzcGF0Y2hfc291cmNlX3QgZGlzcGF0Y2hTb3VyY2UgPSBkaXNwYXRjaF9zb3VyY2VfY3Jl
YXRlKHNvdXJjZVR5cGUsIG1hY2hQb3J0LCAwLCBtX2Rpc3BhdGNoUXVldWUpOwotICAgIAotICAg
IEV2ZW50U291cmNlKiBldmVudFNvdXJjZSA9IG5ldyBFdmVudFNvdXJjZShldmVudFR5cGUsIGRp
c3BhdGNoU291cmNlLCBmdW5jdGlvbik7Ci0gICAgZGlzcGF0Y2hfc2V0X2NvbnRleHQoZGlzcGF0
Y2hTb3VyY2UsIGV2ZW50U291cmNlKTsKLSAgICAKLSAgICBkaXNwYXRjaF9zb3VyY2Vfc2V0X2V2
ZW50X2hhbmRsZXJfZihkaXNwYXRjaFNvdXJjZSwgJkV2ZW50U291cmNlOjpldmVudEhhbmRsZXIp
OwotICAgIGRpc3BhdGNoX3NvdXJjZV9zZXRfY2FuY2VsX2hhbmRsZXJfZihkaXNwYXRjaFNvdXJj
ZSwgJkV2ZW50U291cmNlOjpjYW5jZWxIYW5kbGVyKTsKLSAgICBkaXNwYXRjaF9zZXRfZmluYWxp
emVyX2YoZGlzcGF0Y2hTb3VyY2UsICZFdmVudFNvdXJjZTo6ZmluYWxpemVIYW5kbGVyKTsKLSAg
ICAKLSAgICAvLyBBZGQgdGhlIHNvdXJjZSB0byBvdXIgc2V0IG9mIHNvdXJjZXMuCi0gICAgewot
ICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9ldmVudFNvdXJjZXNNdXRleCk7Ci0gICAgICAg
IAotICAgICAgICBBU1NFUlQoIW1fZXZlbnRTb3VyY2VzLmNvbnRhaW5zKG1hY2hQb3J0KSk7Ci0g
ICAgICAgIAotICAgICAgICBtX2V2ZW50U291cmNlcy5zZXQobWFjaFBvcnQsIGV2ZW50U291cmNl
KTsKLSAgICAgICAgCi0gICAgICAgIC8vIEFuZCBzdGFydCBpdCEKLSAgICAgICAgZGlzcGF0Y2hf
cmVzdW1lKGRpc3BhdGNoU291cmNlKTsKLSAgICB9Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjp1bnJl
Z2lzdGVyTWFjaFBvcnRFdmVudEhhbmRsZXIobWFjaF9wb3J0X3QgbWFjaFBvcnQpCi17Ci0gICAg
QVNTRVJUKG1hY2hQb3J0KTsKLSAgICAKLSAgICBNdXRleExvY2tlciBsb2NrZXIobV9ldmVudFNv
dXJjZXNNdXRleCk7Ci0gICAgCi0gICAgSGFzaE1hcDxtYWNoX3BvcnRfdCwgRXZlbnRTb3VyY2Uq
Pjo6aXRlcmF0b3IgaXQgPSBtX2V2ZW50U291cmNlcy5maW5kKG1hY2hQb3J0KTsKLSAgICBBU1NF
UlQoaXQgIT0gbV9ldmVudFNvdXJjZXMuZW5kKCkpOwotICAgIAotICAgIEFTU0VSVChtX2V2ZW50
U291cmNlcy5jb250YWlucyhtYWNoUG9ydCkpOwotCi0gICAgRXZlbnRTb3VyY2UqIGV2ZW50U291
cmNlID0gaXQtPnNlY29uZDsKLSAgICAvLyBDYW5jZWwgYW5kIHJlbGVhc2UgdGhlIHNvdXJjZS4g
SXQgd2lsbCBiZSBkZWxldGVkIGluIGl0cyBmaW5hbGl6ZSBoYW5kbGVyLgotICAgIGRpc3BhdGNo
X3NvdXJjZV9jYW5jZWwoZXZlbnRTb3VyY2UtPmRpc3BhdGNoU291cmNlKCkpOwotICAgIGRpc3Bh
dGNoX3JlbGVhc2UoZXZlbnRTb3VyY2UtPmRpc3BhdGNoU291cmNlKCkpOwotCi0gICAgbV9ldmVu
dFNvdXJjZXMucmVtb3ZlKGl0KTsgICAgCi19Ci0KLXZvaWQgV29ya1F1ZXVlOjpwbGF0Zm9ybUlu
aXRpYWxpemUoY29uc3QgY2hhciogbmFtZSkKLXsKLSAgICBtX2Rpc3BhdGNoUXVldWUgPSBkaXNw
YXRjaF9xdWV1ZV9jcmVhdGUobmFtZSwgMCk7Ci0gICAgZGlzcGF0Y2hfc2V0X2NvbnRleHQobV9k
aXNwYXRjaFF1ZXVlLCB0aGlzKTsKLX0KLQotdm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW52YWxp
ZGF0ZSgpCi17Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIE11dGV4TG9ja2VyIGxvY2tlciht
X2V2ZW50U291cmNlc011dGV4KTsKLSAgICBBU1NFUlQobV9ldmVudFNvdXJjZXMuaXNFbXB0eSgp
KTsKLSNlbmRpZgotCi0gICAgZGlzcGF0Y2hfcmVsZWFzZShtX2Rpc3BhdGNoUXVldWUpOwotfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vcXQvV29ya1F1ZXVlUXQuY3BwIGIv
U291cmNlL1dlYktpdDIvUGxhdGZvcm0vcXQvV29ya1F1ZXVlUXQuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBhYWEyYmUzZDBiOGI3NDg1MjlhMjg4ZmVlMmQ1OTRmZGI5ZTQ5OTI2
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtL3F0L1dvcmtRdWV1ZVF0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEz
MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIldvcmtRdWV1ZS5oIgotCi0jaW5jbHVkZSA8UUxvY2FsU29ja2V0PgotI2luY2x1
ZGUgPFFPYmplY3Q+Ci0jaW5jbHVkZSA8UVRocmVhZD4KLSNpbmNsdWRlIDxRUHJvY2Vzcz4KLSNp
bmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZGlu
Zy5oPgotCi1jbGFzcyBXb3JrUXVldWU6OldvcmtJdGVtUXQgOiBwdWJsaWMgUU9iamVjdCB7Ci0g
ICAgUV9PQkpFQ1QKLXB1YmxpYzoKLSAgICBXb3JrSXRlbVF0KFdvcmtRdWV1ZSogd29ya1F1ZXVl
LCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKLSAgICAgICAgOiBtX3F1ZXVlKHdv
cmtRdWV1ZSkKLSAgICAgICAgLCBtX3NvdXJjZSgwKQotICAgICAgICAsIG1fc2lnbmFsKDApCi0g
ICAgICAgICwgbV9mdW5jdGlvbihmdW5jdGlvbikKLSAgICB7Ci0gICAgfQotCi0gICAgV29ya0l0
ZW1RdChXb3JrUXVldWUqIHdvcmtRdWV1ZSwgUU9iamVjdCogc291cmNlLCBjb25zdCBjaGFyKiBz
aWduYWwsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQotICAgICAgICA6IG1fcXVl
dWUod29ya1F1ZXVlKQotICAgICAgICAsIG1fc291cmNlKHNvdXJjZSkKLSAgICAgICAgLCBtX3Np
Z25hbChzaWduYWwpCi0gICAgICAgICwgbV9mdW5jdGlvbihmdW5jdGlvbikKLSAgICB7Ci0gICAg
ICAgIGNvbm5lY3QobV9zb3VyY2UsIG1fc2lnbmFsLCBTTE9UKGV4ZWN1dGUoKSksIFF0OjpRdWV1
ZWRDb25uZWN0aW9uKTsKLSAgICB9Ci0KLSAgICB+V29ya0l0ZW1RdCgpCi0gICAgewotICAgIH0K
LQotICAgIFFfU0xPVCB2b2lkIGV4ZWN1dGUoKSAKLSAgICB7IAotICAgICAgICBpZiAobV9xdWV1
ZS0+bV9pc1ZhbGlkKQotICAgICAgICAgICAgbV9mdW5jdGlvbigpOwotICAgIH0KLQotICAgIFFf
U0xPVCB2b2lkIGV4ZWN1dGVBbmREZWxldGUoKQotICAgIHsKLSAgICAgICAgZXhlY3V0ZSgpOwot
ICAgICAgICBkZWxldGUgdGhpczsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdGltZXJFdmVu
dChRVGltZXJFdmVudCopCi0gICAgewotICAgICAgICBleGVjdXRlQW5kRGVsZXRlKCk7Ci0gICAg
fQotCi0gICAgV29ya1F1ZXVlKiBtX3F1ZXVlOwotICAgIFFPYmplY3QqIG1fc291cmNlOwotICAg
IGNvbnN0IGNoYXIqIG1fc2lnbmFsOwotICAgIEZ1bmN0aW9uPHZvaWQoKT4gbV9mdW5jdGlvbjsK
LX07Ci0KLVFTb2NrZXROb3RpZmllciogV29ya1F1ZXVlOjpyZWdpc3RlclNvY2tldEV2ZW50SGFu
ZGxlcihpbnQgc29ja2V0RGVzY3JpcHRvciwgUVNvY2tldE5vdGlmaWVyOjpUeXBlIHR5cGUsIGNv
bnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQotewotICAgIEFTU0VSVChtX3dvcmtUaHJl
YWQpOwotCi0gICAgUVNvY2tldE5vdGlmaWVyKiBub3RpZmllciA9IG5ldyBRU29ja2V0Tm90aWZp
ZXIoc29ja2V0RGVzY3JpcHRvciwgdHlwZSwgMCk7Ci0gICAgbm90aWZpZXItPnNldEVuYWJsZWQo
ZmFsc2UpOwotICAgIG5vdGlmaWVyLT5tb3ZlVG9UaHJlYWQobV93b3JrVGhyZWFkKTsKLSAgICBX
b3JrUXVldWU6OldvcmtJdGVtUXQqIGl0ZW1RdCA9IG5ldyBXb3JrUXVldWU6OldvcmtJdGVtUXQo
dGhpcywgbm90aWZpZXIsIFNJR05BTChhY3RpdmF0ZWQoaW50KSksIGZ1bmN0aW9uKTsKLSAgICBp
dGVtUXQtPm1vdmVUb1RocmVhZChtX3dvcmtUaHJlYWQpOwotICAgIG5vdGlmaWVyLT5zZXRFbmFi
bGVkKHRydWUpOwotICAgIHJldHVybiBub3RpZmllcjsKLX0KLQotdm9pZCBXb3JrUXVldWU6OnBs
YXRmb3JtSW5pdGlhbGl6ZShjb25zdCBjaGFyKikKLXsKLSAgICBtX3dvcmtUaHJlYWQgPSBuZXcg
UVRocmVhZCgpOwotICAgIG1fd29ya1RocmVhZC0+c3RhcnQoKTsKLX0KLQotdm9pZCBXb3JrUXVl
dWU6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCi17Ci0gICAgbV93b3JrVGhyZWFkLT5leGl0KCk7Ci0g
ICAgbV93b3JrVGhyZWFkLT53YWl0KCk7Ci0gICAgZGVsZXRlIG1fd29ya1RocmVhZDsKLX0KLQot
dm9pZCBXb3JrUXVldWU6OmRpc3BhdGNoKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9u
KQotewotICAgIFdvcmtRdWV1ZTo6V29ya0l0ZW1RdCogaXRlbVF0ID0gbmV3IFdvcmtRdWV1ZTo6
V29ya0l0ZW1RdCh0aGlzLCBmdW5jdGlvbik7Ci0gICAgaXRlbVF0LT5tb3ZlVG9UaHJlYWQobV93
b3JrVGhyZWFkKTsKLSAgICBRTWV0YU9iamVjdDo6aW52b2tlTWV0aG9kKGl0ZW1RdCwgImV4ZWN1
dGVBbmREZWxldGUiLCBRdDo6UXVldWVkQ29ubmVjdGlvbik7Ci19Ci0KLXZvaWQgV29ya1F1ZXVl
OjpkaXNwYXRjaEFmdGVyRGVsYXkoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24sIGRv
dWJsZSBkZWxheUluU2Vjb25kKQotewotICAgIFdvcmtRdWV1ZTo6V29ya0l0ZW1RdCogaXRlbVF0
ID0gbmV3IFdvcmtRdWV1ZTo6V29ya0l0ZW1RdCh0aGlzLCBmdW5jdGlvbik7Ci0gICAgaXRlbVF0
LT5zdGFydFRpbWVyKHN0YXRpY19jYXN0PGludD4oZGVsYXlJblNlY29uZCAqIDEwMDApKTsKLSAg
ICBpdGVtUXQtPm1vdmVUb1RocmVhZChtX3dvcmtUaHJlYWQpOwotfQotCi12b2lkIFdvcmtRdWV1
ZTo6ZGlzcGF0Y2hPblRlcm1pbmF0aW9uKFdlYktpdDo6UGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmll
ciBwcm9jZXNzLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKLXsKLSAgICBXb3Jr
UXVldWU6OldvcmtJdGVtUXQqIGl0ZW1RdCA9IG5ldyBXb3JrUXVldWU6OldvcmtJdGVtUXQodGhp
cywgcHJvY2VzcywgU0lHTkFMKGZpbmlzaGVkKGludCwgUVByb2Nlc3M6OkV4aXRTdGF0dXMpKSwg
ZnVuY3Rpb24pOwotICAgIGl0ZW1RdC0+bW92ZVRvVGhyZWFkKG1fd29ya1RocmVhZCk7Ci19Ci0K
LSNpbmNsdWRlICJXb3JrUXVldWVRdC5tb2MiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybS93aW4vV29ya1F1ZXVlV2luLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3dp
bi9Xb3JrUXVldWVXaW4uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYWJhZGJk
YTg5NWUwN2Q5ZWU1MzMwNzk1Y2M5NGU2MTdlYjkxZDdiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3dpbi9Xb3Jr
UXVldWVXaW4uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjkxICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV29ya1F1ZXVlLmgiCi0KLSNpbmNsdWRl
IDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgot
Ci1pbmxpbmUgV29ya1F1ZXVlOjpXb3JrSXRlbVdpbjo6V29ya0l0ZW1XaW4oY29uc3QgRnVuY3Rp
b248dm9pZCgpPiYgZnVuY3Rpb24sIFdvcmtRdWV1ZSogcXVldWUpCi0gICAgOiBtX2Z1bmN0aW9u
KGZ1bmN0aW9uKQotICAgICwgbV9xdWV1ZShxdWV1ZSkKLXsKLX0KLQotUGFzc1JlZlB0cjxXb3Jr
UXVldWU6OldvcmtJdGVtV2luPiBXb3JrUXVldWU6OldvcmtJdGVtV2luOjpjcmVhdGUoY29uc3Qg
RnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24sIFdvcmtRdWV1ZSogcXVldWUpCi17Ci0gICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBXb3JrSXRlbVdpbihmdW5jdGlvbiwgcXVldWUpKTsKLX0KLQotV29y
a1F1ZXVlOjpXb3JrSXRlbVdpbjo6fldvcmtJdGVtV2luKCkKLXsKLX0KLQotaW5saW5lIFdvcmtR
dWV1ZTo6SGFuZGxlV29ya0l0ZW06OkhhbmRsZVdvcmtJdGVtKEhBTkRMRSBoYW5kbGUsIGNvbnN0
IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uLCBXb3JrUXVldWUqIHF1ZXVlKQotICAgIDogV29y
a0l0ZW1XaW4oZnVuY3Rpb24sIHF1ZXVlKQotICAgICwgbV9oYW5kbGUoaGFuZGxlKQotICAgICwg
bV93YWl0SGFuZGxlKDApCi17Ci0gICAgQVNTRVJUX0FSRyhoYW5kbGUsIGhhbmRsZSk7Ci19Ci0K
LVBhc3NSZWZQdHI8V29ya1F1ZXVlOjpIYW5kbGVXb3JrSXRlbT4gV29ya1F1ZXVlOjpIYW5kbGVX
b3JrSXRlbTo6Y3JlYXRlQnlBZG9wdGluZ0hhbmRsZShIQU5ETEUgaGFuZGxlLCBjb25zdCBGdW5j
dGlvbjx2b2lkKCk+JiBmdW5jdGlvbiwgV29ya1F1ZXVlKiBxdWV1ZSkKLXsKLSAgICByZXR1cm4g
YWRvcHRSZWYobmV3IEhhbmRsZVdvcmtJdGVtKGhhbmRsZSwgZnVuY3Rpb24sIHF1ZXVlKSk7Ci19
Ci0KLVdvcmtRdWV1ZTo6SGFuZGxlV29ya0l0ZW06On5IYW5kbGVXb3JrSXRlbSgpCi17Ci0gICAg
OjpDbG9zZUhhbmRsZShtX2hhbmRsZSk7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpoYW5kbGVDYWxs
YmFjayh2b2lkKiBjb250ZXh0LCBCT09MRUFOIHRpbWVyT3JXYWl0RmlyZWQpCi17Ci0gICAgQVNT
RVJUX0FSRyhjb250ZXh0LCBjb250ZXh0KTsKLSAgICBBU1NFUlRfQVJHKHRpbWVyT3JXYWl0Rmly
ZWQsICF0aW1lck9yV2FpdEZpcmVkKTsKLQotICAgIFdvcmtJdGVtV2luKiBpdGVtID0gc3RhdGlj
X2Nhc3Q8V29ya0l0ZW1XaW4qPihjb250ZXh0KTsKLSAgICBXb3JrUXVldWUqIHF1ZXVlID0gaXRl
bS0+cXVldWUoKTsKLQotICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9jayhxdWV1ZS0+bV93
b3JrSXRlbVF1ZXVlTG9jayk7Ci0gICAgICAgIHF1ZXVlLT5tX3dvcmtJdGVtUXVldWUuYXBwZW5k
KGl0ZW0pOwotCi0gICAgICAgIC8vIElmIG5vIG90aGVyIHRocmVhZCBpcyBwZXJmb3JtaW5nIHdv
cmssIHdlIGNhbiBkbyBpdCBvbiB0aGlzIHRocmVhZC4KLSAgICAgICAgaWYgKCFxdWV1ZS0+dHJ5
UmVnaXN0ZXJBc1dvcmtUaHJlYWQoKSkgewotICAgICAgICAgICAgLy8gU29tZSBvdGhlciB0aHJl
YWQgaXMgcGVyZm9ybWluZyB3b3JrLiBTaW5jZSB3ZSBob2xkIHRoZSBxdWV1ZSBsb2NrLCB3ZSBj
YW4gYmUgc3VyZQotICAgICAgICAgICAgLy8gdGhhdCB0aGUgd29yayB0aHJlYWQgaXMgbm90IGV4
aXRpbmcgZHVlIHRvIGFuIGVtcHR5IHF1ZXVlIGFuZCB3aWxsIHByb2Nlc3MgdGhlIHdvcmsKLSAg
ICAgICAgICAgIC8vIGl0ZW0gd2UganVzdCBhZGRlZCB0byBpdC4gSWYgd2Ugd2VyZW4ndCBob2xk
aW5nIHRoZSBsb2NrIHdlJ2QgaGF2ZSB0byBzaWduYWwKLSAgICAgICAgICAgIC8vIG1fcGVyZm9y
bVdvcmtFdmVudCB0byBtYWtlIHN1cmUgdGhlIHdvcmsgaXRlbSBnb3QgcGlja2VkIHVwLgotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcXVldWUtPnBlcmZvcm1X
b3JrT25SZWdpc3RlcmVkV29ya1RocmVhZCgpOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6cmVnaXN0
ZXJIYW5kbGUoSEFORExFIGhhbmRsZSwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24p
Ci17Ci0gICAgUmVmUHRyPEhhbmRsZVdvcmtJdGVtPiBoYW5kbGVJdGVtID0gSGFuZGxlV29ya0l0
ZW06OmNyZWF0ZUJ5QWRvcHRpbmdIYW5kbGUoaGFuZGxlLCBmdW5jdGlvbiwgdGhpcyk7Ci0KLSAg
ICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2sobV9oYW5kbGVzTG9jayk7Ci0gICAgICAgIEFT
U0VSVF9BUkcoaGFuZGxlLCAhbV9oYW5kbGVzLmNvbnRhaW5zKGhhbmRsZSkpOwotICAgICAgICBt
X2hhbmRsZXMuc2V0KGhhbmRsZSwgaGFuZGxlSXRlbSk7Ci0gICAgfQotCi0gICAgSEFORExFIHdh
aXRIYW5kbGU7Ci0gICAgaWYgKCE6OlJlZ2lzdGVyV2FpdEZvclNpbmdsZU9iamVjdCgmd2FpdEhh
bmRsZSwgaGFuZGxlLCBoYW5kbGVDYWxsYmFjaywgaGFuZGxlSXRlbS5nZXQoKSwgSU5GSU5JVEUs
IFdUX0VYRUNVVEVERUZBVUxUKSkgewotICAgICAgICBEV09SRCBlcnJvciA9IDo6R2V0TGFzdEVy
cm9yKCk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLSAgICBoYW5kbGVJ
dGVtLT5zZXRXYWl0SGFuZGxlKHdhaXRIYW5kbGUpOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6dW5y
ZWdpc3RlckFuZENsb3NlSGFuZGxlKEhBTkRMRSBoYW5kbGUpCi17Ci0gICAgUmVmUHRyPEhhbmRs
ZVdvcmtJdGVtPiBpdGVtOwotICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1faGFu
ZGxlc0xvY2spOwotICAgICAgICBBU1NFUlRfQVJHKGhhbmRsZSwgbV9oYW5kbGVzLmNvbnRhaW5z
KGhhbmRsZSkpOwotICAgICAgICBpdGVtID0gbV9oYW5kbGVzLnRha2UoaGFuZGxlKTsKLSAgICB9
Ci0KLSAgICB1bnJlZ2lzdGVyV2FpdEFuZERlc3Ryb3lJdGVtU29vbihpdGVtLnJlbGVhc2UoKSk7
Ci19Ci0KLURXT1JEIFdvcmtRdWV1ZTo6d29ya1RocmVhZENhbGxiYWNrKHZvaWQqIGNvbnRleHQp
Ci17Ci0gICAgQVNTRVJUX0FSRyhjb250ZXh0LCBjb250ZXh0KTsKLQotICAgIFdvcmtRdWV1ZSog
cXVldWUgPSBzdGF0aWNfY2FzdDxXb3JrUXVldWUqPihjb250ZXh0KTsKLQotICAgIGlmICghcXVl
dWUtPnRyeVJlZ2lzdGVyQXNXb3JrVGhyZWFkKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAg
cXVldWUtPnBlcmZvcm1Xb3JrT25SZWdpc3RlcmVkV29ya1RocmVhZCgpOwotICAgIHJldHVybiAw
OwotfQotCi12b2lkIFdvcmtRdWV1ZTo6cGVyZm9ybVdvcmtPblJlZ2lzdGVyZWRXb3JrVGhyZWFk
KCkKLXsKLSAgICBBU1NFUlQobV9pc1dvcmtUaHJlYWRSZWdpc3RlcmVkKTsKLQotICAgIGJvb2wg
aXNWYWxpZCA9IHRydWU7Ci0KLSAgICBtX3dvcmtJdGVtUXVldWVMb2NrLmxvY2soKTsKLQotICAg
IHdoaWxlIChpc1ZhbGlkICYmICFtX3dvcmtJdGVtUXVldWUuaXNFbXB0eSgpKSB7Ci0gICAgICAg
IFZlY3RvcjxSZWZQdHI8V29ya0l0ZW1XaW4+ID4gd29ya0l0ZW1RdWV1ZTsKLSAgICAgICAgbV93
b3JrSXRlbVF1ZXVlLnN3YXAod29ya0l0ZW1RdWV1ZSk7Ci0KLSAgICAgICAgLy8gQWxsb3cgbW9y
ZSB3b3JrIHRvIGJlIHNjaGVkdWxlZCB3aGlsZSB3ZSdyZSBub3QgdXNpbmcgdGhlIHF1ZXVlIGRp
cmVjdGx5LgotICAgICAgICBtX3dvcmtJdGVtUXVldWVMb2NrLnVubG9jaygpOwotICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHdvcmtJdGVtUXVldWUuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2lzVmFsaWRNdXRleCk7Ci0gICAgICAgICAgICBp
c1ZhbGlkID0gbV9pc1ZhbGlkOwotICAgICAgICAgICAgaWYgKCFpc1ZhbGlkKQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgd29ya0l0ZW1RdWV1ZVtpXS0+ZnVuY3Rpb24oKSgp
OwotICAgICAgICB9Ci0gICAgICAgIG1fd29ya0l0ZW1RdWV1ZUxvY2subG9jaygpOwotICAgIH0K
LQotICAgIC8vIE9uZSBpbnZhcmlhbnQgd2UgbWFpbnRhaW4gaXMgdGhhdCBhbnkgd29yayBzY2hl
ZHVsZWQgd2hpbGUgYSB3b3JrIHRocmVhZCBpcyByZWdpc3RlcmVkIHdpbGwKLSAgICAvLyBiZSBo
YW5kbGVkIGJ5IHRoYXQgd29yayB0aHJlYWQuIFVucmVnaXN0ZXIgYXMgdGhlIHdvcmsgdGhyZWFk
IHdoaWxlIHRoZSBxdWV1ZSBsb2NrIGlzIHN0aWxsCi0gICAgLy8gaGVsZCBzbyB0aGF0IG5vIHdv
cmsgY2FuIGJlIHNjaGVkdWxlZCB3aGlsZSB3ZSdyZSBzdGlsbCByZWdpc3RlcmVkLgotICAgIHVu
cmVnaXN0ZXJBc1dvcmtUaHJlYWQoKTsKLQotICAgIG1fd29ya0l0ZW1RdWV1ZUxvY2sudW5sb2Nr
KCk7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpwbGF0Zm9ybUluaXRpYWxpemUoY29uc3QgY2hhciog
bmFtZSkKLXsKLSAgICBtX2lzV29ya1RocmVhZFJlZ2lzdGVyZWQgPSAwOwotICAgIG1fdGltZXJR
dWV1ZSA9IDo6Q3JlYXRlVGltZXJRdWV1ZSgpOwotICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV90
aW1lclF1ZXVlLCAiOjpDcmVhdGVUaW1lclF1ZXVlIGZhaWxlZCB3aXRoIGVycm9yICVsdSIsIDo6
R2V0TGFzdEVycm9yKCkpOwotfQotCi1ib29sIFdvcmtRdWV1ZTo6dHJ5UmVnaXN0ZXJBc1dvcmtU
aHJlYWQoKQotewotICAgIExPTkcgcmVzdWx0ID0gOjpJbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5n
ZSgmbV9pc1dvcmtUaHJlYWRSZWdpc3RlcmVkLCAxLCAwKTsKLSAgICBBU1NFUlQoIXJlc3VsdCB8
fCByZXN1bHQgPT0gMSk7Ci0gICAgcmV0dXJuICFyZXN1bHQ7Ci19Ci0KLXZvaWQgV29ya1F1ZXVl
Ojp1bnJlZ2lzdGVyQXNXb3JrVGhyZWFkKCkKLXsKLSAgICBMT05HIHJlc3VsdCA9IDo6SW50ZXJs
b2NrZWRDb21wYXJlRXhjaGFuZ2UoJm1faXNXb3JrVGhyZWFkUmVnaXN0ZXJlZCwgMCwgMSk7Ci0g
ICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdCA9PSAxKTsKLX0KLQotdm9pZCBXb3JrUXVl
dWU6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCi17Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIE11
dGV4TG9ja2VyIGxvY2sobV9oYW5kbGVzTG9jayk7Ci0gICAgQVNTRVJUKG1faGFuZGxlcy5pc0Vt
cHR5KCkpOwotI2VuZGlmCi0KLSAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBlbnN1cmUgdGhhdCBh
bnkgdGltZXItcXVldWUgdGltZXJzIHRoYXQgZmlyZSBhZnRlciB0aGlzIHBvaW50IGRvbid0IHRy
eSB0bwotICAgIC8vIGFjY2VzcyB0aGlzIFdvcmtRdWV1ZSA8aHR0cDovL3dlYmtpdC5vcmcvYi80
NDY5MD4uCi0gICAgOjpEZWxldGVUaW1lclF1ZXVlRXgobV90aW1lclF1ZXVlLCAwKTsKLX0KLQot
dm9pZCBXb3JrUXVldWU6OmRpc3BhdGNoKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9u
KQotewotICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3dvcmtJdGVtUXVldWVMb2NrKTsKLQotICAg
IG1fd29ya0l0ZW1RdWV1ZS5hcHBlbmQoV29ya0l0ZW1XaW46OmNyZWF0ZShmdW5jdGlvbiwgdGhp
cykpOwotCi0gICAgLy8gU3Bhd24gYSB3b3JrIHRocmVhZCB0byBwZXJmb3JtIHRoZSB3b3JrIHdl
IGp1c3QgYWRkZWQuIEFzIGFuIG9wdGltaXphdGlvbiwgd2UgYXZvaWQKLSAgICAvLyBzcGF3bmlu
ZyB0aGUgdGhyZWFkIGlmIGEgd29yayB0aHJlYWQgaXMgYWxyZWFkeSByZWdpc3RlcmVkLiBUaGlz
IHByZXZlbnRzIG11bHRpcGxlIHdvcmsKLSAgICAvLyB0aHJlYWRzIGZyb20gYmVpbmcgc3Bhd25l
ZCBpbiBtb3N0IGNhc2VzLiAoTm90ZSB0aGF0IHdoZW4gYSB3b3JrIHRocmVhZCBoYXMgYmVlbiBz
cGF3bmVkIGJ1dAotICAgIC8vIGhhc24ndCByZWdpc3RlcmVkIGl0c2VsZiB5ZXQsIG1faXNXb3Jr
VGhyZWFkUmVnaXN0ZXJlZCB3aWxsIGJlIGZhbHNlIGFuZCB3ZSdsbCBlbmQgdXAKLSAgICAvLyBz
cGF3bmluZyBhIHNlY29uZCB3b3JrIHRocmVhZCBoZXJlLiBCdXQgd29yayB0aHJlYWQgcmVnaXN0
cmF0aW9uIHByb2Nlc3Mgd2lsbCBlbnN1cmUgdGhhdAotICAgIC8vIG9ubHkgb25lIHRocmVhZCBh
Y3R1YWxseSBlbmRzIHVwIHBlcmZvcm1pbmcgd29yay4pCi0gICAgaWYgKCFtX2lzV29ya1RocmVh
ZFJlZ2lzdGVyZWQpCi0gICAgICAgIDo6UXVldWVVc2VyV29ya0l0ZW0od29ya1RocmVhZENhbGxi
YWNrLCB0aGlzLCBXVF9FWEVDVVRFREVGQVVMVCk7Ci19Ci0KLXN0cnVjdCBUaW1lckNvbnRleHQg
OiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8VGltZXJDb250ZXh0PiB7Ci0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8VGltZXJDb250ZXh0PiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcg
VGltZXJDb250ZXh0KTsgfQotCi0gICAgV29ya1F1ZXVlKiBxdWV1ZTsKLSAgICBGdW5jdGlvbjx2
b2lkKCk+IGZ1bmN0aW9uOwotICAgIE11dGV4IHRpbWVyTXV0ZXg7Ci0gICAgSEFORExFIHRpbWVy
OwotCi1wcml2YXRlOgotICAgIFRpbWVyQ29udGV4dCgpIDogcXVldWUoMCksIHRpbWVyKDApIHsg
fQotfTsKLQotdm9pZCBXb3JrUXVldWU6OnRpbWVyQ2FsbGJhY2sodm9pZCogY29udGV4dCwgQk9P
TEVBTiB0aW1lck9yV2FpdEZpcmVkKQotewotICAgIEFTU0VSVF9BUkcoY29udGV4dCwgY29udGV4
dCk7Ci0gICAgQVNTRVJUX1VOVVNFRCh0aW1lck9yV2FpdEZpcmVkLCB0aW1lck9yV2FpdEZpcmVk
KTsKLQotICAgIC8vIEJhbGFuY2VkIGJ5IGxlYWtSZWYgaW4gc2NoZWR1bGVXb3JrQWZ0ZXJEZWxh
eS4KLSAgICBSZWZQdHI8VGltZXJDb250ZXh0PiB0aW1lckNvbnRleHQgPSBhZG9wdFJlZihzdGF0
aWNfY2FzdDxUaW1lckNvbnRleHQqPihjb250ZXh0KSk7Ci0KLSAgICB0aW1lckNvbnRleHQtPnF1
ZXVlLT5kaXNwYXRjaCh0aW1lckNvbnRleHQtPmZ1bmN0aW9uKTsKLQotICAgIE11dGV4TG9ja2Vy
IGxvY2sodGltZXJDb250ZXh0LT50aW1lck11dGV4KTsKLSAgICBBU1NFUlQodGltZXJDb250ZXh0
LT50aW1lcik7Ci0gICAgQVNTRVJUKHRpbWVyQ29udGV4dC0+cXVldWUtPm1fdGltZXJRdWV1ZSk7
Ci0gICAgaWYgKCE6OkRlbGV0ZVRpbWVyUXVldWVUaW1lcih0aW1lckNvbnRleHQtPnF1ZXVlLT5t
X3RpbWVyUXVldWUsIHRpbWVyQ29udGV4dC0+dGltZXIsIDApKQotICAgICAgICBBU1NFUlRfV0lU
SF9NRVNTQUdFKGZhbHNlLCAiOjpEZWxldGVUaW1lclF1ZXVlVGltZXIgZmFpbGVkIHdpdGggZXJy
b3IgJWx1IiwgOjpHZXRMYXN0RXJyb3IoKSk7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpkaXNwYXRj
aEFmdGVyRGVsYXkoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24sIGRvdWJsZSBkZWxh
eSkKLXsKLSAgICBBU1NFUlQobV90aW1lclF1ZXVlKTsKLQotICAgIFJlZlB0cjxUaW1lckNvbnRl
eHQ+IGNvbnRleHQgPSBUaW1lckNvbnRleHQ6OmNyZWF0ZSgpOwotICAgIGNvbnRleHQtPnF1ZXVl
ID0gdGhpczsKLSAgICBjb250ZXh0LT5mdW5jdGlvbiA9IGZ1bmN0aW9uOwotCi0gICAgewotICAg
ICAgICAvLyBUaGUgdGltZXIgY2FsbGJhY2sgY291bGQgZmlyZSBiZWZvcmUgOjpDcmVhdGVUaW1l
clF1ZXVlVGltZXIgZXZlbiByZXR1cm5zLCBzbyB3ZSBwcm90ZWN0Ci0gICAgICAgIC8vIGNvbnRl
eHQtPnRpbWVyIHdpdGggYSBtdXRleCB0byBlbnN1cmUgdGhlIHRpbWVyIGNhbGxiYWNrIGRvZXNu
J3QgYWNjZXNzIGl0IGJlZm9yZSB0aGUKLSAgICAgICAgLy8gdGltZXIgaGFuZGxlIGhhcyBiZWVu
IHN0b3JlZCBpbiBpdC4KLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9jayhjb250ZXh0LT50aW1lck11
dGV4KTsKLQotICAgICAgICAvLyBTaW5jZSBvdXIgdGltZXIgY2FsbGJhY2sgaXMgcXVpY2ssIHdl
IGNhbiBleGVjdXRlIGluIHRoZSB0aW1lciB0aHJlYWQgaXRzZWxmIGFuZCBhdm9pZAotICAgICAg
ICAvLyBhbiBleHRyYSB0aHJlYWQgc3dpdGNoIG92ZXIgdG8gYSB3b3JrZXIgdGhyZWFkLgotICAg
ICAgICBpZiAoITo6Q3JlYXRlVGltZXJRdWV1ZVRpbWVyKCZjb250ZXh0LT50aW1lciwgbV90aW1l
clF1ZXVlLCB0aW1lckNhbGxiYWNrLCBjb250ZXh0LmdldCgpLCBkZWxheSAqIDEwMDAsIDAsIFdU
X0VYRUNVVEVJTlRJTUVSVEhSRUFEKSkgewotICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FH
RShmYWxzZSwgIjo6Q3JlYXRlVGltZXJRdWV1ZVRpbWVyIGZhaWxlZCB3aXRoIGVycm9yICVsdSIs
IDo6R2V0TGFzdEVycm9yKCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgLy8gVGhlIHRpbWVyIGNhbGxiYWNrIHdpbGwgaGFuZGxlIGRlc3Ryb3lpbmcgY29u
dGV4dC4KLSAgICBjb250ZXh0LnJlbGVhc2UoKS5sZWFrUmVmKCk7Ci19Ci0KLXZvaWQgV29ya1F1
ZXVlOjp1bnJlZ2lzdGVyV2FpdEFuZERlc3Ryb3lJdGVtU29vbihQYXNzUmVmUHRyPEhhbmRsZVdv
cmtJdGVtPiBpdGVtKQotewotICAgIC8vIFdlJ3JlIGdvaW5nIHRvIG1ha2UgYSBibG9ja2luZyBj
YWxsIHRvIDo6VW5yZWdpc3RlcldhaXRFeCBiZWZvcmUgY2xvc2luZyB0aGUgaGFuZGxlLiAoVGhl
Ci0gICAgLy8gYmxvY2tpbmcgdmVyc2lvbiBvZiA6OlVucmVnaXN0ZXJXYWl0RXggaXMgbXVjaCBz
aW1wbGVyIHRoYW4gdGhlIG5vbi1ibG9ja2luZyB2ZXJzaW9uLikgSWYgd2UKLSAgICAvLyBkbyB0
aGlzIG9uIHRoZSBjdXJyZW50IHRocmVhZCwgd2UnbGwgZGVhZGxvY2sgaWYgd2UncmUgY3VycmVu
dGx5IGluIGEgY2FsbGJhY2sgZnVuY3Rpb24gZm9yCi0gICAgLy8gdGhlIHdhaXQgd2UncmUgdW5y
ZWdpc3RlcmluZy4gU28gaW5zdGVhZCB3ZSBkbyBpdCBhc3luY2hyb25vdXNseSBvbiBzb21lIG90
aGVyIHdvcmtlciB0aHJlYWQuCi0KLSAgICA6OlF1ZXVlVXNlcldvcmtJdGVtKHVucmVnaXN0ZXJX
YWl0QW5kRGVzdHJveUl0ZW1DYWxsYmFjaywgaXRlbS5sZWFrUmVmKCksIFdUX0VYRUNVVEVERUZB
VUxUKTsKLX0KLQotRFdPUkQgV0lOQVBJIFdvcmtRdWV1ZTo6dW5yZWdpc3RlcldhaXRBbmREZXN0
cm95SXRlbUNhbGxiYWNrKHZvaWQqIGNvbnRleHQpCi17Ci0gICAgQVNTRVJUX0FSRyhjb250ZXh0
LCBjb250ZXh0KTsKLSAgICBSZWZQdHI8SGFuZGxlV29ya0l0ZW0+IGl0ZW0gPSBhZG9wdFJlZihz
dGF0aWNfY2FzdDxIYW5kbGVXb3JrSXRlbSo+KGNvbnRleHQpKTsKLQotICAgIC8vIE5vdyB0aGF0
IHdlIGtub3cgd2UncmUgbm90IGluIGEgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHRoZSB3YWl0IHdl
J3JlIHVucmVnaXN0ZXJpbmcsIHdlIGNhbgotICAgIC8vIG1ha2UgYSBibG9ja2luZyBjYWxsIHRv
IDo6VW5yZWdpc3RlcldhaXRFeC4KLSAgICBpZiAoITo6VW5yZWdpc3RlcldhaXRFeChpdGVtLT53
YWl0SGFuZGxlKCksIElOVkFMSURfSEFORExFX1ZBTFVFKSkgewotICAgICAgICBEV09SRCBlcnJv
ciA9IDo6R2V0TGFzdEVycm9yKCk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
IH0KLQotICAgIHJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZv
cm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCA3ZDA2
MTg0YzFiYjlkZGViNmE3NWVlZTIzZWM3NWM3Yjk3YzhhYmQ1Li5mOWIzMzYzMzJjNWQxM2Q3MGY0
NDZiYTg5MjcwMjg3MmYwYjViMjkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9y
bUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAtOCw3
ICs4LDYgQEAgTElTVChBUFBFTkQgV2ViS2l0Ml9MSU5LX0ZMQUdTCiAKIExJU1QoQVBQRU5EIFdl
YktpdDJfU09VUkNFUwogICAgIFBsYXRmb3JtL2VmbC9Nb2R1bGVFZmwuY3BwCi0gICAgUGxhdGZv
cm0vZWZsL1dvcmtRdWV1ZUVmbC5jcHAKICAgICBQbGF0Zm9ybS91bml4L1NoYXJlZE1lbW9yeVVu
aXguY3BwCiAKICAgICBQbGF0Zm9ybS9Db3JlSVBDL3VuaXgvQ29ubmVjdGlvblVuaXguY3BwCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpIGIvU291cmNlL1dlYktpdDIvVGFy
Z2V0LnByaQppbmRleCAyNWQ4OTRmN2VhODQyOWVjNjk3NWI2YzIxOTU2Mzk1ZTJjODViNzQ4Li5i
NWNkOTMwOWE2ZjUzYTQ0NGE3OGI3MGZlOWIyYzY1ZWU0YmJlMDA0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKQEAg
LTMwLDkgKzMwLDcgQEAgSEVBREVSUyArPSBcCiAgICAgUGxhdGZvcm0vQ29yZUlQQy9NZXNzYWdl
U2VuZGVyLmggXAogICAgIFBsYXRmb3JtL0xvZ2dpbmcuaCBcCiAgICAgUGxhdGZvcm0vTW9kdWxl
LmggXAotICAgIFBsYXRmb3JtL1BsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIuaCBcCiAgICAgUGxh
dGZvcm0vU2hhcmVkTWVtb3J5LmggXAotICAgIFBsYXRmb3JtL1dvcmtRdWV1ZS5oIFwKICAgICBQ
bHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94eS5oIFwKICAgICBQbHVnaW5Qcm9jZXNz
L1BsdWdpbkNyZWF0aW9uUGFyYW1ldGVycy5oIFwKICAgICBQbHVnaW5Qcm9jZXNzL1BsdWdpblBy
b2Nlc3MuaCBcCkBAIC00MTAsNyArNDA4LDYgQEAgU09VUkNFUyArPSBcCiAgICAgUGxhdGZvcm0v
Q29yZUlQQy9EYXRhUmVmZXJlbmNlLmNwcCBcCiAgICAgUGxhdGZvcm0vTG9nZ2luZy5jcHAgXAog
ICAgIFBsYXRmb3JtL01vZHVsZS5jcHAgXAotICAgIFBsYXRmb3JtL1dvcmtRdWV1ZS5jcHAgXAog
ICAgIFBsYXRmb3JtL3F0L0xvZ2dpbmdRdC5jcHAgXAogICAgIFBsYXRmb3JtL3F0L01vZHVsZVF0
LmNwcCBcCiAgICAgUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHkuY3BwIFwKQEAg
LTgyMSwxNCArODE4LDEyIEBAIG1hYzogewogICAgIFNPVVJDRVMgKz0gXAogICAgICAgICBQbGF0
Zm9ybS9Db3JlSVBDL21hYy9Db25uZWN0aW9uTWFjLmNwcCBcCiAgICAgICAgIFBsYXRmb3JtL21h
Yy9NYWNoVXRpbGl0aWVzLmNwcCBcCi0gICAgICAgIFBsYXRmb3JtL21hYy9Xb3JrUXVldWVNYWMu
Y3BwIFwKICAgICAgICAgUGxhdGZvcm0vbWFjL1NoYXJlZE1lbW9yeU1hYy5jcHAKIAogfSBlbHNl
IHsKICAgICBTT1VSQ0VTICs9IFwKICAgICAgICAgUGxhdGZvcm0vQ29yZUlQQy91bml4L0F0dGFj
aG1lbnRVbml4LmNwcCBcCiAgICAgICAgIFBsYXRmb3JtL0NvcmVJUEMvdW5peC9Db25uZWN0aW9u
VW5peC5jcHAgXAotICAgICAgICBQbGF0Zm9ybS9xdC9Xb3JrUXVldWVRdC5jcHAgXAogICAgICAg
ICBQbGF0Zm9ybS91bml4L1NoYXJlZE1lbW9yeVVuaXguY3BwCiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9Qcm9jZXNzTGF1bmNoZXIuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL1Byb2Nlc3NMYXVuY2hlci5jcHAKaW5kZXgg
YmEyMmRkYTJkYTdiYzViNDhkMzM1ODY5YWZhMzgwYzdiYjM2ODI5ZS4uNjdkZWY3NjgyMWZhMGI1
MGRhZmU5YjljZTUxNjhjNWVmZDk4MDMzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0xhdW5jaGVyL1Byb2Nlc3NMYXVuY2hlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0xhdW5jaGVyL1Byb2Nlc3NMYXVuY2hlci5jcHAKQEAgLTI2LDggKzI2LDggQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQcm9jZXNzTGF1bmNoZXIuaCIKIAotI2lu
Y2x1ZGUgIldvcmtRdWV1ZS5oIgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNs
dWRlIDx3dGYvV29ya1F1ZXVlLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvUHJvY2Vzc0xhdW5jaGVyLmggYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvUHJvY2Vzc0xhdW5jaGVyLmgKaW5kZXgg
YmMxZjg2N2YzYzI5MTU1MjM2MzBjNjc2MTFmMDVjZTk3M2RlZDUzYi4uZDYxYmQ3OWRiZGIwYzE4
NzYyZDFmMjcwMDE2N2NhZTNhZWQ4ZjkzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0xhdW5jaGVyL1Byb2Nlc3NMYXVuY2hlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9MYXVuY2hlci9Qcm9jZXNzTGF1bmNoZXIuaApAQCAtMjcsNyArMjcsNyBAQAogI2Rl
ZmluZSBXZWJQcm9jZXNzTGF1bmNoZXJfaAogCiAjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgotI2lu
Y2x1ZGUgIlBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIuaCIKKyNpbmNsdWRlIDx3dGYvUGxhdGZv
cm1Qcm9jZXNzSWRlbnRpZmllci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRl
IDx3dGYvVGhyZWFkaW5nLmg+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9MYXVuY2hlci9UaHJlYWRMYXVuY2hlci5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xh
dW5jaGVyL1RocmVhZExhdW5jaGVyLmgKaW5kZXggZjNhNTMxMmEyYzRmNzdlYmYyMGZkMmM0ODk2
NmYzNWFjYjBhZDhkMS4uOWM2YjEyNDk2ZjBlMzU2YmVlMmFiNWQ2ODU5NTNlNmQxNmFhZDJiYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL1RocmVhZExhdW5j
aGVyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL1RocmVhZExhdW5j
aGVyLmgKQEAgLTI3LDcgKzI3LDcgQEAKICNkZWZpbmUgVGhyZWFkTGF1bmNoZXJfaAogCiAjaW5j
bHVkZSAiQ29ubmVjdGlvbi5oIgotI2luY2x1ZGUgIlBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIu
aCIKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oPgogI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAppbmRleCA1N2FiODZjMjQyOTNiMWFkMjIyMjQxMmVi
NThlOWE5ZjU2YzhjNTQ4Li4wZTk1YmU1NGI3YTFhZWVhNTAwNDNiY2Y3NTQzY2YxYjE3MzYyNTkx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCkBAIC00MCw3ICs0MCw2
IEBACiAjZW5kaWYKICNpbmNsdWRlICJMYXllclRyZWVDb250ZXh0LmgiCiAjaW5jbHVkZSAiTm90
aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuaCIKLSNpbmNsdWRlICJQbGF0
Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiU2FuZGJveEV4dGVuc2lvbi5oIgog
I2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgogI2luY2x1ZGUgIldLQmFzZS5oIgpAQCAtNzMs
NiArNzIsNyBAQAogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093
blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1BsYXRm
b3JtUHJvY2Vzc0lkZW50aWZpZXIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oCmluZGV4IDhlNzY4YmZiNmE4ODlk
OWFkNmIzNjAwMDc2OTRiMjU2NzZjZWE2ODYuLjY0MTlhN2EzNTM4YzYxZmU4ZDQ1NzljMzA2ZDIz
NGI2NTVkZGMxMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9j
ZXNzUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5
LmgKQEAgLTI2LDcgKzI2LDYgQEAKICNpZm5kZWYgV2ViUHJvY2Vzc1Byb3h5X2gKICNkZWZpbmUg
V2ViUHJvY2Vzc1Byb3h5X2gKIAotI2luY2x1ZGUgIlBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIu
aCIKICNpbmNsdWRlICJQbHVnaW5JbmZvU3RvcmUuaCIKICNpbmNsdWRlICJQcm9jZXNzTGF1bmNo
ZXIuaCIKICNpbmNsdWRlICJQcm9jZXNzTW9kZWwuaCIKQEAgLTM5LDYgKzM4LDcgQEAKICNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmll
ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCA2MDc3ZjZkM2UzOGE0NTEwMTIzOGI1NDIzNzhjYzI4N2UwNGRiYWYwLi5lYWQ0NzhhNjg0
MDg0NGYyYWVhZDNmNjY0MDNmYWEyMTkxY2MwYjAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC00NzYsNyArNDc2LDYgQEAKIAkJ
QjYzNDAzRjkxNDkxMEQ1NzAwMTA3MEI1IC8qIEFQSU9iamVjdC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNjM0MDNGODE0OTEwRDU3MDAxMDcwQjUg
LyogQVBJT2JqZWN0LmNwcCAqLzsgfTsKIAkJQjg3OEI2MTUxMzM0MjhEQzAwNjg4OEU5IC8qIENv
cnJlY3Rpb25QYW5lbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQjg3OEI2MTMxMzM0MjhEQzAwNjg4OEU5IC8qIENvcnJlY3Rpb25QYW5lbC5oICovOyB9
OwogCQlCODc4QjYxNjEzMzQyOERDMDA2ODg4RTkgLyogQ29ycmVjdGlvblBhbmVsLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjg3OEI2MTQxMzM0MjhE
QzAwNjg4OEU5IC8qIENvcnJlY3Rpb25QYW5lbC5tbSAqLzsgfTsKLQkJQkMwMDkyRjgxMTU4MzdB
MzAwRTBBRTJBIC8qIFdvcmtRdWV1ZU1hYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCQzAwOTJGNjExNTgzN0EzMDBFMEFFMkEgLyogV29ya1F1ZXVl
TWFjLmNwcCAqLzsgfTsKIAkJQkMwMzJENzUxMEY0Mzc4RDAwNThDMTVBIC8qIFdlYkNocm9tZUNs
aWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMw
MzJENjAxMEY0Mzc4RDAwNThDMTVBIC8qIFdlYkNocm9tZUNsaWVudC5oICovOyB9OwogCQlCQzAz
MkQ3NzEwRjQzNzhEMDA1OEMxNUEgLyogV2ViQ29udGV4dE1lbnVDbGllbnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMDMyRDYyMTBGNDM3OEQwMDU4
QzE1QSAvKiBXZWJDb250ZXh0TWVudUNsaWVudC5oICovOyB9OwogCQlCQzAzMkQ3QjEwRjQzNzhE
MDA1OEMxNUEgLyogV2ViRHJhZ0NsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQkMwMzJENjYxMEY0Mzc4RDAwNThDMTVBIC8qIFdlYkRyYWdDbGll
bnQuaCAqLzsgfTsKQEAgLTU2OSw4ICs1NjgsNiBAQAogCQlCQzJEMDIxNzEyQUM0MUNCMDBFNzMy
QTMgLyogU2FtZURvY3VtZW50TmF2aWdhdGlvblR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMkQwMjE2MTJBQzQxQ0IwMEU3MzJBMyAvKiBTYW1l
RG9jdW1lbnROYXZpZ2F0aW9uVHlwZS5oICovOyB9OwogCQlCQzJEMDIxOTEyQUM0MjZDMDBFNzMy
QTMgLyogV0tQYWdlTG9hZFR5cGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCQzJEMDIxODEyQUM0MjZDMDBFNzMyQTMgLyogV0tQYWdlTG9hZFR5cGVz
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkMy
REZCQTMxMkE3NjFBNTAwRTczMkEzIC8qIFdlYlByZWZlcmVuY2VzQ0YuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMyREZCQTIxMkE3NjFBNTAwRTcz
MkEzIC8qIFdlYlByZWZlcmVuY2VzQ0YuY3BwICovOyB9OwotCQlCQzJFNkU4RDExNDE5NzE1MDBB
NjNCMUUgLyogV29ya1F1ZXVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEJDMkU2RTdEMTE0MTk3MEMwMEE2M0IxRSAvKiBXb3JrUXVldWUuY3BwICov
OyB9OwotCQlCQzJFNkU4RTExNDE5NzE1MDBBNjNCMUUgLyogV29ya1F1ZXVlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzJFNkU3RTExNDE5NzBDMDBB
NjNCMUUgLyogV29ya1F1ZXVlLmggKi87IH07CiAJCUJDMzA2NUM0MTI1OTJGODkwMEU3MTI3OCAv
KiBXZWJQcm9jZXNzTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQkMzMDY1QzMxMjU5MkY4OTAwRTcxMjc4IC8qIFdlYlByb2Nlc3NNYWMubW0gKi87
IH07CiAJCUJDMzA2NUZBMTI1OTM0NEUwMEU3MTI3OCAvKiBDYWNoZU1vZGVsLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzMwNjVGOTEyNTkzNDRFMDBF
NzEyNzggLyogQ2FjaGVNb2RlbC5oICovOyB9OwogCQlCQzMwNjZCRTEyNUE0NDIxMDBFNzEyNzgg
LyogV2ViUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzMwNjZCQzEyNUE0NDIxMDBFNzEyNzggLyogV2ViUHJv
Y2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CkBAIC0xNTE0LDcgKzE1MTEsNiBAQAogCQlC
NjM0MDNGODE0OTEwRDU3MDAxMDcwQjUgLyogQVBJT2JqZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFQSU9iamVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUI4NzhCNjEzMTMzNDI4REMwMDY4ODhFOSAvKiBDb3JyZWN0aW9uUGFuZWwuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29ycmVjdGlvblBhbmVsLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI4NzhCNjE0MTMzNDI4REMwMDY4ODhFOSAvKiBDb3Jy
ZWN0aW9uUGFuZWwubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBD
b3JyZWN0aW9uUGFuZWwubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUJDMDA5MkY2
MTE1ODM3QTMwMEUwQUUyQSAvKiBXb3JrUXVldWVNYWMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gV29ya1F1ZXVlTWFjLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQkMwMzJENjAxMEY0Mzc4RDAwNThDMTVBIC8qIFdlYkNocm9tZUNsaWVudC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDaHJvbWVDbGllbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMwMzJENjIxMEY0Mzc4RDAwNThDMTVBIC8qIFdlYkNv
bnRleHRNZW51Q2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNv
bnRleHRNZW51Q2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMDMyRDY2
MTBGNDM3OEQwMDU4QzE1QSAvKiBXZWJEcmFnQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdlYkRyYWdDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTE2MTMsOCArMTYwOSw2IEBACiAJCUJDMkQwMjE2MTJBQzQxQ0IwMEU3MzJBMyAvKiBTYW1l
RG9jdW1lbnROYXZpZ2F0aW9uVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTYW1lRG9jdW1lbnROYXZpZ2F0aW9uVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlCQzJEMDIxODEyQUM0MjZDMDBFNzMyQTMgLyogV0tQYWdlTG9hZFR5cGVzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLUGFnZUxvYWRUeXBlcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlCQzJERkJBMjEyQTc2MUE1MDBFNzMyQTMgLyogV2ViUHJlZmVy
ZW5jZXNDRi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJQcmVm
ZXJlbmNlc0NGLmNwcDsgcGF0aCA9IGNmL1dlYlByZWZlcmVuY2VzQ0YuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlCQzJFNkU3RDExNDE5NzBDMDBBNjNCMUUgLyogV29ya1F1ZXVl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdvcmtRdWV1ZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUJDMkU2RTdFMTE0MTk3MEMwMEE2M0IxRSAv
KiBXb3JrUXVldWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV29ya1F1ZXVl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMzA2NUMzMTI1OTJGODkwMEU3MTI3
OCAvKiBXZWJQcm9jZXNzTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gV2ViUHJvY2Vzc01hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMz
MDY1RjkxMjU5MzQ0RTAwRTcxMjc4IC8qIENhY2hlTW9kZWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQ2FjaGVNb2RlbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCQzMwNjZCOTEyNUE0MzYzMDBFNzEyNzggLyogV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbiAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQ7IHBhdGggPSBXZWJQcm9jZXNzLm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMjI5OCw3ICsyMjkyLDYgQEAKIAkJCQkxQTI0QkYzOTEyMDg5NkE2
MDBGQkIwNTkgLyogU2hhcmVkTWVtb3J5TWFjLmNwcCAqLywKIAkJCQkyOTZCRDg1QjE1MDE5QkMz
MDA3MUY0MjQgLyogU3RyaW5nVXRpbGl0aWVzLmggKi8sCiAJCQkJMjk2QkQ4NUMxNTAxOUJDMzAw
NzFGNDI0IC8qIFN0cmluZ1V0aWxpdGllcy5tbSAqLywKLQkJCQlCQzAwOTJGNjExNTgzN0EzMDBF
MEFFMkEgLyogV29ya1F1ZXVlTWFjLmNwcCAqLywKIAkJCSk7CiAJCQlwYXRoID0gbWFjOwogCQkJ
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTMzMzYsOCArMzMyOSw2IEBACiAJCQkJQzBFM0FB
NDQxMjA5RTJCQTAwQTQ5RDAxIC8qIE1vZHVsZS5oICovLAogCQkJCUJDODc4MEZCMTE2MUMyQjgw
MENDMjc2OCAvKiBQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmggKi8sCiAJCQkJMUEyNEJFRDMx
MjA4OTREMTAwRkJCMDU5IC8qIFNoYXJlZE1lbW9yeS5oICovLAotCQkJCUJDMkU2RTdEMTE0MTk3
MEMwMEE2M0IxRSAvKiBXb3JrUXVldWUuY3BwICovLAotCQkJCUJDMkU2RTdFMTE0MTk3MEMwMEE2
M0IxRSAvKiBXb3JrUXVldWUuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gUGxhdGZvcm07CiAJCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtNDE4OSw3ICs0MTgwLDYgQEAKIAkJCQlCQzg2OTlC
NTExNkFBREFBMDAyQTkyNUIgLyogV0tWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzg2OTlC
NzExNkFBREFBMDAyQTkyNUIgLyogV0tWaWV3SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJGQTYxNzlGMTJGMEI5OUQwMDMzRTBDQSAvKiBXS1ZpZXdQcml2YXRlLmggaW4gSGVhZGVycyAq
LywKLQkJCQlCQzJFNkU4RTExNDE5NzE1MDBBNjNCMUUgLyogV29ya1F1ZXVlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlFMTdCRjk5NjE0RDBBNzNFMDBBNUEwNjkgLyogTmV0c2NhcGVTYW5kYm94RnVu
Y3Rpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0UwOTM3ODE0RkIxMjhDMDAxMTM4RDkgLyog
TGF5ZXJIb3N0aW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjk2QkQ4NUQxNTAxOUJD
MzAwNzFGNDI0IC8qIFN0cmluZ1V0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCkBAIC00OTM2LDgg
KzQ5MjYsNiBAQAogCQkJCUJDNDA3NjJDMTI0RkYwNDAwMDY4RjIwQSAvKiBXS1VSTFJlc3BvbnNl
TlMubW0gaW4gU291cmNlcyAqLywKIAkJCQlGNjExM0UyODEyNkNFMTlCMDA1N0QwQTcgLyogV0tV
c2VyQ29udGVudFVSTFBhdHRlcm4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM4Njk5QjYxMTZB
QURBQTAwMkE5MjVCIC8qIFdLVmlldy5tbSBpbiBTb3VyY2VzICovLAotCQkJCUJDMkU2RThEMTE0
MTk3MTUwMEE2M0IxRSAvKiBXb3JrUXVldWUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQkMwMDky
RjgxMTU4MzdBMzAwRTBBRTJBIC8qIFdvcmtRdWV1ZU1hYy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlFMTdCRjk5ODE0RDBBQTgzMDBBNUEwNjkgLyogTmV0c2NhcGVTYW5kYm94RnVuY3Rpb25zLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJQkNFMDkzNzcxNEZCMTI4QzAwMTEzOEQ5IC8qIExheWVySG9z
dGluZ0NvbnRleHQubW0gaW4gU291cmNlcyAqLywKIAkJCQkyOTZCRDg1RTE1MDE5QkMzMDA3MUY0
MjQgLyogU3RyaW5nVXRpbGl0aWVzLm1tIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi93aW4vV2ViS2l0Mi52Y3Byb2ogYi9Tb3VyY2UvV2ViS2l0Mi93aW4vV2ViS2l0
Mi52Y3Byb2oKaW5kZXggMGEzOGM0YjgyMmE4MjQ3OThmZjhjNGVlMmYzY2QyNDg5YjdiNmQwZi4u
MzcyNTJiNjE0MzgyNzY5Y2YyYmFlNmZhNWEzMDM2ZDMzYTAzMjVlNCAxMDA3NTUKLS0tIGEvU291
cmNlL1dlYktpdDIvd2luL1dlYktpdDIudmNwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQyL3dpbi9X
ZWJLaXQyLnZjcHJvagpAQCAtMzkzNCwxNCArMzkzNCw2IEBACiAJCQkJUmVsYXRpdmVQYXRoPSIu
LlxQbGF0Zm9ybVxTaGFyZWRNZW1vcnkuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+Ci0JCQk8RmlsZQot
CQkJCVJlbGF0aXZlUGF0aD0iLi5cUGxhdGZvcm1cV29ya1F1ZXVlLmNwcCIKLQkJCQk+Ci0JCQk8
L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cUGxhdGZvcm1cV29ya1F1ZXVl
LmgiCi0JCQkJPgotCQkJPC9GaWxlPgogCQkJPEZpbHRlcgogCQkJCU5hbWU9ImNnIgogCQkJCT4K
QEAgLTM5ODEsMTAgKzM5NzMsNiBAQAogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFBsYXRmb3JtXHdp
blxTaGFyZWRNZW1vcnlXaW4uY3BwIgogCQkJCQk+CiAJCQkJPC9GaWxlPgotCQkJCTxGaWxlCi0J
CQkJCVJlbGF0aXZlUGF0aD0iLi5cUGxhdGZvcm1cd2luXFdvcmtRdWV1ZVdpbi5jcHAiCi0JCQkJ
CT4KLQkJCQk8L0ZpbGU+CiAJCQk8L0ZpbHRlcj4KIAkJCTxGaWx0ZXIKIAkJCQlOYW1lPSJDb3Jl
SVBDIgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151643</attachid>
            <date>2012-07-11 01:32:41 -0700</date>
            <delta_ts>2012-07-25 18:25:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90780-20120711173208.patch</filename>
            <type>text/plain</type>
            <size>134965</size>
            <attacher name="Kwonjin Jeong">gram</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyMjk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
MWNiZWZhMzY5ZGIyNDBjNWEyZDk4ZGQwZDYxYWMyZjBjMTUyMGZhLi5jZjgzN2EwY2M5OTMzYTE3
NzQwZmQyMTAwZGNmMDNkYzU3Mjc0NjkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxOSBAQAorMjAxMi0wNy0xMSAgS3dvbmppbiBKZW9uZyAgPGdyYW1AY29tcGFueTEwMC5u
ZXQ+CisKKyAgICAgICAgTW92ZSBXb3JrUXVldWUgdG8gV1RGCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDc4MAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEN1cnJlbnRseSwgV29ya1F1ZXVlIGlzIGluIFdl
YktpdDIuIEJ5IG1vdmluZyBXb3JrUXVldWUgYW5kCisgICAgICAgIFBsYXRmb3JtUHJvY2Vzc0lk
ZW50aWZpZXIgdG8gV1RGLCBXZWJDb3JlIGNvZGUgY2FuIHVzZSBpdC4KKworICAgICAgICBUaGlz
IHBhdGNoIGlzIHJlcXVpcmVkIGZvciBwYXJhbGxlbCBpbWFnZSBkZWNvZGVycyBiZWNhdXNlCisg
ICAgICAgIFdvcmtRdWV1ZSBpcyB1c2VkIHRvIG1ha2UgaW1hZ2UgZGVjb2Rpbmcgb2ZmIHRoZSBt
YWluIHRocmVhZC4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLm9yZGVyOgorICAgICAgICAq
IEphdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5kZWY6
CisKIDIwMTItMDctMTAgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSRUdSRVNTSU9OKHIxMjIxNjYpOiBJdCBtYWRlIDE3MCB0ZXN0cyBjcmFzaCBvbiAzMiBiaXQg
cGxhdGZvcm1zCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYv
Q2hhbmdlTG9nCmluZGV4IDA2NmY5NzVkOWEyYzE1ODJkNmMzZDk4Y2NkZWUwYmIzNzk2NWU3YTAu
Ljc4Mjc4NDQ0OGVkZGE1M2Q5ZmQyMjZlN2RjZmU0ZDAyMmQwY2M2NDIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTMwIEBACisyMDEyLTA3LTExICBLd29uamluIEplb25nICA8Z3JhbUBjb21wYW55MTAwLm5ldD4K
KworICAgICAgICBNb3ZlIFdvcmtRdWV1ZSB0byBXVEYKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwNzgwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQ3VycmVudGx5LCBXb3JrUXVldWUgaXMgaW4gV2ViS2l0
Mi4gQnkgbW92aW5nIFdvcmtRdWV1ZSBhbmQKKyAgICAgICAgUGxhdGZvcm1Qcm9jZXNzSWRlbnRp
ZmllciB0byBXVEYsIFdlYkNvcmUgY29kZSBjYW4gdXNlIGl0LgorCisgICAgICAgIFRoaXMgcGF0
Y2ggaXMgcmVxdWlyZWQgZm9yIHBhcmFsbGVsIGltYWdlIGRlY29kZXJzIGJlY2F1c2UKKyAgICAg
ICAgV29ya1F1ZXVlIGlzIHVzZWQgdG8gbWFrZSBpbWFnZSBkZWNvZGluZyBvZmYgdGhlIG1haW4g
dGhyZWFkLgorCisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBXVEYu
cHJvOgorICAgICAgICAqIFdURi52Y3Byb2ovV1RGLnZjcHJvajoKKyAgICAgICAgKiBXVEYueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvQ01ha2VMaXN0cy50eHQ6Cisg
ICAgICAgICogd3RmL1BsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybVBy
b2Nlc3NJZGVudGlmaWVyLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Q
bGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmguCisgICAgICAgIChXVEYpOgorICAgICAgICAqIHd0
Zi9Xb3JrUXVldWUuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvUGxhdGZvcm0vV29y
a1F1ZXVlLmNwcC4KKyAgICAgICAgKFdURik6CisgICAgICAgIChXVEY6OldvcmtRdWV1ZTo6V29y
a1F1ZXVlKToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjp+V29ya1F1ZXVlKToKKyAgICAgICAg
KFdURjo6V29ya1F1ZXVlOjppbnZhbGlkYXRlKToKKyAgICAgICAgKiB3dGYvV29ya1F1ZXVlLmg6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrUXVldWUuaC4KKyAgICAg
ICAgKFdURik6CisgICAgICAgIChXb3JrUXVldWUpOgorICAgICAgICAoV29ya0l0ZW1XaW4pOgor
ICAgICAgICAoV1RGOjpXb3JrUXVldWU6OldvcmtJdGVtV2luOjpmdW5jdGlvbik6CisgICAgICAg
IChXVEY6OldvcmtRdWV1ZTo6V29ya0l0ZW1XaW46OnF1ZXVlKToKKyAgICAgICAgKEhhbmRsZVdv
cmtJdGVtKToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpIYW5kbGVXb3JrSXRlbTo6c2V0V2Fp
dEhhbmRsZSk6CisgICAgICAgIChXVEY6OldvcmtRdWV1ZTo6SGFuZGxlV29ya0l0ZW06OndhaXRI
YW5kbGUpOgorICAgICAgICAqIHd0Zi9lZmwvV29ya1F1ZXVlRWZsLmNwcDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2VmbC9Xb3JrUXVldWVFZmwuY3BwLgorICAgICAgICAo
VGltZXJXb3JrSXRlbSk6CisgICAgICAgIChUaW1lcldvcmtJdGVtOjpUaW1lcldvcmtJdGVtKToK
KyAgICAgICAgKFRpbWVyV29ya0l0ZW06On5UaW1lcldvcmtJdGVtKToKKyAgICAgICAgKFRpbWVy
V29ya0l0ZW06OmZ1bmN0aW9uKToKKyAgICAgICAgKFRpbWVyV29ya0l0ZW06OnF1ZXVlKToKKyAg
ICAgICAgKFRpbWVyV29ya0l0ZW06OnRpbWVySUQpOgorICAgICAgICAoV29ya1F1ZXVlOjpwbGF0
Zm9ybUluaXRpYWxpemUpOgorICAgICAgICAoV29ya1F1ZXVlOjpwbGF0Zm9ybUludmFsaWRhdGUp
OgorICAgICAgICAoV29ya1F1ZXVlOjpwZXJmb3JtV29yayk6CisgICAgICAgIChXb3JrUXVldWU6
OnBlcmZvcm1GaWxlRGVzY3JpcHRvcldvcmspOgorICAgICAgICAoV29ya1F1ZXVlOjpzZW5kTWVz
c2FnZVRvVGhyZWFkKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6d29ya1F1ZXVlVGhyZWFkKToKKyAg
ICAgICAgKFdvcmtRdWV1ZTo6cmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIpOgorICAgICAgICAo
V29ya1F1ZXVlOjp1bnJlZ2lzdGVyU29ja2V0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdvcmtR
dWV1ZTo6ZGlzcGF0Y2gpOgorICAgICAgICAoV29ya1F1ZXVlOjp0aW1lckZpcmVkKToKKyAgICAg
ICAgKFdvcmtRdWV1ZTo6ZGlzcGF0Y2hBZnRlckRlbGF5KToKKyAgICAgICAgKiB3dGYvZ3RrL1dv
cmtRdWV1ZUd0ay5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9ndGsv
V29ya1F1ZXVlR3RrLmNwcC4KKyAgICAgICAgKFdvcmtRdWV1ZTo6RXZlbnRTb3VyY2UpOgorICAg
ICAgICAoV29ya1F1ZXVlOjpFdmVudFNvdXJjZTo6RXZlbnRTb3VyY2UpOgorICAgICAgICAoV29y
a1F1ZXVlOjpFdmVudFNvdXJjZTo6Y2FuY2VsKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6RXZlbnRT
b3VyY2U6OmV4ZWN1dGVFdmVudFNvdXJjZSk6CisgICAgICAgIChXb3JrUXVldWU6OkV2ZW50U291
cmNlOjpwZXJmb3JtV29ya09uY2UpOgorICAgICAgICAoV29ya1F1ZXVlOjpFdmVudFNvdXJjZTo6
cGVyZm9ybVdvcmspOgorICAgICAgICAoV29ya1F1ZXVlOjpFdmVudFNvdXJjZTo6cGVyZm9ybVdv
cmtPblRlcm1pbmF0aW9uKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OmRlbGV0
ZUV2ZW50U291cmNlKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXplKToK
KyAgICAgICAgKFdvcmtRdWV1ZTo6cGxhdGZvcm1JbnZhbGlkYXRlKToKKyAgICAgICAgKFdvcmtR
dWV1ZTo6c3RhcnRXb3JrUXVldWVUaHJlYWQpOgorICAgICAgICAoV29ya1F1ZXVlOjp3b3JrUXVl
dWVUaHJlYWRCb2R5KToKKyAgICAgICAgKFdvcmtRdWV1ZTo6cmVnaXN0ZXJFdmVudFNvdXJjZUhh
bmRsZXIpOgorICAgICAgICAoV29ya1F1ZXVlOjp1bnJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVy
KToKKyAgICAgICAgKFdvcmtRdWV1ZTo6ZGlzcGF0Y2hPblNvdXJjZSk6CisgICAgICAgIChXb3Jr
UXVldWU6OmRpc3BhdGNoKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6ZGlzcGF0Y2hBZnRlckRlbGF5
KToKKyAgICAgICAgKFdvcmtRdWV1ZTo6ZGlzcGF0Y2hPblRlcm1pbmF0aW9uKToKKyAgICAgICAg
KiB3dGYvbWFjL1dvcmtRdWV1ZU1hYy5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybS9tYWMvV29ya1F1ZXVlTWFjLmNwcC4KKyAgICAgICAgKFdURik6CisgICAgICAgIChX
VEY6OldvcmtRdWV1ZTo6ZXhlY3V0ZUZ1bmN0aW9uKToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVl
OjpkaXNwYXRjaCk6CisgICAgICAgIChXVEY6OldvcmtRdWV1ZTo6ZGlzcGF0Y2hBZnRlckRlbGF5
KToKKyAgICAgICAgKFdvcmtRdWV1ZTo6RXZlbnRTb3VyY2UpOgorICAgICAgICAoV1RGOjpXb3Jr
UXVldWU6OkV2ZW50U291cmNlOjpFdmVudFNvdXJjZSk6CisgICAgICAgIChXVEY6OldvcmtRdWV1
ZTo6RXZlbnRTb3VyY2U6OmRpc3BhdGNoU291cmNlKToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVl
OjpFdmVudFNvdXJjZTo6ZXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpF
dmVudFNvdXJjZTo6Y2FuY2VsSGFuZGxlcik6CisgICAgICAgIChXVEY6OldvcmtRdWV1ZTo6RXZl
bnRTb3VyY2U6OmZpbmFsaXplSGFuZGxlcik6CisgICAgICAgIChXVEY6OldvcmtRdWV1ZTo6cmVn
aXN0ZXJNYWNoUG9ydEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXVEY6OldvcmtRdWV1ZTo6dW5y
ZWdpc3Rlck1hY2hQb3J0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpw
bGF0Zm9ybUluaXRpYWxpemUpOgorICAgICAgICAoV1RGOjpXb3JrUXVldWU6OnBsYXRmb3JtSW52
YWxpZGF0ZSk6CisgICAgICAgICogd3RmL3F0L1dvcmtRdWV1ZVF0LmNwcDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3F0L1dvcmtRdWV1ZVF0LmNwcC4KKyAgICAgICAgKFdU
Rik6CisgICAgICAgIChXb3JrUXVldWU6OldvcmtJdGVtUXQpOgorICAgICAgICAoV1RGOjpXb3Jr
UXVldWU6OldvcmtJdGVtUXQ6OldvcmtJdGVtUXQpOgorICAgICAgICAoV1RGOjpXb3JrUXVldWU6
OldvcmtJdGVtUXQ6On5Xb3JrSXRlbVF0KToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpXb3Jr
SXRlbVF0OjpleGVjdXRlKToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpXb3JrSXRlbVF0Ojpl
eGVjdXRlQW5kRGVsZXRlKToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpXb3JrSXRlbVF0Ojp0
aW1lckV2ZW50KToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpyZWdpc3RlclNvY2tldEV2ZW50
SGFuZGxlcik6CisgICAgICAgIChXVEY6OldvcmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXplKToK
KyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpwbGF0Zm9ybUludmFsaWRhdGUpOgorICAgICAgICAo
V1RGOjpXb3JrUXVldWU6OmRpc3BhdGNoKToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpkaXNw
YXRjaEFmdGVyRGVsYXkpOgorICAgICAgICAoV1RGOjpXb3JrUXVldWU6OmRpc3BhdGNoT25UZXJt
aW5hdGlvbik6CisgICAgICAgICogd3RmL3dpbi9Xb3JrUXVldWVXaW4uY3BwOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYktpdDIvUGxhdGZvcm0vd2luL1dvcmtRdWV1ZVdpbi5jcHAuCisgICAgICAg
IChXVEYpOgorICAgICAgICAoV1RGOjpXb3JrUXVldWU6OldvcmtJdGVtV2luOjpXb3JrSXRlbVdp
bik6CisgICAgICAgIChXVEY6OldvcmtRdWV1ZTo6V29ya0l0ZW1XaW46OmNyZWF0ZSk6CisgICAg
ICAgIChXVEY6OldvcmtRdWV1ZTo6V29ya0l0ZW1XaW46On5Xb3JrSXRlbVdpbik6CisgICAgICAg
IChXVEY6OldvcmtRdWV1ZTo6SGFuZGxlV29ya0l0ZW06OkhhbmRsZVdvcmtJdGVtKToKKyAgICAg
ICAgKFdURjo6V29ya1F1ZXVlOjpIYW5kbGVXb3JrSXRlbTo6Y3JlYXRlQnlBZG9wdGluZ0hhbmRs
ZSk6CisgICAgICAgIChXVEY6OldvcmtRdWV1ZTo6SGFuZGxlV29ya0l0ZW06On5IYW5kbGVXb3Jr
SXRlbSk6CisgICAgICAgIChXVEY6OldvcmtRdWV1ZTo6aGFuZGxlQ2FsbGJhY2spOgorICAgICAg
ICAoV1RGOjpXb3JrUXVldWU6OnJlZ2lzdGVySGFuZGxlKToKKyAgICAgICAgKFdURjo6V29ya1F1
ZXVlOjp1bnJlZ2lzdGVyQW5kQ2xvc2VIYW5kbGUpOgorICAgICAgICAoV1RGOjpXb3JrUXVldWU6
OndvcmtUaHJlYWRDYWxsYmFjayk6CisgICAgICAgIChXVEY6OldvcmtRdWV1ZTo6cGVyZm9ybVdv
cmtPblJlZ2lzdGVyZWRXb3JrVGhyZWFkKToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpwbGF0
Zm9ybUluaXRpYWxpemUpOgorICAgICAgICAoV1RGOjpXb3JrUXVldWU6OnRyeVJlZ2lzdGVyQXNX
b3JrVGhyZWFkKToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjp1bnJlZ2lzdGVyQXNXb3JrVGhy
ZWFkKToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpwbGF0Zm9ybUludmFsaWRhdGUpOgorICAg
ICAgICAoV1RGOjpXb3JrUXVldWU6OmRpc3BhdGNoKToKKyAgICAgICAgKFdURjo6VGltZXJDb250
ZXh0OjpjcmVhdGUpOgorICAgICAgICAoVGltZXJDb250ZXh0KToKKyAgICAgICAgKFdURjo6VGlt
ZXJDb250ZXh0OjpUaW1lckNvbnRleHQpOgorICAgICAgICAoV1RGOjpXb3JrUXVldWU6OnRpbWVy
Q2FsbGJhY2spOgorICAgICAgICAoV1RGOjpXb3JrUXVldWU6OmRpc3BhdGNoQWZ0ZXJEZWxheSk6
CisgICAgICAgIChXVEY6OldvcmtRdWV1ZTo6dW5yZWdpc3RlcldhaXRBbmREZXN0cm95SXRlbVNv
b24pOgorICAgICAgICAoV1RGOjpXb3JrUXVldWU6OnVucmVnaXN0ZXJXYWl0QW5kRGVzdHJveUl0
ZW1DYWxsYmFjayk6CisKIDIwMTItMDctMTAgIEpvY2VseW4gVHVyY290dGUgIDxqb2NlbHluLnR1
cmNvdHRlQG5va2lhLmNvbT4KIAogICAgICAgICBSZS1lbmFibGUgX19kZWNsc3BlYyhkbHtpbXBv
cnQsZXhwb3J0fSkgZm9yIE1pbkdXIHdoZW4gdXNpbmcgRVhQT1JUX01BQ1JPUwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmlu
ZGV4IGY4NzEyZTJiOTI2MTM2ZWE3ZDY2MjliMDNjOTlkMmNiMmJkMmY4OTkuLjQzMmM2NTNhNzc4
ZjQwM2JjYzllZGVlZDc3MTJjZmU2YWZlMmJjZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMiBA
QAorMjAxMi0wNy0xMSAgS3dvbmppbiBKZW9uZyAgPGdyYW1AY29tcGFueTEwMC5uZXQ+CisKKyAg
ICAgICAgTW92ZSBXb3JrUXVldWUgdG8gV1RGCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05MDc4MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEN1cnJlbnRseSwgV29ya1F1ZXVlIGlzIGluIFdlYktpdDIuIEJ5
IG1vdmluZyBXb3JrUXVldWUgYW5kCisgICAgICAgIFBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIg
dG8gV1RGLCBXZWJDb3JlIGNvZGUgY2FuIHVzZSBpdC4KKworICAgICAgICBUaGlzIHBhdGNoIGlz
IHJlcXVpcmVkIGZvciBwYXJhbGxlbCBpbWFnZSBkZWNvZGVycyBiZWNhdXNlCisgICAgICAgIFdv
cmtRdWV1ZSBpcyB1c2VkIHRvIG1ha2UgaW1hZ2UgZGVjb2Rpbmcgb2ZmIHRoZSBtYWluIHRocmVh
ZC4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxp
c3QuYW06CisgICAgICAgICogUGxhdGZvcm0vQ29yZUlQQy9Db25uZWN0aW9uLmg6CisgICAgICAg
IChDb25uZWN0aW9uKToKKyAgICAgICAgKiBQbGF0Zm9ybS9Db3JlSVBDL3VuaXgvQ29ubmVjdGlv
blVuaXguY3BwOgorICAgICAgICAoQ29yZUlQQzo6Q29ubmVjdGlvbjo6c2V0U2hvdWxkQ2xvc2VD
b25uZWN0aW9uT25Qcm9jZXNzVGVybWluYXRpb24pOgorICAgICAgICAqIFBsYXRmb3JtRWZsLmNt
YWtlOgorICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogVUlQcm9jZXNzL0xhdW5jaGVy
L1Byb2Nlc3NMYXVuY2hlci5jcHA6CisgICAgICAgICogVUlQcm9jZXNzL0xhdW5jaGVyL1Byb2Nl
c3NMYXVuY2hlci5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9MYXVuY2hlci9UaHJlYWRMYXVuY2hl
ci5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvV2ViUHJvY2Vzc1Byb3h5Lmg6CisgICAgICAgICogV2ViS2l0Mi54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIHdpbi9XZWJLaXQyLnZjcHJvajoKKwogMjAxMi0wNy0x
MCAgTm8nYW0gUm9zZW50aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgogCiAgICAgICAg
IFtRdF0gRW5hYmxlIGFudGlhbGlhc2luZyBmb3IgVGV4dHVyZU1hcHBlcgpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLm9yZGVyIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLm9yZGVyCmluZGV4IDNhNDUwMDc1YTEzNDNlNTllN2Ix
ZWRhMTFhNWY3Y2Q4MDNjODY1YWEuLjc0OTdkOWYwMzYyOTBmNGNjYzg5MmE2MGVmOTlhOThiMWVl
NWU2YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5v
cmRlcgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUub3JkZXIKQEAg
LTI0OTQsMyArMjQ5NCwxMCBAQCBfX1pOM1dURjZWZWN0b3JJTjNKU0MxMEFTVEJ1aWxkZXIxNEFz
c2lnbm1lbnRJbmZvRUxtMTBFRTE0ZXhwYW5kQ2FwYWNpdHlFbQogX2N0aV9vcF9wdXRfYnlfaWRf
ZGlyZWN0X2dlbmVyaWMKIF9fWk4zV1RGOUhhc2hUYWJsZUlQTjNKU0MxNkZ1bmN0aW9uQm9keU5v
ZGVFU3Q0cGFpcklTM19qRU5TXzE4UGFpckZpcnN0RXh0cmFjdG9ySVM1X0VFTlNfN1B0ckhhc2hJ
UzNfRUVOU18xNFBhaXJIYXNoVHJhaXRzSU5TXzEwSGFzaFRyYWl0c0lTM19FRU5TQl9JakVFRUVT
Q19FNGZpbmRJUzNfTlNfMjJJZGVudGl0eUhhc2hUcmFuc2xhdG9ySVMzX1M1X1M5X0VFRUVOU18x
N0hhc2hUYWJsZUl0ZXJhdG9ySVMzX1M1X1M3X1M5X1NFX1NDX0VFUktUXwogX19aTjNXVEY5SGFz
aFRhYmxlSVBOM0pTQzE2RnVuY3Rpb25Cb2R5Tm9kZUVTdDRwYWlySVMzX2pFTlNfMThQYWlyRmly
c3RFeHRyYWN0b3JJUzVfRUVOU183UHRySGFzaElTM19FRU5TXzE0UGFpckhhc2hUcmFpdHNJTlNf
MTBIYXNoVHJhaXRzSVMzX0VFTlNCX0lqRUVFRVNDX0U2ZXhwYW5kRXYKK19fWk4zV1RGOVdvcmtR
dWV1ZUMxRVBLYworX19aTjNXVEY5V29ya1F1ZXVlRDFFdgorX19aTjNXVEY5V29ya1F1ZXVlMjhy
ZWdpc3Rlck1hY2hQb3J0RXZlbnRIYW5kbGVyRWpOUzBfMTdNYWNoUG9ydEV2ZW50VHlwZUVSS05T
XzhGdW5jdGlvbklGdnZFRUUKK19fWk4zV1RGOVdvcmtRdWV1ZTMwdW5yZWdpc3Rlck1hY2hQb3J0
RXZlbnRIYW5kbGVyRWoKK19fWk4zV1RGOVdvcmtRdWV1ZThkaXNwYXRjaEVSS05TXzhGdW5jdGlv
bklGdnZFRUUKK19fWk4zV1RGOVdvcmtRdWV1ZTE4ZGlzcGF0Y2hBZnRlckRlbGF5RVJLTlNfOEZ1
bmN0aW9uSUZ2dkVFRWQKK19fWk4zV1RGOVdvcmtRdWV1ZTEwaW52YWxpZGF0ZUV2CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLmRlZiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZGVmCmluZGV4IGM1
MDAxM2FjMTNiMGIzODYzMjg2NjhmZjQ5ZjVlMDdhYzdiZDljNDIuLmQwZTYzZDNmZDk0MjcxZjRj
OTBlNmU2ZDk4YzdkY2MwMzdhNGM0ODUgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZGVm
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZGVmCkBAIC0yOCw2ICsyOCw3IEBAIEVYUE9SVFMKICAg
ICA/PzBVU3RyaW5nQEpTQ0BAUUFFQFBCX1dAWgogICAgID8/MFVTdHJpbmdASlNDQEBRQUVAUEJf
V0lAWgogICAgID8/MFdURlRocmVhZERhdGFAV1RGQEBRQUVAWFoKKyAgICA/PzBXb3JrUXVldWVA
V1RGQEBRQUVAUEJEQFoKICAgICA/PzBZYXJyUGF0dGVybkBZYXJyQEpTQ0BAUUFFQEFCVlVTdHJp
bmdAMkBfTjFQQVBCREBaCiAgICAgPz8xQXJyYXlCdWZmZXJWaWV3QFdURkBAVUFFQFhaCiAgICAg
Pz8xQ2xpZW50RGF0YUBKU0dsb2JhbERhdGFASlNDQEBVQUVAWFoKQEAgLTQzLDYgKzQ0LDcgQEAg
RVhQT1JUUwogICAgID8/MVRocmVhZENvbmRpdGlvbkBXVEZAQFFBRUBYWgogICAgID8/MVdURlRo
cmVhZERhdGFAV1RGQEBRQUVAWFoKICAgICA/PzFXZWFrSGFuZGxlT3duZXJASlNDQEBVQUVAWFoK
KyAgICA/PzFXb3JrUXVldWVAV1RGQEBRQUVAWFoKICAgICA/PzhKU0NAQFlBX05BQlZVU3RyaW5n
QDBAMEBaCiAgICAgPz84V1RGQEBZQV9OQUJWQ1N0cmluZ0AwQDBAWgogICAgID9FY21hU2NyaXB0
Q29udmVydGVyQERvdWJsZVRvU3RyaW5nQ29udmVydGVyQGRvdWJsZV9jb252ZXJzaW9uQFdURkBA
U0FBQlYxMjNAWFoKQEAgLTE1Nyw2ICsxNTksOCBAQCBFWFBPUlRTCiAgICAgP2RldGFjaFRocmVh
ZEBXVEZAQFlBWElAWgogICAgID9kaWRUaW1lT3V0QFRpbWVvdXRDaGVja2VyQEpTQ0BAUUFFX05Q
QVZFeGVjU3RhdGVAMkBAWgogICAgID9kZWxldGVBbGxDb21waWxlZENvZGVASGVhcEBKU0NAQFFB
RVhYWgorICAgID9kaXNwYXRjaEBXb3JrUXVldWVAV1RGQEBRQUVYQUJWPyRGdW5jdGlvbkAkJEE2
QVhYWkAyQEBaCisgICAgP2Rpc3BhdGNoQWZ0ZXJEZWxheUBXb3JrUXVldWVAV1RGQEBRQUVYQUJW
PyRGdW5jdGlvbkAkJEE2QVhYWkAyQE5AWgogICAgID9kaXNwbGF5TmFtZUBKU0Z1bmN0aW9uQEpT
Q0BAUUFFP0JWVVN0cmluZ0AyQFBBVkV4ZWNTdGF0ZUAyQEBaCiAgICAgP2R0b2FAV1RGQEBZQVhR
QUROQUFfTkFBSEFBSUBaCiAgICAgP2R1bXBBbGxPcHRpb25zQE9wdGlvbnNASlNDQEBTQVhQQVVf
aW9idWZAQEBaCkBAIC0yMjksNiArMjMzLDcgQEAgRVhQT1JUUwogICAgID9pbml0aWFsaXplVGhy
ZWFkaW5nQEpTQ0BAWUFYWFoKICAgICA/aW5pdGlhbGl6ZVRocmVhZGluZ0BXVEZAQFlBWFhaCiAg
ICAgP2ludGVycHJldEBZYXJyQEpTQ0BAWUFJUEFVQnl0ZWNvZGVQYXR0ZXJuQDEyQEFCVlVTdHJp
bmdAMkBJUEFJQFoKKyAgICA/aW52YWxpZGF0ZUBXb3JrUXVldWVAV1RGQEBRQUVYWFoKICAgICA/
aXNBY2Nlc3NvckRlc2NyaXB0b3JAUHJvcGVydHlEZXNjcmlwdG9yQEpTQ0BAUUJFX05YWgogICAg
ID9pc0J1c3lASGVhcEBKU0NAQFFBRV9OWFoKICAgICA/aXNEYXRhRGVzY3JpcHRvckBQcm9wZXJ0
eURlc2NyaXB0b3JASlNDQEBRQkVfTlhaCkBAIC0yODEsNiArMjg2LDcgQEAgRVhQT1JUUwogICAg
ID9yYW5kb21OdW1iZXJAV1RGQEBZQU5YWgogICAgID9yZWNvbXBpbGVBbGxKU0Z1bmN0aW9uc0BE
ZWJ1Z2dlckBKU0NAQFFBRVhQQVZKU0dsb2JhbERhdGFAMkBAWgogICAgID9yZWdFeHBGbGFnc0BK
U0NAQFlBP0FXNFJlZ0V4cEZsYWdzQDFAQUJWVVN0cmluZ0AxQEBaCisgICAgP3JlZ2lzdGVySGFu
ZGxlQFdvcmtRdWV1ZUBXVEZAQFFBRVhQQVhBQlY/JEZ1bmN0aW9uQCQkQTZBWFhaQDJAQFoKICAg
ICA/cmVpZnlTdHJpbmdAU3RyaW5nQnVpbGRlckBXVEZAQEFCRVhYWgogICAgID9yZWxlYXNlRGVj
b21taXR0ZWRAT1NBbGxvY2F0b3JAV1RGQEBTQVhQQVhJQFoKICAgICA/cmVsZWFzZUV4ZWN1dGFi
bGVNZW1vcnlASlNHbG9iYWxEYXRhQEpTQ0BAUUFFWFhaCkBAIC0zNjMsNiArMzY5LDcgQEAgRVhQ
T1JUUwogICAgID91bmxvY2tATXV0ZXhAV1RGQEBRQUVYWFoKICAgICA/dW5sb2NrQXRvbWljYWxs
eUluaXRpYWxpemVkU3RhdGljTXV0ZXhAV1RGQEBZQVhYWgogICAgID91bnByb3RlY3RASGVhcEBK
U0NAQFFBRV9OVkpTVmFsdWVAMkBAWgorICAgID91bnJlZ2lzdGVyQW5kQ2xvc2VIYW5kbGVAV29y
a1F1ZXVlQFdURkBAUUFFWFBBWEBaCiAgICAgP3V0ZjhAVVN0cmluZ0BKU0NAQFFCRT9BVkNTdHJp
bmdAV1RGQEBfTkBaCiAgICAgP3ZhbGlkYXRlQE1hcmtTdGFja0BKU0NAQEtBWFBBVkpTQ2VsbEAy
QEBaCiAgICAgP3Zpc2l0Q2hpbGRyZW5ASlNHbG9iYWxPYmplY3RASlNDQEBTQVhQQVZKU0NlbGxA
MkBBQVZTbG90VmlzaXRvckAyQEBaCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0dOVW1ha2VmaWxl
Lmxpc3QuYW0gYi9Tb3VyY2UvV1RGL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggYzVmNDhhNmNl
NTU5YTI0Y2MyMGI3MDc1OGRmOGJjNGE4NGRjOWVlZC4uY2YyYTA4ZTdjOTllMTYyZmY5YWYxZmY3
MTdkOWM4ZWM4ZWRkMDYyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9HTlVtYWtlZmlsZS5saXN0
LmFtCisrKyBiL1NvdXJjZS9XVEYvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtMTY0LDYgKzE2NCw4
IEBAIHd0Zl9zb3VyY2VzICs9IFwKICAgICBTb3VyY2UvV1RGL3d0Zi9WYWx1ZUNoZWNrLmggXAog
ICAgIFNvdXJjZS9XVEYvd3RmL1ZlY3Rvci5oIFwKICAgICBTb3VyY2UvV1RGL3d0Zi9WZWN0b3JU
cmFpdHMuaCBcCisgICAgU291cmNlL1dURi93dGYvV29ya1F1ZXVlLmNwcCBcCisgICAgU291cmNl
L1dURi93dGYvV29ya1F1ZXVlLmggXAogICAgIFNvdXJjZS9XVEYvd3RmL1dURlRocmVhZERhdGEu
Y3BwIFwKICAgICBTb3VyY2UvV1RGL3d0Zi9XVEZUaHJlYWREYXRhLmggXAogICAgIFNvdXJjZS9X
VEYvd3RmL2R0b2EuY3BwIFwKQEAgLTE5NCw2ICsxOTYsNyBAQCB3dGZfc291cmNlcyArPSBcCiAg
ICAgU291cmNlL1dURi93dGYvZ29iamVjdC9HbGliVXRpbGl0aWVzLmNwcCBcCiAgICAgU291cmNl
L1dURi93dGYvZ29iamVjdC9HbGliVXRpbGl0aWVzLmggXAogICAgIFNvdXJjZS9XVEYvd3RmL2d0
ay9NYWluVGhyZWFkR3RrLmNwcCBcCisgICAgU291cmNlL1dURi93dGYvZ3RrL1dvcmtRdWV1ZUd0
ay5jcHAgXAogICAgIFNvdXJjZS9XVEYvd3RmL3RleHQvQVNDSUlGYXN0UGF0aC5oIFwKICAgICBT
b3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21pY1N0cmluZy5jcHAgXAogICAgIFNvdXJjZS9XVEYvd3Rm
L3RleHQvQXRvbWljU3RyaW5nLmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9XVEYucHJvIGIv
U291cmNlL1dURi9XVEYucHJvCmluZGV4IDA5NjJlZjBiNTBhNTE3YmQwZTJkNDU2MmRmOGRlZmQ2
ZjUxYTFmMDQuLjg4NmIyZjNhN2I2ZTNhODU1ZGRiMDYzMWJiNzY3NTU0ZTUyNzU4Y2IgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvV1RGLnBybworKysgYi9Tb3VyY2UvV1RGL1dURi5wcm8KQEAgLTE2
Myw2ICsxNjMsNyBAQCBIRUFERVJTICs9IFwKICAgICBWZWN0b3IuaCBcCiAgICAgVmVjdG9yVHJh
aXRzLmggXAogICAgIFZNVGFncy5oIFwKKyAgICBXb3JrUXVldWUuaCBcCiAgICAgV1RGVGhyZWFk
RGF0YS5oCiAKIHVuaXg6IEhFQURFUlMgKz0gVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5o
CkBAIC0xOTksNiArMjAwLDcgQEAgU09VUkNFUyArPSBcCiAgICAgT1NSYW5kb21Tb3VyY2UuY3Bw
IFwKICAgICBxdC9NYWluVGhyZWFkUXQuY3BwIFwKICAgICBxdC9TdHJpbmdRdC5jcHAgXAorICAg
IHF0L1dvcmtRdWV1ZVF0LmNwcCBcCiAgICAgUGFnZUFsbG9jYXRpb25BbGlnbmVkLmNwcCBcCiAg
ICAgUGFnZUJsb2NrLmNwcCBcCiAgICAgUGFyYWxsZWxKb2JzR2VuZXJpYy5jcHAgXApAQCAtMjA5
LDYgKzIxMSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIFRDU3lzdGVtQWxsb2MuY3BwIFwKICAgICBU
aHJlYWRpbmcuY3BwIFwKICAgICBUeXBlVHJhaXRzLmNwcCBcCisgICAgV29ya1F1ZXVlLmNwcCBc
CiAgICAgV1RGVGhyZWFkRGF0YS5jcHAgXAogICAgIHRleHQvQXRvbWljU3RyaW5nLmNwcCBcCiAg
ICAgdGV4dC9DU3RyaW5nLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL1dURi52Y3Byb2ov
V1RGLnZjcHJvaiBiL1NvdXJjZS9XVEYvV1RGLnZjcHJvai9XVEYudmNwcm9qCmluZGV4IDIxOTBk
YWUxZWZmZWFlMzM5NTMzMjdlM2NiNzNlNzdlNmVlNDZkNTguLjFjYzdhZTcxOTVkMTczYWI0ZTY5
ODVmODVlY2M4NzVkNWYxYzQ3Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvV1RGLnZjcHJvai9X
VEYudmNwcm9qCisrKyBiL1NvdXJjZS9XVEYvV1RGLnZjcHJvai9XVEYudmNwcm9qCkBAIC0zNDMs
NiArMzQzLDEwIEBACiAJCQkJUmVsYXRpdmVQYXRoPSIuLlx3dGZcd2luXE93blB0cldpbi5jcHAi
CiAJCQkJPgogCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHd0Zlx3
aW5cV29ya1F1ZXVlV2luLmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CiAJCTwvRmlsdGVyPgogCQk8
RmlsdGVyCiAJCQlOYW1lPSJ1bmljb2RlIgpAQCAtMTIxMyw2ICsxMjE3LDE0IEBACiAJCQk+CiAJ
CTwvRmlsZT4KIAkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cd3RmXFdvcmtRdWV1ZS5jcHAi
CisJCQk+CisJCTwvRmlsZT4KKwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cd3RmXFdvcmtR
dWV1ZS5oIgorCQkJPgorCQk8L0ZpbGU+CisJCTxGaWxlCiAJCQlSZWxhdGl2ZVBhdGg9Ii4uXHd0
ZlxXVEZUaHJlYWREYXRhLmNwcCIKIAkJCT4KIAkJPC9GaWxlPgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XVEYvV1RGLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNzcyMDQ2MWUyNjQ2NjFmYzhlOTQzNWU5MDg4MTY3
NGJjZDFiNzY1OC4uZmNkMDIxZWU1Y2YxNGQxYjUyYmQyODc1NjA4YjFmN2ZkODc3MzVlMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9T
b3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMzksNiArMjM5LDkg
QEAKIAkJQThBNDc0N0UxNTFBODI1QjAwNDEyM0ZGIC8qIFZlY3Rvci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDczNzAxNTFBODI1QjAwNDEyM0ZG
IC8qIFZlY3Rvci5oICovOyB9OwogCQlBOEE0NzQ3RjE1MUE4MjVCMDA0MTIzRkYgLyogVmVjdG9y
VHJhaXRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
OEE0NzM3MTE1MUE4MjVCMDA0MTIzRkYgLyogVmVjdG9yVHJhaXRzLmggKi87IH07CiAJCUE4QTQ3
NDgwMTUxQTgyNUIwMDQxMjNGRiAvKiBWTVRhZ3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MzcyMTUxQTgyNUIwMDQxMjNGRiAvKiBWTVRhZ3Mu
aCAqLzsgfTsKKwkJQkMyRTZFOEQxMTQxOTcxNTAwQTYzQjFFIC8qIFdvcmtRdWV1ZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzJFNkU3RDExNDE5
NzBDMDBBNjNCMUUgLyogV29ya1F1ZXVlLmNwcCAqLzsgfTsKKwkJQkMyRTZFOEUxMTQxOTcxNTAw
QTYzQjFFIC8qIFdvcmtRdWV1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQkMyRTZFN0UxMTQxOTcwQzAwQTYzQjFFIC8qIFdvcmtRdWV1ZS5oICovOyB9
OworCQlCQzAwOTJGODExNTgzN0EzMDBFMEFFMkEgLyogV29ya1F1ZXVlTWFjLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMDA5MkY2MTE1ODM3QTMw
MEUwQUUyQSAvKiBXb3JrUXVldWVNYWMuY3BwICovOyB9OwogCQlBOEE0NzQ4NjE1MUE4MjVCMDA0
MTIzRkYgLyogV1RGVGhyZWFkRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzM3QTE1MUE4MjVCMDA0MTIzRkYgLyogV1RGVGhyZWFkRGF0
YS5jcHAgKi87IH07CiAJCUE4QTQ3NDg3MTUxQTgyNUIwMDQxMjNGRiAvKiBXVEZUaHJlYWREYXRh
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzM3
QjE1MUE4MjVCMDA0MTIzRkYgLyogV1RGVGhyZWFkRGF0YS5oICovOyB9OwogCQlBOEE0NzQ4QzE1
MUE4MjY0MDA0MTIzRkYgLyogY29uZmlnLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzQ4QjE1MUE4MjY0MDA0MTIzRkYgLyogY29uZmlnLmggKi87
IH07CkBAIC00ODcsNiArNDkwLDkgQEAKIAkJQThBNDczNzAxNTFBODI1QjAwNDEyM0ZGIC8qIFZl
Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWZWN0b3IuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDczNzExNTFBODI1QjAwNDEyM0ZGIC8qIFZlY3Rv
clRyYWl0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWZWN0b3JUcmFpdHMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDczNzIxNTFBODI1QjAwNDEyM0ZG
IC8qIFZNVGFncy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWTVRhZ3MuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkMyRTZFN0QxMTQxOTcwQzAwQTYzQjFFIC8q
IFdvcmtRdWV1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXb3Jr
UXVldWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQzJFNkU3RTExNDE5NzBD
MDBBNjNCMUUgLyogV29ya1F1ZXVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdvcmtRdWV1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQzAwOTJGNjExNTgz
N0EzMDBFMEFFMkEgLyogV29ya1F1ZXVlTWFjLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFdvcmtRdWV1ZU1hYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUE4QTQ3MzdBMTUxQTgyNUIwMDQxMjNGRiAvKiBXVEZUaHJlYWREYXRhLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdURlRocmVhZERhdGEuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlBOEE0NzM3QjE1MUE4MjVCMDA0MTIzRkYgLyogV1RGVGhy
ZWFkRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXVEZUaHJlYWREYXRh
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QTQ3NDhCMTUxQTgyNjQwMDQxMjNG
RiAvKiBjb25maWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gY29uZmlnLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03MTcsNiArNzIzLDggQEAKIAkJCQlBOEE0
NzM3MDE1MUE4MjVCMDA0MTIzRkYgLyogVmVjdG9yLmggKi8sCiAJCQkJQThBNDczNzExNTFBODI1
QjAwNDEyM0ZGIC8qIFZlY3RvclRyYWl0cy5oICovLAogCQkJCUE4QTQ3MzcyMTUxQTgyNUIwMDQx
MjNGRiAvKiBWTVRhZ3MuaCAqLywKKwkJCQlCQzJFNkU3RDExNDE5NzBDMDBBNjNCMUUgLyogV29y
a1F1ZXVlLmNwcCAqLywKKwkJCQlCQzJFNkU3RTExNDE5NzBDMDBBNjNCMUUgLyogV29ya1F1ZXVl
LmggKi8sCiAJCQkJQThBNDczN0ExNTFBODI1QjAwNDEyM0ZGIC8qIFdURlRocmVhZERhdGEuY3Bw
ICovLAogCQkJCUE4QTQ3MzdCMTUxQTgyNUIwMDQxMjNGRiAvKiBXVEZUaHJlYWREYXRhLmggKi8s
CiAJCQkJQTg3NkRCRDcxNTE4MTZFNTAwREFEQjk1IC8qIFBsYXRmb3JtLmggKi8sCkBAIC03NTYs
NiArNzY0LDcgQEAKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJQThB
NDcyQzUxNTFBODI1QTAwNDEyM0ZGIC8qIE1haW5UaHJlYWRNYWMubW0gKi8sCisJCQkJQkMwMDky
RjYxMTU4MzdBMzAwRTBBRTJBIC8qIFdvcmtRdWV1ZU1hYy5jcHAgKi8sCiAJCQkpOwogCQkJcGF0
aCA9IG1hYzsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0xMDM3LDYgKzEwNDYsNyBA
QAogCQkJCUE4QTQ3NDdFMTUxQTgyNUIwMDQxMjNGRiAvKiBWZWN0b3IuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE4QTQ3NDdGMTUxQTgyNUIwMDQxMjNGRiAvKiBWZWN0b3JUcmFpdHMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE4QTQ3NDgwMTUxQTgyNUIwMDQxMjNGRiAvKiBWTVRhZ3MuaCBpbiBIZWFk
ZXJzICovLAorCQkJCUJDMkU2RThFMTE0MTk3MTUwMEE2M0IxRSAvKiBXb3JrUXVldWUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE4QTQ3NDg3MTUxQTgyNUIwMDQxMjNGRiAvKiBXVEZUaHJlYWREYXRh
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ4QzE1MUE4MjY0MDA0MTIzRkYgLyogY29uZmln
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDNGNjEyMDE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6
ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMTg2LDYgKzExOTYsOCBAQAogCQkJCUE4QTQ3NDc0MTUx
QTgyNUIwMDQxMjNGRiAvKiBVUkxDaGFyYWN0ZXJUeXBlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBOEE0NzQ3NzE1MUE4MjVCMDA0MTIzRkYgLyogVVJMRXNjYXBlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUE4QTQ3NDdCMTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxTZWdtZW50cy5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQlCQzJFNkU4RDExNDE5NzE1MDBBNjNCMUUgLyogV29ya1F1ZXVlLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCUJDMDA5MkY4MTE1ODM3QTMwMEUwQUUyQSAvKiBXb3JrUXVldWVN
YWMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDc0ODYxNTFBODI1QjAwNDEyM0ZGIC8qIFdU
RlRocmVhZERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQzRjYxMUYxNTY1RjBGOTAwREI1
MTRBIC8qIFJBTVNpemUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4
dAppbmRleCAyNzRmMDRjOTc0OTMxOWFlZjQ4MDQ0NzkxNmRkMjI4MjcyNTA4NjhmLi5iZTk1NGYw
NDM4M2Q5YjhmOWJlNDM5OTEwMWVlMDJmZWJkZjQyYWY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dApA
QCAtMTAyLDYgKzEwMiw3IEBAIFNFVChXVEZfSEVBREVSUwogICAgIFZhbHVlQ2hlY2suaAogICAg
IFZlY3Rvci5oCiAgICAgVmVjdG9yVHJhaXRzLmgKKyAgICBXb3JrUXVldWUuaAogICAgIFdURlRo
cmVhZERhdGEuaAogICAgIGR0b2EuaAogCkBAIC0xNjEsNiArMTYyLDcgQEAgU0VUKFdURl9TT1VS
Q0VTCiAgICAgU3RyaW5nRXh0cmFzLmNwcAogICAgIFRocmVhZGluZy5jcHAKICAgICBUeXBlVHJh
aXRzLmNwcAorICAgIFdvcmtRdWV1ZS5jcHAKICAgICBXVEZUaHJlYWREYXRhLmNwcAogICAgIGR0
b2EuY3BwCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRWZsLmNtYWtlIGIv
U291cmNlL1dURi93dGYvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggMWExM2RiYmEzNTU4NGUwNTZj
NDkyOTFlMzg3YTMyMjU3MTBkMTMwOC4uZmQxN2Y1Nzg1ZWRiZmQ3YTI3MTgyYjRhM2RlYTI0ZjA5
MWVmZDg3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1FZmwuY21ha2UKKysr
IGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTEsNiArMSw3IEBACiBMSVNU
KEFQUEVORCBXVEZfU09VUkNFUwogICAgIGVmbC9NYWluVGhyZWFkRWZsLmNwcAogICAgIGVmbC9P
d25QdHJFZmwuY3BwCisgICAgZWZsL1dvcmtRdWV1ZUVmbC5jcHAKICAgICBnb2JqZWN0L0dPd25Q
dHIuY3BwCiAgICAgZ29iamVjdC9HUmVmUHRyLmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9QbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmggYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9y
bVByb2Nlc3NJZGVudGlmaWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjdmZjUzYmNkNmM5ZmI0ZjI5NzdhODhj
ODRiNzY5YzBkOGJmZDcxNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL1BsYXRm
b3JtUHJvY2Vzc0lkZW50aWZpZXIuaApAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisj
aWZuZGVmIFBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXJfaAorI2RlZmluZSBQbGF0Zm9ybVByb2Nl
c3NJZGVudGlmaWVyX2gKKworI2lmIFBMQVRGT1JNKFFUKQorY2xhc3MgUVByb2Nlc3M7CisjZWxp
ZiBQTEFURk9STShFRkwpCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKworbmFtZXNwYWNl
IFdURiB7CisKKyNpZiBQTEFURk9STShNQUMpCit0eXBlZGVmIHBpZF90IFBsYXRmb3JtUHJvY2Vz
c0lkZW50aWZpZXI7CisjZWxpZiBQTEFURk9STShXSU4pCit0eXBlZGVmIEhBTkRMRSBQbGF0Zm9y
bVByb2Nlc3NJZGVudGlmaWVyOworI2VsaWYgUExBVEZPUk0oUVQpCit0eXBlZGVmIFFQcm9jZXNz
KiBQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyOworI2VsaWYgUExBVEZPUk0oR1RLKQorI2lmZGVm
IEdfT1NfV0lOMzIKK3R5cGVkZWYgdm9pZCogR1BpZDsKKyNlbHNlCit0eXBlZGVmIGludCBHUGlk
OworI2VuZGlmCit0eXBlZGVmIEdQaWQgUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllcjsKKyNlbGlm
IFBMQVRGT1JNKEVGTCkKK3R5cGVkZWYgcGlkX3QgUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllcjsK
KyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpQbGF0Zm9ybVByb2Nl
c3NJZGVudGlmaWVyOworCisjZW5kaWYgLy8gUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllcl9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Xb3JrUXVldWUuY3BwIGIvU291cmNlL1dURi93dGYv
V29ya1F1ZXVlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZjVmZDE0ZWI0YmM5ZTU1MjAxNDQyYzMyOGRiYWYy
ZjM2NjU4ZjZlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvV29ya1F1ZXVlLmNw
cApAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIldvcmtRdWV1ZS5oIgorCituYW1lc3BhY2UgV1RGIHsKKworV29ya1F1ZXVlOjpXb3Jr
UXVldWUoY29uc3QgY2hhciogbmFtZSkKKyAgICA6IG1faXNWYWxpZCh0cnVlKQoreworICAgIHBs
YXRmb3JtSW5pdGlhbGl6ZShuYW1lKTsKK30KKworV29ya1F1ZXVlOjp+V29ya1F1ZXVlKCkKK3sK
KyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1faXNWYWxpZE11
dGV4KTsKKyAgICBBU1NFUlQoIW1faXNWYWxpZCk7CisjZW5kaWYKK30KKwordm9pZCBXb3JrUXVl
dWU6OmludmFsaWRhdGUoKQoreworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1f
aXNWYWxpZE11dGV4KTsKKyAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7CisgICAgfQorCisgICAg
cGxhdGZvcm1JbnZhbGlkYXRlKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvV29ya1F1ZXVlLmggYi9Tb3VyY2UvV1RGL3d0Zi9Xb3JrUXVldWUu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5hMmI5MjFhMDE3NGI5YWJlOGYxNTU1NzBlNTE3Mzk1NTA4Njc4OGI0Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvV29ya1F1ZXVlLmgKQEAgLTAsMCArMSwy
MTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5
LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdvcmtRdWV1
ZV9oCisjZGVmaW5lIFdvcmtRdWV1ZV9oCisKKyNpZiBPUyhEQVJXSU4pCisjaWYgSEFWRShESVNQ
QVRDSF9IKQorI2luY2x1ZGUgPGRpc3BhdGNoL2Rpc3BhdGNoLmg+CisjZW5kaWYKKyNlbmRpZgor
CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb25hbC5oPgor
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKKyNpZiAoUExBVEZPUk0oUVQpICYmICFPUyhEQVJXSU4p
KSB8fCBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKEVGTCkKKyNpbmNsdWRlICJQbGF0Zm9ybVBy
b2Nlc3NJZGVudGlmaWVyLmgiCisjZW5kaWYKKworI2lmIFBMQVRGT1JNKFFUKSAmJiAhT1MoREFS
V0lOKQorI2luY2x1ZGUgPFFTb2NrZXROb3RpZmllcj4KK2NsYXNzIFFPYmplY3Q7CitjbGFzcyBR
VGhyZWFkOworI2VsaWYgUExBVEZPUk0oR1RLKQorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQ
dHIuaD4KK3R5cGVkZWYgZ2Jvb2xlYW4gKCpHU291cmNlRnVuYykgKGdwb2ludGVyIGRhdGEpOwor
I2VsaWYgUExBVEZPUk0oRUZMKQorI2luY2x1ZGUgPEVjb3JlLmg+CisjZW5kaWYKKworbmFtZXNw
YWNlIFdURiB7CisKK2NsYXNzIFdvcmtRdWV1ZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
V29ya1F1ZXVlKTsKKworcHVibGljOgorICAgIFdURl9FWFBPUlRfUFJJVkFURSBleHBsaWNpdCBX
b3JrUXVldWUoY29uc3QgY2hhciogbmFtZSk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIH5Xb3Jr
UXVldWUoKTsKKworICAgIC8vIFdpbGwgZGlzcGF0Y2ggdGhlIGdpdmVuIGZ1bmN0aW9uIHRvIHJ1
biBhcyBzb29uIGFzIHBvc3NpYmxlLgorICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGRpc3Bh
dGNoKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsKKworICAgIC8vIFdpbGwgZGlzcGF0Y2ggdGhl
IGdpdmVuIGZ1bmN0aW9uIGFmdGVyIHRoZSBnaXZlbiBkZWxheSAoaW4gc2Vjb25kcykuCisgICAg
V1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZGlzcGF0Y2hBZnRlckRlbGF5KGNvbnN0IEZ1bmN0aW9u
PHZvaWQoKT4mLCBkb3VibGUgZGVsYXkpOworCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQg
aW52YWxpZGF0ZSgpOworCisjaWYgT1MoREFSV0lOKQorICAgIGVudW0gTWFjaFBvcnRFdmVudFR5
cGUgeworICAgICAgICAvLyBGaXJlZCB3aGVuIHRoZXJlIGlzIGRhdGEgb24gdGhlIGdpdmVuIHJl
Y2VpdmUgcmlnaHQuCisgICAgICAgIE1hY2hQb3J0RGF0YUF2YWlsYWJsZSwKKyAgICAgICAgCisg
ICAgICAgIC8vIEZpcmVkIHdoZW4gdGhlIHJlY2VpdmUgcmlnaHQgZm9yIHRoaXMgc2VuZCByaWdo
dCBoYXMgYmVlbiBkZXN0cm95ZWQuCisgICAgICAgIE1hY2hQb3J0RGVhZE5hbWVOb3RpZmljYXRp
b24KKyAgICB9OworICAgIAorICAgIC8vIFdpbGwgZXhlY3V0ZSB0aGUgZ2l2ZW4gZnVuY3Rpb24g
d2hlbmV2ZXIgdGhlIGdpdmVuIG1hY2ggcG9ydCBldmVudCBmaXJlcy4KKyAgICAvLyBOb3RlIHRo
YXQgdGhpcyB3aWxsIGFkb3B0IHRoZSBtYWNoIHBvcnQgYW5kIGRlc3Ryb3kgaXQgd2hlbiB0aGUg
d29yayBxdWV1ZSBpcyBpbnZhbGlkYXRlZC4KKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBy
ZWdpc3Rlck1hY2hQb3J0RXZlbnRIYW5kbGVyKG1hY2hfcG9ydF90LCBNYWNoUG9ydEV2ZW50VHlw
ZSwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lk
IHVucmVnaXN0ZXJNYWNoUG9ydEV2ZW50SGFuZGxlcihtYWNoX3BvcnRfdCk7CisjZWxpZiBQTEFU
Rk9STShXSU4pCisgICAgdm9pZCByZWdpc3RlckhhbmRsZShIQU5ETEUsIGNvbnN0IEZ1bmN0aW9u
PHZvaWQoKT4mKTsKKyAgICB2b2lkIHVucmVnaXN0ZXJBbmRDbG9zZUhhbmRsZShIQU5ETEUpOwor
I2VsaWYgUExBVEZPUk0oUVQpCisgICAgUVNvY2tldE5vdGlmaWVyKiByZWdpc3RlclNvY2tldEV2
ZW50SGFuZGxlcihpbnQsIFFTb2NrZXROb3RpZmllcjo6VHlwZSwgY29uc3QgRnVuY3Rpb248dm9p
ZCgpPiYpOworICAgIHZvaWQgZGlzcGF0Y2hPblRlcm1pbmF0aW9uKFBsYXRmb3JtUHJvY2Vzc0lk
ZW50aWZpZXIsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsKKyNlbGlmIFBMQVRGT1JNKEdUSykK
KyAgICB2b2lkIHJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKGludCwgaW50LCBjb25zdCBGdW5j
dGlvbjx2b2lkKCk+Jik7CisgICAgdm9pZCB1bnJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKGlu
dCk7CisgICAgdm9pZCBkaXNwYXRjaE9uVGVybWluYXRpb24oUGxhdGZvcm1Qcm9jZXNzSWRlbnRp
ZmllciwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOworI2VsaWYgUExBVEZPUk0oRUZMKQorICAg
IHZvaWQgcmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIoaW50LCBjb25zdCBGdW5jdGlvbjx2b2lk
KCk+Jik7CisgICAgdm9pZCB1bnJlZ2lzdGVyU29ja2V0RXZlbnRIYW5kbGVyKGludCk7CisjZW5k
aWYKKworcHJpdmF0ZToKKyAgICAvLyBGSVhNRTogVXNlIGFuIGF0b21pYyBib29sZWFuIGhlcmUg
aW5zdGVhZC4KKyAgICBNdXRleCBtX2lzVmFsaWRNdXRleDsKKyAgICBib29sIG1faXNWYWxpZDsK
KworICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplKGNvbnN0IGNoYXIqIG5hbWUpOworICAgIHZv
aWQgcGxhdGZvcm1JbnZhbGlkYXRlKCk7CisKKyNpZiBPUyhEQVJXSU4pCisjaWYgSEFWRShESVNQ
QVRDSF9IKQorICAgIHN0YXRpYyB2b2lkIGV4ZWN1dGVGdW5jdGlvbih2b2lkKik7CisgICAgTXV0
ZXggbV9ldmVudFNvdXJjZXNNdXRleDsKKyAgICBjbGFzcyBFdmVudFNvdXJjZTsKKyAgICBIYXNo
TWFwPG1hY2hfcG9ydF90LCBFdmVudFNvdXJjZSo+IG1fZXZlbnRTb3VyY2VzOworICAgIGRpc3Bh
dGNoX3F1ZXVlX3QgbV9kaXNwYXRjaFF1ZXVlOworI2VuZGlmCisjZWxpZiBQTEFURk9STShXSU4p
CisgICAgY2xhc3MgV29ya0l0ZW1XaW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8V29y
a0l0ZW1XaW4+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdvcmtJ
dGVtV2luPiBjcmVhdGUoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYsIFdvcmtRdWV1ZSopOworICAg
ICAgICB2aXJ0dWFsIH5Xb3JrSXRlbVdpbigpOworCisgICAgICAgIEZ1bmN0aW9uPHZvaWQoKT4m
IGZ1bmN0aW9uKCkgeyByZXR1cm4gbV9mdW5jdGlvbjsgfQorICAgICAgICBXb3JrUXVldWUqIHF1
ZXVlKCkgY29uc3QgeyByZXR1cm4gbV9xdWV1ZTsgfQorCisgICAgcHJvdGVjdGVkOgorICAgICAg
ICBXb3JrSXRlbVdpbihjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiwgV29ya1F1ZXVlKik7CisKKyAg
ICBwcml2YXRlOgorICAgICAgICBGdW5jdGlvbjx2b2lkKCk+IG1fZnVuY3Rpb247CisgICAgICAg
IFdvcmtRdWV1ZSogbV9xdWV1ZTsKKyAgICB9OworCisgICAgY2xhc3MgSGFuZGxlV29ya0l0ZW0g
OiBwdWJsaWMgV29ya0l0ZW1XaW4geworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8SGFuZGxlV29ya0l0ZW0+IGNyZWF0ZUJ5QWRvcHRpbmdIYW5kbGUoSEFORExFLCBjb25z
dCBGdW5jdGlvbjx2b2lkKCk+JiwgV29ya1F1ZXVlKik7CisgICAgICAgIHZpcnR1YWwgfkhhbmRs
ZVdvcmtJdGVtKCk7CisKKyAgICAgICAgdm9pZCBzZXRXYWl0SGFuZGxlKEhBTkRMRSB3YWl0SGFu
ZGxlKSB7IG1fd2FpdEhhbmRsZSA9IHdhaXRIYW5kbGU7IH0KKyAgICAgICAgSEFORExFIHdhaXRI
YW5kbGUoKSBjb25zdCB7IHJldHVybiBtX3dhaXRIYW5kbGU7IH0KKworICAgIHByaXZhdGU6Cisg
ICAgICAgIEhhbmRsZVdvcmtJdGVtKEhBTkRMRSwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYsIFdv
cmtRdWV1ZSopOworCisgICAgICAgIEhBTkRMRSBtX2hhbmRsZTsKKyAgICAgICAgSEFORExFIG1f
d2FpdEhhbmRsZTsKKyAgICB9OworCisgICAgc3RhdGljIHZvaWQgQ0FMTEJBQ0sgaGFuZGxlQ2Fs
bGJhY2sodm9pZCogY29udGV4dCwgQk9PTEVBTiB0aW1lck9yV2FpdEZpcmVkKTsKKyAgICBzdGF0
aWMgdm9pZCBDQUxMQkFDSyB0aW1lckNhbGxiYWNrKHZvaWQqIGNvbnRleHQsIEJPT0xFQU4gdGlt
ZXJPcldhaXRGaXJlZCk7CisgICAgc3RhdGljIERXT1JEIFdJTkFQSSB3b3JrVGhyZWFkQ2FsbGJh
Y2sodm9pZCogY29udGV4dCk7CisKKyAgICBib29sIHRyeVJlZ2lzdGVyQXNXb3JrVGhyZWFkKCk7
CisgICAgdm9pZCB1bnJlZ2lzdGVyQXNXb3JrVGhyZWFkKCk7CisgICAgdm9pZCBwZXJmb3JtV29y
a09uUmVnaXN0ZXJlZFdvcmtUaHJlYWQoKTsKKworICAgIHN0YXRpYyB2b2lkIHVucmVnaXN0ZXJX
YWl0QW5kRGVzdHJveUl0ZW1Tb29uKFBhc3NSZWZQdHI8SGFuZGxlV29ya0l0ZW0+KTsKKyAgICBz
dGF0aWMgRFdPUkQgV0lOQVBJIHVucmVnaXN0ZXJXYWl0QW5kRGVzdHJveUl0ZW1DYWxsYmFjayh2
b2lkKiBjb250ZXh0KTsKKworICAgIHZvbGF0aWxlIExPTkcgbV9pc1dvcmtUaHJlYWRSZWdpc3Rl
cmVkOworCisgICAgTXV0ZXggbV93b3JrSXRlbVF1ZXVlTG9jazsKKyAgICBWZWN0b3I8UmVmUHRy
PFdvcmtJdGVtV2luPiA+IG1fd29ya0l0ZW1RdWV1ZTsKKworICAgIE11dGV4IG1faGFuZGxlc0xv
Y2s7CisgICAgSGFzaE1hcDxIQU5ETEUsIFJlZlB0cjxIYW5kbGVXb3JrSXRlbT4gPiBtX2hhbmRs
ZXM7CisKKyAgICBIQU5ETEUgbV90aW1lclF1ZXVlOworI2VsaWYgUExBVEZPUk0oUVQpCisgICAg
Y2xhc3MgV29ya0l0ZW1RdDsKKyAgICBRVGhyZWFkKiBtX3dvcmtUaHJlYWQ7CisgICAgZnJpZW5k
IGNsYXNzIFdvcmtJdGVtUXQ7CisjZWxpZiBQTEFURk9STShHVEspCisgICAgc3RhdGljIHZvaWQg
c3RhcnRXb3JrUXVldWVUaHJlYWQoV29ya1F1ZXVlKik7CisgICAgdm9pZCB3b3JrUXVldWVUaHJl
YWRCb2R5KCk7CisgICAgdm9pZCBkaXNwYXRjaE9uU291cmNlKEdTb3VyY2UqLCBjb25zdCBGdW5j
dGlvbjx2b2lkKCk+JiwgR1NvdXJjZUZ1bmMpOworCisgICAgVGhyZWFkSWRlbnRpZmllciBtX3dv
cmtRdWV1ZVRocmVhZDsKKyAgICBHUmVmUHRyPEdNYWluQ29udGV4dD4gbV9ldmVudENvbnRleHQ7
CisgICAgTXV0ZXggbV9ldmVudExvb3BMb2NrOworICAgIEdSZWZQdHI8R01haW5Mb29wPiBtX2V2
ZW50TG9vcDsKKyAgICBNdXRleCBtX2V2ZW50U291cmNlc0xvY2s7CisgICAgY2xhc3MgRXZlbnRT
b3VyY2U7CisgICAgSGFzaE1hcDxpbnQsIFZlY3RvcjxFdmVudFNvdXJjZSo+ID4gbV9ldmVudFNv
dXJjZXM7CisgICAgdHlwZWRlZiBIYXNoTWFwPGludCwgVmVjdG9yPEV2ZW50U291cmNlKj4gPjo6
aXRlcmF0b3IgRXZlbnRTb3VyY2VJdGVyYXRvcjsgCisjZWxpZiBQTEFURk9STShFRkwpCisgICAg
ZmRfc2V0IG1fZmlsZURlc2NyaXB0b3JTZXQ7CisgICAgaW50IG1fbWF4RmlsZURlc2NyaXB0b3I7
CisgICAgaW50IG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvcjsKKyAgICBpbnQgbV93cml0ZVRvUGlw
ZURlc2NyaXB0b3I7CisgICAgYm9vbCBtX3RocmVhZExvb3A7CisKKyAgICBWZWN0b3I8RnVuY3Rp
b248dm9pZCgpPiA+IG1fd29ya0l0ZW1RdWV1ZTsKKyAgICBNdXRleCBtX3dvcmtJdGVtUXVldWVM
b2NrOworCisgICAgaW50IG1fc29ja2V0RGVzY3JpcHRvcjsKKyAgICBGdW5jdGlvbjx2b2lkKCk+
IG1fc29ja2V0RXZlbnRIYW5kbGVyOworCisgICAgSGFzaE1hcDxpbnQsIE93blB0cjxFY29yZV9U
aW1lcj4gPiBtX3RpbWVyczsKKworICAgIHZvaWQgc2VuZE1lc3NhZ2VUb1RocmVhZChjb25zdCBj
aGFyKik7CisgICAgc3RhdGljIHZvaWQqIHdvcmtRdWV1ZVRocmVhZChXb3JrUXVldWUqKTsKKyAg
ICB2b2lkIHBlcmZvcm1Xb3JrKCk7CisgICAgdm9pZCBwZXJmb3JtRmlsZURlc2NyaXB0b3JXb3Jr
KCk7CisgICAgc3RhdGljIGJvb2wgdGltZXJGaXJlZCh2b2lkKik7CisjZW5kaWYKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OldvcmtRdWV1ZTsKKworI2VuZGlmIC8vIFdv
cmtRdWV1ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9lZmwvV29ya1F1ZXVlRWZsLmNw
cCBiL1NvdXJjZS9XVEYvd3RmL2VmbC9Xb3JrUXVldWVFZmwuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNhMzli
YTllZDliMTI3MGZlN2RmOWU2Y2U2ODVkYjQ3M2E1ZjU4YTcKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV1RGL3d0Zi9lZmwvV29ya1F1ZXVlRWZsLmNwcApAQCAtMCwwICsxLDE3MyBAQAorLyoK
KyAgICBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcworCisgICAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAg
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV29ya1F1ZXVlLmgiCisKKyNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgorCitjbGFzcyBUaW1lcldvcmtJdGVtIHsKK3B1YmxpYzoKKyAgICBUaW1lcldv
cmtJdGVtKGludCB0aW1lcklELCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbiwgV29y
a1F1ZXVlKiBxdWV1ZSkKKyAgICAgICAgOiBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQorICAgICAgICAs
IG1fcXVldWUocXVldWUpCisgICAgICAgICwgbV90aW1lcklEKHRpbWVySUQpCisgICAgeworICAg
IH0KKyAgICB+VGltZXJXb3JrSXRlbSgpIHsgfQorCisgICAgRnVuY3Rpb248dm9pZCgpPiBmdW5j
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZnVuY3Rpb247IH0KKyAgICBXb3JrUXVldWUqIHF1ZXVl
KCkgY29uc3QgeyByZXR1cm4gbV9xdWV1ZTsgfQorCisgICAgaW50IHRpbWVySUQoKSBjb25zdCB7
IHJldHVybiBtX3RpbWVySUQ7IH0KKworcHJpdmF0ZToKKyAgICBGdW5jdGlvbjx2b2lkKCk+IG1f
ZnVuY3Rpb247CisgICAgV29ya1F1ZXVlKiBtX3F1ZXVlOworICAgIGludCBtX3RpbWVySUQ7Cit9
OworCitzdGF0aWMgY29uc3QgaW50IGludmFsaWRTb2NrZXREZXNjcmlwdG9yID0gLTE7CitzdGF0
aWMgY29uc3QgaW50IHRocmVhZE1lc3NhZ2VTaXplID0gMTsKK3N0YXRpYyBjb25zdCBjaGFyIGZp
bmlzaFRocmVhZE1lc3NhZ2VbXSA9ICJGIjsKK3N0YXRpYyBjb25zdCBjaGFyIHdha3VwVGhyZWFk
TWVzc2FnZVtdID0gIlciOworCit2b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXplKGNv
bnN0IGNoYXIqIG5hbWUpCit7CisgICAgaW50IGZkc1syXTsKKyAgICBpZiAocGlwZShmZHMpKQor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgIG1fcmVhZEZyb21QaXBlRGVzY3Jp
cHRvciA9IGZkc1swXTsKKyAgICBtX3dyaXRlVG9QaXBlRGVzY3JpcHRvciA9IGZkc1sxXTsKKyAg
ICBGRF9aRVJPKCZtX2ZpbGVEZXNjcmlwdG9yU2V0KTsKKyAgICBGRF9TRVQobV9yZWFkRnJvbVBp
cGVEZXNjcmlwdG9yLCAmbV9maWxlRGVzY3JpcHRvclNldCk7CisgICAgbV9tYXhGaWxlRGVzY3Jp
cHRvciA9IG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvcjsKKworICAgIG1fc29ja2V0RGVzY3JpcHRv
ciA9IGludmFsaWRTb2NrZXREZXNjcmlwdG9yOworCisgICAgbV90aHJlYWRMb29wID0gdHJ1ZTsK
KyAgICBjcmVhdGVUaHJlYWQocmVpbnRlcnByZXRfY2FzdDxXVEY6OlRocmVhZEZ1bmN0aW9uPigm
V29ya1F1ZXVlOjp3b3JrUXVldWVUaHJlYWQpLCB0aGlzLCBuYW1lKTsKK30KKwordm9pZCBXb3Jr
UXVldWU6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCit7CisgICAgc2VuZE1lc3NhZ2VUb1RocmVhZChm
aW5pc2hUaHJlYWRNZXNzYWdlKTsKK30KKwordm9pZCBXb3JrUXVldWU6OnBlcmZvcm1Xb3JrKCkK
K3sKKyAgICBtX3dvcmtJdGVtUXVldWVMb2NrLmxvY2soKTsKKworICAgIHdoaWxlICghbV93b3Jr
SXRlbVF1ZXVlLmlzRW1wdHkoKSkgeworICAgICAgICBWZWN0b3I8RnVuY3Rpb248dm9pZCgpPiA+
IHdvcmtJdGVtUXVldWU7CisgICAgICAgIG1fd29ya0l0ZW1RdWV1ZS5zd2FwKHdvcmtJdGVtUXVl
dWUpOworCisgICAgICAgIG1fd29ya0l0ZW1RdWV1ZUxvY2sudW5sb2NrKCk7CisgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgd29ya0l0ZW1RdWV1ZS5zaXplKCk7ICsraSkKKyAgICAgICAg
ICAgIHdvcmtJdGVtUXVldWVbaV0oKTsKKyAgICAgICAgbV93b3JrSXRlbVF1ZXVlTG9jay5sb2Nr
KCk7CisgICAgfQorICAgIG1fd29ya0l0ZW1RdWV1ZUxvY2sudW5sb2NrKCk7Cit9CisKK3ZvaWQg
V29ya1F1ZXVlOjpwZXJmb3JtRmlsZURlc2NyaXB0b3JXb3JrKCkKK3sKKyAgICBmZF9zZXQgcmVh
ZEZpbGVEZXNjcmlwdG9yU2V0ID0gbV9maWxlRGVzY3JpcHRvclNldDsKKworICAgIGlmIChzZWxl
Y3QobV9tYXhGaWxlRGVzY3JpcHRvciArIDEsICZyZWFkRmlsZURlc2NyaXB0b3JTZXQsIDAsIDAs
IDApID49IDApIHsKKyAgICAgICAgaWYgKEZEX0lTU0VUKG1fcmVhZEZyb21QaXBlRGVzY3JpcHRv
ciwgJnJlYWRGaWxlRGVzY3JpcHRvclNldCkpIHsKKyAgICAgICAgICAgIGNoYXIgcmVhZEJ1Zlt0
aHJlYWRNZXNzYWdlU2l6ZV07CisgICAgICAgICAgICBpZiAocmVhZChtX3JlYWRGcm9tUGlwZURl
c2NyaXB0b3IsIHJlYWRCdWYsIHRocmVhZE1lc3NhZ2VTaXplKSA9PSAtMSkKKyAgICAgICAgICAg
ICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byByZWFkIGZyb20gV29ya1F1ZXVlVGhyZWFkIHBpcGUi
KTsKKyAgICAgICAgICAgIGlmICghc3RybmNtcChyZWFkQnVmLCBmaW5pc2hUaHJlYWRNZXNzYWdl
LCB0aHJlYWRNZXNzYWdlU2l6ZSkpCisgICAgICAgICAgICAgICAgbV90aHJlYWRMb29wID0gZmFs
c2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAobV9zb2NrZXREZXNjcmlwdG9yICE9IGludmFs
aWRTb2NrZXREZXNjcmlwdG9yICYmIEZEX0lTU0VUKG1fc29ja2V0RGVzY3JpcHRvciwgJnJlYWRG
aWxlRGVzY3JpcHRvclNldCkpCisgICAgICAgICAgICBtX3NvY2tldEV2ZW50SGFuZGxlcigpOwor
ICAgIH0KK30KKwordm9pZCBXb3JrUXVldWU6OnNlbmRNZXNzYWdlVG9UaHJlYWQoY29uc3QgY2hh
ciogbWVzc2FnZSkKK3sKKyAgICBpZiAod3JpdGUobV93cml0ZVRvUGlwZURlc2NyaXB0b3IsIG1l
c3NhZ2UsIHRocmVhZE1lc3NhZ2VTaXplKSA9PSAtMSkKKyAgICAgICAgTE9HX0VSUk9SKCJGYWls
ZWQgdG8gd2FrZSB1cCBXb3JrUXVldWUgVGhyZWFkIik7Cit9CisKK3ZvaWQqIFdvcmtRdWV1ZTo6
d29ya1F1ZXVlVGhyZWFkKFdvcmtRdWV1ZSogd29ya1F1ZXVlKQoreworICAgIHdoaWxlICh3b3Jr
UXVldWUtPm1fdGhyZWFkTG9vcCkgeworICAgICAgICB3b3JrUXVldWUtPnBlcmZvcm1Xb3JrKCk7
CisgICAgICAgIHdvcmtRdWV1ZS0+cGVyZm9ybUZpbGVEZXNjcmlwdG9yV29yaygpOworICAgIH0K
KworICAgIGNsb3NlKHdvcmtRdWV1ZS0+bV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yKTsKKyAgICBj
bG9zZSh3b3JrUXVldWUtPm1fd3JpdGVUb1BpcGVEZXNjcmlwdG9yKTsKKworICAgIHJldHVybiAw
OworfQorCit2b2lkIFdvcmtRdWV1ZTo6cmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIoaW50IGZp
bGVEZXNjcmlwdG9yLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKK3sKKyAgICBp
ZiAobV9zb2NrZXREZXNjcmlwdG9yICE9IGludmFsaWRTb2NrZXREZXNjcmlwdG9yKQorICAgICAg
ICBMT0dfRVJST1IoIiVkIGlzIGFscmVhZHkgcmVnaXN0ZXJkLiIsIGZpbGVEZXNjcmlwdG9yKTsK
KworICAgIG1fc29ja2V0RGVzY3JpcHRvciA9IGZpbGVEZXNjcmlwdG9yOworICAgIG1fc29ja2V0
RXZlbnRIYW5kbGVyID0gZnVuY3Rpb247CisKKyAgICBpZiAoZmlsZURlc2NyaXB0b3IgPiBtX21h
eEZpbGVEZXNjcmlwdG9yKQorICAgICAgICBtX21heEZpbGVEZXNjcmlwdG9yID0gZmlsZURlc2Ny
aXB0b3I7CisgICAgRkRfU0VUKGZpbGVEZXNjcmlwdG9yLCAmbV9maWxlRGVzY3JpcHRvclNldCk7
Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjp1bnJlZ2lzdGVyU29ja2V0RXZlbnRIYW5kbGVyKGludCBm
aWxlRGVzY3JpcHRvcikKK3sKKyAgICBtX3NvY2tldERlc2NyaXB0b3IgPSBpbnZhbGlkU29ja2V0
RGVzY3JpcHRvcjsKKworICAgIGlmIChmaWxlRGVzY3JpcHRvciA9PSBtX21heEZpbGVEZXNjcmlw
dG9yKQorICAgICAgICBtX21heEZpbGVEZXNjcmlwdG9yID0gbV9yZWFkRnJvbVBpcGVEZXNjcmlw
dG9yOworICAgIEZEX0NMUihmaWxlRGVzY3JpcHRvciwgJm1fZmlsZURlc2NyaXB0b3JTZXQpOwor
fQorCit2b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2goY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVu
Y3Rpb24pCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fd29ya0l0ZW1RdWV1ZUxvY2spOwor
ICAgIG1fd29ya0l0ZW1RdWV1ZS5hcHBlbmQoZnVuY3Rpb24pOworICAgIHNlbmRNZXNzYWdlVG9U
aHJlYWQod2FrdXBUaHJlYWRNZXNzYWdlKTsKK30KKworYm9vbCBXb3JrUXVldWU6OnRpbWVyRmly
ZWQodm9pZCogZGF0YSkKK3sKKyAgICBUaW1lcldvcmtJdGVtKiBpdGVtID0gc3RhdGljX2Nhc3Q8
VGltZXJXb3JrSXRlbSo+KGRhdGEpOworICAgIGlmIChpdGVtICYmIGl0ZW0tPnF1ZXVlKCktPm1f
aXNWYWxpZCkgeworICAgICAgICBpdGVtLT5xdWV1ZSgpLT5kaXNwYXRjaChpdGVtLT5mdW5jdGlv
bigpKTsKKyAgICAgICAgaXRlbS0+cXVldWUoKS0+bV90aW1lcnMudGFrZShpdGVtLT50aW1lcklE
KCkpOworICAgICAgICBkZWxldGUgaXRlbTsKKyAgICB9CisKKyAgICByZXR1cm4gRUNPUkVfQ0FM
TEJBQ0tfQ0FOQ0VMOworfQorCit2b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2hBZnRlckRlbGF5KGNv
bnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uLCBkb3VibGUgZGVsYXkpCit7CisgICAgc3Rh
dGljIGludCB0aW1lcklkID0gMDsKKyAgICBtX3RpbWVycy5zZXQodGltZXJJZCwgYWRvcHRQdHIo
ZWNvcmVfdGltZXJfYWRkKGRlbGF5LCByZWludGVycHJldF9jYXN0PEVjb3JlX1Rhc2tfQ2I+KHRp
bWVyRmlyZWQpLCBuZXcgVGltZXJXb3JrSXRlbSh0aW1lcklkLCBmdW5jdGlvbiwgdGhpcykpKSk7
CisgICAgdGltZXJJZCsrOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvZ3RrL1dvcmtR
dWV1ZUd0ay5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9ndGsvV29ya1F1ZXVlR3RrLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5iOTFmNjM1MWQ3M2IwMjEwZWVhYzY2OTY3MzU4ODdlZjhlYTZhNmQ0Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dURi93dGYvZ3RrL1dvcmtRdWV1ZUd0ay5jcHAKQEAgLTAsMCArMSwy
MjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBD
b3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXb3JrUXVl
dWUuaCIKKworI2luY2x1ZGUgPGdpby9naW8uaD4KKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVk
ZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorCisvLyBXb3JrUXVldWU6OkV2ZW50U291cmNlCitj
bGFzcyBXb3JrUXVldWU6OkV2ZW50U291cmNlIHsKK3B1YmxpYzoKKyAgICBFdmVudFNvdXJjZShj
b25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbiwgV29ya1F1ZXVlKiB3b3JrUXVldWUsIEdD
YW5jZWxsYWJsZSogY2FuY2VsbGFibGUpCisgICAgICAgIDogbV9mdW5jdGlvbihmdW5jdGlvbikK
KyAgICAgICAgLCBtX3dvcmtRdWV1ZSh3b3JrUXVldWUpCisgICAgICAgICwgbV9jYW5jZWxsYWJs
ZShjYW5jZWxsYWJsZSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBjYW5jZWwoKQorICAgIHsK
KyAgICAgICAgaWYgKCFtX2NhbmNlbGxhYmxlKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBnX2NhbmNlbGxhYmxlX2NhbmNlbChtX2NhbmNlbGxhYmxlKTsKKyAgICB9CisKKyAgICBzdGF0
aWMgdm9pZCBleGVjdXRlRXZlbnRTb3VyY2UoRXZlbnRTb3VyY2UqIGV2ZW50U291cmNlKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKGV2ZW50U291cmNlKTsKKyAgICAgICAgV29ya1F1ZXVlKiBxdWV1
ZSA9IGV2ZW50U291cmNlLT5tX3dvcmtRdWV1ZTsKKyAgICAgICAgeworICAgICAgICAgICAgTXV0
ZXhMb2NrZXIgbG9ja2VyKHF1ZXVlLT5tX2lzVmFsaWRNdXRleCk7CisgICAgICAgICAgICBpZiAo
IXF1ZXVlLT5tX2lzVmFsaWQpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgZXZlbnRTb3VyY2UtPm1fZnVuY3Rpb24oKTsKKyAgICB9CisKKyAgICBzdGF0aWMg
Z2Jvb2xlYW4gcGVyZm9ybVdvcmtPbmNlKEV2ZW50U291cmNlKiBldmVudFNvdXJjZSkKKyAgICB7
CisgICAgICAgIGV4ZWN1dGVFdmVudFNvdXJjZShldmVudFNvdXJjZSk7CisgICAgICAgIHJldHVy
biBGQUxTRTsKKyAgICB9CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gcGVyZm9ybVdvcmsoR1NvY2tl
dCogc29ja2V0LCBHSU9Db25kaXRpb24gY29uZGl0aW9uLCBFdmVudFNvdXJjZSogZXZlbnRTb3Vy
Y2UpCisgICAgeworICAgICAgICBpZiAoIShjb25kaXRpb24gJiBHX0lPX0lOKSAmJiAhKGNvbmRp
dGlvbiAmIEdfSU9fSFVQKSAmJiAhKGNvbmRpdGlvbiAmIEdfSU9fRVJSKSkgeworICAgICAgICAg
ICAgLy8gRXZlbnRTb3VyY2UgaGFzIGJlZW4gY2FuY2VsbGVkLCByZXR1cm4gRkFMU0UgdG8gZGVz
dHJveSB0aGUgc291cmNlLgorICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisK
KyAgICAgICAgZXhlY3V0ZUV2ZW50U291cmNlKGV2ZW50U291cmNlKTsKKyAgICAgICAgcmV0dXJu
IFRSVUU7CisgICAgfQorCisgICAgc3RhdGljIGdib29sZWFuIHBlcmZvcm1Xb3JrT25UZXJtaW5h
dGlvbihHUGlkLCBnaW50LCBFdmVudFNvdXJjZSogZXZlbnRTb3VyY2UpCisgICAgeworICAgICAg
ICBleGVjdXRlRXZlbnRTb3VyY2UoZXZlbnRTb3VyY2UpOworICAgICAgICByZXR1cm4gRkFMU0U7
CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgZGVsZXRlRXZlbnRTb3VyY2UoRXZlbnRTb3VyY2Uq
IGV2ZW50U291cmNlKSAKKyAgICB7CisgICAgICAgIEFTU0VSVChldmVudFNvdXJjZSk7CisgICAg
ICAgIGRlbGV0ZSBldmVudFNvdXJjZTsKKyAgICB9CisgICAKK3B1YmxpYzoKKyAgICBGdW5jdGlv
bjx2b2lkKCk+IG1fZnVuY3Rpb247CisgICAgV29ya1F1ZXVlKiBtX3dvcmtRdWV1ZTsKKyAgICBH
Q2FuY2VsbGFibGUqIG1fY2FuY2VsbGFibGU7Cit9OworCisvLyBXb3JrUXVldWUKK3N0YXRpYyBj
b25zdCBzaXplX3Qga1Zpc3VhbFN0dWRpb1RocmVhZE5hbWVMaW1pdCA9IDMxOworCit2b2lkIFdv
cmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXplKGNvbnN0IGNoYXIqIG5hbWUpCit7CisgICAgbV9l
dmVudENvbnRleHQgPSBhZG9wdEdSZWYoZ19tYWluX2NvbnRleHRfbmV3KCkpOworICAgIEFTU0VS
VChtX2V2ZW50Q29udGV4dCk7CisgICAgbV9ldmVudExvb3AgPSBhZG9wdEdSZWYoZ19tYWluX2xv
b3BfbmV3KG1fZXZlbnRDb250ZXh0LmdldCgpLCBGQUxTRSkpOworICAgIEFTU0VSVChtX2V2ZW50
TG9vcCk7CisKKyAgICAvLyBUaGlzIG5hbWUgY2FuIGJlIGNvbS5hcHBsZS5XZWJLaXQuUHJvY2Vz
c0xhdW5jaGVyIG9yIGNvbS5hcHBsZS5Db3JlSVBDLlJlY2VpdmVRdWV1ZS4KKyAgICAvLyBXZSBh
cmUgdXNpbmcgdGhvc2UgbmFtZXMgZm9yIHRoZSB0aHJlYWQgbmFtZSwgYnV0IGJvdGggYXJlIGxv
bmdlciB0aGFuIDMxIGNoYXJhY3RlcnMsCisgICAgLy8gd2hpY2ggaXMgdGhlIGxpbWl0IG9mIFZp
c3VhbCBTdHVkaW8gZm9yIHRocmVhZCBuYW1lcy4KKyAgICAvLyBXaGVuIGxvZyBpcyBlbmFibGVk
IGNyZWF0ZVRocmVhZCgpIHdpbGwgYXNzZXJ0IGluc3RlYWQgb2YgdHJ1bmNhdGUgdGhlIG5hbWUs
IHNvIHdlIG5lZWQKKyAgICAvLyB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgdXNlIGEgbmFtZSBsb25n
ZXIgdGhhbiAzMSBjaGFyYWN0ZXJzLgorICAgIGNvbnN0IGNoYXIqIHRocmVhZE5hbWUgPSBnX3N0
cnJzdHIobmFtZSwgIi4iKTsKKyAgICBpZiAodGhyZWFkTmFtZSkKKyAgICAgICAgdGhyZWFkTmFt
ZSsrOworICAgIGVsc2UKKyAgICAgICAgdGhyZWFkTmFtZSA9IG5hbWU7CisgICAgaWYgKHN0cmxl
bih0aHJlYWROYW1lKSA+IGtWaXN1YWxTdHVkaW9UaHJlYWROYW1lTGltaXQpCisgICAgICAgIHRo
cmVhZE5hbWUgKz0gc3RybGVuKHRocmVhZE5hbWUpIC0ga1Zpc3VhbFN0dWRpb1RocmVhZE5hbWVM
aW1pdDsKKworICAgIG1fd29ya1F1ZXVlVGhyZWFkID0gY3JlYXRlVGhyZWFkKHJlaW50ZXJwcmV0
X2Nhc3Q8V1RGOjpUaHJlYWRGdW5jdGlvbj4oJldvcmtRdWV1ZTo6c3RhcnRXb3JrUXVldWVUaHJl
YWQpLCB0aGlzLCB0aHJlYWROYW1lKTsKK30KKwordm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW52
YWxpZGF0ZSgpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZXZlbnRMb29wTG9jayk7CisK
KyAgICBpZiAobV9ldmVudExvb3ApIHsKKyAgICAgICAgaWYgKGdfbWFpbl9sb29wX2lzX3J1bm5p
bmcobV9ldmVudExvb3AuZ2V0KCkpKQorICAgICAgICAgICAgZ19tYWluX2xvb3BfcXVpdChtX2V2
ZW50TG9vcC5nZXQoKSk7CisgICAgICAgIG1fZXZlbnRMb29wLmNsZWFyKCk7CisgICAgfQorCisg
ICAgbV9ldmVudENvbnRleHQuY2xlYXIoKTsKK30KKwordm9pZCBXb3JrUXVldWU6OnN0YXJ0V29y
a1F1ZXVlVGhyZWFkKFdvcmtRdWV1ZSogd29ya1F1ZXVlKQoreworICAgIHdvcmtRdWV1ZS0+d29y
a1F1ZXVlVGhyZWFkQm9keSgpOworfQorCit2b2lkIFdvcmtRdWV1ZTo6d29ya1F1ZXVlVGhyZWFk
Qm9keSgpCit7CisgICAgZ19tYWluX2xvb3BfcnVuKG1fZXZlbnRMb29wLmdldCgpKTsKK30KKwor
dm9pZCBXb3JrUXVldWU6OnJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKGludCBmaWxlRGVzY3Jp
cHRvciwgaW50IGNvbmRpdGlvbiwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCit7
CisgICAgR1JlZlB0cjxHU29ja2V0PiBzb2NrZXQgPSBhZG9wdEdSZWYoZ19zb2NrZXRfbmV3X2Zy
b21fZmQoZmlsZURlc2NyaXB0b3IsIDApKTsKKyAgICBBU1NFUlQoc29ja2V0KTsKKyAgICBHUmVm
UHRyPEdDYW5jZWxsYWJsZT4gY2FuY2VsbGFibGUgPSBhZG9wdEdSZWYoZ19jYW5jZWxsYWJsZV9u
ZXcoKSk7CisgICAgR1JlZlB0cjxHU291cmNlPiBkaXNwYXRjaFNvdXJjZSA9IGFkb3B0R1JlZihn
X3NvY2tldF9jcmVhdGVfc291cmNlKHNvY2tldC5nZXQoKSwgc3RhdGljX2Nhc3Q8R0lPQ29uZGl0
aW9uPihjb25kaXRpb24pLCBjYW5jZWxsYWJsZS5nZXQoKSkpOworICAgIEFTU0VSVChkaXNwYXRj
aFNvdXJjZSk7CisgICAgRXZlbnRTb3VyY2UqIGV2ZW50U291cmNlID0gbmV3IEV2ZW50U291cmNl
KGZ1bmN0aW9uLCB0aGlzLCBjYW5jZWxsYWJsZS5nZXQoKSk7CisgICAgQVNTRVJUKGV2ZW50U291
cmNlKTsKKworICAgIGdfc291cmNlX3NldF9jYWxsYmFjayhkaXNwYXRjaFNvdXJjZS5nZXQoKSwg
cmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oJldvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OnBl
cmZvcm1Xb3JrKSwKKyAgICAgICAgZXZlbnRTb3VyY2UsIHJlaW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ry
b3lOb3RpZnk+KCZXb3JrUXVldWU6OkV2ZW50U291cmNlOjpkZWxldGVFdmVudFNvdXJjZSkpOwor
CisgICAgLy8gU2V0IHVwIHRoZSBldmVudCBzb3VyY2VzIHVuZGVyIHRoZSBtdXRleCBzaW5jZSB0
aGlzIGlzIHNoYXJlZCBhY3Jvc3MgbXVsdGlwbGUgdGhyZWFkcy4KKyAgICB7CisgICAgICAgIE11
dGV4TG9ja2VyIGxvY2tlcihtX2V2ZW50U291cmNlc0xvY2spOworICAgICAgICBWZWN0b3I8RXZl
bnRTb3VyY2UqPiBzb3VyY2VzOworICAgICAgICBFdmVudFNvdXJjZUl0ZXJhdG9yIGl0ID0gbV9l
dmVudFNvdXJjZXMuZmluZChmaWxlRGVzY3JpcHRvcik7CisgICAgICAgIGlmIChpdCAhPSBtX2V2
ZW50U291cmNlcy5lbmQoKSkgCisgICAgICAgICAgICBzb3VyY2VzID0gaXQtPnNlY29uZDsKKwor
ICAgICAgICBzb3VyY2VzLmFwcGVuZChldmVudFNvdXJjZSk7CisgICAgICAgIG1fZXZlbnRTb3Vy
Y2VzLnNldChmaWxlRGVzY3JpcHRvciwgc291cmNlcyk7CisgICAgfQorCisgICAgZ19zb3VyY2Vf
YXR0YWNoKGRpc3BhdGNoU291cmNlLmdldCgpLCBtX2V2ZW50Q29udGV4dC5nZXQoKSk7Cit9CisK
K3ZvaWQgV29ya1F1ZXVlOjp1bnJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKGludCBmaWxlRGVz
Y3JpcHRvcikKK3sKKyAgICBBU1NFUlQoZmlsZURlc2NyaXB0b3IpOworICAgIAorICAgIE11dGV4
TG9ja2VyIGxvY2tlcihtX2V2ZW50U291cmNlc0xvY2spOworICAgIAorICAgIEV2ZW50U291cmNl
SXRlcmF0b3IgaXQgPSBtX2V2ZW50U291cmNlcy5maW5kKGZpbGVEZXNjcmlwdG9yKTsKKyAgICBB
U1NFUlQoaXQgIT0gbV9ldmVudFNvdXJjZXMuZW5kKCkpOworICAgIEFTU0VSVChtX2V2ZW50U291
cmNlcy5jb250YWlucyhmaWxlRGVzY3JpcHRvcikpOworCisgICAgaWYgKGl0ICE9IG1fZXZlbnRT
b3VyY2VzLmVuZCgpKSB7CisgICAgICAgIFZlY3RvcjxFdmVudFNvdXJjZSo+IHNvdXJjZXMgPSBp
dC0+c2Vjb25kOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc291cmNlcy5zaXpl
KCk7IGkrKykKKyAgICAgICAgICAgIHNvdXJjZXNbaV0tPmNhbmNlbCgpOworCisgICAgICAgIG1f
ZXZlbnRTb3VyY2VzLnJlbW92ZShpdCk7CisgICAgfQorfQorCit2b2lkIFdvcmtRdWV1ZTo6ZGlz
cGF0Y2hPblNvdXJjZShHU291cmNlKiBkaXNwYXRjaFNvdXJjZSwgY29uc3QgRnVuY3Rpb248dm9p
ZCgpPiYgZnVuY3Rpb24sIEdTb3VyY2VGdW5jIHNvdXJjZUNhbGxiYWNrKQoreworICAgIEV2ZW50
U291cmNlKiBldmVudFNvdXJjZSA9IG5ldyBFdmVudFNvdXJjZShmdW5jdGlvbiwgdGhpcywgMCk7
CisKKyAgICBnX3NvdXJjZV9zZXRfY2FsbGJhY2soZGlzcGF0Y2hTb3VyY2UsIHNvdXJjZUNhbGxi
YWNrLCBldmVudFNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRf
Y2FzdDxHRGVzdHJveU5vdGlmeT4oJldvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OmRlbGV0ZUV2ZW50
U291cmNlKSk7CisKKyAgICBnX3NvdXJjZV9hdHRhY2goZGlzcGF0Y2hTb3VyY2UsIG1fZXZlbnRD
b250ZXh0LmdldCgpKTsKK30KKwordm9pZCBXb3JrUXVldWU6OmRpc3BhdGNoKGNvbnN0IEZ1bmN0
aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQoreworICAgIEdSZWZQdHI8R1NvdXJjZT4gZGlzcGF0Y2hT
b3VyY2UgPSBhZG9wdEdSZWYoZ19pZGxlX3NvdXJjZV9uZXcoKSk7CisgICAgQVNTRVJUKGRpc3Bh
dGNoU291cmNlKTsKKyAgICBnX3NvdXJjZV9zZXRfcHJpb3JpdHkoZGlzcGF0Y2hTb3VyY2UuZ2V0
KCksIEdfUFJJT1JJVFlfREVGQVVMVCk7CisKKyAgICBkaXNwYXRjaE9uU291cmNlKGRpc3BhdGNo
U291cmNlLmdldCgpLCBmdW5jdGlvbiwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oJldv
cmtRdWV1ZTo6RXZlbnRTb3VyY2U6OnBlcmZvcm1Xb3JrT25jZSkpOworfQorCit2b2lkIFdvcmtR
dWV1ZTo6ZGlzcGF0Y2hBZnRlckRlbGF5KGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9u
LCBkb3VibGUgZGVsYXkpCit7CisgICAgR1JlZlB0cjxHU291cmNlPiBkaXNwYXRjaFNvdXJjZSA9
IGFkb3B0R1JlZihnX3RpbWVvdXRfc291cmNlX25ldyhzdGF0aWNfY2FzdDxndWludD4oZGVsYXkg
KiAxMDAwKSkpOworICAgIEFTU0VSVChkaXNwYXRjaFNvdXJjZSk7CisKKyAgICBkaXNwYXRjaE9u
U291cmNlKGRpc3BhdGNoU291cmNlLmdldCgpLCBmdW5jdGlvbiwgcmVpbnRlcnByZXRfY2FzdDxH
U291cmNlRnVuYz4oJldvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OnBlcmZvcm1Xb3JrT25jZSkpOwor
fQorCit2b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2hPblRlcm1pbmF0aW9uKFBsYXRmb3JtUHJvY2Vz
c0lkZW50aWZpZXIgcHJvY2VzcywgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCit7
CisgICAgR1JlZlB0cjxHU291cmNlPiBkaXNwYXRjaFNvdXJjZSA9IGFkb3B0R1JlZihnX2NoaWxk
X3dhdGNoX3NvdXJjZV9uZXcocHJvY2VzcykpOworICAgIEFTU0VSVChkaXNwYXRjaFNvdXJjZSk7
CisKKyAgICBkaXNwYXRjaE9uU291cmNlKGRpc3BhdGNoU291cmNlLmdldCgpLCBmdW5jdGlvbiwg
cmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oJldvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OnBl
cmZvcm1Xb3JrT25UZXJtaW5hdGlvbikpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
bWFjL1dvcmtRdWV1ZU1hYy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9tYWMvV29ya1F1ZXVlTWFjLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi40YWVlN2IyNDgzOWIwYTMyM2JhMmJhYjg5MDk1OWNhM2RiYzczM2Q1Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvbWFjL1dvcmtRdWV1ZU1hYy5jcHAKQEAg
LTAsMCArMSwxODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiV29ya1F1ZXVlLmgiCisKKyNpbmNsdWRlIDxtYWNoL21hY2hfaW5pdC5oPgorI2luY2x1ZGUg
PG1hY2gvbWFjaF9wb3J0Lmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNw
YWNlIFdURiB7CisKK3ZvaWQgV29ya1F1ZXVlOjpleGVjdXRlRnVuY3Rpb24odm9pZCogY29udGV4
dCkKK3sKKyAgICBXb3JrUXVldWUqIHF1ZXVlID0gc3RhdGljX2Nhc3Q8V29ya1F1ZXVlKj4oZGlz
cGF0Y2hfZ2V0X2NvbnRleHQoZGlzcGF0Y2hfZ2V0X2N1cnJlbnRfcXVldWUoKSkpOworICAgIE93
blB0cjxGdW5jdGlvbjx2b2lkKCk+ID4gZnVuY3Rpb24gPSBhZG9wdFB0cihzdGF0aWNfY2FzdDxG
dW5jdGlvbjx2b2lkKCk+Kj4oY29udGV4dCkpOworICAgIAorICAgIHsKKyAgICAgICAgTXV0ZXhM
b2NrZXIgbG9ja2VyKHF1ZXVlLT5tX2lzVmFsaWRNdXRleCk7CisgICAgICAgIGlmICghcXVldWUt
Pm1faXNWYWxpZCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAoKmZ1bmN0aW9u
KSgpOworfQorCit2b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2goY29uc3QgRnVuY3Rpb248dm9pZCgp
PiYgZnVuY3Rpb24pCit7CisgICAgZGlzcGF0Y2hfYXN5bmNfZihtX2Rpc3BhdGNoUXVldWUsIG5l
dyBGdW5jdGlvbjx2b2lkKCk+KGZ1bmN0aW9uKSwgZXhlY3V0ZUZ1bmN0aW9uKTsKK30KKwordm9p
ZCBXb3JrUXVldWU6OmRpc3BhdGNoQWZ0ZXJEZWxheShjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBm
dW5jdGlvbiwgZG91YmxlIGRlbGF5KQoreworICAgIGRpc3BhdGNoX3RpbWVfdCBkZWxheVRpbWUg
PSBkaXNwYXRjaF90aW1lKERJU1BBVENIX1RJTUVfTk9XLCBkZWxheSAqIE5TRUNfUEVSX1NFQyk7
CisKKyAgICBkaXNwYXRjaF9hZnRlcl9mKGRlbGF5VGltZSwgbV9kaXNwYXRjaFF1ZXVlLCBuZXcg
RnVuY3Rpb248dm9pZCgpPihmdW5jdGlvbiksIGV4ZWN1dGVGdW5jdGlvbik7Cit9CisKK2NsYXNz
IFdvcmtRdWV1ZTo6RXZlbnRTb3VyY2UgeworcHVibGljOgorICAgIEV2ZW50U291cmNlKE1hY2hQ
b3J0RXZlbnRUeXBlIGV2ZW50VHlwZSwgZGlzcGF0Y2hfc291cmNlX3QgZGlzcGF0Y2hTb3VyY2Us
IGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQorICAgICAgICA6IG1fZXZlbnRUeXBl
KGV2ZW50VHlwZSkKKyAgICAgICAgLCBtX2Rpc3BhdGNoU291cmNlKGRpc3BhdGNoU291cmNlKQor
ICAgICAgICAsIG1fZnVuY3Rpb24oZnVuY3Rpb24pCisgICAgeworICAgIH0KKyAgICAKKyAgICBk
aXNwYXRjaF9zb3VyY2VfdCBkaXNwYXRjaFNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzcGF0
Y2hTb3VyY2U7IH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCBldmVudEhhbmRsZXIodm9pZCogc291
cmNlKSAKKyAgICB7CisgICAgICAgIEV2ZW50U291cmNlKiBldmVudFNvdXJjZSA9IHN0YXRpY19j
YXN0PEV2ZW50U291cmNlKj4oc291cmNlKTsKKyAgICAgICAgCisgICAgICAgIGV2ZW50U291cmNl
LT5tX2Z1bmN0aW9uKCk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyB2b2lkIGNhbmNlbEhhbmRs
ZXIodm9pZCogc291cmNlKQorICAgIHsKKyAgICAgICAgRXZlbnRTb3VyY2UqIGV2ZW50U291cmNl
ID0gc3RhdGljX2Nhc3Q8RXZlbnRTb3VyY2UqPihzb3VyY2UpOworICAgICAgICAKKyAgICAgICAg
bWFjaF9wb3J0X3QgbWFjaFBvcnQgPSBkaXNwYXRjaF9zb3VyY2VfZ2V0X2hhbmRsZShldmVudFNv
dXJjZS0+bV9kaXNwYXRjaFNvdXJjZSk7CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKGV2ZW50
U291cmNlLT5tX2V2ZW50VHlwZSkgeworICAgICAgICBjYXNlIE1hY2hQb3J0RGF0YUF2YWlsYWJs
ZToKKyAgICAgICAgICAgIC8vIFJlbGVhc2Ugb3VyIHJlY2VpdmUgcmlnaHQuCisgICAgICAgICAg
ICBtYWNoX3BvcnRfbW9kX3JlZnMobWFjaF90YXNrX3NlbGYoKSwgbWFjaFBvcnQsIE1BQ0hfUE9S
VF9SSUdIVF9SRUNFSVZFLCAtMSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBN
YWNoUG9ydERlYWROYW1lTm90aWZpY2F0aW9uOgorICAgICAgICAgICAgLy8gUmVsZWFzZSBvdXIg
c2VuZCByaWdodC4KKyAgICAgICAgICAgIG1hY2hfcG9ydF9kZWFsbG9jYXRlKG1hY2hfdGFza19z
ZWxmKCksIG1hY2hQb3J0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQor
ICAgIAorICAgIHN0YXRpYyB2b2lkIGZpbmFsaXplSGFuZGxlcih2b2lkKiBzb3VyY2UpCisgICAg
eworICAgICAgICBFdmVudFNvdXJjZSogZXZlbnRTb3VyY2UgPSBzdGF0aWNfY2FzdDxFdmVudFNv
dXJjZSo+KHNvdXJjZSk7CisgICAgICAgIAorICAgICAgICBkZWxldGUgZXZlbnRTb3VyY2U7Cisg
ICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBNYWNoUG9ydEV2ZW50VHlwZSBtX2V2ZW50VHlwZTsK
KyAgICAKKyAgICAvLyBUaGlzIGlzIGEgd2VhayByZWZlcmVuY2UsIHNpbmNlIG1fZGlzcGF0Y2hT
b3VyY2UgcmVmZXJlbmNlcyB0aGUgZXZlbnQgc291cmNlLgorICAgIGRpc3BhdGNoX3NvdXJjZV90
IG1fZGlzcGF0Y2hTb3VyY2U7CisKKyAgICBGdW5jdGlvbjx2b2lkKCk+IG1fZnVuY3Rpb247Cit9
OworCit2b2lkIFdvcmtRdWV1ZTo6cmVnaXN0ZXJNYWNoUG9ydEV2ZW50SGFuZGxlcihtYWNoX3Bv
cnRfdCBtYWNoUG9ydCwgTWFjaFBvcnRFdmVudFR5cGUgZXZlbnRUeXBlLCBjb25zdCBGdW5jdGlv
bjx2b2lkKCk+JiBmdW5jdGlvbikKK3sKKyAgICBkaXNwYXRjaF9zb3VyY2VfdHlwZV90IHNvdXJj
ZVR5cGUgPSAwOworICAgIHN3aXRjaCAoZXZlbnRUeXBlKSB7CisgICAgY2FzZSBNYWNoUG9ydERh
dGFBdmFpbGFibGU6CisgICAgICAgIHNvdXJjZVR5cGUgPSBESVNQQVRDSF9TT1VSQ0VfVFlQRV9N
QUNIX1JFQ1Y7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTWFjaFBvcnREZWFkTmFtZU5vdGlm
aWNhdGlvbjoKKyAgICAgICAgc291cmNlVHlwZSA9IERJU1BBVENIX1NPVVJDRV9UWVBFX01BQ0hf
U0VORDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIGRpc3BhdGNoX3NvdXJjZV90
IGRpc3BhdGNoU291cmNlID0gZGlzcGF0Y2hfc291cmNlX2NyZWF0ZShzb3VyY2VUeXBlLCBtYWNo
UG9ydCwgMCwgbV9kaXNwYXRjaFF1ZXVlKTsKKyAgICAKKyAgICBFdmVudFNvdXJjZSogZXZlbnRT
b3VyY2UgPSBuZXcgRXZlbnRTb3VyY2UoZXZlbnRUeXBlLCBkaXNwYXRjaFNvdXJjZSwgZnVuY3Rp
b24pOworICAgIGRpc3BhdGNoX3NldF9jb250ZXh0KGRpc3BhdGNoU291cmNlLCBldmVudFNvdXJj
ZSk7CisgICAgCisgICAgZGlzcGF0Y2hfc291cmNlX3NldF9ldmVudF9oYW5kbGVyX2YoZGlzcGF0
Y2hTb3VyY2UsICZFdmVudFNvdXJjZTo6ZXZlbnRIYW5kbGVyKTsKKyAgICBkaXNwYXRjaF9zb3Vy
Y2Vfc2V0X2NhbmNlbF9oYW5kbGVyX2YoZGlzcGF0Y2hTb3VyY2UsICZFdmVudFNvdXJjZTo6Y2Fu
Y2VsSGFuZGxlcik7CisgICAgZGlzcGF0Y2hfc2V0X2ZpbmFsaXplcl9mKGRpc3BhdGNoU291cmNl
LCAmRXZlbnRTb3VyY2U6OmZpbmFsaXplSGFuZGxlcik7CisgICAgCisgICAgLy8gQWRkIHRoZSBz
b3VyY2UgdG8gb3VyIHNldCBvZiBzb3VyY2VzLgorICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIg
bG9ja2VyKG1fZXZlbnRTb3VyY2VzTXV0ZXgpOworICAgICAgICAKKyAgICAgICAgQVNTRVJUKCFt
X2V2ZW50U291cmNlcy5jb250YWlucyhtYWNoUG9ydCkpOworICAgICAgICAKKyAgICAgICAgbV9l
dmVudFNvdXJjZXMuc2V0KG1hY2hQb3J0LCBldmVudFNvdXJjZSk7CisgICAgICAgIAorICAgICAg
ICAvLyBBbmQgc3RhcnQgaXQhCisgICAgICAgIGRpc3BhdGNoX3Jlc3VtZShkaXNwYXRjaFNvdXJj
ZSk7CisgICAgfQorfQorCit2b2lkIFdvcmtRdWV1ZTo6dW5yZWdpc3Rlck1hY2hQb3J0RXZlbnRI
YW5kbGVyKG1hY2hfcG9ydF90IG1hY2hQb3J0KQoreworICAgIEFTU0VSVChtYWNoUG9ydCk7Cisg
ICAgCisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZXZlbnRTb3VyY2VzTXV0ZXgpOworICAgIAor
ICAgIEhhc2hNYXA8bWFjaF9wb3J0X3QsIEV2ZW50U291cmNlKj46Oml0ZXJhdG9yIGl0ID0gbV9l
dmVudFNvdXJjZXMuZmluZChtYWNoUG9ydCk7CisgICAgQVNTRVJUKGl0ICE9IG1fZXZlbnRTb3Vy
Y2VzLmVuZCgpKTsKKyAgICAKKyAgICBBU1NFUlQobV9ldmVudFNvdXJjZXMuY29udGFpbnMobWFj
aFBvcnQpKTsKKworICAgIEV2ZW50U291cmNlKiBldmVudFNvdXJjZSA9IGl0LT5zZWNvbmQ7Cisg
ICAgLy8gQ2FuY2VsIGFuZCByZWxlYXNlIHRoZSBzb3VyY2UuIEl0IHdpbGwgYmUgZGVsZXRlZCBp
biBpdHMgZmluYWxpemUgaGFuZGxlci4KKyAgICBkaXNwYXRjaF9zb3VyY2VfY2FuY2VsKGV2ZW50
U291cmNlLT5kaXNwYXRjaFNvdXJjZSgpKTsKKyAgICBkaXNwYXRjaF9yZWxlYXNlKGV2ZW50U291
cmNlLT5kaXNwYXRjaFNvdXJjZSgpKTsKKworICAgIG1fZXZlbnRTb3VyY2VzLnJlbW92ZShpdCk7
ICAgIAorfQorCit2b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXplKGNvbnN0IGNoYXIq
IG5hbWUpCit7CisgICAgbV9kaXNwYXRjaFF1ZXVlID0gZGlzcGF0Y2hfcXVldWVfY3JlYXRlKG5h
bWUsIDApOworICAgIGRpc3BhdGNoX3NldF9jb250ZXh0KG1fZGlzcGF0Y2hRdWV1ZSwgdGhpcyk7
Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjpwbGF0Zm9ybUludmFsaWRhdGUoKQoreworI2lmICFBU1NF
UlRfRElTQUJMRUQKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9ldmVudFNvdXJjZXNNdXRleCk7
CisgICAgQVNTRVJUKG1fZXZlbnRTb3VyY2VzLmlzRW1wdHkoKSk7CisjZW5kaWYKKworICAgIGRp
c3BhdGNoX3JlbGVhc2UobV9kaXNwYXRjaFF1ZXVlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RG
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9xdC9Xb3JrUXVldWVRdC5jcHAgYi9Tb3VyY2Uv
V1RGL3d0Zi9xdC9Xb3JrUXVldWVRdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDUwOTFmZmRhNzM5NjBjNjBj
NDBmMWY0Y2VlZTk1MmM2MWMzZDY2YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L3F0L1dvcmtRdWV1ZVF0LmNwcApAQCAtMCwwICsxLDEzMiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXb3JrUXVldWUuaCIKKworI2lu
Y2x1ZGUgPFFPYmplY3Q+CisjaW5jbHVkZSA8UVByb2Nlc3M+CisjaW5jbHVkZSA8UVRocmVhZD4K
KyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBX
b3JrUXVldWU6OldvcmtJdGVtUXQgOiBwdWJsaWMgUU9iamVjdCB7CisgICAgUV9PQkpFQ1QKK3B1
YmxpYzoKKyAgICBXb3JrSXRlbVF0KFdvcmtRdWV1ZSogd29ya1F1ZXVlLCBjb25zdCBGdW5jdGlv
bjx2b2lkKCk+JiBmdW5jdGlvbikKKyAgICAgICAgOiBtX3F1ZXVlKHdvcmtRdWV1ZSkKKyAgICAg
ICAgLCBtX3NvdXJjZSgwKQorICAgICAgICAsIG1fc2lnbmFsKDApCisgICAgICAgICwgbV9mdW5j
dGlvbihmdW5jdGlvbikKKyAgICB7CisgICAgfQorCisgICAgV29ya0l0ZW1RdChXb3JrUXVldWUq
IHdvcmtRdWV1ZSwgUU9iamVjdCogc291cmNlLCBjb25zdCBjaGFyKiBzaWduYWwsIGNvbnN0IEZ1
bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQorICAgICAgICA6IG1fcXVldWUod29ya1F1ZXVlKQor
ICAgICAgICAsIG1fc291cmNlKHNvdXJjZSkKKyAgICAgICAgLCBtX3NpZ25hbChzaWduYWwpCisg
ICAgICAgICwgbV9mdW5jdGlvbihmdW5jdGlvbikKKyAgICB7CisgICAgICAgIGNvbm5lY3QobV9z
b3VyY2UsIG1fc2lnbmFsLCBTTE9UKGV4ZWN1dGUoKSksIFF0OjpRdWV1ZWRDb25uZWN0aW9uKTsK
KyAgICB9CisKKyAgICB+V29ya0l0ZW1RdCgpCisgICAgeworICAgIH0KKworICAgIFFfU0xPVCB2
b2lkIGV4ZWN1dGUoKSAKKyAgICB7IAorICAgICAgICBpZiAobV9xdWV1ZS0+bV9pc1ZhbGlkKQor
ICAgICAgICAgICAgbV9mdW5jdGlvbigpOworICAgIH0KKworICAgIFFfU0xPVCB2b2lkIGV4ZWN1
dGVBbmREZWxldGUoKQorICAgIHsKKyAgICAgICAgZXhlY3V0ZSgpOworICAgICAgICBkZWxldGUg
dGhpczsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgdGltZXJFdmVudChRVGltZXJFdmVudCop
CisgICAgeworICAgICAgICBleGVjdXRlQW5kRGVsZXRlKCk7CisgICAgfQorCisgICAgV29ya1F1
ZXVlKiBtX3F1ZXVlOworICAgIFFPYmplY3QqIG1fc291cmNlOworICAgIGNvbnN0IGNoYXIqIG1f
c2lnbmFsOworICAgIEZ1bmN0aW9uPHZvaWQoKT4gbV9mdW5jdGlvbjsKK307CisKK1FTb2NrZXRO
b3RpZmllciogV29ya1F1ZXVlOjpyZWdpc3RlclNvY2tldEV2ZW50SGFuZGxlcihpbnQgc29ja2V0
RGVzY3JpcHRvciwgUVNvY2tldE5vdGlmaWVyOjpUeXBlIHR5cGUsIGNvbnN0IEZ1bmN0aW9uPHZv
aWQoKT4mIGZ1bmN0aW9uKQoreworICAgIEFTU0VSVChtX3dvcmtUaHJlYWQpOworCisgICAgUVNv
Y2tldE5vdGlmaWVyKiBub3RpZmllciA9IG5ldyBRU29ja2V0Tm90aWZpZXIoc29ja2V0RGVzY3Jp
cHRvciwgdHlwZSwgMCk7CisgICAgbm90aWZpZXItPnNldEVuYWJsZWQoZmFsc2UpOworICAgIG5v
dGlmaWVyLT5tb3ZlVG9UaHJlYWQobV93b3JrVGhyZWFkKTsKKyAgICBXb3JrUXVldWU6OldvcmtJ
dGVtUXQqIGl0ZW1RdCA9IG5ldyBXb3JrUXVldWU6OldvcmtJdGVtUXQodGhpcywgbm90aWZpZXIs
IFNJR05BTChhY3RpdmF0ZWQoaW50KSksIGZ1bmN0aW9uKTsKKyAgICBpdGVtUXQtPm1vdmVUb1Ro
cmVhZChtX3dvcmtUaHJlYWQpOworICAgIG5vdGlmaWVyLT5zZXRFbmFibGVkKHRydWUpOworICAg
IHJldHVybiBub3RpZmllcjsKK30KKwordm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW5pdGlhbGl6
ZShjb25zdCBjaGFyKikKK3sKKyAgICBtX3dvcmtUaHJlYWQgPSBuZXcgUVRocmVhZCgpOworICAg
IG1fd29ya1RocmVhZC0+c3RhcnQoKTsKK30KKwordm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW52
YWxpZGF0ZSgpCit7CisgICAgbV93b3JrVGhyZWFkLT5leGl0KCk7CisgICAgbV93b3JrVGhyZWFk
LT53YWl0KCk7CisgICAgZGVsZXRlIG1fd29ya1RocmVhZDsKK30KKwordm9pZCBXb3JrUXVldWU6
OmRpc3BhdGNoKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQoreworICAgIFdvcmtR
dWV1ZTo6V29ya0l0ZW1RdCogaXRlbVF0ID0gbmV3IFdvcmtRdWV1ZTo6V29ya0l0ZW1RdCh0aGlz
LCBmdW5jdGlvbik7CisgICAgaXRlbVF0LT5tb3ZlVG9UaHJlYWQobV93b3JrVGhyZWFkKTsKKyAg
ICBRTWV0YU9iamVjdDo6aW52b2tlTWV0aG9kKGl0ZW1RdCwgImV4ZWN1dGVBbmREZWxldGUiLCBR
dDo6UXVldWVkQ29ubmVjdGlvbik7Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjpkaXNwYXRjaEFmdGVy
RGVsYXkoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24sIGRvdWJsZSBkZWxheUluU2Vj
b25kKQoreworICAgIFdvcmtRdWV1ZTo6V29ya0l0ZW1RdCogaXRlbVF0ID0gbmV3IFdvcmtRdWV1
ZTo6V29ya0l0ZW1RdCh0aGlzLCBmdW5jdGlvbik7CisgICAgaXRlbVF0LT5zdGFydFRpbWVyKHN0
YXRpY19jYXN0PGludD4oZGVsYXlJblNlY29uZCAqIDEwMDApKTsKKyAgICBpdGVtUXQtPm1vdmVU
b1RocmVhZChtX3dvcmtUaHJlYWQpOworfQorCit2b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2hPblRl
cm1pbmF0aW9uKFBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIgcHJvY2VzcywgY29uc3QgRnVuY3Rp
b248dm9pZCgpPiYgZnVuY3Rpb24pCit7CisgICAgV29ya1F1ZXVlOjpXb3JrSXRlbVF0KiBpdGVt
UXQgPSBuZXcgV29ya1F1ZXVlOjpXb3JrSXRlbVF0KHRoaXMsIHByb2Nlc3MsIFNJR05BTChmaW5p
c2hlZChpbnQsIFFQcm9jZXNzOjpFeGl0U3RhdHVzKSksIGZ1bmN0aW9uKTsKKyAgICBpdGVtUXQt
Pm1vdmVUb1RocmVhZChtX3dvcmtUaHJlYWQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwor
I2luY2x1ZGUgIldvcmtRdWV1ZVF0Lm1vYyIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3dp
bi9Xb3JrUXVldWVXaW4uY3BwIGIvU291cmNlL1dURi93dGYvd2luL1dvcmtRdWV1ZVdpbi5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNmY3NjA1NzEzYmY5MzYwMmNkMzUxNDZmZmE0ZGE1OGI4YzZlNTJmMwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL3dpbi9Xb3JrUXVldWVXaW4uY3BwCkBAIC0w
LDAgKzEsMjk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IldvcmtRdWV1ZS5oIgorCisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCituYW1lc3BhY2Ug
V1RGIHsKKworaW5saW5lIFdvcmtRdWV1ZTo6V29ya0l0ZW1XaW46OldvcmtJdGVtV2luKGNvbnN0
IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uLCBXb3JrUXVldWUqIHF1ZXVlKQorICAgIDogbV9m
dW5jdGlvbihmdW5jdGlvbikKKyAgICAsIG1fcXVldWUocXVldWUpCit7Cit9CisKK1Bhc3NSZWZQ
dHI8V29ya1F1ZXVlOjpXb3JrSXRlbVdpbj4gV29ya1F1ZXVlOjpXb3JrSXRlbVdpbjo6Y3JlYXRl
KGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uLCBXb3JrUXVldWUqIHF1ZXVlKQorewor
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgV29ya0l0ZW1XaW4oZnVuY3Rpb24sIHF1ZXVlKSk7Cit9
CisKK1dvcmtRdWV1ZTo6V29ya0l0ZW1XaW46On5Xb3JrSXRlbVdpbigpCit7Cit9CisKK2lubGlu
ZSBXb3JrUXVldWU6OkhhbmRsZVdvcmtJdGVtOjpIYW5kbGVXb3JrSXRlbShIQU5ETEUgaGFuZGxl
LCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbiwgV29ya1F1ZXVlKiBxdWV1ZSkKKyAg
ICA6IFdvcmtJdGVtV2luKGZ1bmN0aW9uLCBxdWV1ZSkKKyAgICAsIG1faGFuZGxlKGhhbmRsZSkK
KyAgICAsIG1fd2FpdEhhbmRsZSgwKQoreworICAgIEFTU0VSVF9BUkcoaGFuZGxlLCBoYW5kbGUp
OworfQorCitQYXNzUmVmUHRyPFdvcmtRdWV1ZTo6SGFuZGxlV29ya0l0ZW0+IFdvcmtRdWV1ZTo6
SGFuZGxlV29ya0l0ZW06OmNyZWF0ZUJ5QWRvcHRpbmdIYW5kbGUoSEFORExFIGhhbmRsZSwgY29u
c3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24sIFdvcmtRdWV1ZSogcXVldWUpCit7CisgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBIYW5kbGVXb3JrSXRlbShoYW5kbGUsIGZ1bmN0aW9uLCBxdWV1
ZSkpOworfQorCitXb3JrUXVldWU6OkhhbmRsZVdvcmtJdGVtOjp+SGFuZGxlV29ya0l0ZW0oKQor
eworICAgIDo6Q2xvc2VIYW5kbGUobV9oYW5kbGUpOworfQorCit2b2lkIFdvcmtRdWV1ZTo6aGFu
ZGxlQ2FsbGJhY2sodm9pZCogY29udGV4dCwgQk9PTEVBTiB0aW1lck9yV2FpdEZpcmVkKQorewor
ICAgIEFTU0VSVF9BUkcoY29udGV4dCwgY29udGV4dCk7CisgICAgQVNTRVJUX0FSRyh0aW1lck9y
V2FpdEZpcmVkLCAhdGltZXJPcldhaXRGaXJlZCk7CisKKyAgICBXb3JrSXRlbVdpbiogaXRlbSA9
IHN0YXRpY19jYXN0PFdvcmtJdGVtV2luKj4oY29udGV4dCk7CisgICAgV29ya1F1ZXVlKiBxdWV1
ZSA9IGl0ZW0tPnF1ZXVlKCk7CisKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2socXVl
dWUtPm1fd29ya0l0ZW1RdWV1ZUxvY2spOworICAgICAgICBxdWV1ZS0+bV93b3JrSXRlbVF1ZXVl
LmFwcGVuZChpdGVtKTsKKworICAgICAgICAvLyBJZiBubyBvdGhlciB0aHJlYWQgaXMgcGVyZm9y
bWluZyB3b3JrLCB3ZSBjYW4gZG8gaXQgb24gdGhpcyB0aHJlYWQuCisgICAgICAgIGlmICghcXVl
dWUtPnRyeVJlZ2lzdGVyQXNXb3JrVGhyZWFkKCkpIHsKKyAgICAgICAgICAgIC8vIFNvbWUgb3Ro
ZXIgdGhyZWFkIGlzIHBlcmZvcm1pbmcgd29yay4gU2luY2Ugd2UgaG9sZCB0aGUgcXVldWUgbG9j
aywgd2UgY2FuIGJlIHN1cmUKKyAgICAgICAgICAgIC8vIHRoYXQgdGhlIHdvcmsgdGhyZWFkIGlz
IG5vdCBleGl0aW5nIGR1ZSB0byBhbiBlbXB0eSBxdWV1ZSBhbmQgd2lsbCBwcm9jZXNzIHRoZSB3
b3JrCisgICAgICAgICAgICAvLyBpdGVtIHdlIGp1c3QgYWRkZWQgdG8gaXQuIElmIHdlIHdlcmVu
J3QgaG9sZGluZyB0aGUgbG9jayB3ZSdkIGhhdmUgdG8gc2lnbmFsCisgICAgICAgICAgICAvLyBt
X3BlcmZvcm1Xb3JrRXZlbnQgdG8gbWFrZSBzdXJlIHRoZSB3b3JrIGl0ZW0gZ290IHBpY2tlZCB1
cC4KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHF1ZXVlLT5w
ZXJmb3JtV29ya09uUmVnaXN0ZXJlZFdvcmtUaHJlYWQoKTsKK30KKwordm9pZCBXb3JrUXVldWU6
OnJlZ2lzdGVySGFuZGxlKEhBTkRMRSBoYW5kbGUsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1
bmN0aW9uKQoreworICAgIFJlZlB0cjxIYW5kbGVXb3JrSXRlbT4gaGFuZGxlSXRlbSA9IEhhbmRs
ZVdvcmtJdGVtOjpjcmVhdGVCeUFkb3B0aW5nSGFuZGxlKGhhbmRsZSwgZnVuY3Rpb24sIHRoaXMp
OworCisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrKG1faGFuZGxlc0xvY2spOworICAg
ICAgICBBU1NFUlRfQVJHKGhhbmRsZSwgIW1faGFuZGxlcy5jb250YWlucyhoYW5kbGUpKTsKKyAg
ICAgICAgbV9oYW5kbGVzLnNldChoYW5kbGUsIGhhbmRsZUl0ZW0pOworICAgIH0KKworICAgIEhB
TkRMRSB3YWl0SGFuZGxlOworICAgIGlmICghOjpSZWdpc3RlcldhaXRGb3JTaW5nbGVPYmplY3Qo
JndhaXRIYW5kbGUsIGhhbmRsZSwgaGFuZGxlQ2FsbGJhY2ssIGhhbmRsZUl0ZW0uZ2V0KCksIElO
RklOSVRFLCBXVF9FWEVDVVRFREVGQVVMVCkpIHsKKyAgICAgICAgRFdPUkQgZXJyb3IgPSA6Okdl
dExhc3RFcnJvcigpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAg
aGFuZGxlSXRlbS0+c2V0V2FpdEhhbmRsZSh3YWl0SGFuZGxlKTsKK30KKwordm9pZCBXb3JrUXVl
dWU6OnVucmVnaXN0ZXJBbmRDbG9zZUhhbmRsZShIQU5ETEUgaGFuZGxlKQoreworICAgIFJlZlB0
cjxIYW5kbGVXb3JrSXRlbT4gaXRlbTsKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tl
cihtX2hhbmRsZXNMb2NrKTsKKyAgICAgICAgQVNTRVJUX0FSRyhoYW5kbGUsIG1faGFuZGxlcy5j
b250YWlucyhoYW5kbGUpKTsKKyAgICAgICAgaXRlbSA9IG1faGFuZGxlcy50YWtlKGhhbmRsZSk7
CisgICAgfQorCisgICAgdW5yZWdpc3RlcldhaXRBbmREZXN0cm95SXRlbVNvb24oaXRlbS5yZWxl
YXNlKCkpOworfQorCitEV09SRCBXb3JrUXVldWU6OndvcmtUaHJlYWRDYWxsYmFjayh2b2lkKiBj
b250ZXh0KQoreworICAgIEFTU0VSVF9BUkcoY29udGV4dCwgY29udGV4dCk7CisKKyAgICBXb3Jr
UXVldWUqIHF1ZXVlID0gc3RhdGljX2Nhc3Q8V29ya1F1ZXVlKj4oY29udGV4dCk7CisKKyAgICBp
ZiAoIXF1ZXVlLT50cnlSZWdpc3RlckFzV29ya1RocmVhZCgpKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIHF1ZXVlLT5wZXJmb3JtV29ya09uUmVnaXN0ZXJlZFdvcmtUaHJlYWQoKTsKKyAgICBy
ZXR1cm4gMDsKK30KKwordm9pZCBXb3JrUXVldWU6OnBlcmZvcm1Xb3JrT25SZWdpc3RlcmVkV29y
a1RocmVhZCgpCit7CisgICAgQVNTRVJUKG1faXNXb3JrVGhyZWFkUmVnaXN0ZXJlZCk7CisKKyAg
ICBib29sIGlzVmFsaWQgPSB0cnVlOworCisgICAgbV93b3JrSXRlbVF1ZXVlTG9jay5sb2NrKCk7
CisKKyAgICB3aGlsZSAoaXNWYWxpZCAmJiAhbV93b3JrSXRlbVF1ZXVlLmlzRW1wdHkoKSkgewor
ICAgICAgICBWZWN0b3I8UmVmUHRyPFdvcmtJdGVtV2luPiA+IHdvcmtJdGVtUXVldWU7CisgICAg
ICAgIG1fd29ya0l0ZW1RdWV1ZS5zd2FwKHdvcmtJdGVtUXVldWUpOworCisgICAgICAgIC8vIEFs
bG93IG1vcmUgd29yayB0byBiZSBzY2hlZHVsZWQgd2hpbGUgd2UncmUgbm90IHVzaW5nIHRoZSBx
dWV1ZSBkaXJlY3RseS4KKyAgICAgICAgbV93b3JrSXRlbVF1ZXVlTG9jay51bmxvY2soKTsKKyAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3b3JrSXRlbVF1ZXVlLnNpemUoKTsgKytpKSB7
CisgICAgICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9pc1ZhbGlkTXV0ZXgpOworICAgICAg
ICAgICAgaXNWYWxpZCA9IG1faXNWYWxpZDsKKyAgICAgICAgICAgIGlmICghaXNWYWxpZCkKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHdvcmtJdGVtUXVldWVbaV0tPmZ1bmN0
aW9uKCkoKTsKKyAgICAgICAgfQorICAgICAgICBtX3dvcmtJdGVtUXVldWVMb2NrLmxvY2soKTsK
KyAgICB9CisKKyAgICAvLyBPbmUgaW52YXJpYW50IHdlIG1haW50YWluIGlzIHRoYXQgYW55IHdv
cmsgc2NoZWR1bGVkIHdoaWxlIGEgd29yayB0aHJlYWQgaXMgcmVnaXN0ZXJlZCB3aWxsCisgICAg
Ly8gYmUgaGFuZGxlZCBieSB0aGF0IHdvcmsgdGhyZWFkLiBVbnJlZ2lzdGVyIGFzIHRoZSB3b3Jr
IHRocmVhZCB3aGlsZSB0aGUgcXVldWUgbG9jayBpcyBzdGlsbAorICAgIC8vIGhlbGQgc28gdGhh
dCBubyB3b3JrIGNhbiBiZSBzY2hlZHVsZWQgd2hpbGUgd2UncmUgc3RpbGwgcmVnaXN0ZXJlZC4K
KyAgICB1bnJlZ2lzdGVyQXNXb3JrVGhyZWFkKCk7CisKKyAgICBtX3dvcmtJdGVtUXVldWVMb2Nr
LnVubG9jaygpOworfQorCit2b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXplKGNvbnN0
IGNoYXIqIG5hbWUpCit7CisgICAgbV9pc1dvcmtUaHJlYWRSZWdpc3RlcmVkID0gMDsKKyAgICBt
X3RpbWVyUXVldWUgPSA6OkNyZWF0ZVRpbWVyUXVldWUoKTsKKyAgICBBU1NFUlRfV0lUSF9NRVNT
QUdFKG1fdGltZXJRdWV1ZSwgIjo6Q3JlYXRlVGltZXJRdWV1ZSBmYWlsZWQgd2l0aCBlcnJvciAl
bHUiLCA6OkdldExhc3RFcnJvcigpKTsKK30KKworYm9vbCBXb3JrUXVldWU6OnRyeVJlZ2lzdGVy
QXNXb3JrVGhyZWFkKCkKK3sKKyAgICBMT05HIHJlc3VsdCA9IDo6SW50ZXJsb2NrZWRDb21wYXJl
RXhjaGFuZ2UoJm1faXNXb3JrVGhyZWFkUmVnaXN0ZXJlZCwgMSwgMCk7CisgICAgQVNTRVJUKCFy
ZXN1bHQgfHwgcmVzdWx0ID09IDEpOworICAgIHJldHVybiAhcmVzdWx0OworfQorCit2b2lkIFdv
cmtRdWV1ZTo6dW5yZWdpc3RlckFzV29ya1RocmVhZCgpCit7CisgICAgTE9ORyByZXN1bHQgPSA6
OkludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlKCZtX2lzV29ya1RocmVhZFJlZ2lzdGVyZWQsIDAs
IDEpOworICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQgPT0gMSk7Cit9CisKK3ZvaWQg
V29ya1F1ZXVlOjpwbGF0Zm9ybUludmFsaWRhdGUoKQoreworI2lmICFBU1NFUlRfRElTQUJMRUQK
KyAgICBNdXRleExvY2tlciBsb2NrKG1faGFuZGxlc0xvY2spOworICAgIEFTU0VSVChtX2hhbmRs
ZXMuaXNFbXB0eSgpKTsKKyNlbmRpZgorCisgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gZW5zdXJl
IHRoYXQgYW55IHRpbWVyLXF1ZXVlIHRpbWVycyB0aGF0IGZpcmUgYWZ0ZXIgdGhpcyBwb2ludCBk
b24ndCB0cnkgdG8KKyAgICAvLyBhY2Nlc3MgdGhpcyBXb3JrUXVldWUgPGh0dHA6Ly93ZWJraXQu
b3JnL2IvNDQ2OTA+LgorICAgIDo6RGVsZXRlVGltZXJRdWV1ZUV4KG1fdGltZXJRdWV1ZSwgMCk7
Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjpkaXNwYXRjaChjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBm
dW5jdGlvbikKK3sKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV93b3JrSXRlbVF1ZXVlTG9jayk7
CisKKyAgICBtX3dvcmtJdGVtUXVldWUuYXBwZW5kKFdvcmtJdGVtV2luOjpjcmVhdGUoZnVuY3Rp
b24sIHRoaXMpKTsKKworICAgIC8vIFNwYXduIGEgd29yayB0aHJlYWQgdG8gcGVyZm9ybSB0aGUg
d29yayB3ZSBqdXN0IGFkZGVkLiBBcyBhbiBvcHRpbWl6YXRpb24sIHdlIGF2b2lkCisgICAgLy8g
c3Bhd25pbmcgdGhlIHRocmVhZCBpZiBhIHdvcmsgdGhyZWFkIGlzIGFscmVhZHkgcmVnaXN0ZXJl
ZC4gVGhpcyBwcmV2ZW50cyBtdWx0aXBsZSB3b3JrCisgICAgLy8gdGhyZWFkcyBmcm9tIGJlaW5n
IHNwYXduZWQgaW4gbW9zdCBjYXNlcy4gKE5vdGUgdGhhdCB3aGVuIGEgd29yayB0aHJlYWQgaGFz
IGJlZW4gc3Bhd25lZCBidXQKKyAgICAvLyBoYXNuJ3QgcmVnaXN0ZXJlZCBpdHNlbGYgeWV0LCBt
X2lzV29ya1RocmVhZFJlZ2lzdGVyZWQgd2lsbCBiZSBmYWxzZSBhbmQgd2UnbGwgZW5kIHVwCisg
ICAgLy8gc3Bhd25pbmcgYSBzZWNvbmQgd29yayB0aHJlYWQgaGVyZS4gQnV0IHdvcmsgdGhyZWFk
IHJlZ2lzdHJhdGlvbiBwcm9jZXNzIHdpbGwgZW5zdXJlIHRoYXQKKyAgICAvLyBvbmx5IG9uZSB0
aHJlYWQgYWN0dWFsbHkgZW5kcyB1cCBwZXJmb3JtaW5nIHdvcmsuKQorICAgIGlmICghbV9pc1dv
cmtUaHJlYWRSZWdpc3RlcmVkKQorICAgICAgICA6OlF1ZXVlVXNlcldvcmtJdGVtKHdvcmtUaHJl
YWRDYWxsYmFjaywgdGhpcywgV1RfRVhFQ1VURURFRkFVTFQpOworfQorCitzdHJ1Y3QgVGltZXJD
b250ZXh0IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFRpbWVyQ29udGV4dD4geworICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFRpbWVyQ29udGV4dD4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRS
ZWYobmV3IFRpbWVyQ29udGV4dCk7IH0KKworICAgIFdvcmtRdWV1ZSogcXVldWU7CisgICAgRnVu
Y3Rpb248dm9pZCgpPiBmdW5jdGlvbjsKKyAgICBNdXRleCB0aW1lck11dGV4OworICAgIEhBTkRM
RSB0aW1lcjsKKworcHJpdmF0ZToKKyAgICBUaW1lckNvbnRleHQoKSA6IHF1ZXVlKDApLCB0aW1l
cigwKSB7IH0KK307CisKK3ZvaWQgV29ya1F1ZXVlOjp0aW1lckNhbGxiYWNrKHZvaWQqIGNvbnRl
eHQsIEJPT0xFQU4gdGltZXJPcldhaXRGaXJlZCkKK3sKKyAgICBBU1NFUlRfQVJHKGNvbnRleHQs
IGNvbnRleHQpOworICAgIEFTU0VSVF9VTlVTRUQodGltZXJPcldhaXRGaXJlZCwgdGltZXJPcldh
aXRGaXJlZCk7CisKKyAgICAvLyBCYWxhbmNlZCBieSBsZWFrUmVmIGluIHNjaGVkdWxlV29ya0Fm
dGVyRGVsYXkuCisgICAgUmVmUHRyPFRpbWVyQ29udGV4dD4gdGltZXJDb250ZXh0ID0gYWRvcHRS
ZWYoc3RhdGljX2Nhc3Q8VGltZXJDb250ZXh0Kj4oY29udGV4dCkpOworCisgICAgdGltZXJDb250
ZXh0LT5xdWV1ZS0+ZGlzcGF0Y2godGltZXJDb250ZXh0LT5mdW5jdGlvbik7CisKKyAgICBNdXRl
eExvY2tlciBsb2NrKHRpbWVyQ29udGV4dC0+dGltZXJNdXRleCk7CisgICAgQVNTRVJUKHRpbWVy
Q29udGV4dC0+dGltZXIpOworICAgIEFTU0VSVCh0aW1lckNvbnRleHQtPnF1ZXVlLT5tX3RpbWVy
UXVldWUpOworICAgIGlmICghOjpEZWxldGVUaW1lclF1ZXVlVGltZXIodGltZXJDb250ZXh0LT5x
dWV1ZS0+bV90aW1lclF1ZXVlLCB0aW1lckNvbnRleHQtPnRpbWVyLCAwKSkKKyAgICAgICAgQVNT
RVJUX1dJVEhfTUVTU0FHRShmYWxzZSwgIjo6RGVsZXRlVGltZXJRdWV1ZVRpbWVyIGZhaWxlZCB3
aXRoIGVycm9yICVsdSIsIDo6R2V0TGFzdEVycm9yKCkpOworfQorCit2b2lkIFdvcmtRdWV1ZTo6
ZGlzcGF0Y2hBZnRlckRlbGF5KGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uLCBkb3Vi
bGUgZGVsYXkpCit7CisgICAgQVNTRVJUKG1fdGltZXJRdWV1ZSk7CisKKyAgICBSZWZQdHI8VGlt
ZXJDb250ZXh0PiBjb250ZXh0ID0gVGltZXJDb250ZXh0OjpjcmVhdGUoKTsKKyAgICBjb250ZXh0
LT5xdWV1ZSA9IHRoaXM7CisgICAgY29udGV4dC0+ZnVuY3Rpb24gPSBmdW5jdGlvbjsKKworICAg
IHsKKyAgICAgICAgLy8gVGhlIHRpbWVyIGNhbGxiYWNrIGNvdWxkIGZpcmUgYmVmb3JlIDo6Q3Jl
YXRlVGltZXJRdWV1ZVRpbWVyIGV2ZW4gcmV0dXJucywgc28gd2UgcHJvdGVjdAorICAgICAgICAv
LyBjb250ZXh0LT50aW1lciB3aXRoIGEgbXV0ZXggdG8gZW5zdXJlIHRoZSB0aW1lciBjYWxsYmFj
ayBkb2Vzbid0IGFjY2VzcyBpdCBiZWZvcmUgdGhlCisgICAgICAgIC8vIHRpbWVyIGhhbmRsZSBo
YXMgYmVlbiBzdG9yZWQgaW4gaXQuCisgICAgICAgIE11dGV4TG9ja2VyIGxvY2soY29udGV4dC0+
dGltZXJNdXRleCk7CisKKyAgICAgICAgLy8gU2luY2Ugb3VyIHRpbWVyIGNhbGxiYWNrIGlzIHF1
aWNrLCB3ZSBjYW4gZXhlY3V0ZSBpbiB0aGUgdGltZXIgdGhyZWFkIGl0c2VsZiBhbmQgYXZvaWQK
KyAgICAgICAgLy8gYW4gZXh0cmEgdGhyZWFkIHN3aXRjaCBvdmVyIHRvIGEgd29ya2VyIHRocmVh
ZC4KKyAgICAgICAgaWYgKCE6OkNyZWF0ZVRpbWVyUXVldWVUaW1lcigmY29udGV4dC0+dGltZXIs
IG1fdGltZXJRdWV1ZSwgdGltZXJDYWxsYmFjaywgY29udGV4dC5nZXQoKSwgZGVsYXkgKiAxMDAw
LCAwLCBXVF9FWEVDVVRFSU5USU1FUlRIUkVBRCkpIHsKKyAgICAgICAgICAgIEFTU0VSVF9XSVRI
X01FU1NBR0UoZmFsc2UsICI6OkNyZWF0ZVRpbWVyUXVldWVUaW1lciBmYWlsZWQgd2l0aCBlcnJv
ciAlbHUiLCA6OkdldExhc3RFcnJvcigpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgIH0KKworICAgIC8vIFRoZSB0aW1lciBjYWxsYmFjayB3aWxsIGhhbmRsZSBkZXN0cm95
aW5nIGNvbnRleHQuCisgICAgY29udGV4dC5yZWxlYXNlKCkubGVha1JlZigpOworfQorCit2b2lk
IFdvcmtRdWV1ZTo6dW5yZWdpc3RlcldhaXRBbmREZXN0cm95SXRlbVNvb24oUGFzc1JlZlB0cjxI
YW5kbGVXb3JrSXRlbT4gaXRlbSkKK3sKKyAgICAvLyBXZSdyZSBnb2luZyB0byBtYWtlIGEgYmxv
Y2tpbmcgY2FsbCB0byA6OlVucmVnaXN0ZXJXYWl0RXggYmVmb3JlIGNsb3NpbmcgdGhlIGhhbmRs
ZS4gKFRoZQorICAgIC8vIGJsb2NraW5nIHZlcnNpb24gb2YgOjpVbnJlZ2lzdGVyV2FpdEV4IGlz
IG11Y2ggc2ltcGxlciB0aGFuIHRoZSBub24tYmxvY2tpbmcgdmVyc2lvbi4pIElmIHdlCisgICAg
Ly8gZG8gdGhpcyBvbiB0aGUgY3VycmVudCB0aHJlYWQsIHdlJ2xsIGRlYWRsb2NrIGlmIHdlJ3Jl
IGN1cnJlbnRseSBpbiBhIGNhbGxiYWNrIGZ1bmN0aW9uIGZvcgorICAgIC8vIHRoZSB3YWl0IHdl
J3JlIHVucmVnaXN0ZXJpbmcuIFNvIGluc3RlYWQgd2UgZG8gaXQgYXN5bmNocm9ub3VzbHkgb24g
c29tZSBvdGhlciB3b3JrZXIgdGhyZWFkLgorCisgICAgOjpRdWV1ZVVzZXJXb3JrSXRlbSh1bnJl
Z2lzdGVyV2FpdEFuZERlc3Ryb3lJdGVtQ2FsbGJhY2ssIGl0ZW0ubGVha1JlZigpLCBXVF9FWEVD
VVRFREVGQVVMVCk7Cit9CisKK0RXT1JEIFdJTkFQSSBXb3JrUXVldWU6OnVucmVnaXN0ZXJXYWl0
QW5kRGVzdHJveUl0ZW1DYWxsYmFjayh2b2lkKiBjb250ZXh0KQoreworICAgIEFTU0VSVF9BUkco
Y29udGV4dCwgY29udGV4dCk7CisgICAgUmVmUHRyPEhhbmRsZVdvcmtJdGVtPiBpdGVtID0gYWRv
cHRSZWYoc3RhdGljX2Nhc3Q8SGFuZGxlV29ya0l0ZW0qPihjb250ZXh0KSk7CisKKyAgICAvLyBO
b3cgdGhhdCB3ZSBrbm93IHdlJ3JlIG5vdCBpbiBhIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciB0aGUg
d2FpdCB3ZSdyZSB1bnJlZ2lzdGVyaW5nLCB3ZSBjYW4KKyAgICAvLyBtYWtlIGEgYmxvY2tpbmcg
Y2FsbCB0byA6OlVucmVnaXN0ZXJXYWl0RXguCisgICAgaWYgKCE6OlVucmVnaXN0ZXJXYWl0RXgo
aXRlbS0+d2FpdEhhbmRsZSgpLCBJTlZBTElEX0hBTkRMRV9WQUxVRSkpIHsKKyAgICAgICAgRFdP
UkQgZXJyb3IgPSA6OkdldExhc3RFcnJvcigpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJLaXQyL0NN
YWtlTGlzdHMudHh0CmluZGV4IDAzNTAxYmM1ZjhjZWRlMTMxNmUxZjMwZDk0ZDQ5ZTUwZWJkN2Q3
MTguLjYzMmYyN2FlZDBjYzVjNmQwNjdlZDQyMWIwNzYzMGFkNjc1NDhjZjggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NNYWtl
TGlzdHMudHh0CkBAIC0xMDIsNyArMTAyLDYgQEAgU0VUKFdlYktpdDJfSU5DTFVERV9ESVJFQ1RP
UklFUwogU0VUKFdlYktpdDJfU09VUkNFUwogICAgIFBsYXRmb3JtL0xvZ2dpbmcuY3BwCiAgICAg
UGxhdGZvcm0vTW9kdWxlLmNwcAotICAgIFBsYXRmb3JtL1dvcmtRdWV1ZS5jcHAKIAogICAgIFBs
YXRmb3JtL0NvcmVJUEMvQXJndW1lbnRDb2RlcnMuY3BwCiAgICAgUGxhdGZvcm0vQ29yZUlQQy9B
cmd1bWVudERlY29kZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmls
ZS5saXN0LmFtIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCBkNDIw
YWZhMjJmMTRhNDAwNzkxMTY2ODEzYzUxZjMyMWZhZTlmOTZlLi5mYmRmZTY2MTU4M2I0N2QyNjNh
NDc5ZTkzMjI4ZmMzZjdjOGM3OGQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtl
ZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAg
LTI1Niw3ICsyNTYsNiBAQCB3ZWJraXQyX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJLaXQyL1Bs
YXRmb3JtL0NvcmVJUEMvdW5peC9Db25uZWN0aW9uVW5peC5jcHAgXAogCVNvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtL2d0ay9Mb2dnaW5nR3RrLmNwcCBcCiAJU291cmNlL1dlYktpdDIvUGxhdGZvcm0v
Z3RrL01vZHVsZUd0ay5jcHAgXAotCVNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2d0ay9Xb3JrUXVl
dWVHdGsuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Mb2dnaW5nLmNwcCBcCiAJU291
cmNlL1dlYktpdDIvUGxhdGZvcm0vTG9nZ2luZy5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9y
bS9Nb2R1bGUuY3BwIFwKQEAgLTI2NCw4ICsyNjMsNiBAQCB3ZWJraXQyX3NvdXJjZXMgKz0gXAog
CVNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1BsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIuaCBcCiAJ
U291cmNlL1dlYktpdDIvUGxhdGZvcm0vU2hhcmVkTWVtb3J5LmggXAogCVNvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtL3VuaXgvU2hhcmVkTWVtb3J5VW5peC5jcHAgXAotCVNvdXJjZS9XZWJLaXQyL1Bs
YXRmb3JtL1dvcmtRdWV1ZS5jcHAgXAotCVNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1dvcmtRdWV1
ZS5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94
eS5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclBy
b3h5LmggXAogCVNvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvUGx1Z2luQ3JlYXRpb25QYXJh
bWV0ZXJzLmNwcCBcCkBAIC0xMTgwLDExICsxMTc3LDggQEAgd2Via2l0Ml9wbHVnaW5fcHJvY2Vz
c19zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3VuaXgvQ29u
bmVjdGlvblVuaXguY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Nb2R1bGUuY3BwIFwK
IAlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Nb2R1bGUuaCBcCi0JU291cmNlL1dlYktpdDIvUGxh
dGZvcm0vV29ya1F1ZXVlLmNwcCBcCi0JU291cmNlL1dlYktpdDIvUGxhdGZvcm0vV29ya1F1ZXVl
LmggXAogCVNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1NoYXJlZE1lbW9yeS5oIFwKIAlTb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybS9ndGsvTW9kdWxlR3RrLmNwcCBcCi0JU291cmNlL1dlYktpdDIvUGxh
dGZvcm0vZ3RrL1dvcmtRdWV1ZUd0ay5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3Vu
aXgvU2hhcmVkTWVtb3J5VW5peC5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3Mv
UGx1Z2luQ29udHJvbGxlclByb3h5LmNwcCBcCiAJU291cmNlL1dlYktpdDIvUGx1Z2luUHJvY2Vz
cy9QbHVnaW5Db250cm9sbGVyUHJveHkuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uaCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0Nv
cmVJUEMvQ29ubmVjdGlvbi5oCmluZGV4IDc3M2Y2ZTBkMTNmYjZjZWFjM2NiYWE1MGUzMGFmMTE3
YzJlMDIwZWQuLmEwMmY5MmUxNjAxMGJjNWI2MWRjYzc4MWZlNjM4MThmNGJhOTY5NDUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5oCkBAIC0zMiwxMSAr
MzIsMTEgQEAKICNpbmNsdWRlICJBcmd1bWVudEVuY29kZXIuaCIKICNpbmNsdWRlICJBcmd1bWVu
dHMuaCIKICNpbmNsdWRlICJNZXNzYWdlSUQuaCIKLSNpbmNsdWRlICJXb3JrUXVldWUuaCIKICNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5j
bHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRl
IDx3dGYvV29ya1F1ZXVlLmg+CiAKICNpZiBPUyhEQVJXSU4pCiAjaW5jbHVkZSA8bWFjaC9tYWNo
X3BvcnQuaD4KQEAgLTQ3LDcgKzQ3LDcgQEAgY2xhc3MgUVNvY2tldE5vdGlmaWVyOwogI2VuZGlm
CiAKICNpZiBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShFRkwpCi0j
aW5jbHVkZSAiUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oIgorI2luY2x1ZGUgPHd0Zi9QbGF0
Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmg+CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtMTI3LDcgKzEyNyw3IEBAIHB1YmxpYzoKICNpZiBPUyhEQVJXSU4pCiAgICAgdm9pZCBzZXRT
aG91bGRDbG9zZUNvbm5lY3Rpb25Pbk1hY2hFeGNlcHRpb25zKCk7CiAjZWxpZiBQTEFURk9STShR
VCkKLSAgICB2b2lkIHNldFNob3VsZENsb3NlQ29ubmVjdGlvbk9uUHJvY2Vzc1Rlcm1pbmF0aW9u
KFdlYktpdDo6UGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllcik7CisgICAgdm9pZCBzZXRTaG91bGRD
bG9zZUNvbm5lY3Rpb25PblByb2Nlc3NUZXJtaW5hdGlvbihQbGF0Zm9ybVByb2Nlc3NJZGVudGlm
aWVyKTsKICNlbmRpZgogCiAgICAgdm9pZCBzZXRPbmx5U2VuZE1lc3NhZ2VzQXNEaXNwYXRjaFdo
ZW5XYWl0aW5nRm9yU3luY1JlcGx5V2hlblByb2Nlc3NpbmdTdWNoQU1lc3NhZ2UoYm9vbCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3VuaXgvQ29ubmVjdGlv
blVuaXguY3BwIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy91bml4L0Nvbm5lY3Rp
b25Vbml4LmNwcAppbmRleCA4ODVlNDk1Y2I3Njg4YzRlMzkxNzJhNzJiYWU5MmRlODk0MDVjOTg3
Li40OWE1MDg5MzNkYmM1ZmE5MzQzYzg4ZmJkZTk4Yzg0NDAzMGQ1MDE5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3VuaXgvQ29ubmVjdGlvblVuaXguY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvdW5peC9Db25uZWN0aW9uVW5peC5j
cHAKQEAgLTU1Nyw3ICs1NTcsNyBAQCBib29sIENvbm5lY3Rpb246OnNlbmRPdXRnb2luZ01lc3Nh
Z2UoTWVzc2FnZUlEIG1lc3NhZ2VJRCwgUGFzc093blB0cjxBcmd1bWVudEVuYwogfQogCiAjaWYg
UExBVEZPUk0oUVQpCi12b2lkIENvbm5lY3Rpb246OnNldFNob3VsZENsb3NlQ29ubmVjdGlvbk9u
UHJvY2Vzc1Rlcm1pbmF0aW9uKFdlYktpdDo6UGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllciBwcm9j
ZXNzKQordm9pZCBDb25uZWN0aW9uOjpzZXRTaG91bGRDbG9zZUNvbm5lY3Rpb25PblByb2Nlc3NU
ZXJtaW5hdGlvbihQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyIHByb2Nlc3MpCiB7CiAgICAgbV9j
b25uZWN0aW9uUXVldWUuZGlzcGF0Y2hPblRlcm1pbmF0aW9uKHByb2Nlc3MsIFdURjo6YmluZCgm
Q29ubmVjdGlvbjo6Y29ubmVjdGlvbkRpZENsb3NlLCB0aGlzKSk7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9QbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybS9QbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2ZWNiZTg3MjczYWZjZGNmYjA3OWRhNDBjMmU2NTMyYzhj
Zjg2NTMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYktpdDIvUGxhdGZvcm0vUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oCisrKyAvZGV2
L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLQotI2lmbmRlZiBQbGF0Zm9ybVBy
b2Nlc3NJZGVudGlmaWVyX2gKLSNkZWZpbmUgUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllcl9oCi0K
LSNpZiBQTEFURk9STShRVCkKLWNsYXNzIFFQcm9jZXNzOwotI2VsaWYgUExBVEZPUk0oRUZMKQot
I2luY2x1ZGUgPHVuaXN0ZC5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi0jaWYg
UExBVEZPUk0oTUFDKQotdHlwZWRlZiBwaWRfdCBQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyOwot
I2VsaWYgUExBVEZPUk0oV0lOKQotdHlwZWRlZiBIQU5ETEUgUGxhdGZvcm1Qcm9jZXNzSWRlbnRp
ZmllcjsKLSNlbGlmIFBMQVRGT1JNKFFUKQotdHlwZWRlZiBRUHJvY2VzcyogUGxhdGZvcm1Qcm9j
ZXNzSWRlbnRpZmllcjsKLSNlbGlmIFBMQVRGT1JNKEdUSykKLSNpZmRlZiBHX09TX1dJTjMyCi10
eXBlZGVmIHZvaWQqIEdQaWQ7Ci0jZWxzZQotdHlwZWRlZiBpbnQgR1BpZDsKLSNlbmRpZgotdHlw
ZWRlZiBHUGlkIFBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXI7Ci0jZWxpZiBQTEFURk9STShFRkwp
Ci10eXBlZGVmIHBpZF90IFBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXI7Ci0jZW5kaWYKLQotfSAv
LyBuYW1lc3BhY2UgV2ViS2l0IAotCi0jZW5kaWYgLy8gUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmll
cl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrUXVldWUuY3BwIGIv
U291cmNlL1dlYktpdDIvUGxhdGZvcm0vV29ya1F1ZXVlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNmJjZGQyMjY0NDIzMDgyODA1NjBiODk0MjVhYjE2MDc3ZmNlYjVkYS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9QbGF0Zm9ybS9Xb3JrUXVldWUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXb3JrUXVldWUuaCIK
LQotV29ya1F1ZXVlOjpXb3JrUXVldWUoY29uc3QgY2hhciogbmFtZSkKLSAgICA6IG1faXNWYWxp
ZCh0cnVlKQotewotICAgIHBsYXRmb3JtSW5pdGlhbGl6ZShuYW1lKTsKLX0KLQotV29ya1F1ZXVl
Ojp+V29ya1F1ZXVlKCkKLXsKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgTXV0ZXhMb2NrZXIg
bG9ja2VyKG1faXNWYWxpZE11dGV4KTsKLSAgICBBU1NFUlQoIW1faXNWYWxpZCk7Ci0jZW5kaWYK
LX0KLQotdm9pZCBXb3JrUXVldWU6OmludmFsaWRhdGUoKQotewotICAgIHsKLSAgICAgICAgTXV0
ZXhMb2NrZXIgbG9ja2VyKG1faXNWYWxpZE11dGV4KTsKLSAgICAgICAgbV9pc1ZhbGlkID0gZmFs
c2U7Ci0gICAgfQotCi0gICAgcGxhdGZvcm1JbnZhbGlkYXRlKCk7Ci19CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrUXVldWUuaCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRm
b3JtL1dvcmtRdWV1ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjMwZGMwMjg1
NWU1ZGEwOTRiMTNmMWYxNTEzMjljMmRiNDE0MzBjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1dvcmtRdWV1ZS5o
CisrKyAvZGV2L251bGwKQEAgLTEsMjEwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogUG9ydGlvbnMgQ29weXJpZ2h0
IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaWZuZGVmIFdvcmtRdWV1ZV9oCi0jZGVmaW5lIFdvcmtRdWV1ZV9oCi0KLSNp
ZiBPUyhEQVJXSU4pCi0jaWYgSEFWRShESVNQQVRDSF9IKQotI2luY2x1ZGUgPGRpc3BhdGNoL2Rp
c3BhdGNoLmg+Ci0jZW5kaWYKLSNlbmRpZgotCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNp
bmNsdWRlIDx3dGYvRnVuY3Rpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5j
bHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2lu
Y2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLSNpZiAo
UExBVEZPUk0oUVQpICYmICFPUyhEQVJXSU4pKSB8fCBQTEFURk9STShHVEspIHx8IFBMQVRGT1JN
KEVGTCkKLSNpbmNsdWRlICJQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmgiCi0jZW5kaWYKLQot
I2lmIFBMQVRGT1JNKFFUKSAmJiAhT1MoREFSV0lOKQotI2luY2x1ZGUgPFFTb2NrZXROb3RpZmll
cj4KLWNsYXNzIFFPYmplY3Q7Ci1jbGFzcyBRVGhyZWFkOwotI2VsaWYgUExBVEZPUk0oR1RLKQot
I2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KLXR5cGVkZWYgZ2Jvb2xlYW4gKCpHU291
cmNlRnVuYykgKGdwb2ludGVyIGRhdGEpOwotI2VsaWYgUExBVEZPUk0oRUZMKQotI2luY2x1ZGUg
PEVjb3JlLmg+Ci0jZW5kaWYKLQotY2xhc3MgV29ya1F1ZXVlIHsKLSAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShXb3JrUXVldWUpOwotCi1wdWJsaWM6Ci0gICAgZXhwbGljaXQgV29ya1F1ZXVlKGNv
bnN0IGNoYXIqIG5hbWUpOwotICAgIH5Xb3JrUXVldWUoKTsKLQotICAgIC8vIFdpbGwgZGlzcGF0
Y2ggdGhlIGdpdmVuIGZ1bmN0aW9uIHRvIHJ1biBhcyBzb29uIGFzIHBvc3NpYmxlLgotICAgIHZv
aWQgZGlzcGF0Y2goY29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOwotCi0gICAgLy8gV2lsbCBkaXNw
YXRjaCB0aGUgZ2l2ZW4gZnVuY3Rpb24gYWZ0ZXIgdGhlIGdpdmVuIGRlbGF5IChpbiBzZWNvbmRz
KS4KLSAgICB2b2lkIGRpc3BhdGNoQWZ0ZXJEZWxheShjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jiwg
ZG91YmxlIGRlbGF5KTsKLQotICAgIHZvaWQgaW52YWxpZGF0ZSgpOwotCi0jaWYgT1MoREFSV0lO
KQotICAgIGVudW0gTWFjaFBvcnRFdmVudFR5cGUgewotICAgICAgICAvLyBGaXJlZCB3aGVuIHRo
ZXJlIGlzIGRhdGEgb24gdGhlIGdpdmVuIHJlY2VpdmUgcmlnaHQuCi0gICAgICAgIE1hY2hQb3J0
RGF0YUF2YWlsYWJsZSwKLSAgICAgICAgCi0gICAgICAgIC8vIEZpcmVkIHdoZW4gdGhlIHJlY2Vp
dmUgcmlnaHQgZm9yIHRoaXMgc2VuZCByaWdodCBoYXMgYmVlbiBkZXN0cm95ZWQuCi0gICAgICAg
IE1hY2hQb3J0RGVhZE5hbWVOb3RpZmljYXRpb24KLSAgICB9OwotICAgIAotICAgIC8vIFdpbGwg
ZXhlY3V0ZSB0aGUgZ2l2ZW4gZnVuY3Rpb24gd2hlbmV2ZXIgdGhlIGdpdmVuIG1hY2ggcG9ydCBl
dmVudCBmaXJlcy4KLSAgICAvLyBOb3RlIHRoYXQgdGhpcyB3aWxsIGFkb3B0IHRoZSBtYWNoIHBv
cnQgYW5kIGRlc3Ryb3kgaXQgd2hlbiB0aGUgd29yayBxdWV1ZSBpcyBpbnZhbGlkYXRlZC4KLSAg
ICB2b2lkIHJlZ2lzdGVyTWFjaFBvcnRFdmVudEhhbmRsZXIobWFjaF9wb3J0X3QsIE1hY2hQb3J0
RXZlbnRUeXBlLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7Ci0gICAgdm9pZCB1bnJlZ2lzdGVy
TWFjaFBvcnRFdmVudEhhbmRsZXIobWFjaF9wb3J0X3QpOwotI2VsaWYgUExBVEZPUk0oV0lOKQot
ICAgIHZvaWQgcmVnaXN0ZXJIYW5kbGUoSEFORExFLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7
Ci0gICAgdm9pZCB1bnJlZ2lzdGVyQW5kQ2xvc2VIYW5kbGUoSEFORExFKTsKLSNlbGlmIFBMQVRG
T1JNKFFUKQotICAgIFFTb2NrZXROb3RpZmllciogcmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIo
aW50LCBRU29ja2V0Tm90aWZpZXI6OlR5cGUsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsKLSAg
ICB2b2lkIGRpc3BhdGNoT25UZXJtaW5hdGlvbihXZWJLaXQ6OlBsYXRmb3JtUHJvY2Vzc0lkZW50
aWZpZXIsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsKLSNlbGlmIFBMQVRGT1JNKEdUSykKLSAg
ICB2b2lkIHJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKGludCwgaW50LCBjb25zdCBGdW5jdGlv
bjx2b2lkKCk+Jik7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKGludCk7
Ci0gICAgdm9pZCBkaXNwYXRjaE9uVGVybWluYXRpb24oV2ViS2l0OjpQbGF0Zm9ybVByb2Nlc3NJ
ZGVudGlmaWVyLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7Ci0jZWxpZiBQTEFURk9STShFRkwp
Ci0gICAgdm9pZCByZWdpc3RlclNvY2tldEV2ZW50SGFuZGxlcihpbnQsIGNvbnN0IEZ1bmN0aW9u
PHZvaWQoKT4mKTsKLSAgICB2b2lkIHVucmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIoaW50KTsK
LSNlbmRpZgotCi1wcml2YXRlOgotICAgIC8vIEZJWE1FOiBVc2UgYW4gYXRvbWljIGJvb2xlYW4g
aGVyZSBpbnN0ZWFkLgotICAgIE11dGV4IG1faXNWYWxpZE11dGV4OwotICAgIGJvb2wgbV9pc1Zh
bGlkOwotCi0gICAgdm9pZCBwbGF0Zm9ybUluaXRpYWxpemUoY29uc3QgY2hhciogbmFtZSk7Ci0g
ICAgdm9pZCBwbGF0Zm9ybUludmFsaWRhdGUoKTsKLQotI2lmIE9TKERBUldJTikKLSNpZiBIQVZF
KERJU1BBVENIX0gpCi0gICAgc3RhdGljIHZvaWQgZXhlY3V0ZUZ1bmN0aW9uKHZvaWQqKTsKLSAg
ICBNdXRleCBtX2V2ZW50U291cmNlc011dGV4OwotICAgIGNsYXNzIEV2ZW50U291cmNlOwotICAg
IEhhc2hNYXA8bWFjaF9wb3J0X3QsIEV2ZW50U291cmNlKj4gbV9ldmVudFNvdXJjZXM7Ci0gICAg
ZGlzcGF0Y2hfcXVldWVfdCBtX2Rpc3BhdGNoUXVldWU7Ci0jZW5kaWYKLSNlbGlmIFBMQVRGT1JN
KFdJTikKLSAgICBjbGFzcyBXb3JrSXRlbVdpbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRl
ZDxXb3JrSXRlbVdpbj4gewotICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8
V29ya0l0ZW1XaW4+IGNyZWF0ZShjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiwgV29ya1F1ZXVlKik7
Ci0gICAgICAgIHZpcnR1YWwgfldvcmtJdGVtV2luKCk7Ci0KLSAgICAgICAgRnVuY3Rpb248dm9p
ZCgpPiYgZnVuY3Rpb24oKSB7IHJldHVybiBtX2Z1bmN0aW9uOyB9Ci0gICAgICAgIFdvcmtRdWV1
ZSogcXVldWUoKSBjb25zdCB7IHJldHVybiBtX3F1ZXVlOyB9Ci0KLSAgICBwcm90ZWN0ZWQ6Ci0g
ICAgICAgIFdvcmtJdGVtV2luKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mLCBXb3JrUXVldWUqKTsK
LQotICAgIHByaXZhdGU6Ci0gICAgICAgIEZ1bmN0aW9uPHZvaWQoKT4gbV9mdW5jdGlvbjsKLSAg
ICAgICAgV29ya1F1ZXVlKiBtX3F1ZXVlOwotICAgIH07Ci0KLSAgICBjbGFzcyBIYW5kbGVXb3Jr
SXRlbSA6IHB1YmxpYyBXb3JrSXRlbVdpbiB7Ci0gICAgcHVibGljOgotICAgICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxIYW5kbGVXb3JrSXRlbT4gY3JlYXRlQnlBZG9wdGluZ0hhbmRsZShIQU5ETEUs
IGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mLCBXb3JrUXVldWUqKTsKLSAgICAgICAgdmlydHVhbCB+
SGFuZGxlV29ya0l0ZW0oKTsKLQotICAgICAgICB2b2lkIHNldFdhaXRIYW5kbGUoSEFORExFIHdh
aXRIYW5kbGUpIHsgbV93YWl0SGFuZGxlID0gd2FpdEhhbmRsZTsgfQotICAgICAgICBIQU5ETEUg
d2FpdEhhbmRsZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2FpdEhhbmRsZTsgfQotCi0gICAgcHJpdmF0
ZToKLSAgICAgICAgSGFuZGxlV29ya0l0ZW0oSEFORExFLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+
JiwgV29ya1F1ZXVlKik7Ci0KLSAgICAgICAgSEFORExFIG1faGFuZGxlOwotICAgICAgICBIQU5E
TEUgbV93YWl0SGFuZGxlOwotICAgIH07Ci0KLSAgICBzdGF0aWMgdm9pZCBDQUxMQkFDSyBoYW5k
bGVDYWxsYmFjayh2b2lkKiBjb250ZXh0LCBCT09MRUFOIHRpbWVyT3JXYWl0RmlyZWQpOwotICAg
IHN0YXRpYyB2b2lkIENBTExCQUNLIHRpbWVyQ2FsbGJhY2sodm9pZCogY29udGV4dCwgQk9PTEVB
TiB0aW1lck9yV2FpdEZpcmVkKTsKLSAgICBzdGF0aWMgRFdPUkQgV0lOQVBJIHdvcmtUaHJlYWRD
YWxsYmFjayh2b2lkKiBjb250ZXh0KTsKLQotICAgIGJvb2wgdHJ5UmVnaXN0ZXJBc1dvcmtUaHJl
YWQoKTsKLSAgICB2b2lkIHVucmVnaXN0ZXJBc1dvcmtUaHJlYWQoKTsKLSAgICB2b2lkIHBlcmZv
cm1Xb3JrT25SZWdpc3RlcmVkV29ya1RocmVhZCgpOwotCi0gICAgc3RhdGljIHZvaWQgdW5yZWdp
c3RlcldhaXRBbmREZXN0cm95SXRlbVNvb24oUGFzc1JlZlB0cjxIYW5kbGVXb3JrSXRlbT4pOwot
ICAgIHN0YXRpYyBEV09SRCBXSU5BUEkgdW5yZWdpc3RlcldhaXRBbmREZXN0cm95SXRlbUNhbGxi
YWNrKHZvaWQqIGNvbnRleHQpOwotCi0gICAgdm9sYXRpbGUgTE9ORyBtX2lzV29ya1RocmVhZFJl
Z2lzdGVyZWQ7Ci0KLSAgICBNdXRleCBtX3dvcmtJdGVtUXVldWVMb2NrOwotICAgIFZlY3RvcjxS
ZWZQdHI8V29ya0l0ZW1XaW4+ID4gbV93b3JrSXRlbVF1ZXVlOwotCi0gICAgTXV0ZXggbV9oYW5k
bGVzTG9jazsKLSAgICBIYXNoTWFwPEhBTkRMRSwgUmVmUHRyPEhhbmRsZVdvcmtJdGVtPiA+IG1f
aGFuZGxlczsKLQotICAgIEhBTkRMRSBtX3RpbWVyUXVldWU7Ci0jZWxpZiBQTEFURk9STShRVCkK
LSAgICBjbGFzcyBXb3JrSXRlbVF0OwotICAgIFFUaHJlYWQqIG1fd29ya1RocmVhZDsKLSAgICBm
cmllbmQgY2xhc3MgV29ya0l0ZW1RdDsKLSNlbGlmIFBMQVRGT1JNKEdUSykKLSAgICBzdGF0aWMg
dm9pZCBzdGFydFdvcmtRdWV1ZVRocmVhZChXb3JrUXVldWUqKTsKLSAgICB2b2lkIHdvcmtRdWV1
ZVRocmVhZEJvZHkoKTsKLSAgICB2b2lkIGRpc3BhdGNoT25Tb3VyY2UoR1NvdXJjZSosIGNvbnN0
IEZ1bmN0aW9uPHZvaWQoKT4mLCBHU291cmNlRnVuYyk7Ci0KLSAgICBUaHJlYWRJZGVudGlmaWVy
IG1fd29ya1F1ZXVlVGhyZWFkOwotICAgIEdSZWZQdHI8R01haW5Db250ZXh0PiBtX2V2ZW50Q29u
dGV4dDsKLSAgICBNdXRleCBtX2V2ZW50TG9vcExvY2s7Ci0gICAgR1JlZlB0cjxHTWFpbkxvb3A+
IG1fZXZlbnRMb29wOwotICAgIE11dGV4IG1fZXZlbnRTb3VyY2VzTG9jazsKLSAgICBjbGFzcyBF
dmVudFNvdXJjZTsKLSAgICBIYXNoTWFwPGludCwgVmVjdG9yPEV2ZW50U291cmNlKj4gPiBtX2V2
ZW50U291cmNlczsKLSAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCBWZWN0b3I8RXZlbnRTb3VyY2Uq
PiA+OjppdGVyYXRvciBFdmVudFNvdXJjZUl0ZXJhdG9yOyAKLSNlbGlmIFBMQVRGT1JNKEVGTCkK
LSAgICBmZF9zZXQgbV9maWxlRGVzY3JpcHRvclNldDsKLSAgICBpbnQgbV9tYXhGaWxlRGVzY3Jp
cHRvcjsKLSAgICBpbnQgbV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yOwotICAgIGludCBtX3dyaXRl
VG9QaXBlRGVzY3JpcHRvcjsKLSAgICBib29sIG1fdGhyZWFkTG9vcDsKLQotICAgIFZlY3RvcjxG
dW5jdGlvbjx2b2lkKCk+ID4gbV93b3JrSXRlbVF1ZXVlOwotICAgIE11dGV4IG1fd29ya0l0ZW1R
dWV1ZUxvY2s7Ci0KLSAgICBpbnQgbV9zb2NrZXREZXNjcmlwdG9yOwotICAgIEZ1bmN0aW9uPHZv
aWQoKT4gbV9zb2NrZXRFdmVudEhhbmRsZXI7Ci0KLSAgICBIYXNoTWFwPGludCwgT3duUHRyPEVj
b3JlX1RpbWVyPiA+IG1fdGltZXJzOwotCi0gICAgdm9pZCBzZW5kTWVzc2FnZVRvVGhyZWFkKGNv
bnN0IGNoYXIqKTsKLSAgICBzdGF0aWMgdm9pZCogd29ya1F1ZXVlVGhyZWFkKFdvcmtRdWV1ZSop
OwotICAgIHZvaWQgcGVyZm9ybVdvcmsoKTsKLSAgICB2b2lkIHBlcmZvcm1GaWxlRGVzY3JpcHRv
cldvcmsoKTsKLSAgICBzdGF0aWMgYm9vbCB0aW1lckZpcmVkKHZvaWQqKTsKLSNlbmRpZgotfTsK
LQotI2VuZGlmIC8vIFdvcmtRdWV1ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybS9lZmwvV29ya1F1ZXVlRWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2VmbC9X
b3JrUXVldWVFZmwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MWZmZWRmNTMz
MWEyYTJlZWZkNmI4YzdmNGY4ZmIwYjdjZjQ0NjFiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2VmbC9Xb3JrUXVl
dWVFZmwuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTczICswLDAgQEAKLS8qCi0gICAgQ29weXJp
Z2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKLQotICAgIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAg
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
LSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQot
ICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0g
ICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIldvcmtRdWV1ZS5oIgotCi0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4K
LQotY2xhc3MgVGltZXJXb3JrSXRlbSB7Ci1wdWJsaWM6Ci0gICAgVGltZXJXb3JrSXRlbShpbnQg
dGltZXJJRCwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24sIFdvcmtRdWV1ZSogcXVl
dWUpCi0gICAgICAgIDogbV9mdW5jdGlvbihmdW5jdGlvbikKLSAgICAgICAgLCBtX3F1ZXVlKHF1
ZXVlKQotICAgICAgICAsIG1fdGltZXJJRCh0aW1lcklEKQotICAgIHsKLSAgICB9Ci0gICAgflRp
bWVyV29ya0l0ZW0oKSB7IH0KLQotICAgIEZ1bmN0aW9uPHZvaWQoKT4gZnVuY3Rpb24oKSBjb25z
dCB7IHJldHVybiBtX2Z1bmN0aW9uOyB9Ci0gICAgV29ya1F1ZXVlKiBxdWV1ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fcXVldWU7IH0KLQotICAgIGludCB0aW1lcklEKCkgY29uc3QgeyByZXR1cm4gbV90
aW1lcklEOyB9Ci0KLXByaXZhdGU6Ci0gICAgRnVuY3Rpb248dm9pZCgpPiBtX2Z1bmN0aW9uOwot
ICAgIFdvcmtRdWV1ZSogbV9xdWV1ZTsKLSAgICBpbnQgbV90aW1lcklEOwotfTsKLQotc3RhdGlj
IGNvbnN0IGludCBpbnZhbGlkU29ja2V0RGVzY3JpcHRvciA9IC0xOwotc3RhdGljIGNvbnN0IGlu
dCB0aHJlYWRNZXNzYWdlU2l6ZSA9IDE7Ci1zdGF0aWMgY29uc3QgY2hhciBmaW5pc2hUaHJlYWRN
ZXNzYWdlW10gPSAiRiI7Ci1zdGF0aWMgY29uc3QgY2hhciB3YWt1cFRocmVhZE1lc3NhZ2VbXSA9
ICJXIjsKLQotdm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW5pdGlhbGl6ZShjb25zdCBjaGFyKiBu
YW1lKQotewotICAgIGludCBmZHNbMl07Ci0gICAgaWYgKHBpcGUoZmRzKSkKLSAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0KLSAgICBtX3JlYWRGcm9tUGlwZURlc2NyaXB0b3IgPSBmZHNb
MF07Ci0gICAgbV93cml0ZVRvUGlwZURlc2NyaXB0b3IgPSBmZHNbMV07Ci0gICAgRkRfWkVSTygm
bV9maWxlRGVzY3JpcHRvclNldCk7Ci0gICAgRkRfU0VUKG1fcmVhZEZyb21QaXBlRGVzY3JpcHRv
ciwgJm1fZmlsZURlc2NyaXB0b3JTZXQpOwotICAgIG1fbWF4RmlsZURlc2NyaXB0b3IgPSBtX3Jl
YWRGcm9tUGlwZURlc2NyaXB0b3I7Ci0KLSAgICBtX3NvY2tldERlc2NyaXB0b3IgPSBpbnZhbGlk
U29ja2V0RGVzY3JpcHRvcjsKLQotICAgIG1fdGhyZWFkTG9vcCA9IHRydWU7Ci0gICAgY3JlYXRl
VGhyZWFkKHJlaW50ZXJwcmV0X2Nhc3Q8V1RGOjpUaHJlYWRGdW5jdGlvbj4oJldvcmtRdWV1ZTo6
d29ya1F1ZXVlVGhyZWFkKSwgdGhpcywgbmFtZSk7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpwbGF0
Zm9ybUludmFsaWRhdGUoKQotewotICAgIHNlbmRNZXNzYWdlVG9UaHJlYWQoZmluaXNoVGhyZWFk
TWVzc2FnZSk7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpwZXJmb3JtV29yaygpCi17Ci0gICAgbV93
b3JrSXRlbVF1ZXVlTG9jay5sb2NrKCk7Ci0KLSAgICB3aGlsZSAoIW1fd29ya0l0ZW1RdWV1ZS5p
c0VtcHR5KCkpIHsKLSAgICAgICAgVmVjdG9yPEZ1bmN0aW9uPHZvaWQoKT4gPiB3b3JrSXRlbVF1
ZXVlOwotICAgICAgICBtX3dvcmtJdGVtUXVldWUuc3dhcCh3b3JrSXRlbVF1ZXVlKTsKLQotICAg
ICAgICBtX3dvcmtJdGVtUXVldWVMb2NrLnVubG9jaygpOwotICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHdvcmtJdGVtUXVldWUuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICB3b3JrSXRl
bVF1ZXVlW2ldKCk7Ci0gICAgICAgIG1fd29ya0l0ZW1RdWV1ZUxvY2subG9jaygpOwotICAgIH0K
LSAgICBtX3dvcmtJdGVtUXVldWVMb2NrLnVubG9jaygpOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6
cGVyZm9ybUZpbGVEZXNjcmlwdG9yV29yaygpCi17Ci0gICAgZmRfc2V0IHJlYWRGaWxlRGVzY3Jp
cHRvclNldCA9IG1fZmlsZURlc2NyaXB0b3JTZXQ7Ci0KLSAgICBpZiAoc2VsZWN0KG1fbWF4Rmls
ZURlc2NyaXB0b3IgKyAxLCAmcmVhZEZpbGVEZXNjcmlwdG9yU2V0LCAwLCAwLCAwKSA+PSAwKSB7
Ci0gICAgICAgIGlmIChGRF9JU1NFVChtX3JlYWRGcm9tUGlwZURlc2NyaXB0b3IsICZyZWFkRmls
ZURlc2NyaXB0b3JTZXQpKSB7Ci0gICAgICAgICAgICBjaGFyIHJlYWRCdWZbdGhyZWFkTWVzc2Fn
ZVNpemVdOwotICAgICAgICAgICAgaWYgKHJlYWQobV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yLCBy
ZWFkQnVmLCB0aHJlYWRNZXNzYWdlU2l6ZSkgPT0gLTEpCi0gICAgICAgICAgICAgICAgTE9HX0VS
Uk9SKCJGYWlsZWQgdG8gcmVhZCBmcm9tIFdvcmtRdWV1ZVRocmVhZCBwaXBlIik7Ci0gICAgICAg
ICAgICBpZiAoIXN0cm5jbXAocmVhZEJ1ZiwgZmluaXNoVGhyZWFkTWVzc2FnZSwgdGhyZWFkTWVz
c2FnZVNpemUpKQotICAgICAgICAgICAgICAgIG1fdGhyZWFkTG9vcCA9IGZhbHNlOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKG1fc29ja2V0RGVzY3JpcHRvciAhPSBpbnZhbGlkU29ja2V0RGVz
Y3JpcHRvciAmJiBGRF9JU1NFVChtX3NvY2tldERlc2NyaXB0b3IsICZyZWFkRmlsZURlc2NyaXB0
b3JTZXQpKQotICAgICAgICAgICAgbV9zb2NrZXRFdmVudEhhbmRsZXIoKTsKLSAgICB9Ci19Ci0K
LXZvaWQgV29ya1F1ZXVlOjpzZW5kTWVzc2FnZVRvVGhyZWFkKGNvbnN0IGNoYXIqIG1lc3NhZ2Up
Ci17Ci0gICAgaWYgKHdyaXRlKG1fd3JpdGVUb1BpcGVEZXNjcmlwdG9yLCBtZXNzYWdlLCB0aHJl
YWRNZXNzYWdlU2l6ZSkgPT0gLTEpCi0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHdha2Ug
dXAgV29ya1F1ZXVlIFRocmVhZCIpOwotfQotCi12b2lkKiBXb3JrUXVldWU6OndvcmtRdWV1ZVRo
cmVhZChXb3JrUXVldWUqIHdvcmtRdWV1ZSkKLXsKLSAgICB3aGlsZSAod29ya1F1ZXVlLT5tX3Ro
cmVhZExvb3ApIHsKLSAgICAgICAgd29ya1F1ZXVlLT5wZXJmb3JtV29yaygpOwotICAgICAgICB3
b3JrUXVldWUtPnBlcmZvcm1GaWxlRGVzY3JpcHRvcldvcmsoKTsKLSAgICB9Ci0KLSAgICBjbG9z
ZSh3b3JrUXVldWUtPm1fcmVhZEZyb21QaXBlRGVzY3JpcHRvcik7Ci0gICAgY2xvc2Uod29ya1F1
ZXVlLT5tX3dyaXRlVG9QaXBlRGVzY3JpcHRvcik7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotdm9p
ZCBXb3JrUXVldWU6OnJlZ2lzdGVyU29ja2V0RXZlbnRIYW5kbGVyKGludCBmaWxlRGVzY3JpcHRv
ciwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCi17Ci0gICAgaWYgKG1fc29ja2V0
RGVzY3JpcHRvciAhPSBpbnZhbGlkU29ja2V0RGVzY3JpcHRvcikKLSAgICAgICAgTE9HX0VSUk9S
KCIlZCBpcyBhbHJlYWR5IHJlZ2lzdGVyZC4iLCBmaWxlRGVzY3JpcHRvcik7Ci0KLSAgICBtX3Nv
Y2tldERlc2NyaXB0b3IgPSBmaWxlRGVzY3JpcHRvcjsKLSAgICBtX3NvY2tldEV2ZW50SGFuZGxl
ciA9IGZ1bmN0aW9uOwotCi0gICAgaWYgKGZpbGVEZXNjcmlwdG9yID4gbV9tYXhGaWxlRGVzY3Jp
cHRvcikKLSAgICAgICAgbV9tYXhGaWxlRGVzY3JpcHRvciA9IGZpbGVEZXNjcmlwdG9yOwotICAg
IEZEX1NFVChmaWxlRGVzY3JpcHRvciwgJm1fZmlsZURlc2NyaXB0b3JTZXQpOwotfQotCi12b2lk
IFdvcmtRdWV1ZTo6dW5yZWdpc3RlclNvY2tldEV2ZW50SGFuZGxlcihpbnQgZmlsZURlc2NyaXB0
b3IpCi17Ci0gICAgbV9zb2NrZXREZXNjcmlwdG9yID0gaW52YWxpZFNvY2tldERlc2NyaXB0b3I7
Ci0KLSAgICBpZiAoZmlsZURlc2NyaXB0b3IgPT0gbV9tYXhGaWxlRGVzY3JpcHRvcikKLSAgICAg
ICAgbV9tYXhGaWxlRGVzY3JpcHRvciA9IG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvcjsKLSAgICBG
RF9DTFIoZmlsZURlc2NyaXB0b3IsICZtX2ZpbGVEZXNjcmlwdG9yU2V0KTsKLX0KLQotdm9pZCBX
b3JrUXVldWU6OmRpc3BhdGNoKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQotewot
ICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3dvcmtJdGVtUXVldWVMb2NrKTsKLSAgICBtX3dvcmtJ
dGVtUXVldWUuYXBwZW5kKGZ1bmN0aW9uKTsKLSAgICBzZW5kTWVzc2FnZVRvVGhyZWFkKHdha3Vw
VGhyZWFkTWVzc2FnZSk7Ci19Ci0KLWJvb2wgV29ya1F1ZXVlOjp0aW1lckZpcmVkKHZvaWQqIGRh
dGEpCi17Ci0gICAgVGltZXJXb3JrSXRlbSogaXRlbSA9IHN0YXRpY19jYXN0PFRpbWVyV29ya0l0
ZW0qPihkYXRhKTsKLSAgICBpZiAoaXRlbSAmJiBpdGVtLT5xdWV1ZSgpLT5tX2lzVmFsaWQpIHsK
LSAgICAgICAgaXRlbS0+cXVldWUoKS0+ZGlzcGF0Y2goaXRlbS0+ZnVuY3Rpb24oKSk7Ci0gICAg
ICAgIGl0ZW0tPnF1ZXVlKCktPm1fdGltZXJzLnRha2UoaXRlbS0+dGltZXJJRCgpKTsKLSAgICAg
ICAgZGVsZXRlIGl0ZW07Ci0gICAgfQotCi0gICAgcmV0dXJuIEVDT1JFX0NBTExCQUNLX0NBTkNF
TDsKLX0KLQotdm9pZCBXb3JrUXVldWU6OmRpc3BhdGNoQWZ0ZXJEZWxheShjb25zdCBGdW5jdGlv
bjx2b2lkKCk+JiBmdW5jdGlvbiwgZG91YmxlIGRlbGF5KQotewotICAgIHN0YXRpYyBpbnQgdGlt
ZXJJZCA9IDE7Ci0gICAgbV90aW1lcnMuc2V0KHRpbWVySWQsIGFkb3B0UHRyKGVjb3JlX3RpbWVy
X2FkZChkZWxheSwgcmVpbnRlcnByZXRfY2FzdDxFY29yZV9UYXNrX0NiPih0aW1lckZpcmVkKSwg
bmV3IFRpbWVyV29ya0l0ZW0odGltZXJJZCwgZnVuY3Rpb24sIHRoaXMpKSkpOwotICAgIHRpbWVy
SWQrKzsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2d0ay9Xb3JrUXVl
dWVHdGsuY3BwIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vZ3RrL1dvcmtRdWV1ZUd0ay5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkZmFiODNjY2ZiMjRjOWYwMGVlNDBkMmRh
YTFjOTViMTYzODJhNDMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vZ3RrL1dvcmtRdWV1ZUd0ay5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSwyMzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2Fs
aWEgUy5MLgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIldvcmtRdWV1ZS5oIgotCi0jaW5jbHVkZSAiV0tCYXNlLmgiCi0jaW5jbHVk
ZSA8Z2lvL2dpby5oPgotI2luY2x1ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9H
UmVmUHRyLmg+Ci0KLS8vIFdvcmtRdWV1ZTo6RXZlbnRTb3VyY2UKLWNsYXNzIFdvcmtRdWV1ZTo6
RXZlbnRTb3VyY2UgewotcHVibGljOgotICAgIEV2ZW50U291cmNlKGNvbnN0IEZ1bmN0aW9uPHZv
aWQoKT4mIGZ1bmN0aW9uLCBXb3JrUXVldWUqIHdvcmtRdWV1ZSwgR0NhbmNlbGxhYmxlKiBjYW5j
ZWxsYWJsZSkKLSAgICAgICAgOiBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQotICAgICAgICAsIG1fd29y
a1F1ZXVlKHdvcmtRdWV1ZSkKLSAgICAgICAgLCBtX2NhbmNlbGxhYmxlKGNhbmNlbGxhYmxlKQot
ICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIGNhbmNlbCgpCi0gICAgewotICAgICAgICBpZiAoIW1f
Y2FuY2VsbGFibGUpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGdfY2FuY2VsbGFibGVf
Y2FuY2VsKG1fY2FuY2VsbGFibGUpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGV4ZWN1dGVF
dmVudFNvdXJjZShFdmVudFNvdXJjZSogZXZlbnRTb3VyY2UpCi0gICAgewotICAgICAgICBBU1NF
UlQoZXZlbnRTb3VyY2UpOwotICAgICAgICBXb3JrUXVldWUqIHF1ZXVlID0gZXZlbnRTb3VyY2Ut
Pm1fd29ya1F1ZXVlOwotICAgICAgICB7Ci0gICAgICAgICAgICBNdXRleExvY2tlciBsb2NrZXIo
cXVldWUtPm1faXNWYWxpZE11dGV4KTsKLSAgICAgICAgICAgIGlmICghcXVldWUtPm1faXNWYWxp
ZCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBldmVudFNv
dXJjZS0+bV9mdW5jdGlvbigpOwotICAgIH0KLQotICAgIHN0YXRpYyBnYm9vbGVhbiBwZXJmb3Jt
V29ya09uY2UoRXZlbnRTb3VyY2UqIGV2ZW50U291cmNlKQotICAgIHsKLSAgICAgICAgZXhlY3V0
ZUV2ZW50U291cmNlKGV2ZW50U291cmNlKTsKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0K
LQotICAgIHN0YXRpYyBnYm9vbGVhbiBwZXJmb3JtV29yayhHU29ja2V0KiBzb2NrZXQsIEdJT0Nv
bmRpdGlvbiBjb25kaXRpb24sIEV2ZW50U291cmNlKiBldmVudFNvdXJjZSkKLSAgICB7Ci0gICAg
ICAgIGlmICghKGNvbmRpdGlvbiAmIEdfSU9fSU4pICYmICEoY29uZGl0aW9uICYgR19JT19IVVAp
ICYmICEoY29uZGl0aW9uICYgR19JT19FUlIpKSB7Ci0gICAgICAgICAgICAvLyBFdmVudFNvdXJj
ZSBoYXMgYmVlbiBjYW5jZWxsZWQsIHJldHVybiBGQUxTRSB0byBkZXN0cm95IHRoZSBzb3VyY2Uu
Ci0gICAgICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgICAgIH0KLQotICAgICAgICBleGVjdXRl
RXZlbnRTb3VyY2UoZXZlbnRTb3VyY2UpOwotICAgICAgICByZXR1cm4gVFJVRTsKLSAgICB9Ci0K
LSAgICBzdGF0aWMgZ2Jvb2xlYW4gcGVyZm9ybVdvcmtPblRlcm1pbmF0aW9uKEdQaWQsIGdpbnQs
IEV2ZW50U291cmNlKiBldmVudFNvdXJjZSkKLSAgICB7Ci0gICAgICAgIGV4ZWN1dGVFdmVudFNv
dXJjZShldmVudFNvdXJjZSk7Ci0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0KLSAgICBz
dGF0aWMgdm9pZCBkZWxldGVFdmVudFNvdXJjZShFdmVudFNvdXJjZSogZXZlbnRTb3VyY2UpIAot
ICAgIHsKLSAgICAgICAgQVNTRVJUKGV2ZW50U291cmNlKTsKLSAgICAgICAgZGVsZXRlIGV2ZW50
U291cmNlOwotICAgIH0KLSAgIAotcHVibGljOgotICAgIEZ1bmN0aW9uPHZvaWQoKT4gbV9mdW5j
dGlvbjsKLSAgICBXb3JrUXVldWUqIG1fd29ya1F1ZXVlOwotICAgIEdDYW5jZWxsYWJsZSogbV9j
YW5jZWxsYWJsZTsKLX07Ci0KLS8vIFdvcmtRdWV1ZQotc3RhdGljIGNvbnN0IHNpemVfdCBrVmlz
dWFsU3R1ZGlvVGhyZWFkTmFtZUxpbWl0ID0gMzE7Ci0KLXZvaWQgV29ya1F1ZXVlOjpwbGF0Zm9y
bUluaXRpYWxpemUoY29uc3QgY2hhciogbmFtZSkKLXsKLSAgICBtX2V2ZW50Q29udGV4dCA9IGFk
b3B0R1JlZihnX21haW5fY29udGV4dF9uZXcoKSk7Ci0gICAgQVNTRVJUKG1fZXZlbnRDb250ZXh0
KTsKLSAgICBtX2V2ZW50TG9vcCA9IGFkb3B0R1JlZihnX21haW5fbG9vcF9uZXcobV9ldmVudENv
bnRleHQuZ2V0KCksIEZBTFNFKSk7Ci0gICAgQVNTRVJUKG1fZXZlbnRMb29wKTsKLQotICAgIC8v
IFRoaXMgbmFtZSBjYW4gYmUgY29tLmFwcGxlLldlYktpdC5Qcm9jZXNzTGF1bmNoZXIgb3IgY29t
LmFwcGxlLkNvcmVJUEMuUmVjZWl2ZVF1ZXVlLgotICAgIC8vIFdlIGFyZSB1c2luZyB0aG9zZSBu
YW1lcyBmb3IgdGhlIHRocmVhZCBuYW1lLCBidXQgYm90aCBhcmUgbG9uZ2VyIHRoYW4gMzEgY2hh
cmFjdGVycywKLSAgICAvLyB3aGljaCBpcyB0aGUgbGltaXQgb2YgVmlzdWFsIFN0dWRpbyBmb3Ig
dGhyZWFkIG5hbWVzLgotICAgIC8vIFdoZW4gbG9nIGlzIGVuYWJsZWQgY3JlYXRlVGhyZWFkKCkg
d2lsbCBhc3NlcnQgaW5zdGVhZCBvZiB0cnVuY2F0ZSB0aGUgbmFtZSwgc28gd2UgbmVlZAotICAg
IC8vIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCB1c2UgYSBuYW1lIGxvbmdlciB0aGFuIDMxIGNoYXJh
Y3RlcnMuCi0gICAgY29uc3QgY2hhciogdGhyZWFkTmFtZSA9IGdfc3RycnN0cihuYW1lLCAiLiIp
OwotICAgIGlmICh0aHJlYWROYW1lKQotICAgICAgICB0aHJlYWROYW1lKys7Ci0gICAgZWxzZQot
ICAgICAgICB0aHJlYWROYW1lID0gbmFtZTsKLSAgICBpZiAoc3RybGVuKHRocmVhZE5hbWUpID4g
a1Zpc3VhbFN0dWRpb1RocmVhZE5hbWVMaW1pdCkKLSAgICAgICAgdGhyZWFkTmFtZSArPSBzdHJs
ZW4odGhyZWFkTmFtZSkgLSBrVmlzdWFsU3R1ZGlvVGhyZWFkTmFtZUxpbWl0OwotCi0gICAgbV93
b3JrUXVldWVUaHJlYWQgPSBjcmVhdGVUaHJlYWQocmVpbnRlcnByZXRfY2FzdDxXVEY6OlRocmVh
ZEZ1bmN0aW9uPigmV29ya1F1ZXVlOjpzdGFydFdvcmtRdWV1ZVRocmVhZCksIHRoaXMsIHRocmVh
ZE5hbWUpOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKLXsKLSAg
ICBNdXRleExvY2tlciBsb2NrZXIobV9ldmVudExvb3BMb2NrKTsKLQotICAgIGlmIChtX2V2ZW50
TG9vcCkgewotICAgICAgICBpZiAoZ19tYWluX2xvb3BfaXNfcnVubmluZyhtX2V2ZW50TG9vcC5n
ZXQoKSkpCi0gICAgICAgICAgICBnX21haW5fbG9vcF9xdWl0KG1fZXZlbnRMb29wLmdldCgpKTsK
LSAgICAgICAgbV9ldmVudExvb3AuY2xlYXIoKTsKLSAgICB9Ci0KLSAgICBtX2V2ZW50Q29udGV4
dC5jbGVhcigpOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6c3RhcnRXb3JrUXVldWVUaHJlYWQoV29y
a1F1ZXVlKiB3b3JrUXVldWUpCi17Ci0gICAgd29ya1F1ZXVlLT53b3JrUXVldWVUaHJlYWRCb2R5
KCk7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjp3b3JrUXVldWVUaHJlYWRCb2R5KCkKLXsKLSAgICBn
X21haW5fbG9vcF9ydW4obV9ldmVudExvb3AuZ2V0KCkpOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6
cmVnaXN0ZXJFdmVudFNvdXJjZUhhbmRsZXIoaW50IGZpbGVEZXNjcmlwdG9yLCBpbnQgY29uZGl0
aW9uLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKLXsKLSAgICBHUmVmUHRyPEdT
b2NrZXQ+IHNvY2tldCA9IGFkb3B0R1JlZihnX3NvY2tldF9uZXdfZnJvbV9mZChmaWxlRGVzY3Jp
cHRvciwgMCkpOwotICAgIEFTU0VSVChzb2NrZXQpOwotICAgIEdSZWZQdHI8R0NhbmNlbGxhYmxl
PiBjYW5jZWxsYWJsZSA9IGFkb3B0R1JlZihnX2NhbmNlbGxhYmxlX25ldygpKTsKLSAgICBHUmVm
UHRyPEdTb3VyY2U+IGRpc3BhdGNoU291cmNlID0gYWRvcHRHUmVmKGdfc29ja2V0X2NyZWF0ZV9z
b3VyY2Uoc29ja2V0LmdldCgpLCBzdGF0aWNfY2FzdDxHSU9Db25kaXRpb24+KGNvbmRpdGlvbiks
IGNhbmNlbGxhYmxlLmdldCgpKSk7Ci0gICAgQVNTRVJUKGRpc3BhdGNoU291cmNlKTsKLSAgICBF
dmVudFNvdXJjZSogZXZlbnRTb3VyY2UgPSBuZXcgRXZlbnRTb3VyY2UoZnVuY3Rpb24sIHRoaXMs
IGNhbmNlbGxhYmxlLmdldCgpKTsKLSAgICBBU1NFUlQoZXZlbnRTb3VyY2UpOwotCi0gICAgZ19z
b3VyY2Vfc2V0X2NhbGxiYWNrKGRpc3BhdGNoU291cmNlLmdldCgpLCByZWludGVycHJldF9jYXN0
PEdTb3VyY2VGdW5jPigmV29ya1F1ZXVlOjpFdmVudFNvdXJjZTo6cGVyZm9ybVdvcmspLAotICAg
ICAgICBldmVudFNvdXJjZSwgcmVpbnRlcnByZXRfY2FzdDxHRGVzdHJveU5vdGlmeT4oJldvcmtR
dWV1ZTo6RXZlbnRTb3VyY2U6OmRlbGV0ZUV2ZW50U291cmNlKSk7Ci0KLSAgICAvLyBTZXQgdXAg
dGhlIGV2ZW50IHNvdXJjZXMgdW5kZXIgdGhlIG11dGV4IHNpbmNlIHRoaXMgaXMgc2hhcmVkIGFj
cm9zcyBtdWx0aXBsZSB0aHJlYWRzLgotICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2Vy
KG1fZXZlbnRTb3VyY2VzTG9jayk7Ci0gICAgICAgIFZlY3RvcjxFdmVudFNvdXJjZSo+IHNvdXJj
ZXM7Ci0gICAgICAgIEV2ZW50U291cmNlSXRlcmF0b3IgaXQgPSBtX2V2ZW50U291cmNlcy5maW5k
KGZpbGVEZXNjcmlwdG9yKTsKLSAgICAgICAgaWYgKGl0ICE9IG1fZXZlbnRTb3VyY2VzLmVuZCgp
KSAKLSAgICAgICAgICAgIHNvdXJjZXMgPSBpdC0+c2Vjb25kOwotCi0gICAgICAgIHNvdXJjZXMu
YXBwZW5kKGV2ZW50U291cmNlKTsKLSAgICAgICAgbV9ldmVudFNvdXJjZXMuc2V0KGZpbGVEZXNj
cmlwdG9yLCBzb3VyY2VzKTsKLSAgICB9Ci0KLSAgICBnX3NvdXJjZV9hdHRhY2goZGlzcGF0Y2hT
b3VyY2UuZ2V0KCksIG1fZXZlbnRDb250ZXh0LmdldCgpKTsKLX0KLQotdm9pZCBXb3JrUXVldWU6
OnVucmVnaXN0ZXJFdmVudFNvdXJjZUhhbmRsZXIoaW50IGZpbGVEZXNjcmlwdG9yKQotewotICAg
IEFTU0VSVChmaWxlRGVzY3JpcHRvcik7Ci0gICAgCi0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1f
ZXZlbnRTb3VyY2VzTG9jayk7Ci0gICAgCi0gICAgRXZlbnRTb3VyY2VJdGVyYXRvciBpdCA9IG1f
ZXZlbnRTb3VyY2VzLmZpbmQoZmlsZURlc2NyaXB0b3IpOwotICAgIEFTU0VSVChpdCAhPSBtX2V2
ZW50U291cmNlcy5lbmQoKSk7Ci0gICAgQVNTRVJUKG1fZXZlbnRTb3VyY2VzLmNvbnRhaW5zKGZp
bGVEZXNjcmlwdG9yKSk7Ci0KLSAgICBpZiAoaXQgIT0gbV9ldmVudFNvdXJjZXMuZW5kKCkpIHsK
LSAgICAgICAgVmVjdG9yPEV2ZW50U291cmNlKj4gc291cmNlcyA9IGl0LT5zZWNvbmQ7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzb3VyY2VzLnNpemUoKTsgaSsrKQotICAgICAg
ICAgICAgc291cmNlc1tpXS0+Y2FuY2VsKCk7Ci0KLSAgICAgICAgbV9ldmVudFNvdXJjZXMucmVt
b3ZlKGl0KTsKLSAgICB9Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpkaXNwYXRjaE9uU291cmNlKEdT
b3VyY2UqIGRpc3BhdGNoU291cmNlLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbiwg
R1NvdXJjZUZ1bmMgc291cmNlQ2FsbGJhY2spCi17Ci0gICAgRXZlbnRTb3VyY2UqIGV2ZW50U291
cmNlID0gbmV3IEV2ZW50U291cmNlKGZ1bmN0aW9uLCB0aGlzLCAwKTsKLQotICAgIGdfc291cmNl
X3NldF9jYWxsYmFjayhkaXNwYXRjaFNvdXJjZSwgc291cmNlQ2FsbGJhY2ssIGV2ZW50U291cmNl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PEdEZXN0cm95Tm90
aWZ5PigmV29ya1F1ZXVlOjpFdmVudFNvdXJjZTo6ZGVsZXRlRXZlbnRTb3VyY2UpKTsKLQotICAg
IGdfc291cmNlX2F0dGFjaChkaXNwYXRjaFNvdXJjZSwgbV9ldmVudENvbnRleHQuZ2V0KCkpOwot
fQotCi12b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2goY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVu
Y3Rpb24pCi17Ci0gICAgR1JlZlB0cjxHU291cmNlPiBkaXNwYXRjaFNvdXJjZSA9IGFkb3B0R1Jl
ZihnX2lkbGVfc291cmNlX25ldygpKTsKLSAgICBBU1NFUlQoZGlzcGF0Y2hTb3VyY2UpOwotICAg
IGdfc291cmNlX3NldF9wcmlvcml0eShkaXNwYXRjaFNvdXJjZS5nZXQoKSwgR19QUklPUklUWV9E
RUZBVUxUKTsKLQotICAgIGRpc3BhdGNoT25Tb3VyY2UoZGlzcGF0Y2hTb3VyY2UuZ2V0KCksIGZ1
bmN0aW9uLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPigmV29ya1F1ZXVlOjpFdmVudFNv
dXJjZTo6cGVyZm9ybVdvcmtPbmNlKSk7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpkaXNwYXRjaEFm
dGVyRGVsYXkoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24sIGRvdWJsZSBkZWxheSkK
LXsKLSAgICBHUmVmUHRyPEdTb3VyY2U+IGRpc3BhdGNoU291cmNlID0gYWRvcHRHUmVmKGdfdGlt
ZW91dF9zb3VyY2VfbmV3KHN0YXRpY19jYXN0PGd1aW50PihkZWxheSAqIDEwMDApKSk7Ci0gICAg
QVNTRVJUKGRpc3BhdGNoU291cmNlKTsKLQotICAgIGRpc3BhdGNoT25Tb3VyY2UoZGlzcGF0Y2hT
b3VyY2UuZ2V0KCksIGZ1bmN0aW9uLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPigmV29y
a1F1ZXVlOjpFdmVudFNvdXJjZTo6cGVyZm9ybVdvcmtPbmNlKSk7Ci19Ci0KLXZvaWQgV29ya1F1
ZXVlOjpkaXNwYXRjaE9uVGVybWluYXRpb24oV2ViS2l0OjpQbGF0Zm9ybVByb2Nlc3NJZGVudGlm
aWVyIHByb2Nlc3MsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQotewotICAgIEdS
ZWZQdHI8R1NvdXJjZT4gZGlzcGF0Y2hTb3VyY2UgPSBhZG9wdEdSZWYoZ19jaGlsZF93YXRjaF9z
b3VyY2VfbmV3KHByb2Nlc3MpKTsKLSAgICBBU1NFUlQoZGlzcGF0Y2hTb3VyY2UpOwotCi0gICAg
ZGlzcGF0Y2hPblNvdXJjZShkaXNwYXRjaFNvdXJjZS5nZXQoKSwgZnVuY3Rpb24sIHJlaW50ZXJw
cmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KCZXb3JrUXVldWU6OkV2ZW50U291cmNlOjpwZXJmb3JtV29y
a09uVGVybWluYXRpb24pKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3Jt
L21hYy9Xb3JrUXVldWVNYWMuY3BwIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vbWFjL1dvcmtR
dWV1ZU1hYy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlNDczZWU1Y2M4NGU1
ODQyOWIwNDM5Y2NkOTIxYWMyYzQ5MmZmYWEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vbWFjL1dvcmtRdWV1ZU1h
Yy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXb3JrUXVldWUuaCIKLQotI2luY2x1ZGUgPG1hY2gv
bWFjaF9pbml0Lmg+Ci0jaW5jbHVkZSA8bWFjaC9tYWNoX3BvcnQuaD4KLSNpbmNsdWRlIDx3dGYv
UGFzc093blB0ci5oPgotCi12b2lkIFdvcmtRdWV1ZTo6ZXhlY3V0ZUZ1bmN0aW9uKHZvaWQqIGNv
bnRleHQpCi17Ci0gICAgV29ya1F1ZXVlKiBxdWV1ZSA9IHN0YXRpY19jYXN0PFdvcmtRdWV1ZSo+
KGRpc3BhdGNoX2dldF9jb250ZXh0KGRpc3BhdGNoX2dldF9jdXJyZW50X3F1ZXVlKCkpKTsKLSAg
ICBPd25QdHI8RnVuY3Rpb248dm9pZCgpPiA+IGZ1bmN0aW9uID0gYWRvcHRQdHIoc3RhdGljX2Nh
c3Q8RnVuY3Rpb248dm9pZCgpPio+KGNvbnRleHQpKTsKLSAgICAKLSAgICB7Ci0gICAgICAgIE11
dGV4TG9ja2VyIGxvY2tlcihxdWV1ZS0+bV9pc1ZhbGlkTXV0ZXgpOwotICAgICAgICBpZiAoIXF1
ZXVlLT5tX2lzVmFsaWQpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgKCpmdW5j
dGlvbikoKTsKLX0KLQotdm9pZCBXb3JrUXVldWU6OmRpc3BhdGNoKGNvbnN0IEZ1bmN0aW9uPHZv
aWQoKT4mIGZ1bmN0aW9uKQotewotICAgIGRpc3BhdGNoX2FzeW5jX2YobV9kaXNwYXRjaFF1ZXVl
LCBuZXcgRnVuY3Rpb248dm9pZCgpPihmdW5jdGlvbiksIGV4ZWN1dGVGdW5jdGlvbik7Ci19Ci0K
LXZvaWQgV29ya1F1ZXVlOjpkaXNwYXRjaEFmdGVyRGVsYXkoY29uc3QgRnVuY3Rpb248dm9pZCgp
PiYgZnVuY3Rpb24sIGRvdWJsZSBkZWxheSkKLXsKLSAgICBkaXNwYXRjaF90aW1lX3QgZGVsYXlU
aW1lID0gZGlzcGF0Y2hfdGltZShESVNQQVRDSF9USU1FX05PVywgZGVsYXkgKiBOU0VDX1BFUl9T
RUMpOwotCi0gICAgZGlzcGF0Y2hfYWZ0ZXJfZihkZWxheVRpbWUsIG1fZGlzcGF0Y2hRdWV1ZSwg
bmV3IEZ1bmN0aW9uPHZvaWQoKT4oZnVuY3Rpb24pLCBleGVjdXRlRnVuY3Rpb24pOwotfQotCi1j
bGFzcyBXb3JrUXVldWU6OkV2ZW50U291cmNlIHsKLXB1YmxpYzoKLSAgICBFdmVudFNvdXJjZShN
YWNoUG9ydEV2ZW50VHlwZSBldmVudFR5cGUsIGRpc3BhdGNoX3NvdXJjZV90IGRpc3BhdGNoU291
cmNlLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKLSAgICAgICAgOiBtX2V2ZW50
VHlwZShldmVudFR5cGUpCi0gICAgICAgICwgbV9kaXNwYXRjaFNvdXJjZShkaXNwYXRjaFNvdXJj
ZSkKLSAgICAgICAgLCBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQotICAgIHsKLSAgICB9Ci0gICAgCi0g
ICAgZGlzcGF0Y2hfc291cmNlX3QgZGlzcGF0Y2hTb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX2Rp
c3BhdGNoU291cmNlOyB9Ci0gICAgCi0gICAgc3RhdGljIHZvaWQgZXZlbnRIYW5kbGVyKHZvaWQq
IHNvdXJjZSkgCi0gICAgewotICAgICAgICBFdmVudFNvdXJjZSogZXZlbnRTb3VyY2UgPSBzdGF0
aWNfY2FzdDxFdmVudFNvdXJjZSo+KHNvdXJjZSk7Ci0gICAgICAgIAotICAgICAgICBldmVudFNv
dXJjZS0+bV9mdW5jdGlvbigpOwotICAgIH0KLSAgICAKLSAgICBzdGF0aWMgdm9pZCBjYW5jZWxI
YW5kbGVyKHZvaWQqIHNvdXJjZSkKLSAgICB7Ci0gICAgICAgIEV2ZW50U291cmNlKiBldmVudFNv
dXJjZSA9IHN0YXRpY19jYXN0PEV2ZW50U291cmNlKj4oc291cmNlKTsKLSAgICAgICAgCi0gICAg
ICAgIG1hY2hfcG9ydF90IG1hY2hQb3J0ID0gZGlzcGF0Y2hfc291cmNlX2dldF9oYW5kbGUoZXZl
bnRTb3VyY2UtPm1fZGlzcGF0Y2hTb3VyY2UpOwotICAgICAgICAKLSAgICAgICAgc3dpdGNoIChl
dmVudFNvdXJjZS0+bV9ldmVudFR5cGUpIHsKLSAgICAgICAgY2FzZSBNYWNoUG9ydERhdGFBdmFp
bGFibGU6Ci0gICAgICAgICAgICAvLyBSZWxlYXNlIG91ciByZWNlaXZlIHJpZ2h0LgotICAgICAg
ICAgICAgbWFjaF9wb3J0X21vZF9yZWZzKG1hY2hfdGFza19zZWxmKCksIG1hY2hQb3J0LCBNQUNI
X1BPUlRfUklHSFRfUkVDRUlWRSwgLTEpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgTWFjaFBvcnREZWFkTmFtZU5vdGlmaWNhdGlvbjoKLSAgICAgICAgICAgIC8vIFJlbGVhc2Ug
b3VyIHNlbmQgcmlnaHQuCi0gICAgICAgICAgICBtYWNoX3BvcnRfZGVhbGxvY2F0ZShtYWNoX3Rh
c2tfc2VsZigpLCBtYWNoUG9ydCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
IH0KLSAgICAKLSAgICBzdGF0aWMgdm9pZCBmaW5hbGl6ZUhhbmRsZXIodm9pZCogc291cmNlKQot
ICAgIHsKLSAgICAgICAgRXZlbnRTb3VyY2UqIGV2ZW50U291cmNlID0gc3RhdGljX2Nhc3Q8RXZl
bnRTb3VyY2UqPihzb3VyY2UpOwotICAgICAgICAKLSAgICAgICAgZGVsZXRlIGV2ZW50U291cmNl
OwotICAgIH0KLSAgICAKLXByaXZhdGU6Ci0gICAgTWFjaFBvcnRFdmVudFR5cGUgbV9ldmVudFR5
cGU7Ci0gICAgCi0gICAgLy8gVGhpcyBpcyBhIHdlYWsgcmVmZXJlbmNlLCBzaW5jZSBtX2Rpc3Bh
dGNoU291cmNlIHJlZmVyZW5jZXMgdGhlIGV2ZW50IHNvdXJjZS4KLSAgICBkaXNwYXRjaF9zb3Vy
Y2VfdCBtX2Rpc3BhdGNoU291cmNlOwotCi0gICAgRnVuY3Rpb248dm9pZCgpPiBtX2Z1bmN0aW9u
OwotfTsKLQotdm9pZCBXb3JrUXVldWU6OnJlZ2lzdGVyTWFjaFBvcnRFdmVudEhhbmRsZXIobWFj
aF9wb3J0X3QgbWFjaFBvcnQsIE1hY2hQb3J0RXZlbnRUeXBlIGV2ZW50VHlwZSwgY29uc3QgRnVu
Y3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCi17Ci0gICAgZGlzcGF0Y2hfc291cmNlX3R5cGVfdCBz
b3VyY2VUeXBlID0gMDsKLSAgICBzd2l0Y2ggKGV2ZW50VHlwZSkgewotICAgIGNhc2UgTWFjaFBv
cnREYXRhQXZhaWxhYmxlOgotICAgICAgICBzb3VyY2VUeXBlID0gRElTUEFUQ0hfU09VUkNFX1RZ
UEVfTUFDSF9SRUNWOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE1hY2hQb3J0RGVhZE5hbWVO
b3RpZmljYXRpb246Ci0gICAgICAgIHNvdXJjZVR5cGUgPSBESVNQQVRDSF9TT1VSQ0VfVFlQRV9N
QUNIX1NFTkQ7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAKLSAgICBkaXNwYXRjaF9zb3Vy
Y2VfdCBkaXNwYXRjaFNvdXJjZSA9IGRpc3BhdGNoX3NvdXJjZV9jcmVhdGUoc291cmNlVHlwZSwg
bWFjaFBvcnQsIDAsIG1fZGlzcGF0Y2hRdWV1ZSk7Ci0gICAgCi0gICAgRXZlbnRTb3VyY2UqIGV2
ZW50U291cmNlID0gbmV3IEV2ZW50U291cmNlKGV2ZW50VHlwZSwgZGlzcGF0Y2hTb3VyY2UsIGZ1
bmN0aW9uKTsKLSAgICBkaXNwYXRjaF9zZXRfY29udGV4dChkaXNwYXRjaFNvdXJjZSwgZXZlbnRT
b3VyY2UpOwotICAgIAotICAgIGRpc3BhdGNoX3NvdXJjZV9zZXRfZXZlbnRfaGFuZGxlcl9mKGRp
c3BhdGNoU291cmNlLCAmRXZlbnRTb3VyY2U6OmV2ZW50SGFuZGxlcik7Ci0gICAgZGlzcGF0Y2hf
c291cmNlX3NldF9jYW5jZWxfaGFuZGxlcl9mKGRpc3BhdGNoU291cmNlLCAmRXZlbnRTb3VyY2U6
OmNhbmNlbEhhbmRsZXIpOwotICAgIGRpc3BhdGNoX3NldF9maW5hbGl6ZXJfZihkaXNwYXRjaFNv
dXJjZSwgJkV2ZW50U291cmNlOjpmaW5hbGl6ZUhhbmRsZXIpOwotICAgIAotICAgIC8vIEFkZCB0
aGUgc291cmNlIHRvIG91ciBzZXQgb2Ygc291cmNlcy4KLSAgICB7Ci0gICAgICAgIE11dGV4TG9j
a2VyIGxvY2tlcihtX2V2ZW50U291cmNlc011dGV4KTsKLSAgICAgICAgCi0gICAgICAgIEFTU0VS
VCghbV9ldmVudFNvdXJjZXMuY29udGFpbnMobWFjaFBvcnQpKTsKLSAgICAgICAgCi0gICAgICAg
IG1fZXZlbnRTb3VyY2VzLnNldChtYWNoUG9ydCwgZXZlbnRTb3VyY2UpOwotICAgICAgICAKLSAg
ICAgICAgLy8gQW5kIHN0YXJ0IGl0IQotICAgICAgICBkaXNwYXRjaF9yZXN1bWUoZGlzcGF0Y2hT
b3VyY2UpOwotICAgIH0KLX0KLQotdm9pZCBXb3JrUXVldWU6OnVucmVnaXN0ZXJNYWNoUG9ydEV2
ZW50SGFuZGxlcihtYWNoX3BvcnRfdCBtYWNoUG9ydCkKLXsKLSAgICBBU1NFUlQobWFjaFBvcnQp
OwotICAgIAotICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2V2ZW50U291cmNlc011dGV4KTsKLSAg
ICAKLSAgICBIYXNoTWFwPG1hY2hfcG9ydF90LCBFdmVudFNvdXJjZSo+OjppdGVyYXRvciBpdCA9
IG1fZXZlbnRTb3VyY2VzLmZpbmQobWFjaFBvcnQpOwotICAgIEFTU0VSVChpdCAhPSBtX2V2ZW50
U291cmNlcy5lbmQoKSk7Ci0gICAgCi0gICAgQVNTRVJUKG1fZXZlbnRTb3VyY2VzLmNvbnRhaW5z
KG1hY2hQb3J0KSk7Ci0KLSAgICBFdmVudFNvdXJjZSogZXZlbnRTb3VyY2UgPSBpdC0+c2Vjb25k
OwotICAgIC8vIENhbmNlbCBhbmQgcmVsZWFzZSB0aGUgc291cmNlLiBJdCB3aWxsIGJlIGRlbGV0
ZWQgaW4gaXRzIGZpbmFsaXplIGhhbmRsZXIuCi0gICAgZGlzcGF0Y2hfc291cmNlX2NhbmNlbChl
dmVudFNvdXJjZS0+ZGlzcGF0Y2hTb3VyY2UoKSk7Ci0gICAgZGlzcGF0Y2hfcmVsZWFzZShldmVu
dFNvdXJjZS0+ZGlzcGF0Y2hTb3VyY2UoKSk7Ci0KLSAgICBtX2V2ZW50U291cmNlcy5yZW1vdmUo
aXQpOyAgICAKLX0KLQotdm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW5pdGlhbGl6ZShjb25zdCBj
aGFyKiBuYW1lKQotewotICAgIG1fZGlzcGF0Y2hRdWV1ZSA9IGRpc3BhdGNoX3F1ZXVlX2NyZWF0
ZShuYW1lLCAwKTsKLSAgICBkaXNwYXRjaF9zZXRfY29udGV4dChtX2Rpc3BhdGNoUXVldWUsIHRo
aXMpOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKLXsKLSNpZiAh
QVNTRVJUX0RJU0FCTEVECi0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZXZlbnRTb3VyY2VzTXV0
ZXgpOwotICAgIEFTU0VSVChtX2V2ZW50U291cmNlcy5pc0VtcHR5KCkpOwotI2VuZGlmCi0KLSAg
ICBkaXNwYXRjaF9yZWxlYXNlKG1fZGlzcGF0Y2hRdWV1ZSk7Ci19CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybS9xdC9Xb3JrUXVldWVRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybS9xdC9Xb3JrUXVldWVRdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGFhYTJiZTNkMGI4Yjc0ODUyOWEyODhmZWUyZDU5NGZkYjllNDk5MjYuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0v
cXQvV29ya1F1ZXVlUXQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTMwICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFy
eSgtaWVzKQotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV29ya1F1
ZXVlLmgiCi0KLSNpbmNsdWRlIDxRTG9jYWxTb2NrZXQ+Ci0jaW5jbHVkZSA8UU9iamVjdD4KLSNp
bmNsdWRlIDxRVGhyZWFkPgotI2luY2x1ZGUgPFFQcm9jZXNzPgotI2luY2x1ZGUgPFdlYkNvcmUv
Tm90SW1wbGVtZW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+Ci0KLWNsYXNzIFdv
cmtRdWV1ZTo6V29ya0l0ZW1RdCA6IHB1YmxpYyBRT2JqZWN0IHsKLSAgICBRX09CSkVDVAotcHVi
bGljOgotICAgIFdvcmtJdGVtUXQoV29ya1F1ZXVlKiB3b3JrUXVldWUsIGNvbnN0IEZ1bmN0aW9u
PHZvaWQoKT4mIGZ1bmN0aW9uKQotICAgICAgICA6IG1fcXVldWUod29ya1F1ZXVlKQotICAgICAg
ICAsIG1fc291cmNlKDApCi0gICAgICAgICwgbV9zaWduYWwoMCkKLSAgICAgICAgLCBtX2Z1bmN0
aW9uKGZ1bmN0aW9uKQotICAgIHsKLSAgICB9Ci0KLSAgICBXb3JrSXRlbVF0KFdvcmtRdWV1ZSog
d29ya1F1ZXVlLCBRT2JqZWN0KiBzb3VyY2UsIGNvbnN0IGNoYXIqIHNpZ25hbCwgY29uc3QgRnVu
Y3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCi0gICAgICAgIDogbV9xdWV1ZSh3b3JrUXVldWUpCi0g
ICAgICAgICwgbV9zb3VyY2Uoc291cmNlKQotICAgICAgICAsIG1fc2lnbmFsKHNpZ25hbCkKLSAg
ICAgICAgLCBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQotICAgIHsKLSAgICAgICAgY29ubmVjdChtX3Nv
dXJjZSwgbV9zaWduYWwsIFNMT1QoZXhlY3V0ZSgpKSwgUXQ6OlF1ZXVlZENvbm5lY3Rpb24pOwot
ICAgIH0KLQotICAgIH5Xb3JrSXRlbVF0KCkKLSAgICB7Ci0gICAgfQotCi0gICAgUV9TTE9UIHZv
aWQgZXhlY3V0ZSgpIAotICAgIHsgCi0gICAgICAgIGlmIChtX3F1ZXVlLT5tX2lzVmFsaWQpCi0g
ICAgICAgICAgICBtX2Z1bmN0aW9uKCk7Ci0gICAgfQotCi0gICAgUV9TTE9UIHZvaWQgZXhlY3V0
ZUFuZERlbGV0ZSgpCi0gICAgewotICAgICAgICBleGVjdXRlKCk7Ci0gICAgICAgIGRlbGV0ZSB0
aGlzOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB0aW1lckV2ZW50KFFUaW1lckV2ZW50KikK
LSAgICB7Ci0gICAgICAgIGV4ZWN1dGVBbmREZWxldGUoKTsKLSAgICB9Ci0KLSAgICBXb3JrUXVl
dWUqIG1fcXVldWU7Ci0gICAgUU9iamVjdCogbV9zb3VyY2U7Ci0gICAgY29uc3QgY2hhciogbV9z
aWduYWw7Ci0gICAgRnVuY3Rpb248dm9pZCgpPiBtX2Z1bmN0aW9uOwotfTsKLQotUVNvY2tldE5v
dGlmaWVyKiBXb3JrUXVldWU6OnJlZ2lzdGVyU29ja2V0RXZlbnRIYW5kbGVyKGludCBzb2NrZXRE
ZXNjcmlwdG9yLCBRU29ja2V0Tm90aWZpZXI6OlR5cGUgdHlwZSwgY29uc3QgRnVuY3Rpb248dm9p
ZCgpPiYgZnVuY3Rpb24pCi17Ci0gICAgQVNTRVJUKG1fd29ya1RocmVhZCk7Ci0KLSAgICBRU29j
a2V0Tm90aWZpZXIqIG5vdGlmaWVyID0gbmV3IFFTb2NrZXROb3RpZmllcihzb2NrZXREZXNjcmlw
dG9yLCB0eXBlLCAwKTsKLSAgICBub3RpZmllci0+c2V0RW5hYmxlZChmYWxzZSk7Ci0gICAgbm90
aWZpZXItPm1vdmVUb1RocmVhZChtX3dvcmtUaHJlYWQpOwotICAgIFdvcmtRdWV1ZTo6V29ya0l0
ZW1RdCogaXRlbVF0ID0gbmV3IFdvcmtRdWV1ZTo6V29ya0l0ZW1RdCh0aGlzLCBub3RpZmllciwg
U0lHTkFMKGFjdGl2YXRlZChpbnQpKSwgZnVuY3Rpb24pOwotICAgIGl0ZW1RdC0+bW92ZVRvVGhy
ZWFkKG1fd29ya1RocmVhZCk7Ci0gICAgbm90aWZpZXItPnNldEVuYWJsZWQodHJ1ZSk7Ci0gICAg
cmV0dXJuIG5vdGlmaWVyOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXpl
KGNvbnN0IGNoYXIqKQotewotICAgIG1fd29ya1RocmVhZCA9IG5ldyBRVGhyZWFkKCk7Ci0gICAg
bV93b3JrVGhyZWFkLT5zdGFydCgpOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1JbnZh
bGlkYXRlKCkKLXsKLSAgICBtX3dvcmtUaHJlYWQtPmV4aXQoKTsKLSAgICBtX3dvcmtUaHJlYWQt
PndhaXQoKTsKLSAgICBkZWxldGUgbV93b3JrVGhyZWFkOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6
ZGlzcGF0Y2goY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCi17Ci0gICAgV29ya1F1
ZXVlOjpXb3JrSXRlbVF0KiBpdGVtUXQgPSBuZXcgV29ya1F1ZXVlOjpXb3JrSXRlbVF0KHRoaXMs
IGZ1bmN0aW9uKTsKLSAgICBpdGVtUXQtPm1vdmVUb1RocmVhZChtX3dvcmtUaHJlYWQpOwotICAg
IFFNZXRhT2JqZWN0OjppbnZva2VNZXRob2QoaXRlbVF0LCAiZXhlY3V0ZUFuZERlbGV0ZSIsIFF0
OjpRdWV1ZWRDb25uZWN0aW9uKTsKLX0KLQotdm9pZCBXb3JrUXVldWU6OmRpc3BhdGNoQWZ0ZXJE
ZWxheShjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbiwgZG91YmxlIGRlbGF5SW5TZWNv
bmQpCi17Ci0gICAgV29ya1F1ZXVlOjpXb3JrSXRlbVF0KiBpdGVtUXQgPSBuZXcgV29ya1F1ZXVl
OjpXb3JrSXRlbVF0KHRoaXMsIGZ1bmN0aW9uKTsKLSAgICBpdGVtUXQtPnN0YXJ0VGltZXIoc3Rh
dGljX2Nhc3Q8aW50PihkZWxheUluU2Vjb25kICogMTAwMCkpOwotICAgIGl0ZW1RdC0+bW92ZVRv
VGhyZWFkKG1fd29ya1RocmVhZCk7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpkaXNwYXRjaE9uVGVy
bWluYXRpb24oV2ViS2l0OjpQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyIHByb2Nlc3MsIGNvbnN0
IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQotewotICAgIFdvcmtRdWV1ZTo6V29ya0l0ZW1R
dCogaXRlbVF0ID0gbmV3IFdvcmtRdWV1ZTo6V29ya0l0ZW1RdCh0aGlzLCBwcm9jZXNzLCBTSUdO
QUwoZmluaXNoZWQoaW50LCBRUHJvY2Vzczo6RXhpdFN0YXR1cykpLCBmdW5jdGlvbik7Ci0gICAg
aXRlbVF0LT5tb3ZlVG9UaHJlYWQobV93b3JrVGhyZWFkKTsKLX0KLQotI2luY2x1ZGUgIldvcmtR
dWV1ZVF0Lm1vYyIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3dpbi9Xb3Jr
UXVldWVXaW4uY3BwIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vd2luL1dvcmtRdWV1ZVdpbi5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhYmFkYmRhODk1ZTA3ZDllZTUzMzA3
OTVjYzk0ZTYxN2ViOTFkN2IuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vd2luL1dvcmtRdWV1ZVdpbi5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSwyOTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJXb3JrUXVldWUuaCIKLQotI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1w
bGVtZW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+Ci0KLWlubGluZSBXb3JrUXVl
dWU6OldvcmtJdGVtV2luOjpXb3JrSXRlbVdpbihjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5j
dGlvbiwgV29ya1F1ZXVlKiBxdWV1ZSkKLSAgICA6IG1fZnVuY3Rpb24oZnVuY3Rpb24pCi0gICAg
LCBtX3F1ZXVlKHF1ZXVlKQotewotfQotCi1QYXNzUmVmUHRyPFdvcmtRdWV1ZTo6V29ya0l0ZW1X
aW4+IFdvcmtRdWV1ZTo6V29ya0l0ZW1XaW46OmNyZWF0ZShjb25zdCBGdW5jdGlvbjx2b2lkKCk+
JiBmdW5jdGlvbiwgV29ya1F1ZXVlKiBxdWV1ZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFdvcmtJdGVtV2luKGZ1bmN0aW9uLCBxdWV1ZSkpOwotfQotCi1Xb3JrUXVldWU6OldvcmtJdGVt
V2luOjp+V29ya0l0ZW1XaW4oKQotewotfQotCi1pbmxpbmUgV29ya1F1ZXVlOjpIYW5kbGVXb3Jr
SXRlbTo6SGFuZGxlV29ya0l0ZW0oSEFORExFIGhhbmRsZSwgY29uc3QgRnVuY3Rpb248dm9pZCgp
PiYgZnVuY3Rpb24sIFdvcmtRdWV1ZSogcXVldWUpCi0gICAgOiBXb3JrSXRlbVdpbihmdW5jdGlv
biwgcXVldWUpCi0gICAgLCBtX2hhbmRsZShoYW5kbGUpCi0gICAgLCBtX3dhaXRIYW5kbGUoMCkK
LXsKLSAgICBBU1NFUlRfQVJHKGhhbmRsZSwgaGFuZGxlKTsKLX0KLQotUGFzc1JlZlB0cjxXb3Jr
UXVldWU6OkhhbmRsZVdvcmtJdGVtPiBXb3JrUXVldWU6OkhhbmRsZVdvcmtJdGVtOjpjcmVhdGVC
eUFkb3B0aW5nSGFuZGxlKEhBTkRMRSBoYW5kbGUsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1
bmN0aW9uLCBXb3JrUXVldWUqIHF1ZXVlKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgSGFu
ZGxlV29ya0l0ZW0oaGFuZGxlLCBmdW5jdGlvbiwgcXVldWUpKTsKLX0KLQotV29ya1F1ZXVlOjpI
YW5kbGVXb3JrSXRlbTo6fkhhbmRsZVdvcmtJdGVtKCkKLXsKLSAgICA6OkNsb3NlSGFuZGxlKG1f
aGFuZGxlKTsKLX0KLQotdm9pZCBXb3JrUXVldWU6OmhhbmRsZUNhbGxiYWNrKHZvaWQqIGNvbnRl
eHQsIEJPT0xFQU4gdGltZXJPcldhaXRGaXJlZCkKLXsKLSAgICBBU1NFUlRfQVJHKGNvbnRleHQs
IGNvbnRleHQpOwotICAgIEFTU0VSVF9BUkcodGltZXJPcldhaXRGaXJlZCwgIXRpbWVyT3JXYWl0
RmlyZWQpOwotCi0gICAgV29ya0l0ZW1XaW4qIGl0ZW0gPSBzdGF0aWNfY2FzdDxXb3JrSXRlbVdp
bio+KGNvbnRleHQpOwotICAgIFdvcmtRdWV1ZSogcXVldWUgPSBpdGVtLT5xdWV1ZSgpOwotCi0g
ICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrKHF1ZXVlLT5tX3dvcmtJdGVtUXVldWVMb2Nr
KTsKLSAgICAgICAgcXVldWUtPm1fd29ya0l0ZW1RdWV1ZS5hcHBlbmQoaXRlbSk7Ci0KLSAgICAg
ICAgLy8gSWYgbm8gb3RoZXIgdGhyZWFkIGlzIHBlcmZvcm1pbmcgd29yaywgd2UgY2FuIGRvIGl0
IG9uIHRoaXMgdGhyZWFkLgotICAgICAgICBpZiAoIXF1ZXVlLT50cnlSZWdpc3RlckFzV29ya1Ro
cmVhZCgpKSB7Ci0gICAgICAgICAgICAvLyBTb21lIG90aGVyIHRocmVhZCBpcyBwZXJmb3JtaW5n
IHdvcmsuIFNpbmNlIHdlIGhvbGQgdGhlIHF1ZXVlIGxvY2ssIHdlIGNhbiBiZSBzdXJlCi0gICAg
ICAgICAgICAvLyB0aGF0IHRoZSB3b3JrIHRocmVhZCBpcyBub3QgZXhpdGluZyBkdWUgdG8gYW4g
ZW1wdHkgcXVldWUgYW5kIHdpbGwgcHJvY2VzcyB0aGUgd29yawotICAgICAgICAgICAgLy8gaXRl
bSB3ZSBqdXN0IGFkZGVkIHRvIGl0LiBJZiB3ZSB3ZXJlbid0IGhvbGRpbmcgdGhlIGxvY2sgd2Un
ZCBoYXZlIHRvIHNpZ25hbAotICAgICAgICAgICAgLy8gbV9wZXJmb3JtV29ya0V2ZW50IHRvIG1h
a2Ugc3VyZSB0aGUgd29yayBpdGVtIGdvdCBwaWNrZWQgdXAuCi0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBxdWV1ZS0+cGVyZm9ybVdvcmtPblJlZ2lzdGVyZWRX
b3JrVGhyZWFkKCk7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpyZWdpc3RlckhhbmRsZShIQU5ETEUg
aGFuZGxlLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKLXsKLSAgICBSZWZQdHI8
SGFuZGxlV29ya0l0ZW0+IGhhbmRsZUl0ZW0gPSBIYW5kbGVXb3JrSXRlbTo6Y3JlYXRlQnlBZG9w
dGluZ0hhbmRsZShoYW5kbGUsIGZ1bmN0aW9uLCB0aGlzKTsKLQotICAgIHsKLSAgICAgICAgTXV0
ZXhMb2NrZXIgbG9jayhtX2hhbmRsZXNMb2NrKTsKLSAgICAgICAgQVNTRVJUX0FSRyhoYW5kbGUs
ICFtX2hhbmRsZXMuY29udGFpbnMoaGFuZGxlKSk7Ci0gICAgICAgIG1faGFuZGxlcy5zZXQoaGFu
ZGxlLCBoYW5kbGVJdGVtKTsKLSAgICB9Ci0KLSAgICBIQU5ETEUgd2FpdEhhbmRsZTsKLSAgICBp
ZiAoITo6UmVnaXN0ZXJXYWl0Rm9yU2luZ2xlT2JqZWN0KCZ3YWl0SGFuZGxlLCBoYW5kbGUsIGhh
bmRsZUNhbGxiYWNrLCBoYW5kbGVJdGVtLmdldCgpLCBJTkZJTklURSwgV1RfRVhFQ1VURURFRkFV
TFQpKSB7Ci0gICAgICAgIERXT1JEIGVycm9yID0gOjpHZXRMYXN0RXJyb3IoKTsKLSAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotICAgIGhhbmRsZUl0ZW0tPnNldFdhaXRIYW5k
bGUod2FpdEhhbmRsZSk7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjp1bnJlZ2lzdGVyQW5kQ2xvc2VI
YW5kbGUoSEFORExFIGhhbmRsZSkKLXsKLSAgICBSZWZQdHI8SGFuZGxlV29ya0l0ZW0+IGl0ZW07
Ci0gICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9oYW5kbGVzTG9jayk7Ci0gICAg
ICAgIEFTU0VSVF9BUkcoaGFuZGxlLCBtX2hhbmRsZXMuY29udGFpbnMoaGFuZGxlKSk7Ci0gICAg
ICAgIGl0ZW0gPSBtX2hhbmRsZXMudGFrZShoYW5kbGUpOwotICAgIH0KLQotICAgIHVucmVnaXN0
ZXJXYWl0QW5kRGVzdHJveUl0ZW1Tb29uKGl0ZW0ucmVsZWFzZSgpKTsKLX0KLQotRFdPUkQgV29y
a1F1ZXVlOjp3b3JrVGhyZWFkQ2FsbGJhY2sodm9pZCogY29udGV4dCkKLXsKLSAgICBBU1NFUlRf
QVJHKGNvbnRleHQsIGNvbnRleHQpOwotCi0gICAgV29ya1F1ZXVlKiBxdWV1ZSA9IHN0YXRpY19j
YXN0PFdvcmtRdWV1ZSo+KGNvbnRleHQpOwotCi0gICAgaWYgKCFxdWV1ZS0+dHJ5UmVnaXN0ZXJB
c1dvcmtUaHJlYWQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBxdWV1ZS0+cGVyZm9ybVdv
cmtPblJlZ2lzdGVyZWRXb3JrVGhyZWFkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgV29y
a1F1ZXVlOjpwZXJmb3JtV29ya09uUmVnaXN0ZXJlZFdvcmtUaHJlYWQoKQotewotICAgIEFTU0VS
VChtX2lzV29ya1RocmVhZFJlZ2lzdGVyZWQpOwotCi0gICAgYm9vbCBpc1ZhbGlkID0gdHJ1ZTsK
LQotICAgIG1fd29ya0l0ZW1RdWV1ZUxvY2subG9jaygpOwotCi0gICAgd2hpbGUgKGlzVmFsaWQg
JiYgIW1fd29ya0l0ZW1RdWV1ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgVmVjdG9yPFJlZlB0cjxX
b3JrSXRlbVdpbj4gPiB3b3JrSXRlbVF1ZXVlOwotICAgICAgICBtX3dvcmtJdGVtUXVldWUuc3dh
cCh3b3JrSXRlbVF1ZXVlKTsKLQotICAgICAgICAvLyBBbGxvdyBtb3JlIHdvcmsgdG8gYmUgc2No
ZWR1bGVkIHdoaWxlIHdlJ3JlIG5vdCB1c2luZyB0aGUgcXVldWUgZGlyZWN0bHkuCi0gICAgICAg
IG1fd29ya0l0ZW1RdWV1ZUxvY2sudW5sb2NrKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgd29ya0l0ZW1RdWV1ZS5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgTXV0ZXhMb2Nr
ZXIgbG9ja2VyKG1faXNWYWxpZE11dGV4KTsKLSAgICAgICAgICAgIGlzVmFsaWQgPSBtX2lzVmFs
aWQ7Ci0gICAgICAgICAgICBpZiAoIWlzVmFsaWQpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICB3b3JrSXRlbVF1ZXVlW2ldLT5mdW5jdGlvbigpKCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgbV93b3JrSXRlbVF1ZXVlTG9jay5sb2NrKCk7Ci0gICAgfQotCi0gICAgLy8gT25lIGlu
dmFyaWFudCB3ZSBtYWludGFpbiBpcyB0aGF0IGFueSB3b3JrIHNjaGVkdWxlZCB3aGlsZSBhIHdv
cmsgdGhyZWFkIGlzIHJlZ2lzdGVyZWQgd2lsbAotICAgIC8vIGJlIGhhbmRsZWQgYnkgdGhhdCB3
b3JrIHRocmVhZC4gVW5yZWdpc3RlciBhcyB0aGUgd29yayB0aHJlYWQgd2hpbGUgdGhlIHF1ZXVl
IGxvY2sgaXMgc3RpbGwKLSAgICAvLyBoZWxkIHNvIHRoYXQgbm8gd29yayBjYW4gYmUgc2NoZWR1
bGVkIHdoaWxlIHdlJ3JlIHN0aWxsIHJlZ2lzdGVyZWQuCi0gICAgdW5yZWdpc3RlckFzV29ya1Ro
cmVhZCgpOwotCi0gICAgbV93b3JrSXRlbVF1ZXVlTG9jay51bmxvY2soKTsKLX0KLQotdm9pZCBX
b3JrUXVldWU6OnBsYXRmb3JtSW5pdGlhbGl6ZShjb25zdCBjaGFyKiBuYW1lKQotewotICAgIG1f
aXNXb3JrVGhyZWFkUmVnaXN0ZXJlZCA9IDA7Ci0gICAgbV90aW1lclF1ZXVlID0gOjpDcmVhdGVU
aW1lclF1ZXVlKCk7Ci0gICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX3RpbWVyUXVldWUsICI6OkNy
ZWF0ZVRpbWVyUXVldWUgZmFpbGVkIHdpdGggZXJyb3IgJWx1IiwgOjpHZXRMYXN0RXJyb3IoKSk7
Ci19Ci0KLWJvb2wgV29ya1F1ZXVlOjp0cnlSZWdpc3RlckFzV29ya1RocmVhZCgpCi17Ci0gICAg
TE9ORyByZXN1bHQgPSA6OkludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlKCZtX2lzV29ya1RocmVh
ZFJlZ2lzdGVyZWQsIDEsIDApOwotICAgIEFTU0VSVCghcmVzdWx0IHx8IHJlc3VsdCA9PSAxKTsK
LSAgICByZXR1cm4gIXJlc3VsdDsKLX0KLQotdm9pZCBXb3JrUXVldWU6OnVucmVnaXN0ZXJBc1dv
cmtUaHJlYWQoKQotewotICAgIExPTkcgcmVzdWx0ID0gOjpJbnRlcmxvY2tlZENvbXBhcmVFeGNo
YW5nZSgmbV9pc1dvcmtUaHJlYWRSZWdpc3RlcmVkLCAwLCAxKTsKLSAgICBBU1NFUlRfVU5VU0VE
KHJlc3VsdCwgcmVzdWx0ID09IDEpOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1JbnZh
bGlkYXRlKCkKLXsKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgTXV0ZXhMb2NrZXIgbG9jayht
X2hhbmRsZXNMb2NrKTsKLSAgICBBU1NFUlQobV9oYW5kbGVzLmlzRW1wdHkoKSk7Ci0jZW5kaWYK
LQotICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIGVuc3VyZSB0aGF0IGFueSB0aW1lci1xdWV1ZSB0
aW1lcnMgdGhhdCBmaXJlIGFmdGVyIHRoaXMgcG9pbnQgZG9uJ3QgdHJ5IHRvCi0gICAgLy8gYWNj
ZXNzIHRoaXMgV29ya1F1ZXVlIDxodHRwOi8vd2Via2l0Lm9yZy9iLzQ0NjkwPi4KLSAgICA6OkRl
bGV0ZVRpbWVyUXVldWVFeChtX3RpbWVyUXVldWUsIDApOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6
ZGlzcGF0Y2goY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCi17Ci0gICAgTXV0ZXhM
b2NrZXIgbG9ja2VyKG1fd29ya0l0ZW1RdWV1ZUxvY2spOwotCi0gICAgbV93b3JrSXRlbVF1ZXVl
LmFwcGVuZChXb3JrSXRlbVdpbjo6Y3JlYXRlKGZ1bmN0aW9uLCB0aGlzKSk7Ci0KLSAgICAvLyBT
cGF3biBhIHdvcmsgdGhyZWFkIHRvIHBlcmZvcm0gdGhlIHdvcmsgd2UganVzdCBhZGRlZC4gQXMg
YW4gb3B0aW1pemF0aW9uLCB3ZSBhdm9pZAotICAgIC8vIHNwYXduaW5nIHRoZSB0aHJlYWQgaWYg
YSB3b3JrIHRocmVhZCBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQuIFRoaXMgcHJldmVudHMgbXVsdGlw
bGUgd29yawotICAgIC8vIHRocmVhZHMgZnJvbSBiZWluZyBzcGF3bmVkIGluIG1vc3QgY2FzZXMu
IChOb3RlIHRoYXQgd2hlbiBhIHdvcmsgdGhyZWFkIGhhcyBiZWVuIHNwYXduZWQgYnV0Ci0gICAg
Ly8gaGFzbid0IHJlZ2lzdGVyZWQgaXRzZWxmIHlldCwgbV9pc1dvcmtUaHJlYWRSZWdpc3RlcmVk
IHdpbGwgYmUgZmFsc2UgYW5kIHdlJ2xsIGVuZCB1cAotICAgIC8vIHNwYXduaW5nIGEgc2Vjb25k
IHdvcmsgdGhyZWFkIGhlcmUuIEJ1dCB3b3JrIHRocmVhZCByZWdpc3RyYXRpb24gcHJvY2VzcyB3
aWxsIGVuc3VyZSB0aGF0Ci0gICAgLy8gb25seSBvbmUgdGhyZWFkIGFjdHVhbGx5IGVuZHMgdXAg
cGVyZm9ybWluZyB3b3JrLikKLSAgICBpZiAoIW1faXNXb3JrVGhyZWFkUmVnaXN0ZXJlZCkKLSAg
ICAgICAgOjpRdWV1ZVVzZXJXb3JrSXRlbSh3b3JrVGhyZWFkQ2FsbGJhY2ssIHRoaXMsIFdUX0VY
RUNVVEVERUZBVUxUKTsKLX0KLQotc3RydWN0IFRpbWVyQ29udGV4dCA6IHB1YmxpYyBUaHJlYWRT
YWZlUmVmQ291bnRlZDxUaW1lckNvbnRleHQ+IHsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxUaW1l
ckNvbnRleHQ+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBUaW1lckNvbnRleHQpOyB9
Ci0KLSAgICBXb3JrUXVldWUqIHF1ZXVlOwotICAgIEZ1bmN0aW9uPHZvaWQoKT4gZnVuY3Rpb247
Ci0gICAgTXV0ZXggdGltZXJNdXRleDsKLSAgICBIQU5ETEUgdGltZXI7Ci0KLXByaXZhdGU6Ci0g
ICAgVGltZXJDb250ZXh0KCkgOiBxdWV1ZSgwKSwgdGltZXIoMCkgeyB9Ci19OwotCi12b2lkIFdv
cmtRdWV1ZTo6dGltZXJDYWxsYmFjayh2b2lkKiBjb250ZXh0LCBCT09MRUFOIHRpbWVyT3JXYWl0
RmlyZWQpCi17Ci0gICAgQVNTRVJUX0FSRyhjb250ZXh0LCBjb250ZXh0KTsKLSAgICBBU1NFUlRf
VU5VU0VEKHRpbWVyT3JXYWl0RmlyZWQsIHRpbWVyT3JXYWl0RmlyZWQpOwotCi0gICAgLy8gQmFs
YW5jZWQgYnkgbGVha1JlZiBpbiBzY2hlZHVsZVdvcmtBZnRlckRlbGF5LgotICAgIFJlZlB0cjxU
aW1lckNvbnRleHQ+IHRpbWVyQ29udGV4dCA9IGFkb3B0UmVmKHN0YXRpY19jYXN0PFRpbWVyQ29u
dGV4dCo+KGNvbnRleHQpKTsKLQotICAgIHRpbWVyQ29udGV4dC0+cXVldWUtPmRpc3BhdGNoKHRp
bWVyQ29udGV4dC0+ZnVuY3Rpb24pOwotCi0gICAgTXV0ZXhMb2NrZXIgbG9jayh0aW1lckNvbnRl
eHQtPnRpbWVyTXV0ZXgpOwotICAgIEFTU0VSVCh0aW1lckNvbnRleHQtPnRpbWVyKTsKLSAgICBB
U1NFUlQodGltZXJDb250ZXh0LT5xdWV1ZS0+bV90aW1lclF1ZXVlKTsKLSAgICBpZiAoITo6RGVs
ZXRlVGltZXJRdWV1ZVRpbWVyKHRpbWVyQ29udGV4dC0+cXVldWUtPm1fdGltZXJRdWV1ZSwgdGlt
ZXJDb250ZXh0LT50aW1lciwgMCkpCi0gICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoZmFsc2Us
ICI6OkRlbGV0ZVRpbWVyUXVldWVUaW1lciBmYWlsZWQgd2l0aCBlcnJvciAlbHUiLCA6OkdldExh
c3RFcnJvcigpKTsKLX0KLQotdm9pZCBXb3JrUXVldWU6OmRpc3BhdGNoQWZ0ZXJEZWxheShjb25z
dCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbiwgZG91YmxlIGRlbGF5KQotewotICAgIEFTU0VS
VChtX3RpbWVyUXVldWUpOwotCi0gICAgUmVmUHRyPFRpbWVyQ29udGV4dD4gY29udGV4dCA9IFRp
bWVyQ29udGV4dDo6Y3JlYXRlKCk7Ci0gICAgY29udGV4dC0+cXVldWUgPSB0aGlzOwotICAgIGNv
bnRleHQtPmZ1bmN0aW9uID0gZnVuY3Rpb247Ci0KLSAgICB7Ci0gICAgICAgIC8vIFRoZSB0aW1l
ciBjYWxsYmFjayBjb3VsZCBmaXJlIGJlZm9yZSA6OkNyZWF0ZVRpbWVyUXVldWVUaW1lciBldmVu
IHJldHVybnMsIHNvIHdlIHByb3RlY3QKLSAgICAgICAgLy8gY29udGV4dC0+dGltZXIgd2l0aCBh
IG11dGV4IHRvIGVuc3VyZSB0aGUgdGltZXIgY2FsbGJhY2sgZG9lc24ndCBhY2Nlc3MgaXQgYmVm
b3JlIHRoZQotICAgICAgICAvLyB0aW1lciBoYW5kbGUgaGFzIGJlZW4gc3RvcmVkIGluIGl0Lgot
ICAgICAgICBNdXRleExvY2tlciBsb2NrKGNvbnRleHQtPnRpbWVyTXV0ZXgpOwotCi0gICAgICAg
IC8vIFNpbmNlIG91ciB0aW1lciBjYWxsYmFjayBpcyBxdWljaywgd2UgY2FuIGV4ZWN1dGUgaW4g
dGhlIHRpbWVyIHRocmVhZCBpdHNlbGYgYW5kIGF2b2lkCi0gICAgICAgIC8vIGFuIGV4dHJhIHRo
cmVhZCBzd2l0Y2ggb3ZlciB0byBhIHdvcmtlciB0aHJlYWQuCi0gICAgICAgIGlmICghOjpDcmVh
dGVUaW1lclF1ZXVlVGltZXIoJmNvbnRleHQtPnRpbWVyLCBtX3RpbWVyUXVldWUsIHRpbWVyQ2Fs
bGJhY2ssIGNvbnRleHQuZ2V0KCksIGRlbGF5ICogMTAwMCwgMCwgV1RfRVhFQ1VURUlOVElNRVJU
SFJFQUQpKSB7Ci0gICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGZhbHNlLCAiOjpDcmVh
dGVUaW1lclF1ZXVlVGltZXIgZmFpbGVkIHdpdGggZXJyb3IgJWx1IiwgOjpHZXRMYXN0RXJyb3Io
KSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBUaGUg
dGltZXIgY2FsbGJhY2sgd2lsbCBoYW5kbGUgZGVzdHJveWluZyBjb250ZXh0LgotICAgIGNvbnRl
eHQucmVsZWFzZSgpLmxlYWtSZWYoKTsKLX0KLQotdm9pZCBXb3JrUXVldWU6OnVucmVnaXN0ZXJX
YWl0QW5kRGVzdHJveUl0ZW1Tb29uKFBhc3NSZWZQdHI8SGFuZGxlV29ya0l0ZW0+IGl0ZW0pCi17
Ci0gICAgLy8gV2UncmUgZ29pbmcgdG8gbWFrZSBhIGJsb2NraW5nIGNhbGwgdG8gOjpVbnJlZ2lz
dGVyV2FpdEV4IGJlZm9yZSBjbG9zaW5nIHRoZSBoYW5kbGUuIChUaGUKLSAgICAvLyBibG9ja2lu
ZyB2ZXJzaW9uIG9mIDo6VW5yZWdpc3RlcldhaXRFeCBpcyBtdWNoIHNpbXBsZXIgdGhhbiB0aGUg
bm9uLWJsb2NraW5nIHZlcnNpb24uKSBJZiB3ZQotICAgIC8vIGRvIHRoaXMgb24gdGhlIGN1cnJl
bnQgdGhyZWFkLCB3ZSdsbCBkZWFkbG9jayBpZiB3ZSdyZSBjdXJyZW50bHkgaW4gYSBjYWxsYmFj
ayBmdW5jdGlvbiBmb3IKLSAgICAvLyB0aGUgd2FpdCB3ZSdyZSB1bnJlZ2lzdGVyaW5nLiBTbyBp
bnN0ZWFkIHdlIGRvIGl0IGFzeW5jaHJvbm91c2x5IG9uIHNvbWUgb3RoZXIgd29ya2VyIHRocmVh
ZC4KLQotICAgIDo6UXVldWVVc2VyV29ya0l0ZW0odW5yZWdpc3RlcldhaXRBbmREZXN0cm95SXRl
bUNhbGxiYWNrLCBpdGVtLmxlYWtSZWYoKSwgV1RfRVhFQ1VURURFRkFVTFQpOwotfQotCi1EV09S
RCBXSU5BUEkgV29ya1F1ZXVlOjp1bnJlZ2lzdGVyV2FpdEFuZERlc3Ryb3lJdGVtQ2FsbGJhY2so
dm9pZCogY29udGV4dCkKLXsKLSAgICBBU1NFUlRfQVJHKGNvbnRleHQsIGNvbnRleHQpOwotICAg
IFJlZlB0cjxIYW5kbGVXb3JrSXRlbT4gaXRlbSA9IGFkb3B0UmVmKHN0YXRpY19jYXN0PEhhbmRs
ZVdvcmtJdGVtKj4oY29udGV4dCkpOwotCi0gICAgLy8gTm93IHRoYXQgd2Uga25vdyB3ZSdyZSBu
b3QgaW4gYSBjYWxsYmFjayBmdW5jdGlvbiBmb3IgdGhlIHdhaXQgd2UncmUgdW5yZWdpc3Rlcmlu
Zywgd2UgY2FuCi0gICAgLy8gbWFrZSBhIGJsb2NraW5nIGNhbGwgdG8gOjpVbnJlZ2lzdGVyV2Fp
dEV4LgotICAgIGlmICghOjpVbnJlZ2lzdGVyV2FpdEV4KGl0ZW0tPndhaXRIYW5kbGUoKSwgSU5W
QUxJRF9IQU5ETEVfVkFMVUUpKSB7Ci0gICAgICAgIERXT1JEIGVycm9yID0gOjpHZXRMYXN0RXJy
b3IoKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IDA7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZSBiL1Nv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IDdkMDYxODRjMWJiOWRkZWI2YTc1
ZWVlMjNlYzc1YzdiOTdjOGFiZDUuLmY5YjMzNjMzMmM1ZDEzZDcwZjQ0NmJhODkyNzAyODcyZjBi
NWIyOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC04LDcgKzgsNiBAQCBMSVNUKEFQ
UEVORCBXZWJLaXQyX0xJTktfRkxBR1MKIAogTElTVChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAg
ICAgUGxhdGZvcm0vZWZsL01vZHVsZUVmbC5jcHAKLSAgICBQbGF0Zm9ybS9lZmwvV29ya1F1ZXVl
RWZsLmNwcAogICAgIFBsYXRmb3JtL3VuaXgvU2hhcmVkTWVtb3J5VW5peC5jcHAKIAogICAgIFBs
YXRmb3JtL0NvcmVJUEMvdW5peC9Db25uZWN0aW9uVW5peC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCmluZGV4IDI1
ZDg5NGY3ZWE4NDI5ZWM2OTc1YjZjMjE5NTYzOTVlMmM4NWI3NDguLmI1Y2Q5MzA5YTZmNTNhNDQ0
YTc4YjcwZmU5YjJjNjVlZTRiYmUwMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1Rhcmdl
dC5wcmkKKysrIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQpAQCAtMzAsOSArMzAsNyBAQCBI
RUFERVJTICs9IFwKICAgICBQbGF0Zm9ybS9Db3JlSVBDL01lc3NhZ2VTZW5kZXIuaCBcCiAgICAg
UGxhdGZvcm0vTG9nZ2luZy5oIFwKICAgICBQbGF0Zm9ybS9Nb2R1bGUuaCBcCi0gICAgUGxhdGZv
cm0vUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oIFwKICAgICBQbGF0Zm9ybS9TaGFyZWRNZW1v
cnkuaCBcCi0gICAgUGxhdGZvcm0vV29ya1F1ZXVlLmggXAogICAgIFBsdWdpblByb2Nlc3MvUGx1
Z2luQ29udHJvbGxlclByb3h5LmggXAogICAgIFBsdWdpblByb2Nlc3MvUGx1Z2luQ3JlYXRpb25Q
YXJhbWV0ZXJzLmggXAogICAgIFBsdWdpblByb2Nlc3MvUGx1Z2luUHJvY2Vzcy5oIFwKQEAgLTQx
MCw3ICs0MDgsNiBAQCBTT1VSQ0VTICs9IFwKICAgICBQbGF0Zm9ybS9Db3JlSVBDL0RhdGFSZWZl
cmVuY2UuY3BwIFwKICAgICBQbGF0Zm9ybS9Mb2dnaW5nLmNwcCBcCiAgICAgUGxhdGZvcm0vTW9k
dWxlLmNwcCBcCi0gICAgUGxhdGZvcm0vV29ya1F1ZXVlLmNwcCBcCiAgICAgUGxhdGZvcm0vcXQv
TG9nZ2luZ1F0LmNwcCBcCiAgICAgUGxhdGZvcm0vcXQvTW9kdWxlUXQuY3BwIFwKICAgICBQbHVn
aW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94eS5jcHAgXApAQCAtODIxLDE0ICs4MTgsMTIg
QEAgbWFjOiB7CiAgICAgU09VUkNFUyArPSBcCiAgICAgICAgIFBsYXRmb3JtL0NvcmVJUEMvbWFj
L0Nvbm5lY3Rpb25NYWMuY3BwIFwKICAgICAgICAgUGxhdGZvcm0vbWFjL01hY2hVdGlsaXRpZXMu
Y3BwIFwKLSAgICAgICAgUGxhdGZvcm0vbWFjL1dvcmtRdWV1ZU1hYy5jcHAgXAogICAgICAgICBQ
bGF0Zm9ybS9tYWMvU2hhcmVkTWVtb3J5TWFjLmNwcAogCiB9IGVsc2UgewogICAgIFNPVVJDRVMg
Kz0gXAogICAgICAgICBQbGF0Zm9ybS9Db3JlSVBDL3VuaXgvQXR0YWNobWVudFVuaXguY3BwIFwK
ICAgICAgICAgUGxhdGZvcm0vQ29yZUlQQy91bml4L0Nvbm5lY3Rpb25Vbml4LmNwcCBcCi0gICAg
ICAgIFBsYXRmb3JtL3F0L1dvcmtRdWV1ZVF0LmNwcCBcCiAgICAgICAgIFBsYXRmb3JtL3VuaXgv
U2hhcmVkTWVtb3J5VW5peC5jcHAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0xhdW5jaGVyL1Byb2Nlc3NMYXVuY2hlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvTGF1bmNoZXIvUHJvY2Vzc0xhdW5jaGVyLmNwcAppbmRleCBiYTIyZGRhMmRhN2JjNWI0
OGQzMzU4NjlhZmEzODBjN2JiMzY4MjllLi42N2RlZjc2ODIxZmEwYjUwZGFmZTliOWNlNTE2OGM1
ZWZkOTgwMzM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIv
UHJvY2Vzc0xhdW5jaGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNo
ZXIvUHJvY2Vzc0xhdW5jaGVyLmNwcApAQCAtMjYsOCArMjYsOCBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIlByb2Nlc3NMYXVuY2hlci5oIgogCi0jaW5jbHVkZSAiV29ya1F1ZXVl
LmgiCiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9Xb3JrUXVl
dWUuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9MYXVuY2hlci9Qcm9jZXNzTGF1bmNoZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9MYXVuY2hlci9Qcm9jZXNzTGF1bmNoZXIuaAppbmRleCBiYzFmODY3ZjNjMjkxNTUy
MzYzMGM2NzYxMWYwNWNlOTczZGVkNTNiLi5kNjFiZDc5ZGJkYjBjMTg3NjJkMWYyNzAwMTY3Y2Fl
M2FlZDhmOTMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIv
UHJvY2Vzc0xhdW5jaGVyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVy
L1Byb2Nlc3NMYXVuY2hlci5oCkBAIC0yNyw3ICsyNyw3IEBACiAjZGVmaW5lIFdlYlByb2Nlc3NM
YXVuY2hlcl9oCiAKICNpbmNsdWRlICJDb25uZWN0aW9uLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Q
cm9jZXNzSWRlbnRpZmllci5oIgorI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybVByb2Nlc3NJZGVudGlm
aWVyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcu
aD4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL1RocmVh
ZExhdW5jaGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvVGhyZWFkTGF1
bmNoZXIuaAppbmRleCBmM2E1MzEyYTJjNGY3N2ViZjIwZmQyYzQ4OTY2ZjM1YWNiMGFkOGQxLi45
YzZiMTI0OTZmMGUzNTZiZWUyYWI1ZDY4NTk1M2U2ZDE2YWFkMmJjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvVGhyZWFkTGF1bmNoZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvVGhyZWFkTGF1bmNoZXIuaApAQCAtMjcsNyAr
MjcsNyBAQAogI2RlZmluZSBUaHJlYWRMYXVuY2hlcl9oCiAKICNpbmNsdWRlICJDb25uZWN0aW9u
LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oIgorI2luY2x1ZGUgPHd0
Zi9QbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgog
I2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5oCmluZGV4IDU3YWI4NmMyNDI5M2IxYWQyMjIyNDEyZWI1OGU5YTlmNTZjOGM1NDgu
LjBlOTViZTU0YjdhMWFlZWE1MDA0M2JjZjc1NDNjZjFiMTczNjI1OTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKQEAgLTQwLDcgKzQwLDYgQEAKICNlbmRpZgogI2lu
Y2x1ZGUgIkxheWVyVHJlZUNvbnRleHQuaCIKICNpbmNsdWRlICJOb3RpZmljYXRpb25QZXJtaXNz
aW9uUmVxdWVzdE1hbmFnZXJQcm94eS5oIgotI2luY2x1ZGUgIlBsYXRmb3JtUHJvY2Vzc0lkZW50
aWZpZXIuaCIKICNpbmNsdWRlICJTYW5kYm94RXh0ZW5zaW9uLmgiCiAjaW5jbHVkZSAiU2hhcmVh
YmxlQml0bWFwLmgiCiAjaW5jbHVkZSAiV0tCYXNlLmgiCkBAIC03Myw2ICs3Miw3IEBACiAjaW5j
bHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVk
ZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm1Qcm9jZXNzSWRlbnRp
Zmllci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViUHJvY2Vzc1Byb3h5LmgKaW5kZXggOGU3NjhiZmI2YTg4OWQ5YWQ2YjM2MDAwNzY5NGIy
NTY3NmNlYTY4Ni4uNjQxOWE3YTM1MzhjNjFmZThkNDU3OWMzMDZkMjM0YjY1NWRkYzEyMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaApAQCAtMjYsNyArMjYs
NiBAQAogI2lmbmRlZiBXZWJQcm9jZXNzUHJveHlfaAogI2RlZmluZSBXZWJQcm9jZXNzUHJveHlf
aAogCi0jaW5jbHVkZSAiUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIlBs
dWdpbkluZm9TdG9yZS5oIgogI2luY2x1ZGUgIlByb2Nlc3NMYXVuY2hlci5oIgogI2luY2x1ZGUg
IlByb2Nlc3NNb2RlbC5oIgpAQCAtMzksNiArMzgsNyBAQAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmg+CiAjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dl
YktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDYwNzdmNmQzZTM4
YTQ1MTAxMjM4YjU0MjM3OGNjMjg3ZTA0ZGJhZjAuLmVhZDQ3OGE2ODQwODQ0ZjJhZWFkM2Y2NjQw
M2ZhYTIxOTFjYzBiMDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKQEAgLTQ3Niw3ICs0NzYsNiBAQAogCQlCNjM0MDNGOTE0OTEwRDU3
MDAxMDcwQjUgLyogQVBJT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEI2MzQwM0Y4MTQ5MTBENTcwMDEwNzBCNSAvKiBBUElPYmplY3QuY3Bw
ICovOyB9OwogCQlCODc4QjYxNTEzMzQyOERDMDA2ODg4RTkgLyogQ29ycmVjdGlvblBhbmVsLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCODc4QjYxMzEz
MzQyOERDMDA2ODg4RTkgLyogQ29ycmVjdGlvblBhbmVsLmggKi87IH07CiAJCUI4NzhCNjE2MTMz
NDI4REMwMDY4ODhFOSAvKiBDb3JyZWN0aW9uUGFuZWwubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCODc4QjYxNDEzMzQyOERDMDA2ODg4RTkgLyogQ29y
cmVjdGlvblBhbmVsLm1tICovOyB9OwotCQlCQzAwOTJGODExNTgzN0EzMDBFMEFFMkEgLyogV29y
a1F1ZXVlTWFjLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEJDMDA5MkY2MTE1ODM3QTMwMEUwQUUyQSAvKiBXb3JrUXVldWVNYWMuY3BwICovOyB9Owog
CQlCQzAzMkQ3NTEwRjQzNzhEMDA1OEMxNUEgLyogV2ViQ2hyb21lQ2xpZW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzAzMkQ2MDEwRjQzNzhEMDA1
OEMxNUEgLyogV2ViQ2hyb21lQ2xpZW50LmggKi87IH07CiAJCUJDMDMyRDc3MTBGNDM3OEQwMDU4
QzE1QSAvKiBXZWJDb250ZXh0TWVudUNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQkMwMzJENjIxMEY0Mzc4RDAwNThDMTVBIC8qIFdlYkNvbnRl
eHRNZW51Q2xpZW50LmggKi87IH07CiAJCUJDMDMyRDdCMTBGNDM3OEQwMDU4QzE1QSAvKiBXZWJE
cmFnQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCQzAzMkQ2NjEwRjQzNzhEMDA1OEMxNUEgLyogV2ViRHJhZ0NsaWVudC5oICovOyB9OwpAQCAt
NTY5LDggKzU2OCw2IEBACiAJCUJDMkQwMjE3MTJBQzQxQ0IwMEU3MzJBMyAvKiBTYW1lRG9jdW1l
bnROYXZpZ2F0aW9uVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQkMyRDAyMTYxMkFDNDFDQjAwRTczMkEzIC8qIFNhbWVEb2N1bWVudE5hdmlnYXRp
b25UeXBlLmggKi87IH07CiAJCUJDMkQwMjE5MTJBQzQyNkMwMEU3MzJBMyAvKiBXS1BhZ2VMb2Fk
VHlwZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJD
MkQwMjE4MTJBQzQyNkMwMEU3MzJBMyAvKiBXS1BhZ2VMb2FkVHlwZXMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQzJERkJBMzEyQTc2MUE1MDBF
NzMyQTMgLyogV2ViUHJlZmVyZW5jZXNDRi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCQzJERkJBMjEyQTc2MUE1MDBFNzMyQTMgLyogV2ViUHJlZmVy
ZW5jZXNDRi5jcHAgKi87IH07Ci0JCUJDMkU2RThEMTE0MTk3MTUwMEE2M0IxRSAvKiBXb3JrUXVl
dWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMy
RTZFN0QxMTQxOTcwQzAwQTYzQjFFIC8qIFdvcmtRdWV1ZS5jcHAgKi87IH07Ci0JCUJDMkU2RThF
MTE0MTk3MTUwMEE2M0IxRSAvKiBXb3JrUXVldWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMkU2RTdFMTE0MTk3MEMwMEE2M0IxRSAvKiBXb3JrUXVl
dWUuaCAqLzsgfTsKIAkJQkMzMDY1QzQxMjU5MkY4OTAwRTcxMjc4IC8qIFdlYlByb2Nlc3NNYWMu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzMwNjVD
MzEyNTkyRjg5MDBFNzEyNzggLyogV2ViUHJvY2Vzc01hYy5tbSAqLzsgfTsKIAkJQkMzMDY1RkEx
MjU5MzQ0RTAwRTcxMjc4IC8qIENhY2hlTW9kZWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMzA2NUY5MTI1OTM0NEUwMEU3MTI3OCAvKiBDYWNoZU1v
ZGVsLmggKi87IH07CiAJCUJDMzA2NkJFMTI1QTQ0MjEwMEU3MTI3OCAvKiBXZWJQcm9jZXNzTWVz
c2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEJDMzA2NkJDMTI1QTQ0MjEwMEU3MTI3OCAvKiBXZWJQcm9jZXNzTWVzc2FnZVJlY2Vp
dmVyLmNwcCAqLzsgfTsKQEAgLTE1MTQsNyArMTUxMSw2IEBACiAJCUI2MzQwM0Y4MTQ5MTBENTcw
MDEwNzBCNSAvKiBBUElPYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQVBJT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjg3OEI2
MTMxMzM0MjhEQzAwNjg4OEU5IC8qIENvcnJlY3Rpb25QYW5lbC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDb3JyZWN0aW9uUGFuZWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQjg3OEI2MTQxMzM0MjhEQzAwNjg4OEU5IC8qIENvcnJlY3Rpb25QYW5lbC5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENvcnJlY3Rpb25QYW5lbC5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQkMwMDkyRjYxMTU4MzdBMzAwRTBBRTJB
IC8qIFdvcmtRdWV1ZU1hYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXb3JrUXVldWVNYWMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzAzMkQ2
MDEwRjQzNzhEMDA1OEMxNUEgLyogV2ViQ2hyb21lQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdlYkNocm9tZUNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlCQzAzMkQ2MjEwRjQzNzhEMDA1OEMxNUEgLyogV2ViQ29udGV4dE1lbnVDbGllbnQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29udGV4dE1lbnVDbGllbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMwMzJENjYxMEY0Mzc4RDAwNThDMTVB
IC8qIFdlYkRyYWdDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vi
RHJhZ0NsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTYxMyw4ICsxNjA5
LDYgQEAKIAkJQkMyRDAyMTYxMkFDNDFDQjAwRTczMkEzIC8qIFNhbWVEb2N1bWVudE5hdmlnYXRp
b25UeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNhbWVEb2N1bWVudE5h
dmlnYXRpb25UeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMkQwMjE4MTJB
QzQyNkMwMEU3MzJBMyAvKiBXS1BhZ2VMb2FkVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV0tQYWdlTG9hZFR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUJDMkRGQkEyMTJBNzYxQTUwMEU3MzJBMyAvKiBXZWJQcmVmZXJlbmNlc0NGLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYlByZWZlcmVuY2VzQ0YuY3BwOyBw
YXRoID0gY2YvV2ViUHJlZmVyZW5jZXNDRi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUJDMkU2RTdEMTE0MTk3MEMwMEE2M0IxRSAvKiBXb3JrUXVldWUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV29ya1F1ZXVlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJQkMyRTZFN0UxMTQxOTcwQzAwQTYzQjFFIC8qIFdvcmtRdWV1ZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXb3JrUXVldWUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQkMzMDY1QzMxMjU5MkY4OTAwRTcxMjc4IC8qIFdlYlByb2Nlc3NN
YWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJQcm9jZXNz
TWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzMwNjVGOTEyNTkzNDRFMDBF
NzEyNzggLyogQ2FjaGVNb2RlbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
YWNoZU1vZGVsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMzA2NkI5MTI1QTQz
NjMwMEU3MTI3OCAvKiBXZWJQcm9jZXNzLm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0
aCA9IFdlYlByb2Nlc3MubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0yMjk4LDcgKzIyOTIsNiBAQAogCQkJCTFBMjRCRjM5MTIwODk2QTYwMEZCQjA1OSAvKiBTaGFy
ZWRNZW1vcnlNYWMuY3BwICovLAogCQkJCTI5NkJEODVCMTUwMTlCQzMwMDcxRjQyNCAvKiBTdHJp
bmdVdGlsaXRpZXMuaCAqLywKIAkJCQkyOTZCRDg1QzE1MDE5QkMzMDA3MUY0MjQgLyogU3RyaW5n
VXRpbGl0aWVzLm1tICovLAotCQkJCUJDMDA5MkY2MTE1ODM3QTMwMEUwQUUyQSAvKiBXb3JrUXVl
dWVNYWMuY3BwICovLAogCQkJKTsKIAkJCXBhdGggPSBtYWM7CiAJCQlzb3VyY2VUcmVlID0gIjxn
cm91cD4iOwpAQCAtMzMzNiw4ICszMzI5LDYgQEAKIAkJCQlDMEUzQUE0NDEyMDlFMkJBMDBBNDlE
MDEgLyogTW9kdWxlLmggKi8sCiAJCQkJQkM4NzgwRkIxMTYxQzJCODAwQ0MyNzY4IC8qIFBsYXRm
b3JtUHJvY2Vzc0lkZW50aWZpZXIuaCAqLywKIAkJCQkxQTI0QkVEMzEyMDg5NEQxMDBGQkIwNTkg
LyogU2hhcmVkTWVtb3J5LmggKi8sCi0JCQkJQkMyRTZFN0QxMTQxOTcwQzAwQTYzQjFFIC8qIFdv
cmtRdWV1ZS5jcHAgKi8sCi0JCQkJQkMyRTZFN0UxMTQxOTcwQzAwQTYzQjFFIC8qIFdvcmtRdWV1
ZS5oICovLAogCQkJKTsKIAkJCXBhdGggPSBQbGF0Zm9ybTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7CkBAIC00MTg5LDcgKzQxODAsNiBAQAogCQkJCUJDODY5OUI1MTE2QUFEQUEwMDJBOTI1
QiAvKiBXS1ZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDODY5OUI3MTE2QUFEQUEwMDJBOTI1
QiAvKiBXS1ZpZXdJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkZBNjE3OUYxMkYwQjk5
RDAwMzNFMENBIC8qIFdLVmlld1ByaXZhdGUuaCBpbiBIZWFkZXJzICovLAotCQkJCUJDMkU2RThF
MTE0MTk3MTUwMEE2M0IxRSAvKiBXb3JrUXVldWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxN0JG
OTk2MTREMEE3M0UwMEE1QTA2OSAvKiBOZXRzY2FwZVNhbmRib3hGdW5jdGlvbnMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDRTA5Mzc4MTRGQjEyOEMwMDExMzhEOSAvKiBMYXllckhvc3RpbmdDb250
ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQkyOTZCRDg1RDE1MDE5QkMzMDA3MUY0MjQgLyogU3Ry
aW5nVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKQEAgLTQ5MzYsOCArNDkyNiw2IEBACiAJCQkJ
QkM0MDc2MkMxMjRGRjA0MDAwNjhGMjBBIC8qIFdLVVJMUmVzcG9uc2VOUy5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCUY2MTEzRTI4MTI2Q0UxOUIwMDU3RDBBNyAvKiBXS1VzZXJDb250ZW50VVJMUGF0
dGVybi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzg2OTlCNjExNkFBREFBMDAyQTkyNUIgLyog
V0tWaWV3Lm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJQkMyRTZFOEQxMTQxOTcxNTAwQTYzQjFFIC8q
IFdvcmtRdWV1ZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCQzAwOTJGODExNTgzN0EzMDBFMEFF
MkEgLyogV29ya1F1ZXVlTWFjLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxN0JGOTk4MTREMEFB
ODMwMEE1QTA2OSAvKiBOZXRzY2FwZVNhbmRib3hGdW5jdGlvbnMubW0gaW4gU291cmNlcyAqLywK
IAkJCQlCQ0UwOTM3NzE0RkIxMjhDMDAxMTM4RDkgLyogTGF5ZXJIb3N0aW5nQ29udGV4dC5tbSBp
biBTb3VyY2VzICovLAogCQkJCTI5NkJEODVFMTUwMTlCQzMwMDcxRjQyNCAvKiBTdHJpbmdVdGls
aXRpZXMubW0gaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL3dpbi9X
ZWJLaXQyLnZjcHJvaiBiL1NvdXJjZS9XZWJLaXQyL3dpbi9XZWJLaXQyLnZjcHJvagppbmRleCAw
YTM4YzRiODIyYTgyNDc5OGZmOGM0ZWUyZjNjZDI0ODliN2I2ZDBmLi4zNzI1MmI2MTQzODI3Njlj
ZjJiYWU2ZmE1YTMwMzZkMzNhMDMyNWU0IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViS2l0Mi93aW4v
V2ViS2l0Mi52Y3Byb2oKKysrIGIvU291cmNlL1dlYktpdDIvd2luL1dlYktpdDIudmNwcm9qCkBA
IC0zOTM0LDE0ICszOTM0LDYgQEAKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFBsYXRmb3JtXFNoYXJl
ZE1lbW9yeS5oIgogCQkJCT4KIAkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRo
PSIuLlxQbGF0Zm9ybVxXb3JrUXVldWUuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxl
Ci0JCQkJUmVsYXRpdmVQYXRoPSIuLlxQbGF0Zm9ybVxXb3JrUXVldWUuaCIKLQkJCQk+Ci0JCQk8
L0ZpbGU+CiAJCQk8RmlsdGVyCiAJCQkJTmFtZT0iY2ciCiAJCQkJPgpAQCAtMzk4MSwxMCArMzk3
Myw2IEBACiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5cUGxhdGZvcm1cd2luXFNoYXJlZE1lbW9yeVdp
bi5jcHAiCiAJCQkJCT4KIAkJCQk8L0ZpbGU+Ci0JCQkJPEZpbGUKLQkJCQkJUmVsYXRpdmVQYXRo
PSIuLlxQbGF0Zm9ybVx3aW5cV29ya1F1ZXVlV2luLmNwcCIKLQkJCQkJPgotCQkJCTwvRmlsZT4K
IAkJCTwvRmlsdGVyPgogCQkJPEZpbHRlcgogCQkJCU5hbWU9IkNvcmVJUEMiCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154508</attachid>
            <date>2012-07-25 18:25:22 -0700</date>
            <delta_ts>2012-07-26 14:21:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90780-20120726102508.patch</filename>
            <type>text/plain</type>
            <size>129815</size>
            <attacher name="Kwonjin Jeong">gram</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzNjg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDY3YzVjNmEwZWNmNWE4MGU2MTQ1YWNh
OTE5NjMzMzUwYTc3MTg1MTEuLjUxM2EwMzE3MzFhNmUzNjdhNmM1NTExZjViMWZmM2E1ODI4ZmMy
YWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTI4IEBACisyMDEyLTA3LTA5ICBLd2FuZyBZdWwgU2VvICA8c2t5
dWxAY29tcGFueTEwMC5uZXQ+CisKKyAgICAgICAgTW92ZSBXb3JrUXVldWUgdG8gV1RGCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDc4MAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEN1cnJlbnRseSwgV29y
a1F1ZXVlIGlzIGluIFdlYktpdDIuIEJ5IG1vdmluZyBXb3JrUXVldWUgYW5kCisgICAgICAgIFBs
YXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIgdG8gV1RGLCBXZWJDb3JlIGNvZGUgY2FuIHVzZSBpdC4K
KworICAgICAgICBUaGlzIHBhdGNoIGlzIHJlcXVpcmVkIGZvciBwYXJhbGxlbCBpbWFnZSBkZWNv
ZGVycyBiZWNhdXNlCisgICAgICAgIFdvcmtRdWV1ZSBpcyB1c2VkIHRvIG1ha2UgaW1hZ2UgZGVj
b2Rpbmcgb2ZmIHRoZSBtYWluIHRocmVhZC4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3Qu
YW06CisgICAgICAgICogV1RGLnBybzoKKyAgICAgICAgKiBXVEYudmNwcm9qL1dURi52Y3Byb2o6
CisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3Rm
L0NNYWtlTGlzdHMudHh0OgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAg
ICAgKiB3dGYvUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYktpdDIvUGxhdGZvcm0vUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oLgorICAgICAgICAo
V1RGKToKKyAgICAgICAgKiB3dGYvV29ya1F1ZXVlLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtL1dvcmtRdWV1ZS5jcHAuCisgICAgICAgIChXVEYpOgorICAgICAgICAo
V1RGOjpXb3JrUXVldWU6OldvcmtRdWV1ZSk6CisgICAgICAgIChXVEY6OldvcmtRdWV1ZTo6fldv
cmtRdWV1ZSk6CisgICAgICAgIChXVEY6OldvcmtRdWV1ZTo6aW52YWxpZGF0ZSk6CisgICAgICAg
ICogd3RmL1dvcmtRdWV1ZS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvUGxhdGZvcm0v
V29ya1F1ZXVlLmguCisgICAgICAgIChXVEYpOgorICAgICAgICAoV29ya1F1ZXVlKToKKyAgICAg
ICAgKFdvcmtJdGVtV2luKToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpXb3JrSXRlbVdpbjo6
ZnVuY3Rpb24pOgorICAgICAgICAoV1RGOjpXb3JrUXVldWU6OldvcmtJdGVtV2luOjpxdWV1ZSk6
CisgICAgICAgIChIYW5kbGVXb3JrSXRlbSk6CisgICAgICAgIChXVEY6OldvcmtRdWV1ZTo6SGFu
ZGxlV29ya0l0ZW06OnNldFdhaXRIYW5kbGUpOgorICAgICAgICAoV1RGOjpXb3JrUXVldWU6Okhh
bmRsZVdvcmtJdGVtOjp3YWl0SGFuZGxlKToKKyAgICAgICAgKiB3dGYvZWZsL1dvcmtRdWV1ZUVm
bC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9lZmwvV29ya1F1ZXVl
RWZsLmNwcC4KKyAgICAgICAgKFRpbWVyV29ya0l0ZW0pOgorICAgICAgICAoVGltZXJXb3JrSXRl
bTo6VGltZXJXb3JrSXRlbSk6CisgICAgICAgIChUaW1lcldvcmtJdGVtOjp+VGltZXJXb3JrSXRl
bSk6CisgICAgICAgIChUaW1lcldvcmtJdGVtOjpmdW5jdGlvbik6CisgICAgICAgIChUaW1lcldv
cmtJdGVtOjpxdWV1ZSk6CisgICAgICAgIChUaW1lcldvcmtJdGVtOjp0aW1lcklEKToKKyAgICAg
ICAgKFdvcmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXplKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6
cGxhdGZvcm1JbnZhbGlkYXRlKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6cGVyZm9ybVdvcmspOgor
ICAgICAgICAoV29ya1F1ZXVlOjpwZXJmb3JtRmlsZURlc2NyaXB0b3JXb3JrKToKKyAgICAgICAg
KFdvcmtRdWV1ZTo6c2VuZE1lc3NhZ2VUb1RocmVhZCk6CisgICAgICAgIChXb3JrUXVldWU6Ondv
cmtRdWV1ZVRocmVhZCk6CisgICAgICAgIChXb3JrUXVldWU6OnJlZ2lzdGVyU29ja2V0RXZlbnRI
YW5kbGVyKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6dW5yZWdpc3RlclNvY2tldEV2ZW50SGFuZGxl
cik6CisgICAgICAgIChXb3JrUXVldWU6OmRpc3BhdGNoKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6
dGltZXJGaXJlZCk6CisgICAgICAgIChXb3JrUXVldWU6OmRpc3BhdGNoQWZ0ZXJEZWxheSk6Cisg
ICAgICAgICogd3RmL2d0ay9Xb3JrUXVldWVHdGsuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dl
YktpdDIvUGxhdGZvcm0vZ3RrL1dvcmtRdWV1ZUd0ay5jcHAuCisgICAgICAgIChXb3JrUXVldWU6
OkV2ZW50U291cmNlKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OkV2ZW50U291
cmNlKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OmNhbmNlbCk6CisgICAgICAg
IChXb3JrUXVldWU6OkV2ZW50U291cmNlOjpleGVjdXRlRXZlbnRTb3VyY2UpOgorICAgICAgICAo
V29ya1F1ZXVlOjpFdmVudFNvdXJjZTo6cGVyZm9ybVdvcmtPbmNlKToKKyAgICAgICAgKFdvcmtR
dWV1ZTo6RXZlbnRTb3VyY2U6OnBlcmZvcm1Xb3JrKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6RXZl
bnRTb3VyY2U6OnBlcmZvcm1Xb3JrT25UZXJtaW5hdGlvbik6CisgICAgICAgIChXb3JrUXVldWU6
OkV2ZW50U291cmNlOjpkZWxldGVFdmVudFNvdXJjZSk6CisgICAgICAgIChXb3JrUXVldWU6OnBs
YXRmb3JtSW5pdGlhbGl6ZSk6CisgICAgICAgIChXb3JrUXVldWU6OnBsYXRmb3JtSW52YWxpZGF0
ZSk6CisgICAgICAgIChXb3JrUXVldWU6OnN0YXJ0V29ya1F1ZXVlVGhyZWFkKToKKyAgICAgICAg
KFdvcmtRdWV1ZTo6d29ya1F1ZXVlVGhyZWFkQm9keSk6CisgICAgICAgIChXb3JrUXVldWU6OnJl
Z2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6dW5yZWdpc3Rl
ckV2ZW50U291cmNlSGFuZGxlcik6CisgICAgICAgIChXb3JrUXVldWU6OmRpc3BhdGNoT25Tb3Vy
Y2UpOgorICAgICAgICAoV29ya1F1ZXVlOjpkaXNwYXRjaCk6CisgICAgICAgIChXb3JrUXVldWU6
OmRpc3BhdGNoQWZ0ZXJEZWxheSk6CisgICAgICAgIChXb3JrUXVldWU6OmRpc3BhdGNoT25UZXJt
aW5hdGlvbik6CisgICAgICAgICogd3RmL21hYy9Xb3JrUXVldWVNYWMuY3BwOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYktpdDIvUGxhdGZvcm0vbWFjL1dvcmtRdWV1ZU1hYy5jcHAuCisgICAgICAg
IChXb3JrUXVldWU6OmV4ZWN1dGVGdW5jdGlvbik6CisgICAgICAgIChXb3JrUXVldWU6OmRpc3Bh
dGNoKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6ZGlzcGF0Y2hBZnRlckRlbGF5KToKKyAgICAgICAg
KFdvcmtRdWV1ZTo6RXZlbnRTb3VyY2UpOgorICAgICAgICAoV29ya1F1ZXVlOjpFdmVudFNvdXJj
ZTo6RXZlbnRTb3VyY2UpOgorICAgICAgICAoV29ya1F1ZXVlOjpFdmVudFNvdXJjZTo6ZGlzcGF0
Y2hTb3VyY2UpOgorICAgICAgICAoV29ya1F1ZXVlOjpFdmVudFNvdXJjZTo6ZXZlbnRIYW5kbGVy
KToKKyAgICAgICAgKFdvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OmNhbmNlbEhhbmRsZXIpOgorICAg
ICAgICAoV29ya1F1ZXVlOjpFdmVudFNvdXJjZTo6ZmluYWxpemVIYW5kbGVyKToKKyAgICAgICAg
KFdvcmtRdWV1ZTo6cmVnaXN0ZXJNYWNoUG9ydEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXb3Jr
UXVldWU6OnVucmVnaXN0ZXJNYWNoUG9ydEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXb3JrUXVl
dWU6OnBsYXRmb3JtSW5pdGlhbGl6ZSk6CisgICAgICAgIChXb3JrUXVldWU6OnBsYXRmb3JtSW52
YWxpZGF0ZSk6CisgICAgICAgICogd3RmL3F0L1dvcmtRdWV1ZVF0LmNwcDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3F0L1dvcmtRdWV1ZVF0LmNwcC4KKyAgICAgICAgKFdU
Rik6CisgICAgICAgIChXb3JrUXVldWU6OldvcmtJdGVtUXQpOgorICAgICAgICAoV1RGOjpXb3Jr
UXVldWU6OldvcmtJdGVtUXQ6OldvcmtJdGVtUXQpOgorICAgICAgICAoV1RGOjpXb3JrUXVldWU6
OldvcmtJdGVtUXQ6On5Xb3JrSXRlbVF0KToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpXb3Jr
SXRlbVF0OjpleGVjdXRlKToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpXb3JrSXRlbVF0Ojpl
eGVjdXRlQW5kRGVsZXRlKToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpXb3JrSXRlbVF0Ojp0
aW1lckV2ZW50KToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpyZWdpc3RlclNvY2tldEV2ZW50
SGFuZGxlcik6CisgICAgICAgIChXVEY6OldvcmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXplKToK
KyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpwbGF0Zm9ybUludmFsaWRhdGUpOgorICAgICAgICAo
V1RGOjpXb3JrUXVldWU6OmRpc3BhdGNoKToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpkaXNw
YXRjaEFmdGVyRGVsYXkpOgorICAgICAgICAoV1RGOjpXb3JrUXVldWU6OmRpc3BhdGNoT25UZXJt
aW5hdGlvbik6CisgICAgICAgICogd3RmL3dpbi9Xb3JrUXVldWVXaW4uY3BwOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYktpdDIvUGxhdGZvcm0vd2luL1dvcmtRdWV1ZVdpbi5jcHAuCisgICAgICAg
IChXb3JrUXVldWU6OldvcmtJdGVtV2luOjpXb3JrSXRlbVdpbik6CisgICAgICAgIChXb3JrUXVl
dWU6OldvcmtJdGVtV2luOjpjcmVhdGUpOgorICAgICAgICAoV29ya1F1ZXVlOjpXb3JrSXRlbVdp
bjo6fldvcmtJdGVtV2luKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6SGFuZGxlV29ya0l0ZW06Okhh
bmRsZVdvcmtJdGVtKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6SGFuZGxlV29ya0l0ZW06OmNyZWF0
ZUJ5QWRvcHRpbmdIYW5kbGUpOgorICAgICAgICAoV29ya1F1ZXVlOjpIYW5kbGVXb3JrSXRlbTo6
fkhhbmRsZVdvcmtJdGVtKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6aGFuZGxlQ2FsbGJhY2spOgor
ICAgICAgICAoV29ya1F1ZXVlOjpyZWdpc3RlckhhbmRsZSk6CisgICAgICAgIChXb3JrUXVldWU6
OnVucmVnaXN0ZXJBbmRDbG9zZUhhbmRsZSk6CisgICAgICAgIChXb3JrUXVldWU6OndvcmtUaHJl
YWRDYWxsYmFjayk6CisgICAgICAgIChXb3JrUXVldWU6OnBlcmZvcm1Xb3JrT25SZWdpc3RlcmVk
V29ya1RocmVhZCk6CisgICAgICAgIChXb3JrUXVldWU6OnBsYXRmb3JtSW5pdGlhbGl6ZSk6Cisg
ICAgICAgIChXb3JrUXVldWU6OnRyeVJlZ2lzdGVyQXNXb3JrVGhyZWFkKToKKyAgICAgICAgKFdv
cmtRdWV1ZTo6dW5yZWdpc3RlckFzV29ya1RocmVhZCk6CisgICAgICAgIChXb3JrUXVldWU6OnBs
YXRmb3JtSW52YWxpZGF0ZSk6CisgICAgICAgIChXb3JrUXVldWU6OmRpc3BhdGNoKToKKyAgICAg
ICAgKFRpbWVyQ29udGV4dDo6Y3JlYXRlKToKKyAgICAgICAgKFRpbWVyQ29udGV4dCk6CisgICAg
ICAgIChUaW1lckNvbnRleHQ6OlRpbWVyQ29udGV4dCk6CisgICAgICAgIChXb3JrUXVldWU6OnRp
bWVyQ2FsbGJhY2spOgorICAgICAgICAoV29ya1F1ZXVlOjpkaXNwYXRjaEFmdGVyRGVsYXkpOgor
ICAgICAgICAoV29ya1F1ZXVlOjp1bnJlZ2lzdGVyV2FpdEFuZERlc3Ryb3lJdGVtU29vbik6Cisg
ICAgICAgIChXb3JrUXVldWU6OnVucmVnaXN0ZXJXYWl0QW5kRGVzdHJveUl0ZW1DYWxsYmFjayk6
CisKIDIwMTItMDctMjUgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CiAKICAg
ICAgICAgQ29udmVydCBIVE1MIHBhcnNlciB0byBoYW5kbGUgOC1iaXQgcmVzb3VyY2VzIHdpdGhv
dXQgY29udmVydGluZyB0byBVQ2hhcioKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA2NzJhZWVjOTQ1MDc3NzBmMTgy
ZTVkYTE2NjY5ODViYWNmODhiYTQzLi42OGMyOTU1YzBkOWY0YzQ2YzA3OGViNDYwYmE0MzRmYmQ3
YzM5ZWRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzIgQEAKKzIwMTItMDctMDkgIEt3YW5nIFl1
bCBTZW8gIDxza3l1bEBjb21wYW55MTAwLm5ldD4KKworICAgICAgICBNb3ZlIFdvcmtRdWV1ZSB0
byBXVEYKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkw
NzgwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ3Vy
cmVudGx5LCBXb3JrUXVldWUgaXMgaW4gV2ViS2l0Mi4gQnkgbW92aW5nIFdvcmtRdWV1ZSBhbmQK
KyAgICAgICAgUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllciB0byBXVEYsIFdlYkNvcmUgY29kZSBj
YW4gdXNlIGl0LgorCisgICAgICAgIFRoaXMgcGF0Y2ggaXMgcmVxdWlyZWQgZm9yIHBhcmFsbGVs
IGltYWdlIGRlY29kZXJzIGJlY2F1c2UKKyAgICAgICAgV29ya1F1ZXVlIGlzIHVzZWQgdG8gbWFr
ZSBpbWFnZSBkZWNvZGluZyBvZmYgdGhlIG1haW4gdGhyZWFkLgorCisgICAgICAgICogQ01ha2VM
aXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBQbGF0
Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uaDoKKyAgICAgICAgKENvbm5lY3Rpb24pOgorICAgICAg
ICAqIFBsYXRmb3JtL0NvcmVJUEMvdW5peC9Db25uZWN0aW9uVW5peC5jcHA6CisgICAgICAgIChD
b3JlSVBDOjpDb25uZWN0aW9uOjpzZXRTaG91bGRDbG9zZUNvbm5lY3Rpb25PblByb2Nlc3NUZXJt
aW5hdGlvbik6CisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgICogVGFyZ2V0
LnByaToKKyAgICAgICAgKiBVSVByb2Nlc3MvTGF1bmNoZXIvUHJvY2Vzc0xhdW5jaGVyLmNwcDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvTGF1bmNoZXIvUHJvY2Vzc0xhdW5jaGVyLmg6CisgICAgICAg
ICogVUlQcm9jZXNzL0xhdW5jaGVyL1RocmVhZExhdW5jaGVyLmg6CisgICAgICAgICogVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHku
aDoKKyAgICAgICAgKiBXZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogd2luL1dlYktpdDIudmNwcm9qOgorCiAyMDEyLTA3LTI1ICBDYWlvIE1hcmNlbG8gZGUgT2xp
dmVpcmEgRmlsaG8gIDxjYWlvLm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+CiAKICAgICAgICAgQ3Jl
YXRlIGEgc3BlY2lhbGl6ZWQgc3RydWN0IGZvciB1c2UgaW4gSGFzaE1hcCBpdGVyYXRvcnMKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XVEYvR05V
bWFrZWZpbGUubGlzdC5hbQppbmRleCBiYjY4YmMyNjg1MmI0NDY0OWQ5OWQ4ZWMzNzZkNDllOWJk
MzQ0MTU2Li5lYzk5YjNkNzgyZDcxOGQxMzVkNWNlZDFiNGM3N2ZjN2YwZGFjY2VkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dURi9HTlVt
YWtlZmlsZS5saXN0LmFtCkBAIC0xNjUsNiArMTY1LDggQEAgd3RmX3NvdXJjZXMgKz0gXAogICAg
IFNvdXJjZS9XVEYvd3RmL1ZhbHVlQ2hlY2suaCBcCiAgICAgU291cmNlL1dURi93dGYvVmVjdG9y
LmggXAogICAgIFNvdXJjZS9XVEYvd3RmL1ZlY3RvclRyYWl0cy5oIFwKKyAgICBTb3VyY2UvV1RG
L3d0Zi9Xb3JrUXVldWUuY3BwIFwKKyAgICBTb3VyY2UvV1RGL3d0Zi9Xb3JrUXVldWUuaCBcCiAg
ICAgU291cmNlL1dURi93dGYvV1RGVGhyZWFkRGF0YS5jcHAgXAogICAgIFNvdXJjZS9XVEYvd3Rm
L1dURlRocmVhZERhdGEuaCBcCiAgICAgU291cmNlL1dURi93dGYvZHRvYS5jcHAgXApAQCAtMTk1
LDYgKzE5Nyw3IEBAIHd0Zl9zb3VyY2VzICs9IFwKICAgICBTb3VyY2UvV1RGL3d0Zi9nb2JqZWN0
L0dsaWJVdGlsaXRpZXMuY3BwIFwKICAgICBTb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dsaWJVdGls
aXRpZXMuaCBcCiAgICAgU291cmNlL1dURi93dGYvZ3RrL01haW5UaHJlYWRHdGsuY3BwIFwKKyAg
ICBTb3VyY2UvV1RGL3d0Zi9ndGsvV29ya1F1ZXVlR3RrLmNwcCBcCiAgICAgU291cmNlL1dURi93
dGYvdGV4dC9BU0NJSUZhc3RQYXRoLmggXAogICAgIFNvdXJjZS9XVEYvd3RmL3RleHQvQXRvbWlj
U3RyaW5nLmNwcCBcCiAgICAgU291cmNlL1dURi93dGYvdGV4dC9BdG9taWNTdHJpbmcuaCBcCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL1dURi5wcm8gYi9Tb3VyY2UvV1RGL1dURi5wcm8KaW5kZXgg
NjhkODQ3MTEyN2M3MmJmMmFlMTYwNTEzMTI4YjViYWFkMGVjZDNkOS4uZmYyYzJmYjA2ZjJlNWVh
ZDhlMmU1YmY1NGFlZWQyOTI3NGIwNGY5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9XVEYucHJv
CisrKyBiL1NvdXJjZS9XVEYvV1RGLnBybwpAQCAtMTY1LDYgKzE2NSw3IEBAIEhFQURFUlMgKz0g
XAogICAgIFZlY3Rvci5oIFwKICAgICBWZWN0b3JUcmFpdHMuaCBcCiAgICAgVk1UYWdzLmggXAor
ICAgIFdvcmtRdWV1ZS5oIFwKICAgICBXVEZUaHJlYWREYXRhLmgKIAogdW5peDogSEVBREVSUyAr
PSBUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmgKQEAgLTIwMSw2ICsyMDIsNyBAQCBTT1VS
Q0VTICs9IFwKICAgICBPU1JhbmRvbVNvdXJjZS5jcHAgXAogICAgIHF0L01haW5UaHJlYWRRdC5j
cHAgXAogICAgIHF0L1N0cmluZ1F0LmNwcCBcCisgICAgcXQvV29ya1F1ZXVlUXQuY3BwIFwKICAg
ICBQYWdlQWxsb2NhdGlvbkFsaWduZWQuY3BwIFwKICAgICBQYWdlQmxvY2suY3BwIFwKICAgICBQ
YXJhbGxlbEpvYnNHZW5lcmljLmNwcCBcCkBAIC0yMTEsNiArMjEzLDcgQEAgU09VUkNFUyArPSBc
CiAgICAgVENTeXN0ZW1BbGxvYy5jcHAgXAogICAgIFRocmVhZGluZy5jcHAgXAogICAgIFR5cGVU
cmFpdHMuY3BwIFwKKyAgICBXb3JrUXVldWUuY3BwIFwKICAgICBXVEZUaHJlYWREYXRhLmNwcCBc
CiAgICAgdGV4dC9BdG9taWNTdHJpbmcuY3BwIFwKICAgICB0ZXh0L0Jhc2U2NC5jcHAgXApkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi9XVEYudmNwcm9qL1dURi52Y3Byb2ogYi9Tb3VyY2UvV1RGL1dU
Ri52Y3Byb2ovV1RGLnZjcHJvagppbmRleCAxYWMzMmI0ZDY3NzNiMGExYzk2ODRhMDI0N2NiNWFl
MzYzNGNmMDM0Li4zOTgwZjI2YTg1YTNlYzc2NWYyOGU4YWY1MzVjNTk3NmFlMGVlMTA3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL1dURi52Y3Byb2ovV1RGLnZjcHJvagorKysgYi9Tb3VyY2UvV1RG
L1dURi52Y3Byb2ovV1RGLnZjcHJvagpAQCAtMzQzLDYgKzM0MywxMCBAQAogCQkJCVJlbGF0aXZl
UGF0aD0iLi5cd3RmXHdpblxPd25QdHJXaW4uY3BwIgogCQkJCT4KIAkJCTwvRmlsZT4KKwkJCTxG
aWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlx3dGZcd2luXFdvcmtRdWV1ZVdpbi5jcHAiCisJCQkJ
PgorCQkJPC9GaWxlPgogCQk8L0ZpbHRlcj4KIAkJPEZpbHRlcgogCQkJTmFtZT0idW5pY29kZSIK
QEAgLTEyMjUsNiArMTIyOSwxNCBAQAogCQkJPgogCQk8L0ZpbGU+CiAJCTxGaWxlCisJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHd0ZlxXb3JrUXVldWUuY3BwIgorCQkJPgorCQk8L0ZpbGU+CisJCTxGaWxl
CisJCQlSZWxhdGl2ZVBhdGg9Ii4uXHd0ZlxXb3JrUXVldWUuaCIKKwkJCT4KKwkJPC9GaWxlPgor
CQk8RmlsZQogCQkJUmVsYXRpdmVQYXRoPSIuLlx3dGZcV1RGVGhyZWFkRGF0YS5jcHAiCiAJCQk+
CiAJCTwvRmlsZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2ogYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4
IDM3MmMxNWVjMGM3MWNjNDBkMWNiY2I5ZTgwYzQ1NDU3MWQyNDg1ZWMuLmI1YTlkNjBhYmE4NWVj
ZTY5MWM0MmRhZGE4OWI5ZGMxZTExYmZiYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvV1RGLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagpAQCAtMjQyLDYgKzI0Miw5IEBACiAJCUE4QTQ3NDdFMTUxQTgyNUIwMDQx
MjNGRiAvKiBWZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE4QTQ3MzcwMTUxQTgyNUIwMDQxMjNGRiAvKiBWZWN0b3IuaCAqLzsgfTsKIAkJQThB
NDc0N0YxNTFBODI1QjAwNDEyM0ZGIC8qIFZlY3RvclRyYWl0cy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDczNzExNTFBODI1QjAwNDEyM0ZGIC8q
IFZlY3RvclRyYWl0cy5oICovOyB9OwogCQlBOEE0NzQ4MDE1MUE4MjVCMDA0MTIzRkYgLyogVk1U
YWdzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0
NzM3MjE1MUE4MjVCMDA0MTIzRkYgLyogVk1UYWdzLmggKi87IH07CisJCUJDMkU2RThEMTE0MTk3
MTUwMEE2M0IxRSAvKiBXb3JrUXVldWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQkMyRTZFN0QxMTQxOTcwQzAwQTYzQjFFIC8qIFdvcmtRdWV1ZS5j
cHAgKi87IH07CisJCUJDMkU2RThFMTE0MTk3MTUwMEE2M0IxRSAvKiBXb3JrUXVldWUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMkU2RTdFMTE0MTk3
MEMwMEE2M0IxRSAvKiBXb3JrUXVldWUuaCAqLzsgfTsKKwkJQkMwMDkyRjgxMTU4MzdBMzAwRTBB
RTJBIC8qIFdvcmtRdWV1ZU1hYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCQzAwOTJGNjExNTgzN0EzMDBFMEFFMkEgLyogV29ya1F1ZXVlTWFjLmNw
cCAqLzsgfTsKIAkJQThBNDc0ODYxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlRocmVhZERhdGEuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDczN0Ex
NTFBODI1QjAwNDEyM0ZGIC8qIFdURlRocmVhZERhdGEuY3BwICovOyB9OwogCQlBOEE0NzQ4NzE1
MUE4MjVCMDA0MTIzRkYgLyogV1RGVGhyZWFkRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDczN0IxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlRo
cmVhZERhdGEuaCAqLzsgfTsKIAkJQThBNDc0OEMxNTFBODI2NDAwNDEyM0ZGIC8qIGNvbmZpZy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDc0OEIx
NTFBODI2NDAwNDEyM0ZGIC8qIGNvbmZpZy5oICovOyB9OwpAQCAtNDkzLDYgKzQ5Niw5IEBACiAJ
CUE4QTQ3MzcwMTUxQTgyNUIwMDQxMjNGRiAvKiBWZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVmVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4
QTQ3MzcxMTUxQTgyNUIwMDQxMjNGRiAvKiBWZWN0b3JUcmFpdHMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVmVjdG9yVHJhaXRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUE4QTQ3MzcyMTUxQTgyNUIwMDQxMjNGRiAvKiBWTVRhZ3MuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gVk1UYWdzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUJDMkU2RTdEMTE0MTk3MEMwMEE2M0IxRSAvKiBXb3JrUXVldWUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV29ya1F1ZXVlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQkMyRTZFN0UxMTQxOTcwQzAwQTYzQjFFIC8qIFdvcmtRdWV1ZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXb3JrUXVldWUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQkMwMDkyRjYxMTU4MzdBMzAwRTBBRTJBIC8qIFdvcmtRdWV1ZU1h
Yy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXb3JrUXVldWVNYWMu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEE0NzM3QTE1MUE4MjVCMDA0MTIz
RkYgLyogV1RGVGhyZWFkRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBXVEZUaHJlYWREYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThB
NDczN0IxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlRocmVhZERhdGEuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV1RGVGhyZWFkRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlBOEE0NzQ4QjE1MUE4MjY0MDA0MTIzRkYgLyogY29uZmlnLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGNvbmZpZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtNzI1LDYgKzczMSw4IEBACiAJCQkJQThBNDczNzAxNTFBODI1QjAwNDEyM0ZGIC8qIFZl
Y3Rvci5oICovLAogCQkJCUE4QTQ3MzcxMTUxQTgyNUIwMDQxMjNGRiAvKiBWZWN0b3JUcmFpdHMu
aCAqLywKIAkJCQlBOEE0NzM3MjE1MUE4MjVCMDA0MTIzRkYgLyogVk1UYWdzLmggKi8sCisJCQkJ
QkMyRTZFN0QxMTQxOTcwQzAwQTYzQjFFIC8qIFdvcmtRdWV1ZS5jcHAgKi8sCisJCQkJQkMyRTZF
N0UxMTQxOTcwQzAwQTYzQjFFIC8qIFdvcmtRdWV1ZS5oICovLAogCQkJCUE4QTQ3MzdBMTUxQTgy
NUIwMDQxMjNGRiAvKiBXVEZUaHJlYWREYXRhLmNwcCAqLywKIAkJCQlBOEE0NzM3QjE1MUE4MjVC
MDA0MTIzRkYgLyogV1RGVGhyZWFkRGF0YS5oICovLAogCQkJKTsKQEAgLTc2Myw2ICs3NzEsNyBA
QAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQlBOEE0NzJDNTE1MUE4
MjVBMDA0MTIzRkYgLyogTWFpblRocmVhZE1hYy5tbSAqLywKKwkJCQlCQzAwOTJGNjExNTgzN0Ez
MDBFMEFFMkEgLyogV29ya1F1ZXVlTWFjLmNwcCAqLywKIAkJCSk7CiAJCQlwYXRoID0gbWFjOwog
CQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTEwNTEsNiArMTA2MCw3IEBACiAJCQkJQThB
NDc0N0YxNTFBODI1QjAwNDEyM0ZGIC8qIFZlY3RvclRyYWl0cy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQThBNDc0ODAxNTFBODI1QjAwNDEyM0ZGIC8qIFZNVGFncy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQThBNDc0NDYxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlN0cmluZy5oIGluIEhlYWRlcnMgKi8s
CisJCQkJQkMyRTZFOEUxMTQxOTcxNTAwQTYzQjFFIC8qIFdvcmtRdWV1ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQThBNDc0ODcxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlRocmVhZERhdGEuaCBpbiBI
ZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Npbmcg
PSAwOwpAQCAtMTE5OSw2ICsxMjA5LDggQEAKIAkJCQk0MzMwRjM4RjE1NzQ1QjA1MDBBQUZBOEYg
LyogVVJMU3RyaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDY5MTUxQTgyNUIwMDQx
MjNGRiAvKiBVVEY4LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDQ1MTUxQTgyNUIwMDQx
MjNGRiAvKiBXVEZTdHJpbmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQkMyRTZFOEQxMTQxOTcx
NTAwQTYzQjFFIC8qIFdvcmtRdWV1ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCQzAwOTJGODEx
NTgzN0EzMDBFMEFFMkEgLyogV29ya1F1ZXVlTWFjLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4
QTQ3NDg2MTUxQTgyNUIwMDQxMjNGRiAvKiBXVEZUaHJlYWREYXRhLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV1RGL3d0Zi9D
TWFrZUxpc3RzLnR4dAppbmRleCBiZDI5MTQ5NzE4YTA0ZDgxNDc3MzQ4OWY3ZDZlMDEwYTUxZTg5
Yzg1Li5kYmVlYWU0YTAwMDY5MGFhZTA1ODQ2YWQzYmI3NDI5YThhZDI2YjY0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9DTWFr
ZUxpc3RzLnR4dApAQCAtMTAzLDYgKzEwMyw3IEBAIFNFVChXVEZfSEVBREVSUwogICAgIFZhbHVl
Q2hlY2suaAogICAgIFZlY3Rvci5oCiAgICAgVmVjdG9yVHJhaXRzLmgKKyAgICBXb3JrUXVldWUu
aAogICAgIFdURlRocmVhZERhdGEuaAogICAgIGR0b2EuaAogCkBAIC0xNjMsNiArMTY0LDcgQEAg
U0VUKFdURl9TT1VSQ0VTCiAgICAgU3RyaW5nRXh0cmFzLmNwcAogICAgIFRocmVhZGluZy5jcHAK
ICAgICBUeXBlVHJhaXRzLmNwcAorICAgIFdvcmtRdWV1ZS5jcHAKICAgICBXVEZUaHJlYWREYXRh
LmNwcAogICAgIGR0b2EuY3BwCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3Jt
RWZsLmNtYWtlIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggMWExM2Ri
YmEzNTU4NGUwNTZjNDkyOTFlMzg3YTMyMjU3MTBkMTMwOC4uZmQxN2Y1Nzg1ZWRiZmQ3YTI3MTgy
YjRhM2RlYTI0ZjA5MWVmZDg3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1F
ZmwuY21ha2UKKysrIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTEsNiAr
MSw3IEBACiBMSVNUKEFQUEVORCBXVEZfU09VUkNFUwogICAgIGVmbC9NYWluVGhyZWFkRWZsLmNw
cAogICAgIGVmbC9Pd25QdHJFZmwuY3BwCisgICAgZWZsL1dvcmtRdWV1ZUVmbC5jcHAKICAgICBn
b2JqZWN0L0dPd25QdHIuY3BwCiAgICAgZ29iamVjdC9HUmVmUHRyLmNwcAogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmggYi9Tb3VyY2UvV1RG
L3d0Zi9QbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWQwMDVkYTc2NmFk
ZTVmZWFkYjU2ZjhiN2FiM2M1OWZkOGQxYzgyYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
VEYvd3RmL1BsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIuaApAQCAtMCwwICsxLDYxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworCisjaWZuZGVmIFBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXJfaAorI2RlZmluZSBQ
bGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyX2gKKworI2lmIFBMQVRGT1JNKFFUKQorUVRfQkVHSU5f
TkFNRVNQQUNFCitjbGFzcyBRUHJvY2VzczsKK1FUX0VORF9OQU1FU1BBQ0UKKyNlbGlmIFBMQVRG
T1JNKEVGTCkKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV1RGIHsK
KworI2lmIFBMQVRGT1JNKE1BQykKK3R5cGVkZWYgcGlkX3QgUGxhdGZvcm1Qcm9jZXNzSWRlbnRp
ZmllcjsKKyNlbGlmIFBMQVRGT1JNKFdJTikKK3R5cGVkZWYgSEFORExFIFBsYXRmb3JtUHJvY2Vz
c0lkZW50aWZpZXI7CisjZWxpZiBQTEFURk9STShRVCkKK3R5cGVkZWYgUVByb2Nlc3MqIFBsYXRm
b3JtUHJvY2Vzc0lkZW50aWZpZXI7CisjZWxpZiBQTEFURk9STShHVEspCisjaWZkZWYgR19PU19X
SU4zMgordHlwZWRlZiB2b2lkKiBHUGlkOworI2Vsc2UKK3R5cGVkZWYgaW50IEdQaWQ7CisjZW5k
aWYKK3R5cGVkZWYgR1BpZCBQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyOworI2VsaWYgUExBVEZP
Uk0oRUZMKQordHlwZWRlZiBwaWRfdCBQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyOworI2VuZGlm
CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OlBsYXRmb3JtUHJvY2Vzc0lkZW50
aWZpZXI7CisKKyNlbmRpZiAvLyBQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9Xb3JrUXVl
dWUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjhmNWZkMTRlYjRiYzllNTUyMDE0NDJjMzI4ZGJhZjJmMzY2NThm
NmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9Xb3JrUXVldWUuY3BwCkBAIC0w
LDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
V29ya1F1ZXVlLmgiCisKK25hbWVzcGFjZSBXVEYgeworCitXb3JrUXVldWU6OldvcmtRdWV1ZShj
b25zdCBjaGFyKiBuYW1lKQorICAgIDogbV9pc1ZhbGlkKHRydWUpCit7CisgICAgcGxhdGZvcm1J
bml0aWFsaXplKG5hbWUpOworfQorCitXb3JrUXVldWU6On5Xb3JrUXVldWUoKQoreworI2lmICFB
U1NFUlRfRElTQUJMRUQKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9pc1ZhbGlkTXV0ZXgpOwor
ICAgIEFTU0VSVCghbV9pc1ZhbGlkKTsKKyNlbmRpZgorfQorCit2b2lkIFdvcmtRdWV1ZTo6aW52
YWxpZGF0ZSgpCit7CisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9pc1ZhbGlk
TXV0ZXgpOworICAgICAgICBtX2lzVmFsaWQgPSBmYWxzZTsKKyAgICB9CisKKyAgICBwbGF0Zm9y
bUludmFsaWRhdGUoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9Xb3JrUXVldWUuaCBiL1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjdlZDA4NWQ5ZmIzYjliMTE5YmFkN2NlM2EzYjczMTM2ZmRiOGZhNWIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9Xb3JrUXVldWUuaApAQCAtMCwwICsxLDIxOCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV29ya1F1ZXVlX2gKKyNk
ZWZpbmUgV29ya1F1ZXVlX2gKKworI2lmIE9TKERBUldJTikKKyNpZiBIQVZFKERJU1BBVENIX0gp
CisjaW5jbHVkZSA8ZGlzcGF0Y2gvZGlzcGF0Y2guaD4KKyNlbmRpZgorI2VuZGlmCisKKyNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbmFsLmg+CisjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKworI2lmIChQTEFURk9STShRVCkgJiYgIU9TKERBUldJTikpIHx8IFBM
QVRGT1JNKEdUSykgfHwgUExBVEZPUk0oRUZMKQorI2luY2x1ZGUgIlBsYXRmb3JtUHJvY2Vzc0lk
ZW50aWZpZXIuaCIKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oUVQpICYmICFPUyhEQVJXSU4pCisj
aW5jbHVkZSA8UVNvY2tldE5vdGlmaWVyPgorUVRfQkVHSU5fTkFNRVNQQUNFCitjbGFzcyBRT2Jq
ZWN0OworY2xhc3MgUVRocmVhZDsKK1FUX0VORF9OQU1FU1BBQ0UKKyNlbGlmIFBMQVRGT1JNKEdU
SykKKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+Cit0eXBlZGVmIGdib29sZWFuICgq
R1NvdXJjZUZ1bmMpIChncG9pbnRlciBkYXRhKTsKKyNlbGlmIFBMQVRGT1JNKEVGTCkKKyNpbmNs
dWRlIDxFY29yZS5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBXb3JrUXVl
dWUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFdvcmtRdWV1ZSk7CisKK3B1YmxpYzoKKyAg
ICBleHBsaWNpdCBXb3JrUXVldWUoY29uc3QgY2hhciogbmFtZSk7CisgICAgfldvcmtRdWV1ZSgp
OworCisgICAgLy8gV2lsbCBkaXNwYXRjaCB0aGUgZ2l2ZW4gZnVuY3Rpb24gdG8gcnVuIGFzIHNv
b24gYXMgcG9zc2libGUuCisgICAgdm9pZCBkaXNwYXRjaChjb25zdCBGdW5jdGlvbjx2b2lkKCk+
Jik7CisKKyAgICAvLyBXaWxsIGRpc3BhdGNoIHRoZSBnaXZlbiBmdW5jdGlvbiBhZnRlciB0aGUg
Z2l2ZW4gZGVsYXkgKGluIHNlY29uZHMpLgorICAgIHZvaWQgZGlzcGF0Y2hBZnRlckRlbGF5KGNv
bnN0IEZ1bmN0aW9uPHZvaWQoKT4mLCBkb3VibGUgZGVsYXkpOworCisgICAgdm9pZCBpbnZhbGlk
YXRlKCk7CisKKyNpZiBPUyhEQVJXSU4pCisgICAgZW51bSBNYWNoUG9ydEV2ZW50VHlwZSB7Cisg
ICAgICAgIC8vIEZpcmVkIHdoZW4gdGhlcmUgaXMgZGF0YSBvbiB0aGUgZ2l2ZW4gcmVjZWl2ZSBy
aWdodC4KKyAgICAgICAgTWFjaFBvcnREYXRhQXZhaWxhYmxlLAorICAgICAgICAKKyAgICAgICAg
Ly8gRmlyZWQgd2hlbiB0aGUgcmVjZWl2ZSByaWdodCBmb3IgdGhpcyBzZW5kIHJpZ2h0IGhhcyBi
ZWVuIGRlc3Ryb3llZC4KKyAgICAgICAgTWFjaFBvcnREZWFkTmFtZU5vdGlmaWNhdGlvbgorICAg
IH07CisgICAgCisgICAgLy8gV2lsbCBleGVjdXRlIHRoZSBnaXZlbiBmdW5jdGlvbiB3aGVuZXZl
ciB0aGUgZ2l2ZW4gbWFjaCBwb3J0IGV2ZW50IGZpcmVzLgorICAgIC8vIE5vdGUgdGhhdCB0aGlz
IHdpbGwgYWRvcHQgdGhlIG1hY2ggcG9ydCBhbmQgZGVzdHJveSBpdCB3aGVuIHRoZSB3b3JrIHF1
ZXVlIGlzIGludmFsaWRhdGVkLgorICAgIHZvaWQgcmVnaXN0ZXJNYWNoUG9ydEV2ZW50SGFuZGxl
cihtYWNoX3BvcnRfdCwgTWFjaFBvcnRFdmVudFR5cGUsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4m
KTsKKyAgICB2b2lkIHVucmVnaXN0ZXJNYWNoUG9ydEV2ZW50SGFuZGxlcihtYWNoX3BvcnRfdCk7
CisjZWxpZiBQTEFURk9STShXSU4pCisgICAgdm9pZCByZWdpc3RlckhhbmRsZShIQU5ETEUsIGNv
bnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsKKyAgICB2b2lkIHVucmVnaXN0ZXJBbmRDbG9zZUhhbmRs
ZShIQU5ETEUpOworI2VsaWYgUExBVEZPUk0oUVQpCisgICAgUVNvY2tldE5vdGlmaWVyKiByZWdp
c3RlclNvY2tldEV2ZW50SGFuZGxlcihpbnQsIFFTb2NrZXROb3RpZmllcjo6VHlwZSwgY29uc3Qg
RnVuY3Rpb248dm9pZCgpPiYpOworICAgIHZvaWQgZGlzcGF0Y2hPblRlcm1pbmF0aW9uKFBsYXRm
b3JtUHJvY2Vzc0lkZW50aWZpZXIsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsKKyNlbGlmIFBM
QVRGT1JNKEdUSykKKyAgICB2b2lkIHJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKGludCwgaW50
LCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7CisgICAgdm9pZCB1bnJlZ2lzdGVyRXZlbnRTb3Vy
Y2VIYW5kbGVyKGludCk7CisgICAgdm9pZCBkaXNwYXRjaE9uVGVybWluYXRpb24oUGxhdGZvcm1Q
cm9jZXNzSWRlbnRpZmllciwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOworI2VsaWYgUExBVEZP
Uk0oRUZMKQorICAgIHZvaWQgcmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIoaW50LCBjb25zdCBG
dW5jdGlvbjx2b2lkKCk+Jik7CisgICAgdm9pZCB1bnJlZ2lzdGVyU29ja2V0RXZlbnRIYW5kbGVy
KGludCk7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICAvLyBGSVhNRTogVXNlIGFuIGF0b21pYyBi
b29sZWFuIGhlcmUgaW5zdGVhZC4KKyAgICBNdXRleCBtX2lzVmFsaWRNdXRleDsKKyAgICBib29s
IG1faXNWYWxpZDsKKworICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplKGNvbnN0IGNoYXIqIG5h
bWUpOworICAgIHZvaWQgcGxhdGZvcm1JbnZhbGlkYXRlKCk7CisKKyNpZiBPUyhEQVJXSU4pCisj
aWYgSEFWRShESVNQQVRDSF9IKQorICAgIHN0YXRpYyB2b2lkIGV4ZWN1dGVGdW5jdGlvbih2b2lk
Kik7CisgICAgTXV0ZXggbV9ldmVudFNvdXJjZXNNdXRleDsKKyAgICBjbGFzcyBFdmVudFNvdXJj
ZTsKKyAgICBIYXNoTWFwPG1hY2hfcG9ydF90LCBFdmVudFNvdXJjZSo+IG1fZXZlbnRTb3VyY2Vz
OworICAgIGRpc3BhdGNoX3F1ZXVlX3QgbV9kaXNwYXRjaFF1ZXVlOworI2VuZGlmCisjZWxpZiBQ
TEFURk9STShXSU4pCisgICAgY2xhc3MgV29ya0l0ZW1XaW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJl
ZkNvdW50ZWQ8V29ya0l0ZW1XaW4+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFdvcmtJdGVtV2luPiBjcmVhdGUoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYsIFdvcmtR
dWV1ZSopOworICAgICAgICB2aXJ0dWFsIH5Xb3JrSXRlbVdpbigpOworCisgICAgICAgIEZ1bmN0
aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKCkgeyByZXR1cm4gbV9mdW5jdGlvbjsgfQorICAgICAgICBX
b3JrUXVldWUqIHF1ZXVlKCkgY29uc3QgeyByZXR1cm4gbV9xdWV1ZTsgfQorCisgICAgcHJvdGVj
dGVkOgorICAgICAgICBXb3JrSXRlbVdpbihjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiwgV29ya1F1
ZXVlKik7CisKKyAgICBwcml2YXRlOgorICAgICAgICBGdW5jdGlvbjx2b2lkKCk+IG1fZnVuY3Rp
b247CisgICAgICAgIFdvcmtRdWV1ZSogbV9xdWV1ZTsKKyAgICB9OworCisgICAgY2xhc3MgSGFu
ZGxlV29ya0l0ZW0gOiBwdWJsaWMgV29ya0l0ZW1XaW4geworICAgIHB1YmxpYzoKKyAgICAgICAg
c3RhdGljIFBhc3NSZWZQdHI8SGFuZGxlV29ya0l0ZW0+IGNyZWF0ZUJ5QWRvcHRpbmdIYW5kbGUo
SEFORExFLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiwgV29ya1F1ZXVlKik7CisgICAgICAgIHZp
cnR1YWwgfkhhbmRsZVdvcmtJdGVtKCk7CisKKyAgICAgICAgdm9pZCBzZXRXYWl0SGFuZGxlKEhB
TkRMRSB3YWl0SGFuZGxlKSB7IG1fd2FpdEhhbmRsZSA9IHdhaXRIYW5kbGU7IH0KKyAgICAgICAg
SEFORExFIHdhaXRIYW5kbGUoKSBjb25zdCB7IHJldHVybiBtX3dhaXRIYW5kbGU7IH0KKworICAg
IHByaXZhdGU6CisgICAgICAgIEhhbmRsZVdvcmtJdGVtKEhBTkRMRSwgY29uc3QgRnVuY3Rpb248
dm9pZCgpPiYsIFdvcmtRdWV1ZSopOworCisgICAgICAgIEhBTkRMRSBtX2hhbmRsZTsKKyAgICAg
ICAgSEFORExFIG1fd2FpdEhhbmRsZTsKKyAgICB9OworCisgICAgc3RhdGljIHZvaWQgQ0FMTEJB
Q0sgaGFuZGxlQ2FsbGJhY2sodm9pZCogY29udGV4dCwgQk9PTEVBTiB0aW1lck9yV2FpdEZpcmVk
KTsKKyAgICBzdGF0aWMgdm9pZCBDQUxMQkFDSyB0aW1lckNhbGxiYWNrKHZvaWQqIGNvbnRleHQs
IEJPT0xFQU4gdGltZXJPcldhaXRGaXJlZCk7CisgICAgc3RhdGljIERXT1JEIFdJTkFQSSB3b3Jr
VGhyZWFkQ2FsbGJhY2sodm9pZCogY29udGV4dCk7CisKKyAgICBib29sIHRyeVJlZ2lzdGVyQXNX
b3JrVGhyZWFkKCk7CisgICAgdm9pZCB1bnJlZ2lzdGVyQXNXb3JrVGhyZWFkKCk7CisgICAgdm9p
ZCBwZXJmb3JtV29ya09uUmVnaXN0ZXJlZFdvcmtUaHJlYWQoKTsKKworICAgIHN0YXRpYyB2b2lk
IHVucmVnaXN0ZXJXYWl0QW5kRGVzdHJveUl0ZW1Tb29uKFBhc3NSZWZQdHI8SGFuZGxlV29ya0l0
ZW0+KTsKKyAgICBzdGF0aWMgRFdPUkQgV0lOQVBJIHVucmVnaXN0ZXJXYWl0QW5kRGVzdHJveUl0
ZW1DYWxsYmFjayh2b2lkKiBjb250ZXh0KTsKKworICAgIHZvbGF0aWxlIExPTkcgbV9pc1dvcmtU
aHJlYWRSZWdpc3RlcmVkOworCisgICAgTXV0ZXggbV93b3JrSXRlbVF1ZXVlTG9jazsKKyAgICBW
ZWN0b3I8UmVmUHRyPFdvcmtJdGVtV2luPiA+IG1fd29ya0l0ZW1RdWV1ZTsKKworICAgIE11dGV4
IG1faGFuZGxlc0xvY2s7CisgICAgSGFzaE1hcDxIQU5ETEUsIFJlZlB0cjxIYW5kbGVXb3JrSXRl
bT4gPiBtX2hhbmRsZXM7CisKKyAgICBIQU5ETEUgbV90aW1lclF1ZXVlOworI2VsaWYgUExBVEZP
Uk0oUVQpCisgICAgY2xhc3MgV29ya0l0ZW1RdDsKKyAgICBRVGhyZWFkKiBtX3dvcmtUaHJlYWQ7
CisgICAgZnJpZW5kIGNsYXNzIFdvcmtJdGVtUXQ7CisjZWxpZiBQTEFURk9STShHVEspCisgICAg
c3RhdGljIHZvaWQgc3RhcnRXb3JrUXVldWVUaHJlYWQoV29ya1F1ZXVlKik7CisgICAgdm9pZCB3
b3JrUXVldWVUaHJlYWRCb2R5KCk7CisgICAgdm9pZCBkaXNwYXRjaE9uU291cmNlKEdTb3VyY2Uq
LCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiwgR1NvdXJjZUZ1bmMpOworCisgICAgVGhyZWFkSWRl
bnRpZmllciBtX3dvcmtRdWV1ZVRocmVhZDsKKyAgICBHUmVmUHRyPEdNYWluQ29udGV4dD4gbV9l
dmVudENvbnRleHQ7CisgICAgTXV0ZXggbV9ldmVudExvb3BMb2NrOworICAgIEdSZWZQdHI8R01h
aW5Mb29wPiBtX2V2ZW50TG9vcDsKKyAgICBNdXRleCBtX2V2ZW50U291cmNlc0xvY2s7CisgICAg
Y2xhc3MgRXZlbnRTb3VyY2U7CisgICAgSGFzaE1hcDxpbnQsIFZlY3RvcjxFdmVudFNvdXJjZSo+
ID4gbV9ldmVudFNvdXJjZXM7CisgICAgdHlwZWRlZiBIYXNoTWFwPGludCwgVmVjdG9yPEV2ZW50
U291cmNlKj4gPjo6aXRlcmF0b3IgRXZlbnRTb3VyY2VJdGVyYXRvcjsgCisjZWxpZiBQTEFURk9S
TShFRkwpCisgICAgZmRfc2V0IG1fZmlsZURlc2NyaXB0b3JTZXQ7CisgICAgaW50IG1fbWF4Rmls
ZURlc2NyaXB0b3I7CisgICAgaW50IG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvcjsKKyAgICBpbnQg
bV93cml0ZVRvUGlwZURlc2NyaXB0b3I7CisgICAgYm9vbCBtX3RocmVhZExvb3A7CisKKyAgICBW
ZWN0b3I8RnVuY3Rpb248dm9pZCgpPiA+IG1fd29ya0l0ZW1RdWV1ZTsKKyAgICBNdXRleCBtX3dv
cmtJdGVtUXVldWVMb2NrOworCisgICAgaW50IG1fc29ja2V0RGVzY3JpcHRvcjsKKyAgICBGdW5j
dGlvbjx2b2lkKCk+IG1fc29ja2V0RXZlbnRIYW5kbGVyOworCisgICAgSGFzaE1hcDxpbnQsIE93
blB0cjxFY29yZV9UaW1lcj4gPiBtX3RpbWVyczsKKworICAgIHZvaWQgc2VuZE1lc3NhZ2VUb1Ro
cmVhZChjb25zdCBjaGFyKik7CisgICAgc3RhdGljIHZvaWQqIHdvcmtRdWV1ZVRocmVhZChXb3Jr
UXVldWUqKTsKKyAgICB2b2lkIHBlcmZvcm1Xb3JrKCk7CisgICAgdm9pZCBwZXJmb3JtRmlsZURl
c2NyaXB0b3JXb3JrKCk7CisgICAgc3RhdGljIGJvb2wgdGltZXJGaXJlZCh2b2lkKik7CisjZW5k
aWYKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OldvcmtRdWV1ZTsKKwor
I2VuZGlmIC8vIFdvcmtRdWV1ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9lZmwvV29y
a1F1ZXVlRWZsLmNwcCBiL1NvdXJjZS9XVEYvd3RmL2VmbC9Xb3JrUXVldWVFZmwuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjQxZmZlZGY1MzMxYTJhMmVlZmQ2YjhjN2Y0ZjhmYjBiN2NmNDQ2MWIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9lZmwvV29ya1F1ZXVlRWZsLmNwcApAQCAtMCwwICsx
LDE3MyBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcwor
CisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV29ya1F1ZXVlLmgiCisKKyNpbmNs
dWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCitjbGFzcyBUaW1lcldvcmtJdGVtIHsKK3B1YmxpYzoK
KyAgICBUaW1lcldvcmtJdGVtKGludCB0aW1lcklELCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBm
dW5jdGlvbiwgV29ya1F1ZXVlKiBxdWV1ZSkKKyAgICAgICAgOiBtX2Z1bmN0aW9uKGZ1bmN0aW9u
KQorICAgICAgICAsIG1fcXVldWUocXVldWUpCisgICAgICAgICwgbV90aW1lcklEKHRpbWVySUQp
CisgICAgeworICAgIH0KKyAgICB+VGltZXJXb3JrSXRlbSgpIHsgfQorCisgICAgRnVuY3Rpb248
dm9pZCgpPiBmdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZnVuY3Rpb247IH0KKyAgICBXb3Jr
UXVldWUqIHF1ZXVlKCkgY29uc3QgeyByZXR1cm4gbV9xdWV1ZTsgfQorCisgICAgaW50IHRpbWVy
SUQoKSBjb25zdCB7IHJldHVybiBtX3RpbWVySUQ7IH0KKworcHJpdmF0ZToKKyAgICBGdW5jdGlv
bjx2b2lkKCk+IG1fZnVuY3Rpb247CisgICAgV29ya1F1ZXVlKiBtX3F1ZXVlOworICAgIGludCBt
X3RpbWVySUQ7Cit9OworCitzdGF0aWMgY29uc3QgaW50IGludmFsaWRTb2NrZXREZXNjcmlwdG9y
ID0gLTE7CitzdGF0aWMgY29uc3QgaW50IHRocmVhZE1lc3NhZ2VTaXplID0gMTsKK3N0YXRpYyBj
b25zdCBjaGFyIGZpbmlzaFRocmVhZE1lc3NhZ2VbXSA9ICJGIjsKK3N0YXRpYyBjb25zdCBjaGFy
IHdha3VwVGhyZWFkTWVzc2FnZVtdID0gIlciOworCit2b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1J
bml0aWFsaXplKGNvbnN0IGNoYXIqIG5hbWUpCit7CisgICAgaW50IGZkc1syXTsKKyAgICBpZiAo
cGlwZShmZHMpKQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgIG1fcmVhZEZy
b21QaXBlRGVzY3JpcHRvciA9IGZkc1swXTsKKyAgICBtX3dyaXRlVG9QaXBlRGVzY3JpcHRvciA9
IGZkc1sxXTsKKyAgICBGRF9aRVJPKCZtX2ZpbGVEZXNjcmlwdG9yU2V0KTsKKyAgICBGRF9TRVQo
bV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yLCAmbV9maWxlRGVzY3JpcHRvclNldCk7CisgICAgbV9t
YXhGaWxlRGVzY3JpcHRvciA9IG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvcjsKKworICAgIG1fc29j
a2V0RGVzY3JpcHRvciA9IGludmFsaWRTb2NrZXREZXNjcmlwdG9yOworCisgICAgbV90aHJlYWRM
b29wID0gdHJ1ZTsKKyAgICBjcmVhdGVUaHJlYWQocmVpbnRlcnByZXRfY2FzdDxXVEY6OlRocmVh
ZEZ1bmN0aW9uPigmV29ya1F1ZXVlOjp3b3JrUXVldWVUaHJlYWQpLCB0aGlzLCBuYW1lKTsKK30K
Kwordm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCit7CisgICAgc2VuZE1lc3Nh
Z2VUb1RocmVhZChmaW5pc2hUaHJlYWRNZXNzYWdlKTsKK30KKwordm9pZCBXb3JrUXVldWU6OnBl
cmZvcm1Xb3JrKCkKK3sKKyAgICBtX3dvcmtJdGVtUXVldWVMb2NrLmxvY2soKTsKKworICAgIHdo
aWxlICghbV93b3JrSXRlbVF1ZXVlLmlzRW1wdHkoKSkgeworICAgICAgICBWZWN0b3I8RnVuY3Rp
b248dm9pZCgpPiA+IHdvcmtJdGVtUXVldWU7CisgICAgICAgIG1fd29ya0l0ZW1RdWV1ZS5zd2Fw
KHdvcmtJdGVtUXVldWUpOworCisgICAgICAgIG1fd29ya0l0ZW1RdWV1ZUxvY2sudW5sb2NrKCk7
CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd29ya0l0ZW1RdWV1ZS5zaXplKCk7ICsr
aSkKKyAgICAgICAgICAgIHdvcmtJdGVtUXVldWVbaV0oKTsKKyAgICAgICAgbV93b3JrSXRlbVF1
ZXVlTG9jay5sb2NrKCk7CisgICAgfQorICAgIG1fd29ya0l0ZW1RdWV1ZUxvY2sudW5sb2NrKCk7
Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjpwZXJmb3JtRmlsZURlc2NyaXB0b3JXb3JrKCkKK3sKKyAg
ICBmZF9zZXQgcmVhZEZpbGVEZXNjcmlwdG9yU2V0ID0gbV9maWxlRGVzY3JpcHRvclNldDsKKwor
ICAgIGlmIChzZWxlY3QobV9tYXhGaWxlRGVzY3JpcHRvciArIDEsICZyZWFkRmlsZURlc2NyaXB0
b3JTZXQsIDAsIDAsIDApID49IDApIHsKKyAgICAgICAgaWYgKEZEX0lTU0VUKG1fcmVhZEZyb21Q
aXBlRGVzY3JpcHRvciwgJnJlYWRGaWxlRGVzY3JpcHRvclNldCkpIHsKKyAgICAgICAgICAgIGNo
YXIgcmVhZEJ1Zlt0aHJlYWRNZXNzYWdlU2l6ZV07CisgICAgICAgICAgICBpZiAocmVhZChtX3Jl
YWRGcm9tUGlwZURlc2NyaXB0b3IsIHJlYWRCdWYsIHRocmVhZE1lc3NhZ2VTaXplKSA9PSAtMSkK
KyAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byByZWFkIGZyb20gV29ya1F1ZXVl
VGhyZWFkIHBpcGUiKTsKKyAgICAgICAgICAgIGlmICghc3RybmNtcChyZWFkQnVmLCBmaW5pc2hU
aHJlYWRNZXNzYWdlLCB0aHJlYWRNZXNzYWdlU2l6ZSkpCisgICAgICAgICAgICAgICAgbV90aHJl
YWRMb29wID0gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAobV9zb2NrZXREZXNjcmlw
dG9yICE9IGludmFsaWRTb2NrZXREZXNjcmlwdG9yICYmIEZEX0lTU0VUKG1fc29ja2V0RGVzY3Jp
cHRvciwgJnJlYWRGaWxlRGVzY3JpcHRvclNldCkpCisgICAgICAgICAgICBtX3NvY2tldEV2ZW50
SGFuZGxlcigpOworICAgIH0KK30KKwordm9pZCBXb3JrUXVldWU6OnNlbmRNZXNzYWdlVG9UaHJl
YWQoY29uc3QgY2hhciogbWVzc2FnZSkKK3sKKyAgICBpZiAod3JpdGUobV93cml0ZVRvUGlwZURl
c2NyaXB0b3IsIG1lc3NhZ2UsIHRocmVhZE1lc3NhZ2VTaXplKSA9PSAtMSkKKyAgICAgICAgTE9H
X0VSUk9SKCJGYWlsZWQgdG8gd2FrZSB1cCBXb3JrUXVldWUgVGhyZWFkIik7Cit9CisKK3ZvaWQq
IFdvcmtRdWV1ZTo6d29ya1F1ZXVlVGhyZWFkKFdvcmtRdWV1ZSogd29ya1F1ZXVlKQoreworICAg
IHdoaWxlICh3b3JrUXVldWUtPm1fdGhyZWFkTG9vcCkgeworICAgICAgICB3b3JrUXVldWUtPnBl
cmZvcm1Xb3JrKCk7CisgICAgICAgIHdvcmtRdWV1ZS0+cGVyZm9ybUZpbGVEZXNjcmlwdG9yV29y
aygpOworICAgIH0KKworICAgIGNsb3NlKHdvcmtRdWV1ZS0+bV9yZWFkRnJvbVBpcGVEZXNjcmlw
dG9yKTsKKyAgICBjbG9zZSh3b3JrUXVldWUtPm1fd3JpdGVUb1BpcGVEZXNjcmlwdG9yKTsKKwor
ICAgIHJldHVybiAwOworfQorCit2b2lkIFdvcmtRdWV1ZTo6cmVnaXN0ZXJTb2NrZXRFdmVudEhh
bmRsZXIoaW50IGZpbGVEZXNjcmlwdG9yLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlv
bikKK3sKKyAgICBpZiAobV9zb2NrZXREZXNjcmlwdG9yICE9IGludmFsaWRTb2NrZXREZXNjcmlw
dG9yKQorICAgICAgICBMT0dfRVJST1IoIiVkIGlzIGFscmVhZHkgcmVnaXN0ZXJkLiIsIGZpbGVE
ZXNjcmlwdG9yKTsKKworICAgIG1fc29ja2V0RGVzY3JpcHRvciA9IGZpbGVEZXNjcmlwdG9yOwor
ICAgIG1fc29ja2V0RXZlbnRIYW5kbGVyID0gZnVuY3Rpb247CisKKyAgICBpZiAoZmlsZURlc2Ny
aXB0b3IgPiBtX21heEZpbGVEZXNjcmlwdG9yKQorICAgICAgICBtX21heEZpbGVEZXNjcmlwdG9y
ID0gZmlsZURlc2NyaXB0b3I7CisgICAgRkRfU0VUKGZpbGVEZXNjcmlwdG9yLCAmbV9maWxlRGVz
Y3JpcHRvclNldCk7Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjp1bnJlZ2lzdGVyU29ja2V0RXZlbnRI
YW5kbGVyKGludCBmaWxlRGVzY3JpcHRvcikKK3sKKyAgICBtX3NvY2tldERlc2NyaXB0b3IgPSBp
bnZhbGlkU29ja2V0RGVzY3JpcHRvcjsKKworICAgIGlmIChmaWxlRGVzY3JpcHRvciA9PSBtX21h
eEZpbGVEZXNjcmlwdG9yKQorICAgICAgICBtX21heEZpbGVEZXNjcmlwdG9yID0gbV9yZWFkRnJv
bVBpcGVEZXNjcmlwdG9yOworICAgIEZEX0NMUihmaWxlRGVzY3JpcHRvciwgJm1fZmlsZURlc2Ny
aXB0b3JTZXQpOworfQorCit2b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2goY29uc3QgRnVuY3Rpb248
dm9pZCgpPiYgZnVuY3Rpb24pCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fd29ya0l0ZW1R
dWV1ZUxvY2spOworICAgIG1fd29ya0l0ZW1RdWV1ZS5hcHBlbmQoZnVuY3Rpb24pOworICAgIHNl
bmRNZXNzYWdlVG9UaHJlYWQod2FrdXBUaHJlYWRNZXNzYWdlKTsKK30KKworYm9vbCBXb3JrUXVl
dWU6OnRpbWVyRmlyZWQodm9pZCogZGF0YSkKK3sKKyAgICBUaW1lcldvcmtJdGVtKiBpdGVtID0g
c3RhdGljX2Nhc3Q8VGltZXJXb3JrSXRlbSo+KGRhdGEpOworICAgIGlmIChpdGVtICYmIGl0ZW0t
PnF1ZXVlKCktPm1faXNWYWxpZCkgeworICAgICAgICBpdGVtLT5xdWV1ZSgpLT5kaXNwYXRjaChp
dGVtLT5mdW5jdGlvbigpKTsKKyAgICAgICAgaXRlbS0+cXVldWUoKS0+bV90aW1lcnMudGFrZShp
dGVtLT50aW1lcklEKCkpOworICAgICAgICBkZWxldGUgaXRlbTsKKyAgICB9CisKKyAgICByZXR1
cm4gRUNPUkVfQ0FMTEJBQ0tfQ0FOQ0VMOworfQorCit2b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2hB
ZnRlckRlbGF5KGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uLCBkb3VibGUgZGVsYXkp
Cit7CisgICAgc3RhdGljIGludCB0aW1lcklkID0gMTsKKyAgICBtX3RpbWVycy5zZXQodGltZXJJ
ZCwgYWRvcHRQdHIoZWNvcmVfdGltZXJfYWRkKGRlbGF5LCByZWludGVycHJldF9jYXN0PEVjb3Jl
X1Rhc2tfQ2I+KHRpbWVyRmlyZWQpLCBuZXcgVGltZXJXb3JrSXRlbSh0aW1lcklkLCBmdW5jdGlv
biwgdGhpcykpKSk7CisgICAgdGltZXJJZCsrOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvZ3RrL1dvcmtRdWV1ZUd0ay5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9ndGsvV29ya1F1ZXVlR3Rr
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5iOTFmNjM1MWQ3M2IwMjEwZWVhYzY2OTY3MzU4ODdlZjhlYTZhNmQ0
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvZ3RrL1dvcmtRdWV1ZUd0ay5jcHAK
QEAgLTAsMCArMSwyMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJXb3JrUXVldWUuaCIKKworI2luY2x1ZGUgPGdpby9naW8uaD4KKyNpbmNsdWRlIDxnbGli
Lmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorCisvLyBXb3JrUXVldWU6OkV2
ZW50U291cmNlCitjbGFzcyBXb3JrUXVldWU6OkV2ZW50U291cmNlIHsKK3B1YmxpYzoKKyAgICBF
dmVudFNvdXJjZShjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbiwgV29ya1F1ZXVlKiB3
b3JrUXVldWUsIEdDYW5jZWxsYWJsZSogY2FuY2VsbGFibGUpCisgICAgICAgIDogbV9mdW5jdGlv
bihmdW5jdGlvbikKKyAgICAgICAgLCBtX3dvcmtRdWV1ZSh3b3JrUXVldWUpCisgICAgICAgICwg
bV9jYW5jZWxsYWJsZShjYW5jZWxsYWJsZSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBjYW5j
ZWwoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2NhbmNlbGxhYmxlKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBnX2NhbmNlbGxhYmxlX2NhbmNlbChtX2NhbmNlbGxhYmxlKTsKKyAgICB9
CisKKyAgICBzdGF0aWMgdm9pZCBleGVjdXRlRXZlbnRTb3VyY2UoRXZlbnRTb3VyY2UqIGV2ZW50
U291cmNlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGV2ZW50U291cmNlKTsKKyAgICAgICAgV29y
a1F1ZXVlKiBxdWV1ZSA9IGV2ZW50U291cmNlLT5tX3dvcmtRdWV1ZTsKKyAgICAgICAgeworICAg
ICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHF1ZXVlLT5tX2lzVmFsaWRNdXRleCk7CisgICAg
ICAgICAgICBpZiAoIXF1ZXVlLT5tX2lzVmFsaWQpCisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgZXZlbnRTb3VyY2UtPm1fZnVuY3Rpb24oKTsKKyAgICB9CisK
KyAgICBzdGF0aWMgZ2Jvb2xlYW4gcGVyZm9ybVdvcmtPbmNlKEV2ZW50U291cmNlKiBldmVudFNv
dXJjZSkKKyAgICB7CisgICAgICAgIGV4ZWN1dGVFdmVudFNvdXJjZShldmVudFNvdXJjZSk7Cisg
ICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gcGVyZm9y
bVdvcmsoR1NvY2tldCogc29ja2V0LCBHSU9Db25kaXRpb24gY29uZGl0aW9uLCBFdmVudFNvdXJj
ZSogZXZlbnRTb3VyY2UpCisgICAgeworICAgICAgICBpZiAoIShjb25kaXRpb24gJiBHX0lPX0lO
KSAmJiAhKGNvbmRpdGlvbiAmIEdfSU9fSFVQKSAmJiAhKGNvbmRpdGlvbiAmIEdfSU9fRVJSKSkg
eworICAgICAgICAgICAgLy8gRXZlbnRTb3VyY2UgaGFzIGJlZW4gY2FuY2VsbGVkLCByZXR1cm4g
RkFMU0UgdG8gZGVzdHJveSB0aGUgc291cmNlLgorICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwor
ICAgICAgICB9CisKKyAgICAgICAgZXhlY3V0ZUV2ZW50U291cmNlKGV2ZW50U291cmNlKTsKKyAg
ICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCisgICAgc3RhdGljIGdib29sZWFuIHBlcmZvcm1X
b3JrT25UZXJtaW5hdGlvbihHUGlkLCBnaW50LCBFdmVudFNvdXJjZSogZXZlbnRTb3VyY2UpCisg
ICAgeworICAgICAgICBleGVjdXRlRXZlbnRTb3VyY2UoZXZlbnRTb3VyY2UpOworICAgICAgICBy
ZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgZGVsZXRlRXZlbnRTb3VyY2Uo
RXZlbnRTb3VyY2UqIGV2ZW50U291cmNlKSAKKyAgICB7CisgICAgICAgIEFTU0VSVChldmVudFNv
dXJjZSk7CisgICAgICAgIGRlbGV0ZSBldmVudFNvdXJjZTsKKyAgICB9CisgICAKK3B1YmxpYzoK
KyAgICBGdW5jdGlvbjx2b2lkKCk+IG1fZnVuY3Rpb247CisgICAgV29ya1F1ZXVlKiBtX3dvcmtR
dWV1ZTsKKyAgICBHQ2FuY2VsbGFibGUqIG1fY2FuY2VsbGFibGU7Cit9OworCisvLyBXb3JrUXVl
dWUKK3N0YXRpYyBjb25zdCBzaXplX3Qga1Zpc3VhbFN0dWRpb1RocmVhZE5hbWVMaW1pdCA9IDMx
OworCit2b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXplKGNvbnN0IGNoYXIqIG5hbWUp
Cit7CisgICAgbV9ldmVudENvbnRleHQgPSBhZG9wdEdSZWYoZ19tYWluX2NvbnRleHRfbmV3KCkp
OworICAgIEFTU0VSVChtX2V2ZW50Q29udGV4dCk7CisgICAgbV9ldmVudExvb3AgPSBhZG9wdEdS
ZWYoZ19tYWluX2xvb3BfbmV3KG1fZXZlbnRDb250ZXh0LmdldCgpLCBGQUxTRSkpOworICAgIEFT
U0VSVChtX2V2ZW50TG9vcCk7CisKKyAgICAvLyBUaGlzIG5hbWUgY2FuIGJlIGNvbS5hcHBsZS5X
ZWJLaXQuUHJvY2Vzc0xhdW5jaGVyIG9yIGNvbS5hcHBsZS5Db3JlSVBDLlJlY2VpdmVRdWV1ZS4K
KyAgICAvLyBXZSBhcmUgdXNpbmcgdGhvc2UgbmFtZXMgZm9yIHRoZSB0aHJlYWQgbmFtZSwgYnV0
IGJvdGggYXJlIGxvbmdlciB0aGFuIDMxIGNoYXJhY3RlcnMsCisgICAgLy8gd2hpY2ggaXMgdGhl
IGxpbWl0IG9mIFZpc3VhbCBTdHVkaW8gZm9yIHRocmVhZCBuYW1lcy4KKyAgICAvLyBXaGVuIGxv
ZyBpcyBlbmFibGVkIGNyZWF0ZVRocmVhZCgpIHdpbGwgYXNzZXJ0IGluc3RlYWQgb2YgdHJ1bmNh
dGUgdGhlIG5hbWUsIHNvIHdlIG5lZWQKKyAgICAvLyB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgdXNl
IGEgbmFtZSBsb25nZXIgdGhhbiAzMSBjaGFyYWN0ZXJzLgorICAgIGNvbnN0IGNoYXIqIHRocmVh
ZE5hbWUgPSBnX3N0cnJzdHIobmFtZSwgIi4iKTsKKyAgICBpZiAodGhyZWFkTmFtZSkKKyAgICAg
ICAgdGhyZWFkTmFtZSsrOworICAgIGVsc2UKKyAgICAgICAgdGhyZWFkTmFtZSA9IG5hbWU7Cisg
ICAgaWYgKHN0cmxlbih0aHJlYWROYW1lKSA+IGtWaXN1YWxTdHVkaW9UaHJlYWROYW1lTGltaXQp
CisgICAgICAgIHRocmVhZE5hbWUgKz0gc3RybGVuKHRocmVhZE5hbWUpIC0ga1Zpc3VhbFN0dWRp
b1RocmVhZE5hbWVMaW1pdDsKKworICAgIG1fd29ya1F1ZXVlVGhyZWFkID0gY3JlYXRlVGhyZWFk
KHJlaW50ZXJwcmV0X2Nhc3Q8V1RGOjpUaHJlYWRGdW5jdGlvbj4oJldvcmtRdWV1ZTo6c3RhcnRX
b3JrUXVldWVUaHJlYWQpLCB0aGlzLCB0aHJlYWROYW1lKTsKK30KKwordm9pZCBXb3JrUXVldWU6
OnBsYXRmb3JtSW52YWxpZGF0ZSgpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZXZlbnRM
b29wTG9jayk7CisKKyAgICBpZiAobV9ldmVudExvb3ApIHsKKyAgICAgICAgaWYgKGdfbWFpbl9s
b29wX2lzX3J1bm5pbmcobV9ldmVudExvb3AuZ2V0KCkpKQorICAgICAgICAgICAgZ19tYWluX2xv
b3BfcXVpdChtX2V2ZW50TG9vcC5nZXQoKSk7CisgICAgICAgIG1fZXZlbnRMb29wLmNsZWFyKCk7
CisgICAgfQorCisgICAgbV9ldmVudENvbnRleHQuY2xlYXIoKTsKK30KKwordm9pZCBXb3JrUXVl
dWU6OnN0YXJ0V29ya1F1ZXVlVGhyZWFkKFdvcmtRdWV1ZSogd29ya1F1ZXVlKQoreworICAgIHdv
cmtRdWV1ZS0+d29ya1F1ZXVlVGhyZWFkQm9keSgpOworfQorCit2b2lkIFdvcmtRdWV1ZTo6d29y
a1F1ZXVlVGhyZWFkQm9keSgpCit7CisgICAgZ19tYWluX2xvb3BfcnVuKG1fZXZlbnRMb29wLmdl
dCgpKTsKK30KKwordm9pZCBXb3JrUXVldWU6OnJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKGlu
dCBmaWxlRGVzY3JpcHRvciwgaW50IGNvbmRpdGlvbiwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYg
ZnVuY3Rpb24pCit7CisgICAgR1JlZlB0cjxHU29ja2V0PiBzb2NrZXQgPSBhZG9wdEdSZWYoZ19z
b2NrZXRfbmV3X2Zyb21fZmQoZmlsZURlc2NyaXB0b3IsIDApKTsKKyAgICBBU1NFUlQoc29ja2V0
KTsKKyAgICBHUmVmUHRyPEdDYW5jZWxsYWJsZT4gY2FuY2VsbGFibGUgPSBhZG9wdEdSZWYoZ19j
YW5jZWxsYWJsZV9uZXcoKSk7CisgICAgR1JlZlB0cjxHU291cmNlPiBkaXNwYXRjaFNvdXJjZSA9
IGFkb3B0R1JlZihnX3NvY2tldF9jcmVhdGVfc291cmNlKHNvY2tldC5nZXQoKSwgc3RhdGljX2Nh
c3Q8R0lPQ29uZGl0aW9uPihjb25kaXRpb24pLCBjYW5jZWxsYWJsZS5nZXQoKSkpOworICAgIEFT
U0VSVChkaXNwYXRjaFNvdXJjZSk7CisgICAgRXZlbnRTb3VyY2UqIGV2ZW50U291cmNlID0gbmV3
IEV2ZW50U291cmNlKGZ1bmN0aW9uLCB0aGlzLCBjYW5jZWxsYWJsZS5nZXQoKSk7CisgICAgQVNT
RVJUKGV2ZW50U291cmNlKTsKKworICAgIGdfc291cmNlX3NldF9jYWxsYmFjayhkaXNwYXRjaFNv
dXJjZS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oJldvcmtRdWV1ZTo6RXZl
bnRTb3VyY2U6OnBlcmZvcm1Xb3JrKSwKKyAgICAgICAgZXZlbnRTb3VyY2UsIHJlaW50ZXJwcmV0
X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KCZXb3JrUXVldWU6OkV2ZW50U291cmNlOjpkZWxldGVFdmVu
dFNvdXJjZSkpOworCisgICAgLy8gU2V0IHVwIHRoZSBldmVudCBzb3VyY2VzIHVuZGVyIHRoZSBt
dXRleCBzaW5jZSB0aGlzIGlzIHNoYXJlZCBhY3Jvc3MgbXVsdGlwbGUgdGhyZWFkcy4KKyAgICB7
CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2V2ZW50U291cmNlc0xvY2spOworICAgICAg
ICBWZWN0b3I8RXZlbnRTb3VyY2UqPiBzb3VyY2VzOworICAgICAgICBFdmVudFNvdXJjZUl0ZXJh
dG9yIGl0ID0gbV9ldmVudFNvdXJjZXMuZmluZChmaWxlRGVzY3JpcHRvcik7CisgICAgICAgIGlm
IChpdCAhPSBtX2V2ZW50U291cmNlcy5lbmQoKSkgCisgICAgICAgICAgICBzb3VyY2VzID0gaXQt
PnNlY29uZDsKKworICAgICAgICBzb3VyY2VzLmFwcGVuZChldmVudFNvdXJjZSk7CisgICAgICAg
IG1fZXZlbnRTb3VyY2VzLnNldChmaWxlRGVzY3JpcHRvciwgc291cmNlcyk7CisgICAgfQorCisg
ICAgZ19zb3VyY2VfYXR0YWNoKGRpc3BhdGNoU291cmNlLmdldCgpLCBtX2V2ZW50Q29udGV4dC5n
ZXQoKSk7Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjp1bnJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVy
KGludCBmaWxlRGVzY3JpcHRvcikKK3sKKyAgICBBU1NFUlQoZmlsZURlc2NyaXB0b3IpOworICAg
IAorICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2V2ZW50U291cmNlc0xvY2spOworICAgIAorICAg
IEV2ZW50U291cmNlSXRlcmF0b3IgaXQgPSBtX2V2ZW50U291cmNlcy5maW5kKGZpbGVEZXNjcmlw
dG9yKTsKKyAgICBBU1NFUlQoaXQgIT0gbV9ldmVudFNvdXJjZXMuZW5kKCkpOworICAgIEFTU0VS
VChtX2V2ZW50U291cmNlcy5jb250YWlucyhmaWxlRGVzY3JpcHRvcikpOworCisgICAgaWYgKGl0
ICE9IG1fZXZlbnRTb3VyY2VzLmVuZCgpKSB7CisgICAgICAgIFZlY3RvcjxFdmVudFNvdXJjZSo+
IHNvdXJjZXMgPSBpdC0+c2Vjb25kOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c291cmNlcy5zaXplKCk7IGkrKykKKyAgICAgICAgICAgIHNvdXJjZXNbaV0tPmNhbmNlbCgpOwor
CisgICAgICAgIG1fZXZlbnRTb3VyY2VzLnJlbW92ZShpdCk7CisgICAgfQorfQorCit2b2lkIFdv
cmtRdWV1ZTo6ZGlzcGF0Y2hPblNvdXJjZShHU291cmNlKiBkaXNwYXRjaFNvdXJjZSwgY29uc3Qg
RnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24sIEdTb3VyY2VGdW5jIHNvdXJjZUNhbGxiYWNrKQor
eworICAgIEV2ZW50U291cmNlKiBldmVudFNvdXJjZSA9IG5ldyBFdmVudFNvdXJjZShmdW5jdGlv
biwgdGhpcywgMCk7CisKKyAgICBnX3NvdXJjZV9zZXRfY2FsbGJhY2soZGlzcGF0Y2hTb3VyY2Us
IHNvdXJjZUNhbGxiYWNrLCBldmVudFNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVpbnRlcnByZXRfY2FzdDxHRGVzdHJveU5vdGlmeT4oJldvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6
OmRlbGV0ZUV2ZW50U291cmNlKSk7CisKKyAgICBnX3NvdXJjZV9hdHRhY2goZGlzcGF0Y2hTb3Vy
Y2UsIG1fZXZlbnRDb250ZXh0LmdldCgpKTsKK30KKwordm9pZCBXb3JrUXVldWU6OmRpc3BhdGNo
KGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQoreworICAgIEdSZWZQdHI8R1NvdXJj
ZT4gZGlzcGF0Y2hTb3VyY2UgPSBhZG9wdEdSZWYoZ19pZGxlX3NvdXJjZV9uZXcoKSk7CisgICAg
QVNTRVJUKGRpc3BhdGNoU291cmNlKTsKKyAgICBnX3NvdXJjZV9zZXRfcHJpb3JpdHkoZGlzcGF0
Y2hTb3VyY2UuZ2V0KCksIEdfUFJJT1JJVFlfREVGQVVMVCk7CisKKyAgICBkaXNwYXRjaE9uU291
cmNlKGRpc3BhdGNoU291cmNlLmdldCgpLCBmdW5jdGlvbiwgcmVpbnRlcnByZXRfY2FzdDxHU291
cmNlRnVuYz4oJldvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OnBlcmZvcm1Xb3JrT25jZSkpOworfQor
Cit2b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2hBZnRlckRlbGF5KGNvbnN0IEZ1bmN0aW9uPHZvaWQo
KT4mIGZ1bmN0aW9uLCBkb3VibGUgZGVsYXkpCit7CisgICAgR1JlZlB0cjxHU291cmNlPiBkaXNw
YXRjaFNvdXJjZSA9IGFkb3B0R1JlZihnX3RpbWVvdXRfc291cmNlX25ldyhzdGF0aWNfY2FzdDxn
dWludD4oZGVsYXkgKiAxMDAwKSkpOworICAgIEFTU0VSVChkaXNwYXRjaFNvdXJjZSk7CisKKyAg
ICBkaXNwYXRjaE9uU291cmNlKGRpc3BhdGNoU291cmNlLmdldCgpLCBmdW5jdGlvbiwgcmVpbnRl
cnByZXRfY2FzdDxHU291cmNlRnVuYz4oJldvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OnBlcmZvcm1X
b3JrT25jZSkpOworfQorCit2b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2hPblRlcm1pbmF0aW9uKFBs
YXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIgcHJvY2VzcywgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYg
ZnVuY3Rpb24pCit7CisgICAgR1JlZlB0cjxHU291cmNlPiBkaXNwYXRjaFNvdXJjZSA9IGFkb3B0
R1JlZihnX2NoaWxkX3dhdGNoX3NvdXJjZV9uZXcocHJvY2VzcykpOworICAgIEFTU0VSVChkaXNw
YXRjaFNvdXJjZSk7CisKKyAgICBkaXNwYXRjaE9uU291cmNlKGRpc3BhdGNoU291cmNlLmdldCgp
LCBmdW5jdGlvbiwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oJldvcmtRdWV1ZTo6RXZl
bnRTb3VyY2U6OnBlcmZvcm1Xb3JrT25UZXJtaW5hdGlvbikpOworfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvbWFjL1dvcmtRdWV1ZU1hYy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9tYWMvV29y
a1F1ZXVlTWFjLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZTQ3M2VlNWNjODRlNTg0MjliMDQzOWNjZDkyMWFj
MmM0OTJmZmFhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvbWFjL1dvcmtRdWV1
ZU1hYy5jcHAKQEAgLTAsMCArMSwxNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiV29ya1F1ZXVlLmgiCisKKyNpbmNsdWRlIDxtYWNoL21hY2hfaW5pdC5o
PgorI2luY2x1ZGUgPG1hY2gvbWFjaF9wb3J0Lmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIu
aD4KKwordm9pZCBXb3JrUXVldWU6OmV4ZWN1dGVGdW5jdGlvbih2b2lkKiBjb250ZXh0KQorewor
ICAgIFdvcmtRdWV1ZSogcXVldWUgPSBzdGF0aWNfY2FzdDxXb3JrUXVldWUqPihkaXNwYXRjaF9n
ZXRfY29udGV4dChkaXNwYXRjaF9nZXRfY3VycmVudF9xdWV1ZSgpKSk7CisgICAgT3duUHRyPEZ1
bmN0aW9uPHZvaWQoKT4gPiBmdW5jdGlvbiA9IGFkb3B0UHRyKHN0YXRpY19jYXN0PEZ1bmN0aW9u
PHZvaWQoKT4qPihjb250ZXh0KSk7CisgICAgCisgICAgeworICAgICAgICBNdXRleExvY2tlciBs
b2NrZXIocXVldWUtPm1faXNWYWxpZE11dGV4KTsKKyAgICAgICAgaWYgKCFxdWV1ZS0+bV9pc1Zh
bGlkKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgICgqZnVuY3Rpb24pKCk7Cit9
CisKK3ZvaWQgV29ya1F1ZXVlOjpkaXNwYXRjaChjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5j
dGlvbikKK3sKKyAgICBkaXNwYXRjaF9hc3luY19mKG1fZGlzcGF0Y2hRdWV1ZSwgbmV3IEZ1bmN0
aW9uPHZvaWQoKT4oZnVuY3Rpb24pLCBleGVjdXRlRnVuY3Rpb24pOworfQorCit2b2lkIFdvcmtR
dWV1ZTo6ZGlzcGF0Y2hBZnRlckRlbGF5KGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9u
LCBkb3VibGUgZGVsYXkpCit7CisgICAgZGlzcGF0Y2hfdGltZV90IGRlbGF5VGltZSA9IGRpc3Bh
dGNoX3RpbWUoRElTUEFUQ0hfVElNRV9OT1csIGRlbGF5ICogTlNFQ19QRVJfU0VDKTsKKworICAg
IGRpc3BhdGNoX2FmdGVyX2YoZGVsYXlUaW1lLCBtX2Rpc3BhdGNoUXVldWUsIG5ldyBGdW5jdGlv
bjx2b2lkKCk+KGZ1bmN0aW9uKSwgZXhlY3V0ZUZ1bmN0aW9uKTsKK30KKworY2xhc3MgV29ya1F1
ZXVlOjpFdmVudFNvdXJjZSB7CitwdWJsaWM6CisgICAgRXZlbnRTb3VyY2UoTWFjaFBvcnRFdmVu
dFR5cGUgZXZlbnRUeXBlLCBkaXNwYXRjaF9zb3VyY2VfdCBkaXNwYXRjaFNvdXJjZSwgY29uc3Qg
RnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCisgICAgICAgIDogbV9ldmVudFR5cGUoZXZlbnRU
eXBlKQorICAgICAgICAsIG1fZGlzcGF0Y2hTb3VyY2UoZGlzcGF0Y2hTb3VyY2UpCisgICAgICAg
ICwgbV9mdW5jdGlvbihmdW5jdGlvbikKKyAgICB7CisgICAgfQorICAgIAorICAgIGRpc3BhdGNo
X3NvdXJjZV90IGRpc3BhdGNoU291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9kaXNwYXRjaFNvdXJj
ZTsgfQorICAgIAorICAgIHN0YXRpYyB2b2lkIGV2ZW50SGFuZGxlcih2b2lkKiBzb3VyY2UpIAor
ICAgIHsKKyAgICAgICAgRXZlbnRTb3VyY2UqIGV2ZW50U291cmNlID0gc3RhdGljX2Nhc3Q8RXZl
bnRTb3VyY2UqPihzb3VyY2UpOworICAgICAgICAKKyAgICAgICAgZXZlbnRTb3VyY2UtPm1fZnVu
Y3Rpb24oKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgY2FuY2VsSGFuZGxlcih2b2lk
KiBzb3VyY2UpCisgICAgeworICAgICAgICBFdmVudFNvdXJjZSogZXZlbnRTb3VyY2UgPSBzdGF0
aWNfY2FzdDxFdmVudFNvdXJjZSo+KHNvdXJjZSk7CisgICAgICAgIAorICAgICAgICBtYWNoX3Bv
cnRfdCBtYWNoUG9ydCA9IGRpc3BhdGNoX3NvdXJjZV9nZXRfaGFuZGxlKGV2ZW50U291cmNlLT5t
X2Rpc3BhdGNoU291cmNlKTsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAoZXZlbnRTb3VyY2Ut
Pm1fZXZlbnRUeXBlKSB7CisgICAgICAgIGNhc2UgTWFjaFBvcnREYXRhQXZhaWxhYmxlOgorICAg
ICAgICAgICAgLy8gUmVsZWFzZSBvdXIgcmVjZWl2ZSByaWdodC4KKyAgICAgICAgICAgIG1hY2hf
cG9ydF9tb2RfcmVmcyhtYWNoX3Rhc2tfc2VsZigpLCBtYWNoUG9ydCwgTUFDSF9QT1JUX1JJR0hU
X1JFQ0VJVkUsIC0xKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1hY2hQb3J0
RGVhZE5hbWVOb3RpZmljYXRpb246CisgICAgICAgICAgICAvLyBSZWxlYXNlIG91ciBzZW5kIHJp
Z2h0LgorICAgICAgICAgICAgbWFjaF9wb3J0X2RlYWxsb2NhdGUobWFjaF90YXNrX3NlbGYoKSwg
bWFjaFBvcnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisg
ICAgc3RhdGljIHZvaWQgZmluYWxpemVIYW5kbGVyKHZvaWQqIHNvdXJjZSkKKyAgICB7CisgICAg
ICAgIEV2ZW50U291cmNlKiBldmVudFNvdXJjZSA9IHN0YXRpY19jYXN0PEV2ZW50U291cmNlKj4o
c291cmNlKTsKKyAgICAgICAgCisgICAgICAgIGRlbGV0ZSBldmVudFNvdXJjZTsKKyAgICB9Cisg
ICAgCitwcml2YXRlOgorICAgIE1hY2hQb3J0RXZlbnRUeXBlIG1fZXZlbnRUeXBlOworICAgIAor
ICAgIC8vIFRoaXMgaXMgYSB3ZWFrIHJlZmVyZW5jZSwgc2luY2UgbV9kaXNwYXRjaFNvdXJjZSBy
ZWZlcmVuY2VzIHRoZSBldmVudCBzb3VyY2UuCisgICAgZGlzcGF0Y2hfc291cmNlX3QgbV9kaXNw
YXRjaFNvdXJjZTsKKworICAgIEZ1bmN0aW9uPHZvaWQoKT4gbV9mdW5jdGlvbjsKK307CisKK3Zv
aWQgV29ya1F1ZXVlOjpyZWdpc3Rlck1hY2hQb3J0RXZlbnRIYW5kbGVyKG1hY2hfcG9ydF90IG1h
Y2hQb3J0LCBNYWNoUG9ydEV2ZW50VHlwZSBldmVudFR5cGUsIGNvbnN0IEZ1bmN0aW9uPHZvaWQo
KT4mIGZ1bmN0aW9uKQoreworICAgIGRpc3BhdGNoX3NvdXJjZV90eXBlX3Qgc291cmNlVHlwZSA9
IDA7CisgICAgc3dpdGNoIChldmVudFR5cGUpIHsKKyAgICBjYXNlIE1hY2hQb3J0RGF0YUF2YWls
YWJsZToKKyAgICAgICAgc291cmNlVHlwZSA9IERJU1BBVENIX1NPVVJDRV9UWVBFX01BQ0hfUkVD
VjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNYWNoUG9ydERlYWROYW1lTm90aWZpY2F0aW9u
OgorICAgICAgICBzb3VyY2VUeXBlID0gRElTUEFUQ0hfU09VUkNFX1RZUEVfTUFDSF9TRU5EOwor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgZGlzcGF0Y2hfc291cmNlX3QgZGlzcGF0
Y2hTb3VyY2UgPSBkaXNwYXRjaF9zb3VyY2VfY3JlYXRlKHNvdXJjZVR5cGUsIG1hY2hQb3J0LCAw
LCBtX2Rpc3BhdGNoUXVldWUpOworICAgIAorICAgIEV2ZW50U291cmNlKiBldmVudFNvdXJjZSA9
IG5ldyBFdmVudFNvdXJjZShldmVudFR5cGUsIGRpc3BhdGNoU291cmNlLCBmdW5jdGlvbik7Cisg
ICAgZGlzcGF0Y2hfc2V0X2NvbnRleHQoZGlzcGF0Y2hTb3VyY2UsIGV2ZW50U291cmNlKTsKKyAg
ICAKKyAgICBkaXNwYXRjaF9zb3VyY2Vfc2V0X2V2ZW50X2hhbmRsZXJfZihkaXNwYXRjaFNvdXJj
ZSwgJkV2ZW50U291cmNlOjpldmVudEhhbmRsZXIpOworICAgIGRpc3BhdGNoX3NvdXJjZV9zZXRf
Y2FuY2VsX2hhbmRsZXJfZihkaXNwYXRjaFNvdXJjZSwgJkV2ZW50U291cmNlOjpjYW5jZWxIYW5k
bGVyKTsKKyAgICBkaXNwYXRjaF9zZXRfZmluYWxpemVyX2YoZGlzcGF0Y2hTb3VyY2UsICZFdmVu
dFNvdXJjZTo6ZmluYWxpemVIYW5kbGVyKTsKKyAgICAKKyAgICAvLyBBZGQgdGhlIHNvdXJjZSB0
byBvdXIgc2V0IG9mIHNvdXJjZXMuCisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIo
bV9ldmVudFNvdXJjZXNNdXRleCk7CisgICAgICAgIAorICAgICAgICBBU1NFUlQoIW1fZXZlbnRT
b3VyY2VzLmNvbnRhaW5zKG1hY2hQb3J0KSk7CisgICAgICAgIAorICAgICAgICBtX2V2ZW50U291
cmNlcy5zZXQobWFjaFBvcnQsIGV2ZW50U291cmNlKTsKKyAgICAgICAgCisgICAgICAgIC8vIEFu
ZCBzdGFydCBpdCEKKyAgICAgICAgZGlzcGF0Y2hfcmVzdW1lKGRpc3BhdGNoU291cmNlKTsKKyAg
ICB9Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjp1bnJlZ2lzdGVyTWFjaFBvcnRFdmVudEhhbmRsZXIo
bWFjaF9wb3J0X3QgbWFjaFBvcnQpCit7CisgICAgQVNTRVJUKG1hY2hQb3J0KTsKKyAgICAKKyAg
ICBNdXRleExvY2tlciBsb2NrZXIobV9ldmVudFNvdXJjZXNNdXRleCk7CisgICAgCisgICAgSGFz
aE1hcDxtYWNoX3BvcnRfdCwgRXZlbnRTb3VyY2UqPjo6aXRlcmF0b3IgaXQgPSBtX2V2ZW50U291
cmNlcy5maW5kKG1hY2hQb3J0KTsKKyAgICBBU1NFUlQoaXQgIT0gbV9ldmVudFNvdXJjZXMuZW5k
KCkpOworICAgIAorICAgIEFTU0VSVChtX2V2ZW50U291cmNlcy5jb250YWlucyhtYWNoUG9ydCkp
OworCisgICAgRXZlbnRTb3VyY2UqIGV2ZW50U291cmNlID0gaXQtPnNlY29uZDsKKyAgICAvLyBD
YW5jZWwgYW5kIHJlbGVhc2UgdGhlIHNvdXJjZS4gSXQgd2lsbCBiZSBkZWxldGVkIGluIGl0cyBm
aW5hbGl6ZSBoYW5kbGVyLgorICAgIGRpc3BhdGNoX3NvdXJjZV9jYW5jZWwoZXZlbnRTb3VyY2Ut
PmRpc3BhdGNoU291cmNlKCkpOworICAgIGRpc3BhdGNoX3JlbGVhc2UoZXZlbnRTb3VyY2UtPmRp
c3BhdGNoU291cmNlKCkpOworCisgICAgbV9ldmVudFNvdXJjZXMucmVtb3ZlKGl0KTsgICAgCit9
CisKK3ZvaWQgV29ya1F1ZXVlOjpwbGF0Zm9ybUluaXRpYWxpemUoY29uc3QgY2hhciogbmFtZSkK
K3sKKyAgICBtX2Rpc3BhdGNoUXVldWUgPSBkaXNwYXRjaF9xdWV1ZV9jcmVhdGUobmFtZSwgMCk7
CisgICAgZGlzcGF0Y2hfc2V0X2NvbnRleHQobV9kaXNwYXRjaFF1ZXVlLCB0aGlzKTsKK30KKwor
dm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCit7CisjaWYgIUFTU0VSVF9ESVNB
QkxFRAorICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2V2ZW50U291cmNlc011dGV4KTsKKyAgICBB
U1NFUlQobV9ldmVudFNvdXJjZXMuaXNFbXB0eSgpKTsKKyNlbmRpZgorCisgICAgZGlzcGF0Y2hf
cmVsZWFzZShtX2Rpc3BhdGNoUXVldWUpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
cXQvV29ya1F1ZXVlUXQuY3BwIGIvU291cmNlL1dURi93dGYvcXQvV29ya1F1ZXVlUXQuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjA1MDkxZmZkYTczOTYwYzYwYzQwZjFmNGNlZWU5NTJjNjFjM2Q2NmIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9xdC9Xb3JrUXVldWVRdC5jcHAKQEAgLTAsMCAr
MSwxMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9v
ciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiV29ya1F1ZXVlLmgiCisKKyNpbmNsdWRlIDxRT2JqZWN0PgorI2luY2x1ZGUgPFFQ
cm9jZXNzPgorI2luY2x1ZGUgPFFUaHJlYWQ+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgor
CituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgV29ya1F1ZXVlOjpXb3JrSXRlbVF0IDogcHVibGlj
IFFPYmplY3QgeworICAgIFFfT0JKRUNUCitwdWJsaWM6CisgICAgV29ya0l0ZW1RdChXb3JrUXVl
dWUqIHdvcmtRdWV1ZSwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCisgICAgICAg
IDogbV9xdWV1ZSh3b3JrUXVldWUpCisgICAgICAgICwgbV9zb3VyY2UoMCkKKyAgICAgICAgLCBt
X3NpZ25hbCgwKQorICAgICAgICAsIG1fZnVuY3Rpb24oZnVuY3Rpb24pCisgICAgeworICAgIH0K
KworICAgIFdvcmtJdGVtUXQoV29ya1F1ZXVlKiB3b3JrUXVldWUsIFFPYmplY3QqIHNvdXJjZSwg
Y29uc3QgY2hhciogc2lnbmFsLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKKyAg
ICAgICAgOiBtX3F1ZXVlKHdvcmtRdWV1ZSkKKyAgICAgICAgLCBtX3NvdXJjZShzb3VyY2UpCisg
ICAgICAgICwgbV9zaWduYWwoc2lnbmFsKQorICAgICAgICAsIG1fZnVuY3Rpb24oZnVuY3Rpb24p
CisgICAgeworICAgICAgICBjb25uZWN0KG1fc291cmNlLCBtX3NpZ25hbCwgU0xPVChleGVjdXRl
KCkpLCBRdDo6UXVldWVkQ29ubmVjdGlvbik7CisgICAgfQorCisgICAgfldvcmtJdGVtUXQoKQor
ICAgIHsKKyAgICB9CisKKyAgICBRX1NMT1Qgdm9pZCBleGVjdXRlKCkgCisgICAgeyAKKyAgICAg
ICAgaWYgKG1fcXVldWUtPm1faXNWYWxpZCkKKyAgICAgICAgICAgIG1fZnVuY3Rpb24oKTsKKyAg
ICB9CisKKyAgICBRX1NMT1Qgdm9pZCBleGVjdXRlQW5kRGVsZXRlKCkKKyAgICB7CisgICAgICAg
IGV4ZWN1dGUoKTsKKyAgICAgICAgZGVsZXRlIHRoaXM7CisgICAgfQorCisgICAgdmlydHVhbCB2
b2lkIHRpbWVyRXZlbnQoUVRpbWVyRXZlbnQqKQorICAgIHsKKyAgICAgICAgZXhlY3V0ZUFuZERl
bGV0ZSgpOworICAgIH0KKworICAgIFdvcmtRdWV1ZSogbV9xdWV1ZTsKKyAgICBRT2JqZWN0KiBt
X3NvdXJjZTsKKyAgICBjb25zdCBjaGFyKiBtX3NpZ25hbDsKKyAgICBGdW5jdGlvbjx2b2lkKCk+
IG1fZnVuY3Rpb247Cit9OworCitRU29ja2V0Tm90aWZpZXIqIFdvcmtRdWV1ZTo6cmVnaXN0ZXJT
b2NrZXRFdmVudEhhbmRsZXIoaW50IHNvY2tldERlc2NyaXB0b3IsIFFTb2NrZXROb3RpZmllcjo6
VHlwZSB0eXBlLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKK3sKKyAgICBBU1NF
UlQobV93b3JrVGhyZWFkKTsKKworICAgIFFTb2NrZXROb3RpZmllciogbm90aWZpZXIgPSBuZXcg
UVNvY2tldE5vdGlmaWVyKHNvY2tldERlc2NyaXB0b3IsIHR5cGUsIDApOworICAgIG5vdGlmaWVy
LT5zZXRFbmFibGVkKGZhbHNlKTsKKyAgICBub3RpZmllci0+bW92ZVRvVGhyZWFkKG1fd29ya1Ro
cmVhZCk7CisgICAgV29ya1F1ZXVlOjpXb3JrSXRlbVF0KiBpdGVtUXQgPSBuZXcgV29ya1F1ZXVl
OjpXb3JrSXRlbVF0KHRoaXMsIG5vdGlmaWVyLCBTSUdOQUwoYWN0aXZhdGVkKGludCkpLCBmdW5j
dGlvbik7CisgICAgaXRlbVF0LT5tb3ZlVG9UaHJlYWQobV93b3JrVGhyZWFkKTsKKyAgICBub3Rp
Zmllci0+c2V0RW5hYmxlZCh0cnVlKTsKKyAgICByZXR1cm4gbm90aWZpZXI7Cit9CisKK3ZvaWQg
V29ya1F1ZXVlOjpwbGF0Zm9ybUluaXRpYWxpemUoY29uc3QgY2hhciopCit7CisgICAgbV93b3Jr
VGhyZWFkID0gbmV3IFFUaHJlYWQoKTsKKyAgICBtX3dvcmtUaHJlYWQtPnN0YXJ0KCk7Cit9CisK
K3ZvaWQgV29ya1F1ZXVlOjpwbGF0Zm9ybUludmFsaWRhdGUoKQoreworICAgIG1fd29ya1RocmVh
ZC0+ZXhpdCgpOworICAgIG1fd29ya1RocmVhZC0+d2FpdCgpOworICAgIGRlbGV0ZSBtX3dvcmtU
aHJlYWQ7Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjpkaXNwYXRjaChjb25zdCBGdW5jdGlvbjx2b2lk
KCk+JiBmdW5jdGlvbikKK3sKKyAgICBXb3JrUXVldWU6OldvcmtJdGVtUXQqIGl0ZW1RdCA9IG5l
dyBXb3JrUXVldWU6OldvcmtJdGVtUXQodGhpcywgZnVuY3Rpb24pOworICAgIGl0ZW1RdC0+bW92
ZVRvVGhyZWFkKG1fd29ya1RocmVhZCk7CisgICAgUU1ldGFPYmplY3Q6Omludm9rZU1ldGhvZChp
dGVtUXQsICJleGVjdXRlQW5kRGVsZXRlIiwgUXQ6OlF1ZXVlZENvbm5lY3Rpb24pOworfQorCit2
b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2hBZnRlckRlbGF5KGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4m
IGZ1bmN0aW9uLCBkb3VibGUgZGVsYXlJblNlY29uZCkKK3sKKyAgICBXb3JrUXVldWU6OldvcmtJ
dGVtUXQqIGl0ZW1RdCA9IG5ldyBXb3JrUXVldWU6OldvcmtJdGVtUXQodGhpcywgZnVuY3Rpb24p
OworICAgIGl0ZW1RdC0+c3RhcnRUaW1lcihzdGF0aWNfY2FzdDxpbnQ+KGRlbGF5SW5TZWNvbmQg
KiAxMDAwKSk7CisgICAgaXRlbVF0LT5tb3ZlVG9UaHJlYWQobV93b3JrVGhyZWFkKTsKK30KKwor
dm9pZCBXb3JrUXVldWU6OmRpc3BhdGNoT25UZXJtaW5hdGlvbihQbGF0Zm9ybVByb2Nlc3NJZGVu
dGlmaWVyIHByb2Nlc3MsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQoreworICAg
IFdvcmtRdWV1ZTo6V29ya0l0ZW1RdCogaXRlbVF0ID0gbmV3IFdvcmtRdWV1ZTo6V29ya0l0ZW1R
dCh0aGlzLCBwcm9jZXNzLCBTSUdOQUwoZmluaXNoZWQoaW50LCBRUHJvY2Vzczo6RXhpdFN0YXR1
cykpLCBmdW5jdGlvbik7CisgICAgaXRlbVF0LT5tb3ZlVG9UaHJlYWQobV93b3JrVGhyZWFkKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNpbmNsdWRlICJXb3JrUXVldWVRdC5tb2MiCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi93aW4vV29ya1F1ZXVlV2luLmNwcCBiL1NvdXJjZS9X
VEYvd3RmL3dpbi9Xb3JrUXVldWVXaW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFhYmFkYmRhODk1ZTA3ZDll
ZTUzMzA3OTVjYzk0ZTYxN2ViOTFkN2IKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi93aW4vV29ya1F1ZXVlV2luLmNwcApAQCAtMCwwICsxLDI5MSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXb3JrUXVldWUuaCIKKworI2luY2x1ZGUgPFdl
YkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKK2lu
bGluZSBXb3JrUXVldWU6OldvcmtJdGVtV2luOjpXb3JrSXRlbVdpbihjb25zdCBGdW5jdGlvbjx2
b2lkKCk+JiBmdW5jdGlvbiwgV29ya1F1ZXVlKiBxdWV1ZSkKKyAgICA6IG1fZnVuY3Rpb24oZnVu
Y3Rpb24pCisgICAgLCBtX3F1ZXVlKHF1ZXVlKQoreworfQorCitQYXNzUmVmUHRyPFdvcmtRdWV1
ZTo6V29ya0l0ZW1XaW4+IFdvcmtRdWV1ZTo6V29ya0l0ZW1XaW46OmNyZWF0ZShjb25zdCBGdW5j
dGlvbjx2b2lkKCk+JiBmdW5jdGlvbiwgV29ya1F1ZXVlKiBxdWV1ZSkKK3sKKyAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFdvcmtJdGVtV2luKGZ1bmN0aW9uLCBxdWV1ZSkpOworfQorCitXb3JrUXVl
dWU6OldvcmtJdGVtV2luOjp+V29ya0l0ZW1XaW4oKQoreworfQorCitpbmxpbmUgV29ya1F1ZXVl
OjpIYW5kbGVXb3JrSXRlbTo6SGFuZGxlV29ya0l0ZW0oSEFORExFIGhhbmRsZSwgY29uc3QgRnVu
Y3Rpb248dm9pZCgpPiYgZnVuY3Rpb24sIFdvcmtRdWV1ZSogcXVldWUpCisgICAgOiBXb3JrSXRl
bVdpbihmdW5jdGlvbiwgcXVldWUpCisgICAgLCBtX2hhbmRsZShoYW5kbGUpCisgICAgLCBtX3dh
aXRIYW5kbGUoMCkKK3sKKyAgICBBU1NFUlRfQVJHKGhhbmRsZSwgaGFuZGxlKTsKK30KKworUGFz
c1JlZlB0cjxXb3JrUXVldWU6OkhhbmRsZVdvcmtJdGVtPiBXb3JrUXVldWU6OkhhbmRsZVdvcmtJ
dGVtOjpjcmVhdGVCeUFkb3B0aW5nSGFuZGxlKEhBTkRMRSBoYW5kbGUsIGNvbnN0IEZ1bmN0aW9u
PHZvaWQoKT4mIGZ1bmN0aW9uLCBXb3JrUXVldWUqIHF1ZXVlKQoreworICAgIHJldHVybiBhZG9w
dFJlZihuZXcgSGFuZGxlV29ya0l0ZW0oaGFuZGxlLCBmdW5jdGlvbiwgcXVldWUpKTsKK30KKwor
V29ya1F1ZXVlOjpIYW5kbGVXb3JrSXRlbTo6fkhhbmRsZVdvcmtJdGVtKCkKK3sKKyAgICA6OkNs
b3NlSGFuZGxlKG1faGFuZGxlKTsKK30KKwordm9pZCBXb3JrUXVldWU6OmhhbmRsZUNhbGxiYWNr
KHZvaWQqIGNvbnRleHQsIEJPT0xFQU4gdGltZXJPcldhaXRGaXJlZCkKK3sKKyAgICBBU1NFUlRf
QVJHKGNvbnRleHQsIGNvbnRleHQpOworICAgIEFTU0VSVF9BUkcodGltZXJPcldhaXRGaXJlZCwg
IXRpbWVyT3JXYWl0RmlyZWQpOworCisgICAgV29ya0l0ZW1XaW4qIGl0ZW0gPSBzdGF0aWNfY2Fz
dDxXb3JrSXRlbVdpbio+KGNvbnRleHQpOworICAgIFdvcmtRdWV1ZSogcXVldWUgPSBpdGVtLT5x
dWV1ZSgpOworCisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrKHF1ZXVlLT5tX3dvcmtJ
dGVtUXVldWVMb2NrKTsKKyAgICAgICAgcXVldWUtPm1fd29ya0l0ZW1RdWV1ZS5hcHBlbmQoaXRl
bSk7CisKKyAgICAgICAgLy8gSWYgbm8gb3RoZXIgdGhyZWFkIGlzIHBlcmZvcm1pbmcgd29yaywg
d2UgY2FuIGRvIGl0IG9uIHRoaXMgdGhyZWFkLgorICAgICAgICBpZiAoIXF1ZXVlLT50cnlSZWdp
c3RlckFzV29ya1RocmVhZCgpKSB7CisgICAgICAgICAgICAvLyBTb21lIG90aGVyIHRocmVhZCBp
cyBwZXJmb3JtaW5nIHdvcmsuIFNpbmNlIHdlIGhvbGQgdGhlIHF1ZXVlIGxvY2ssIHdlIGNhbiBi
ZSBzdXJlCisgICAgICAgICAgICAvLyB0aGF0IHRoZSB3b3JrIHRocmVhZCBpcyBub3QgZXhpdGlu
ZyBkdWUgdG8gYW4gZW1wdHkgcXVldWUgYW5kIHdpbGwgcHJvY2VzcyB0aGUgd29yaworICAgICAg
ICAgICAgLy8gaXRlbSB3ZSBqdXN0IGFkZGVkIHRvIGl0LiBJZiB3ZSB3ZXJlbid0IGhvbGRpbmcg
dGhlIGxvY2sgd2UnZCBoYXZlIHRvIHNpZ25hbAorICAgICAgICAgICAgLy8gbV9wZXJmb3JtV29y
a0V2ZW50IHRvIG1ha2Ugc3VyZSB0aGUgd29yayBpdGVtIGdvdCBwaWNrZWQgdXAuCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBxdWV1ZS0+cGVyZm9ybVdvcmtP
blJlZ2lzdGVyZWRXb3JrVGhyZWFkKCk7Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjpyZWdpc3Rlckhh
bmRsZShIQU5ETEUgaGFuZGxlLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKK3sK
KyAgICBSZWZQdHI8SGFuZGxlV29ya0l0ZW0+IGhhbmRsZUl0ZW0gPSBIYW5kbGVXb3JrSXRlbTo6
Y3JlYXRlQnlBZG9wdGluZ0hhbmRsZShoYW5kbGUsIGZ1bmN0aW9uLCB0aGlzKTsKKworICAgIHsK
KyAgICAgICAgTXV0ZXhMb2NrZXIgbG9jayhtX2hhbmRsZXNMb2NrKTsKKyAgICAgICAgQVNTRVJU
X0FSRyhoYW5kbGUsICFtX2hhbmRsZXMuY29udGFpbnMoaGFuZGxlKSk7CisgICAgICAgIG1faGFu
ZGxlcy5zZXQoaGFuZGxlLCBoYW5kbGVJdGVtKTsKKyAgICB9CisKKyAgICBIQU5ETEUgd2FpdEhh
bmRsZTsKKyAgICBpZiAoITo6UmVnaXN0ZXJXYWl0Rm9yU2luZ2xlT2JqZWN0KCZ3YWl0SGFuZGxl
LCBoYW5kbGUsIGhhbmRsZUNhbGxiYWNrLCBoYW5kbGVJdGVtLmdldCgpLCBJTkZJTklURSwgV1Rf
RVhFQ1VURURFRkFVTFQpKSB7CisgICAgICAgIERXT1JEIGVycm9yID0gOjpHZXRMYXN0RXJyb3Io
KTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIGhhbmRsZUl0ZW0t
PnNldFdhaXRIYW5kbGUod2FpdEhhbmRsZSk7Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjp1bnJlZ2lz
dGVyQW5kQ2xvc2VIYW5kbGUoSEFORExFIGhhbmRsZSkKK3sKKyAgICBSZWZQdHI8SGFuZGxlV29y
a0l0ZW0+IGl0ZW07CisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9oYW5kbGVz
TG9jayk7CisgICAgICAgIEFTU0VSVF9BUkcoaGFuZGxlLCBtX2hhbmRsZXMuY29udGFpbnMoaGFu
ZGxlKSk7CisgICAgICAgIGl0ZW0gPSBtX2hhbmRsZXMudGFrZShoYW5kbGUpOworICAgIH0KKwor
ICAgIHVucmVnaXN0ZXJXYWl0QW5kRGVzdHJveUl0ZW1Tb29uKGl0ZW0ucmVsZWFzZSgpKTsKK30K
KworRFdPUkQgV29ya1F1ZXVlOjp3b3JrVGhyZWFkQ2FsbGJhY2sodm9pZCogY29udGV4dCkKK3sK
KyAgICBBU1NFUlRfQVJHKGNvbnRleHQsIGNvbnRleHQpOworCisgICAgV29ya1F1ZXVlKiBxdWV1
ZSA9IHN0YXRpY19jYXN0PFdvcmtRdWV1ZSo+KGNvbnRleHQpOworCisgICAgaWYgKCFxdWV1ZS0+
dHJ5UmVnaXN0ZXJBc1dvcmtUaHJlYWQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBxdWV1
ZS0+cGVyZm9ybVdvcmtPblJlZ2lzdGVyZWRXb3JrVGhyZWFkKCk7CisgICAgcmV0dXJuIDA7Cit9
CisKK3ZvaWQgV29ya1F1ZXVlOjpwZXJmb3JtV29ya09uUmVnaXN0ZXJlZFdvcmtUaHJlYWQoKQor
eworICAgIEFTU0VSVChtX2lzV29ya1RocmVhZFJlZ2lzdGVyZWQpOworCisgICAgYm9vbCBpc1Zh
bGlkID0gdHJ1ZTsKKworICAgIG1fd29ya0l0ZW1RdWV1ZUxvY2subG9jaygpOworCisgICAgd2hp
bGUgKGlzVmFsaWQgJiYgIW1fd29ya0l0ZW1RdWV1ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgVmVj
dG9yPFJlZlB0cjxXb3JrSXRlbVdpbj4gPiB3b3JrSXRlbVF1ZXVlOworICAgICAgICBtX3dvcmtJ
dGVtUXVldWUuc3dhcCh3b3JrSXRlbVF1ZXVlKTsKKworICAgICAgICAvLyBBbGxvdyBtb3JlIHdv
cmsgdG8gYmUgc2NoZWR1bGVkIHdoaWxlIHdlJ3JlIG5vdCB1c2luZyB0aGUgcXVldWUgZGlyZWN0
bHkuCisgICAgICAgIG1fd29ya0l0ZW1RdWV1ZUxvY2sudW5sb2NrKCk7CisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgd29ya0l0ZW1RdWV1ZS5zaXplKCk7ICsraSkgeworICAgICAgICAg
ICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1faXNWYWxpZE11dGV4KTsKKyAgICAgICAgICAgIGlzVmFs
aWQgPSBtX2lzVmFsaWQ7CisgICAgICAgICAgICBpZiAoIWlzVmFsaWQpCisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB3b3JrSXRlbVF1ZXVlW2ldLT5mdW5jdGlvbigpKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgbV93b3JrSXRlbVF1ZXVlTG9jay5sb2NrKCk7CisgICAgfQorCisg
ICAgLy8gT25lIGludmFyaWFudCB3ZSBtYWludGFpbiBpcyB0aGF0IGFueSB3b3JrIHNjaGVkdWxl
ZCB3aGlsZSBhIHdvcmsgdGhyZWFkIGlzIHJlZ2lzdGVyZWQgd2lsbAorICAgIC8vIGJlIGhhbmRs
ZWQgYnkgdGhhdCB3b3JrIHRocmVhZC4gVW5yZWdpc3RlciBhcyB0aGUgd29yayB0aHJlYWQgd2hp
bGUgdGhlIHF1ZXVlIGxvY2sgaXMgc3RpbGwKKyAgICAvLyBoZWxkIHNvIHRoYXQgbm8gd29yayBj
YW4gYmUgc2NoZWR1bGVkIHdoaWxlIHdlJ3JlIHN0aWxsIHJlZ2lzdGVyZWQuCisgICAgdW5yZWdp
c3RlckFzV29ya1RocmVhZCgpOworCisgICAgbV93b3JrSXRlbVF1ZXVlTG9jay51bmxvY2soKTsK
K30KKwordm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW5pdGlhbGl6ZShjb25zdCBjaGFyKiBuYW1l
KQoreworICAgIG1faXNXb3JrVGhyZWFkUmVnaXN0ZXJlZCA9IDA7CisgICAgbV90aW1lclF1ZXVl
ID0gOjpDcmVhdGVUaW1lclF1ZXVlKCk7CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX3RpbWVy
UXVldWUsICI6OkNyZWF0ZVRpbWVyUXVldWUgZmFpbGVkIHdpdGggZXJyb3IgJWx1IiwgOjpHZXRM
YXN0RXJyb3IoKSk7Cit9CisKK2Jvb2wgV29ya1F1ZXVlOjp0cnlSZWdpc3RlckFzV29ya1RocmVh
ZCgpCit7CisgICAgTE9ORyByZXN1bHQgPSA6OkludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlKCZt
X2lzV29ya1RocmVhZFJlZ2lzdGVyZWQsIDEsIDApOworICAgIEFTU0VSVCghcmVzdWx0IHx8IHJl
c3VsdCA9PSAxKTsKKyAgICByZXR1cm4gIXJlc3VsdDsKK30KKwordm9pZCBXb3JrUXVldWU6OnVu
cmVnaXN0ZXJBc1dvcmtUaHJlYWQoKQoreworICAgIExPTkcgcmVzdWx0ID0gOjpJbnRlcmxvY2tl
ZENvbXBhcmVFeGNoYW5nZSgmbV9pc1dvcmtUaHJlYWRSZWdpc3RlcmVkLCAwLCAxKTsKKyAgICBB
U1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0ID09IDEpOworfQorCit2b2lkIFdvcmtRdWV1ZTo6
cGxhdGZvcm1JbnZhbGlkYXRlKCkKK3sKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgTXV0ZXhM
b2NrZXIgbG9jayhtX2hhbmRsZXNMb2NrKTsKKyAgICBBU1NFUlQobV9oYW5kbGVzLmlzRW1wdHko
KSk7CisjZW5kaWYKKworICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIGVuc3VyZSB0aGF0IGFueSB0
aW1lci1xdWV1ZSB0aW1lcnMgdGhhdCBmaXJlIGFmdGVyIHRoaXMgcG9pbnQgZG9uJ3QgdHJ5IHRv
CisgICAgLy8gYWNjZXNzIHRoaXMgV29ya1F1ZXVlIDxodHRwOi8vd2Via2l0Lm9yZy9iLzQ0Njkw
Pi4KKyAgICA6OkRlbGV0ZVRpbWVyUXVldWVFeChtX3RpbWVyUXVldWUsIDApOworfQorCit2b2lk
IFdvcmtRdWV1ZTo6ZGlzcGF0Y2goY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCit7
CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fd29ya0l0ZW1RdWV1ZUxvY2spOworCisgICAgbV93
b3JrSXRlbVF1ZXVlLmFwcGVuZChXb3JrSXRlbVdpbjo6Y3JlYXRlKGZ1bmN0aW9uLCB0aGlzKSk7
CisKKyAgICAvLyBTcGF3biBhIHdvcmsgdGhyZWFkIHRvIHBlcmZvcm0gdGhlIHdvcmsgd2UganVz
dCBhZGRlZC4gQXMgYW4gb3B0aW1pemF0aW9uLCB3ZSBhdm9pZAorICAgIC8vIHNwYXduaW5nIHRo
ZSB0aHJlYWQgaWYgYSB3b3JrIHRocmVhZCBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQuIFRoaXMgcHJl
dmVudHMgbXVsdGlwbGUgd29yaworICAgIC8vIHRocmVhZHMgZnJvbSBiZWluZyBzcGF3bmVkIGlu
IG1vc3QgY2FzZXMuIChOb3RlIHRoYXQgd2hlbiBhIHdvcmsgdGhyZWFkIGhhcyBiZWVuIHNwYXdu
ZWQgYnV0CisgICAgLy8gaGFzbid0IHJlZ2lzdGVyZWQgaXRzZWxmIHlldCwgbV9pc1dvcmtUaHJl
YWRSZWdpc3RlcmVkIHdpbGwgYmUgZmFsc2UgYW5kIHdlJ2xsIGVuZCB1cAorICAgIC8vIHNwYXdu
aW5nIGEgc2Vjb25kIHdvcmsgdGhyZWFkIGhlcmUuIEJ1dCB3b3JrIHRocmVhZCByZWdpc3RyYXRp
b24gcHJvY2VzcyB3aWxsIGVuc3VyZSB0aGF0CisgICAgLy8gb25seSBvbmUgdGhyZWFkIGFjdHVh
bGx5IGVuZHMgdXAgcGVyZm9ybWluZyB3b3JrLikKKyAgICBpZiAoIW1faXNXb3JrVGhyZWFkUmVn
aXN0ZXJlZCkKKyAgICAgICAgOjpRdWV1ZVVzZXJXb3JrSXRlbSh3b3JrVGhyZWFkQ2FsbGJhY2ss
IHRoaXMsIFdUX0VYRUNVVEVERUZBVUxUKTsKK30KKworc3RydWN0IFRpbWVyQ29udGV4dCA6IHB1
YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxUaW1lckNvbnRleHQ+IHsKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxUaW1lckNvbnRleHQ+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBUaW1l
ckNvbnRleHQpOyB9CisKKyAgICBXb3JrUXVldWUqIHF1ZXVlOworICAgIEZ1bmN0aW9uPHZvaWQo
KT4gZnVuY3Rpb247CisgICAgTXV0ZXggdGltZXJNdXRleDsKKyAgICBIQU5ETEUgdGltZXI7CisK
K3ByaXZhdGU6CisgICAgVGltZXJDb250ZXh0KCkgOiBxdWV1ZSgwKSwgdGltZXIoMCkgeyB9Cit9
OworCit2b2lkIFdvcmtRdWV1ZTo6dGltZXJDYWxsYmFjayh2b2lkKiBjb250ZXh0LCBCT09MRUFO
IHRpbWVyT3JXYWl0RmlyZWQpCit7CisgICAgQVNTRVJUX0FSRyhjb250ZXh0LCBjb250ZXh0KTsK
KyAgICBBU1NFUlRfVU5VU0VEKHRpbWVyT3JXYWl0RmlyZWQsIHRpbWVyT3JXYWl0RmlyZWQpOwor
CisgICAgLy8gQmFsYW5jZWQgYnkgbGVha1JlZiBpbiBzY2hlZHVsZVdvcmtBZnRlckRlbGF5Lgor
ICAgIFJlZlB0cjxUaW1lckNvbnRleHQ+IHRpbWVyQ29udGV4dCA9IGFkb3B0UmVmKHN0YXRpY19j
YXN0PFRpbWVyQ29udGV4dCo+KGNvbnRleHQpKTsKKworICAgIHRpbWVyQ29udGV4dC0+cXVldWUt
PmRpc3BhdGNoKHRpbWVyQ29udGV4dC0+ZnVuY3Rpb24pOworCisgICAgTXV0ZXhMb2NrZXIgbG9j
ayh0aW1lckNvbnRleHQtPnRpbWVyTXV0ZXgpOworICAgIEFTU0VSVCh0aW1lckNvbnRleHQtPnRp
bWVyKTsKKyAgICBBU1NFUlQodGltZXJDb250ZXh0LT5xdWV1ZS0+bV90aW1lclF1ZXVlKTsKKyAg
ICBpZiAoITo6RGVsZXRlVGltZXJRdWV1ZVRpbWVyKHRpbWVyQ29udGV4dC0+cXVldWUtPm1fdGlt
ZXJRdWV1ZSwgdGltZXJDb250ZXh0LT50aW1lciwgMCkpCisgICAgICAgIEFTU0VSVF9XSVRIX01F
U1NBR0UoZmFsc2UsICI6OkRlbGV0ZVRpbWVyUXVldWVUaW1lciBmYWlsZWQgd2l0aCBlcnJvciAl
bHUiLCA6OkdldExhc3RFcnJvcigpKTsKK30KKwordm9pZCBXb3JrUXVldWU6OmRpc3BhdGNoQWZ0
ZXJEZWxheShjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbiwgZG91YmxlIGRlbGF5KQor
eworICAgIEFTU0VSVChtX3RpbWVyUXVldWUpOworCisgICAgUmVmUHRyPFRpbWVyQ29udGV4dD4g
Y29udGV4dCA9IFRpbWVyQ29udGV4dDo6Y3JlYXRlKCk7CisgICAgY29udGV4dC0+cXVldWUgPSB0
aGlzOworICAgIGNvbnRleHQtPmZ1bmN0aW9uID0gZnVuY3Rpb247CisKKyAgICB7CisgICAgICAg
IC8vIFRoZSB0aW1lciBjYWxsYmFjayBjb3VsZCBmaXJlIGJlZm9yZSA6OkNyZWF0ZVRpbWVyUXVl
dWVUaW1lciBldmVuIHJldHVybnMsIHNvIHdlIHByb3RlY3QKKyAgICAgICAgLy8gY29udGV4dC0+
dGltZXIgd2l0aCBhIG11dGV4IHRvIGVuc3VyZSB0aGUgdGltZXIgY2FsbGJhY2sgZG9lc24ndCBh
Y2Nlc3MgaXQgYmVmb3JlIHRoZQorICAgICAgICAvLyB0aW1lciBoYW5kbGUgaGFzIGJlZW4gc3Rv
cmVkIGluIGl0LgorICAgICAgICBNdXRleExvY2tlciBsb2NrKGNvbnRleHQtPnRpbWVyTXV0ZXgp
OworCisgICAgICAgIC8vIFNpbmNlIG91ciB0aW1lciBjYWxsYmFjayBpcyBxdWljaywgd2UgY2Fu
IGV4ZWN1dGUgaW4gdGhlIHRpbWVyIHRocmVhZCBpdHNlbGYgYW5kIGF2b2lkCisgICAgICAgIC8v
IGFuIGV4dHJhIHRocmVhZCBzd2l0Y2ggb3ZlciB0byBhIHdvcmtlciB0aHJlYWQuCisgICAgICAg
IGlmICghOjpDcmVhdGVUaW1lclF1ZXVlVGltZXIoJmNvbnRleHQtPnRpbWVyLCBtX3RpbWVyUXVl
dWUsIHRpbWVyQ2FsbGJhY2ssIGNvbnRleHQuZ2V0KCksIGRlbGF5ICogMTAwMCwgMCwgV1RfRVhF
Q1VURUlOVElNRVJUSFJFQUQpKSB7CisgICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGZh
bHNlLCAiOjpDcmVhdGVUaW1lclF1ZXVlVGltZXIgZmFpbGVkIHdpdGggZXJyb3IgJWx1IiwgOjpH
ZXRMYXN0RXJyb3IoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisK
KyAgICAvLyBUaGUgdGltZXIgY2FsbGJhY2sgd2lsbCBoYW5kbGUgZGVzdHJveWluZyBjb250ZXh0
LgorICAgIGNvbnRleHQucmVsZWFzZSgpLmxlYWtSZWYoKTsKK30KKwordm9pZCBXb3JrUXVldWU6
OnVucmVnaXN0ZXJXYWl0QW5kRGVzdHJveUl0ZW1Tb29uKFBhc3NSZWZQdHI8SGFuZGxlV29ya0l0
ZW0+IGl0ZW0pCit7CisgICAgLy8gV2UncmUgZ29pbmcgdG8gbWFrZSBhIGJsb2NraW5nIGNhbGwg
dG8gOjpVbnJlZ2lzdGVyV2FpdEV4IGJlZm9yZSBjbG9zaW5nIHRoZSBoYW5kbGUuIChUaGUKKyAg
ICAvLyBibG9ja2luZyB2ZXJzaW9uIG9mIDo6VW5yZWdpc3RlcldhaXRFeCBpcyBtdWNoIHNpbXBs
ZXIgdGhhbiB0aGUgbm9uLWJsb2NraW5nIHZlcnNpb24uKSBJZiB3ZQorICAgIC8vIGRvIHRoaXMg
b24gdGhlIGN1cnJlbnQgdGhyZWFkLCB3ZSdsbCBkZWFkbG9jayBpZiB3ZSdyZSBjdXJyZW50bHkg
aW4gYSBjYWxsYmFjayBmdW5jdGlvbiBmb3IKKyAgICAvLyB0aGUgd2FpdCB3ZSdyZSB1bnJlZ2lz
dGVyaW5nLiBTbyBpbnN0ZWFkIHdlIGRvIGl0IGFzeW5jaHJvbm91c2x5IG9uIHNvbWUgb3RoZXIg
d29ya2VyIHRocmVhZC4KKworICAgIDo6UXVldWVVc2VyV29ya0l0ZW0odW5yZWdpc3RlcldhaXRB
bmREZXN0cm95SXRlbUNhbGxiYWNrLCBpdGVtLmxlYWtSZWYoKSwgV1RfRVhFQ1VURURFRkFVTFQp
OworfQorCitEV09SRCBXSU5BUEkgV29ya1F1ZXVlOjp1bnJlZ2lzdGVyV2FpdEFuZERlc3Ryb3lJ
dGVtQ2FsbGJhY2sodm9pZCogY29udGV4dCkKK3sKKyAgICBBU1NFUlRfQVJHKGNvbnRleHQsIGNv
bnRleHQpOworICAgIFJlZlB0cjxIYW5kbGVXb3JrSXRlbT4gaXRlbSA9IGFkb3B0UmVmKHN0YXRp
Y19jYXN0PEhhbmRsZVdvcmtJdGVtKj4oY29udGV4dCkpOworCisgICAgLy8gTm93IHRoYXQgd2Ug
a25vdyB3ZSdyZSBub3QgaW4gYSBjYWxsYmFjayBmdW5jdGlvbiBmb3IgdGhlIHdhaXQgd2UncmUg
dW5yZWdpc3RlcmluZywgd2UgY2FuCisgICAgLy8gbWFrZSBhIGJsb2NraW5nIGNhbGwgdG8gOjpV
bnJlZ2lzdGVyV2FpdEV4LgorICAgIGlmICghOjpVbnJlZ2lzdGVyV2FpdEV4KGl0ZW0tPndhaXRI
YW5kbGUoKSwgSU5WQUxJRF9IQU5ETEVfVkFMVUUpKSB7CisgICAgICAgIERXT1JEIGVycm9yID0g
OjpHZXRMYXN0RXJyb3IoKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQor
CisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3Rz
LnR4dCBiL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CmluZGV4IGU2ZDNiZWU5Y2M4NDg5
NDI5YjA4OGI5ZWRhZjhiN2Y3MzI1OTMyNjUuLmE2M2I5ZGJlYzkwNTQ0Mjk2MmNjNmQ3MWJkOTQy
Y2YzMjQ1YjVkMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0Cisr
KyBiL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CkBAIC0xMDUsNyArMTA1LDYgQEAgU0VU
KFdlYktpdDJfSU5DTFVERV9ESVJFQ1RPUklFUwogU0VUKFdlYktpdDJfU09VUkNFUwogICAgIFBs
YXRmb3JtL0xvZ2dpbmcuY3BwCiAgICAgUGxhdGZvcm0vTW9kdWxlLmNwcAotICAgIFBsYXRmb3Jt
L1dvcmtRdWV1ZS5jcHAKIAogICAgIFBsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnRDb2RlcnMuY3Bw
CiAgICAgUGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVudERlY29kZXIuY3BwCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYktpdDIvR05VbWFr
ZWZpbGUubGlzdC5hbQppbmRleCBmM2VkOTg0NjlkZjQxMGEwYmI2MWRlZTNlYzA5NjE5MzUwNjcz
NzdlLi4zOGUwYTdhN2U3NzI0MjNlNWVmNTRlZDU3MzEwNGI1MDExZGJjNjY5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJLaXQy
L0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTI1OCw3ICsyNTgsNiBAQCB3ZWJraXQyX3NvdXJjZXMg
Kz0gXAogCVNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvdW5peC9Db25uZWN0aW9uVW5p
eC5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2d0ay9Mb2dnaW5nR3RrLmNwcCBcCiAJ
U291cmNlL1dlYktpdDIvUGxhdGZvcm0vZ3RrL01vZHVsZUd0ay5jcHAgXAotCVNvdXJjZS9XZWJL
aXQyL1BsYXRmb3JtL2d0ay9Xb3JrUXVldWVHdGsuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybS9Mb2dnaW5nLmNwcCBcCiAJU291cmNlL1dlYktpdDIvUGxhdGZvcm0vTG9nZ2luZy5oIFwK
IAlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Nb2R1bGUuY3BwIFwKQEAgLTI2Niw4ICsyNjUsNiBA
QCB3ZWJraXQyX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1BsYXRmb3Jt
UHJvY2Vzc0lkZW50aWZpZXIuaCBcCiAJU291cmNlL1dlYktpdDIvUGxhdGZvcm0vU2hhcmVkTWVt
b3J5LmggXAogCVNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3VuaXgvU2hhcmVkTWVtb3J5VW5peC5j
cHAgXAotCVNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1dvcmtRdWV1ZS5jcHAgXAotCVNvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtL1dvcmtRdWV1ZS5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9j
ZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94eS5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1BsdWdpblBy
b2Nlc3MvUGx1Z2luQ29udHJvbGxlclByb3h5LmggXAogCVNvdXJjZS9XZWJLaXQyL1BsdWdpblBy
b2Nlc3MvUGx1Z2luQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcCBcCkBAIC0xMjAwLDExICsxMTk3LDgg
QEAgd2Via2l0Ml9wbHVnaW5fcHJvY2Vzc19zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybS9Db3JlSVBDL3VuaXgvQ29ubmVjdGlvblVuaXguY3BwIFwKIAlTb3VyY2UvV2ViS2l0
Mi9QbGF0Zm9ybS9Nb2R1bGUuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Nb2R1bGUu
aCBcCi0JU291cmNlL1dlYktpdDIvUGxhdGZvcm0vV29ya1F1ZXVlLmNwcCBcCi0JU291cmNlL1dl
YktpdDIvUGxhdGZvcm0vV29ya1F1ZXVlLmggXAogCVNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1No
YXJlZE1lbW9yeS5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9ndGsvTW9kdWxlR3RrLmNw
cCBcCi0JU291cmNlL1dlYktpdDIvUGxhdGZvcm0vZ3RrL1dvcmtRdWV1ZUd0ay5jcHAgXAogCVNv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtL3VuaXgvU2hhcmVkTWVtb3J5VW5peC5jcHAgXAogCVNvdXJj
ZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclByb3h5LmNwcCBcCiAJU291
cmNlL1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHkuaCBcCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uaCBiL1Nv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5oCmluZGV4IGRhOWEwOGEz
Y2NhOGZmNGM2OGIyMDE3MDEzNWU1OWY1MDQwODAzYjEuLjYxZTNhOWFlMjY1NGM3YzI1MzExZmFm
OTIxMjI2OWZiMGRhZTk2NzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0Nv
cmVJUEMvQ29ubmVjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMv
Q29ubmVjdGlvbi5oCkBAIC0zMiwxMSArMzIsMTEgQEAKICNpbmNsdWRlICJBcmd1bWVudEVuY29k
ZXIuaCIKICNpbmNsdWRlICJBcmd1bWVudHMuaCIKICNpbmNsdWRlICJNZXNzYWdlSUQuaCIKLSNp
bmNsdWRlICJXb3JrUXVldWUuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0
Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYvV29ya1F1ZXVlLmg+CiAKICNpZiBPUyhEQVJX
SU4pCiAjaW5jbHVkZSA8bWFjaC9tYWNoX3BvcnQuaD4KQEAgLTQ5LDcgKzQ5LDcgQEAgUVRfRU5E
X05BTUVTUEFDRQogI2VuZGlmCiAKICNpZiBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oR1RLKSB8
fCBQTEFURk9STShFRkwpCi0jaW5jbHVkZSAiUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oIgor
I2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmg+CiAjZW5kaWYKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpAQCAtMTI5LDcgKzEyOSw3IEBAIHB1YmxpYzoKICNpZiBPUyhEQVJX
SU4pCiAgICAgdm9pZCBzZXRTaG91bGRDbG9zZUNvbm5lY3Rpb25Pbk1hY2hFeGNlcHRpb25zKCk7
CiAjZWxpZiBQTEFURk9STShRVCkKLSAgICB2b2lkIHNldFNob3VsZENsb3NlQ29ubmVjdGlvbk9u
UHJvY2Vzc1Rlcm1pbmF0aW9uKFdlYktpdDo6UGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllcik7Cisg
ICAgdm9pZCBzZXRTaG91bGRDbG9zZUNvbm5lY3Rpb25PblByb2Nlc3NUZXJtaW5hdGlvbihQbGF0
Zm9ybVByb2Nlc3NJZGVudGlmaWVyKTsKICNlbmRpZgogCiAgICAgdm9pZCBzZXRPbmx5U2VuZE1l
c3NhZ2VzQXNEaXNwYXRjaFdoZW5XYWl0aW5nRm9yU3luY1JlcGx5V2hlblByb2Nlc3NpbmdTdWNo
QU1lc3NhZ2UoYm9vbCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3Jl
SVBDL3VuaXgvQ29ubmVjdGlvblVuaXguY3BwIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29y
ZUlQQy91bml4L0Nvbm5lY3Rpb25Vbml4LmNwcAppbmRleCA4ODVlNDk1Y2I3Njg4YzRlMzkxNzJh
NzJiYWU5MmRlODk0MDVjOTg3Li40OWE1MDg5MzNkYmM1ZmE5MzQzYzg4ZmJkZTk4Yzg0NDAzMGQ1
MDE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3VuaXgvQ29u
bmVjdGlvblVuaXguY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvdW5p
eC9Db25uZWN0aW9uVW5peC5jcHAKQEAgLTU1Nyw3ICs1NTcsNyBAQCBib29sIENvbm5lY3Rpb246
OnNlbmRPdXRnb2luZ01lc3NhZ2UoTWVzc2FnZUlEIG1lc3NhZ2VJRCwgUGFzc093blB0cjxBcmd1
bWVudEVuYwogfQogCiAjaWYgUExBVEZPUk0oUVQpCi12b2lkIENvbm5lY3Rpb246OnNldFNob3Vs
ZENsb3NlQ29ubmVjdGlvbk9uUHJvY2Vzc1Rlcm1pbmF0aW9uKFdlYktpdDo6UGxhdGZvcm1Qcm9j
ZXNzSWRlbnRpZmllciBwcm9jZXNzKQordm9pZCBDb25uZWN0aW9uOjpzZXRTaG91bGRDbG9zZUNv
bm5lY3Rpb25PblByb2Nlc3NUZXJtaW5hdGlvbihQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyIHBy
b2Nlc3MpCiB7CiAgICAgbV9jb25uZWN0aW9uUXVldWUuZGlzcGF0Y2hPblRlcm1pbmF0aW9uKHBy
b2Nlc3MsIFdURjo6YmluZCgmQ29ubmVjdGlvbjo6Y29ubmVjdGlvbkRpZENsb3NlLCB0aGlzKSk7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9QbGF0Zm9ybVByb2Nlc3NJ
ZGVudGlmaWVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9QbGF0Zm9ybVByb2Nlc3NJZGVu
dGlmaWVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkMTg5NzUxMDU5M2VmOTUw
N2E1MTM4ODE5MmNhYjQyYzRmYWJjNjYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vUGxhdGZvcm1Qcm9jZXNzSWRl
bnRpZmllci5oCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLQot
I2lmbmRlZiBQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyX2gKLSNkZWZpbmUgUGxhdGZvcm1Qcm9j
ZXNzSWRlbnRpZmllcl9oCi0KLSNpZiBQTEFURk9STShRVCkKLVFUX0JFR0lOX05BTUVTUEFDRQot
Y2xhc3MgUVByb2Nlc3M7Ci1RVF9FTkRfTkFNRVNQQUNFCi0jZWxpZiBQTEFURk9STShFRkwpCi0j
aW5jbHVkZSA8dW5pc3RkLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLSNpZiBQ
TEFURk9STShNQUMpCi10eXBlZGVmIHBpZF90IFBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXI7Ci0j
ZWxpZiBQTEFURk9STShXSU4pCi10eXBlZGVmIEhBTkRMRSBQbGF0Zm9ybVByb2Nlc3NJZGVudGlm
aWVyOwotI2VsaWYgUExBVEZPUk0oUVQpCi10eXBlZGVmIFFQcm9jZXNzKiBQbGF0Zm9ybVByb2Nl
c3NJZGVudGlmaWVyOwotI2VsaWYgUExBVEZPUk0oR1RLKQotI2lmZGVmIEdfT1NfV0lOMzIKLXR5
cGVkZWYgdm9pZCogR1BpZDsKLSNlbHNlCi10eXBlZGVmIGludCBHUGlkOwotI2VuZGlmCi10eXBl
ZGVmIEdQaWQgUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllcjsKLSNlbGlmIFBMQVRGT1JNKEVGTCkK
LXR5cGVkZWYgcGlkX3QgUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllcjsKLSNlbmRpZgotCi19IC8v
IG5hbWVzcGFjZSBXZWJLaXQgCi0KLSNlbmRpZiAvLyBQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVy
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1dvcmtRdWV1ZS5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrUXVldWUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA2YmNkZDIyNjQ0MjMwODI4MDU2MGI4OTQyNWFiMTYwNzdmY2ViNWRhLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtL1dvcmtRdWV1ZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldvcmtRdWV1ZS5oIgot
Ci1Xb3JrUXVldWU6OldvcmtRdWV1ZShjb25zdCBjaGFyKiBuYW1lKQotICAgIDogbV9pc1ZhbGlk
KHRydWUpCi17Ci0gICAgcGxhdGZvcm1Jbml0aWFsaXplKG5hbWUpOwotfQotCi1Xb3JrUXVldWU6
On5Xb3JrUXVldWUoKQotewotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICBNdXRleExvY2tlciBs
b2NrZXIobV9pc1ZhbGlkTXV0ZXgpOwotICAgIEFTU0VSVCghbV9pc1ZhbGlkKTsKLSNlbmRpZgot
fQotCi12b2lkIFdvcmtRdWV1ZTo6aW52YWxpZGF0ZSgpCi17Ci0gICAgewotICAgICAgICBNdXRl
eExvY2tlciBsb2NrZXIobV9pc1ZhbGlkTXV0ZXgpOwotICAgICAgICBtX2lzVmFsaWQgPSBmYWxz
ZTsKLSAgICB9Ci0KLSAgICBwbGF0Zm9ybUludmFsaWRhdGUoKTsKLX0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtL1dvcmtRdWV1ZS5oIGIvU291cmNlL1dlYktpdDIvUGxhdGZv
cm0vV29ya1F1ZXVlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmZjdkMzljY2Nm
NDFjZTQ1ODMyNzUzYmY4ZTc5NmI1MjViNDFkMmUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vV29ya1F1ZXVlLmgK
KysrIC9kZXYvbnVsbApAQCAtMSwyMTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBQb3J0aW9ucyBDb3B5cmlnaHQg
KGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpZm5kZWYgV29ya1F1ZXVlX2gKLSNkZWZpbmUgV29ya1F1ZXVlX2gKLQotI2lm
IE9TKERBUldJTikKLSNpZiBIQVZFKERJU1BBVENIX0gpCi0jaW5jbHVkZSA8ZGlzcGF0Y2gvZGlz
cGF0Y2guaD4KLSNlbmRpZgotI2VuZGlmCi0KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2lu
Y2x1ZGUgPHd0Zi9GdW5jdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNs
dWRlIDx3dGYvUGFzc093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5j
bHVkZSA8d3RmL1RocmVhZGluZy5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotI2lmIChQ
TEFURk9STShRVCkgJiYgIU9TKERBUldJTikpIHx8IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0o
RUZMKQotI2luY2x1ZGUgIlBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIuaCIKLSNlbmRpZgotCi0j
aWYgUExBVEZPUk0oUVQpICYmICFPUyhEQVJXSU4pCi0jaW5jbHVkZSA8UVNvY2tldE5vdGlmaWVy
PgotUVRfQkVHSU5fTkFNRVNQQUNFCi1jbGFzcyBRT2JqZWN0OwotY2xhc3MgUVRocmVhZDsKLVFU
X0VORF9OQU1FU1BBQ0UKLSNlbGlmIFBMQVRGT1JNKEdUSykKLSNpbmNsdWRlIDx3dGYvZ29iamVj
dC9HUmVmUHRyLmg+Ci10eXBlZGVmIGdib29sZWFuICgqR1NvdXJjZUZ1bmMpIChncG9pbnRlciBk
YXRhKTsKLSNlbGlmIFBMQVRGT1JNKEVGTCkKLSNpbmNsdWRlIDxFY29yZS5oPgotI2VuZGlmCi0K
LWNsYXNzIFdvcmtRdWV1ZSB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoV29ya1F1ZXVlKTsK
LQotcHVibGljOgotICAgIGV4cGxpY2l0IFdvcmtRdWV1ZShjb25zdCBjaGFyKiBuYW1lKTsKLSAg
ICB+V29ya1F1ZXVlKCk7Ci0KLSAgICAvLyBXaWxsIGRpc3BhdGNoIHRoZSBnaXZlbiBmdW5jdGlv
biB0byBydW4gYXMgc29vbiBhcyBwb3NzaWJsZS4KLSAgICB2b2lkIGRpc3BhdGNoKGNvbnN0IEZ1
bmN0aW9uPHZvaWQoKT4mKTsKLQotICAgIC8vIFdpbGwgZGlzcGF0Y2ggdGhlIGdpdmVuIGZ1bmN0
aW9uIGFmdGVyIHRoZSBnaXZlbiBkZWxheSAoaW4gc2Vjb25kcykuCi0gICAgdm9pZCBkaXNwYXRj
aEFmdGVyRGVsYXkoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYsIGRvdWJsZSBkZWxheSk7Ci0KLSAg
ICB2b2lkIGludmFsaWRhdGUoKTsKLQotI2lmIE9TKERBUldJTikKLSAgICBlbnVtIE1hY2hQb3J0
RXZlbnRUeXBlIHsKLSAgICAgICAgLy8gRmlyZWQgd2hlbiB0aGVyZSBpcyBkYXRhIG9uIHRoZSBn
aXZlbiByZWNlaXZlIHJpZ2h0LgotICAgICAgICBNYWNoUG9ydERhdGFBdmFpbGFibGUsCi0gICAg
ICAgIAotICAgICAgICAvLyBGaXJlZCB3aGVuIHRoZSByZWNlaXZlIHJpZ2h0IGZvciB0aGlzIHNl
bmQgcmlnaHQgaGFzIGJlZW4gZGVzdHJveWVkLgotICAgICAgICBNYWNoUG9ydERlYWROYW1lTm90
aWZpY2F0aW9uCi0gICAgfTsKLSAgICAKLSAgICAvLyBXaWxsIGV4ZWN1dGUgdGhlIGdpdmVuIGZ1
bmN0aW9uIHdoZW5ldmVyIHRoZSBnaXZlbiBtYWNoIHBvcnQgZXZlbnQgZmlyZXMuCi0gICAgLy8g
Tm90ZSB0aGF0IHRoaXMgd2lsbCBhZG9wdCB0aGUgbWFjaCBwb3J0IGFuZCBkZXN0cm95IGl0IHdo
ZW4gdGhlIHdvcmsgcXVldWUgaXMgaW52YWxpZGF0ZWQuCi0gICAgdm9pZCByZWdpc3Rlck1hY2hQ
b3J0RXZlbnRIYW5kbGVyKG1hY2hfcG9ydF90LCBNYWNoUG9ydEV2ZW50VHlwZSwgY29uc3QgRnVu
Y3Rpb248dm9pZCgpPiYpOwotICAgIHZvaWQgdW5yZWdpc3Rlck1hY2hQb3J0RXZlbnRIYW5kbGVy
KG1hY2hfcG9ydF90KTsKLSNlbGlmIFBMQVRGT1JNKFdJTikKLSAgICB2b2lkIHJlZ2lzdGVySGFu
ZGxlKEhBTkRMRSwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOwotICAgIHZvaWQgdW5yZWdpc3Rl
ckFuZENsb3NlSGFuZGxlKEhBTkRMRSk7Ci0jZWxpZiBQTEFURk9STShRVCkKLSAgICBRU29ja2V0
Tm90aWZpZXIqIHJlZ2lzdGVyU29ja2V0RXZlbnRIYW5kbGVyKGludCwgUVNvY2tldE5vdGlmaWVy
OjpUeXBlLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7Ci0gICAgdm9pZCBkaXNwYXRjaE9uVGVy
bWluYXRpb24oV2ViS2l0OjpQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLCBjb25zdCBGdW5jdGlv
bjx2b2lkKCk+Jik7Ci0jZWxpZiBQTEFURk9STShHVEspCi0gICAgdm9pZCByZWdpc3RlckV2ZW50
U291cmNlSGFuZGxlcihpbnQsIGludCwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOwotICAgIHZv
aWQgdW5yZWdpc3RlckV2ZW50U291cmNlSGFuZGxlcihpbnQpOwotICAgIHZvaWQgZGlzcGF0Y2hP
blRlcm1pbmF0aW9uKFdlYktpdDo6UGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllciwgY29uc3QgRnVu
Y3Rpb248dm9pZCgpPiYpOwotI2VsaWYgUExBVEZPUk0oRUZMKQotICAgIHZvaWQgcmVnaXN0ZXJT
b2NrZXRFdmVudEhhbmRsZXIoaW50LCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7Ci0gICAgdm9p
ZCB1bnJlZ2lzdGVyU29ja2V0RXZlbnRIYW5kbGVyKGludCk7Ci0jZW5kaWYKLQotcHJpdmF0ZToK
LSAgICAvLyBGSVhNRTogVXNlIGFuIGF0b21pYyBib29sZWFuIGhlcmUgaW5zdGVhZC4KLSAgICBN
dXRleCBtX2lzVmFsaWRNdXRleDsKLSAgICBib29sIG1faXNWYWxpZDsKLQotICAgIHZvaWQgcGxh
dGZvcm1Jbml0aWFsaXplKGNvbnN0IGNoYXIqIG5hbWUpOwotICAgIHZvaWQgcGxhdGZvcm1JbnZh
bGlkYXRlKCk7Ci0KLSNpZiBPUyhEQVJXSU4pCi0jaWYgSEFWRShESVNQQVRDSF9IKQotICAgIHN0
YXRpYyB2b2lkIGV4ZWN1dGVGdW5jdGlvbih2b2lkKik7Ci0gICAgTXV0ZXggbV9ldmVudFNvdXJj
ZXNNdXRleDsKLSAgICBjbGFzcyBFdmVudFNvdXJjZTsKLSAgICBIYXNoTWFwPG1hY2hfcG9ydF90
LCBFdmVudFNvdXJjZSo+IG1fZXZlbnRTb3VyY2VzOwotICAgIGRpc3BhdGNoX3F1ZXVlX3QgbV9k
aXNwYXRjaFF1ZXVlOwotI2VuZGlmCi0jZWxpZiBQTEFURk9STShXSU4pCi0gICAgY2xhc3MgV29y
a0l0ZW1XaW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8V29ya0l0ZW1XaW4+IHsKLSAg
ICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdvcmtJdGVtV2luPiBjcmVhdGUo
Y29uc3QgRnVuY3Rpb248dm9pZCgpPiYsIFdvcmtRdWV1ZSopOwotICAgICAgICB2aXJ0dWFsIH5X
b3JrSXRlbVdpbigpOwotCi0gICAgICAgIEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gbV9mdW5jdGlvbjsgfQotICAgICAgICBXb3JrUXVldWUqIHF1ZXVlKCkgY29uc3QgeyBy
ZXR1cm4gbV9xdWV1ZTsgfQotCi0gICAgcHJvdGVjdGVkOgotICAgICAgICBXb3JrSXRlbVdpbihj
b25zdCBGdW5jdGlvbjx2b2lkKCk+JiwgV29ya1F1ZXVlKik7Ci0KLSAgICBwcml2YXRlOgotICAg
ICAgICBGdW5jdGlvbjx2b2lkKCk+IG1fZnVuY3Rpb247Ci0gICAgICAgIFdvcmtRdWV1ZSogbV9x
dWV1ZTsKLSAgICB9OwotCi0gICAgY2xhc3MgSGFuZGxlV29ya0l0ZW0gOiBwdWJsaWMgV29ya0l0
ZW1XaW4gewotICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SGFuZGxlV29y
a0l0ZW0+IGNyZWF0ZUJ5QWRvcHRpbmdIYW5kbGUoSEFORExFLCBjb25zdCBGdW5jdGlvbjx2b2lk
KCk+JiwgV29ya1F1ZXVlKik7Ci0gICAgICAgIHZpcnR1YWwgfkhhbmRsZVdvcmtJdGVtKCk7Ci0K
LSAgICAgICAgdm9pZCBzZXRXYWl0SGFuZGxlKEhBTkRMRSB3YWl0SGFuZGxlKSB7IG1fd2FpdEhh
bmRsZSA9IHdhaXRIYW5kbGU7IH0KLSAgICAgICAgSEFORExFIHdhaXRIYW5kbGUoKSBjb25zdCB7
IHJldHVybiBtX3dhaXRIYW5kbGU7IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIEhhbmRsZVdv
cmtJdGVtKEhBTkRMRSwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYsIFdvcmtRdWV1ZSopOwotCi0g
ICAgICAgIEhBTkRMRSBtX2hhbmRsZTsKLSAgICAgICAgSEFORExFIG1fd2FpdEhhbmRsZTsKLSAg
ICB9OwotCi0gICAgc3RhdGljIHZvaWQgQ0FMTEJBQ0sgaGFuZGxlQ2FsbGJhY2sodm9pZCogY29u
dGV4dCwgQk9PTEVBTiB0aW1lck9yV2FpdEZpcmVkKTsKLSAgICBzdGF0aWMgdm9pZCBDQUxMQkFD
SyB0aW1lckNhbGxiYWNrKHZvaWQqIGNvbnRleHQsIEJPT0xFQU4gdGltZXJPcldhaXRGaXJlZCk7
Ci0gICAgc3RhdGljIERXT1JEIFdJTkFQSSB3b3JrVGhyZWFkQ2FsbGJhY2sodm9pZCogY29udGV4
dCk7Ci0KLSAgICBib29sIHRyeVJlZ2lzdGVyQXNXb3JrVGhyZWFkKCk7Ci0gICAgdm9pZCB1bnJl
Z2lzdGVyQXNXb3JrVGhyZWFkKCk7Ci0gICAgdm9pZCBwZXJmb3JtV29ya09uUmVnaXN0ZXJlZFdv
cmtUaHJlYWQoKTsKLQotICAgIHN0YXRpYyB2b2lkIHVucmVnaXN0ZXJXYWl0QW5kRGVzdHJveUl0
ZW1Tb29uKFBhc3NSZWZQdHI8SGFuZGxlV29ya0l0ZW0+KTsKLSAgICBzdGF0aWMgRFdPUkQgV0lO
QVBJIHVucmVnaXN0ZXJXYWl0QW5kRGVzdHJveUl0ZW1DYWxsYmFjayh2b2lkKiBjb250ZXh0KTsK
LQotICAgIHZvbGF0aWxlIExPTkcgbV9pc1dvcmtUaHJlYWRSZWdpc3RlcmVkOwotCi0gICAgTXV0
ZXggbV93b3JrSXRlbVF1ZXVlTG9jazsKLSAgICBWZWN0b3I8UmVmUHRyPFdvcmtJdGVtV2luPiA+
IG1fd29ya0l0ZW1RdWV1ZTsKLQotICAgIE11dGV4IG1faGFuZGxlc0xvY2s7Ci0gICAgSGFzaE1h
cDxIQU5ETEUsIFJlZlB0cjxIYW5kbGVXb3JrSXRlbT4gPiBtX2hhbmRsZXM7Ci0KLSAgICBIQU5E
TEUgbV90aW1lclF1ZXVlOwotI2VsaWYgUExBVEZPUk0oUVQpCi0gICAgY2xhc3MgV29ya0l0ZW1R
dDsKLSAgICBRVGhyZWFkKiBtX3dvcmtUaHJlYWQ7Ci0gICAgZnJpZW5kIGNsYXNzIFdvcmtJdGVt
UXQ7Ci0jZWxpZiBQTEFURk9STShHVEspCi0gICAgc3RhdGljIHZvaWQgc3RhcnRXb3JrUXVldWVU
aHJlYWQoV29ya1F1ZXVlKik7Ci0gICAgdm9pZCB3b3JrUXVldWVUaHJlYWRCb2R5KCk7Ci0gICAg
dm9pZCBkaXNwYXRjaE9uU291cmNlKEdTb3VyY2UqLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jiwg
R1NvdXJjZUZ1bmMpOwotCi0gICAgVGhyZWFkSWRlbnRpZmllciBtX3dvcmtRdWV1ZVRocmVhZDsK
LSAgICBHUmVmUHRyPEdNYWluQ29udGV4dD4gbV9ldmVudENvbnRleHQ7Ci0gICAgTXV0ZXggbV9l
dmVudExvb3BMb2NrOwotICAgIEdSZWZQdHI8R01haW5Mb29wPiBtX2V2ZW50TG9vcDsKLSAgICBN
dXRleCBtX2V2ZW50U291cmNlc0xvY2s7Ci0gICAgY2xhc3MgRXZlbnRTb3VyY2U7Ci0gICAgSGFz
aE1hcDxpbnQsIFZlY3RvcjxFdmVudFNvdXJjZSo+ID4gbV9ldmVudFNvdXJjZXM7Ci0gICAgdHlw
ZWRlZiBIYXNoTWFwPGludCwgVmVjdG9yPEV2ZW50U291cmNlKj4gPjo6aXRlcmF0b3IgRXZlbnRT
b3VyY2VJdGVyYXRvcjsgCi0jZWxpZiBQTEFURk9STShFRkwpCi0gICAgZmRfc2V0IG1fZmlsZURl
c2NyaXB0b3JTZXQ7Ci0gICAgaW50IG1fbWF4RmlsZURlc2NyaXB0b3I7Ci0gICAgaW50IG1fcmVh
ZEZyb21QaXBlRGVzY3JpcHRvcjsKLSAgICBpbnQgbV93cml0ZVRvUGlwZURlc2NyaXB0b3I7Ci0g
ICAgYm9vbCBtX3RocmVhZExvb3A7Ci0KLSAgICBWZWN0b3I8RnVuY3Rpb248dm9pZCgpPiA+IG1f
d29ya0l0ZW1RdWV1ZTsKLSAgICBNdXRleCBtX3dvcmtJdGVtUXVldWVMb2NrOwotCi0gICAgaW50
IG1fc29ja2V0RGVzY3JpcHRvcjsKLSAgICBGdW5jdGlvbjx2b2lkKCk+IG1fc29ja2V0RXZlbnRI
YW5kbGVyOwotCi0gICAgSGFzaE1hcDxpbnQsIE93blB0cjxFY29yZV9UaW1lcj4gPiBtX3RpbWVy
czsKLQotICAgIHZvaWQgc2VuZE1lc3NhZ2VUb1RocmVhZChjb25zdCBjaGFyKik7Ci0gICAgc3Rh
dGljIHZvaWQqIHdvcmtRdWV1ZVRocmVhZChXb3JrUXVldWUqKTsKLSAgICB2b2lkIHBlcmZvcm1X
b3JrKCk7Ci0gICAgdm9pZCBwZXJmb3JtRmlsZURlc2NyaXB0b3JXb3JrKCk7Ci0gICAgc3RhdGlj
IGJvb2wgdGltZXJGaXJlZCh2b2lkKik7Ci0jZW5kaWYKLX07Ci0KLSNlbmRpZiAvLyBXb3JrUXVl
dWVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vZWZsL1dvcmtRdWV1ZUVm
bC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9lZmwvV29ya1F1ZXVlRWZsLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDFmZmVkZjUzMzFhMmEyZWVmZDZiOGM3ZjRmOGZi
MGI3Y2Y0NDYxYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9lZmwvV29ya1F1ZXVlRWZsLmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDE3MyArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5n
IEVsZWN0cm9uaWNzCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0K
LSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
Ci0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXb3JrUXVl
dWUuaCIKLQotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLWNsYXNzIFRpbWVyV29ya0l0
ZW0gewotcHVibGljOgotICAgIFRpbWVyV29ya0l0ZW0oaW50IHRpbWVySUQsIGNvbnN0IEZ1bmN0
aW9uPHZvaWQoKT4mIGZ1bmN0aW9uLCBXb3JrUXVldWUqIHF1ZXVlKQotICAgICAgICA6IG1fZnVu
Y3Rpb24oZnVuY3Rpb24pCi0gICAgICAgICwgbV9xdWV1ZShxdWV1ZSkKLSAgICAgICAgLCBtX3Rp
bWVySUQodGltZXJJRCkKLSAgICB7Ci0gICAgfQotICAgIH5UaW1lcldvcmtJdGVtKCkgeyB9Ci0K
LSAgICBGdW5jdGlvbjx2b2lkKCk+IGZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9mdW5jdGlv
bjsgfQotICAgIFdvcmtRdWV1ZSogcXVldWUoKSBjb25zdCB7IHJldHVybiBtX3F1ZXVlOyB9Ci0K
LSAgICBpbnQgdGltZXJJRCgpIGNvbnN0IHsgcmV0dXJuIG1fdGltZXJJRDsgfQotCi1wcml2YXRl
OgotICAgIEZ1bmN0aW9uPHZvaWQoKT4gbV9mdW5jdGlvbjsKLSAgICBXb3JrUXVldWUqIG1fcXVl
dWU7Ci0gICAgaW50IG1fdGltZXJJRDsKLX07Ci0KLXN0YXRpYyBjb25zdCBpbnQgaW52YWxpZFNv
Y2tldERlc2NyaXB0b3IgPSAtMTsKLXN0YXRpYyBjb25zdCBpbnQgdGhyZWFkTWVzc2FnZVNpemUg
PSAxOwotc3RhdGljIGNvbnN0IGNoYXIgZmluaXNoVGhyZWFkTWVzc2FnZVtdID0gIkYiOwotc3Rh
dGljIGNvbnN0IGNoYXIgd2FrdXBUaHJlYWRNZXNzYWdlW10gPSAiVyI7Ci0KLXZvaWQgV29ya1F1
ZXVlOjpwbGF0Zm9ybUluaXRpYWxpemUoY29uc3QgY2hhciogbmFtZSkKLXsKLSAgICBpbnQgZmRz
WzJdOwotICAgIGlmIChwaXBlKGZkcykpCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
Ci0gICAgbV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yID0gZmRzWzBdOwotICAgIG1fd3JpdGVUb1Bp
cGVEZXNjcmlwdG9yID0gZmRzWzFdOwotICAgIEZEX1pFUk8oJm1fZmlsZURlc2NyaXB0b3JTZXQp
OwotICAgIEZEX1NFVChtX3JlYWRGcm9tUGlwZURlc2NyaXB0b3IsICZtX2ZpbGVEZXNjcmlwdG9y
U2V0KTsKLSAgICBtX21heEZpbGVEZXNjcmlwdG9yID0gbV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9y
OwotCi0gICAgbV9zb2NrZXREZXNjcmlwdG9yID0gaW52YWxpZFNvY2tldERlc2NyaXB0b3I7Ci0K
LSAgICBtX3RocmVhZExvb3AgPSB0cnVlOwotICAgIGNyZWF0ZVRocmVhZChyZWludGVycHJldF9j
YXN0PFdURjo6VGhyZWFkRnVuY3Rpb24+KCZXb3JrUXVldWU6OndvcmtRdWV1ZVRocmVhZCksIHRo
aXMsIG5hbWUpOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKLXsK
LSAgICBzZW5kTWVzc2FnZVRvVGhyZWFkKGZpbmlzaFRocmVhZE1lc3NhZ2UpOwotfQotCi12b2lk
IFdvcmtRdWV1ZTo6cGVyZm9ybVdvcmsoKQotewotICAgIG1fd29ya0l0ZW1RdWV1ZUxvY2subG9j
aygpOwotCi0gICAgd2hpbGUgKCFtX3dvcmtJdGVtUXVldWUuaXNFbXB0eSgpKSB7Ci0gICAgICAg
IFZlY3RvcjxGdW5jdGlvbjx2b2lkKCk+ID4gd29ya0l0ZW1RdWV1ZTsKLSAgICAgICAgbV93b3Jr
SXRlbVF1ZXVlLnN3YXAod29ya0l0ZW1RdWV1ZSk7Ci0KLSAgICAgICAgbV93b3JrSXRlbVF1ZXVl
TG9jay51bmxvY2soKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3b3JrSXRlbVF1
ZXVlLnNpemUoKTsgKytpKQotICAgICAgICAgICAgd29ya0l0ZW1RdWV1ZVtpXSgpOwotICAgICAg
ICBtX3dvcmtJdGVtUXVldWVMb2NrLmxvY2soKTsKLSAgICB9Ci0gICAgbV93b3JrSXRlbVF1ZXVl
TG9jay51bmxvY2soKTsKLX0KLQotdm9pZCBXb3JrUXVldWU6OnBlcmZvcm1GaWxlRGVzY3JpcHRv
cldvcmsoKQotewotICAgIGZkX3NldCByZWFkRmlsZURlc2NyaXB0b3JTZXQgPSBtX2ZpbGVEZXNj
cmlwdG9yU2V0OwotCi0gICAgaWYgKHNlbGVjdChtX21heEZpbGVEZXNjcmlwdG9yICsgMSwgJnJl
YWRGaWxlRGVzY3JpcHRvclNldCwgMCwgMCwgMCkgPj0gMCkgewotICAgICAgICBpZiAoRkRfSVNT
RVQobV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yLCAmcmVhZEZpbGVEZXNjcmlwdG9yU2V0KSkgewot
ICAgICAgICAgICAgY2hhciByZWFkQnVmW3RocmVhZE1lc3NhZ2VTaXplXTsKLSAgICAgICAgICAg
IGlmIChyZWFkKG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvciwgcmVhZEJ1ZiwgdGhyZWFkTWVzc2Fn
ZVNpemUpID09IC0xKQotICAgICAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHJlYWQg
ZnJvbSBXb3JrUXVldWVUaHJlYWQgcGlwZSIpOwotICAgICAgICAgICAgaWYgKCFzdHJuY21wKHJl
YWRCdWYsIGZpbmlzaFRocmVhZE1lc3NhZ2UsIHRocmVhZE1lc3NhZ2VTaXplKSkKLSAgICAgICAg
ICAgICAgICBtX3RocmVhZExvb3AgPSBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICht
X3NvY2tldERlc2NyaXB0b3IgIT0gaW52YWxpZFNvY2tldERlc2NyaXB0b3IgJiYgRkRfSVNTRVQo
bV9zb2NrZXREZXNjcmlwdG9yLCAmcmVhZEZpbGVEZXNjcmlwdG9yU2V0KSkKLSAgICAgICAgICAg
IG1fc29ja2V0RXZlbnRIYW5kbGVyKCk7Ci0gICAgfQotfQotCi12b2lkIFdvcmtRdWV1ZTo6c2Vu
ZE1lc3NhZ2VUb1RocmVhZChjb25zdCBjaGFyKiBtZXNzYWdlKQotewotICAgIGlmICh3cml0ZSht
X3dyaXRlVG9QaXBlRGVzY3JpcHRvciwgbWVzc2FnZSwgdGhyZWFkTWVzc2FnZVNpemUpID09IC0x
KQotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byB3YWtlIHVwIFdvcmtRdWV1ZSBUaHJlYWQi
KTsKLX0KLQotdm9pZCogV29ya1F1ZXVlOjp3b3JrUXVldWVUaHJlYWQoV29ya1F1ZXVlKiB3b3Jr
UXVldWUpCi17Ci0gICAgd2hpbGUgKHdvcmtRdWV1ZS0+bV90aHJlYWRMb29wKSB7Ci0gICAgICAg
IHdvcmtRdWV1ZS0+cGVyZm9ybVdvcmsoKTsKLSAgICAgICAgd29ya1F1ZXVlLT5wZXJmb3JtRmls
ZURlc2NyaXB0b3JXb3JrKCk7Ci0gICAgfQotCi0gICAgY2xvc2Uod29ya1F1ZXVlLT5tX3JlYWRG
cm9tUGlwZURlc2NyaXB0b3IpOwotICAgIGNsb3NlKHdvcmtRdWV1ZS0+bV93cml0ZVRvUGlwZURl
c2NyaXB0b3IpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpyZWdpc3Rl
clNvY2tldEV2ZW50SGFuZGxlcihpbnQgZmlsZURlc2NyaXB0b3IsIGNvbnN0IEZ1bmN0aW9uPHZv
aWQoKT4mIGZ1bmN0aW9uKQotewotICAgIGlmIChtX3NvY2tldERlc2NyaXB0b3IgIT0gaW52YWxp
ZFNvY2tldERlc2NyaXB0b3IpCi0gICAgICAgIExPR19FUlJPUigiJWQgaXMgYWxyZWFkeSByZWdp
c3RlcmQuIiwgZmlsZURlc2NyaXB0b3IpOwotCi0gICAgbV9zb2NrZXREZXNjcmlwdG9yID0gZmls
ZURlc2NyaXB0b3I7Ci0gICAgbV9zb2NrZXRFdmVudEhhbmRsZXIgPSBmdW5jdGlvbjsKLQotICAg
IGlmIChmaWxlRGVzY3JpcHRvciA+IG1fbWF4RmlsZURlc2NyaXB0b3IpCi0gICAgICAgIG1fbWF4
RmlsZURlc2NyaXB0b3IgPSBmaWxlRGVzY3JpcHRvcjsKLSAgICBGRF9TRVQoZmlsZURlc2NyaXB0
b3IsICZtX2ZpbGVEZXNjcmlwdG9yU2V0KTsKLX0KLQotdm9pZCBXb3JrUXVldWU6OnVucmVnaXN0
ZXJTb2NrZXRFdmVudEhhbmRsZXIoaW50IGZpbGVEZXNjcmlwdG9yKQotewotICAgIG1fc29ja2V0
RGVzY3JpcHRvciA9IGludmFsaWRTb2NrZXREZXNjcmlwdG9yOwotCi0gICAgaWYgKGZpbGVEZXNj
cmlwdG9yID09IG1fbWF4RmlsZURlc2NyaXB0b3IpCi0gICAgICAgIG1fbWF4RmlsZURlc2NyaXB0
b3IgPSBtX3JlYWRGcm9tUGlwZURlc2NyaXB0b3I7Ci0gICAgRkRfQ0xSKGZpbGVEZXNjcmlwdG9y
LCAmbV9maWxlRGVzY3JpcHRvclNldCk7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpkaXNwYXRjaChj
b25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKLXsKLSAgICBNdXRleExvY2tlciBsb2Nr
ZXIobV93b3JrSXRlbVF1ZXVlTG9jayk7Ci0gICAgbV93b3JrSXRlbVF1ZXVlLmFwcGVuZChmdW5j
dGlvbik7Ci0gICAgc2VuZE1lc3NhZ2VUb1RocmVhZCh3YWt1cFRocmVhZE1lc3NhZ2UpOwotfQot
Ci1ib29sIFdvcmtRdWV1ZTo6dGltZXJGaXJlZCh2b2lkKiBkYXRhKQotewotICAgIFRpbWVyV29y
a0l0ZW0qIGl0ZW0gPSBzdGF0aWNfY2FzdDxUaW1lcldvcmtJdGVtKj4oZGF0YSk7Ci0gICAgaWYg
KGl0ZW0gJiYgaXRlbS0+cXVldWUoKS0+bV9pc1ZhbGlkKSB7Ci0gICAgICAgIGl0ZW0tPnF1ZXVl
KCktPmRpc3BhdGNoKGl0ZW0tPmZ1bmN0aW9uKCkpOwotICAgICAgICBpdGVtLT5xdWV1ZSgpLT5t
X3RpbWVycy50YWtlKGl0ZW0tPnRpbWVySUQoKSk7Ci0gICAgICAgIGRlbGV0ZSBpdGVtOwotICAg
IH0KLQotICAgIHJldHVybiBFQ09SRV9DQUxMQkFDS19DQU5DRUw7Ci19Ci0KLXZvaWQgV29ya1F1
ZXVlOjpkaXNwYXRjaEFmdGVyRGVsYXkoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24s
IGRvdWJsZSBkZWxheSkKLXsKLSAgICBzdGF0aWMgaW50IHRpbWVySWQgPSAxOwotICAgIG1fdGlt
ZXJzLnNldCh0aW1lcklkLCBhZG9wdFB0cihlY29yZV90aW1lcl9hZGQoZGVsYXksIHJlaW50ZXJw
cmV0X2Nhc3Q8RWNvcmVfVGFza19DYj4odGltZXJGaXJlZCksIG5ldyBUaW1lcldvcmtJdGVtKHRp
bWVySWQsIGZ1bmN0aW9uLCB0aGlzKSkpKTsKLSAgICB0aW1lcklkKys7Ci19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9ndGsvV29ya1F1ZXVlR3RrLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtL2d0ay9Xb3JrUXVldWVHdGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAxZGZhYjgzY2NmYjI0YzlmMDBlZTQwZDJkYWExYzk1YjE2MzgyYTQzLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtL2d0ay9Xb3JrUXVldWVHdGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjMwICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBQb3J0aW9ucyBD
b3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXb3JrUXVl
dWUuaCIKLQotI2luY2x1ZGUgIldLQmFzZS5oIgotI2luY2x1ZGUgPGdpby9naW8uaD4KLSNpbmNs
dWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgotCi0vLyBXb3Jr
UXVldWU6OkV2ZW50U291cmNlCi1jbGFzcyBXb3JrUXVldWU6OkV2ZW50U291cmNlIHsKLXB1Ymxp
YzoKLSAgICBFdmVudFNvdXJjZShjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbiwgV29y
a1F1ZXVlKiB3b3JrUXVldWUsIEdDYW5jZWxsYWJsZSogY2FuY2VsbGFibGUpCi0gICAgICAgIDog
bV9mdW5jdGlvbihmdW5jdGlvbikKLSAgICAgICAgLCBtX3dvcmtRdWV1ZSh3b3JrUXVldWUpCi0g
ICAgICAgICwgbV9jYW5jZWxsYWJsZShjYW5jZWxsYWJsZSkKLSAgICB7Ci0gICAgfQotCi0gICAg
dm9pZCBjYW5jZWwoKQotICAgIHsKLSAgICAgICAgaWYgKCFtX2NhbmNlbGxhYmxlKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBnX2NhbmNlbGxhYmxlX2NhbmNlbChtX2NhbmNlbGxhYmxl
KTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBleGVjdXRlRXZlbnRTb3VyY2UoRXZlbnRTb3Vy
Y2UqIGV2ZW50U291cmNlKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGV2ZW50U291cmNlKTsKLSAg
ICAgICAgV29ya1F1ZXVlKiBxdWV1ZSA9IGV2ZW50U291cmNlLT5tX3dvcmtRdWV1ZTsKLSAgICAg
ICAgewotICAgICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHF1ZXVlLT5tX2lzVmFsaWRNdXRl
eCk7Ci0gICAgICAgICAgICBpZiAoIXF1ZXVlLT5tX2lzVmFsaWQpCi0gICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZXZlbnRTb3VyY2UtPm1fZnVuY3Rpb24oKTsK
LSAgICB9Ci0KLSAgICBzdGF0aWMgZ2Jvb2xlYW4gcGVyZm9ybVdvcmtPbmNlKEV2ZW50U291cmNl
KiBldmVudFNvdXJjZSkKLSAgICB7Ci0gICAgICAgIGV4ZWN1dGVFdmVudFNvdXJjZShldmVudFNv
dXJjZSk7Ci0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZ2Jvb2xl
YW4gcGVyZm9ybVdvcmsoR1NvY2tldCogc29ja2V0LCBHSU9Db25kaXRpb24gY29uZGl0aW9uLCBF
dmVudFNvdXJjZSogZXZlbnRTb3VyY2UpCi0gICAgewotICAgICAgICBpZiAoIShjb25kaXRpb24g
JiBHX0lPX0lOKSAmJiAhKGNvbmRpdGlvbiAmIEdfSU9fSFVQKSAmJiAhKGNvbmRpdGlvbiAmIEdf
SU9fRVJSKSkgewotICAgICAgICAgICAgLy8gRXZlbnRTb3VyY2UgaGFzIGJlZW4gY2FuY2VsbGVk
LCByZXR1cm4gRkFMU0UgdG8gZGVzdHJveSB0aGUgc291cmNlLgotICAgICAgICAgICAgcmV0dXJu
IEZBTFNFOwotICAgICAgICB9Ci0KLSAgICAgICAgZXhlY3V0ZUV2ZW50U291cmNlKGV2ZW50U291
cmNlKTsKLSAgICAgICAgcmV0dXJuIFRSVUU7Ci0gICAgfQotCi0gICAgc3RhdGljIGdib29sZWFu
IHBlcmZvcm1Xb3JrT25UZXJtaW5hdGlvbihHUGlkLCBnaW50LCBFdmVudFNvdXJjZSogZXZlbnRT
b3VyY2UpCi0gICAgewotICAgICAgICBleGVjdXRlRXZlbnRTb3VyY2UoZXZlbnRTb3VyY2UpOwot
ICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgZGVsZXRlRXZl
bnRTb3VyY2UoRXZlbnRTb3VyY2UqIGV2ZW50U291cmNlKSAKLSAgICB7Ci0gICAgICAgIEFTU0VS
VChldmVudFNvdXJjZSk7Ci0gICAgICAgIGRlbGV0ZSBldmVudFNvdXJjZTsKLSAgICB9Ci0gICAK
LXB1YmxpYzoKLSAgICBGdW5jdGlvbjx2b2lkKCk+IG1fZnVuY3Rpb247Ci0gICAgV29ya1F1ZXVl
KiBtX3dvcmtRdWV1ZTsKLSAgICBHQ2FuY2VsbGFibGUqIG1fY2FuY2VsbGFibGU7Ci19OwotCi0v
LyBXb3JrUXVldWUKLXN0YXRpYyBjb25zdCBzaXplX3Qga1Zpc3VhbFN0dWRpb1RocmVhZE5hbWVM
aW1pdCA9IDMxOwotCi12b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXplKGNvbnN0IGNo
YXIqIG5hbWUpCi17Ci0gICAgbV9ldmVudENvbnRleHQgPSBhZG9wdEdSZWYoZ19tYWluX2NvbnRl
eHRfbmV3KCkpOwotICAgIEFTU0VSVChtX2V2ZW50Q29udGV4dCk7Ci0gICAgbV9ldmVudExvb3Ag
PSBhZG9wdEdSZWYoZ19tYWluX2xvb3BfbmV3KG1fZXZlbnRDb250ZXh0LmdldCgpLCBGQUxTRSkp
OwotICAgIEFTU0VSVChtX2V2ZW50TG9vcCk7Ci0KLSAgICAvLyBUaGlzIG5hbWUgY2FuIGJlIGNv
bS5hcHBsZS5XZWJLaXQuUHJvY2Vzc0xhdW5jaGVyIG9yIGNvbS5hcHBsZS5Db3JlSVBDLlJlY2Vp
dmVRdWV1ZS4KLSAgICAvLyBXZSBhcmUgdXNpbmcgdGhvc2UgbmFtZXMgZm9yIHRoZSB0aHJlYWQg
bmFtZSwgYnV0IGJvdGggYXJlIGxvbmdlciB0aGFuIDMxIGNoYXJhY3RlcnMsCi0gICAgLy8gd2hp
Y2ggaXMgdGhlIGxpbWl0IG9mIFZpc3VhbCBTdHVkaW8gZm9yIHRocmVhZCBuYW1lcy4KLSAgICAv
LyBXaGVuIGxvZyBpcyBlbmFibGVkIGNyZWF0ZVRocmVhZCgpIHdpbGwgYXNzZXJ0IGluc3RlYWQg
b2YgdHJ1bmNhdGUgdGhlIG5hbWUsIHNvIHdlIG5lZWQKLSAgICAvLyB0byBtYWtlIHN1cmUgd2Ug
ZG9uJ3QgdXNlIGEgbmFtZSBsb25nZXIgdGhhbiAzMSBjaGFyYWN0ZXJzLgotICAgIGNvbnN0IGNo
YXIqIHRocmVhZE5hbWUgPSBnX3N0cnJzdHIobmFtZSwgIi4iKTsKLSAgICBpZiAodGhyZWFkTmFt
ZSkKLSAgICAgICAgdGhyZWFkTmFtZSsrOwotICAgIGVsc2UKLSAgICAgICAgdGhyZWFkTmFtZSA9
IG5hbWU7Ci0gICAgaWYgKHN0cmxlbih0aHJlYWROYW1lKSA+IGtWaXN1YWxTdHVkaW9UaHJlYWRO
YW1lTGltaXQpCi0gICAgICAgIHRocmVhZE5hbWUgKz0gc3RybGVuKHRocmVhZE5hbWUpIC0ga1Zp
c3VhbFN0dWRpb1RocmVhZE5hbWVMaW1pdDsKLQotICAgIG1fd29ya1F1ZXVlVGhyZWFkID0gY3Jl
YXRlVGhyZWFkKHJlaW50ZXJwcmV0X2Nhc3Q8V1RGOjpUaHJlYWRGdW5jdGlvbj4oJldvcmtRdWV1
ZTo6c3RhcnRXb3JrUXVldWVUaHJlYWQpLCB0aGlzLCB0aHJlYWROYW1lKTsKLX0KLQotdm9pZCBX
b3JrUXVldWU6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCi17Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2Vy
KG1fZXZlbnRMb29wTG9jayk7Ci0KLSAgICBpZiAobV9ldmVudExvb3ApIHsKLSAgICAgICAgaWYg
KGdfbWFpbl9sb29wX2lzX3J1bm5pbmcobV9ldmVudExvb3AuZ2V0KCkpKQotICAgICAgICAgICAg
Z19tYWluX2xvb3BfcXVpdChtX2V2ZW50TG9vcC5nZXQoKSk7Ci0gICAgICAgIG1fZXZlbnRMb29w
LmNsZWFyKCk7Ci0gICAgfQotCi0gICAgbV9ldmVudENvbnRleHQuY2xlYXIoKTsKLX0KLQotdm9p
ZCBXb3JrUXVldWU6OnN0YXJ0V29ya1F1ZXVlVGhyZWFkKFdvcmtRdWV1ZSogd29ya1F1ZXVlKQot
ewotICAgIHdvcmtRdWV1ZS0+d29ya1F1ZXVlVGhyZWFkQm9keSgpOwotfQotCi12b2lkIFdvcmtR
dWV1ZTo6d29ya1F1ZXVlVGhyZWFkQm9keSgpCi17Ci0gICAgZ19tYWluX2xvb3BfcnVuKG1fZXZl
bnRMb29wLmdldCgpKTsKLX0KLQotdm9pZCBXb3JrUXVldWU6OnJlZ2lzdGVyRXZlbnRTb3VyY2VI
YW5kbGVyKGludCBmaWxlRGVzY3JpcHRvciwgaW50IGNvbmRpdGlvbiwgY29uc3QgRnVuY3Rpb248
dm9pZCgpPiYgZnVuY3Rpb24pCi17Ci0gICAgR1JlZlB0cjxHU29ja2V0PiBzb2NrZXQgPSBhZG9w
dEdSZWYoZ19zb2NrZXRfbmV3X2Zyb21fZmQoZmlsZURlc2NyaXB0b3IsIDApKTsKLSAgICBBU1NF
UlQoc29ja2V0KTsKLSAgICBHUmVmUHRyPEdDYW5jZWxsYWJsZT4gY2FuY2VsbGFibGUgPSBhZG9w
dEdSZWYoZ19jYW5jZWxsYWJsZV9uZXcoKSk7Ci0gICAgR1JlZlB0cjxHU291cmNlPiBkaXNwYXRj
aFNvdXJjZSA9IGFkb3B0R1JlZihnX3NvY2tldF9jcmVhdGVfc291cmNlKHNvY2tldC5nZXQoKSwg
c3RhdGljX2Nhc3Q8R0lPQ29uZGl0aW9uPihjb25kaXRpb24pLCBjYW5jZWxsYWJsZS5nZXQoKSkp
OwotICAgIEFTU0VSVChkaXNwYXRjaFNvdXJjZSk7Ci0gICAgRXZlbnRTb3VyY2UqIGV2ZW50U291
cmNlID0gbmV3IEV2ZW50U291cmNlKGZ1bmN0aW9uLCB0aGlzLCBjYW5jZWxsYWJsZS5nZXQoKSk7
Ci0gICAgQVNTRVJUKGV2ZW50U291cmNlKTsKLQotICAgIGdfc291cmNlX3NldF9jYWxsYmFjayhk
aXNwYXRjaFNvdXJjZS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oJldvcmtR
dWV1ZTo6RXZlbnRTb3VyY2U6OnBlcmZvcm1Xb3JrKSwKLSAgICAgICAgZXZlbnRTb3VyY2UsIHJl
aW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KCZXb3JrUXVldWU6OkV2ZW50U291cmNlOjpk
ZWxldGVFdmVudFNvdXJjZSkpOwotCi0gICAgLy8gU2V0IHVwIHRoZSBldmVudCBzb3VyY2VzIHVu
ZGVyIHRoZSBtdXRleCBzaW5jZSB0aGlzIGlzIHNoYXJlZCBhY3Jvc3MgbXVsdGlwbGUgdGhyZWFk
cy4KLSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2V2ZW50U291cmNlc0xvY2sp
OwotICAgICAgICBWZWN0b3I8RXZlbnRTb3VyY2UqPiBzb3VyY2VzOwotICAgICAgICBFdmVudFNv
dXJjZUl0ZXJhdG9yIGl0ID0gbV9ldmVudFNvdXJjZXMuZmluZChmaWxlRGVzY3JpcHRvcik7Ci0g
ICAgICAgIGlmIChpdCAhPSBtX2V2ZW50U291cmNlcy5lbmQoKSkgCi0gICAgICAgICAgICBzb3Vy
Y2VzID0gaXQtPnNlY29uZDsKLQotICAgICAgICBzb3VyY2VzLmFwcGVuZChldmVudFNvdXJjZSk7
Ci0gICAgICAgIG1fZXZlbnRTb3VyY2VzLnNldChmaWxlRGVzY3JpcHRvciwgc291cmNlcyk7Ci0g
ICAgfQotCi0gICAgZ19zb3VyY2VfYXR0YWNoKGRpc3BhdGNoU291cmNlLmdldCgpLCBtX2V2ZW50
Q29udGV4dC5nZXQoKSk7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjp1bnJlZ2lzdGVyRXZlbnRTb3Vy
Y2VIYW5kbGVyKGludCBmaWxlRGVzY3JpcHRvcikKLXsKLSAgICBBU1NFUlQoZmlsZURlc2NyaXB0
b3IpOwotICAgIAotICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2V2ZW50U291cmNlc0xvY2spOwot
ICAgIAotICAgIEV2ZW50U291cmNlSXRlcmF0b3IgaXQgPSBtX2V2ZW50U291cmNlcy5maW5kKGZp
bGVEZXNjcmlwdG9yKTsKLSAgICBBU1NFUlQoaXQgIT0gbV9ldmVudFNvdXJjZXMuZW5kKCkpOwot
ICAgIEFTU0VSVChtX2V2ZW50U291cmNlcy5jb250YWlucyhmaWxlRGVzY3JpcHRvcikpOwotCi0g
ICAgaWYgKGl0ICE9IG1fZXZlbnRTb3VyY2VzLmVuZCgpKSB7Ci0gICAgICAgIFZlY3RvcjxFdmVu
dFNvdXJjZSo+IHNvdXJjZXMgPSBpdC0+c2Vjb25kOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgc291cmNlcy5zaXplKCk7IGkrKykKLSAgICAgICAgICAgIHNvdXJjZXNbaV0tPmNh
bmNlbCgpOwotCi0gICAgICAgIG1fZXZlbnRTb3VyY2VzLnJlbW92ZShpdCk7Ci0gICAgfQotfQot
Ci12b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2hPblNvdXJjZShHU291cmNlKiBkaXNwYXRjaFNvdXJj
ZSwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24sIEdTb3VyY2VGdW5jIHNvdXJjZUNh
bGxiYWNrKQotewotICAgIEV2ZW50U291cmNlKiBldmVudFNvdXJjZSA9IG5ldyBFdmVudFNvdXJj
ZShmdW5jdGlvbiwgdGhpcywgMCk7Ci0KLSAgICBnX3NvdXJjZV9zZXRfY2FsbGJhY2soZGlzcGF0
Y2hTb3VyY2UsIHNvdXJjZUNhbGxiYWNrLCBldmVudFNvdXJjZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxHRGVzdHJveU5vdGlmeT4oJldvcmtRdWV1ZTo6RXZl
bnRTb3VyY2U6OmRlbGV0ZUV2ZW50U291cmNlKSk7Ci0KLSAgICBnX3NvdXJjZV9hdHRhY2goZGlz
cGF0Y2hTb3VyY2UsIG1fZXZlbnRDb250ZXh0LmdldCgpKTsKLX0KLQotdm9pZCBXb3JrUXVldWU6
OmRpc3BhdGNoKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQotewotICAgIEdSZWZQ
dHI8R1NvdXJjZT4gZGlzcGF0Y2hTb3VyY2UgPSBhZG9wdEdSZWYoZ19pZGxlX3NvdXJjZV9uZXco
KSk7Ci0gICAgQVNTRVJUKGRpc3BhdGNoU291cmNlKTsKLSAgICBnX3NvdXJjZV9zZXRfcHJpb3Jp
dHkoZGlzcGF0Y2hTb3VyY2UuZ2V0KCksIEdfUFJJT1JJVFlfREVGQVVMVCk7Ci0KLSAgICBkaXNw
YXRjaE9uU291cmNlKGRpc3BhdGNoU291cmNlLmdldCgpLCBmdW5jdGlvbiwgcmVpbnRlcnByZXRf
Y2FzdDxHU291cmNlRnVuYz4oJldvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OnBlcmZvcm1Xb3JrT25j
ZSkpOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2hBZnRlckRlbGF5KGNvbnN0IEZ1bmN0
aW9uPHZvaWQoKT4mIGZ1bmN0aW9uLCBkb3VibGUgZGVsYXkpCi17Ci0gICAgR1JlZlB0cjxHU291
cmNlPiBkaXNwYXRjaFNvdXJjZSA9IGFkb3B0R1JlZihnX3RpbWVvdXRfc291cmNlX25ldyhzdGF0
aWNfY2FzdDxndWludD4oZGVsYXkgKiAxMDAwKSkpOwotICAgIEFTU0VSVChkaXNwYXRjaFNvdXJj
ZSk7Ci0KLSAgICBkaXNwYXRjaE9uU291cmNlKGRpc3BhdGNoU291cmNlLmdldCgpLCBmdW5jdGlv
biwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oJldvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6
OnBlcmZvcm1Xb3JrT25jZSkpOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2hPblRlcm1p
bmF0aW9uKFdlYktpdDo6UGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllciBwcm9jZXNzLCBjb25zdCBG
dW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKLXsKLSAgICBHUmVmUHRyPEdTb3VyY2U+IGRpc3Bh
dGNoU291cmNlID0gYWRvcHRHUmVmKGdfY2hpbGRfd2F0Y2hfc291cmNlX25ldyhwcm9jZXNzKSk7
Ci0gICAgQVNTRVJUKGRpc3BhdGNoU291cmNlKTsKLQotICAgIGRpc3BhdGNoT25Tb3VyY2UoZGlz
cGF0Y2hTb3VyY2UuZ2V0KCksIGZ1bmN0aW9uLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5j
PigmV29ya1F1ZXVlOjpFdmVudFNvdXJjZTo6cGVyZm9ybVdvcmtPblRlcm1pbmF0aW9uKSk7Ci19
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9tYWMvV29ya1F1ZXVlTWFjLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL21hYy9Xb3JrUXVldWVNYWMuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTQ3M2VlNWNjODRlNTg0MjliMDQzOWNjZDkyMWFjMmM0
OTJmZmFhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtL21hYy9Xb3JrUXVldWVNYWMuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsMTc4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiV29ya1F1ZXVlLmgiCi0KLSNpbmNsdWRlIDxtYWNoL21hY2hfaW5pdC5oPgotI2luY2x1
ZGUgPG1hY2gvbWFjaF9wb3J0Lmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLQotdm9p
ZCBXb3JrUXVldWU6OmV4ZWN1dGVGdW5jdGlvbih2b2lkKiBjb250ZXh0KQotewotICAgIFdvcmtR
dWV1ZSogcXVldWUgPSBzdGF0aWNfY2FzdDxXb3JrUXVldWUqPihkaXNwYXRjaF9nZXRfY29udGV4
dChkaXNwYXRjaF9nZXRfY3VycmVudF9xdWV1ZSgpKSk7Ci0gICAgT3duUHRyPEZ1bmN0aW9uPHZv
aWQoKT4gPiBmdW5jdGlvbiA9IGFkb3B0UHRyKHN0YXRpY19jYXN0PEZ1bmN0aW9uPHZvaWQoKT4q
Pihjb250ZXh0KSk7Ci0gICAgCi0gICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIocXVl
dWUtPm1faXNWYWxpZE11dGV4KTsKLSAgICAgICAgaWYgKCFxdWV1ZS0+bV9pc1ZhbGlkKQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgICgqZnVuY3Rpb24pKCk7Ci19Ci0KLXZvaWQg
V29ya1F1ZXVlOjpkaXNwYXRjaChjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKLXsK
LSAgICBkaXNwYXRjaF9hc3luY19mKG1fZGlzcGF0Y2hRdWV1ZSwgbmV3IEZ1bmN0aW9uPHZvaWQo
KT4oZnVuY3Rpb24pLCBleGVjdXRlRnVuY3Rpb24pOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6ZGlz
cGF0Y2hBZnRlckRlbGF5KGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uLCBkb3VibGUg
ZGVsYXkpCi17Ci0gICAgZGlzcGF0Y2hfdGltZV90IGRlbGF5VGltZSA9IGRpc3BhdGNoX3RpbWUo
RElTUEFUQ0hfVElNRV9OT1csIGRlbGF5ICogTlNFQ19QRVJfU0VDKTsKLQotICAgIGRpc3BhdGNo
X2FmdGVyX2YoZGVsYXlUaW1lLCBtX2Rpc3BhdGNoUXVldWUsIG5ldyBGdW5jdGlvbjx2b2lkKCk+
KGZ1bmN0aW9uKSwgZXhlY3V0ZUZ1bmN0aW9uKTsKLX0KLQotY2xhc3MgV29ya1F1ZXVlOjpFdmVu
dFNvdXJjZSB7Ci1wdWJsaWM6Ci0gICAgRXZlbnRTb3VyY2UoTWFjaFBvcnRFdmVudFR5cGUgZXZl
bnRUeXBlLCBkaXNwYXRjaF9zb3VyY2VfdCBkaXNwYXRjaFNvdXJjZSwgY29uc3QgRnVuY3Rpb248
dm9pZCgpPiYgZnVuY3Rpb24pCi0gICAgICAgIDogbV9ldmVudFR5cGUoZXZlbnRUeXBlKQotICAg
ICAgICAsIG1fZGlzcGF0Y2hTb3VyY2UoZGlzcGF0Y2hTb3VyY2UpCi0gICAgICAgICwgbV9mdW5j
dGlvbihmdW5jdGlvbikKLSAgICB7Ci0gICAgfQotICAgIAotICAgIGRpc3BhdGNoX3NvdXJjZV90
IGRpc3BhdGNoU291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9kaXNwYXRjaFNvdXJjZTsgfQotICAg
IAotICAgIHN0YXRpYyB2b2lkIGV2ZW50SGFuZGxlcih2b2lkKiBzb3VyY2UpIAotICAgIHsKLSAg
ICAgICAgRXZlbnRTb3VyY2UqIGV2ZW50U291cmNlID0gc3RhdGljX2Nhc3Q8RXZlbnRTb3VyY2Uq
Pihzb3VyY2UpOwotICAgICAgICAKLSAgICAgICAgZXZlbnRTb3VyY2UtPm1fZnVuY3Rpb24oKTsK
LSAgICB9Ci0gICAgCi0gICAgc3RhdGljIHZvaWQgY2FuY2VsSGFuZGxlcih2b2lkKiBzb3VyY2Up
Ci0gICAgewotICAgICAgICBFdmVudFNvdXJjZSogZXZlbnRTb3VyY2UgPSBzdGF0aWNfY2FzdDxF
dmVudFNvdXJjZSo+KHNvdXJjZSk7Ci0gICAgICAgIAotICAgICAgICBtYWNoX3BvcnRfdCBtYWNo
UG9ydCA9IGRpc3BhdGNoX3NvdXJjZV9nZXRfaGFuZGxlKGV2ZW50U291cmNlLT5tX2Rpc3BhdGNo
U291cmNlKTsKLSAgICAgICAgCi0gICAgICAgIHN3aXRjaCAoZXZlbnRTb3VyY2UtPm1fZXZlbnRU
eXBlKSB7Ci0gICAgICAgIGNhc2UgTWFjaFBvcnREYXRhQXZhaWxhYmxlOgotICAgICAgICAgICAg
Ly8gUmVsZWFzZSBvdXIgcmVjZWl2ZSByaWdodC4KLSAgICAgICAgICAgIG1hY2hfcG9ydF9tb2Rf
cmVmcyhtYWNoX3Rhc2tfc2VsZigpLCBtYWNoUG9ydCwgTUFDSF9QT1JUX1JJR0hUX1JFQ0VJVkUs
IC0xKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE1hY2hQb3J0RGVhZE5hbWVO
b3RpZmljYXRpb246Ci0gICAgICAgICAgICAvLyBSZWxlYXNlIG91ciBzZW5kIHJpZ2h0LgotICAg
ICAgICAgICAgbWFjaF9wb3J0X2RlYWxsb2NhdGUobWFjaF90YXNrX3NlbGYoKSwgbWFjaFBvcnQp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgc3RhdGlj
IHZvaWQgZmluYWxpemVIYW5kbGVyKHZvaWQqIHNvdXJjZSkKLSAgICB7Ci0gICAgICAgIEV2ZW50
U291cmNlKiBldmVudFNvdXJjZSA9IHN0YXRpY19jYXN0PEV2ZW50U291cmNlKj4oc291cmNlKTsK
LSAgICAgICAgCi0gICAgICAgIGRlbGV0ZSBldmVudFNvdXJjZTsKLSAgICB9Ci0gICAgCi1wcml2
YXRlOgotICAgIE1hY2hQb3J0RXZlbnRUeXBlIG1fZXZlbnRUeXBlOwotICAgIAotICAgIC8vIFRo
aXMgaXMgYSB3ZWFrIHJlZmVyZW5jZSwgc2luY2UgbV9kaXNwYXRjaFNvdXJjZSByZWZlcmVuY2Vz
IHRoZSBldmVudCBzb3VyY2UuCi0gICAgZGlzcGF0Y2hfc291cmNlX3QgbV9kaXNwYXRjaFNvdXJj
ZTsKLQotICAgIEZ1bmN0aW9uPHZvaWQoKT4gbV9mdW5jdGlvbjsKLX07Ci0KLXZvaWQgV29ya1F1
ZXVlOjpyZWdpc3Rlck1hY2hQb3J0RXZlbnRIYW5kbGVyKG1hY2hfcG9ydF90IG1hY2hQb3J0LCBN
YWNoUG9ydEV2ZW50VHlwZSBldmVudFR5cGUsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0
aW9uKQotewotICAgIGRpc3BhdGNoX3NvdXJjZV90eXBlX3Qgc291cmNlVHlwZSA9IDA7Ci0gICAg
c3dpdGNoIChldmVudFR5cGUpIHsKLSAgICBjYXNlIE1hY2hQb3J0RGF0YUF2YWlsYWJsZToKLSAg
ICAgICAgc291cmNlVHlwZSA9IERJU1BBVENIX1NPVVJDRV9UWVBFX01BQ0hfUkVDVjsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBNYWNoUG9ydERlYWROYW1lTm90aWZpY2F0aW9uOgotICAgICAg
ICBzb3VyY2VUeXBlID0gRElTUEFUQ0hfU09VUkNFX1RZUEVfTUFDSF9TRU5EOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci0gICAgCi0gICAgZGlzcGF0Y2hfc291cmNlX3QgZGlzcGF0Y2hTb3VyY2Ug
PSBkaXNwYXRjaF9zb3VyY2VfY3JlYXRlKHNvdXJjZVR5cGUsIG1hY2hQb3J0LCAwLCBtX2Rpc3Bh
dGNoUXVldWUpOwotICAgIAotICAgIEV2ZW50U291cmNlKiBldmVudFNvdXJjZSA9IG5ldyBFdmVu
dFNvdXJjZShldmVudFR5cGUsIGRpc3BhdGNoU291cmNlLCBmdW5jdGlvbik7Ci0gICAgZGlzcGF0
Y2hfc2V0X2NvbnRleHQoZGlzcGF0Y2hTb3VyY2UsIGV2ZW50U291cmNlKTsKLSAgICAKLSAgICBk
aXNwYXRjaF9zb3VyY2Vfc2V0X2V2ZW50X2hhbmRsZXJfZihkaXNwYXRjaFNvdXJjZSwgJkV2ZW50
U291cmNlOjpldmVudEhhbmRsZXIpOwotICAgIGRpc3BhdGNoX3NvdXJjZV9zZXRfY2FuY2VsX2hh
bmRsZXJfZihkaXNwYXRjaFNvdXJjZSwgJkV2ZW50U291cmNlOjpjYW5jZWxIYW5kbGVyKTsKLSAg
ICBkaXNwYXRjaF9zZXRfZmluYWxpemVyX2YoZGlzcGF0Y2hTb3VyY2UsICZFdmVudFNvdXJjZTo6
ZmluYWxpemVIYW5kbGVyKTsKLSAgICAKLSAgICAvLyBBZGQgdGhlIHNvdXJjZSB0byBvdXIgc2V0
IG9mIHNvdXJjZXMuCi0gICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9ldmVudFNv
dXJjZXNNdXRleCk7Ci0gICAgICAgIAotICAgICAgICBBU1NFUlQoIW1fZXZlbnRTb3VyY2VzLmNv
bnRhaW5zKG1hY2hQb3J0KSk7Ci0gICAgICAgIAotICAgICAgICBtX2V2ZW50U291cmNlcy5zZXQo
bWFjaFBvcnQsIGV2ZW50U291cmNlKTsKLSAgICAgICAgCi0gICAgICAgIC8vIEFuZCBzdGFydCBp
dCEKLSAgICAgICAgZGlzcGF0Y2hfcmVzdW1lKGRpc3BhdGNoU291cmNlKTsKLSAgICB9Ci19Ci0K
LXZvaWQgV29ya1F1ZXVlOjp1bnJlZ2lzdGVyTWFjaFBvcnRFdmVudEhhbmRsZXIobWFjaF9wb3J0
X3QgbWFjaFBvcnQpCi17Ci0gICAgQVNTRVJUKG1hY2hQb3J0KTsKLSAgICAKLSAgICBNdXRleExv
Y2tlciBsb2NrZXIobV9ldmVudFNvdXJjZXNNdXRleCk7Ci0gICAgCi0gICAgSGFzaE1hcDxtYWNo
X3BvcnRfdCwgRXZlbnRTb3VyY2UqPjo6aXRlcmF0b3IgaXQgPSBtX2V2ZW50U291cmNlcy5maW5k
KG1hY2hQb3J0KTsKLSAgICBBU1NFUlQoaXQgIT0gbV9ldmVudFNvdXJjZXMuZW5kKCkpOwotICAg
IAotICAgIEFTU0VSVChtX2V2ZW50U291cmNlcy5jb250YWlucyhtYWNoUG9ydCkpOwotCi0gICAg
RXZlbnRTb3VyY2UqIGV2ZW50U291cmNlID0gaXQtPnNlY29uZDsKLSAgICAvLyBDYW5jZWwgYW5k
IHJlbGVhc2UgdGhlIHNvdXJjZS4gSXQgd2lsbCBiZSBkZWxldGVkIGluIGl0cyBmaW5hbGl6ZSBo
YW5kbGVyLgotICAgIGRpc3BhdGNoX3NvdXJjZV9jYW5jZWwoZXZlbnRTb3VyY2UtPmRpc3BhdGNo
U291cmNlKCkpOwotICAgIGRpc3BhdGNoX3JlbGVhc2UoZXZlbnRTb3VyY2UtPmRpc3BhdGNoU291
cmNlKCkpOwotCi0gICAgbV9ldmVudFNvdXJjZXMucmVtb3ZlKGl0KTsgICAgCi19Ci0KLXZvaWQg
V29ya1F1ZXVlOjpwbGF0Zm9ybUluaXRpYWxpemUoY29uc3QgY2hhciogbmFtZSkKLXsKLSAgICBt
X2Rpc3BhdGNoUXVldWUgPSBkaXNwYXRjaF9xdWV1ZV9jcmVhdGUobmFtZSwgMCk7Ci0gICAgZGlz
cGF0Y2hfc2V0X2NvbnRleHQobV9kaXNwYXRjaFF1ZXVlLCB0aGlzKTsKLX0KLQotdm9pZCBXb3Jr
UXVldWU6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCi17Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAg
IE11dGV4TG9ja2VyIGxvY2tlcihtX2V2ZW50U291cmNlc011dGV4KTsKLSAgICBBU1NFUlQobV9l
dmVudFNvdXJjZXMuaXNFbXB0eSgpKTsKLSNlbmRpZgotCi0gICAgZGlzcGF0Y2hfcmVsZWFzZSht
X2Rpc3BhdGNoUXVldWUpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0v
cXQvV29ya1F1ZXVlUXQuY3BwIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vcXQvV29ya1F1ZXVl
UXQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYWEyYmUzZDBiOGI3NDg1Mjlh
Mjg4ZmVlMmQ1OTRmZGI5ZTQ5OTI2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3F0L1dvcmtRdWV1ZVF0LmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDEzMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBO
b2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldvcmtRdWV1ZS5oIgotCi0jaW5jbHVkZSA8
UUxvY2FsU29ja2V0PgotI2luY2x1ZGUgPFFPYmplY3Q+Ci0jaW5jbHVkZSA8UVRocmVhZD4KLSNp
bmNsdWRlIDxRUHJvY2Vzcz4KLSNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+Ci0j
aW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgotCi1jbGFzcyBXb3JrUXVldWU6OldvcmtJdGVtUXQg
OiBwdWJsaWMgUU9iamVjdCB7Ci0gICAgUV9PQkpFQ1QKLXB1YmxpYzoKLSAgICBXb3JrSXRlbVF0
KFdvcmtRdWV1ZSogd29ya1F1ZXVlLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikK
LSAgICAgICAgOiBtX3F1ZXVlKHdvcmtRdWV1ZSkKLSAgICAgICAgLCBtX3NvdXJjZSgwKQotICAg
ICAgICAsIG1fc2lnbmFsKDApCi0gICAgICAgICwgbV9mdW5jdGlvbihmdW5jdGlvbikKLSAgICB7
Ci0gICAgfQotCi0gICAgV29ya0l0ZW1RdChXb3JrUXVldWUqIHdvcmtRdWV1ZSwgUU9iamVjdCog
c291cmNlLCBjb25zdCBjaGFyKiBzaWduYWwsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0
aW9uKQotICAgICAgICA6IG1fcXVldWUod29ya1F1ZXVlKQotICAgICAgICAsIG1fc291cmNlKHNv
dXJjZSkKLSAgICAgICAgLCBtX3NpZ25hbChzaWduYWwpCi0gICAgICAgICwgbV9mdW5jdGlvbihm
dW5jdGlvbikKLSAgICB7Ci0gICAgICAgIGNvbm5lY3QobV9zb3VyY2UsIG1fc2lnbmFsLCBTTE9U
KGV4ZWN1dGUoKSksIFF0OjpRdWV1ZWRDb25uZWN0aW9uKTsKLSAgICB9Ci0KLSAgICB+V29ya0l0
ZW1RdCgpCi0gICAgewotICAgIH0KLQotICAgIFFfU0xPVCB2b2lkIGV4ZWN1dGUoKSAKLSAgICB7
IAotICAgICAgICBpZiAobV9xdWV1ZS0+bV9pc1ZhbGlkKQotICAgICAgICAgICAgbV9mdW5jdGlv
bigpOwotICAgIH0KLQotICAgIFFfU0xPVCB2b2lkIGV4ZWN1dGVBbmREZWxldGUoKQotICAgIHsK
LSAgICAgICAgZXhlY3V0ZSgpOwotICAgICAgICBkZWxldGUgdGhpczsKLSAgICB9Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgdGltZXJFdmVudChRVGltZXJFdmVudCopCi0gICAgewotICAgICAgICBleGVj
dXRlQW5kRGVsZXRlKCk7Ci0gICAgfQotCi0gICAgV29ya1F1ZXVlKiBtX3F1ZXVlOwotICAgIFFP
YmplY3QqIG1fc291cmNlOwotICAgIGNvbnN0IGNoYXIqIG1fc2lnbmFsOwotICAgIEZ1bmN0aW9u
PHZvaWQoKT4gbV9mdW5jdGlvbjsKLX07Ci0KLVFTb2NrZXROb3RpZmllciogV29ya1F1ZXVlOjpy
ZWdpc3RlclNvY2tldEV2ZW50SGFuZGxlcihpbnQgc29ja2V0RGVzY3JpcHRvciwgUVNvY2tldE5v
dGlmaWVyOjpUeXBlIHR5cGUsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQotewot
ICAgIEFTU0VSVChtX3dvcmtUaHJlYWQpOwotCi0gICAgUVNvY2tldE5vdGlmaWVyKiBub3RpZmll
ciA9IG5ldyBRU29ja2V0Tm90aWZpZXIoc29ja2V0RGVzY3JpcHRvciwgdHlwZSwgMCk7Ci0gICAg
bm90aWZpZXItPnNldEVuYWJsZWQoZmFsc2UpOwotICAgIG5vdGlmaWVyLT5tb3ZlVG9UaHJlYWQo
bV93b3JrVGhyZWFkKTsKLSAgICBXb3JrUXVldWU6OldvcmtJdGVtUXQqIGl0ZW1RdCA9IG5ldyBX
b3JrUXVldWU6OldvcmtJdGVtUXQodGhpcywgbm90aWZpZXIsIFNJR05BTChhY3RpdmF0ZWQoaW50
KSksIGZ1bmN0aW9uKTsKLSAgICBpdGVtUXQtPm1vdmVUb1RocmVhZChtX3dvcmtUaHJlYWQpOwot
ICAgIG5vdGlmaWVyLT5zZXRFbmFibGVkKHRydWUpOwotICAgIHJldHVybiBub3RpZmllcjsKLX0K
LQotdm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW5pdGlhbGl6ZShjb25zdCBjaGFyKikKLXsKLSAg
ICBtX3dvcmtUaHJlYWQgPSBuZXcgUVRocmVhZCgpOwotICAgIG1fd29ya1RocmVhZC0+c3RhcnQo
KTsKLX0KLQotdm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCi17Ci0gICAgbV93
b3JrVGhyZWFkLT5leGl0KCk7Ci0gICAgbV93b3JrVGhyZWFkLT53YWl0KCk7Ci0gICAgZGVsZXRl
IG1fd29ya1RocmVhZDsKLX0KLQotdm9pZCBXb3JrUXVldWU6OmRpc3BhdGNoKGNvbnN0IEZ1bmN0
aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQotewotICAgIFdvcmtRdWV1ZTo6V29ya0l0ZW1RdCogaXRl
bVF0ID0gbmV3IFdvcmtRdWV1ZTo6V29ya0l0ZW1RdCh0aGlzLCBmdW5jdGlvbik7Ci0gICAgaXRl
bVF0LT5tb3ZlVG9UaHJlYWQobV93b3JrVGhyZWFkKTsKLSAgICBRTWV0YU9iamVjdDo6aW52b2tl
TWV0aG9kKGl0ZW1RdCwgImV4ZWN1dGVBbmREZWxldGUiLCBRdDo6UXVldWVkQ29ubmVjdGlvbik7
Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpkaXNwYXRjaEFmdGVyRGVsYXkoY29uc3QgRnVuY3Rpb248
dm9pZCgpPiYgZnVuY3Rpb24sIGRvdWJsZSBkZWxheUluU2Vjb25kKQotewotICAgIFdvcmtRdWV1
ZTo6V29ya0l0ZW1RdCogaXRlbVF0ID0gbmV3IFdvcmtRdWV1ZTo6V29ya0l0ZW1RdCh0aGlzLCBm
dW5jdGlvbik7Ci0gICAgaXRlbVF0LT5zdGFydFRpbWVyKHN0YXRpY19jYXN0PGludD4oZGVsYXlJ
blNlY29uZCAqIDEwMDApKTsKLSAgICBpdGVtUXQtPm1vdmVUb1RocmVhZChtX3dvcmtUaHJlYWQp
OwotfQotCi12b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2hPblRlcm1pbmF0aW9uKFdlYktpdDo6UGxh
dGZvcm1Qcm9jZXNzSWRlbnRpZmllciBwcm9jZXNzLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBm
dW5jdGlvbikKLXsKLSAgICBXb3JrUXVldWU6OldvcmtJdGVtUXQqIGl0ZW1RdCA9IG5ldyBXb3Jr
UXVldWU6OldvcmtJdGVtUXQodGhpcywgcHJvY2VzcywgU0lHTkFMKGZpbmlzaGVkKGludCwgUVBy
b2Nlc3M6OkV4aXRTdGF0dXMpKSwgZnVuY3Rpb24pOwotICAgIGl0ZW1RdC0+bW92ZVRvVGhyZWFk
KG1fd29ya1RocmVhZCk7Ci19Ci0KLSNpbmNsdWRlICJXb3JrUXVldWVRdC5tb2MiCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS93aW4vV29ya1F1ZXVlV2luLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1BsYXRmb3JtL3dpbi9Xb3JrUXVldWVXaW4uY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBhYWJhZGJkYTg5NWUwN2Q5ZWU1MzMwNzk1Y2M5NGU2MTdlYjkxZDdiLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJL
aXQyL1BsYXRmb3JtL3dpbi9Xb3JrUXVldWVXaW4uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjkx
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV29y
a1F1ZXVlLmgiCi0KLSNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+Ci0jaW5jbHVk
ZSA8d3RmL1RocmVhZGluZy5oPgotCi1pbmxpbmUgV29ya1F1ZXVlOjpXb3JrSXRlbVdpbjo6V29y
a0l0ZW1XaW4oY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24sIFdvcmtRdWV1ZSogcXVl
dWUpCi0gICAgOiBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQotICAgICwgbV9xdWV1ZShxdWV1ZSkKLXsK
LX0KLQotUGFzc1JlZlB0cjxXb3JrUXVldWU6OldvcmtJdGVtV2luPiBXb3JrUXVldWU6OldvcmtJ
dGVtV2luOjpjcmVhdGUoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24sIFdvcmtRdWV1
ZSogcXVldWUpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXb3JrSXRlbVdpbihmdW5jdGlv
biwgcXVldWUpKTsKLX0KLQotV29ya1F1ZXVlOjpXb3JrSXRlbVdpbjo6fldvcmtJdGVtV2luKCkK
LXsKLX0KLQotaW5saW5lIFdvcmtRdWV1ZTo6SGFuZGxlV29ya0l0ZW06OkhhbmRsZVdvcmtJdGVt
KEhBTkRMRSBoYW5kbGUsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uLCBXb3JrUXVl
dWUqIHF1ZXVlKQotICAgIDogV29ya0l0ZW1XaW4oZnVuY3Rpb24sIHF1ZXVlKQotICAgICwgbV9o
YW5kbGUoaGFuZGxlKQotICAgICwgbV93YWl0SGFuZGxlKDApCi17Ci0gICAgQVNTRVJUX0FSRyho
YW5kbGUsIGhhbmRsZSk7Ci19Ci0KLVBhc3NSZWZQdHI8V29ya1F1ZXVlOjpIYW5kbGVXb3JrSXRl
bT4gV29ya1F1ZXVlOjpIYW5kbGVXb3JrSXRlbTo6Y3JlYXRlQnlBZG9wdGluZ0hhbmRsZShIQU5E
TEUgaGFuZGxlLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbiwgV29ya1F1ZXVlKiBx
dWV1ZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhhbmRsZVdvcmtJdGVtKGhhbmRsZSwg
ZnVuY3Rpb24sIHF1ZXVlKSk7Ci19Ci0KLVdvcmtRdWV1ZTo6SGFuZGxlV29ya0l0ZW06On5IYW5k
bGVXb3JrSXRlbSgpCi17Ci0gICAgOjpDbG9zZUhhbmRsZShtX2hhbmRsZSk7Ci19Ci0KLXZvaWQg
V29ya1F1ZXVlOjpoYW5kbGVDYWxsYmFjayh2b2lkKiBjb250ZXh0LCBCT09MRUFOIHRpbWVyT3JX
YWl0RmlyZWQpCi17Ci0gICAgQVNTRVJUX0FSRyhjb250ZXh0LCBjb250ZXh0KTsKLSAgICBBU1NF
UlRfQVJHKHRpbWVyT3JXYWl0RmlyZWQsICF0aW1lck9yV2FpdEZpcmVkKTsKLQotICAgIFdvcmtJ
dGVtV2luKiBpdGVtID0gc3RhdGljX2Nhc3Q8V29ya0l0ZW1XaW4qPihjb250ZXh0KTsKLSAgICBX
b3JrUXVldWUqIHF1ZXVlID0gaXRlbS0+cXVldWUoKTsKLQotICAgIHsKLSAgICAgICAgTXV0ZXhM
b2NrZXIgbG9jayhxdWV1ZS0+bV93b3JrSXRlbVF1ZXVlTG9jayk7Ci0gICAgICAgIHF1ZXVlLT5t
X3dvcmtJdGVtUXVldWUuYXBwZW5kKGl0ZW0pOwotCi0gICAgICAgIC8vIElmIG5vIG90aGVyIHRo
cmVhZCBpcyBwZXJmb3JtaW5nIHdvcmssIHdlIGNhbiBkbyBpdCBvbiB0aGlzIHRocmVhZC4KLSAg
ICAgICAgaWYgKCFxdWV1ZS0+dHJ5UmVnaXN0ZXJBc1dvcmtUaHJlYWQoKSkgewotICAgICAgICAg
ICAgLy8gU29tZSBvdGhlciB0aHJlYWQgaXMgcGVyZm9ybWluZyB3b3JrLiBTaW5jZSB3ZSBob2xk
IHRoZSBxdWV1ZSBsb2NrLCB3ZSBjYW4gYmUgc3VyZQotICAgICAgICAgICAgLy8gdGhhdCB0aGUg
d29yayB0aHJlYWQgaXMgbm90IGV4aXRpbmcgZHVlIHRvIGFuIGVtcHR5IHF1ZXVlIGFuZCB3aWxs
IHByb2Nlc3MgdGhlIHdvcmsKLSAgICAgICAgICAgIC8vIGl0ZW0gd2UganVzdCBhZGRlZCB0byBp
dC4gSWYgd2Ugd2VyZW4ndCBob2xkaW5nIHRoZSBsb2NrIHdlJ2QgaGF2ZSB0byBzaWduYWwKLSAg
ICAgICAgICAgIC8vIG1fcGVyZm9ybVdvcmtFdmVudCB0byBtYWtlIHN1cmUgdGhlIHdvcmsgaXRl
bSBnb3QgcGlja2VkIHVwLgotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgcXVldWUtPnBlcmZvcm1Xb3JrT25SZWdpc3RlcmVkV29ya1RocmVhZCgpOwotfQotCi12
b2lkIFdvcmtRdWV1ZTo6cmVnaXN0ZXJIYW5kbGUoSEFORExFIGhhbmRsZSwgY29uc3QgRnVuY3Rp
b248dm9pZCgpPiYgZnVuY3Rpb24pCi17Ci0gICAgUmVmUHRyPEhhbmRsZVdvcmtJdGVtPiBoYW5k
bGVJdGVtID0gSGFuZGxlV29ya0l0ZW06OmNyZWF0ZUJ5QWRvcHRpbmdIYW5kbGUoaGFuZGxlLCBm
dW5jdGlvbiwgdGhpcyk7Ci0KLSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2sobV9oYW5k
bGVzTG9jayk7Ci0gICAgICAgIEFTU0VSVF9BUkcoaGFuZGxlLCAhbV9oYW5kbGVzLmNvbnRhaW5z
KGhhbmRsZSkpOwotICAgICAgICBtX2hhbmRsZXMuc2V0KGhhbmRsZSwgaGFuZGxlSXRlbSk7Ci0g
ICAgfQotCi0gICAgSEFORExFIHdhaXRIYW5kbGU7Ci0gICAgaWYgKCE6OlJlZ2lzdGVyV2FpdEZv
clNpbmdsZU9iamVjdCgmd2FpdEhhbmRsZSwgaGFuZGxlLCBoYW5kbGVDYWxsYmFjaywgaGFuZGxl
SXRlbS5nZXQoKSwgSU5GSU5JVEUsIFdUX0VYRUNVVEVERUZBVUxUKSkgewotICAgICAgICBEV09S
RCBlcnJvciA9IDo6R2V0TGFzdEVycm9yKCk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgIH0KLSAgICBoYW5kbGVJdGVtLT5zZXRXYWl0SGFuZGxlKHdhaXRIYW5kbGUpOwotfQot
Ci12b2lkIFdvcmtRdWV1ZTo6dW5yZWdpc3RlckFuZENsb3NlSGFuZGxlKEhBTkRMRSBoYW5kbGUp
Ci17Ci0gICAgUmVmUHRyPEhhbmRsZVdvcmtJdGVtPiBpdGVtOwotICAgIHsKLSAgICAgICAgTXV0
ZXhMb2NrZXIgbG9ja2VyKG1faGFuZGxlc0xvY2spOwotICAgICAgICBBU1NFUlRfQVJHKGhhbmRs
ZSwgbV9oYW5kbGVzLmNvbnRhaW5zKGhhbmRsZSkpOwotICAgICAgICBpdGVtID0gbV9oYW5kbGVz
LnRha2UoaGFuZGxlKTsKLSAgICB9Ci0KLSAgICB1bnJlZ2lzdGVyV2FpdEFuZERlc3Ryb3lJdGVt
U29vbihpdGVtLnJlbGVhc2UoKSk7Ci19Ci0KLURXT1JEIFdvcmtRdWV1ZTo6d29ya1RocmVhZENh
bGxiYWNrKHZvaWQqIGNvbnRleHQpCi17Ci0gICAgQVNTRVJUX0FSRyhjb250ZXh0LCBjb250ZXh0
KTsKLQotICAgIFdvcmtRdWV1ZSogcXVldWUgPSBzdGF0aWNfY2FzdDxXb3JrUXVldWUqPihjb250
ZXh0KTsKLQotICAgIGlmICghcXVldWUtPnRyeVJlZ2lzdGVyQXNXb3JrVGhyZWFkKCkpCi0gICAg
ICAgIHJldHVybiAwOwotCi0gICAgcXVldWUtPnBlcmZvcm1Xb3JrT25SZWdpc3RlcmVkV29ya1Ro
cmVhZCgpOwotICAgIHJldHVybiAwOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6cGVyZm9ybVdvcmtP
blJlZ2lzdGVyZWRXb3JrVGhyZWFkKCkKLXsKLSAgICBBU1NFUlQobV9pc1dvcmtUaHJlYWRSZWdp
c3RlcmVkKTsKLQotICAgIGJvb2wgaXNWYWxpZCA9IHRydWU7Ci0KLSAgICBtX3dvcmtJdGVtUXVl
dWVMb2NrLmxvY2soKTsKLQotICAgIHdoaWxlIChpc1ZhbGlkICYmICFtX3dvcmtJdGVtUXVldWUu
aXNFbXB0eSgpKSB7Ci0gICAgICAgIFZlY3RvcjxSZWZQdHI8V29ya0l0ZW1XaW4+ID4gd29ya0l0
ZW1RdWV1ZTsKLSAgICAgICAgbV93b3JrSXRlbVF1ZXVlLnN3YXAod29ya0l0ZW1RdWV1ZSk7Ci0K
LSAgICAgICAgLy8gQWxsb3cgbW9yZSB3b3JrIHRvIGJlIHNjaGVkdWxlZCB3aGlsZSB3ZSdyZSBu
b3QgdXNpbmcgdGhlIHF1ZXVlIGRpcmVjdGx5LgotICAgICAgICBtX3dvcmtJdGVtUXVldWVMb2Nr
LnVubG9jaygpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdvcmtJdGVtUXVldWUu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2lzVmFsaWRN
dXRleCk7Ci0gICAgICAgICAgICBpc1ZhbGlkID0gbV9pc1ZhbGlkOwotICAgICAgICAgICAgaWYg
KCFpc1ZhbGlkKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgd29ya0l0ZW1R
dWV1ZVtpXS0+ZnVuY3Rpb24oKSgpOwotICAgICAgICB9Ci0gICAgICAgIG1fd29ya0l0ZW1RdWV1
ZUxvY2subG9jaygpOwotICAgIH0KLQotICAgIC8vIE9uZSBpbnZhcmlhbnQgd2UgbWFpbnRhaW4g
aXMgdGhhdCBhbnkgd29yayBzY2hlZHVsZWQgd2hpbGUgYSB3b3JrIHRocmVhZCBpcyByZWdpc3Rl
cmVkIHdpbGwKLSAgICAvLyBiZSBoYW5kbGVkIGJ5IHRoYXQgd29yayB0aHJlYWQuIFVucmVnaXN0
ZXIgYXMgdGhlIHdvcmsgdGhyZWFkIHdoaWxlIHRoZSBxdWV1ZSBsb2NrIGlzIHN0aWxsCi0gICAg
Ly8gaGVsZCBzbyB0aGF0IG5vIHdvcmsgY2FuIGJlIHNjaGVkdWxlZCB3aGlsZSB3ZSdyZSBzdGls
bCByZWdpc3RlcmVkLgotICAgIHVucmVnaXN0ZXJBc1dvcmtUaHJlYWQoKTsKLQotICAgIG1fd29y
a0l0ZW1RdWV1ZUxvY2sudW5sb2NrKCk7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpwbGF0Zm9ybUlu
aXRpYWxpemUoY29uc3QgY2hhciogbmFtZSkKLXsKLSAgICBtX2lzV29ya1RocmVhZFJlZ2lzdGVy
ZWQgPSAwOwotICAgIG1fdGltZXJRdWV1ZSA9IDo6Q3JlYXRlVGltZXJRdWV1ZSgpOwotICAgIEFT
U0VSVF9XSVRIX01FU1NBR0UobV90aW1lclF1ZXVlLCAiOjpDcmVhdGVUaW1lclF1ZXVlIGZhaWxl
ZCB3aXRoIGVycm9yICVsdSIsIDo6R2V0TGFzdEVycm9yKCkpOwotfQotCi1ib29sIFdvcmtRdWV1
ZTo6dHJ5UmVnaXN0ZXJBc1dvcmtUaHJlYWQoKQotewotICAgIExPTkcgcmVzdWx0ID0gOjpJbnRl
cmxvY2tlZENvbXBhcmVFeGNoYW5nZSgmbV9pc1dvcmtUaHJlYWRSZWdpc3RlcmVkLCAxLCAwKTsK
LSAgICBBU1NFUlQoIXJlc3VsdCB8fCByZXN1bHQgPT0gMSk7Ci0gICAgcmV0dXJuICFyZXN1bHQ7
Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjp1bnJlZ2lzdGVyQXNXb3JrVGhyZWFkKCkKLXsKLSAgICBM
T05HIHJlc3VsdCA9IDo6SW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2UoJm1faXNXb3JrVGhyZWFk
UmVnaXN0ZXJlZCwgMCwgMSk7Ci0gICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdCA9PSAx
KTsKLX0KLQotdm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCi17Ci0jaWYgIUFT
U0VSVF9ESVNBQkxFRAotICAgIE11dGV4TG9ja2VyIGxvY2sobV9oYW5kbGVzTG9jayk7Ci0gICAg
QVNTRVJUKG1faGFuZGxlcy5pc0VtcHR5KCkpOwotI2VuZGlmCi0KLSAgICAvLyBGSVhNRTogV2Ug
bmVlZCB0byBlbnN1cmUgdGhhdCBhbnkgdGltZXItcXVldWUgdGltZXJzIHRoYXQgZmlyZSBhZnRl
ciB0aGlzIHBvaW50IGRvbid0IHRyeSB0bwotICAgIC8vIGFjY2VzcyB0aGlzIFdvcmtRdWV1ZSA8
aHR0cDovL3dlYmtpdC5vcmcvYi80NDY5MD4uCi0gICAgOjpEZWxldGVUaW1lclF1ZXVlRXgobV90
aW1lclF1ZXVlLCAwKTsKLX0KLQotdm9pZCBXb3JrUXVldWU6OmRpc3BhdGNoKGNvbnN0IEZ1bmN0
aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQotewotICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3dvcmtJ
dGVtUXVldWVMb2NrKTsKLQotICAgIG1fd29ya0l0ZW1RdWV1ZS5hcHBlbmQoV29ya0l0ZW1XaW46
OmNyZWF0ZShmdW5jdGlvbiwgdGhpcykpOwotCi0gICAgLy8gU3Bhd24gYSB3b3JrIHRocmVhZCB0
byBwZXJmb3JtIHRoZSB3b3JrIHdlIGp1c3QgYWRkZWQuIEFzIGFuIG9wdGltaXphdGlvbiwgd2Ug
YXZvaWQKLSAgICAvLyBzcGF3bmluZyB0aGUgdGhyZWFkIGlmIGEgd29yayB0aHJlYWQgaXMgYWxy
ZWFkeSByZWdpc3RlcmVkLiBUaGlzIHByZXZlbnRzIG11bHRpcGxlIHdvcmsKLSAgICAvLyB0aHJl
YWRzIGZyb20gYmVpbmcgc3Bhd25lZCBpbiBtb3N0IGNhc2VzLiAoTm90ZSB0aGF0IHdoZW4gYSB3
b3JrIHRocmVhZCBoYXMgYmVlbiBzcGF3bmVkIGJ1dAotICAgIC8vIGhhc24ndCByZWdpc3RlcmVk
IGl0c2VsZiB5ZXQsIG1faXNXb3JrVGhyZWFkUmVnaXN0ZXJlZCB3aWxsIGJlIGZhbHNlIGFuZCB3
ZSdsbCBlbmQgdXAKLSAgICAvLyBzcGF3bmluZyBhIHNlY29uZCB3b3JrIHRocmVhZCBoZXJlLiBC
dXQgd29yayB0aHJlYWQgcmVnaXN0cmF0aW9uIHByb2Nlc3Mgd2lsbCBlbnN1cmUgdGhhdAotICAg
IC8vIG9ubHkgb25lIHRocmVhZCBhY3R1YWxseSBlbmRzIHVwIHBlcmZvcm1pbmcgd29yay4pCi0g
ICAgaWYgKCFtX2lzV29ya1RocmVhZFJlZ2lzdGVyZWQpCi0gICAgICAgIDo6UXVldWVVc2VyV29y
a0l0ZW0od29ya1RocmVhZENhbGxiYWNrLCB0aGlzLCBXVF9FWEVDVVRFREVGQVVMVCk7Ci19Ci0K
LXN0cnVjdCBUaW1lckNvbnRleHQgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8VGltZXJD
b250ZXh0PiB7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8VGltZXJDb250ZXh0PiBjcmVhdGUoKSB7
IHJldHVybiBhZG9wdFJlZihuZXcgVGltZXJDb250ZXh0KTsgfQotCi0gICAgV29ya1F1ZXVlKiBx
dWV1ZTsKLSAgICBGdW5jdGlvbjx2b2lkKCk+IGZ1bmN0aW9uOwotICAgIE11dGV4IHRpbWVyTXV0
ZXg7Ci0gICAgSEFORExFIHRpbWVyOwotCi1wcml2YXRlOgotICAgIFRpbWVyQ29udGV4dCgpIDog
cXVldWUoMCksIHRpbWVyKDApIHsgfQotfTsKLQotdm9pZCBXb3JrUXVldWU6OnRpbWVyQ2FsbGJh
Y2sodm9pZCogY29udGV4dCwgQk9PTEVBTiB0aW1lck9yV2FpdEZpcmVkKQotewotICAgIEFTU0VS
VF9BUkcoY29udGV4dCwgY29udGV4dCk7Ci0gICAgQVNTRVJUX1VOVVNFRCh0aW1lck9yV2FpdEZp
cmVkLCB0aW1lck9yV2FpdEZpcmVkKTsKLQotICAgIC8vIEJhbGFuY2VkIGJ5IGxlYWtSZWYgaW4g
c2NoZWR1bGVXb3JrQWZ0ZXJEZWxheS4KLSAgICBSZWZQdHI8VGltZXJDb250ZXh0PiB0aW1lckNv
bnRleHQgPSBhZG9wdFJlZihzdGF0aWNfY2FzdDxUaW1lckNvbnRleHQqPihjb250ZXh0KSk7Ci0K
LSAgICB0aW1lckNvbnRleHQtPnF1ZXVlLT5kaXNwYXRjaCh0aW1lckNvbnRleHQtPmZ1bmN0aW9u
KTsKLQotICAgIE11dGV4TG9ja2VyIGxvY2sodGltZXJDb250ZXh0LT50aW1lck11dGV4KTsKLSAg
ICBBU1NFUlQodGltZXJDb250ZXh0LT50aW1lcik7Ci0gICAgQVNTRVJUKHRpbWVyQ29udGV4dC0+
cXVldWUtPm1fdGltZXJRdWV1ZSk7Ci0gICAgaWYgKCE6OkRlbGV0ZVRpbWVyUXVldWVUaW1lcih0
aW1lckNvbnRleHQtPnF1ZXVlLT5tX3RpbWVyUXVldWUsIHRpbWVyQ29udGV4dC0+dGltZXIsIDAp
KQotICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGZhbHNlLCAiOjpEZWxldGVUaW1lclF1ZXVl
VGltZXIgZmFpbGVkIHdpdGggZXJyb3IgJWx1IiwgOjpHZXRMYXN0RXJyb3IoKSk7Ci19Ci0KLXZv
aWQgV29ya1F1ZXVlOjpkaXNwYXRjaEFmdGVyRGVsYXkoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYg
ZnVuY3Rpb24sIGRvdWJsZSBkZWxheSkKLXsKLSAgICBBU1NFUlQobV90aW1lclF1ZXVlKTsKLQot
ICAgIFJlZlB0cjxUaW1lckNvbnRleHQ+IGNvbnRleHQgPSBUaW1lckNvbnRleHQ6OmNyZWF0ZSgp
OwotICAgIGNvbnRleHQtPnF1ZXVlID0gdGhpczsKLSAgICBjb250ZXh0LT5mdW5jdGlvbiA9IGZ1
bmN0aW9uOwotCi0gICAgewotICAgICAgICAvLyBUaGUgdGltZXIgY2FsbGJhY2sgY291bGQgZmly
ZSBiZWZvcmUgOjpDcmVhdGVUaW1lclF1ZXVlVGltZXIgZXZlbiByZXR1cm5zLCBzbyB3ZSBwcm90
ZWN0Ci0gICAgICAgIC8vIGNvbnRleHQtPnRpbWVyIHdpdGggYSBtdXRleCB0byBlbnN1cmUgdGhl
IHRpbWVyIGNhbGxiYWNrIGRvZXNuJ3QgYWNjZXNzIGl0IGJlZm9yZSB0aGUKLSAgICAgICAgLy8g
dGltZXIgaGFuZGxlIGhhcyBiZWVuIHN0b3JlZCBpbiBpdC4KLSAgICAgICAgTXV0ZXhMb2NrZXIg
bG9jayhjb250ZXh0LT50aW1lck11dGV4KTsKLQotICAgICAgICAvLyBTaW5jZSBvdXIgdGltZXIg
Y2FsbGJhY2sgaXMgcXVpY2ssIHdlIGNhbiBleGVjdXRlIGluIHRoZSB0aW1lciB0aHJlYWQgaXRz
ZWxmIGFuZCBhdm9pZAotICAgICAgICAvLyBhbiBleHRyYSB0aHJlYWQgc3dpdGNoIG92ZXIgdG8g
YSB3b3JrZXIgdGhyZWFkLgotICAgICAgICBpZiAoITo6Q3JlYXRlVGltZXJRdWV1ZVRpbWVyKCZj
b250ZXh0LT50aW1lciwgbV90aW1lclF1ZXVlLCB0aW1lckNhbGxiYWNrLCBjb250ZXh0LmdldCgp
LCBkZWxheSAqIDEwMDAsIDAsIFdUX0VYRUNVVEVJTlRJTUVSVEhSRUFEKSkgewotICAgICAgICAg
ICAgQVNTRVJUX1dJVEhfTUVTU0FHRShmYWxzZSwgIjo6Q3JlYXRlVGltZXJRdWV1ZVRpbWVyIGZh
aWxlZCB3aXRoIGVycm9yICVsdSIsIDo6R2V0TGFzdEVycm9yKCkpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gVGhlIHRpbWVyIGNhbGxiYWNrIHdpbGwg
aGFuZGxlIGRlc3Ryb3lpbmcgY29udGV4dC4KLSAgICBjb250ZXh0LnJlbGVhc2UoKS5sZWFrUmVm
KCk7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjp1bnJlZ2lzdGVyV2FpdEFuZERlc3Ryb3lJdGVtU29v
bihQYXNzUmVmUHRyPEhhbmRsZVdvcmtJdGVtPiBpdGVtKQotewotICAgIC8vIFdlJ3JlIGdvaW5n
IHRvIG1ha2UgYSBibG9ja2luZyBjYWxsIHRvIDo6VW5yZWdpc3RlcldhaXRFeCBiZWZvcmUgY2xv
c2luZyB0aGUgaGFuZGxlLiAoVGhlCi0gICAgLy8gYmxvY2tpbmcgdmVyc2lvbiBvZiA6OlVucmVn
aXN0ZXJXYWl0RXggaXMgbXVjaCBzaW1wbGVyIHRoYW4gdGhlIG5vbi1ibG9ja2luZyB2ZXJzaW9u
LikgSWYgd2UKLSAgICAvLyBkbyB0aGlzIG9uIHRoZSBjdXJyZW50IHRocmVhZCwgd2UnbGwgZGVh
ZGxvY2sgaWYgd2UncmUgY3VycmVudGx5IGluIGEgY2FsbGJhY2sgZnVuY3Rpb24gZm9yCi0gICAg
Ly8gdGhlIHdhaXQgd2UncmUgdW5yZWdpc3RlcmluZy4gU28gaW5zdGVhZCB3ZSBkbyBpdCBhc3lu
Y2hyb25vdXNseSBvbiBzb21lIG90aGVyIHdvcmtlciB0aHJlYWQuCi0KLSAgICA6OlF1ZXVlVXNl
cldvcmtJdGVtKHVucmVnaXN0ZXJXYWl0QW5kRGVzdHJveUl0ZW1DYWxsYmFjaywgaXRlbS5sZWFr
UmVmKCksIFdUX0VYRUNVVEVERUZBVUxUKTsKLX0KLQotRFdPUkQgV0lOQVBJIFdvcmtRdWV1ZTo6
dW5yZWdpc3RlcldhaXRBbmREZXN0cm95SXRlbUNhbGxiYWNrKHZvaWQqIGNvbnRleHQpCi17Ci0g
ICAgQVNTRVJUX0FSRyhjb250ZXh0LCBjb250ZXh0KTsKLSAgICBSZWZQdHI8SGFuZGxlV29ya0l0
ZW0+IGl0ZW0gPSBhZG9wdFJlZihzdGF0aWNfY2FzdDxIYW5kbGVXb3JrSXRlbSo+KGNvbnRleHQp
KTsKLQotICAgIC8vIE5vdyB0aGF0IHdlIGtub3cgd2UncmUgbm90IGluIGEgY2FsbGJhY2sgZnVu
Y3Rpb24gZm9yIHRoZSB3YWl0IHdlJ3JlIHVucmVnaXN0ZXJpbmcsIHdlIGNhbgotICAgIC8vIG1h
a2UgYSBibG9ja2luZyBjYWxsIHRvIDo6VW5yZWdpc3RlcldhaXRFeC4KLSAgICBpZiAoITo6VW5y
ZWdpc3RlcldhaXRFeChpdGVtLT53YWl0SGFuZGxlKCksIElOVkFMSURfSEFORExFX1ZBTFVFKSkg
ewotICAgICAgICBEV09SRCBlcnJvciA9IDo6R2V0TGFzdEVycm9yKCk7Ci0gICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9y
bUVmbC5jbWFrZQppbmRleCA2NmFkMDM3ZGFlMWY5N2Q2ZDk3Y2MxODA5MmUyNjhmZmExMzQyOWY1
Li4yNDQxNzZjYjI3ZGVkM2MyNTg2YzFhMDM4MmQ3ZTkyNzI4MTI0ZTg4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybUVmbC5jbWFrZQpAQCAtOSw3ICs5LDYgQEAgTElTVChBUFBFTkQgV2ViS2l0Ml9MSU5LX0ZM
QUdTCiAKIExJU1QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIFBsYXRmb3JtL2VmbC9Nb2R1
bGVFZmwuY3BwCi0gICAgUGxhdGZvcm0vZWZsL1dvcmtRdWV1ZUVmbC5jcHAKICAgICBQbGF0Zm9y
bS91bml4L1NoYXJlZE1lbW9yeVVuaXguY3BwCiAKICAgICBQbGF0Zm9ybS9Db3JlSVBDL3VuaXgv
Q29ubmVjdGlvblVuaXguY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJp
IGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQppbmRleCBiYzMwMGE3Y2QxMjY3MmQyMTFiZjMz
NzA3Y2RlYzJmMzY5N2E2NTFmLi5lMWQwMmZhYWNhNjcyNDdiMGE4YzdlODRjZThhMDliNTIyZDM0
ZmZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1RhcmdldC5wcmkKQEAgLTMwLDkgKzMwLDcgQEAgSEVBREVSUyArPSBcCiAgICAgUGxh
dGZvcm0vQ29yZUlQQy9NZXNzYWdlU2VuZGVyLmggXAogICAgIFBsYXRmb3JtL0xvZ2dpbmcuaCBc
CiAgICAgUGxhdGZvcm0vTW9kdWxlLmggXAotICAgIFBsYXRmb3JtL1BsYXRmb3JtUHJvY2Vzc0lk
ZW50aWZpZXIuaCBcCiAgICAgUGxhdGZvcm0vU2hhcmVkTWVtb3J5LmggXAotICAgIFBsYXRmb3Jt
L1dvcmtRdWV1ZS5oIFwKICAgICBQbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94eS5o
IFwKICAgICBQbHVnaW5Qcm9jZXNzL1BsdWdpbkNyZWF0aW9uUGFyYW1ldGVycy5oIFwKICAgICBQ
bHVnaW5Qcm9jZXNzL1BsdWdpblByb2Nlc3MuaCBcCkBAIC00MTMsNyArNDExLDYgQEAgU09VUkNF
UyArPSBcCiAgICAgUGxhdGZvcm0vQ29yZUlQQy9EYXRhUmVmZXJlbmNlLmNwcCBcCiAgICAgUGxh
dGZvcm0vTG9nZ2luZy5jcHAgXAogICAgIFBsYXRmb3JtL01vZHVsZS5jcHAgXAotICAgIFBsYXRm
b3JtL1dvcmtRdWV1ZS5jcHAgXAogICAgIFBsYXRmb3JtL3F0L0xvZ2dpbmdRdC5jcHAgXAogICAg
IFBsYXRmb3JtL3F0L01vZHVsZVF0LmNwcCBcCiAgICAgUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250
cm9sbGVyUHJveHkuY3BwIFwKQEAgLTgyNywxNCArODI0LDEyIEBAIG1hYzogewogICAgIFNPVVJD
RVMgKz0gXAogICAgICAgICBQbGF0Zm9ybS9Db3JlSVBDL21hYy9Db25uZWN0aW9uTWFjLmNwcCBc
CiAgICAgICAgIFBsYXRmb3JtL21hYy9NYWNoVXRpbGl0aWVzLmNwcCBcCi0gICAgICAgIFBsYXRm
b3JtL21hYy9Xb3JrUXVldWVNYWMuY3BwIFwKICAgICAgICAgUGxhdGZvcm0vbWFjL1NoYXJlZE1l
bW9yeU1hYy5jcHAKIAogfSBlbHNlIHsKICAgICBTT1VSQ0VTICs9IFwKICAgICAgICAgUGxhdGZv
cm0vQ29yZUlQQy91bml4L0F0dGFjaG1lbnRVbml4LmNwcCBcCiAgICAgICAgIFBsYXRmb3JtL0Nv
cmVJUEMvdW5peC9Db25uZWN0aW9uVW5peC5jcHAgXAotICAgICAgICBQbGF0Zm9ybS9xdC9Xb3Jr
UXVldWVRdC5jcHAgXAogICAgICAgICBQbGF0Zm9ybS91bml4L1NoYXJlZE1lbW9yeVVuaXguY3Bw
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9Qcm9j
ZXNzTGF1bmNoZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL1Byb2Nl
c3NMYXVuY2hlci5jcHAKaW5kZXggYmEyMmRkYTJkYTdiYzViNDhkMzM1ODY5YWZhMzgwYzdiYjM2
ODI5ZS4uNjdkZWY3NjgyMWZhMGI1MGRhZmU5YjljZTUxNjhjNWVmZDk4MDMzNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL1Byb2Nlc3NMYXVuY2hlci5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL1Byb2Nlc3NMYXVuY2hlci5j
cHAKQEAgLTI2LDggKzI2LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQcm9j
ZXNzTGF1bmNoZXIuaCIKIAotI2luY2x1ZGUgIldvcmtRdWV1ZS5oIgogI2luY2x1ZGUgPHd0Zi9T
dGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvV29ya1F1ZXVlLmg+CiAKIG5hbWVzcGFjZSBX
ZWJLaXQgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIv
UHJvY2Vzc0xhdW5jaGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvUHJv
Y2Vzc0xhdW5jaGVyLmgKaW5kZXggNzViMmYyN2E2NjVjYTJjY2EwMDc3ODgyM2ZmZjYwN2VkMjRj
YzVkMC4uMTg4NjZlZDIwYTI0ZDc4YjQ3MjllNWUyNDMyYzkwYTI2NWE5YjZiZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL1Byb2Nlc3NMYXVuY2hlci5oCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9Qcm9jZXNzTGF1bmNoZXIuaApA
QCAtMjcsNyArMjcsNyBAQAogI2RlZmluZSBXZWJQcm9jZXNzTGF1bmNoZXJfaAogCiAjaW5jbHVk
ZSAiQ29ubmVjdGlvbi5oIgotI2luY2x1ZGUgIlBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIuaCIK
KyNpbmNsdWRlIDx3dGYvUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oPgogI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9UaHJlYWRMYXVuY2hlci5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL1RocmVhZExhdW5jaGVyLmgKaW5kZXggNDZhNzIw
ODZjZWI4NmY2OGI3ZmFjYzc4OGMyNzU1YzU4MzNjNzU5Zi4uYzA0N2NjMjRmY2Y4OWVlMmIyNzg4
YTkyNjgxMDIwOThmNGYzN2M5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0xhdW5jaGVyL1RocmVhZExhdW5jaGVyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0xhdW5jaGVyL1RocmVhZExhdW5jaGVyLmgKQEAgLTI3LDcgKzI3LDcgQEAKICNkZWZpbmUgVGhy
ZWFkTGF1bmNoZXJfaAogCiAjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgotI2luY2x1ZGUgIlBsYXRm
b3JtUHJvY2Vzc0lkZW50aWZpZXIuaCIKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm1Qcm9jZXNzSWRl
bnRpZmllci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFk
aW5nLmg+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAppbmRleCAzM2M0
OWEzY2EzZDE4NTUwMWVlMzM3MjczZTBhZTUwZWJjYjgxMzRhLi4wMzlmNzVkZjNiMGYzNTY0YjA3
OGI1OTBjMDg3MTk2YWQxN2I3YzZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5oCkBAIC00MCw3ICs0MCw2IEBACiAjZW5kaWYKICNpbmNsdWRlICJMYXllclRyZWVDb250
ZXh0LmgiCiAjaW5jbHVkZSAiTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJv
eHkuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAi
U2FuZGJveEV4dGVuc2lvbi5oIgogI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgogI2luY2x1
ZGUgIldLQmFzZS5oIgpAQCAtNzMsNiArNzIsNyBAQAogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4K
ICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIuaD4KICNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBy
b2Nlc3NQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5o
CmluZGV4IDhlNzY4YmZiNmE4ODlkOWFkNmIzNjAwMDc2OTRiMjU2NzZjZWE2ODYuLjY0MTlhN2Ez
NTM4YzYxZmU4ZDQ1NzljMzA2ZDIzNGI2NTVkZGMxMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmgKQEAgLTI2LDcgKzI2LDYgQEAKICNpZm5kZWYgV2ViUHJv
Y2Vzc1Byb3h5X2gKICNkZWZpbmUgV2ViUHJvY2Vzc1Byb3h5X2gKIAotI2luY2x1ZGUgIlBsYXRm
b3JtUHJvY2Vzc0lkZW50aWZpZXIuaCIKICNpbmNsdWRlICJQbHVnaW5JbmZvU3RvcmUuaCIKICNp
bmNsdWRlICJQcm9jZXNzTGF1bmNoZXIuaCIKICNpbmNsdWRlICJQcm9jZXNzTW9kZWwuaCIKQEAg
LTM5LDYgKzM4LDcgQEAKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGxh
dGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA2MDc3ZjZkM2UzOGE0NTEwMTIzOGI1NDIzNzhjYzI4
N2UwNGRiYWYwLi5lYWQ0NzhhNjg0MDg0NGYyYWVhZDNmNjY0MDNmYWEyMTkxY2MwYjAwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC00NzYsNyArNDc2LDYgQEAKIAkJQjYzNDAzRjkxNDkxMEQ1NzAwMTA3MEI1IC8qIEFQSU9iamVj
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNjM0
MDNGODE0OTEwRDU3MDAxMDcwQjUgLyogQVBJT2JqZWN0LmNwcCAqLzsgfTsKIAkJQjg3OEI2MTUx
MzM0MjhEQzAwNjg4OEU5IC8qIENvcnJlY3Rpb25QYW5lbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjg3OEI2MTMxMzM0MjhEQzAwNjg4OEU5IC8qIENv
cnJlY3Rpb25QYW5lbC5oICovOyB9OwogCQlCODc4QjYxNjEzMzQyOERDMDA2ODg4RTkgLyogQ29y
cmVjdGlvblBhbmVsLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQjg3OEI2MTQxMzM0MjhEQzAwNjg4OEU5IC8qIENvcnJlY3Rpb25QYW5lbC5tbSAqLzsg
fTsKLQkJQkMwMDkyRjgxMTU4MzdBMzAwRTBBRTJBIC8qIFdvcmtRdWV1ZU1hYy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzAwOTJGNjExNTgzN0Ez
MDBFMEFFMkEgLyogV29ya1F1ZXVlTWFjLmNwcCAqLzsgfTsKIAkJQkMwMzJENzUxMEY0Mzc4RDAw
NThDMTVBIC8qIFdlYkNocm9tZUNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQkMwMzJENjAxMEY0Mzc4RDAwNThDMTVBIC8qIFdlYkNocm9tZUNs
aWVudC5oICovOyB9OwogCQlCQzAzMkQ3NzEwRjQzNzhEMDA1OEMxNUEgLyogV2ViQ29udGV4dE1l
bnVDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEJDMDMyRDYyMTBGNDM3OEQwMDU4QzE1QSAvKiBXZWJDb250ZXh0TWVudUNsaWVudC5oICovOyB9
OwogCQlCQzAzMkQ3QjEwRjQzNzhEMDA1OEMxNUEgLyogV2ViRHJhZ0NsaWVudC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMwMzJENjYxMEY0Mzc4RDAw
NThDMTVBIC8qIFdlYkRyYWdDbGllbnQuaCAqLzsgfTsKQEAgLTU2OSw4ICs1NjgsNiBAQAogCQlC
QzJEMDIxNzEyQUM0MUNCMDBFNzMyQTMgLyogU2FtZURvY3VtZW50TmF2aWdhdGlvblR5cGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMkQwMjE2MTJB
QzQxQ0IwMEU3MzJBMyAvKiBTYW1lRG9jdW1lbnROYXZpZ2F0aW9uVHlwZS5oICovOyB9OwogCQlC
QzJEMDIxOTEyQUM0MjZDMDBFNzMyQTMgLyogV0tQYWdlTG9hZFR5cGVzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzJEMDIxODEyQUM0MjZDMDBFNzMy
QTMgLyogV0tQYWdlTG9hZFR5cGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJQkMyREZCQTMxMkE3NjFBNTAwRTczMkEzIC8qIFdlYlByZWZlcmVu
Y2VzQ0YuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QkMyREZCQTIxMkE3NjFBNTAwRTczMkEzIC8qIFdlYlByZWZlcmVuY2VzQ0YuY3BwICovOyB9Owot
CQlCQzJFNkU4RDExNDE5NzE1MDBBNjNCMUUgLyogV29ya1F1ZXVlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMkU2RTdEMTE0MTk3MEMwMEE2M0Ix
RSAvKiBXb3JrUXVldWUuY3BwICovOyB9OwotCQlCQzJFNkU4RTExNDE5NzE1MDBBNjNCMUUgLyog
V29ya1F1ZXVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCQzJFNkU3RTExNDE5NzBDMDBBNjNCMUUgLyogV29ya1F1ZXVlLmggKi87IH07CiAJCUJDMzA2
NUM0MTI1OTJGODkwMEU3MTI3OCAvKiBXZWJQcm9jZXNzTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMzMDY1QzMxMjU5MkY4OTAwRTcxMjc4IC8q
IFdlYlByb2Nlc3NNYWMubW0gKi87IH07CiAJCUJDMzA2NUZBMTI1OTM0NEUwMEU3MTI3OCAvKiBD
YWNoZU1vZGVsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCQzMwNjVGOTEyNTkzNDRFMDBFNzEyNzggLyogQ2FjaGVNb2RlbC5oICovOyB9OwogCQlCQzMw
NjZCRTEyNUE0NDIxMDBFNzEyNzggLyogV2ViUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzMwNjZCQzEyNUE0
NDIxMDBFNzEyNzggLyogV2ViUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CkBAIC0x
NTE0LDcgKzE1MTEsNiBAQAogCQlCNjM0MDNGODE0OTEwRDU3MDAxMDcwQjUgLyogQVBJT2JqZWN0
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFQSU9iamVjdC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI4NzhCNjEzMTMzNDI4REMwMDY4ODhFOSAv
KiBDb3JyZWN0aW9uUGFuZWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29y
cmVjdGlvblBhbmVsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI4NzhCNjE0MTMz
NDI4REMwMDY4ODhFOSAvKiBDb3JyZWN0aW9uUGFuZWwubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBDb3JyZWN0aW9uUGFuZWwubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUJDMDA5MkY2MTE1ODM3QTMwMEUwQUUyQSAvKiBXb3JrUXVldWVNYWMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV29ya1F1ZXVlTWFjLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMwMzJENjAxMEY0Mzc4RDAwNThDMTVBIC8q
IFdlYkNocm9tZUNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJD
aHJvbWVDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMwMzJENjIxMEY0
Mzc4RDAwNThDMTVBIC8qIFdlYkNvbnRleHRNZW51Q2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdlYkNvbnRleHRNZW51Q2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUJDMDMyRDY2MTBGNDM3OEQwMDU4QzE1QSAvKiBXZWJEcmFnQ2xpZW50Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkRyYWdDbGllbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2MTMsOCArMTYwOSw2IEBACiAJCUJDMkQwMjE2MTJB
QzQxQ0IwMEU3MzJBMyAvKiBTYW1lRG9jdW1lbnROYXZpZ2F0aW9uVHlwZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTYW1lRG9jdW1lbnROYXZpZ2F0aW9uVHlwZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzJEMDIxODEyQUM0MjZDMDBFNzMyQTMgLyogV0tQ
YWdlTG9hZFR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLUGFnZUxv
YWRUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzJERkJBMjEyQTc2MUE1
MDBFNzMyQTMgLyogV2ViUHJlZmVyZW5jZXNDRi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBXZWJQcmVmZXJlbmNlc0NGLmNwcDsgcGF0aCA9IGNmL1dlYlByZWZlcmVu
Y2VzQ0YuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCQzJFNkU3RDExNDE5NzBD
MDBBNjNCMUUgLyogV29ya1F1ZXVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFdvcmtRdWV1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUJDMkU2
RTdFMTE0MTk3MEMwMEE2M0IxRSAvKiBXb3JrUXVldWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV29ya1F1ZXVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJD
MzA2NUMzMTI1OTJGODkwMEU3MTI3OCAvKiBXZWJQcm9jZXNzTWFjLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViUHJvY2Vzc01hYy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQkMzMDY1RjkxMjU5MzQ0RTAwRTcxMjc4IC8qIENhY2hlTW9kZWwu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FjaGVNb2RlbC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlCQzMwNjZCOTEyNUE0MzYzMDBFNzEyNzggLyogV2ViUHJv
Y2Vzcy5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXZWJQcm9jZXNzLm1lc3Nh
Z2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjI5OCw3ICsyMjkyLDYgQEAK
IAkJCQkxQTI0QkYzOTEyMDg5NkE2MDBGQkIwNTkgLyogU2hhcmVkTWVtb3J5TWFjLmNwcCAqLywK
IAkJCQkyOTZCRDg1QjE1MDE5QkMzMDA3MUY0MjQgLyogU3RyaW5nVXRpbGl0aWVzLmggKi8sCiAJ
CQkJMjk2QkQ4NUMxNTAxOUJDMzAwNzFGNDI0IC8qIFN0cmluZ1V0aWxpdGllcy5tbSAqLywKLQkJ
CQlCQzAwOTJGNjExNTgzN0EzMDBFMEFFMkEgLyogV29ya1F1ZXVlTWFjLmNwcCAqLywKIAkJCSk7
CiAJCQlwYXRoID0gbWFjOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTMzMzYsOCAr
MzMyOSw2IEBACiAJCQkJQzBFM0FBNDQxMjA5RTJCQTAwQTQ5RDAxIC8qIE1vZHVsZS5oICovLAog
CQkJCUJDODc4MEZCMTE2MUMyQjgwMENDMjc2OCAvKiBQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVy
LmggKi8sCiAJCQkJMUEyNEJFRDMxMjA4OTREMTAwRkJCMDU5IC8qIFNoYXJlZE1lbW9yeS5oICov
LAotCQkJCUJDMkU2RTdEMTE0MTk3MEMwMEE2M0IxRSAvKiBXb3JrUXVldWUuY3BwICovLAotCQkJ
CUJDMkU2RTdFMTE0MTk3MEMwMEE2M0IxRSAvKiBXb3JrUXVldWUuaCAqLywKIAkJCSk7CiAJCQlw
YXRoID0gUGxhdGZvcm07CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtNDE4OSw3ICs0
MTgwLDYgQEAKIAkJCQlCQzg2OTlCNTExNkFBREFBMDAyQTkyNUIgLyogV0tWaWV3LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzg2OTlCNzExNkFBREFBMDAyQTkyNUIgLyogV0tWaWV3SW50ZXJuYWwu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJGQTYxNzlGMTJGMEI5OUQwMDMzRTBDQSAvKiBXS1ZpZXdQ
cml2YXRlLmggaW4gSGVhZGVycyAqLywKLQkJCQlCQzJFNkU4RTExNDE5NzE1MDBBNjNCMUUgLyog
V29ya1F1ZXVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMTdCRjk5NjE0RDBBNzNFMDBBNUEwNjkg
LyogTmV0c2NhcGVTYW5kYm94RnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0UwOTM3
ODE0RkIxMjhDMDAxMTM4RDkgLyogTGF5ZXJIb3N0aW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMjk2QkQ4NUQxNTAxOUJDMzAwNzFGNDI0IC8qIFN0cmluZ1V0aWxpdGllcy5oIGluIEhl
YWRlcnMgKi8sCkBAIC00OTM2LDggKzQ5MjYsNiBAQAogCQkJCUJDNDA3NjJDMTI0RkYwNDAwMDY4
RjIwQSAvKiBXS1VSTFJlc3BvbnNlTlMubW0gaW4gU291cmNlcyAqLywKIAkJCQlGNjExM0UyODEy
NkNFMTlCMDA1N0QwQTcgLyogV0tVc2VyQ29udGVudFVSTFBhdHRlcm4uY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQkM4Njk5QjYxMTZBQURBQTAwMkE5MjVCIC8qIFdLVmlldy5tbSBpbiBTb3VyY2Vz
ICovLAotCQkJCUJDMkU2RThEMTE0MTk3MTUwMEE2M0IxRSAvKiBXb3JrUXVldWUuY3BwIGluIFNv
dXJjZXMgKi8sCi0JCQkJQkMwMDkyRjgxMTU4MzdBMzAwRTBBRTJBIC8qIFdvcmtRdWV1ZU1hYy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlFMTdCRjk5ODE0RDBBQTgzMDBBNUEwNjkgLyogTmV0c2Nh
cGVTYW5kYm94RnVuY3Rpb25zLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNFMDkzNzcxNEZCMTI4
QzAwMTEzOEQ5IC8qIExheWVySG9zdGluZ0NvbnRleHQubW0gaW4gU291cmNlcyAqLywKIAkJCQky
OTZCRDg1RTE1MDE5QkMzMDA3MUY0MjQgLyogU3RyaW5nVXRpbGl0aWVzLm1tIGluIFNvdXJjZXMg
Ki8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi93aW4vV2ViS2l0Mi52Y3Byb2ogYi9Tb3Vy
Y2UvV2ViS2l0Mi93aW4vV2ViS2l0Mi52Y3Byb2oKaW5kZXggMGEzOGM0YjgyMmE4MjQ3OThmZjhj
NGVlMmYzY2QyNDg5YjdiNmQwZi4uMzcyNTJiNjE0MzgyNzY5Y2YyYmFlNmZhNWEzMDM2ZDMzYTAz
MjVlNCAxMDA3NTUKLS0tIGEvU291cmNlL1dlYktpdDIvd2luL1dlYktpdDIudmNwcm9qCisrKyBi
L1NvdXJjZS9XZWJLaXQyL3dpbi9XZWJLaXQyLnZjcHJvagpAQCAtMzkzNCwxNCArMzkzNCw2IEBA
CiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxQbGF0Zm9ybVxTaGFyZWRNZW1vcnkuaCIKIAkJCQk+CiAJ
CQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cUGxhdGZvcm1cV29ya1F1
ZXVlLmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0i
Li5cUGxhdGZvcm1cV29ya1F1ZXVlLmgiCi0JCQkJPgotCQkJPC9GaWxlPgogCQkJPEZpbHRlcgog
CQkJCU5hbWU9ImNnIgogCQkJCT4KQEAgLTM5ODEsMTAgKzM5NzMsNiBAQAogCQkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXFBsYXRmb3JtXHdpblxTaGFyZWRNZW1vcnlXaW4uY3BwIgogCQkJCQk+CiAJCQkJ
PC9GaWxlPgotCQkJCTxGaWxlCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cUGxhdGZvcm1cd2luXFdv
cmtRdWV1ZVdpbi5jcHAiCi0JCQkJCT4KLQkJCQk8L0ZpbGU+CiAJCQk8L0ZpbHRlcj4KIAkJCTxG
aWx0ZXIKIAkJCQlOYW1lPSJDb3JlSVBDIgo=
</data>
<flag name="commit-queue"
          id="164072"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
      

    </bug>

</bugzilla>