<?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>177869</bug_id>
          
          <creation_ts>2017-10-04 05:43:19 -0700</creation_ts>
          <short_desc>Make RealtimeIncomingVideoSources and RealtimeOutgoingVideoSources port agnostic</short_desc>
          <delta_ts>2017-10-16 07:45:42 -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>WebRTC</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alejandro G. Castro">alex</reporter>
          <assigned_to name="Alejandro G. Castro">alex</assigned_to>
          <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1356365</commentid>
    <comment_count>0</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2017-10-04 05:43:19 -0700</bug_when>
    <thetext>We need this in the GTK port in order to use libwebrtc backend and endpoint classes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356369</commentid>
    <comment_count>1</comment_count>
      <attachid>322658</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2017-10-04 05:54:08 -0700</bug_when>
    <thetext>Created attachment 322658
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356370</commentid>
    <comment_count>2</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-10-04 05:55:50 -0700</bug_when>
    <thetext>Attachment 322658 did not pass style-queue:


ERROR: Source/WebCore/platform/mediastream/RealtimeOutgoingVideoSource.h:73:  is_screencast is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/mediastream/RealtimeOutgoingVideoSource.h:74:  needs_denoising is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 2 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356377</commentid>
    <comment_count>3</comment_count>
      <attachid>322663</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2017-10-04 06:22:10 -0700</bug_when>
    <thetext>Created attachment 322663
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356379</commentid>
    <comment_count>4</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-10-04 06:23:50 -0700</bug_when>
    <thetext>Attachment 322663 did not pass style-queue:


ERROR: Source/WebCore/platform/mediastream/RealtimeOutgoingVideoSource.h:83:  is_screencast is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/mediastream/RealtimeOutgoingVideoSource.h:84:  needs_denoising is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 2 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356380</commentid>
    <comment_count>5</comment_count>
      <attachid>322665</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2017-10-04 06:28:36 -0700</bug_when>
    <thetext>Created attachment 322665
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356382</commentid>
    <comment_count>6</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-10-04 06:30:32 -0700</bug_when>
    <thetext>Attachment 322665 did not pass style-queue:


ERROR: Source/WebCore/platform/mediastream/RealtimeOutgoingVideoSource.h:83:  is_screencast is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/mediastream/RealtimeOutgoingVideoSource.h:84:  needs_denoising is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 2 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356421</commentid>
    <comment_count>7</comment_count>
      <attachid>322672</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2017-10-04 08:08:38 -0700</bug_when>
    <thetext>Created attachment 322672
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356422</commentid>
    <comment_count>8</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-10-04 08:10:24 -0700</bug_when>
    <thetext>Attachment 322672 did not pass style-queue:


ERROR: Source/WebCore/platform/mediastream/RealtimeOutgoingVideoSource.h:85:  is_screencast is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/mediastream/RealtimeOutgoingVideoSource.h:86:  needs_denoising is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 2 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356429</commentid>
    <comment_count>9</comment_count>
      <attachid>322675</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-10-04 08:51:54 -0700</bug_when>
    <thetext>Created attachment 322675
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356430</commentid>
    <comment_count>10</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-10-04 08:54:09 -0700</bug_when>
    <thetext>Attachment 322675 did not pass style-queue:


ERROR: Source/WebCore/platform/mediastream/RealtimeOutgoingVideoSource.h:85:  is_screencast is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/mediastream/RealtimeOutgoingVideoSource.h:86:  needs_denoising is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 2 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356438</commentid>
    <comment_count>11</comment_count>
      <attachid>322679</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2017-10-04 09:03:54 -0700</bug_when>
    <thetext>Created attachment 322679
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356439</commentid>
    <comment_count>12</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-10-04 09:05:57 -0700</bug_when>
    <thetext>Attachment 322679 did not pass style-queue:


ERROR: Source/WebCore/platform/mediastream/RealtimeOutgoingVideoSource.h:85:  is_screencast is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/mediastream/RealtimeOutgoingVideoSource.h:86:  needs_denoising is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 2 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356472</commentid>
    <comment_count>13</comment_count>
      <attachid>322685</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2017-10-04 10:00:03 -0700</bug_when>
    <thetext>Created attachment 322685
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356473</commentid>
    <comment_count>14</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-10-04 10:03:05 -0700</bug_when>
    <thetext>Attachment 322685 did not pass style-queue:


ERROR: Source/WebCore/platform/mediastream/RealtimeOutgoingVideoSource.h:85:  is_screencast is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/mediastream/RealtimeOutgoingVideoSource.h:86:  needs_denoising is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 2 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356935</commentid>
    <comment_count>15</comment_count>
      <attachid>322810</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2017-10-05 02:47:21 -0700</bug_when>
    <thetext>Created attachment 322810
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356936</commentid>
    <comment_count>16</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-10-05 02:49:41 -0700</bug_when>
    <thetext>Attachment 322810 did not pass style-queue:


ERROR: Source/WebCore/platform/mediastream/RealtimeOutgoingVideoSource.h:85:  is_screencast is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/mediastream/RealtimeOutgoingVideoSource.h:86:  needs_denoising is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 2 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356949</commentid>
    <comment_count>17</comment_count>
      <attachid>322810</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-10-05 03:58:09 -0700</bug_when>
    <thetext>Comment on attachment 322810
Patch

r=me provided that bots are happy.
Some comments below to improve the code since we are touching it.

Thinking about it, I guess RealtimeXXMac.h/.cpp should probably named RealtimeXXCocoa.h/.cpp

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

&gt; Source/WebCore/platform/mediastream/RealtimeIncomingVideoSource.cpp:47
&gt; +    auto source = RealtimeIncomingVideoSourceMac::create(WTFMove(videoTrack), WTFMove(trackId));

We can probably move RealtimeIncomingVideoSource::create implementation to RealtimeIncomingVideoSourceMac.cpp.
That would remove the FIXME and the need to include RealtimeIncomingVideoSourceMac.h here.
We duplicate source-&gt;start() but this is probably ok.

&gt; Source/WebCore/platform/mediastream/RealtimeIncomingVideoSource.h:67
&gt; +    void OnFrame(const webrtc::VideoFrame&amp;) override { };

Can we remove this one since GTK is not compiling with LIBWEBRTC on currently?

&gt; Source/WebCore/platform/mediastream/RealtimeOutgoingVideoSource.cpp:49
&gt; +    return RealtimeOutgoingVideoSourceMac::create(WTFMove(videoSource));

Ditto here for moving this to RealtimeOutgoingVideoSourceMac.cpp.

&gt; Source/WebCore/platform/mediastream/RealtimeOutgoingVideoSource.h:87
&gt; +    bool GetStats(Stats*) final;

Could be inlined since it is a one liner function.

&gt; Source/WebCore/platform/mediastream/RealtimeOutgoingVideoSource.h:99
&gt; +    virtual void videoSampleAvailable(MediaSample&amp;) { };

Since videoSampleAvailable would be made virtual, maybe it is best to kill it and implement the already virtual sampleBufferUpdated directly in the port specific classes.

&gt; Source/WebCore/platform/mediastream/mac/RealtimeIncomingVideoSourceMac.cpp:149
&gt; +    callOnMainThread([protectedThis = WTFMove(protectedThis), sample = WTFMove(sample), width, height, rotation] {

protectedThis = makeRef(*this)

&gt; Source/WebCore/platform/mediastream/mac/RealtimeIncomingVideoSourceMac.h:16
&gt; + *    software without specific prior written permission.

Remove this third clause here and in other Mac.h/.cpp files since they are new.

&gt; Source/WebCore/platform/mediastream/mac/RealtimeOutgoingVideoSourceMac.h:40
&gt; +    ~RealtimeOutgoingVideoSourceMac() { }

Probably not needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356964</commentid>
    <comment_count>18</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2017-10-05 04:17:53 -0700</bug_when>
    <thetext>(In reply to youenn fablet from comment #17)
&gt; Comment on attachment 322810 [details]
&gt; Patch
&gt; 
&gt; r=me provided that bots are happy.

There is still some compilation issue with the mac ones I try to find.

&gt; Some comments below to improve the code since we are touching it.
&gt; 
&gt; Thinking about it, I guess RealtimeXXMac.h/.cpp should probably named
&gt; RealtimeXXCocoa.h/.cpp
&gt; 

Right.

&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=322810&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/mediastream/RealtimeIncomingVideoSource.cpp:47
&gt; &gt; +    auto source = RealtimeIncomingVideoSourceMac::create(WTFMove(videoTrack), WTFMove(trackId));
&gt; 
&gt; We can probably move RealtimeIncomingVideoSource::create implementation to
&gt; RealtimeIncomingVideoSourceMac.cpp.
&gt; That would remove the FIXME and the need to include
&gt; RealtimeIncomingVideoSourceMac.h here.
&gt; We duplicate source-&gt;start() but this is probably ok.
&gt; 

Right.

&gt; &gt; Source/WebCore/platform/mediastream/RealtimeIncomingVideoSource.h:67
&gt; &gt; +    void OnFrame(const webrtc::VideoFrame&amp;) override { };
&gt; 
&gt; Can we remove this one since GTK is not compiling with LIBWEBRTC on
&gt; currently?
&gt; 

Right, until we upload the branch.

&gt; &gt; Source/WebCore/platform/mediastream/RealtimeOutgoingVideoSource.cpp:49
&gt; &gt; +    return RealtimeOutgoingVideoSourceMac::create(WTFMove(videoSource));
&gt; 
&gt; Ditto here for moving this to RealtimeOutgoingVideoSourceMac.cpp.
&gt; 

Right.

&gt; &gt; Source/WebCore/platform/mediastream/RealtimeOutgoingVideoSource.h:87
&gt; &gt; +    bool GetStats(Stats*) final;
&gt; 
&gt; Could be inlined since it is a one liner function.
&gt; 

Right.

&gt; &gt; Source/WebCore/platform/mediastream/RealtimeOutgoingVideoSource.h:99
&gt; &gt; +    virtual void videoSampleAvailable(MediaSample&amp;) { };
&gt; 
&gt; Since videoSampleAvailable would be made virtual, maybe it is best to kill
&gt; it and implement the already virtual sampleBufferUpdated directly in the
&gt; port specific classes.
&gt; 

Right.

&gt; &gt; Source/WebCore/platform/mediastream/mac/RealtimeIncomingVideoSourceMac.cpp:149
&gt; &gt; +    callOnMainThread([protectedThis = WTFMove(protectedThis), sample = WTFMove(sample), width, height, rotation] {
&gt; 
&gt; protectedThis = makeRef(*this)
&gt; 

Right

&gt; &gt; Source/WebCore/platform/mediastream/mac/RealtimeIncomingVideoSourceMac.h:16
&gt; &gt; + *    software without specific prior written permission.
&gt; 
&gt; Remove this third clause here and in other Mac.h/.cpp files since they are
&gt; new.
&gt; 

Right.

&gt; &gt; Source/WebCore/platform/mediastream/mac/RealtimeOutgoingVideoSourceMac.h:40
&gt; &gt; +    ~RealtimeOutgoingVideoSourceMac() { }
&gt; 
&gt; Probably not needed.

I&apos;ll try it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356979</commentid>
    <comment_count>19</comment_count>
      <attachid>322825</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2017-10-05 05:18:54 -0700</bug_when>
    <thetext>Created attachment 322825
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356983</commentid>
    <comment_count>20</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-10-05 05:21:35 -0700</bug_when>
    <thetext>Attachment 322825 did not pass style-queue:


ERROR: Source/WebCore/platform/mediastream/RealtimeOutgoingVideoSource.h:85:  is_screencast is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/mediastream/RealtimeOutgoingVideoSource.h:86:  needs_denoising is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 2 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356988</commentid>
    <comment_count>21</comment_count>
      <attachid>322829</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2017-10-05 05:32:40 -0700</bug_when>
    <thetext>Created attachment 322829
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356990</commentid>
    <comment_count>22</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-10-05 05:35:53 -0700</bug_when>
    <thetext>Attachment 322829 did not pass style-queue:


ERROR: Source/WebCore/platform/mediastream/RealtimeOutgoingVideoSource.h:85:  is_screencast is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/mediastream/RealtimeOutgoingVideoSource.h:86:  needs_denoising is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 2 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356993</commentid>
    <comment_count>23</comment_count>
      <attachid>322830</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2017-10-05 05:44:01 -0700</bug_when>
    <thetext>Created attachment 322830
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356996</commentid>
    <comment_count>24</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-10-05 05:47:00 -0700</bug_when>
    <thetext>Attachment 322830 did not pass style-queue:


ERROR: Source/WebCore/platform/mediastream/RealtimeOutgoingVideoSource.h:85:  is_screencast is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/mediastream/RealtimeOutgoingVideoSource.h:86:  needs_denoising is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 2 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1359107</commentid>
    <comment_count>25</comment_count>
      <attachid>323403</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2017-10-11 03:49:03 -0700</bug_when>
    <thetext>Created attachment 323403
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1359109</commentid>
    <comment_count>26</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-10-11 03:52:01 -0700</bug_when>
    <thetext>Attachment 323403 did not pass style-queue:


ERROR: Source/WebCore/platform/mediastream/RealtimeOutgoingVideoSource.h:85:  is_screencast is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/mediastream/RealtimeOutgoingVideoSource.h:86:  needs_denoising is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 2 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1359113</commentid>
    <comment_count>27</comment_count>
      <attachid>323405</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2017-10-11 03:58:40 -0700</bug_when>
    <thetext>Created attachment 323405
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1359114</commentid>
    <comment_count>28</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-10-11 04:00:09 -0700</bug_when>
    <thetext>Attachment 323405 did not pass style-queue:


ERROR: Source/WebCore/platform/mediastream/RealtimeOutgoingVideoSource.h:85:  is_screencast is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/mediastream/RealtimeOutgoingVideoSource.h:86:  needs_denoising is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 2 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1359924</commentid>
    <comment_count>29</comment_count>
      <attachid>323636</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2017-10-12 22:18:08 -0700</bug_when>
    <thetext>Created attachment 323636
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1359926</commentid>
    <comment_count>30</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-10-12 22:20:15 -0700</bug_when>
    <thetext>Attachment 323636 did not pass style-queue:


ERROR: Source/WebCore/platform/mediastream/RealtimeOutgoingVideoSource.h:85:  is_screencast is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/mediastream/RealtimeOutgoingVideoSource.h:86:  needs_denoising is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 2 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1360752</commentid>
    <comment_count>31</comment_count>
      <attachid>323636</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-10-16 07:44:56 -0700</bug_when>
    <thetext>Comment on attachment 323636
Patch

Clearing flags on attachment: 323636

Committed r223406: &lt;https://trac.webkit.org/changeset/223406&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1360753</commentid>
    <comment_count>32</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-10-16 07:44:58 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1360754</commentid>
    <comment_count>33</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-10-16 07:45:42 -0700</bug_when>
    <thetext>&lt;rdar://problem/35006338&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322658</attachid>
            <date>2017-10-04 05:54:08 -0700</date>
            <delta_ts>2017-10-04 06:22:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177869-20171004145406.patch</filename>
            <type>text/plain</type>
            <size>77721</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIyODM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjU0NjFlNWRhZjY2YjU4
N2NiNjU4MzAxNmNlZDg4YmFlNzhiOTJlZS4uYjA0ZDg3OTEzMDAxMDI4MjBiZjU3YTAyNjUzZmMz
Mzc5YWJlMGExNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDE3LTEwLTA0ICBBbGVq
YW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisgICAgICAgIE1ha2UgUmVhbHRp
bWVJbmNvbWluZ0F1ZGlvU291cmNlcyBhbmQgUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlcyBw
b3J0IGFnbm9zdGljCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzc4NjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBSZWZhY3RvciB0aGUgUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlIGFuZCBSZWFsdGlt
ZU91dGdvaW5nQXVkaW9Tb3VyY2UgY2xhc3NlcywKKyAgICAgICAgbW92ZSB0aGUgbWFjIHNwZWNp
ZmljIGNvZGUgdG8gYSBkaWZmZXJlbnQgY2xhc3MuIFRoaXMgd2F5IHdlIGNhbiB1c2UgdGhlbSBm
cm9tCisgICAgICAgIG90aGVyIHBvcnRzLgorCisgICAgICAgIE5vIG5ldyBmdW5jdGlvbmFsaXR5
LCBqdXN0IGEgcmVmYWN0b3IuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAg
KiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0v
bWVkaWFzdHJlYW0vUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6OlJlYWx0aW1lSW5jb21p
bmdWaWRlb1NvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9T
b3VyY2U6OnN0YXJ0UHJvZHVjaW5nRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUlu
Y29taW5nVmlkZW9Tb3VyY2U6OnNldFNvdXJjZVRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
YWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6c3RvcFByb2R1Y2luZ0RhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlOjpjYXBhYmlsaXRpZXMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlOjpzZXR0aW5n
cyBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVJbmNvbWlu
Z1ZpZGVvU291cmNlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL21hYy9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuaC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuY3BwOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lT3V0
Z29pbmdWaWRlb1NvdXJjZS5jcHAuCisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5n
VmlkZW9Tb3VyY2U6OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVh
bHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmguCisg
ICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnZpZGVvU2FtcGxl
QXZhaWxhYmxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVJ
bmNvbWluZ1ZpZGVvU291cmNlTWFjLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuY3BwLgor
ICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTWFjOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTWFjOjpSZWFs
dGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWMpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJ
bmNvbWluZ1ZpZGVvU291cmNlTWFjOjpwaXhlbEJ1ZmZlckZyb21WaWRlb0ZyYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1hYzo6T25GcmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWM6OnByb2Nlc3NO
ZXdTYW1wbGUpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUlu
Y29taW5nVmlkZW9Tb3VyY2VNYWMuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuaC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNl
TWFjLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nVmlkZW9T
b3VyY2VNYWM6OlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZU1hYyk6CisgICAgICAgIChXZWJD
b3JlOjpSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VNYWM6OnZpZGVvU2FtcGxlQXZhaWxhYmxl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1Zp
ZGVvU291cmNlTWFjLmg6IEFkZGVkLgorCiAyMDE3LTEwLTA0ICBNaWNoYWVsIENhdGFuemFybyAg
PG1jYXRhbnphcm9AaWdhbGlhLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OKHIyMjIzOTIpOiBb
V1BFXVtHVEtdIE1hbnkgZm9ybXMgdGVzdHMgYXJlIGZhaWxpbmcgZHVlIHRvIGJyb2tlbiBldmVu
dCB0aW1lc3RhbXBzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBi
L1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDFjYzE2YzdkMWZhYmRlZjY1Nzhi
NDIyMTExZGJiNTY1ZTM5MDQ4OWQuLjhjYjVjNDQwZTBhM2VmZDlkNTg3ZGFiOTA3ZGVhYmQ3N2Zi
Y2MzMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0yNTUxLDkgKzI1NTEsMTEgQEAgc2V0KFdl
YkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3Vy
Y2VTdXBwb3J0ZWRDb25zdHJhaW50cy5jcHAKICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SVENJ
Y2VDYW5kaWRhdGVEZXNjcmlwdG9yLmNwcAogICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL1JUQ1Nl
c3Npb25EZXNjcmlwdGlvbkRlc2NyaXB0b3IuY3BwCisgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0v
UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmNwcAogICAgIHBsYXRmb3JtL21lZGlhc3RyZWFt
L1JlYWx0aW1lTWVkaWFTb3VyY2UuY3BwCiAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRp
bWVNZWRpYVNvdXJjZUNlbnRlci5jcHAKICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGlt
ZU1lZGlhU291cmNlU2V0dGluZ3MuY3BwCisgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRp
bWVPdXRnb2luZ1ZpZGVvU291cmNlLmNwcAogICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL1NEUFBy
b2Nlc3NvclNjcmlwdFJlc291cmNlLmNwcAogCiAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGli
d2VicnRjL0xpYldlYlJUQ1Byb3ZpZGVyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGIwZTc1NDk3MGIwNDBiM2M1NTBiMDcx
NzA1MDk2MWJkZGQ4NzZmMjUuLjRkNjEyNTA1MWUwMjUyMzRkN2MwNGUyNjI1NDNjNWE4NzcwYzA0
NGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKQEAgLTI3NTQsNyArMjc1NCw5IEBACiAJCTVDRDlGNTY3MUFBMEY3NDIwMERBNDVGRiAv
KiBERkFCeXRlY29kZUNvbXBpbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1QzM5MzA1RjFBQTBGNkE5MDAyOUM4MTYgLyogREZBQnl0ZWNvZGVDb21w
aWxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTVDRDlGNTY4MUFBMEY3NDYwMERBNDVGRiAvKiBERkFCeXRlY29kZUludGVycHJldGVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzM5MzA2MTFBQTBG
NkE5MDAyOUM4MTYgLyogREZBQnl0ZWNvZGVJbnRlcnByZXRlci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTVDREQ4MzNEMUU0MzI0RDkwMDYyMUU5
MiAvKiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNERDgzM0IxRTQzMjRCQjAwNjIxRTkyIC8qIFJl
YWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5jcHAgKi87IH07CisJCTVDREQ4MzNEMUU0MzI0RDkw
MDYyMUU5MyAvKiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VNYWMuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNERDgzM0IxRTQzMjRCQjAwNjIx
RTkzIC8qIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZU1hYy5jcHAgKi87IH07CiAJCTVDREQ4
MzNFMUU0MzI0REMwMDYyMUU5MiAvKiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNERDgzMzkxRTQz
MjRCQjAwNjIxRTkyIC8qIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5jcHAgKi87IH07CisJ
CTVDREQ4MzNFMUU0MzI0REMwMDYyMUU5MyAvKiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VN
YWMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNE
RDgzMzkxRTQzMjRCQjAwNjIxRTkzIC8qIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1hYy5j
cHAgKi87IH07CiAJCTVDREQ4MzY0MUU0MzI1QTAwMDYyMUU5MiAvKiBMaWJXZWJSVENEYXRhQ2hh
bm5lbEhhbmRsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNUNERDgzM0YxRTQzMjUzRDAwNjIxRTkyIC8qIExpYldlYlJUQ0RhdGFDaGFubmVsSGFu
ZGxlci5jcHAgKi87IH07CiAJCTVDREZBNkM4MUFBNEYyREEwMEVBODc0NiAvKiBDb250ZW50RXh0
ZW5zaW9uQWN0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNUNERkE2QzcxQUE0RjJEQTAwRUE4NzQ2IC8qIENvbnRlbnRFeHRlbnNpb25BY3Rpb25z
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNUNF
NUQ5QUIxREI4OUEwMzAwQ0U3QThEIC8qIEpTVGV4dERlY29kZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNFNUQ5QTcxREI4OTlGQzAwQ0U3QThE
IC8qIEpTVGV4dERlY29kZXIuY3BwICovOyB9OwpAQCAtMTA3MDQsOCArMTA3MDYsMTAgQEAKIAkJ
NUNCQzhEQUExQUFBMzAyMjAwRTFDODAzIC8qIE1lZGlhQWNjZXNzaWJpbGl0eVNvZnRMaW5rLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlhQWNjZXNzaWJpbGl0
eVNvZnRMaW5rLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNCQzhEQUIxQUFB
MzAyMjAwRTFDODAzIC8qIE1lZGlhQWNjZXNzaWJpbGl0eVNvZnRMaW5rLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhQWNjZXNzaWJpbGl0eVNvZnRMaW5rLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDREQ4MzM5MUU0MzI0QkIwMDYyMUU5MiAvKiBSZWFs
dGltZUluY29taW5nVmlkZW9Tb3VyY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNUNERDgzMzkxRTQzMjRCQjAwNjIxRTkzIC8qIFJlYWx0aW1lSW5jb21p
bmdWaWRlb1NvdXJjZU1hYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1Q0REODMzQTFFNDMyNEJCMDA2MjFFOTIgLyogUmVhbHRpbWVJbmNvbWluZ1Zp
ZGVvU291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlYWx0aW1lSW5j
b21pbmdWaWRlb1NvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Q0REODMz
QjFFNDMyNEJCMDA2MjFFOTIgLyogUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1Nv
dXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDREQ4MzNCMUU0MzI0QkIw
MDYyMUU5MyAvKiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VNYWMuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTWFj
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNERDgzM0MxRTQzMjRCQjAwNjIx
RTkyIC8qIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNUNERDgzM0YxRTQzMjUzRDAwNjIxRTkyIC8qIExpYldlYlJUQ0Rh
dGFDaGFubmVsSGFuZGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBMaWJXZWJSVENEYXRhQ2hhbm5lbEhhbmRsZXIuY3BwOyBwYXRoID0gbGlid2VicnRjL0xpYldl
YlJUQ0RhdGFDaGFubmVsSGFuZGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTVDREQ4MzQwMUU0MzI1M0QwMDYyMUU5MiAvKiBMaWJXZWJSVENEYXRhQ2hhbm5lbEhhbmRsZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTGliV2ViUlRDRGF0YUNoYW5uZWxI
YW5kbGVyLmg7IHBhdGggPSBsaWJ3ZWJydGMvTGliV2ViUlRDRGF0YUNoYW5uZWxIYW5kbGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjUzNyw2ICsxNjU0MSw4IEBACiAJCQkJ
MDdGRkRFNjYxODFBRUQ0MjAwNzJENDA5IC8qIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmNwcCAq
LywKIAkJCQkwN0ZGREU2NzE4MUFFRDQyMDA3MkQ0MDkgLyogTWVkaWFTdHJlYW1UcmFja1ByaXZh
dGUuaCAqLywKIAkJCQk1RUJCODkzODFDNzdCREE0MDBDNjVENDEgLyogUGVlck1lZGlhRGVzY3Jp
cHRpb24uaCAqLywKKwkJCQk1Q0REODMzOTFFNDMyNEJCMDA2MjFFOTIgLyogUmVhbHRpbWVJbmNv
bWluZ1ZpZGVvU291cmNlLmNwcCAqLywKKwkJCQk1Q0REODMzQTFFNDMyNEJCMDA2MjFFOTIgLyog
UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmggKi8sCiAJCQkJNEE0RjY1NkIxQUE5OTdGMTAw
RTM4Q0REIC8qIFJlYWx0aW1lTWVkaWFTb3VyY2UuY3BwICovLAogCQkJCTRBNEY2NTZDMUFBOTk3
RjEwMEUzOENERCAvKiBSZWFsdGltZU1lZGlhU291cmNlLmggKi8sCiAJCQkJNEE0RjY1NkQxQUE5
OTdGMTAwRTM4Q0REIC8qIFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMuaCAqLywKQEAg
LTE2NTQ2LDYgKzE2NTUyLDggQEAKIAkJCQk0QTRGNjU2RjFBQTk5N0YxMDBFMzhDREQgLyogUmVh
bHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzLmggKi8sCiAJCQkJMkVDNDFERTIxQzA0MTBBMzAwRDI5
NEZFIC8qIFJlYWx0aW1lTWVkaWFTb3VyY2VTdXBwb3J0ZWRDb25zdHJhaW50cy5jcHAgKi8sCiAJ
CQkJMDdDMUMwRTQxQkZCNjBFRDAwQkQyMjU2IC8qIFJlYWx0aW1lTWVkaWFTb3VyY2VTdXBwb3J0
ZWRDb25zdHJhaW50cy5oICovLAorCQkJCTVDREQ4MzNCMUU0MzI0QkIwMDYyMUU5MiAvKiBSZWFs
dGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuY3BwICovLAorCQkJCTVDREQ4MzNDMUU0MzI0QkIwMDYy
MUU5MiAvKiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuaCAqLywKIAkJCQkzMTM1OTEwQzFF
N0REQ0I2MDBGMzA2MzAgLyogUlRDQnVuZGxlUG9saWN5LmggKi8sCiAJCQkJMDcyMjFCQTIxN0NG
MEFENDAwODQ4RTUxIC8qIFJUQ0RhdGFDaGFubmVsSGFuZGxlci5oICovLAogCQkJCTA3MjIxQkEz
MTdDRjBBRDQwMDg0OEU1MSAvKiBSVENEYXRhQ2hhbm5lbEhhbmRsZXJDbGllbnQuaCAqLywKQEAg
LTE2NTk4LDE0ICsxNjYwNiwxMiBAQAogCQkJCTA3RUU3NkVFMUJFQTYxOTgwMEY4OTEzMyAvKiBN
b2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5tbSAqLywKIAkJCQk0MTEwM0FBQTFFMzk3OTBBMDA3
NjlGMDMgLyogUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlLmNwcCAqLywKIAkJCQk0MTEwM0FB
OTFFMzk3OTBBMDA3NjlGMDMgLyogUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlLmggKi8sCi0J
CQkJNUNERDgzMzkxRTQzMjRCQjAwNjIxRTkyIC8qIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJj
ZS5jcHAgKi8sCi0JCQkJNUNERDgzM0ExRTQzMjRCQjAwNjIxRTkyIC8qIFJlYWx0aW1lSW5jb21p
bmdWaWRlb1NvdXJjZS5oICovLAorCQkJCTVDREQ4MzM5MUU0MzI0QkIwMDYyMUU5MyAvKiBSZWFs
dGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWMuY3BwICovLAogCQkJCTRBMEZGQUEzMUFBRjVFRjYw
MDYyODAzQiAvKiBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTWFjLmNwcCAqLywKIAkJCQk0QTBG
RkFBNDFBQUY1RUY2MDA2MjgwM0IgLyogUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck1hYy5oICov
LAogCQkJCTQxMTAzQUE3MUUzOTc5MEEwMDc2OUYwMyAvKiBSZWFsdGltZU91dGdvaW5nQXVkaW9T
b3VyY2UuY3BwICovLAogCQkJCTQxMTAzQUE4MUUzOTc5MEEwMDc2OUYwMyAvKiBSZWFsdGltZU91
dGdvaW5nQXVkaW9Tb3VyY2UuaCAqLywKLQkJCQk1Q0REODMzQjFFNDMyNEJCMDA2MjFFOTIgLyog
UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmNwcCAqLywKLQkJCQk1Q0REODMzQzFFNDMyNEJC
MDA2MjFFOTIgLyogUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmggKi8sCisJCQkJNUNERDgz
M0IxRTQzMjRCQjAwNjIxRTkzIC8qIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZU1hYy5jcHAg
Ki8sCiAJCQkJMDdENjM3M0UxQkIwQjExMzAwMjU2Q0U5IC8qIFdlYkF1ZGlvU291cmNlUHJvdmlk
ZXJBVkZPYmpDLmggKi8sCiAJCQkJMDdENjM3M0YxQkIwQjExMzAwMjU2Q0U5IC8qIFdlYkF1ZGlv
U291cmNlUHJvdmlkZXJBVkZPYmpDLm1tICovLAogCQkJKTsKQEAgLTMzNjM5LDYgKzMzNjQ1LDcg
QEAKIAkJCQlGRDMxNjAzQjEyQjAyNjc2MDBDMUEzNTkgLyogUmVhbHRpbWVBbmFseXNlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk0MTEwM0FBRTFFMzk3OTEwMDA3NjlGMDMgLyogUmVhbHRpbWVJ
bmNvbWluZ0F1ZGlvU291cmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDREQ4MzNFMUU0MzI0
REMwMDYyMUU5MiAvKiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJNUNERDgzM0UxRTQzMjREQzAwNjIxRTkzIC8qIFJlYWx0aW1lSW5jb21pbmdWaWRl
b1NvdXJjZU1hYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0QTRGNjU3MDFBQTk5N0YxMDBFMzhD
REQgLyogUmVhbHRpbWVNZWRpYVNvdXJjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0QTBGRkFB
MTFBQUY1RUEyMDA2MjgwM0IgLyogUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk0QTBGRkFBNTFBQUY1RUY2MDA2MjgwM0IgLyogUmVhbHRpbWVNZWRpYVNv
dXJjZUNlbnRlck1hYy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTMzNjQ2LDYgKzMzNjUzLDcgQEAK
IAkJCQkyRUM0MURFNDFDMDQxMEEzMDBEMjk0RkUgLyogUmVhbHRpbWVNZWRpYVNvdXJjZVN1cHBv
cnRlZENvbnN0cmFpbnRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQxMTAzQUFCMUUzOTc5MTAw
MDc2OUYwMyAvKiBSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNUNERDgzM0QxRTQzMjREOTAwNjIxRTkyIC8qIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1Nv
dXJjZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1Q0REODMzRDFFNDMyNEQ5MDA2MjFFOTMgLyog
UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTWFjLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZE
NDVBOTVBMTc1RDQxNzEwMEMyMUVDOCAvKiBSZWN0YW5nbGVTaGFwZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlCQ0FCNDE4MTEzRTM1NkU4MDBEOEFBRjMgLyogUmVnaW9uLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE1NzhGNDQwMURFMEI2MzQwMDNERkM2QSAvKiBSZWplY3RlZFByb21pc2VUcmFj
a2VyLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uOWViNWIwMWM4NDkxY2QwNTAyNDQ1NTU5YWMxYTk4ZTliODc5YWMxMwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1Jl
YWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5jcHAKQEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBk
aXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2Uu
aCIKKworI2lmIFVTRShMSUJXRUJSVEMpCisKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisKKyNpZiBQ
TEFURk9STShDT0NPQSkKKyNpbmNsdWRlICJNZWRpYVNhbXBsZUFWRk9iakMuaCIKKyNpbmNsdWRl
IDx3ZWJydGMvc2RrL29iamMvRnJhbWV3b3JrL0NsYXNzZXMvVmlkZW8vY29yZXZpZGVvX2ZyYW1l
X2J1ZmZlci5oPgorCisjaW5jbHVkZSAiQ29yZU1lZGlhU29mdExpbmsuaCIKKyNpbmNsdWRlICJD
b3JlVmlkZW9Tb2Z0TGluay5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVm
PFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZT4gUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNl
OjpjcmVhdGUocnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9UcmFja0ludGVyZmFjZT4m
JiB2aWRlb1RyYWNrLCBTdHJpbmcmJiB0cmFja0lkKQoreworI2lmIFBMQVRGT1JNKENPQ09BKQor
ICAgIGF1dG8gc291cmNlID0gYWRvcHRSZWYoKm5ldyBSZWFsdGltZUluY29taW5nVmlkZW9Tb3Vy
Y2VNYWMoV1RGTW92ZSh2aWRlb1RyYWNrKSwgV1RGTW92ZSh0cmFja0lkKSkpOworI2Vsc2UKKyAg
ICBhdXRvIHNvdXJjZSA9IGFkb3B0UmVmKCpuZXcgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNl
KFdURk1vdmUodmlkZW9UcmFjayksIFdURk1vdmUodHJhY2tJZCkpKTsKKyNlbmRpZgorICAgIHNv
dXJjZS0+c3RhcnQoKTsKKyAgICByZXR1cm4gc291cmNlOworfQorCitSZWFsdGltZUluY29taW5n
VmlkZW9Tb3VyY2U6OlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZShydGM6OnNjb3BlZF9yZWZw
dHI8d2VicnRjOjpWaWRlb1RyYWNrSW50ZXJmYWNlPiYmIHZpZGVvVHJhY2ssIFN0cmluZyYmIHZp
ZGVvVHJhY2tJZCkKKyAgICA6IFJlYWx0aW1lTWVkaWFTb3VyY2UoV1RGTW92ZSh2aWRlb1RyYWNr
SWQpLCBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpWaWRlbywgU3RyaW5nKCkpCisgICAgLCBt
X3ZpZGVvVHJhY2soV1RGTW92ZSh2aWRlb1RyYWNrKSkKK3sKKyAgICBtX2N1cnJlbnRTZXR0aW5n
cy5zZXRXaWR0aCg2NDApOworICAgIG1fY3VycmVudFNldHRpbmdzLnNldEhlaWdodCg0ODApOwor
ICAgIG5vdGlmeU11dGVkQ2hhbmdlKCFtX3ZpZGVvVHJhY2spOworfQorCit2b2lkIFJlYWx0aW1l
SW5jb21pbmdWaWRlb1NvdXJjZTo6c3RhcnRQcm9kdWNpbmdEYXRhKCkKK3sKKyAgICBpZiAobV92
aWRlb1RyYWNrKQorICAgICAgICBtX3ZpZGVvVHJhY2stPkFkZE9yVXBkYXRlU2luayh0aGlzLCBy
dGM6OlZpZGVvU2lua1dhbnRzKCkpOworfQorCit2b2lkIFJlYWx0aW1lSW5jb21pbmdWaWRlb1Nv
dXJjZTo6c2V0U291cmNlVHJhY2socnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9UcmFj
a0ludGVyZmFjZT4mJiB0cmFjaykKK3sKKyAgICBBU1NFUlQoIW1fdmlkZW9UcmFjayk7CisgICAg
QVNTRVJUKHRyYWNrKTsKKworICAgIG1fdmlkZW9UcmFjayA9IFdURk1vdmUodHJhY2spOworICAg
IG5vdGlmeU11dGVkQ2hhbmdlKCFtX3ZpZGVvVHJhY2spOworICAgIGlmIChpc1Byb2R1Y2luZ0Rh
dGEoKSkKKyAgICAgICAgbV92aWRlb1RyYWNrLT5BZGRPclVwZGF0ZVNpbmsodGhpcywgcnRjOjpW
aWRlb1NpbmtXYW50cygpKTsKK30KKwordm9pZCBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6
OnN0b3BQcm9kdWNpbmdEYXRhKCkKK3sKKyAgICBpZiAobV92aWRlb1RyYWNrKQorICAgICAgICBt
X3ZpZGVvVHJhY2stPlJlbW92ZVNpbmsodGhpcyk7Cit9CisKK2NvbnN0IFJlYWx0aW1lTWVkaWFT
b3VyY2VDYXBhYmlsaXRpZXMmIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6Y2FwYWJpbGl0
aWVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGll
czo6ZW1wdHlDYXBhYmlsaXRpZXMoKTsKK30KKworY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZVNl
dHRpbmdzJiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6OnNldHRpbmdzKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9jdXJyZW50U2V0dGluZ3M7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIFVTRShMSUJXRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lSW5jb21pbmdWaWRlb1Nv
dXJjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmUxYzIxOWZkOTljNDE1NzUwYjRkMTEzZjM2ZTBkOTIwYmIzZDQx
ODMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuaApAQCAtMCwwICsxLDc1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogICAgaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAg
ZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBFcmljc3NvbiBub3IgdGhl
IG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICAgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2lmIFVTRShMSUJXRUJSVEMpCisKKyNpbmNsdWRlICJMaWJXZWJSVENNYWNy
b3MuaCIKKyNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNlLmgiCisjaW5jbHVkZSA8d2VicnRj
L2FwaS9tZWRpYXN0cmVhbWludGVyZmFjZS5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDYXB0dXJlRGV2aWNlOworCitjbGFzcyBS
ZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UgOiBwdWJsaWMgUmVhbHRpbWVNZWRpYVNvdXJjZSwg
cHJpdmF0ZSBydGM6OlZpZGVvU2lua0ludGVyZmFjZTx3ZWJydGM6OlZpZGVvRnJhbWU+IHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUmVmPFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZT4gY3JlYXRl
KHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvVHJhY2tJbnRlcmZhY2U+JiYsIFN0cmlu
ZyYmKTsKKyAgICB+UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlKCkgeyBzdG9wUHJvZHVjaW5n
RGF0YSgpOyB9CisKKyAgICB2b2lkIHNldFNvdXJjZVRyYWNrKHJ0Yzo6c2NvcGVkX3JlZnB0cjx3
ZWJydGM6OlZpZGVvVHJhY2tJbnRlcmZhY2U+JiYpOworCitwcml2YXRlOgorICAgIFJlYWx0aW1l
SW5jb21pbmdWaWRlb1NvdXJjZShydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb1RyYWNr
SW50ZXJmYWNlPiYmLCBTdHJpbmcmJik7CisKKyAgICAvLyBSZWFsdGltZU1lZGlhU291cmNlIEFQ
SQorICAgIHZvaWQgc3RhcnRQcm9kdWNpbmdEYXRhKCkgZmluYWw7CisgICAgdm9pZCBzdG9wUHJv
ZHVjaW5nRGF0YSgpICBmaW5hbDsKKworICAgIGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBh
YmlsaXRpZXMmIGNhcGFiaWxpdGllcygpIGNvbnN0IGZpbmFsOworICAgIGNvbnN0IFJlYWx0aW1l
TWVkaWFTb3VyY2VTZXR0aW5ncyYgc2V0dGluZ3MoKSBjb25zdCBmaW5hbDsKKworICAgIGJvb2wg
YXBwbHlTaXplKGNvbnN0IEludFNpemUmKSBmaW5hbCB7IHJldHVybiB0cnVlOyB9CisKKyAgICAv
LyBydGM6OlZpZGVvU2lua0ludGVyZmFjZQorICAgIHZvaWQgT25GcmFtZShjb25zdCB3ZWJydGM6
OlZpZGVvRnJhbWUmKSBvdmVycmlkZSB7IH07CisKKyAgICBSZWFsdGltZU1lZGlhU291cmNlU2V0
dGluZ3MgbV9jdXJyZW50U2V0dGluZ3M7CisgICAgcnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6
VmlkZW9UcmFja0ludGVyZmFjZT4gbV92aWRlb1RyYWNrOworI2lmICFSRUxFQVNFX0xPR19ESVNB
QkxFRAorICAgIHNpemVfdCBtX251bWJlck9mRnJhbWVzIHsgMCB9OworI2VuZGlmCit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoTElCV0VCUlRDKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVPdXRnb2lu
Z1ZpZGVvU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1Jl
YWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDM3NjVkZjJlNjBhOGM2
YmFlNWFhZjgzZjYzNWY5OTE5OTc1ZDdjZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5jcHAK
QEAgLTAsMCArMSwyMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkLCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIHJlcXVpcmVkIHRvIGJlIG1l
dDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1l
IG9mIEFwcGxlIEluYy4gbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAg
ICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
CisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVPdXRnb2luZ1ZpZGVv
U291cmNlLmgiCisKKyNpZiBVU0UoTElCV0VCUlRDKQorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgor
I2luY2x1ZGUgPHdlYnJ0Yy9hcGkvdmlkZW8vaTQyMF9idWZmZXIuaD4KKyNpbmNsdWRlIDx3ZWJy
dGMvY29tbW9uX3ZpZGVvL2xpYnl1di9pbmNsdWRlL3dlYnJ0Y19saWJ5dXYuaD4KKyNpbmNsdWRl
IDx3dGYvQ3VycmVudFRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK1JlZjxSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U+IFJlYWx0
aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6Y3JlYXRlKFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0
ZT4mJiB2aWRlb1NvdXJjZSkKK3sKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VNYWMoV1RGTW92ZSh2aWRlb1Nv
dXJjZSkpKTsKKyNlbHNlCisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVhbHRpbWVPdXRnb2lu
Z1ZpZGVvU291cmNlKFdURk1vdmUodmlkZW9Tb3VyY2UpKSk7CisjZW5kaWYKK30KKworUmVhbHRp
bWVPdXRnb2luZ1ZpZGVvU291cmNlOjpSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UoUmVmPE1l
ZGlhU3RyZWFtVHJhY2tQcml2YXRlPiYmIHZpZGVvU291cmNlKQorICAgIDogbV92aWRlb1NvdXJj
ZShXVEZNb3ZlKHZpZGVvU291cmNlKSkKKyAgICAsIG1fYmxhY2tGcmFtZVRpbWVyKCp0aGlzLCAm
UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpzZW5kT25lQmxhY2tGcmFtZSkKK3sKKyAgICBt
X3ZpZGVvU291cmNlLT5hZGRPYnNlcnZlcigqdGhpcyk7CisgICAgaW5pdGlhbGl6ZUZyb21Tb3Vy
Y2UoKTsKK30KKworYm9vbCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnNldFNvdXJjZShS
ZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYgbmV3U291cmNlKQoreworICAgIGlmICghbV9p
bml0aWFsU2V0dGluZ3MpCisgICAgICAgIG1faW5pdGlhbFNldHRpbmdzID0gbV92aWRlb1NvdXJj
ZS0+c291cmNlKCkuc2V0dGluZ3MoKTsKKworICAgIG1fdmlkZW9Tb3VyY2UtPnJlbW92ZU9ic2Vy
dmVyKCp0aGlzKTsKKyAgICBtX3ZpZGVvU291cmNlID0gV1RGTW92ZShuZXdTb3VyY2UpOworICAg
IG1fdmlkZW9Tb3VyY2UtPmFkZE9ic2VydmVyKCp0aGlzKTsKKworICAgIGluaXRpYWxpemVGcm9t
U291cmNlKCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBSZWFsdGltZU91dGdvaW5n
VmlkZW9Tb3VyY2U6OnN0b3AoKQoreworICAgIG1fdmlkZW9Tb3VyY2UtPnJlbW92ZU9ic2VydmVy
KCp0aGlzKTsKKyAgICBtX2JsYWNrRnJhbWVUaW1lci5zdG9wKCk7CisgICAgbV9pc1N0b3BwZWQg
PSB0cnVlOworfQorCit2b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6dXBkYXRlQmxh
Y2tGcmFtZXNTZW5kaW5nKCkKK3sKKyAgICBpZiAoIW1fbXV0ZWQgJiYgbV9lbmFibGVkKSB7Cisg
ICAgICAgIGlmIChtX2JsYWNrRnJhbWVUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICAgICAgbV9i
bGFja0ZyYW1lVGltZXIuc3RvcCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc2Vu
ZEJsYWNrRnJhbWVzSWZOZWVkZWQoKTsKK30KKwordm9pZCBSZWFsdGltZU91dGdvaW5nVmlkZW9T
b3VyY2U6OnNvdXJjZU11dGVkQ2hhbmdlZCgpCit7CisgICAgQVNTRVJUKG1fbXV0ZWQgIT0gbV92
aWRlb1NvdXJjZS0+bXV0ZWQoKSk7CisKKyAgICBtX211dGVkID0gbV92aWRlb1NvdXJjZS0+bXV0
ZWQoKTsKKworICAgIHVwZGF0ZUJsYWNrRnJhbWVzU2VuZGluZygpOworfQorCit2b2lkIFJlYWx0
aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6c291cmNlRW5hYmxlZENoYW5nZWQoKQoreworICAgIEFT
U0VSVChtX2VuYWJsZWQgIT0gbV92aWRlb1NvdXJjZS0+ZW5hYmxlZCgpKTsKKworICAgIG1fZW5h
YmxlZCA9IG1fdmlkZW9Tb3VyY2UtPmVuYWJsZWQoKTsKKworICAgIHVwZGF0ZUJsYWNrRnJhbWVz
U2VuZGluZygpOworfQorCit2b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6aW5pdGlh
bGl6ZUZyb21Tb3VyY2UoKQoreworICAgIGNvbnN0IGF1dG8mIHNldHRpbmdzID0gbV92aWRlb1Nv
dXJjZS0+c291cmNlKCkuc2V0dGluZ3MoKTsKKyAgICBtX3dpZHRoID0gc2V0dGluZ3Mud2lkdGgo
KTsKKyAgICBtX2hlaWdodCA9IHNldHRpbmdzLmhlaWdodCgpOworCisgICAgbV9tdXRlZCA9IG1f
dmlkZW9Tb3VyY2UtPm11dGVkKCk7CisgICAgbV9lbmFibGVkID0gbV92aWRlb1NvdXJjZS0+ZW5h
YmxlZCgpOworCisgICAgdXBkYXRlQmxhY2tGcmFtZXNTZW5kaW5nKCk7Cit9CisKK2Jvb2wgUmVh
bHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpHZXRTdGF0cyhTdGF0cyopCit7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCit2b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6QWRkT3JVcGRh
dGVTaW5rKHJ0Yzo6VmlkZW9TaW5rSW50ZXJmYWNlPHdlYnJ0Yzo6VmlkZW9GcmFtZT4qIHNpbmss
IGNvbnN0IHJ0Yzo6VmlkZW9TaW5rV2FudHMmIHNpbmtXYW50cykKK3sKKyAgICBBU1NFUlQoIXNp
bmtXYW50cy5ibGFja19mcmFtZXMpOworCisgICAgaWYgKHNpbmtXYW50cy5yb3RhdGlvbl9hcHBs
aWVkKQorICAgICAgICBtX3Nob3VsZEFwcGx5Um90YXRpb24gPSB0cnVlOworCisgICAgaWYgKCFt
X3NpbmtzLmNvbnRhaW5zKHNpbmspKQorICAgICAgICBtX3NpbmtzLmFwcGVuZChzaW5rKTsKKwor
ICAgIGNhbGxPbk1haW5UaHJlYWQoW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0oKSB7
CisgICAgICAgIHByb3RlY3RlZFRoaXMtPnNlbmRCbGFja0ZyYW1lc0lmTmVlZGVkKCk7CisgICAg
fSk7Cit9CisKK3ZvaWQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpSZW1vdmVTaW5rKHJ0
Yzo6VmlkZW9TaW5rSW50ZXJmYWNlPHdlYnJ0Yzo6VmlkZW9GcmFtZT4qIHNpbmspCit7CisgICAg
bV9zaW5rcy5yZW1vdmVGaXJzdChzaW5rKTsKKworICAgIGlmIChtX3NpbmtzLnNpemUoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IG1h
a2VSZWYoKnRoaXMpXSgpIHsKKyAgICAgICAgaWYgKHByb3RlY3RlZFRoaXMtPm1fYmxhY2tGcmFt
ZVRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5tX2JsYWNrRnJh
bWVUaW1lci5zdG9wKCk7CisgICAgfSk7Cit9CisKK3ZvaWQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVv
U291cmNlOjpzZW5kQmxhY2tGcmFtZXNJZk5lZWRlZCgpCit7CisgICAgaWYgKG1fYmxhY2tGcmFt
ZVRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9zaW5rcy5z
aXplKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9tdXRlZCAmJiBtX2VuYWJsZWQp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV93aWR0aCB8fCAhbV9oZWlnaHQpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmICghbV9ibGFja0ZyYW1lKSB7CisgICAgICAgIGF1dG8gd2lk
dGggPSBtX3dpZHRoOworICAgICAgICBhdXRvIGhlaWdodCA9IG1faGVpZ2h0OworICAgICAgICBp
ZiAobV9zaG91bGRBcHBseVJvdGF0aW9uICYmIChtX2N1cnJlbnRSb3RhdGlvbiA9PSB3ZWJydGM6
OmtWaWRlb1JvdGF0aW9uXzAgfHwgbV9jdXJyZW50Um90YXRpb24gPT0gd2VicnRjOjprVmlkZW9S
b3RhdGlvbl85MCkpCisgICAgICAgICAgICBzdGQ6OnN3YXAod2lkdGgsIGhlaWdodCk7CisgICAg
ICAgIGF1dG8gZnJhbWUgPSBtX2J1ZmZlclBvb2wuQ3JlYXRlQnVmZmVyKHdpZHRoLCBoZWlnaHQp
OworICAgICAgICBBU1NFUlQoZnJhbWUpOworICAgICAgICBpZiAoIWZyYW1lKSB7CisgICAgICAg
ICAgICBSRUxFQVNFX0xPRyhXZWJSVEMsICJSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnNl
bmRCbGFja0ZyYW1lc0lmTmVlZGVkIHVuYWJsZSB0byBzZW5kIGJsYWNrIGZyYW1lcyIpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHdlYnJ0Yzo6STQyMEJ1ZmZlcjo6
U2V0QmxhY2soZnJhbWUuZ2V0KCkpOworICAgICAgICBtX2JsYWNrRnJhbWUgPSBXVEZNb3ZlKGZy
YW1lKTsKKyAgICB9CisgICAgc2VuZE9uZUJsYWNrRnJhbWUoKTsKKyAgICBtX2JsYWNrRnJhbWVU
aW1lci5zdGFydFJlcGVhdGluZygxX3MpOworfQorCit2b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRl
b1NvdXJjZTo6c2VuZE9uZUJsYWNrRnJhbWUoKQoreworICAgIFJFTEVBU0VfTE9HKE1lZGlhU3Ry
ZWFtLCAiUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpzZW5kT25lQmxhY2tGcmFtZSIpOwor
ICAgIHNlbmRGcmFtZShydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb0ZyYW1lQnVmZmVy
PihtX2JsYWNrRnJhbWUpKTsKK30KKwordm9pZCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6
OnNlbmRGcmFtZShydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb0ZyYW1lQnVmZmVyPiYm
IGJ1ZmZlcikKK3sKKyAgICBpbnQ2NF90IHRpbWVzdGFtcE1pY3JvU2Vjb25kcyA9IG1vbm90b25p
Y2FsbHlJbmNyZWFzaW5nVGltZU1TKCkgKiAxMDAwOworICAgIHdlYnJ0Yzo6VmlkZW9GcmFtZSBm
cmFtZShidWZmZXIsIG1fc2hvdWxkQXBwbHlSb3RhdGlvbiA/IHdlYnJ0Yzo6a1ZpZGVvUm90YXRp
b25fMCA6IG1fY3VycmVudFJvdGF0aW9uLCB0aW1lc3RhbXBNaWNyb1NlY29uZHMpOworICAgIGZv
ciAoYXV0byogc2luayA6IG1fc2lua3MpCisgICAgICAgIHNpbmstPk9uRnJhbWUoZnJhbWUpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoTElCV0VCUlRDKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVP
dXRnb2luZ1ZpZGVvU291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMDc5OTYxZDQwZDll
ZjU2NzJhN2UzZWZmZGNiNTA5ZjkxMTZjMDBiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmgK
QEAgLTAsMCArMSwxMTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkLCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIHJlcXVpcmVkIHRvIGJlIG1l
dDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1l
IG9mIEFwcGxlIEluYy4gbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAg
ICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
CisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShMSUJXRUJSVEMpCisKKyNpbmNsdWRlICJMaWJX
ZWJSVENNYWNyb3MuaCIKKyNpbmNsdWRlICJNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgPFRpbWVyLmg+CisjaW5jbHVkZSA8d2VicnRjL2FwaS9tZWRpYXN0cmVhbWludGVyZmFj
ZS5oPgorI2luY2x1ZGUgPHdlYnJ0Yy9iYXNlL29wdGlvbmFsLmg+CisjaW5jbHVkZSA8d2VicnRj
L2NvbW1vbl92aWRlby9pbmNsdWRlL2k0MjBfYnVmZmVyX3Bvb2wuaD4KKyNpbmNsdWRlIDx3ZWJy
dGMvbWVkaWEvYmFzZS92aWRlb3NpbmtpbnRlcmZhY2UuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9u
YWwuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UgOiBwdWJsaWMg
VGhyZWFkU2FmZVJlZkNvdW50ZWQ8UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlPiwgcHVibGlj
IHdlYnJ0Yzo6VmlkZW9UcmFja1NvdXJjZUludGVyZmFjZSwgcHJpdmF0ZSBNZWRpYVN0cmVhbVRy
YWNrUHJpdmF0ZTo6T2JzZXJ2ZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8UmVhbHRpbWVP
dXRnb2luZ1ZpZGVvU291cmNlPiBjcmVhdGUoUmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiYm
IHZpZGVvU291cmNlKTsKKyAgICB+UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlKCkgeyBzdG9w
KCk7IH0KKworICAgIHZvaWQgc3RvcCgpOworICAgIGJvb2wgc2V0U291cmNlKFJlZjxNZWRpYVN0
cmVhbVRyYWNrUHJpdmF0ZT4mJik7CisgICAgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmIHNvdXJj
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmlkZW9Tb3VyY2UuZ2V0KCk7IH0KKworICAgIGludCBBZGRS
ZWYoKSBjb25zdCBmaW5hbCB7IHJlZigpOyByZXR1cm4gcmVmQ291bnQoKTsgfQorICAgIGludCBS
ZWxlYXNlKCkgY29uc3QgZmluYWwgeyBkZXJlZigpOyByZXR1cm4gcmVmQ291bnQoKTsgfQorCisg
ICAgdm9pZCBzZXRBcHBseVJvdGF0aW9uKGJvb2wgc2hvdWxkQXBwbHlSb3RhdGlvbikgeyBtX3No
b3VsZEFwcGx5Um90YXRpb24gPSBzaG91bGRBcHBseVJvdGF0aW9uOyB9CisKK3ByaXZhdGU6Cisg
ICAgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlKFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0
ZT4mJik7CisKKyAgICB2b2lkIHNlbmRGcmFtZShydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpW
aWRlb0ZyYW1lQnVmZmVyPiYmKTsKKyAgICB2b2lkIHNlbmRCbGFja0ZyYW1lc0lmTmVlZGVkKCk7
CisgICAgdm9pZCBzZW5kT25lQmxhY2tGcmFtZSgpOworICAgIHZvaWQgaW5pdGlhbGl6ZUZyb21T
b3VyY2UoKTsKKyAgICB2b2lkIHVwZGF0ZUJsYWNrRnJhbWVzU2VuZGluZygpOworCisgICAgLy8g
Tm90aWZpZXIgQVBJCisgICAgdm9pZCBSZWdpc3Rlck9ic2VydmVyKHdlYnJ0Yzo6T2JzZXJ2ZXJJ
bnRlcmZhY2UqKSBmaW5hbCB7IH0KKyAgICB2b2lkIFVucmVnaXN0ZXJPYnNlcnZlcih3ZWJydGM6
Ok9ic2VydmVySW50ZXJmYWNlKikgZmluYWwgeyB9CisKKyAgICAvLyBWaWRlb1RyYWNrU291cmNl
SW50ZXJmYWNlIEFQSQorICAgIGJvb2wgaXNfc2NyZWVuY2FzdCgpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIGZhbHNlOyB9CisgICAgcnRjOjpPcHRpb25hbDxib29sPiBuZWVkc19kZW5vaXNpbmcoKSBj
b25zdCBmaW5hbCB7IHJldHVybiBydGM6Ok9wdGlvbmFsPGJvb2w+KCk7IH0KKyAgICBib29sIEdl
dFN0YXRzKFN0YXRzKikgZmluYWw7CisKKyAgICAvLyBNZWRpYVNvdXJjZUludGVyZmFjZSBBUEkK
KyAgICBTb3VyY2VTdGF0ZSBzdGF0ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIFNvdXJjZVN0YXRl
KCk7IH0KKyAgICBib29sIHJlbW90ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KKwor
ICAgIC8vIHJ0Yzo6VmlkZW9Tb3VyY2VJbnRlcmZhY2U8d2VicnRjOjpWaWRlb0ZyYW1lPiBBUEkK
KyAgICB2b2lkIEFkZE9yVXBkYXRlU2luayhydGM6OlZpZGVvU2lua0ludGVyZmFjZTx3ZWJydGM6
OlZpZGVvRnJhbWU+KiwgY29uc3QgcnRjOjpWaWRlb1NpbmtXYW50cyYpIGZpbmFsOworICAgIHZv
aWQgUmVtb3ZlU2luayhydGM6OlZpZGVvU2lua0ludGVyZmFjZTx3ZWJydGM6OlZpZGVvRnJhbWU+
KikgZmluYWw7CisKKyAgICB2b2lkIHNvdXJjZU11dGVkQ2hhbmdlZCgpOworICAgIHZvaWQgc291
cmNlRW5hYmxlZENoYW5nZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlkZW9TYW1wbGVBdmFpbGFi
bGUoTWVkaWFTYW1wbGUmKSB7IH07CisKKyAgICAvLyBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6
T2JzZXJ2ZXIgQVBJCisgICAgdm9pZCB0cmFja011dGVkQ2hhbmdlZChNZWRpYVN0cmVhbVRyYWNr
UHJpdmF0ZSYpIGZpbmFsIHsgc291cmNlTXV0ZWRDaGFuZ2VkKCk7IH0KKyAgICB2b2lkIHRyYWNr
RW5hYmxlZENoYW5nZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmKSBmaW5hbCB7IHNvdXJjZUVu
YWJsZWRDaGFuZ2VkKCk7IH0KKyAgICB2b2lkIHRyYWNrU2V0dGluZ3NDaGFuZ2VkKE1lZGlhU3Ry
ZWFtVHJhY2tQcml2YXRlJikgZmluYWwgeyBpbml0aWFsaXplRnJvbVNvdXJjZSgpOyB9CisgICAg
dm9pZCBzYW1wbGVCdWZmZXJVcGRhdGVkKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJiwgTWVkaWFT
YW1wbGUmIHNhbXBsZSkgZmluYWwgeyB2aWRlb1NhbXBsZUF2YWlsYWJsZShzYW1wbGUpOyB9Cisg
ICAgdm9pZCB0cmFja0VuZGVkKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJikgZmluYWwgeyB9CisK
KyAgICBWZWN0b3I8cnRjOjpWaWRlb1NpbmtJbnRlcmZhY2U8d2VicnRjOjpWaWRlb0ZyYW1lPio+
IG1fc2lua3M7CisgICAgd2VicnRjOjpJNDIwQnVmZmVyUG9vbCBtX2J1ZmZlclBvb2w7CisgICAg
UmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiBtX3ZpZGVvU291cmNlOworICAgIGJvb2wgbV9l
bmFibGVkIHsgdHJ1ZSB9OworICAgIGJvb2wgbV9tdXRlZCB7IGZhbHNlIH07CisgICAgc3RkOjpv
cHRpb25hbDxSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M+IG1faW5pdGlhbFNldHRpbmdzOwor
ICAgIHdlYnJ0Yzo6VmlkZW9Sb3RhdGlvbiBtX2N1cnJlbnRSb3RhdGlvbiB7IHdlYnJ0Yzo6a1Zp
ZGVvUm90YXRpb25fMCB9OworICAgIHVpbnQzMl90IG1fd2lkdGggeyAwIH07CisgICAgdWludDMy
X3QgbV9oZWlnaHQgeyAwIH07CisgICAgYm9vbCBtX2lzU3RvcHBlZCB7IGZhbHNlIH07CisgICAg
VGltZXIgbV9ibGFja0ZyYW1lVGltZXI7CisgICAgcnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6
VmlkZW9GcmFtZUJ1ZmZlcj4gbV9ibGFja0ZyYW1lOworICAgIGJvb2wgbV9zaG91bGRBcHBseVJv
dGF0aW9uIHsgZmFsc2UgfTsKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICBzaXplX3Qg
bV9udW1iZXJPZkZyYW1lcyB7IDAgfTsKKyNlbmRpZgorfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gVVNFKExJQldFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2Uu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lSW5j
b21pbmdWaWRlb1NvdXJjZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyNjE4
ZDY5NTI3NjNmZTdkN2M0YjZiOGNlNGY5Y2RjMTgyN2EzNzEuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSwyMDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKLSAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0g
KiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tIHRoaXMKLSAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlJl
YWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5oIgotCi0jaWYgVVNFKExJQldFQlJUQykKLQotI2lu
Y2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJNZWRpYVNhbXBsZUFWRk9iakMuaCIKLSNpbmNs
dWRlIDx3ZWJydGMvc2RrL29iamMvRnJhbWV3b3JrL0NsYXNzZXMvVmlkZW8vY29yZXZpZGVvX2Zy
YW1lX2J1ZmZlci5oPgotCi0jaW5jbHVkZSAiQ29yZU1lZGlhU29mdExpbmsuaCIKLSNpbmNsdWRl
ICJDb3JlVmlkZW9Tb2Z0TGluay5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVJlZjxSZWFs
dGltZUluY29taW5nVmlkZW9Tb3VyY2U+IFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6Y3Jl
YXRlKHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvVHJhY2tJbnRlcmZhY2U+JiYgdmlk
ZW9UcmFjaywgU3RyaW5nJiYgdHJhY2tJZCkKLXsKLSAgICBhdXRvIHNvdXJjZSA9IGFkb3B0UmVm
KCpuZXcgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlKFdURk1vdmUodmlkZW9UcmFjayksIFdU
Rk1vdmUodHJhY2tJZCkpKTsKLSAgICBzb3VyY2UtPnN0YXJ0KCk7Ci0gICAgcmV0dXJuIHNvdXJj
ZTsKLX0KLQotUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlOjpSZWFsdGltZUluY29taW5nVmlk
ZW9Tb3VyY2UocnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9UcmFja0ludGVyZmFjZT4m
JiB2aWRlb1RyYWNrLCBTdHJpbmcmJiB2aWRlb1RyYWNrSWQpCi0gICAgOiBSZWFsdGltZU1lZGlh
U291cmNlKFdURk1vdmUodmlkZW9UcmFja0lkKSwgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6
VmlkZW8sIFN0cmluZygpKQotICAgICwgbV92aWRlb1RyYWNrKFdURk1vdmUodmlkZW9UcmFjaykp
Ci17Ci0gICAgbV9jdXJyZW50U2V0dGluZ3Muc2V0V2lkdGgoNjQwKTsKLSAgICBtX2N1cnJlbnRT
ZXR0aW5ncy5zZXRIZWlnaHQoNDgwKTsKLSAgICBub3RpZnlNdXRlZENoYW5nZSghbV92aWRlb1Ry
YWNrKTsKLX0KLQotdm9pZCBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6OnN0YXJ0UHJvZHVj
aW5nRGF0YSgpCi17Ci0gICAgaWYgKG1fdmlkZW9UcmFjaykKLSAgICAgICAgbV92aWRlb1RyYWNr
LT5BZGRPclVwZGF0ZVNpbmsodGhpcywgcnRjOjpWaWRlb1NpbmtXYW50cygpKTsKLX0KLQotdm9p
ZCBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6OnNldFNvdXJjZVRyYWNrKHJ0Yzo6c2NvcGVk
X3JlZnB0cjx3ZWJydGM6OlZpZGVvVHJhY2tJbnRlcmZhY2U+JiYgdHJhY2spCi17Ci0gICAgQVNT
RVJUKCFtX3ZpZGVvVHJhY2spOwotICAgIEFTU0VSVCh0cmFjayk7Ci0KLSAgICBtX3ZpZGVvVHJh
Y2sgPSBXVEZNb3ZlKHRyYWNrKTsKLSAgICBub3RpZnlNdXRlZENoYW5nZSghbV92aWRlb1RyYWNr
KTsKLSAgICBpZiAoaXNQcm9kdWNpbmdEYXRhKCkpCi0gICAgICAgIG1fdmlkZW9UcmFjay0+QWRk
T3JVcGRhdGVTaW5rKHRoaXMsIHJ0Yzo6VmlkZW9TaW5rV2FudHMoKSk7Ci19Ci0KLXZvaWQgUmVh
bHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlOjpzdG9wUHJvZHVjaW5nRGF0YSgpCi17Ci0gICAgaWYg
KG1fdmlkZW9UcmFjaykKLSAgICAgICAgbV92aWRlb1RyYWNrLT5SZW1vdmVTaW5rKHRoaXMpOwot
fQotCi1DVlBpeGVsQnVmZmVyUmVmIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6cGl4ZWxC
dWZmZXJGcm9tVmlkZW9GcmFtZShjb25zdCB3ZWJydGM6OlZpZGVvRnJhbWUmIGZyYW1lKQotewot
ICAgIGlmIChtdXRlZCgpKSB7Ci0gICAgICAgIGlmICghbV9ibGFja0ZyYW1lIHx8IG1fYmxhY2tG
cmFtZVdpZHRoICE9IGZyYW1lLndpZHRoKCkgfHwgbV9ibGFja0ZyYW1lSGVpZ2h0ICE9IGZyYW1l
LmhlaWdodCgpKSB7Ci0gICAgICAgICAgICBDVlBpeGVsQnVmZmVyUmVmIHBpeGVsQnVmZmVyID0g
bnVsbHB0cjsKLSAgICAgICAgICAgIGF1dG8gc3RhdHVzID0gQ1ZQaXhlbEJ1ZmZlckNyZWF0ZShr
Q0ZBbGxvY2F0b3JEZWZhdWx0LCBmcmFtZS53aWR0aCgpLCBmcmFtZS5oZWlnaHQoKSwga0NWUGl4
ZWxGb3JtYXRUeXBlXzQyMFlwQ2JDcjhQbGFuYXIsIG51bGxwdHIsICZwaXhlbEJ1ZmZlcik7Ci0g
ICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHN0YXR1cywgc3RhdHVzID09IG5vRXJyKTsKLQotICAg
ICAgICAgICAgbV9ibGFja0ZyYW1lID0gcGl4ZWxCdWZmZXI7Ci0gICAgICAgICAgICBtX2JsYWNr
RnJhbWVXaWR0aCA9IGZyYW1lLndpZHRoKCk7Ci0gICAgICAgICAgICBtX2JsYWNrRnJhbWVIZWln
aHQgPSBmcmFtZS5oZWlnaHQoKTsKLQotICAgICAgICAgICAgc3RhdHVzID0gQ1ZQaXhlbEJ1ZmZl
ckxvY2tCYXNlQWRkcmVzcyhwaXhlbEJ1ZmZlciwgMCk7Ci0gICAgICAgICAgICBBU1NFUlQoc3Rh
dHVzID09IG5vRXJyKTsKLSAgICAgICAgICAgIHZvaWQqIGRhdGEgPSBDVlBpeGVsQnVmZmVyR2V0
QmFzZUFkZHJlc3MocGl4ZWxCdWZmZXIpOwotICAgICAgICAgICAgc2l6ZV90IHlMZW5ndGggPSBm
cmFtZS53aWR0aCgpICogZnJhbWUuaGVpZ2h0KCk7Ci0gICAgICAgICAgICBtZW1zZXQoZGF0YSwg
MCwgeUxlbmd0aCk7Ci0gICAgICAgICAgICBtZW1zZXQoc3RhdGljX2Nhc3Q8dWludDhfdCo+KGRh
dGEpICsgeUxlbmd0aCwgMTI4LCB5TGVuZ3RoIC8gMik7Ci0KLSAgICAgICAgICAgIHN0YXR1cyA9
IENWUGl4ZWxCdWZmZXJVbmxvY2tCYXNlQWRkcmVzcyhwaXhlbEJ1ZmZlciwgMCk7Ci0gICAgICAg
ICAgICBBU1NFUlQoIXN0YXR1cyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1fYmxhY2tG
cmFtZS5nZXQoKTsKLSAgICB9Ci0gICAgYXV0byBidWZmZXIgPSBmcmFtZS52aWRlb19mcmFtZV9i
dWZmZXIoKTsKLSAgICBBU1NFUlQoYnVmZmVyLT50eXBlKCkgPT0gd2VicnRjOjpWaWRlb0ZyYW1l
QnVmZmVyOjpUeXBlOjprTmF0aXZlKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8d2VicnRjOjpD
b3JlVmlkZW9GcmFtZUJ1ZmZlciY+KCpidWZmZXIpLnBpeGVsX2J1ZmZlcigpOwotfQotCi12b2lk
IFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6T25GcmFtZShjb25zdCB3ZWJydGM6OlZpZGVv
RnJhbWUmIGZyYW1lKQotewotICAgIGlmICghaXNQcm9kdWNpbmdEYXRhKCkpCi0gICAgICAgIHJl
dHVybjsKLQotI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAotICAgIGlmICghKCsrbV9udW1iZXJP
ZkZyYW1lcyAlIDMwKSkKLSAgICAgICAgUkVMRUFTRV9MT0coTWVkaWFTdHJlYW0sICJSZWFsdGlt
ZUluY29taW5nVmlkZW9Tb3VyY2U6Ok9uRnJhbWUgJXp1IGZyYW1lIiwgbV9udW1iZXJPZkZyYW1l
cyk7Ci0jZW5kaWYKLQotICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBwaXhlbEJ1ZmZlckZyb21WaWRl
b0ZyYW1lKGZyYW1lKTsKLQotICAgIC8vIEZJWE1FOiBDb252ZXJ0IHRpbWluZyBpbmZvcm1hdGlv
biBmcm9tIFZpZGVvRnJhbWUgdG8gQ01TYW1wbGVUaW1pbmdJbmZvLgotICAgIC8vIEZvciB0aGUg
bW9tZW50LCB3ZSB3aWxsIHByZXRlbmQgdGhhdCBmcmFtZXMgc2hvdWxkIGJlIHJlbmRlcmVkIGFz
YXAuCi0gICAgQ01TYW1wbGVUaW1pbmdJbmZvIHRpbWluZ0luZm87Ci0gICAgdGltaW5nSW5mby5w
cmVzZW50YXRpb25UaW1lU3RhbXAgPSBrQ01UaW1lSW52YWxpZDsKLSAgICB0aW1pbmdJbmZvLmRl
Y29kZVRpbWVTdGFtcCA9IGtDTVRpbWVJbnZhbGlkOwotICAgIHRpbWluZ0luZm8uZHVyYXRpb24g
PSBrQ01UaW1lSW52YWxpZDsKLQotICAgIENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvblJlZiBmb3Jt
YXREZXNjcmlwdGlvbjsKLSAgICBPU1N0YXR1cyBvc3RhdHVzID0gQ01WaWRlb0Zvcm1hdERlc2Ny
aXB0aW9uQ3JlYXRlRm9ySW1hZ2VCdWZmZXIoa0NGQWxsb2NhdG9yRGVmYXVsdCwgKENWSW1hZ2VC
dWZmZXJSZWYpcGl4ZWxCdWZmZXIsICZmb3JtYXREZXNjcmlwdGlvbik7Ci0gICAgaWYgKG9zdGF0
dXMgIT0gbm9FcnIpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBD
TVZpZGVvRm9ybWF0RGVzY3JpcHRpb246ICVkIiwgc3RhdGljX2Nhc3Q8aW50Pihvc3RhdHVzKSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBDTVNhbXBsZUJ1ZmZlclJlZiBzYW1wbGVC
dWZmZXI7Ci0gICAgb3N0YXR1cyA9IENNU2FtcGxlQnVmZmVyQ3JlYXRlUmVhZHlXaXRoSW1hZ2VC
dWZmZXIoa0NGQWxsb2NhdG9yRGVmYXVsdCwgKENWSW1hZ2VCdWZmZXJSZWYpcGl4ZWxCdWZmZXIs
IGZvcm1hdERlc2NyaXB0aW9uLCAmdGltaW5nSW5mbywgJnNhbXBsZUJ1ZmZlcik7Ci0gICAgaWYg
KG9zdGF0dXMgIT0gbm9FcnIpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRl
IHRoZSBzYW1wbGUgYnVmZmVyOiAlZCIsIHN0YXRpY19jYXN0PGludD4ob3N0YXR1cykpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIENGUmVsZWFzZShmb3JtYXREZXNjcmlwdGlvbik7Ci0K
LSAgICBhdXRvIHNhbXBsZSA9IGFkb3B0Q0Yoc2FtcGxlQnVmZmVyKTsKLQotICAgIENGQXJyYXlS
ZWYgYXR0YWNobWVudHNBcnJheSA9IENNU2FtcGxlQnVmZmVyR2V0U2FtcGxlQXR0YWNobWVudHNB
cnJheShzYW1wbGVCdWZmZXIsIHRydWUpOwotICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IENG
QXJyYXlHZXRDb3VudChhdHRhY2htZW50c0FycmF5KTsgKytpKSB7Ci0gICAgICAgIENGTXV0YWJs
ZURpY3Rpb25hcnlSZWYgYXR0YWNobWVudHMgPSAoQ0ZNdXRhYmxlRGljdGlvbmFyeVJlZilDRkFy
cmF5R2V0VmFsdWVBdEluZGV4KGF0dGFjaG1lbnRzQXJyYXksIGkpOwotICAgICAgICBDRkRpY3Rp
b25hcnlTZXRWYWx1ZShhdHRhY2htZW50cywga0NNU2FtcGxlQXR0YWNobWVudEtleV9EaXNwbGF5
SW1tZWRpYXRlbHksIGtDRkJvb2xlYW5UcnVlKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCB3aWR0
aCA9IGZyYW1lLndpZHRoKCk7Ci0gICAgdW5zaWduZWQgaGVpZ2h0ID0gZnJhbWUuaGVpZ2h0KCk7
Ci0KLSAgICBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbiByb3RhdGlvbjsKLSAgICBzd2l0Y2gg
KGZyYW1lLnJvdGF0aW9uKCkpIHsKLSAgICBjYXNlIHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMDoK
LSAgICAgICAgcm90YXRpb24gPSBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6Tm9uZTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzE4MDoKLSAgICAg
ICAgcm90YXRpb24gPSBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6VXBzaWRlRG93bjsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzkwOgotICAgICAg
ICByb3RhdGlvbiA9IE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpSaWdodDsKLSAgICAgICAg
c3RkOjpzd2FwKHdpZHRoLCBoZWlnaHQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIHdlYnJ0
Yzo6a1ZpZGVvUm90YXRpb25fMjcwOgotICAgICAgICByb3RhdGlvbiA9IE1lZGlhU2FtcGxlOjpW
aWRlb1JvdGF0aW9uOjpMZWZ0OwotICAgICAgICBzdGQ6OnN3YXAod2lkdGgsIGhlaWdodCk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIFJlZlB0cjxSZWFsdGltZUluY29taW5nVmlkZW9T
b3VyY2U+IHByb3RlY3RlZFRoaXModGhpcyk7Ci0gICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVj
dGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyksIHNhbXBsZSA9IFdURk1vdmUoc2FtcGxl
KSwgd2lkdGgsIGhlaWdodCwgcm90YXRpb25dIHsKLSAgICAgICAgcHJvdGVjdGVkVGhpcy0+cHJv
Y2Vzc05ld1NhbXBsZShzYW1wbGUuZ2V0KCksIHdpZHRoLCBoZWlnaHQsIHJvdGF0aW9uKTsKLSAg
ICB9KTsKLX0KLQotdm9pZCBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6OnByb2Nlc3NOZXdT
YW1wbGUoQ01TYW1wbGVCdWZmZXJSZWYgc2FtcGxlLCB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQg
aGVpZ2h0LCBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbiByb3RhdGlvbikKLXsKLSAgICBtX2J1
ZmZlciA9IHNhbXBsZTsKLSAgICBpZiAod2lkdGggIT0gbV9jdXJyZW50U2V0dGluZ3Mud2lkdGgo
KSB8fCBoZWlnaHQgIT0gbV9jdXJyZW50U2V0dGluZ3MuaGVpZ2h0KCkpIHsKLSAgICAgICAgbV9j
dXJyZW50U2V0dGluZ3Muc2V0V2lkdGgod2lkdGgpOwotICAgICAgICBtX2N1cnJlbnRTZXR0aW5n
cy5zZXRIZWlnaHQoaGVpZ2h0KTsKLSAgICAgICAgc2V0dGluZ3NEaWRDaGFuZ2UoKTsKLSAgICB9
Ci0KLSAgICB2aWRlb1NhbXBsZUF2YWlsYWJsZShNZWRpYVNhbXBsZUFWRk9iakM6OmNyZWF0ZShz
YW1wbGUsIHJvdGF0aW9uKSk7Ci19Ci0KLWNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmls
aXRpZXMmIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6Y2FwYWJpbGl0aWVzKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllczo6ZW1wdHlDYXBh
YmlsaXRpZXMoKTsKLX0KLQotY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzJiBSZWFs
dGltZUluY29taW5nVmlkZW9Tb3VyY2U6OnNldHRpbmdzKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bV9jdXJyZW50U2V0dGluZ3M7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlm
IC8vIFVTRShMSUJXRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNl
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlYjdjMzY0ZmUzMjMyMjIyZWFiNGYy
NWI3YjQxMDBjYzkxMDI4MDkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1l
SW5jb21pbmdWaWRlb1NvdXJjZS5oCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqICAgIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAq
ICAgIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9y
IHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSAqICAgIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
Ci0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I3ByYWdtYSBvbmNlCi0KLSNpZiBVU0UoTElCV0VCUlRDKQotCi0jaW5jbHVkZSAiTGliV2ViUlRD
TWFjcm9zLmgiCi0jaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZS5oIgotI2luY2x1ZGUgPHdl
YnJ0Yy9hcGkvbWVkaWFzdHJlYW1pbnRlcmZhY2UuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRy
Lmg+Ci0KLXVzaW5nIENNU2FtcGxlQnVmZmVyUmVmID0gc3RydWN0IG9wYXF1ZUNNU2FtcGxlQnVm
ZmVyKjsKLXVzaW5nIENWUGl4ZWxCdWZmZXJSZWYgPSBzdHJ1Y3QgX19DVkJ1ZmZlcio7Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQ2FwdHVyZURldmljZTsKLQotY2xhc3MgUmVhbHRp
bWVJbmNvbWluZ1ZpZGVvU291cmNlIGZpbmFsIDogcHVibGljIFJlYWx0aW1lTWVkaWFTb3VyY2Us
IHByaXZhdGUgcnRjOjpWaWRlb1NpbmtJbnRlcmZhY2U8d2VicnRjOjpWaWRlb0ZyYW1lPiB7Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIFJlZjxSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U+IGNyZWF0
ZShydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb1RyYWNrSW50ZXJmYWNlPiYmLCBTdHJp
bmcmJik7Ci0gICAgflJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZSgpIHsgc3RvcFByb2R1Y2lu
Z0RhdGEoKTsgfQotCi0gICAgdm9pZCBzZXRTb3VyY2VUcmFjayhydGM6OnNjb3BlZF9yZWZwdHI8
d2VicnRjOjpWaWRlb1RyYWNrSW50ZXJmYWNlPiYmKTsKLQotcHJpdmF0ZToKLSAgICBSZWFsdGlt
ZUluY29taW5nVmlkZW9Tb3VyY2UocnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9UcmFj
a0ludGVyZmFjZT4mJiwgU3RyaW5nJiYpOwotCi0gICAgLy8gUmVhbHRpbWVNZWRpYVNvdXJjZSBB
UEkKLSAgICB2b2lkIHN0YXJ0UHJvZHVjaW5nRGF0YSgpIGZpbmFsOwotICAgIHZvaWQgc3RvcFBy
b2R1Y2luZ0RhdGEoKSAgZmluYWw7Ci0KLSAgICBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlQ2Fw
YWJpbGl0aWVzJiBjYXBhYmlsaXRpZXMoKSBjb25zdCBmaW5hbDsKLSAgICBjb25zdCBSZWFsdGlt
ZU1lZGlhU291cmNlU2V0dGluZ3MmIHNldHRpbmdzKCkgY29uc3QgZmluYWw7Ci0KLSAgICB2b2lk
IHByb2Nlc3NOZXdTYW1wbGUoQ01TYW1wbGVCdWZmZXJSZWYsIHVuc2lnbmVkLCB1bnNpZ25lZCwg
TWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb24pOwotCi0gICAgYm9vbCBhcHBseVNpemUoY29uc3Qg
SW50U2l6ZSYpIGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KLQotICAgIC8vIHJ0Yzo6VmlkZW9TaW5r
SW50ZXJmYWNlCi0gICAgdm9pZCBPbkZyYW1lKGNvbnN0IHdlYnJ0Yzo6VmlkZW9GcmFtZSYpIGZp
bmFsOwotCi0gICAgQ1ZQaXhlbEJ1ZmZlclJlZiBwaXhlbEJ1ZmZlckZyb21WaWRlb0ZyYW1lKGNv
bnN0IHdlYnJ0Yzo6VmlkZW9GcmFtZSYpOwotCi0gICAgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRp
bmdzIG1fY3VycmVudFNldHRpbmdzOwotICAgIHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZp
ZGVvVHJhY2tJbnRlcmZhY2U+IG1fdmlkZW9UcmFjazsKLSAgICBSZXRhaW5QdHI8Q01TYW1wbGVC
dWZmZXJSZWY+IG1fYnVmZmVyOwotICAgIFJldGFpblB0cjxDVlBpeGVsQnVmZmVyUmVmPiBtX2Js
YWNrRnJhbWU7Ci0gICAgaW50IG1fYmxhY2tGcmFtZVdpZHRoIHsgMCB9OwotICAgIGludCBtX2Js
YWNrRnJhbWVIZWlnaHQgeyAwIH07Ci0jaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECi0gICAgc2l6
ZV90IG1fbnVtYmVyT2ZGcmFtZXMgeyAwIH07Ci0jZW5kaWYKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShMSUJXRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291
cmNlTWFjLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFs
dGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM2NjI1YTdjODBlOTkw
OTFhZWJjNDZlMWJhNDEyZGE2MzVmYjZiOTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNl
TWFjLmNwcApAQCAtMCwwICsxLDE2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJp
YnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1hYy5oIgorCisjaWYgVVNFKExJQldF
QlJUQykKKworI2luY2x1ZGUgIk1lZGlhU2FtcGxlQVZGT2JqQy5oIgorI2luY2x1ZGUgPHdlYnJ0
Yy9zZGsvb2JqYy9GcmFtZXdvcmsvQ2xhc3Nlcy9WaWRlby9jb3JldmlkZW9fZnJhbWVfYnVmZmVy
Lmg+CisKKyNpbmNsdWRlICJDb3JlTWVkaWFTb2Z0TGluay5oIgorI2luY2x1ZGUgIkNvcmVWaWRl
b1NvZnRMaW5rLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVmPFJlYWx0aW1lSW5jb21p
bmdWaWRlb1NvdXJjZU1hYz4gUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTWFjOjpjcmVhdGUo
cnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9UcmFja0ludGVyZmFjZT4mJiB2aWRlb1Ry
YWNrLCBTdHJpbmcmJiB0cmFja0lkKQoreworICAgIGF1dG8gc291cmNlID0gYWRvcHRSZWYoKm5l
dyBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWMoV1RGTW92ZSh2aWRlb1RyYWNrKSwgV1RG
TW92ZSh0cmFja0lkKSkpOworICAgIHJldHVybiBzb3VyY2U7Cit9CisKK1JlYWx0aW1lSW5jb21p
bmdWaWRlb1NvdXJjZU1hYzo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTWFjKHJ0Yzo6c2Nv
cGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvVHJhY2tJbnRlcmZhY2U+JiYgdmlkZW9UcmFjaywgU3Ry
aW5nJiYgdmlkZW9UcmFja0lkKQorICAgIDogUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlKFdU
Rk1vdmUodmlkZW9UcmFjayksIFdURk1vdmUodmlkZW9UcmFja0lkKSkKK3sKK30KKworQ1ZQaXhl
bEJ1ZmZlclJlZiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWM6OnBpeGVsQnVmZmVyRnJv
bVZpZGVvRnJhbWUoY29uc3Qgd2VicnRjOjpWaWRlb0ZyYW1lJiBmcmFtZSkKK3sKKyAgICBpZiAo
bXV0ZWQoKSkgeworICAgICAgICBpZiAoIW1fYmxhY2tGcmFtZSB8fCBtX2JsYWNrRnJhbWVXaWR0
aCAhPSBmcmFtZS53aWR0aCgpIHx8IG1fYmxhY2tGcmFtZUhlaWdodCAhPSBmcmFtZS5oZWlnaHQo
KSkgeworICAgICAgICAgICAgQ1ZQaXhlbEJ1ZmZlclJlZiBwaXhlbEJ1ZmZlciA9IG51bGxwdHI7
CisgICAgICAgICAgICBhdXRvIHN0YXR1cyA9IENWUGl4ZWxCdWZmZXJDcmVhdGUoa0NGQWxsb2Nh
dG9yRGVmYXVsdCwgZnJhbWUud2lkdGgoKSwgZnJhbWUuaGVpZ2h0KCksIGtDVlBpeGVsRm9ybWF0
VHlwZV80MjBZcENiQ3I4UGxhbmFyLCBudWxscHRyLCAmcGl4ZWxCdWZmZXIpOworICAgICAgICAg
ICAgQVNTRVJUX1VOVVNFRChzdGF0dXMsIHN0YXR1cyA9PSBub0Vycik7CisKKyAgICAgICAgICAg
IG1fYmxhY2tGcmFtZSA9IHBpeGVsQnVmZmVyOworICAgICAgICAgICAgbV9ibGFja0ZyYW1lV2lk
dGggPSBmcmFtZS53aWR0aCgpOworICAgICAgICAgICAgbV9ibGFja0ZyYW1lSGVpZ2h0ID0gZnJh
bWUuaGVpZ2h0KCk7CisKKyAgICAgICAgICAgIHN0YXR1cyA9IENWUGl4ZWxCdWZmZXJMb2NrQmFz
ZUFkZHJlc3MocGl4ZWxCdWZmZXIsIDApOworICAgICAgICAgICAgQVNTRVJUKHN0YXR1cyA9PSBu
b0Vycik7CisgICAgICAgICAgICB2b2lkKiBkYXRhID0gQ1ZQaXhlbEJ1ZmZlckdldEJhc2VBZGRy
ZXNzKHBpeGVsQnVmZmVyKTsKKyAgICAgICAgICAgIHNpemVfdCB5TGVuZ3RoID0gZnJhbWUud2lk
dGgoKSAqIGZyYW1lLmhlaWdodCgpOworICAgICAgICAgICAgbWVtc2V0KGRhdGEsIDAsIHlMZW5n
dGgpOworICAgICAgICAgICAgbWVtc2V0KHN0YXRpY19jYXN0PHVpbnQ4X3QqPihkYXRhKSArIHlM
ZW5ndGgsIDEyOCwgeUxlbmd0aCAvIDIpOworCisgICAgICAgICAgICBzdGF0dXMgPSBDVlBpeGVs
QnVmZmVyVW5sb2NrQmFzZUFkZHJlc3MocGl4ZWxCdWZmZXIsIDApOworICAgICAgICAgICAgQVNT
RVJUKCFzdGF0dXMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtX2JsYWNrRnJhbWUuZ2V0
KCk7CisgICAgfQorICAgIGF1dG8gYnVmZmVyID0gZnJhbWUudmlkZW9fZnJhbWVfYnVmZmVyKCk7
CisgICAgQVNTRVJUKGJ1ZmZlci0+dHlwZSgpID09IHdlYnJ0Yzo6VmlkZW9GcmFtZUJ1ZmZlcjo6
VHlwZTo6a05hdGl2ZSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHdlYnJ0Yzo6Q29yZVZpZGVv
RnJhbWVCdWZmZXImPigqYnVmZmVyKS5waXhlbF9idWZmZXIoKTsKK30KKwordm9pZCBSZWFsdGlt
ZUluY29taW5nVmlkZW9Tb3VyY2VNYWM6Ok9uRnJhbWUoY29uc3Qgd2VicnRjOjpWaWRlb0ZyYW1l
JiBmcmFtZSkKK3sKKyAgICBpZiAoIWlzUHJvZHVjaW5nRGF0YSgpKQorICAgICAgICByZXR1cm47
CisKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICBpZiAoISgrK21fbnVtYmVyT2ZGcmFt
ZXMgJSAzMCkpCisgICAgICAgIFJFTEVBU0VfTE9HKE1lZGlhU3RyZWFtLCAiUmVhbHRpbWVJbmNv
bWluZ1ZpZGVvU291cmNlTWFjOjpPbkZyYW1lICV6dSBmcmFtZSIsIG1fbnVtYmVyT2ZGcmFtZXMp
OworI2VuZGlmCisKKyAgICBhdXRvIHBpeGVsQnVmZmVyID0gcGl4ZWxCdWZmZXJGcm9tVmlkZW9G
cmFtZShmcmFtZSk7CisKKyAgICAvLyBGSVhNRTogQ29udmVydCB0aW1pbmcgaW5mb3JtYXRpb24g
ZnJvbSBWaWRlb0ZyYW1lIHRvIENNU2FtcGxlVGltaW5nSW5mby4KKyAgICAvLyBGb3IgdGhlIG1v
bWVudCwgd2Ugd2lsbCBwcmV0ZW5kIHRoYXQgZnJhbWVzIHNob3VsZCBiZSByZW5kZXJlZCBhc2Fw
LgorICAgIENNU2FtcGxlVGltaW5nSW5mbyB0aW1pbmdJbmZvOworICAgIHRpbWluZ0luZm8ucHJl
c2VudGF0aW9uVGltZVN0YW1wID0ga0NNVGltZUludmFsaWQ7CisgICAgdGltaW5nSW5mby5kZWNv
ZGVUaW1lU3RhbXAgPSBrQ01UaW1lSW52YWxpZDsKKyAgICB0aW1pbmdJbmZvLmR1cmF0aW9uID0g
a0NNVGltZUludmFsaWQ7CisKKyAgICBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25SZWYgZm9ybWF0
RGVzY3JpcHRpb247CisgICAgT1NTdGF0dXMgb3N0YXR1cyA9IENNVmlkZW9Gb3JtYXREZXNjcmlw
dGlvbkNyZWF0ZUZvckltYWdlQnVmZmVyKGtDRkFsbG9jYXRvckRlZmF1bHQsIChDVkltYWdlQnVm
ZmVyUmVmKXBpeGVsQnVmZmVyLCAmZm9ybWF0RGVzY3JpcHRpb24pOworICAgIGlmIChvc3RhdHVz
ICE9IG5vRXJyKSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGluaXRpYWxpemUgQ01W
aWRlb0Zvcm1hdERlc2NyaXB0aW9uOiAlZCIsIHN0YXRpY19jYXN0PGludD4ob3N0YXR1cykpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQ01TYW1wbGVCdWZmZXJSZWYgc2FtcGxlQnVm
ZmVyOworICAgIG9zdGF0dXMgPSBDTVNhbXBsZUJ1ZmZlckNyZWF0ZVJlYWR5V2l0aEltYWdlQnVm
ZmVyKGtDRkFsbG9jYXRvckRlZmF1bHQsIChDVkltYWdlQnVmZmVyUmVmKXBpeGVsQnVmZmVyLCBm
b3JtYXREZXNjcmlwdGlvbiwgJnRpbWluZ0luZm8sICZzYW1wbGVCdWZmZXIpOworICAgIGlmIChv
c3RhdHVzICE9IG5vRXJyKSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSB0
aGUgc2FtcGxlIGJ1ZmZlcjogJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KG9zdGF0dXMpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBDRlJlbGVhc2UoZm9ybWF0RGVzY3JpcHRpb24pOworCisg
ICAgYXV0byBzYW1wbGUgPSBhZG9wdENGKHNhbXBsZUJ1ZmZlcik7CisKKyAgICBDRkFycmF5UmVm
IGF0dGFjaG1lbnRzQXJyYXkgPSBDTVNhbXBsZUJ1ZmZlckdldFNhbXBsZUF0dGFjaG1lbnRzQXJy
YXkoc2FtcGxlQnVmZmVyLCB0cnVlKTsKKyAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCBDRkFy
cmF5R2V0Q291bnQoYXR0YWNobWVudHNBcnJheSk7ICsraSkgeworICAgICAgICBDRk11dGFibGVE
aWN0aW9uYXJ5UmVmIGF0dGFjaG1lbnRzID0gKENGTXV0YWJsZURpY3Rpb25hcnlSZWYpQ0ZBcnJh
eUdldFZhbHVlQXRJbmRleChhdHRhY2htZW50c0FycmF5LCBpKTsKKyAgICAgICAgQ0ZEaWN0aW9u
YXJ5U2V0VmFsdWUoYXR0YWNobWVudHMsIGtDTVNhbXBsZUF0dGFjaG1lbnRLZXlfRGlzcGxheUlt
bWVkaWF0ZWx5LCBrQ0ZCb29sZWFuVHJ1ZSk7CisgICAgfQorCisgICAgdW5zaWduZWQgd2lkdGgg
PSBmcmFtZS53aWR0aCgpOworICAgIHVuc2lnbmVkIGhlaWdodCA9IGZyYW1lLmhlaWdodCgpOwor
CisgICAgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb24gcm90YXRpb247CisgICAgc3dpdGNoIChm
cmFtZS5yb3RhdGlvbigpKSB7CisgICAgY2FzZSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzA6Cisg
ICAgICAgIHJvdGF0aW9uID0gTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246Ok5vbmU7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8xODA6CisgICAgICAg
IHJvdGF0aW9uID0gTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246OlVwc2lkZURvd247CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugd2VicnRjOjprVmlkZW9Sb3RhdGlvbl85MDoKKyAgICAgICAg
cm90YXRpb24gPSBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6UmlnaHQ7CisgICAgICAgIHN0
ZDo6c3dhcCh3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSB3ZWJydGM6
OmtWaWRlb1JvdGF0aW9uXzI3MDoKKyAgICAgICAgcm90YXRpb24gPSBNZWRpYVNhbXBsZTo6Vmlk
ZW9Sb3RhdGlvbjo6TGVmdDsKKyAgICAgICAgc3RkOjpzd2FwKHdpZHRoLCBoZWlnaHQpOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBSZWZQdHI8UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291
cmNlTWFjPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIGNhbGxPbk1haW5UaHJlYWQoW3Byb3Rl
Y3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpLCBzYW1wbGUgPSBXVEZNb3ZlKHNhbXBs
ZSksIHdpZHRoLCBoZWlnaHQsIHJvdGF0aW9uXSB7CisgICAgICAgIHByb3RlY3RlZFRoaXMtPnBy
b2Nlc3NOZXdTYW1wbGUoc2FtcGxlLmdldCgpLCB3aWR0aCwgaGVpZ2h0LCByb3RhdGlvbik7Cisg
ICAgfSk7Cit9CisKK3ZvaWQgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTWFjOjpwcm9jZXNz
TmV3U2FtcGxlKENNU2FtcGxlQnVmZmVyUmVmIHNhbXBsZSwgdW5zaWduZWQgd2lkdGgsIHVuc2ln
bmVkIGhlaWdodCwgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb24gcm90YXRpb24pCit7CisgICAg
bV9idWZmZXIgPSBzYW1wbGU7CisgICAgaWYgKHdpZHRoICE9IG1fY3VycmVudFNldHRpbmdzLndp
ZHRoKCkgfHwgaGVpZ2h0ICE9IG1fY3VycmVudFNldHRpbmdzLmhlaWdodCgpKSB7CisgICAgICAg
IG1fY3VycmVudFNldHRpbmdzLnNldFdpZHRoKHdpZHRoKTsKKyAgICAgICAgbV9jdXJyZW50U2V0
dGluZ3Muc2V0SGVpZ2h0KGhlaWdodCk7CisgICAgICAgIHNldHRpbmdzRGlkQ2hhbmdlKCk7Cisg
ICAgfQorCisgICAgdmlkZW9TYW1wbGVBdmFpbGFibGUoTWVkaWFTYW1wbGVBVkZPYmpDOjpjcmVh
dGUoc2FtcGxlLCByb3RhdGlvbikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBVU0UoTElCV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1hYy5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lSW5jb21pbmdWaWRl
b1NvdXJjZU1hYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRiODA2NDgxMWFmYjYwNTAyMGY2MTNlZmViYjU5ZDE5
MThlNzcxMGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9tYWMvUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTWFjLmgKQEAgLTAsMCArMSw2
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqICAg
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJp
Y3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAg
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoTElCV0VCUlRDKQorCisjaW5jbHVkZSAi
UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmgiCisKK3VzaW5nIENNU2FtcGxlQnVmZmVyUmVm
ID0gc3RydWN0IG9wYXF1ZUNNU2FtcGxlQnVmZmVyKjsKK3VzaW5nIENWUGl4ZWxCdWZmZXJSZWYg
PSBzdHJ1Y3QgX19DVkJ1ZmZlcio7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVh
bHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTWFjIGZpbmFsIDogcHVibGljIFJlYWx0aW1lSW5jb21p
bmdWaWRlb1NvdXJjZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxSZWFsdGltZUluY29taW5n
VmlkZW9Tb3VyY2VNYWM+IGNyZWF0ZShydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb1Ry
YWNrSW50ZXJmYWNlPiYmLCBTdHJpbmcmJik7CisgICAgflJlYWx0aW1lSW5jb21pbmdWaWRlb1Nv
dXJjZU1hYygpIHsgc3RvcFByb2R1Y2luZ0RhdGEoKTsgfQorCitwcml2YXRlOgorICAgIFJlYWx0
aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1hYyhydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRl
b1RyYWNrSW50ZXJmYWNlPiYmLCBTdHJpbmcmJik7CisKKyAgICB2b2lkIHByb2Nlc3NOZXdTYW1w
bGUoQ01TYW1wbGVCdWZmZXJSZWYsIHVuc2lnbmVkLCB1bnNpZ25lZCwgTWVkaWFTYW1wbGU6OlZp
ZGVvUm90YXRpb24pOworICAgIENWUGl4ZWxCdWZmZXJSZWYgcGl4ZWxCdWZmZXJGcm9tVmlkZW9G
cmFtZShjb25zdCB3ZWJydGM6OlZpZGVvRnJhbWUmKTsKKworICAgIC8vIHJ0Yzo6VmlkZW9TaW5r
SW50ZXJmYWNlCisgICAgdm9pZCBPbkZyYW1lKGNvbnN0IHdlYnJ0Yzo6VmlkZW9GcmFtZSYpIGZp
bmFsOworCisgICAgUmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiBtX2J1ZmZlcjsKKyAgICBS
ZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gbV9ibGFja0ZyYW1lOworICAgIGludCBtX2JsYWNr
RnJhbWVXaWR0aCB7IDAgfTsKKyAgICBpbnQgbV9ibGFja0ZyYW1lSGVpZ2h0IHsgMCB9OworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKExJQldFQlJUQykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGlt
ZU91dGdvaW5nVmlkZW9Tb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDNmNDUwZGYzM2M2ZjZhMjU4N2RhMzliNWVjODJjY2ZjZDYwYTBlN2Qu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJj
ZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNyBBcHBsZSBJbmMuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgcmVxdWlyZWQgdG8gYmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICog
My4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mCi0gKiAg
ICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IKLSAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0gKiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUgotICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJS
ZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuaCIKLQotI2lmIFVTRShMSUJXRUJSVEMpCi0KLSNp
bmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSA8d2VicnRjL2FwaS92aWRlby9pNDIwX2J1ZmZl
ci5oPgotI2luY2x1ZGUgPHdlYnJ0Yy9jb21tb25fdmlkZW8vbGlieXV2L2luY2x1ZGUvd2VicnRj
X2xpYnl1di5oPgotI2luY2x1ZGUgPHdlYnJ0Yy9zZGsvb2JqYy9GcmFtZXdvcmsvQ2xhc3Nlcy9W
aWRlby9jb3JldmlkZW9fZnJhbWVfYnVmZmVyLmg+Ci0jaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1l
Lmg+Ci0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLQotI2luY2x1ZGUgIkNvcmVNZWRpYVNv
ZnRMaW5rLmgiCi0jaW5jbHVkZSAiQ29yZVZpZGVvU29mdExpbmsuaCIKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OlJlYWx0aW1lT3V0Z29pbmdW
aWRlb1NvdXJjZShSZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYgdmlkZW9Tb3VyY2UpCi0g
ICAgOiBtX3ZpZGVvU291cmNlKFdURk1vdmUodmlkZW9Tb3VyY2UpKQotICAgICwgbV9ibGFja0Zy
YW1lVGltZXIoKnRoaXMsICZSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnNlbmRPbmVCbGFj
a0ZyYW1lKQotewotICAgIG1fdmlkZW9Tb3VyY2UtPmFkZE9ic2VydmVyKCp0aGlzKTsKLSAgICBp
bml0aWFsaXplRnJvbVNvdXJjZSgpOwotfQotCi1ib29sIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1Nv
dXJjZTo6c2V0U291cmNlKFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4mJiBuZXdTb3VyY2Up
Ci17Ci0gICAgaWYgKCFtX2luaXRpYWxTZXR0aW5ncykKLSAgICAgICAgbV9pbml0aWFsU2V0dGlu
Z3MgPSBtX3ZpZGVvU291cmNlLT5zb3VyY2UoKS5zZXR0aW5ncygpOwotCi0gICAgbV92aWRlb1Nv
dXJjZS0+cmVtb3ZlT2JzZXJ2ZXIoKnRoaXMpOwotICAgIG1fdmlkZW9Tb3VyY2UgPSBXVEZNb3Zl
KG5ld1NvdXJjZSk7Ci0gICAgbV92aWRlb1NvdXJjZS0+YWRkT2JzZXJ2ZXIoKnRoaXMpOwotCi0g
ICAgaW5pdGlhbGl6ZUZyb21Tb3VyY2UoKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lk
IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6c3RvcCgpCi17Ci0gICAgbV92aWRlb1NvdXJj
ZS0+cmVtb3ZlT2JzZXJ2ZXIoKnRoaXMpOwotICAgIG1fYmxhY2tGcmFtZVRpbWVyLnN0b3AoKTsK
LSAgICBtX2lzU3RvcHBlZCA9IHRydWU7Ci19Ci0KLXZvaWQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVv
U291cmNlOjp1cGRhdGVCbGFja0ZyYW1lc1NlbmRpbmcoKQotewotICAgIGlmICghbV9tdXRlZCAm
JiBtX2VuYWJsZWQpIHsKLSAgICAgICAgaWYgKG1fYmxhY2tGcmFtZVRpbWVyLmlzQWN0aXZlKCkp
Ci0gICAgICAgICAgICBtX2JsYWNrRnJhbWVUaW1lci5zdG9wKCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBzZW5kQmxhY2tGcmFtZXNJZk5lZWRlZCgpOwotfQotCi12b2lkIFJlYWx0
aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6c291cmNlTXV0ZWRDaGFuZ2VkKCkKLXsKLSAgICBBU1NF
UlQobV9tdXRlZCAhPSBtX3ZpZGVvU291cmNlLT5tdXRlZCgpKTsKLQotICAgIG1fbXV0ZWQgPSBt
X3ZpZGVvU291cmNlLT5tdXRlZCgpOwotCi0gICAgdXBkYXRlQmxhY2tGcmFtZXNTZW5kaW5nKCk7
Ci19Ci0KLXZvaWQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpzb3VyY2VFbmFibGVkQ2hh
bmdlZCgpCi17Ci0gICAgQVNTRVJUKG1fZW5hYmxlZCAhPSBtX3ZpZGVvU291cmNlLT5lbmFibGVk
KCkpOwotCi0gICAgbV9lbmFibGVkID0gbV92aWRlb1NvdXJjZS0+ZW5hYmxlZCgpOwotCi0gICAg
dXBkYXRlQmxhY2tGcmFtZXNTZW5kaW5nKCk7Ci19Ci0KLXZvaWQgUmVhbHRpbWVPdXRnb2luZ1Zp
ZGVvU291cmNlOjppbml0aWFsaXplRnJvbVNvdXJjZSgpCi17Ci0gICAgY29uc3QgYXV0byYgc2V0
dGluZ3MgPSBtX3ZpZGVvU291cmNlLT5zb3VyY2UoKS5zZXR0aW5ncygpOwotICAgIG1fd2lkdGgg
PSBzZXR0aW5ncy53aWR0aCgpOwotICAgIG1faGVpZ2h0ID0gc2V0dGluZ3MuaGVpZ2h0KCk7Ci0K
LSAgICBtX211dGVkID0gbV92aWRlb1NvdXJjZS0+bXV0ZWQoKTsKLSAgICBtX2VuYWJsZWQgPSBt
X3ZpZGVvU291cmNlLT5lbmFibGVkKCk7Ci0KLSAgICB1cGRhdGVCbGFja0ZyYW1lc1NlbmRpbmco
KTsKLX0KLQotYm9vbCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OkdldFN0YXRzKFN0YXRz
KikKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVv
U291cmNlOjpBZGRPclVwZGF0ZVNpbmsocnRjOjpWaWRlb1NpbmtJbnRlcmZhY2U8d2VicnRjOjpW
aWRlb0ZyYW1lPiogc2luaywgY29uc3QgcnRjOjpWaWRlb1NpbmtXYW50cyYgc2lua1dhbnRzKQot
ewotICAgIEFTU0VSVCghc2lua1dhbnRzLmJsYWNrX2ZyYW1lcyk7Ci0KLSAgICBpZiAoc2lua1dh
bnRzLnJvdGF0aW9uX2FwcGxpZWQpCi0gICAgICAgIG1fc2hvdWxkQXBwbHlSb3RhdGlvbiA9IHRy
dWU7Ci0KLSAgICBpZiAoIW1fc2lua3MuY29udGFpbnMoc2luaykpCi0gICAgICAgIG1fc2lua3Mu
YXBwZW5kKHNpbmspOwotCi0gICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IG1h
a2VSZWYoKnRoaXMpXSgpIHsKLSAgICAgICAgcHJvdGVjdGVkVGhpcy0+c2VuZEJsYWNrRnJhbWVz
SWZOZWVkZWQoKTsKLSAgICB9KTsKLX0KLQotdm9pZCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3Vy
Y2U6OlJlbW92ZVNpbmsocnRjOjpWaWRlb1NpbmtJbnRlcmZhY2U8d2VicnRjOjpWaWRlb0ZyYW1l
Piogc2luaykKLXsKLSAgICBtX3NpbmtzLnJlbW92ZUZpcnN0KHNpbmspOwotCi0gICAgaWYgKG1f
c2lua3Muc2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjYWxsT25NYWluVGhyZWFkKFtw
cm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldKCkgewotICAgICAgICBpZiAocHJvdGVjdGVk
VGhpcy0+bV9ibGFja0ZyYW1lVGltZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgICAgIHByb3RlY3Rl
ZFRoaXMtPm1fYmxhY2tGcmFtZVRpbWVyLnN0b3AoKTsKLSAgICB9KTsKLX0KLQotdm9pZCBSZWFs
dGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnNlbmRCbGFja0ZyYW1lc0lmTmVlZGVkKCkKLXsKLSAg
ICBpZiAobV9ibGFja0ZyYW1lVGltZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKCFtX3NpbmtzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX211
dGVkICYmIG1fZW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX3dpZHRoIHx8
ICFtX2hlaWdodCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX2JsYWNrRnJhbWUpIHsK
LSAgICAgICAgYXV0byB3aWR0aCA9IG1fd2lkdGg7Ci0gICAgICAgIGF1dG8gaGVpZ2h0ID0gbV9o
ZWlnaHQ7Ci0gICAgICAgIGlmIChtX3Nob3VsZEFwcGx5Um90YXRpb24gJiYgKG1fY3VycmVudFJv
dGF0aW9uID09IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMCB8fCBtX2N1cnJlbnRSb3RhdGlvbiA9
PSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzkwKSkKLSAgICAgICAgICAgIHN0ZDo6c3dhcCh3aWR0
aCwgaGVpZ2h0KTsKLSAgICAgICAgYXV0byBmcmFtZSA9IG1fYnVmZmVyUG9vbC5DcmVhdGVCdWZm
ZXIod2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIEFTU0VSVChmcmFtZSk7Ci0gICAgICAgIGlmICgh
ZnJhbWUpIHsKLSAgICAgICAgICAgIFJFTEVBU0VfTE9HKFdlYlJUQywgIlJlYWx0aW1lT3V0Z29p
bmdWaWRlb1NvdXJjZTo6c2VuZEJsYWNrRnJhbWVzSWZOZWVkZWQgdW5hYmxlIHRvIHNlbmQgYmxh
Y2sgZnJhbWVzIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgd2Vi
cnRjOjpJNDIwQnVmZmVyOjpTZXRCbGFjayhmcmFtZS5nZXQoKSk7Ci0gICAgICAgIG1fYmxhY2tG
cmFtZSA9IFdURk1vdmUoZnJhbWUpOwotICAgIH0KLSAgICBzZW5kT25lQmxhY2tGcmFtZSgpOwot
ICAgIG1fYmxhY2tGcmFtZVRpbWVyLnN0YXJ0UmVwZWF0aW5nKDFfcyk7Ci19Ci0KLXZvaWQgUmVh
bHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpzZW5kT25lQmxhY2tGcmFtZSgpCi17Ci0gICAgUkVM
RUFTRV9MT0coTWVkaWFTdHJlYW0sICJSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnNlbmRP
bmVCbGFja0ZyYW1lIik7Ci0gICAgc2VuZEZyYW1lKHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6
OlZpZGVvRnJhbWVCdWZmZXI+KG1fYmxhY2tGcmFtZSkpOwotfQotCi12b2lkIFJlYWx0aW1lT3V0
Z29pbmdWaWRlb1NvdXJjZTo6c2VuZEZyYW1lKHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZp
ZGVvRnJhbWVCdWZmZXI+JiYgYnVmZmVyKQotewotICAgIGludDY0X3QgdGltZXN0YW1wTWljcm9T
ZWNvbmRzID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lTVMoKSAqIDEwMDA7Ci0gICAgd2Vi
cnRjOjpWaWRlb0ZyYW1lIGZyYW1lKGJ1ZmZlciwgbV9zaG91bGRBcHBseVJvdGF0aW9uID8gd2Vi
cnRjOjprVmlkZW9Sb3RhdGlvbl8wIDogbV9jdXJyZW50Um90YXRpb24sIHRpbWVzdGFtcE1pY3Jv
U2Vjb25kcyk7Ci0gICAgZm9yIChhdXRvKiBzaW5rIDogbV9zaW5rcykKLSAgICAgICAgc2luay0+
T25GcmFtZShmcmFtZSk7Ci19Ci0KLXZvaWQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjp2
aWRlb1NhbXBsZUF2YWlsYWJsZShNZWRpYVNhbXBsZSYgc2FtcGxlKQotewotICAgIGlmICghbV9z
aW5rcy5zaXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX211dGVkIHx8ICFtX2Vu
YWJsZWQpCi0gICAgICAgIHJldHVybjsKLQotI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAotICAg
IGlmICghKCsrbV9udW1iZXJPZkZyYW1lcyAlIDMwKSkKLSAgICAgICAgUkVMRUFTRV9MT0coTWVk
aWFTdHJlYW0sICJSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnNlbmRGcmFtZSAlenUgZnJh
bWUiLCBtX251bWJlck9mRnJhbWVzKTsKLSNlbmRpZgotCi0gICAgc3dpdGNoIChzYW1wbGUudmlk
ZW9Sb3RhdGlvbigpKSB7Ci0gICAgY2FzZSBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6Tm9u
ZToKLSAgICAgICAgbV9jdXJyZW50Um90YXRpb24gPSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzA7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246OlVw
c2lkZURvd246Ci0gICAgICAgIG1fY3VycmVudFJvdGF0aW9uID0gd2VicnRjOjprVmlkZW9Sb3Rh
dGlvbl8xODA7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTWVkaWFTYW1wbGU6OlZpZGVvUm90
YXRpb246OlJpZ2h0OgotICAgICAgICBtX2N1cnJlbnRSb3RhdGlvbiA9IHdlYnJ0Yzo6a1ZpZGVv
Um90YXRpb25fOTA7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTWVkaWFTYW1wbGU6OlZpZGVv
Um90YXRpb246OkxlZnQ6Ci0gICAgICAgIG1fY3VycmVudFJvdGF0aW9uID0gd2VicnRjOjprVmlk
ZW9Sb3RhdGlvbl8yNzA7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIEFTU0VSVChzYW1w
bGUucGxhdGZvcm1TYW1wbGUoKS50eXBlID09IFBsYXRmb3JtU2FtcGxlOjpDTVNhbXBsZUJ1ZmZl
clR5cGUpOwotICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBzdGF0aWNfY2FzdDxDVlBpeGVsQnVmZmVy
UmVmPihDTVNhbXBsZUJ1ZmZlckdldEltYWdlQnVmZmVyKHNhbXBsZS5wbGF0Zm9ybVNhbXBsZSgp
LnNhbXBsZS5jbVNhbXBsZUJ1ZmZlcikpOwotICAgIGF1dG8gcGl4ZWxGb3JtYXRUeXBlID0gQ1ZQ
aXhlbEJ1ZmZlckdldFBpeGVsRm9ybWF0VHlwZShwaXhlbEJ1ZmZlcik7Ci0KLSAgICBpZiAocGl4
ZWxGb3JtYXRUeXBlID09IGtDVlBpeGVsRm9ybWF0VHlwZV80MjBZcENiQ3I4UGxhbmFyIHx8IHBp
eGVsRm9ybWF0VHlwZSA9PSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyOEJpUGxhbmFyRnVs
bFJhbmdlKSB7Ci0gICAgICAgIHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvRnJhbWVC
dWZmZXI+IGJ1ZmZlciA9IG5ldyBydGM6OlJlZkNvdW50ZWRPYmplY3Q8d2VicnRjOjpDb3JlVmlk
ZW9GcmFtZUJ1ZmZlcj4ocGl4ZWxCdWZmZXIpOwotICAgICAgICBpZiAobV9zaG91bGRBcHBseVJv
dGF0aW9uICYmIG1fY3VycmVudFJvdGF0aW9uICE9IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMCkg
ewotICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBtYWtlIEFWVmlkZW9DYXB0dXJlU291
cmNlIGhhbmRsZSB0aGUgcm90YXRpb24gd2hlbmV2ZXIgcG9zc2libGUuCi0gICAgICAgICAgICAv
LyBUaGlzIGltcGxlbWVudGF0aW9uIGlzIGluZWZmaWNpZW50LCB3ZSBzaG91bGQgcm90YXRlIG9u
IHRoZSBDTVNhbXBsZUJ1ZmZlciBkaXJlY3RseSBpbnN0ZWFkIG9mIGRvaW5nIHRoaXMgZG91Ymxl
IGFsbG9jYXRpb24uCi0gICAgICAgICAgICBhdXRvIHJvdGF0ZWRCdWZmZXIgPSBidWZmZXItPlRv
STQyMCgpOwotICAgICAgICAgICAgQVNTRVJUKHJvdGF0ZWRCdWZmZXIpOwotICAgICAgICAgICAg
YnVmZmVyID0gd2VicnRjOjpJNDIwQnVmZmVyOjpSb3RhdGUoKnJvdGF0ZWRCdWZmZXIsIG1fY3Vy
cmVudFJvdGF0aW9uKTsKLSAgICAgICAgfQotICAgICAgICBzZW5kRnJhbWUoV1RGTW92ZShidWZm
ZXIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIENWUGl4ZWxCdWZmZXJMb2NrQmFz
ZUFkZHJlc3MocGl4ZWxCdWZmZXIsIDApOwotICAgIGF1dG8qIHNvdXJjZSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDhfdCo+KENWUGl4ZWxCdWZmZXJHZXRCYXNlQWRkcmVzc09mUGxhbmUocGl4ZWxC
dWZmZXIsIDApKTsKLQotICAgIEFTU0VSVChtX3dpZHRoKTsKLSAgICBBU1NFUlQobV9oZWlnaHQp
OwotCi0gICAgYXV0byBuZXdCdWZmZXIgPSBtX2J1ZmZlclBvb2wuQ3JlYXRlQnVmZmVyKG1fd2lk
dGgsIG1faGVpZ2h0KTsKLSAgICBBU1NFUlQobmV3QnVmZmVyKTsKLSAgICBpZiAoIW5ld0J1ZmZl
cikgewotICAgICAgICBSRUxFQVNFX0xPRyhXZWJSVEMsICJSZWFsdGltZU91dGdvaW5nVmlkZW9T
b3VyY2U6OnZpZGVvU2FtcGxlQXZhaWxhYmxlIHVuYWJsZSB0byBhbGxvY2F0ZSBidWZmZXIgZm9y
IGNvbnZlcnNpb24gdG8gWVVWIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHBp
eGVsRm9ybWF0VHlwZSA9PSBrQ1ZQaXhlbEZvcm1hdFR5cGVfMzJCR1JBKQotICAgICAgICB3ZWJy
dGM6OkNvbnZlcnRUb0k0MjAod2VicnRjOjpWaWRlb1R5cGU6OmtBUkdCLCBzb3VyY2UsIDAsIDAs
IG1fd2lkdGgsIG1faGVpZ2h0LCAwLCB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzAsIG5ld0J1ZmZl
cik7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEFTU0VSVChwaXhlbEZvcm1hdFR5cGUgPT0ga0NWUGl4
ZWxGb3JtYXRUeXBlXzMyQVJHQik7Ci0gICAgICAgIHdlYnJ0Yzo6Q29udmVydFRvSTQyMCh3ZWJy
dGM6OlZpZGVvVHlwZTo6a0JHUkEsIHNvdXJjZSwgMCwgMCwgbV93aWR0aCwgbV9oZWlnaHQsIDAs
IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMCwgbmV3QnVmZmVyKTsKLSAgICB9Ci0gICAgQ1ZQaXhl
bEJ1ZmZlclVubG9ja0Jhc2VBZGRyZXNzKHBpeGVsQnVmZmVyLCAwKTsKLSAgICBpZiAobV9zaG91
bGRBcHBseVJvdGF0aW9uICYmIG1fY3VycmVudFJvdGF0aW9uICE9IHdlYnJ0Yzo6a1ZpZGVvUm90
YXRpb25fMCkKLSAgICAgICAgbmV3QnVmZmVyID0gd2VicnRjOjpJNDIwQnVmZmVyOjpSb3RhdGUo
Km5ld0J1ZmZlciwgbV9jdXJyZW50Um90YXRpb24pOwotICAgIHNlbmRGcmFtZShXVEZNb3ZlKG5l
d0J1ZmZlcikpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0Uo
TElCV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vbWFjL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyN2U3OGI1MTY1ZDA1Njk1ZmUxYTQ1ODQwODU5YmIx
MWMxMmU0ODg2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU91dGdvaW5n
VmlkZW9Tb3VyY2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDExNiArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSByZXF1aXJlZCB0byBiZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUgotICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLSAqIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSCi0gKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBVU0Uo
TElCV0VCUlRDKQotCi0jaW5jbHVkZSAiTGliV2ViUlRDTWFjcm9zLmgiCi0jaW5jbHVkZSAiTWVk
aWFTdHJlYW1UcmFja1ByaXZhdGUuaCIKLSNpbmNsdWRlIDxUaW1lci5oPgotI2luY2x1ZGUgPHdl
YnJ0Yy9hcGkvbWVkaWFzdHJlYW1pbnRlcmZhY2UuaD4KLSNpbmNsdWRlIDx3ZWJydGMvYmFzZS9v
cHRpb25hbC5oPgotI2luY2x1ZGUgPHdlYnJ0Yy9jb21tb25fdmlkZW8vaW5jbHVkZS9pNDIwX2J1
ZmZlcl9wb29sLmg+Ci0jaW5jbHVkZSA8d2VicnRjL21lZGlhL2Jhc2UvdmlkZW9zaW5raW50ZXJm
YWNlLmg+Ci0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZFNh
ZmVSZWZDb3VudGVkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUmVhbHRpbWVP
dXRnb2luZ1ZpZGVvU291cmNlIGZpbmFsIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFJl
YWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZT4sIHB1YmxpYyB3ZWJydGM6OlZpZGVvVHJhY2tTb3Vy
Y2VJbnRlcmZhY2UsIHByaXZhdGUgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6Ok9ic2VydmVyIHsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZT4gY3Jl
YXRlKFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4mJiB2aWRlb1NvdXJjZSkgeyByZXR1cm4g
YWRvcHRSZWYoKm5ldyBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UoV1RGTW92ZSh2aWRlb1Nv
dXJjZSkpKTsgfQotICAgIH5SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UoKSB7IHN0b3AoKTsg
fQotCi0gICAgdm9pZCBzdG9wKCk7Ci0gICAgYm9vbCBzZXRTb3VyY2UoUmVmPE1lZGlhU3RyZWFt
VHJhY2tQcml2YXRlPiYmKTsKLSAgICBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYgc291cmNlKCkg
Y29uc3QgeyByZXR1cm4gbV92aWRlb1NvdXJjZS5nZXQoKTsgfQotCi0gICAgaW50IEFkZFJlZigp
IGNvbnN0IGZpbmFsIHsgcmVmKCk7IHJldHVybiByZWZDb3VudCgpOyB9Ci0gICAgaW50IFJlbGVh
c2UoKSBjb25zdCBmaW5hbCB7IGRlcmVmKCk7IHJldHVybiByZWZDb3VudCgpOyB9Ci0KLSAgICB2
b2lkIHNldEFwcGx5Um90YXRpb24oYm9vbCBzaG91bGRBcHBseVJvdGF0aW9uKSB7IG1fc2hvdWxk
QXBwbHlSb3RhdGlvbiA9IHNob3VsZEFwcGx5Um90YXRpb247IH0KLQotcHJpdmF0ZToKLSAgICBS
ZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UoUmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiYm
KTsKLQotICAgIHZvaWQgc2VuZEZyYW1lKHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVv
RnJhbWVCdWZmZXI+JiYpOwotICAgIHZvaWQgc2VuZEJsYWNrRnJhbWVzSWZOZWVkZWQoKTsKLSAg
ICB2b2lkIHNlbmRPbmVCbGFja0ZyYW1lKCk7Ci0gICAgdm9pZCBpbml0aWFsaXplRnJvbVNvdXJj
ZSgpOwotICAgIHZvaWQgdXBkYXRlQmxhY2tGcmFtZXNTZW5kaW5nKCk7Ci0KLSAgICAvLyBOb3Rp
ZmllciBBUEkKLSAgICB2b2lkIFJlZ2lzdGVyT2JzZXJ2ZXIod2VicnRjOjpPYnNlcnZlckludGVy
ZmFjZSopIGZpbmFsIHsgfQotICAgIHZvaWQgVW5yZWdpc3Rlck9ic2VydmVyKHdlYnJ0Yzo6T2Jz
ZXJ2ZXJJbnRlcmZhY2UqKSBmaW5hbCB7IH0KLQotICAgIC8vIFZpZGVvVHJhY2tTb3VyY2VJbnRl
cmZhY2UgQVBJCi0gICAgYm9vbCBpc19zY3JlZW5jYXN0KCkgY29uc3QgZmluYWwgeyByZXR1cm4g
ZmFsc2U7IH0KLSAgICBydGM6Ok9wdGlvbmFsPGJvb2w+IG5lZWRzX2Rlbm9pc2luZygpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIHJ0Yzo6T3B0aW9uYWw8Ym9vbD4oKTsgfQotICAgIGJvb2wgR2V0U3Rh
dHMoU3RhdHMqKSBmaW5hbDsKLQotICAgIC8vIE1lZGlhU291cmNlSW50ZXJmYWNlIEFQSQotICAg
IFNvdXJjZVN0YXRlIHN0YXRlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gU291cmNlU3RhdGUoKTsg
fQotICAgIGJvb2wgcmVtb3RlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAg
Ly8gcnRjOjpWaWRlb1NvdXJjZUludGVyZmFjZTx3ZWJydGM6OlZpZGVvRnJhbWU+IEFQSQotICAg
IHZvaWQgQWRkT3JVcGRhdGVTaW5rKHJ0Yzo6VmlkZW9TaW5rSW50ZXJmYWNlPHdlYnJ0Yzo6Vmlk
ZW9GcmFtZT4qLCBjb25zdCBydGM6OlZpZGVvU2lua1dhbnRzJikgZmluYWw7Ci0gICAgdm9pZCBS
ZW1vdmVTaW5rKHJ0Yzo6VmlkZW9TaW5rSW50ZXJmYWNlPHdlYnJ0Yzo6VmlkZW9GcmFtZT4qKSBm
aW5hbDsKLQotICAgIHZvaWQgc291cmNlTXV0ZWRDaGFuZ2VkKCk7Ci0gICAgdm9pZCBzb3VyY2VF
bmFibGVkQ2hhbmdlZCgpOwotICAgIHZvaWQgdmlkZW9TYW1wbGVBdmFpbGFibGUoTWVkaWFTYW1w
bGUmKTsKLQotICAgIC8vIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpPYnNlcnZlciBBUEkKLSAg
ICB2b2lkIHRyYWNrTXV0ZWRDaGFuZ2VkKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJikgZmluYWwg
eyBzb3VyY2VNdXRlZENoYW5nZWQoKTsgfQotICAgIHZvaWQgdHJhY2tFbmFibGVkQ2hhbmdlZChN
ZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYpIGZpbmFsIHsgc291cmNlRW5hYmxlZENoYW5nZWQoKTsg
fQotICAgIHZvaWQgdHJhY2tTZXR0aW5nc0NoYW5nZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUm
KSBmaW5hbCB7IGluaXRpYWxpemVGcm9tU291cmNlKCk7IH0KLSAgICB2b2lkIHNhbXBsZUJ1ZmZl
clVwZGF0ZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmLCBNZWRpYVNhbXBsZSYgc2FtcGxlKSBm
aW5hbCB7IHZpZGVvU2FtcGxlQXZhaWxhYmxlKHNhbXBsZSk7IH0KLSAgICB2b2lkIHRyYWNrRW5k
ZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmKSBmaW5hbCB7IH0KLQotICAgIFZlY3RvcjxydGM6
OlZpZGVvU2lua0ludGVyZmFjZTx3ZWJydGM6OlZpZGVvRnJhbWU+Kj4gbV9zaW5rczsKLSAgICB3
ZWJydGM6Okk0MjBCdWZmZXJQb29sIG1fYnVmZmVyUG9vbDsKLSAgICBSZWY8TWVkaWFTdHJlYW1U
cmFja1ByaXZhdGU+IG1fdmlkZW9Tb3VyY2U7Ci0gICAgYm9vbCBtX2VuYWJsZWQgeyB0cnVlIH07
Ci0gICAgYm9vbCBtX211dGVkIHsgZmFsc2UgfTsKLSAgICBzdGQ6Om9wdGlvbmFsPFJlYWx0aW1l
TWVkaWFTb3VyY2VTZXR0aW5ncz4gbV9pbml0aWFsU2V0dGluZ3M7Ci0gICAgd2VicnRjOjpWaWRl
b1JvdGF0aW9uIG1fY3VycmVudFJvdGF0aW9uIHsgd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8wIH07
Ci0gICAgdWludDMyX3QgbV93aWR0aCB7IDAgfTsKLSAgICB1aW50MzJfdCBtX2hlaWdodCB7IDAg
fTsKLSAgICBib29sIG1faXNTdG9wcGVkIHsgZmFsc2UgfTsKLSAgICBUaW1lciBtX2JsYWNrRnJh
bWVUaW1lcjsKLSAgICBydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb0ZyYW1lQnVmZmVy
PiBtX2JsYWNrRnJhbWU7Ci0gICAgYm9vbCBtX3Nob3VsZEFwcGx5Um90YXRpb24geyBmYWxzZSB9
OwotI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAotICAgIHNpemVfdCBtX251bWJlck9mRnJhbWVz
IHsgMCB9OwotI2VuZGlmCi19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAv
LyBVU0UoTElCV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vbWFjL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZU1hYy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291
cmNlTWFjLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MDNlZDNjZWVmYTJlMDNkNjljNDhiYTcyODAyM2I4YWQ0
ODhiMTVhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZU1hYy5jcHAKQEAgLTAsMCArMSwx
MTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkLCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIHJlcXVpcmVkIHRvIGJlIG1ldDoKKyAqCisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
CisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTWFjLmgi
CisKKyNpZiBVU0UoTElCV0VCUlRDKQorCisjaW5jbHVkZSA8d2VicnRjL3Nkay9vYmpjL0ZyYW1l
d29yay9DbGFzc2VzL1ZpZGVvL2NvcmV2aWRlb19mcmFtZV9idWZmZXIuaD4KKworI2luY2x1ZGUg
IkNvcmVNZWRpYVNvZnRMaW5rLmgiCisjaW5jbHVkZSAiQ29yZVZpZGVvU29mdExpbmsuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VNYWM6OlJl
YWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZU1hYyhSZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+
JiYgdmlkZW9Tb3VyY2UpCisgICAgOiBSZWFsdGltZU91dGdvaW5nU291cmNlKFdURk1vdmUodmlk
ZW9Tb3VyY2UpKQoreworfQorCit2b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZU1hYzo6
dmlkZW9TYW1wbGVBdmFpbGFibGUoTWVkaWFTYW1wbGUmIHNhbXBsZSkKK3sKKyAgICBpZiAoIW1f
c2lua3Muc2l6ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9tdXRlZCB8fCAhbV9l
bmFibGVkKQorICAgICAgICByZXR1cm47CisKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAg
ICBpZiAoISgrK21fbnVtYmVyT2ZGcmFtZXMgJSAzMCkpCisgICAgICAgIFJFTEVBU0VfTE9HKE1l
ZGlhU3RyZWFtLCAiUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTWFjOjpzZW5kRnJhbWUgJXp1
IGZyYW1lIiwgbV9udW1iZXJPZkZyYW1lcyk7CisjZW5kaWYKKworICAgIHN3aXRjaCAoc2FtcGxl
LnZpZGVvUm90YXRpb24oKSkgeworICAgIGNhc2UgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246
Ok5vbmU6CisgICAgICAgIG1fY3VycmVudFJvdGF0aW9uID0gd2VicnRjOjprVmlkZW9Sb3RhdGlv
bl8wOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9u
OjpVcHNpZGVEb3duOgorICAgICAgICBtX2N1cnJlbnRSb3RhdGlvbiA9IHdlYnJ0Yzo6a1ZpZGVv
Um90YXRpb25fMTgwOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE1lZGlhU2FtcGxlOjpWaWRl
b1JvdGF0aW9uOjpSaWdodDoKKyAgICAgICAgbV9jdXJyZW50Um90YXRpb24gPSB3ZWJydGM6OmtW
aWRlb1JvdGF0aW9uXzkwOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE1lZGlhU2FtcGxlOjpW
aWRlb1JvdGF0aW9uOjpMZWZ0OgorICAgICAgICBtX2N1cnJlbnRSb3RhdGlvbiA9IHdlYnJ0Yzo6
a1ZpZGVvUm90YXRpb25fMjcwOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBBU1NFUlQo
c2FtcGxlLnBsYXRmb3JtU2FtcGxlKCkudHlwZSA9PSBQbGF0Zm9ybVNhbXBsZTo6Q01TYW1wbGVC
dWZmZXJUeXBlKTsKKyAgICBhdXRvIHBpeGVsQnVmZmVyID0gc3RhdGljX2Nhc3Q8Q1ZQaXhlbEJ1
ZmZlclJlZj4oQ01TYW1wbGVCdWZmZXJHZXRJbWFnZUJ1ZmZlcihzYW1wbGUucGxhdGZvcm1TYW1w
bGUoKS5zYW1wbGUuY21TYW1wbGVCdWZmZXIpKTsKKyAgICBhdXRvIHBpeGVsRm9ybWF0VHlwZSA9
IENWUGl4ZWxCdWZmZXJHZXRQaXhlbEZvcm1hdFR5cGUocGl4ZWxCdWZmZXIpOworCisgICAgaWYg
KHBpeGVsRm9ybWF0VHlwZSA9PSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyOFBsYW5hciB8
fCBwaXhlbEZvcm1hdFR5cGUgPT0ga0NWUGl4ZWxGb3JtYXRUeXBlXzQyMFlwQ2JDcjhCaVBsYW5h
ckZ1bGxSYW5nZSkgeworICAgICAgICBydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb0Zy
YW1lQnVmZmVyPiBidWZmZXIgPSBuZXcgcnRjOjpSZWZDb3VudGVkT2JqZWN0PHdlYnJ0Yzo6Q29y
ZVZpZGVvRnJhbWVCdWZmZXI+KHBpeGVsQnVmZmVyKTsKKyAgICAgICAgaWYgKG1fc2hvdWxkQXBw
bHlSb3RhdGlvbiAmJiBtX2N1cnJlbnRSb3RhdGlvbiAhPSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9u
XzApIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbWFrZSBBVlZpZGVvQ2FwdHVy
ZVNvdXJjZSBoYW5kbGUgdGhlIHJvdGF0aW9uIHdoZW5ldmVyIHBvc3NpYmxlLgorICAgICAgICAg
ICAgLy8gVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBpbmVmZmljaWVudCwgd2Ugc2hvdWxkIHJvdGF0
ZSBvbiB0aGUgQ01TYW1wbGVCdWZmZXIgZGlyZWN0bHkgaW5zdGVhZCBvZiBkb2luZyB0aGlzIGRv
dWJsZSBhbGxvY2F0aW9uLgorICAgICAgICAgICAgYXV0byByb3RhdGVkQnVmZmVyID0gYnVmZmVy
LT5Ub0k0MjAoKTsKKyAgICAgICAgICAgIEFTU0VSVChyb3RhdGVkQnVmZmVyKTsKKyAgICAgICAg
ICAgIGJ1ZmZlciA9IHdlYnJ0Yzo6STQyMEJ1ZmZlcjo6Um90YXRlKCpyb3RhdGVkQnVmZmVyLCBt
X2N1cnJlbnRSb3RhdGlvbik7CisgICAgICAgIH0KKyAgICAgICAgc2VuZEZyYW1lKFdURk1vdmUo
YnVmZmVyKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBDVlBpeGVsQnVmZmVyTG9j
a0Jhc2VBZGRyZXNzKHBpeGVsQnVmZmVyLCAwKTsKKyAgICBhdXRvKiBzb3VyY2UgPSByZWludGVy
cHJldF9jYXN0PHVpbnQ4X3QqPihDVlBpeGVsQnVmZmVyR2V0QmFzZUFkZHJlc3NPZlBsYW5lKHBp
eGVsQnVmZmVyLCAwKSk7CisKKyAgICBBU1NFUlQobV93aWR0aCk7CisgICAgQVNTRVJUKG1faGVp
Z2h0KTsKKworICAgIGF1dG8gbmV3QnVmZmVyID0gbV9idWZmZXJQb29sLkNyZWF0ZUJ1ZmZlciht
X3dpZHRoLCBtX2hlaWdodCk7CisgICAgQVNTRVJUKG5ld0J1ZmZlcik7CisgICAgaWYgKCFuZXdC
dWZmZXIpIHsKKyAgICAgICAgUkVMRUFTRV9MT0coV2ViUlRDLCAiUmVhbHRpbWVPdXRnb2luZ1Zp
ZGVvU291cmNlTWFjOjp2aWRlb1NhbXBsZUF2YWlsYWJsZSB1bmFibGUgdG8gYWxsb2NhdGUgYnVm
ZmVyIGZvciBjb252ZXJzaW9uIHRvIFlVViIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGlmIChwaXhlbEZvcm1hdFR5cGUgPT0ga0NWUGl4ZWxGb3JtYXRUeXBlXzMyQkdSQSkKKyAgICAg
ICAgd2VicnRjOjpDb252ZXJ0VG9JNDIwKHdlYnJ0Yzo6VmlkZW9UeXBlOjprQVJHQiwgc291cmNl
LCAwLCAwLCBtX3dpZHRoLCBtX2hlaWdodCwgMCwgd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8wLCBu
ZXdCdWZmZXIpOworICAgIGVsc2UgeworICAgICAgICBBU1NFUlQocGl4ZWxGb3JtYXRUeXBlID09
IGtDVlBpeGVsRm9ybWF0VHlwZV8zMkFSR0IpOworICAgICAgICB3ZWJydGM6OkNvbnZlcnRUb0k0
MjAod2VicnRjOjpWaWRlb1R5cGU6OmtCR1JBLCBzb3VyY2UsIDAsIDAsIG1fd2lkdGgsIG1faGVp
Z2h0LCAwLCB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzAsIG5ld0J1ZmZlcik7CisgICAgfQorICAg
IENWUGl4ZWxCdWZmZXJVbmxvY2tCYXNlQWRkcmVzcyhwaXhlbEJ1ZmZlciwgMCk7CisgICAgaWYg
KG1fc2hvdWxkQXBwbHlSb3RhdGlvbiAmJiBtX2N1cnJlbnRSb3RhdGlvbiAhPSB3ZWJydGM6OmtW
aWRlb1JvdGF0aW9uXzApCisgICAgICAgIG5ld0J1ZmZlciA9IHdlYnJ0Yzo6STQyMEJ1ZmZlcjo6
Um90YXRlKCpuZXdCdWZmZXIsIG1fY3VycmVudFJvdGF0aW9uKTsKKyAgICBzZW5kRnJhbWUoV1RG
TW92ZShuZXdCdWZmZXIpKTsKK30KKworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBVU0UoTElCV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZU1hYy5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1Nv
dXJjZU1hYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdlNjYzODVjY2RlNmRkZjRlNzc0MmVkYmM3ZjhkMTFhZDQz
YzM0NjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTWFjLmgKQEAgLTAsMCArMSw1MCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgcmVxdWlyZWQgdG8gYmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAq
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaWYgVVNFKExJQldFQlJUQykKKworI2luY2x1ZGUgIlJlYWx0aW1lT3V0Z29pbmdWaWRl
b1NvdXJjZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJlYWx0aW1lT3V0Z29p
bmdWaWRlb1NvdXJjZU1hYyBmaW5hbCA6IHB1YmxpYyBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3Vy
Y2UgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNl
TWFjPiBjcmVhdGUoUmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiYmIHZpZGVvU291cmNlKSB7
IHJldHVybiBhZG9wdFJlZigqbmV3IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZU1hYyhXVEZN
b3ZlKHZpZGVvU291cmNlKSkpOyB9CisgICAgflJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZU1h
YygpIHsgfQorCitwcml2YXRlOgorICAgIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZU1hYyhS
ZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYpOworCisgICAgdm9pZCB2aWRlb1NhbXBsZUF2
YWlsYWJsZShNZWRpYVNhbXBsZSYpIGZpbmFsOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gVVNFKExJQldFQlJUQykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322663</attachid>
            <date>2017-10-04 06:22:10 -0700</date>
            <delta_ts>2017-10-04 06:28:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177869-20171004152208.patch</filename>
            <type>text/plain</type>
            <size>77550</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIyODM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjU0NjFlNWRhZjY2YjU4
N2NiNjU4MzAxNmNlZDg4YmFlNzhiOTJlZS4uYjA0ZDg3OTEzMDAxMDI4MjBiZjU3YTAyNjUzZmMz
Mzc5YWJlMGExNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDE3LTEwLTA0ICBBbGVq
YW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisgICAgICAgIE1ha2UgUmVhbHRp
bWVJbmNvbWluZ0F1ZGlvU291cmNlcyBhbmQgUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlcyBw
b3J0IGFnbm9zdGljCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzc4NjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBSZWZhY3RvciB0aGUgUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlIGFuZCBSZWFsdGlt
ZU91dGdvaW5nQXVkaW9Tb3VyY2UgY2xhc3NlcywKKyAgICAgICAgbW92ZSB0aGUgbWFjIHNwZWNp
ZmljIGNvZGUgdG8gYSBkaWZmZXJlbnQgY2xhc3MuIFRoaXMgd2F5IHdlIGNhbiB1c2UgdGhlbSBm
cm9tCisgICAgICAgIG90aGVyIHBvcnRzLgorCisgICAgICAgIE5vIG5ldyBmdW5jdGlvbmFsaXR5
LCBqdXN0IGEgcmVmYWN0b3IuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAg
KiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0v
bWVkaWFzdHJlYW0vUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6OlJlYWx0aW1lSW5jb21p
bmdWaWRlb1NvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9T
b3VyY2U6OnN0YXJ0UHJvZHVjaW5nRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUlu
Y29taW5nVmlkZW9Tb3VyY2U6OnNldFNvdXJjZVRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
YWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6c3RvcFByb2R1Y2luZ0RhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlOjpjYXBhYmlsaXRpZXMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlOjpzZXR0aW5n
cyBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVJbmNvbWlu
Z1ZpZGVvU291cmNlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL21hYy9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuaC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuY3BwOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lT3V0
Z29pbmdWaWRlb1NvdXJjZS5jcHAuCisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5n
VmlkZW9Tb3VyY2U6OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVh
bHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmguCisg
ICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnZpZGVvU2FtcGxl
QXZhaWxhYmxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVJ
bmNvbWluZ1ZpZGVvU291cmNlTWFjLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuY3BwLgor
ICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTWFjOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTWFjOjpSZWFs
dGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWMpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJ
bmNvbWluZ1ZpZGVvU291cmNlTWFjOjpwaXhlbEJ1ZmZlckZyb21WaWRlb0ZyYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1hYzo6T25GcmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWM6OnByb2Nlc3NO
ZXdTYW1wbGUpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUlu
Y29taW5nVmlkZW9Tb3VyY2VNYWMuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuaC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNl
TWFjLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nVmlkZW9T
b3VyY2VNYWM6OlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZU1hYyk6CisgICAgICAgIChXZWJD
b3JlOjpSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VNYWM6OnZpZGVvU2FtcGxlQXZhaWxhYmxl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1Zp
ZGVvU291cmNlTWFjLmg6IEFkZGVkLgorCiAyMDE3LTEwLTA0ICBNaWNoYWVsIENhdGFuemFybyAg
PG1jYXRhbnphcm9AaWdhbGlhLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OKHIyMjIzOTIpOiBb
V1BFXVtHVEtdIE1hbnkgZm9ybXMgdGVzdHMgYXJlIGZhaWxpbmcgZHVlIHRvIGJyb2tlbiBldmVu
dCB0aW1lc3RhbXBzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBi
L1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDFjYzE2YzdkMWZhYmRlZjY1Nzhi
NDIyMTExZGJiNTY1ZTM5MDQ4OWQuLjhjYjVjNDQwZTBhM2VmZDlkNTg3ZGFiOTA3ZGVhYmQ3N2Zi
Y2MzMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0yNTUxLDkgKzI1NTEsMTEgQEAgc2V0KFdl
YkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3Vy
Y2VTdXBwb3J0ZWRDb25zdHJhaW50cy5jcHAKICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SVENJ
Y2VDYW5kaWRhdGVEZXNjcmlwdG9yLmNwcAogICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL1JUQ1Nl
c3Npb25EZXNjcmlwdGlvbkRlc2NyaXB0b3IuY3BwCisgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0v
UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmNwcAogICAgIHBsYXRmb3JtL21lZGlhc3RyZWFt
L1JlYWx0aW1lTWVkaWFTb3VyY2UuY3BwCiAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRp
bWVNZWRpYVNvdXJjZUNlbnRlci5jcHAKICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGlt
ZU1lZGlhU291cmNlU2V0dGluZ3MuY3BwCisgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRp
bWVPdXRnb2luZ1ZpZGVvU291cmNlLmNwcAogICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL1NEUFBy
b2Nlc3NvclNjcmlwdFJlc291cmNlLmNwcAogCiAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGli
d2VicnRjL0xpYldlYlJUQ1Byb3ZpZGVyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGIwZTc1NDk3MGIwNDBiM2M1NTBiMDcx
NzA1MDk2MWJkZGQ4NzZmMjUuLjRkNjEyNTA1MWUwMjUyMzRkN2MwNGUyNjI1NDNjNWE4NzcwYzA0
NGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKQEAgLTI3NTQsNyArMjc1NCw5IEBACiAJCTVDRDlGNTY3MUFBMEY3NDIwMERBNDVGRiAv
KiBERkFCeXRlY29kZUNvbXBpbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1QzM5MzA1RjFBQTBGNkE5MDAyOUM4MTYgLyogREZBQnl0ZWNvZGVDb21w
aWxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTVDRDlGNTY4MUFBMEY3NDYwMERBNDVGRiAvKiBERkFCeXRlY29kZUludGVycHJldGVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzM5MzA2MTFBQTBG
NkE5MDAyOUM4MTYgLyogREZBQnl0ZWNvZGVJbnRlcnByZXRlci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTVDREQ4MzNEMUU0MzI0RDkwMDYyMUU5
MiAvKiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNERDgzM0IxRTQzMjRCQjAwNjIxRTkyIC8qIFJl
YWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5jcHAgKi87IH07CisJCTVDREQ4MzNEMUU0MzI0RDkw
MDYyMUU5MyAvKiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VNYWMuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNERDgzM0IxRTQzMjRCQjAwNjIx
RTkzIC8qIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZU1hYy5jcHAgKi87IH07CiAJCTVDREQ4
MzNFMUU0MzI0REMwMDYyMUU5MiAvKiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNERDgzMzkxRTQz
MjRCQjAwNjIxRTkyIC8qIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5jcHAgKi87IH07CisJ
CTVDREQ4MzNFMUU0MzI0REMwMDYyMUU5MyAvKiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VN
YWMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNE
RDgzMzkxRTQzMjRCQjAwNjIxRTkzIC8qIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1hYy5j
cHAgKi87IH07CiAJCTVDREQ4MzY0MUU0MzI1QTAwMDYyMUU5MiAvKiBMaWJXZWJSVENEYXRhQ2hh
bm5lbEhhbmRsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNUNERDgzM0YxRTQzMjUzRDAwNjIxRTkyIC8qIExpYldlYlJUQ0RhdGFDaGFubmVsSGFu
ZGxlci5jcHAgKi87IH07CiAJCTVDREZBNkM4MUFBNEYyREEwMEVBODc0NiAvKiBDb250ZW50RXh0
ZW5zaW9uQWN0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNUNERkE2QzcxQUE0RjJEQTAwRUE4NzQ2IC8qIENvbnRlbnRFeHRlbnNpb25BY3Rpb25z
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNUNF
NUQ5QUIxREI4OUEwMzAwQ0U3QThEIC8qIEpTVGV4dERlY29kZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNFNUQ5QTcxREI4OTlGQzAwQ0U3QThE
IC8qIEpTVGV4dERlY29kZXIuY3BwICovOyB9OwpAQCAtMTA3MDQsOCArMTA3MDYsMTAgQEAKIAkJ
NUNCQzhEQUExQUFBMzAyMjAwRTFDODAzIC8qIE1lZGlhQWNjZXNzaWJpbGl0eVNvZnRMaW5rLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlhQWNjZXNzaWJpbGl0
eVNvZnRMaW5rLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNCQzhEQUIxQUFB
MzAyMjAwRTFDODAzIC8qIE1lZGlhQWNjZXNzaWJpbGl0eVNvZnRMaW5rLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhQWNjZXNzaWJpbGl0eVNvZnRMaW5rLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDREQ4MzM5MUU0MzI0QkIwMDYyMUU5MiAvKiBSZWFs
dGltZUluY29taW5nVmlkZW9Tb3VyY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNUNERDgzMzkxRTQzMjRCQjAwNjIxRTkzIC8qIFJlYWx0aW1lSW5jb21p
bmdWaWRlb1NvdXJjZU1hYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1Q0REODMzQTFFNDMyNEJCMDA2MjFFOTIgLyogUmVhbHRpbWVJbmNvbWluZ1Zp
ZGVvU291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlYWx0aW1lSW5j
b21pbmdWaWRlb1NvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Q0REODMz
QjFFNDMyNEJCMDA2MjFFOTIgLyogUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1Nv
dXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDREQ4MzNCMUU0MzI0QkIw
MDYyMUU5MyAvKiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VNYWMuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTWFj
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNERDgzM0MxRTQzMjRCQjAwNjIx
RTkyIC8qIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNUNERDgzM0YxRTQzMjUzRDAwNjIxRTkyIC8qIExpYldlYlJUQ0Rh
dGFDaGFubmVsSGFuZGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBMaWJXZWJSVENEYXRhQ2hhbm5lbEhhbmRsZXIuY3BwOyBwYXRoID0gbGlid2VicnRjL0xpYldl
YlJUQ0RhdGFDaGFubmVsSGFuZGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTVDREQ4MzQwMUU0MzI1M0QwMDYyMUU5MiAvKiBMaWJXZWJSVENEYXRhQ2hhbm5lbEhhbmRsZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTGliV2ViUlRDRGF0YUNoYW5uZWxI
YW5kbGVyLmg7IHBhdGggPSBsaWJ3ZWJydGMvTGliV2ViUlRDRGF0YUNoYW5uZWxIYW5kbGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjUzNyw2ICsxNjU0MSw4IEBACiAJCQkJ
MDdGRkRFNjYxODFBRUQ0MjAwNzJENDA5IC8qIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmNwcCAq
LywKIAkJCQkwN0ZGREU2NzE4MUFFRDQyMDA3MkQ0MDkgLyogTWVkaWFTdHJlYW1UcmFja1ByaXZh
dGUuaCAqLywKIAkJCQk1RUJCODkzODFDNzdCREE0MDBDNjVENDEgLyogUGVlck1lZGlhRGVzY3Jp
cHRpb24uaCAqLywKKwkJCQk1Q0REODMzOTFFNDMyNEJCMDA2MjFFOTIgLyogUmVhbHRpbWVJbmNv
bWluZ1ZpZGVvU291cmNlLmNwcCAqLywKKwkJCQk1Q0REODMzQTFFNDMyNEJCMDA2MjFFOTIgLyog
UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmggKi8sCiAJCQkJNEE0RjY1NkIxQUE5OTdGMTAw
RTM4Q0REIC8qIFJlYWx0aW1lTWVkaWFTb3VyY2UuY3BwICovLAogCQkJCTRBNEY2NTZDMUFBOTk3
RjEwMEUzOENERCAvKiBSZWFsdGltZU1lZGlhU291cmNlLmggKi8sCiAJCQkJNEE0RjY1NkQxQUE5
OTdGMTAwRTM4Q0REIC8qIFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMuaCAqLywKQEAg
LTE2NTQ2LDYgKzE2NTUyLDggQEAKIAkJCQk0QTRGNjU2RjFBQTk5N0YxMDBFMzhDREQgLyogUmVh
bHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzLmggKi8sCiAJCQkJMkVDNDFERTIxQzA0MTBBMzAwRDI5
NEZFIC8qIFJlYWx0aW1lTWVkaWFTb3VyY2VTdXBwb3J0ZWRDb25zdHJhaW50cy5jcHAgKi8sCiAJ
CQkJMDdDMUMwRTQxQkZCNjBFRDAwQkQyMjU2IC8qIFJlYWx0aW1lTWVkaWFTb3VyY2VTdXBwb3J0
ZWRDb25zdHJhaW50cy5oICovLAorCQkJCTVDREQ4MzNCMUU0MzI0QkIwMDYyMUU5MiAvKiBSZWFs
dGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuY3BwICovLAorCQkJCTVDREQ4MzNDMUU0MzI0QkIwMDYy
MUU5MiAvKiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuaCAqLywKIAkJCQkzMTM1OTEwQzFF
N0REQ0I2MDBGMzA2MzAgLyogUlRDQnVuZGxlUG9saWN5LmggKi8sCiAJCQkJMDcyMjFCQTIxN0NG
MEFENDAwODQ4RTUxIC8qIFJUQ0RhdGFDaGFubmVsSGFuZGxlci5oICovLAogCQkJCTA3MjIxQkEz
MTdDRjBBRDQwMDg0OEU1MSAvKiBSVENEYXRhQ2hhbm5lbEhhbmRsZXJDbGllbnQuaCAqLywKQEAg
LTE2NTk4LDE0ICsxNjYwNiwxMiBAQAogCQkJCTA3RUU3NkVFMUJFQTYxOTgwMEY4OTEzMyAvKiBN
b2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5tbSAqLywKIAkJCQk0MTEwM0FBQTFFMzk3OTBBMDA3
NjlGMDMgLyogUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlLmNwcCAqLywKIAkJCQk0MTEwM0FB
OTFFMzk3OTBBMDA3NjlGMDMgLyogUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlLmggKi8sCi0J
CQkJNUNERDgzMzkxRTQzMjRCQjAwNjIxRTkyIC8qIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJj
ZS5jcHAgKi8sCi0JCQkJNUNERDgzM0ExRTQzMjRCQjAwNjIxRTkyIC8qIFJlYWx0aW1lSW5jb21p
bmdWaWRlb1NvdXJjZS5oICovLAorCQkJCTVDREQ4MzM5MUU0MzI0QkIwMDYyMUU5MyAvKiBSZWFs
dGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWMuY3BwICovLAogCQkJCTRBMEZGQUEzMUFBRjVFRjYw
MDYyODAzQiAvKiBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTWFjLmNwcCAqLywKIAkJCQk0QTBG
RkFBNDFBQUY1RUY2MDA2MjgwM0IgLyogUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck1hYy5oICov
LAogCQkJCTQxMTAzQUE3MUUzOTc5MEEwMDc2OUYwMyAvKiBSZWFsdGltZU91dGdvaW5nQXVkaW9T
b3VyY2UuY3BwICovLAogCQkJCTQxMTAzQUE4MUUzOTc5MEEwMDc2OUYwMyAvKiBSZWFsdGltZU91
dGdvaW5nQXVkaW9Tb3VyY2UuaCAqLywKLQkJCQk1Q0REODMzQjFFNDMyNEJCMDA2MjFFOTIgLyog
UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmNwcCAqLywKLQkJCQk1Q0REODMzQzFFNDMyNEJC
MDA2MjFFOTIgLyogUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmggKi8sCisJCQkJNUNERDgz
M0IxRTQzMjRCQjAwNjIxRTkzIC8qIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZU1hYy5jcHAg
Ki8sCiAJCQkJMDdENjM3M0UxQkIwQjExMzAwMjU2Q0U5IC8qIFdlYkF1ZGlvU291cmNlUHJvdmlk
ZXJBVkZPYmpDLmggKi8sCiAJCQkJMDdENjM3M0YxQkIwQjExMzAwMjU2Q0U5IC8qIFdlYkF1ZGlv
U291cmNlUHJvdmlkZXJBVkZPYmpDLm1tICovLAogCQkJKTsKQEAgLTMzNjM5LDYgKzMzNjQ1LDcg
QEAKIAkJCQlGRDMxNjAzQjEyQjAyNjc2MDBDMUEzNTkgLyogUmVhbHRpbWVBbmFseXNlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk0MTEwM0FBRTFFMzk3OTEwMDA3NjlGMDMgLyogUmVhbHRpbWVJ
bmNvbWluZ0F1ZGlvU291cmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDREQ4MzNFMUU0MzI0
REMwMDYyMUU5MiAvKiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJNUNERDgzM0UxRTQzMjREQzAwNjIxRTkzIC8qIFJlYWx0aW1lSW5jb21pbmdWaWRl
b1NvdXJjZU1hYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0QTRGNjU3MDFBQTk5N0YxMDBFMzhD
REQgLyogUmVhbHRpbWVNZWRpYVNvdXJjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0QTBGRkFB
MTFBQUY1RUEyMDA2MjgwM0IgLyogUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk0QTBGRkFBNTFBQUY1RUY2MDA2MjgwM0IgLyogUmVhbHRpbWVNZWRpYVNv
dXJjZUNlbnRlck1hYy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTMzNjQ2LDYgKzMzNjUzLDcgQEAK
IAkJCQkyRUM0MURFNDFDMDQxMEEzMDBEMjk0RkUgLyogUmVhbHRpbWVNZWRpYVNvdXJjZVN1cHBv
cnRlZENvbnN0cmFpbnRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQxMTAzQUFCMUUzOTc5MTAw
MDc2OUYwMyAvKiBSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNUNERDgzM0QxRTQzMjREOTAwNjIxRTkyIC8qIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1Nv
dXJjZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1Q0REODMzRDFFNDMyNEQ5MDA2MjFFOTMgLyog
UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTWFjLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZE
NDVBOTVBMTc1RDQxNzEwMEMyMUVDOCAvKiBSZWN0YW5nbGVTaGFwZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlCQ0FCNDE4MTEzRTM1NkU4MDBEOEFBRjMgLyogUmVnaW9uLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE1NzhGNDQwMURFMEI2MzQwMDNERkM2QSAvKiBSZWplY3RlZFByb21pc2VUcmFj
a2VyLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZWQ3MjcwYWE0ZjFiNmIzMTgzYjQ0ZDQ4YzA3YjBkMTM4MGYyMjU2Ygot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1Jl
YWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5jcHAKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqICAgIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRp
c3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5o
IgorCisjaWYgVVNFKExJQldFQlJUQykKKworI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitSZWY8UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlPiBSZWFsdGlt
ZUluY29taW5nVmlkZW9Tb3VyY2U6OmNyZWF0ZShydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpW
aWRlb1RyYWNrSW50ZXJmYWNlPiYmIHZpZGVvVHJhY2ssIFN0cmluZyYmIHRyYWNrSWQpCit7Cisj
aWYgUExBVEZPUk0oQ09DT0EpCisgICAgYXV0byBzb3VyY2UgPSBhZG9wdFJlZigqbmV3IFJlYWx0
aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1hYyhXVEZNb3ZlKHZpZGVvVHJhY2spLCBXVEZNb3ZlKHRy
YWNrSWQpKSk7CisjZWxzZQorICAgIGF1dG8gc291cmNlID0gYWRvcHRSZWYoKm5ldyBSZWFsdGlt
ZUluY29taW5nVmlkZW9Tb3VyY2UoV1RGTW92ZSh2aWRlb1RyYWNrKSwgV1RGTW92ZSh0cmFja0lk
KSkpOworI2VuZGlmCisgICAgc291cmNlLT5zdGFydCgpOworICAgIHJldHVybiBzb3VyY2U7Cit9
CisKK1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291
cmNlKHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvVHJhY2tJbnRlcmZhY2U+JiYgdmlk
ZW9UcmFjaywgU3RyaW5nJiYgdmlkZW9UcmFja0lkKQorICAgIDogUmVhbHRpbWVNZWRpYVNvdXJj
ZShXVEZNb3ZlKHZpZGVvVHJhY2tJZCksIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OlZpZGVv
LCBTdHJpbmcoKSkKKyAgICAsIG1fdmlkZW9UcmFjayhXVEZNb3ZlKHZpZGVvVHJhY2spKQorewor
ICAgIG1fY3VycmVudFNldHRpbmdzLnNldFdpZHRoKDY0MCk7CisgICAgbV9jdXJyZW50U2V0dGlu
Z3Muc2V0SGVpZ2h0KDQ4MCk7CisgICAgbm90aWZ5TXV0ZWRDaGFuZ2UoIW1fdmlkZW9UcmFjayk7
Cit9CisKK3ZvaWQgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlOjpzdGFydFByb2R1Y2luZ0Rh
dGEoKQoreworICAgIGlmIChtX3ZpZGVvVHJhY2spCisgICAgICAgIG1fdmlkZW9UcmFjay0+QWRk
T3JVcGRhdGVTaW5rKHRoaXMsIHJ0Yzo6VmlkZW9TaW5rV2FudHMoKSk7Cit9CisKK3ZvaWQgUmVh
bHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlOjpzZXRTb3VyY2VUcmFjayhydGM6OnNjb3BlZF9yZWZw
dHI8d2VicnRjOjpWaWRlb1RyYWNrSW50ZXJmYWNlPiYmIHRyYWNrKQoreworICAgIEFTU0VSVCgh
bV92aWRlb1RyYWNrKTsKKyAgICBBU1NFUlQodHJhY2spOworCisgICAgbV92aWRlb1RyYWNrID0g
V1RGTW92ZSh0cmFjayk7CisgICAgbm90aWZ5TXV0ZWRDaGFuZ2UoIW1fdmlkZW9UcmFjayk7Cisg
ICAgaWYgKGlzUHJvZHVjaW5nRGF0YSgpKQorICAgICAgICBtX3ZpZGVvVHJhY2stPkFkZE9yVXBk
YXRlU2luayh0aGlzLCBydGM6OlZpZGVvU2lua1dhbnRzKCkpOworfQorCit2b2lkIFJlYWx0aW1l
SW5jb21pbmdWaWRlb1NvdXJjZTo6c3RvcFByb2R1Y2luZ0RhdGEoKQoreworICAgIGlmIChtX3Zp
ZGVvVHJhY2spCisgICAgICAgIG1fdmlkZW9UcmFjay0+UmVtb3ZlU2luayh0aGlzKTsKK30KKwor
Y29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcyYgUmVhbHRpbWVJbmNvbWluZ1Zp
ZGVvU291cmNlOjpjYXBhYmlsaXRpZXMoKSBjb25zdAoreworICAgIHJldHVybiBSZWFsdGltZU1l
ZGlhU291cmNlQ2FwYWJpbGl0aWVzOjplbXB0eUNhcGFiaWxpdGllcygpOworfQorCitjb25zdCBS
ZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MmIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6
c2V0dGluZ3MoKSBjb25zdAoreworICAgIHJldHVybiBtX2N1cnJlbnRTZXR0aW5nczsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKExJQldFQlJUQykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lSW5jb21p
bmdWaWRlb1NvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVh
bHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTUwMzhmNjNlOTU2ZGZhZjc4
YWU1N2M2MjM0ZTBkYTZmNDZhZjdjOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5oCkBAIC0w
LDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz
CisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKExJQldFQlJUQykKKworI2lu
Y2x1ZGUgIkxpYldlYlJUQ01hY3Jvcy5oIgorI2luY2x1ZGUgIlJlYWx0aW1lTWVkaWFTb3VyY2Uu
aCIKKyNpbmNsdWRlIDx3ZWJydGMvYXBpL21lZGlhc3RyZWFtaW50ZXJmYWNlLmg+CisjaW5jbHVk
ZSA8d3RmL1JldGFpblB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENhcHR1
cmVEZXZpY2U7CisKK2NsYXNzIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZSA6IHB1YmxpYyBS
ZWFsdGltZU1lZGlhU291cmNlLCBwcml2YXRlIHJ0Yzo6VmlkZW9TaW5rSW50ZXJmYWNlPHdlYnJ0
Yzo6VmlkZW9GcmFtZT4geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8UmVhbHRpbWVJbmNvbWlu
Z1ZpZGVvU291cmNlPiBjcmVhdGUocnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9UcmFj
a0ludGVyZmFjZT4mJiwgU3RyaW5nJiYpOworICAgIH5SZWFsdGltZUluY29taW5nVmlkZW9Tb3Vy
Y2UoKSB7IHN0b3BQcm9kdWNpbmdEYXRhKCk7IH0KKworICAgIHZvaWQgc2V0U291cmNlVHJhY2so
cnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9UcmFja0ludGVyZmFjZT4mJik7CisKK3By
b3RlY3RlZDoKKyAgICBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MgbV9jdXJyZW50U2V0dGlu
Z3M7CisKK3ByaXZhdGU6CisgICAgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlKHJ0Yzo6c2Nv
cGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvVHJhY2tJbnRlcmZhY2U+JiYsIFN0cmluZyYmKTsKKwor
ICAgIC8vIFJlYWx0aW1lTWVkaWFTb3VyY2UgQVBJCisgICAgdm9pZCBzdGFydFByb2R1Y2luZ0Rh
dGEoKSBmaW5hbDsKKyAgICB2b2lkIHN0b3BQcm9kdWNpbmdEYXRhKCkgIGZpbmFsOworCisgICAg
Y29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcyYgY2FwYWJpbGl0aWVzKCkgY29u
c3QgZmluYWw7CisgICAgY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzJiBzZXR0aW5n
cygpIGNvbnN0IGZpbmFsOworCisgICAgYm9vbCBhcHBseVNpemUoY29uc3QgSW50U2l6ZSYpIGZp
bmFsIHsgcmV0dXJuIHRydWU7IH0KKworICAgIC8vIHJ0Yzo6VmlkZW9TaW5rSW50ZXJmYWNlCisg
ICAgdm9pZCBPbkZyYW1lKGNvbnN0IHdlYnJ0Yzo6VmlkZW9GcmFtZSYpIG92ZXJyaWRlIHsgfTsK
KworICAgIHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvVHJhY2tJbnRlcmZhY2U+IG1f
dmlkZW9UcmFjazsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVT
RShMSUJXRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi40Mzc2NWRmMmU2MGE4YzZiYWU1YWFmODNmNjM1Zjk5MTk5NzVkN2NmCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVPdXRn
b2luZ1ZpZGVvU291cmNlLmNwcApAQCAtMCwwICsxLDIwMiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNyBBcHBsZSBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgcmVxdWlyZWQgdG8gYmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICog
My4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mCisgKiAg
ICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJS
ZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuaCIKKworI2lmIFVTRShMSUJXRUJSVEMpCisKKyNp
bmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSA8d2VicnRjL2FwaS92aWRlby9pNDIwX2J1ZmZl
ci5oPgorI2luY2x1ZGUgPHdlYnJ0Yy9jb21tb25fdmlkZW8vbGlieXV2L2luY2x1ZGUvd2VicnRj
X2xpYnl1di5oPgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorI2luY2x1ZGUgPHd0Zi9N
YWluVGhyZWFkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVmPFJlYWx0aW1lT3V0Z29p
bmdWaWRlb1NvdXJjZT4gUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpjcmVhdGUoUmVmPE1l
ZGlhU3RyZWFtVHJhY2tQcml2YXRlPiYmIHZpZGVvU291cmNlKQoreworI2lmIFBMQVRGT1JNKENP
Q09BKQorICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJj
ZU1hYyhXVEZNb3ZlKHZpZGVvU291cmNlKSkpOworI2Vsc2UKKyAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UoV1RGTW92ZSh2aWRlb1NvdXJjZSkpKTsK
KyNlbmRpZgorfQorCitSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OlJlYWx0aW1lT3V0Z29p
bmdWaWRlb1NvdXJjZShSZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYgdmlkZW9Tb3VyY2Up
CisgICAgOiBtX3ZpZGVvU291cmNlKFdURk1vdmUodmlkZW9Tb3VyY2UpKQorICAgICwgbV9ibGFj
a0ZyYW1lVGltZXIoKnRoaXMsICZSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnNlbmRPbmVC
bGFja0ZyYW1lKQoreworICAgIG1fdmlkZW9Tb3VyY2UtPmFkZE9ic2VydmVyKCp0aGlzKTsKKyAg
ICBpbml0aWFsaXplRnJvbVNvdXJjZSgpOworfQorCitib29sIFJlYWx0aW1lT3V0Z29pbmdWaWRl
b1NvdXJjZTo6c2V0U291cmNlKFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4mJiBuZXdTb3Vy
Y2UpCit7CisgICAgaWYgKCFtX2luaXRpYWxTZXR0aW5ncykKKyAgICAgICAgbV9pbml0aWFsU2V0
dGluZ3MgPSBtX3ZpZGVvU291cmNlLT5zb3VyY2UoKS5zZXR0aW5ncygpOworCisgICAgbV92aWRl
b1NvdXJjZS0+cmVtb3ZlT2JzZXJ2ZXIoKnRoaXMpOworICAgIG1fdmlkZW9Tb3VyY2UgPSBXVEZN
b3ZlKG5ld1NvdXJjZSk7CisgICAgbV92aWRlb1NvdXJjZS0+YWRkT2JzZXJ2ZXIoKnRoaXMpOwor
CisgICAgaW5pdGlhbGl6ZUZyb21Tb3VyY2UoKTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2
b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6c3RvcCgpCit7CisgICAgbV92aWRlb1Nv
dXJjZS0+cmVtb3ZlT2JzZXJ2ZXIoKnRoaXMpOworICAgIG1fYmxhY2tGcmFtZVRpbWVyLnN0b3Ao
KTsKKyAgICBtX2lzU3RvcHBlZCA9IHRydWU7Cit9CisKK3ZvaWQgUmVhbHRpbWVPdXRnb2luZ1Zp
ZGVvU291cmNlOjp1cGRhdGVCbGFja0ZyYW1lc1NlbmRpbmcoKQoreworICAgIGlmICghbV9tdXRl
ZCAmJiBtX2VuYWJsZWQpIHsKKyAgICAgICAgaWYgKG1fYmxhY2tGcmFtZVRpbWVyLmlzQWN0aXZl
KCkpCisgICAgICAgICAgICBtX2JsYWNrRnJhbWVUaW1lci5zdG9wKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBzZW5kQmxhY2tGcmFtZXNJZk5lZWRlZCgpOworfQorCit2b2lkIFJl
YWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6c291cmNlTXV0ZWRDaGFuZ2VkKCkKK3sKKyAgICBB
U1NFUlQobV9tdXRlZCAhPSBtX3ZpZGVvU291cmNlLT5tdXRlZCgpKTsKKworICAgIG1fbXV0ZWQg
PSBtX3ZpZGVvU291cmNlLT5tdXRlZCgpOworCisgICAgdXBkYXRlQmxhY2tGcmFtZXNTZW5kaW5n
KCk7Cit9CisKK3ZvaWQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpzb3VyY2VFbmFibGVk
Q2hhbmdlZCgpCit7CisgICAgQVNTRVJUKG1fZW5hYmxlZCAhPSBtX3ZpZGVvU291cmNlLT5lbmFi
bGVkKCkpOworCisgICAgbV9lbmFibGVkID0gbV92aWRlb1NvdXJjZS0+ZW5hYmxlZCgpOworCisg
ICAgdXBkYXRlQmxhY2tGcmFtZXNTZW5kaW5nKCk7Cit9CisKK3ZvaWQgUmVhbHRpbWVPdXRnb2lu
Z1ZpZGVvU291cmNlOjppbml0aWFsaXplRnJvbVNvdXJjZSgpCit7CisgICAgY29uc3QgYXV0byYg
c2V0dGluZ3MgPSBtX3ZpZGVvU291cmNlLT5zb3VyY2UoKS5zZXR0aW5ncygpOworICAgIG1fd2lk
dGggPSBzZXR0aW5ncy53aWR0aCgpOworICAgIG1faGVpZ2h0ID0gc2V0dGluZ3MuaGVpZ2h0KCk7
CisKKyAgICBtX211dGVkID0gbV92aWRlb1NvdXJjZS0+bXV0ZWQoKTsKKyAgICBtX2VuYWJsZWQg
PSBtX3ZpZGVvU291cmNlLT5lbmFibGVkKCk7CisKKyAgICB1cGRhdGVCbGFja0ZyYW1lc1NlbmRp
bmcoKTsKK30KKworYm9vbCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OkdldFN0YXRzKFN0
YXRzKikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVhbHRpbWVPdXRnb2luZ1Zp
ZGVvU291cmNlOjpBZGRPclVwZGF0ZVNpbmsocnRjOjpWaWRlb1NpbmtJbnRlcmZhY2U8d2VicnRj
OjpWaWRlb0ZyYW1lPiogc2luaywgY29uc3QgcnRjOjpWaWRlb1NpbmtXYW50cyYgc2lua1dhbnRz
KQoreworICAgIEFTU0VSVCghc2lua1dhbnRzLmJsYWNrX2ZyYW1lcyk7CisKKyAgICBpZiAoc2lu
a1dhbnRzLnJvdGF0aW9uX2FwcGxpZWQpCisgICAgICAgIG1fc2hvdWxkQXBwbHlSb3RhdGlvbiA9
IHRydWU7CisKKyAgICBpZiAoIW1fc2lua3MuY29udGFpbnMoc2luaykpCisgICAgICAgIG1fc2lu
a3MuYXBwZW5kKHNpbmspOworCisgICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9
IG1ha2VSZWYoKnRoaXMpXSgpIHsKKyAgICAgICAgcHJvdGVjdGVkVGhpcy0+c2VuZEJsYWNrRnJh
bWVzSWZOZWVkZWQoKTsKKyAgICB9KTsKK30KKwordm9pZCBSZWFsdGltZU91dGdvaW5nVmlkZW9T
b3VyY2U6OlJlbW92ZVNpbmsocnRjOjpWaWRlb1NpbmtJbnRlcmZhY2U8d2VicnRjOjpWaWRlb0Zy
YW1lPiogc2luaykKK3sKKyAgICBtX3NpbmtzLnJlbW92ZUZpcnN0KHNpbmspOworCisgICAgaWYg
KG1fc2lua3Muc2l6ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBjYWxsT25NYWluVGhyZWFk
KFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldKCkgeworICAgICAgICBpZiAocHJvdGVj
dGVkVGhpcy0+bV9ibGFja0ZyYW1lVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgICAgIHByb3Rl
Y3RlZFRoaXMtPm1fYmxhY2tGcmFtZVRpbWVyLnN0b3AoKTsKKyAgICB9KTsKK30KKwordm9pZCBS
ZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnNlbmRCbGFja0ZyYW1lc0lmTmVlZGVkKCkKK3sK
KyAgICBpZiAobV9ibGFja0ZyYW1lVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKCFtX3NpbmtzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFt
X211dGVkICYmIG1fZW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX3dpZHRo
IHx8ICFtX2hlaWdodCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX2JsYWNrRnJhbWUp
IHsKKyAgICAgICAgYXV0byB3aWR0aCA9IG1fd2lkdGg7CisgICAgICAgIGF1dG8gaGVpZ2h0ID0g
bV9oZWlnaHQ7CisgICAgICAgIGlmIChtX3Nob3VsZEFwcGx5Um90YXRpb24gJiYgKG1fY3VycmVu
dFJvdGF0aW9uID09IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMCB8fCBtX2N1cnJlbnRSb3RhdGlv
biA9PSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzkwKSkKKyAgICAgICAgICAgIHN0ZDo6c3dhcCh3
aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgYXV0byBmcmFtZSA9IG1fYnVmZmVyUG9vbC5DcmVhdGVC
dWZmZXIod2lkdGgsIGhlaWdodCk7CisgICAgICAgIEFTU0VSVChmcmFtZSk7CisgICAgICAgIGlm
ICghZnJhbWUpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfTE9HKFdlYlJUQywgIlJlYWx0aW1lT3V0
Z29pbmdWaWRlb1NvdXJjZTo6c2VuZEJsYWNrRnJhbWVzSWZOZWVkZWQgdW5hYmxlIHRvIHNlbmQg
YmxhY2sgZnJhbWVzIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
d2VicnRjOjpJNDIwQnVmZmVyOjpTZXRCbGFjayhmcmFtZS5nZXQoKSk7CisgICAgICAgIG1fYmxh
Y2tGcmFtZSA9IFdURk1vdmUoZnJhbWUpOworICAgIH0KKyAgICBzZW5kT25lQmxhY2tGcmFtZSgp
OworICAgIG1fYmxhY2tGcmFtZVRpbWVyLnN0YXJ0UmVwZWF0aW5nKDFfcyk7Cit9CisKK3ZvaWQg
UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpzZW5kT25lQmxhY2tGcmFtZSgpCit7CisgICAg
UkVMRUFTRV9MT0coTWVkaWFTdHJlYW0sICJSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnNl
bmRPbmVCbGFja0ZyYW1lIik7CisgICAgc2VuZEZyYW1lKHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJy
dGM6OlZpZGVvRnJhbWVCdWZmZXI+KG1fYmxhY2tGcmFtZSkpOworfQorCit2b2lkIFJlYWx0aW1l
T3V0Z29pbmdWaWRlb1NvdXJjZTo6c2VuZEZyYW1lKHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6
OlZpZGVvRnJhbWVCdWZmZXI+JiYgYnVmZmVyKQoreworICAgIGludDY0X3QgdGltZXN0YW1wTWlj
cm9TZWNvbmRzID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lTVMoKSAqIDEwMDA7CisgICAg
d2VicnRjOjpWaWRlb0ZyYW1lIGZyYW1lKGJ1ZmZlciwgbV9zaG91bGRBcHBseVJvdGF0aW9uID8g
d2VicnRjOjprVmlkZW9Sb3RhdGlvbl8wIDogbV9jdXJyZW50Um90YXRpb24sIHRpbWVzdGFtcE1p
Y3JvU2Vjb25kcyk7CisgICAgZm9yIChhdXRvKiBzaW5rIDogbV9zaW5rcykKKyAgICAgICAgc2lu
ay0+T25GcmFtZShmcmFtZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIFVTRShMSUJXRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjM2NTdjMGNmOGEwZmNkMTY1YjZjZTBiM2FhYzdiMTYyODM1NjYxNDQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU91
dGdvaW5nVmlkZW9Tb3VyY2UuaApAQCAtMCwwICsxLDExNiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNyBBcHBsZSBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgcmVxdWlyZWQgdG8gYmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICog
My4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mCisgKiAg
ICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKExJQldFQlJU
QykKKworI2luY2x1ZGUgIkxpYldlYlJUQ01hY3Jvcy5oIgorI2luY2x1ZGUgIk1lZGlhU3RyZWFt
VHJhY2tQcml2YXRlLmgiCisjaW5jbHVkZSA8VGltZXIuaD4KKyNpbmNsdWRlIDx3ZWJydGMvYXBp
L21lZGlhc3RyZWFtaW50ZXJmYWNlLmg+CisjaW5jbHVkZSA8d2VicnRjL2Jhc2Uvb3B0aW9uYWwu
aD4KKyNpbmNsdWRlIDx3ZWJydGMvY29tbW9uX3ZpZGVvL2luY2x1ZGUvaTQyMF9idWZmZXJfcG9v
bC5oPgorI2luY2x1ZGUgPHdlYnJ0Yy9tZWRpYS9iYXNlL3ZpZGVvc2lua2ludGVyZmFjZS5oPgor
I2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291
bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJlYWx0aW1lT3V0Z29pbmdW
aWRlb1NvdXJjZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxSZWFsdGltZU91dGdvaW5n
VmlkZW9Tb3VyY2U+LCBwdWJsaWMgd2VicnRjOjpWaWRlb1RyYWNrU291cmNlSW50ZXJmYWNlLCBw
cml2YXRlIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpPYnNlcnZlciB7CitwdWJsaWM6CisgICAg
c3RhdGljIFJlZjxSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U+IGNyZWF0ZShSZWY8TWVkaWFT
dHJlYW1UcmFja1ByaXZhdGU+JiYgdmlkZW9Tb3VyY2UpOworICAgIH5SZWFsdGltZU91dGdvaW5n
VmlkZW9Tb3VyY2UoKSB7IHN0b3AoKTsgfQorCisgICAgdm9pZCBzdG9wKCk7CisgICAgYm9vbCBz
ZXRTb3VyY2UoUmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiYmKTsKKyAgICBNZWRpYVN0cmVh
bVRyYWNrUHJpdmF0ZSYgc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV92aWRlb1NvdXJjZS5nZXQo
KTsgfQorCisgICAgaW50IEFkZFJlZigpIGNvbnN0IGZpbmFsIHsgcmVmKCk7IHJldHVybiByZWZD
b3VudCgpOyB9CisgICAgaW50IFJlbGVhc2UoKSBjb25zdCBmaW5hbCB7IGRlcmVmKCk7IHJldHVy
biByZWZDb3VudCgpOyB9CisKKyAgICB2b2lkIHNldEFwcGx5Um90YXRpb24oYm9vbCBzaG91bGRB
cHBseVJvdGF0aW9uKSB7IG1fc2hvdWxkQXBwbHlSb3RhdGlvbiA9IHNob3VsZEFwcGx5Um90YXRp
b247IH0KKworcHJvdGVjdGVkOgorICAgIFZlY3RvcjxydGM6OlZpZGVvU2lua0ludGVyZmFjZTx3
ZWJydGM6OlZpZGVvRnJhbWU+Kj4gbV9zaW5rczsKKyAgICB3ZWJydGM6Okk0MjBCdWZmZXJQb29s
IG1fYnVmZmVyUG9vbDsKKworICAgIGJvb2wgbV9lbmFibGVkIHsgdHJ1ZSB9OworICAgIGJvb2wg
bV9tdXRlZCB7IGZhbHNlIH07CisgICAgdWludDMyX3QgbV93aWR0aCB7IDAgfTsKKyAgICB1aW50
MzJfdCBtX2hlaWdodCB7IDAgfTsKKyAgICBib29sIG1fc2hvdWxkQXBwbHlSb3RhdGlvbiB7IGZh
bHNlIH07CisKK3ByaXZhdGU6CisgICAgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlKFJlZjxN
ZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4mJik7CisKKyAgICB2b2lkIHNlbmRGcmFtZShydGM6OnNj
b3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb0ZyYW1lQnVmZmVyPiYmKTsKKyAgICB2b2lkIHNlbmRC
bGFja0ZyYW1lc0lmTmVlZGVkKCk7CisgICAgdm9pZCBzZW5kT25lQmxhY2tGcmFtZSgpOworICAg
IHZvaWQgaW5pdGlhbGl6ZUZyb21Tb3VyY2UoKTsKKyAgICB2b2lkIHVwZGF0ZUJsYWNrRnJhbWVz
U2VuZGluZygpOworCisgICAgLy8gTm90aWZpZXIgQVBJCisgICAgdm9pZCBSZWdpc3Rlck9ic2Vy
dmVyKHdlYnJ0Yzo6T2JzZXJ2ZXJJbnRlcmZhY2UqKSBmaW5hbCB7IH0KKyAgICB2b2lkIFVucmVn
aXN0ZXJPYnNlcnZlcih3ZWJydGM6Ok9ic2VydmVySW50ZXJmYWNlKikgZmluYWwgeyB9CisKKyAg
ICAvLyBWaWRlb1RyYWNrU291cmNlSW50ZXJmYWNlIEFQSQorICAgIGJvb2wgaXNfc2NyZWVuY2Fz
dCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgcnRjOjpPcHRpb25hbDxib29s
PiBuZWVkc19kZW5vaXNpbmcoKSBjb25zdCBmaW5hbCB7IHJldHVybiBydGM6Ok9wdGlvbmFsPGJv
b2w+KCk7IH0KKyAgICBib29sIEdldFN0YXRzKFN0YXRzKikgZmluYWw7CisKKyAgICAvLyBNZWRp
YVNvdXJjZUludGVyZmFjZSBBUEkKKyAgICBTb3VyY2VTdGF0ZSBzdGF0ZSgpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIFNvdXJjZVN0YXRlKCk7IH0KKyAgICBib29sIHJlbW90ZSgpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIHRydWU7IH0KKworICAgIC8vIHJ0Yzo6VmlkZW9Tb3VyY2VJbnRlcmZhY2U8d2Vi
cnRjOjpWaWRlb0ZyYW1lPiBBUEkKKyAgICB2b2lkIEFkZE9yVXBkYXRlU2luayhydGM6OlZpZGVv
U2lua0ludGVyZmFjZTx3ZWJydGM6OlZpZGVvRnJhbWU+KiwgY29uc3QgcnRjOjpWaWRlb1NpbmtX
YW50cyYpIGZpbmFsOworICAgIHZvaWQgUmVtb3ZlU2luayhydGM6OlZpZGVvU2lua0ludGVyZmFj
ZTx3ZWJydGM6OlZpZGVvRnJhbWU+KikgZmluYWw7CisKKyAgICB2b2lkIHNvdXJjZU11dGVkQ2hh
bmdlZCgpOworICAgIHZvaWQgc291cmNlRW5hYmxlZENoYW5nZWQoKTsKKyAgICB2aXJ0dWFsIHZv
aWQgdmlkZW9TYW1wbGVBdmFpbGFibGUoTWVkaWFTYW1wbGUmKSB7IH07CisKKyAgICAvLyBNZWRp
YVN0cmVhbVRyYWNrUHJpdmF0ZTo6T2JzZXJ2ZXIgQVBJCisgICAgdm9pZCB0cmFja011dGVkQ2hh
bmdlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYpIGZpbmFsIHsgc291cmNlTXV0ZWRDaGFuZ2Vk
KCk7IH0KKyAgICB2b2lkIHRyYWNrRW5hYmxlZENoYW5nZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZh
dGUmKSBmaW5hbCB7IHNvdXJjZUVuYWJsZWRDaGFuZ2VkKCk7IH0KKyAgICB2b2lkIHRyYWNrU2V0
dGluZ3NDaGFuZ2VkKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJikgZmluYWwgeyBpbml0aWFsaXpl
RnJvbVNvdXJjZSgpOyB9CisgICAgdm9pZCBzYW1wbGVCdWZmZXJVcGRhdGVkKE1lZGlhU3RyZWFt
VHJhY2tQcml2YXRlJiwgTWVkaWFTYW1wbGUmIHNhbXBsZSkgZmluYWwgeyB2aWRlb1NhbXBsZUF2
YWlsYWJsZShzYW1wbGUpOyB9CisgICAgdm9pZCB0cmFja0VuZGVkKE1lZGlhU3RyZWFtVHJhY2tQ
cml2YXRlJikgZmluYWwgeyB9CisKKyAgICBSZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+IG1f
dmlkZW9Tb3VyY2U7CisgICAgc3RkOjpvcHRpb25hbDxSZWFsdGltZU1lZGlhU291cmNlU2V0dGlu
Z3M+IG1faW5pdGlhbFNldHRpbmdzOworICAgIHdlYnJ0Yzo6VmlkZW9Sb3RhdGlvbiBtX2N1cnJl
bnRSb3RhdGlvbiB7IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMCB9OworICAgIGJvb2wgbV9pc1N0
b3BwZWQgeyBmYWxzZSB9OworICAgIFRpbWVyIG1fYmxhY2tGcmFtZVRpbWVyOworICAgIHJ0Yzo6
c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvRnJhbWVCdWZmZXI+IG1fYmxhY2tGcmFtZTsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShMSUJXRUJSVEMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRp
bWVJbmNvbWluZ1ZpZGVvU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL21hYy9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBjMjYxOGQ2OTUyNzYzZmU3ZDdjNGI2YjhjZTRmOWNkYzE4MjdhMzcx
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUluY29taW5nVmlkZW9Tb3Vy
Y2UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjA2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRp
b24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0gKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuaCIKLQotI2lm
IFVTRShMSUJXRUJSVEMpCi0KLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiTWVkaWFT
YW1wbGVBVkZPYmpDLmgiCi0jaW5jbHVkZSA8d2VicnRjL3Nkay9vYmpjL0ZyYW1ld29yay9DbGFz
c2VzL1ZpZGVvL2NvcmV2aWRlb19mcmFtZV9idWZmZXIuaD4KLQotI2luY2x1ZGUgIkNvcmVNZWRp
YVNvZnRMaW5rLmgiCi0jaW5jbHVkZSAiQ29yZVZpZGVvU29mdExpbmsuaCIKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1SZWY8UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlPiBSZWFsdGltZUlu
Y29taW5nVmlkZW9Tb3VyY2U6OmNyZWF0ZShydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRl
b1RyYWNrSW50ZXJmYWNlPiYmIHZpZGVvVHJhY2ssIFN0cmluZyYmIHRyYWNrSWQpCi17Ci0gICAg
YXV0byBzb3VyY2UgPSBhZG9wdFJlZigqbmV3IFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZShX
VEZNb3ZlKHZpZGVvVHJhY2spLCBXVEZNb3ZlKHRyYWNrSWQpKSk7Ci0gICAgc291cmNlLT5zdGFy
dCgpOwotICAgIHJldHVybiBzb3VyY2U7Ci19Ci0KLVJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJj
ZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlKHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6
OlZpZGVvVHJhY2tJbnRlcmZhY2U+JiYgdmlkZW9UcmFjaywgU3RyaW5nJiYgdmlkZW9UcmFja0lk
KQotICAgIDogUmVhbHRpbWVNZWRpYVNvdXJjZShXVEZNb3ZlKHZpZGVvVHJhY2tJZCksIFJlYWx0
aW1lTWVkaWFTb3VyY2U6OlR5cGU6OlZpZGVvLCBTdHJpbmcoKSkKLSAgICAsIG1fdmlkZW9UcmFj
ayhXVEZNb3ZlKHZpZGVvVHJhY2spKQotewotICAgIG1fY3VycmVudFNldHRpbmdzLnNldFdpZHRo
KDY0MCk7Ci0gICAgbV9jdXJyZW50U2V0dGluZ3Muc2V0SGVpZ2h0KDQ4MCk7Ci0gICAgbm90aWZ5
TXV0ZWRDaGFuZ2UoIW1fdmlkZW9UcmFjayk7Ci19Ci0KLXZvaWQgUmVhbHRpbWVJbmNvbWluZ1Zp
ZGVvU291cmNlOjpzdGFydFByb2R1Y2luZ0RhdGEoKQotewotICAgIGlmIChtX3ZpZGVvVHJhY2sp
Ci0gICAgICAgIG1fdmlkZW9UcmFjay0+QWRkT3JVcGRhdGVTaW5rKHRoaXMsIHJ0Yzo6VmlkZW9T
aW5rV2FudHMoKSk7Ci19Ci0KLXZvaWQgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlOjpzZXRT
b3VyY2VUcmFjayhydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb1RyYWNrSW50ZXJmYWNl
PiYmIHRyYWNrKQotewotICAgIEFTU0VSVCghbV92aWRlb1RyYWNrKTsKLSAgICBBU1NFUlQodHJh
Y2spOwotCi0gICAgbV92aWRlb1RyYWNrID0gV1RGTW92ZSh0cmFjayk7Ci0gICAgbm90aWZ5TXV0
ZWRDaGFuZ2UoIW1fdmlkZW9UcmFjayk7Ci0gICAgaWYgKGlzUHJvZHVjaW5nRGF0YSgpKQotICAg
ICAgICBtX3ZpZGVvVHJhY2stPkFkZE9yVXBkYXRlU2luayh0aGlzLCBydGM6OlZpZGVvU2lua1dh
bnRzKCkpOwotfQotCi12b2lkIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6c3RvcFByb2R1
Y2luZ0RhdGEoKQotewotICAgIGlmIChtX3ZpZGVvVHJhY2spCi0gICAgICAgIG1fdmlkZW9UcmFj
ay0+UmVtb3ZlU2luayh0aGlzKTsKLX0KLQotQ1ZQaXhlbEJ1ZmZlclJlZiBSZWFsdGltZUluY29t
aW5nVmlkZW9Tb3VyY2U6OnBpeGVsQnVmZmVyRnJvbVZpZGVvRnJhbWUoY29uc3Qgd2VicnRjOjpW
aWRlb0ZyYW1lJiBmcmFtZSkKLXsKLSAgICBpZiAobXV0ZWQoKSkgewotICAgICAgICBpZiAoIW1f
YmxhY2tGcmFtZSB8fCBtX2JsYWNrRnJhbWVXaWR0aCAhPSBmcmFtZS53aWR0aCgpIHx8IG1fYmxh
Y2tGcmFtZUhlaWdodCAhPSBmcmFtZS5oZWlnaHQoKSkgewotICAgICAgICAgICAgQ1ZQaXhlbEJ1
ZmZlclJlZiBwaXhlbEJ1ZmZlciA9IG51bGxwdHI7Ci0gICAgICAgICAgICBhdXRvIHN0YXR1cyA9
IENWUGl4ZWxCdWZmZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgZnJhbWUud2lkdGgoKSwg
ZnJhbWUuaGVpZ2h0KCksIGtDVlBpeGVsRm9ybWF0VHlwZV80MjBZcENiQ3I4UGxhbmFyLCBudWxs
cHRyLCAmcGl4ZWxCdWZmZXIpOwotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChzdGF0dXMsIHN0
YXR1cyA9PSBub0Vycik7Ci0KLSAgICAgICAgICAgIG1fYmxhY2tGcmFtZSA9IHBpeGVsQnVmZmVy
OwotICAgICAgICAgICAgbV9ibGFja0ZyYW1lV2lkdGggPSBmcmFtZS53aWR0aCgpOwotICAgICAg
ICAgICAgbV9ibGFja0ZyYW1lSGVpZ2h0ID0gZnJhbWUuaGVpZ2h0KCk7Ci0KLSAgICAgICAgICAg
IHN0YXR1cyA9IENWUGl4ZWxCdWZmZXJMb2NrQmFzZUFkZHJlc3MocGl4ZWxCdWZmZXIsIDApOwot
ICAgICAgICAgICAgQVNTRVJUKHN0YXR1cyA9PSBub0Vycik7Ci0gICAgICAgICAgICB2b2lkKiBk
YXRhID0gQ1ZQaXhlbEJ1ZmZlckdldEJhc2VBZGRyZXNzKHBpeGVsQnVmZmVyKTsKLSAgICAgICAg
ICAgIHNpemVfdCB5TGVuZ3RoID0gZnJhbWUud2lkdGgoKSAqIGZyYW1lLmhlaWdodCgpOwotICAg
ICAgICAgICAgbWVtc2V0KGRhdGEsIDAsIHlMZW5ndGgpOwotICAgICAgICAgICAgbWVtc2V0KHN0
YXRpY19jYXN0PHVpbnQ4X3QqPihkYXRhKSArIHlMZW5ndGgsIDEyOCwgeUxlbmd0aCAvIDIpOwot
Ci0gICAgICAgICAgICBzdGF0dXMgPSBDVlBpeGVsQnVmZmVyVW5sb2NrQmFzZUFkZHJlc3MocGl4
ZWxCdWZmZXIsIDApOwotICAgICAgICAgICAgQVNTRVJUKCFzdGF0dXMpOwotICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiBtX2JsYWNrRnJhbWUuZ2V0KCk7Ci0gICAgfQotICAgIGF1dG8gYnVmZmVy
ID0gZnJhbWUudmlkZW9fZnJhbWVfYnVmZmVyKCk7Ci0gICAgQVNTRVJUKGJ1ZmZlci0+dHlwZSgp
ID09IHdlYnJ0Yzo6VmlkZW9GcmFtZUJ1ZmZlcjo6VHlwZTo6a05hdGl2ZSk7Ci0gICAgcmV0dXJu
IHN0YXRpY19jYXN0PHdlYnJ0Yzo6Q29yZVZpZGVvRnJhbWVCdWZmZXImPigqYnVmZmVyKS5waXhl
bF9idWZmZXIoKTsKLX0KLQotdm9pZCBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6Ok9uRnJh
bWUoY29uc3Qgd2VicnRjOjpWaWRlb0ZyYW1lJiBmcmFtZSkKLXsKLSAgICBpZiAoIWlzUHJvZHVj
aW5nRGF0YSgpKQotICAgICAgICByZXR1cm47Ci0KLSNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQK
LSAgICBpZiAoISgrK21fbnVtYmVyT2ZGcmFtZXMgJSAzMCkpCi0gICAgICAgIFJFTEVBU0VfTE9H
KE1lZGlhU3RyZWFtLCAiUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlOjpPbkZyYW1lICV6dSBm
cmFtZSIsIG1fbnVtYmVyT2ZGcmFtZXMpOwotI2VuZGlmCi0KLSAgICBhdXRvIHBpeGVsQnVmZmVy
ID0gcGl4ZWxCdWZmZXJGcm9tVmlkZW9GcmFtZShmcmFtZSk7Ci0KLSAgICAvLyBGSVhNRTogQ29u
dmVydCB0aW1pbmcgaW5mb3JtYXRpb24gZnJvbSBWaWRlb0ZyYW1lIHRvIENNU2FtcGxlVGltaW5n
SW5mby4KLSAgICAvLyBGb3IgdGhlIG1vbWVudCwgd2Ugd2lsbCBwcmV0ZW5kIHRoYXQgZnJhbWVz
IHNob3VsZCBiZSByZW5kZXJlZCBhc2FwLgotICAgIENNU2FtcGxlVGltaW5nSW5mbyB0aW1pbmdJ
bmZvOwotICAgIHRpbWluZ0luZm8ucHJlc2VudGF0aW9uVGltZVN0YW1wID0ga0NNVGltZUludmFs
aWQ7Ci0gICAgdGltaW5nSW5mby5kZWNvZGVUaW1lU3RhbXAgPSBrQ01UaW1lSW52YWxpZDsKLSAg
ICB0aW1pbmdJbmZvLmR1cmF0aW9uID0ga0NNVGltZUludmFsaWQ7Ci0KLSAgICBDTVZpZGVvRm9y
bWF0RGVzY3JpcHRpb25SZWYgZm9ybWF0RGVzY3JpcHRpb247Ci0gICAgT1NTdGF0dXMgb3N0YXR1
cyA9IENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbkNyZWF0ZUZvckltYWdlQnVmZmVyKGtDRkFsbG9j
YXRvckRlZmF1bHQsIChDVkltYWdlQnVmZmVyUmVmKXBpeGVsQnVmZmVyLCAmZm9ybWF0RGVzY3Jp
cHRpb24pOwotICAgIGlmIChvc3RhdHVzICE9IG5vRXJyKSB7Ci0gICAgICAgIExPR19FUlJPUigi
RmFpbGVkIHRvIGluaXRpYWxpemUgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uOiAlZCIsIHN0YXRp
Y19jYXN0PGludD4ob3N0YXR1cykpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQ01T
YW1wbGVCdWZmZXJSZWYgc2FtcGxlQnVmZmVyOwotICAgIG9zdGF0dXMgPSBDTVNhbXBsZUJ1ZmZl
ckNyZWF0ZVJlYWR5V2l0aEltYWdlQnVmZmVyKGtDRkFsbG9jYXRvckRlZmF1bHQsIChDVkltYWdl
QnVmZmVyUmVmKXBpeGVsQnVmZmVyLCBmb3JtYXREZXNjcmlwdGlvbiwgJnRpbWluZ0luZm8sICZz
YW1wbGVCdWZmZXIpOwotICAgIGlmIChvc3RhdHVzICE9IG5vRXJyKSB7Ci0gICAgICAgIExPR19F
UlJPUigiRmFpbGVkIHRvIGNyZWF0ZSB0aGUgc2FtcGxlIGJ1ZmZlcjogJWQiLCBzdGF0aWNfY2Fz
dDxpbnQ+KG9zdGF0dXMpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBDRlJlbGVhc2Uo
Zm9ybWF0RGVzY3JpcHRpb24pOwotCi0gICAgYXV0byBzYW1wbGUgPSBhZG9wdENGKHNhbXBsZUJ1
ZmZlcik7Ci0KLSAgICBDRkFycmF5UmVmIGF0dGFjaG1lbnRzQXJyYXkgPSBDTVNhbXBsZUJ1ZmZl
ckdldFNhbXBsZUF0dGFjaG1lbnRzQXJyYXkoc2FtcGxlQnVmZmVyLCB0cnVlKTsKLSAgICBmb3Ig
KENGSW5kZXggaSA9IDA7IGkgPCBDRkFycmF5R2V0Q291bnQoYXR0YWNobWVudHNBcnJheSk7ICsr
aSkgewotICAgICAgICBDRk11dGFibGVEaWN0aW9uYXJ5UmVmIGF0dGFjaG1lbnRzID0gKENGTXV0
YWJsZURpY3Rpb25hcnlSZWYpQ0ZBcnJheUdldFZhbHVlQXRJbmRleChhdHRhY2htZW50c0FycmF5
LCBpKTsKLSAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUoYXR0YWNobWVudHMsIGtDTVNhbXBs
ZUF0dGFjaG1lbnRLZXlfRGlzcGxheUltbWVkaWF0ZWx5LCBrQ0ZCb29sZWFuVHJ1ZSk7Ci0gICAg
fQotCi0gICAgdW5zaWduZWQgd2lkdGggPSBmcmFtZS53aWR0aCgpOwotICAgIHVuc2lnbmVkIGhl
aWdodCA9IGZyYW1lLmhlaWdodCgpOwotCi0gICAgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb24g
cm90YXRpb247Ci0gICAgc3dpdGNoIChmcmFtZS5yb3RhdGlvbigpKSB7Ci0gICAgY2FzZSB3ZWJy
dGM6OmtWaWRlb1JvdGF0aW9uXzA6Ci0gICAgICAgIHJvdGF0aW9uID0gTWVkaWFTYW1wbGU6OlZp
ZGVvUm90YXRpb246Ok5vbmU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ugd2VicnRjOjprVmlk
ZW9Sb3RhdGlvbl8xODA6Ci0gICAgICAgIHJvdGF0aW9uID0gTWVkaWFTYW1wbGU6OlZpZGVvUm90
YXRpb246OlVwc2lkZURvd247Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ugd2VicnRjOjprVmlk
ZW9Sb3RhdGlvbl85MDoKLSAgICAgICAgcm90YXRpb24gPSBNZWRpYVNhbXBsZTo6VmlkZW9Sb3Rh
dGlvbjo6UmlnaHQ7Ci0gICAgICAgIHN0ZDo6c3dhcCh3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzI3MDoKLSAgICAgICAgcm90
YXRpb24gPSBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6TGVmdDsKLSAgICAgICAgc3RkOjpz
d2FwKHdpZHRoLCBoZWlnaHQpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBSZWZQdHI8
UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwotICAgIGNh
bGxPbk1haW5UaHJlYWQoW3Byb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpLCBz
YW1wbGUgPSBXVEZNb3ZlKHNhbXBsZSksIHdpZHRoLCBoZWlnaHQsIHJvdGF0aW9uXSB7Ci0gICAg
ICAgIHByb3RlY3RlZFRoaXMtPnByb2Nlc3NOZXdTYW1wbGUoc2FtcGxlLmdldCgpLCB3aWR0aCwg
aGVpZ2h0LCByb3RhdGlvbik7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgUmVhbHRpbWVJbmNvbWluZ1Zp
ZGVvU291cmNlOjpwcm9jZXNzTmV3U2FtcGxlKENNU2FtcGxlQnVmZmVyUmVmIHNhbXBsZSwgdW5z
aWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb24g
cm90YXRpb24pCi17Ci0gICAgbV9idWZmZXIgPSBzYW1wbGU7Ci0gICAgaWYgKHdpZHRoICE9IG1f
Y3VycmVudFNldHRpbmdzLndpZHRoKCkgfHwgaGVpZ2h0ICE9IG1fY3VycmVudFNldHRpbmdzLmhl
aWdodCgpKSB7Ci0gICAgICAgIG1fY3VycmVudFNldHRpbmdzLnNldFdpZHRoKHdpZHRoKTsKLSAg
ICAgICAgbV9jdXJyZW50U2V0dGluZ3Muc2V0SGVpZ2h0KGhlaWdodCk7Ci0gICAgICAgIHNldHRp
bmdzRGlkQ2hhbmdlKCk7Ci0gICAgfQotCi0gICAgdmlkZW9TYW1wbGVBdmFpbGFibGUoTWVkaWFT
YW1wbGVBVkZPYmpDOjpjcmVhdGUoc2FtcGxlLCByb3RhdGlvbikpOwotfQotCi1jb25zdCBSZWFs
dGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzJiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6
OmNhcGFiaWxpdGllcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFJlYWx0aW1lTWVkaWFTb3VyY2VD
YXBhYmlsaXRpZXM6OmVtcHR5Q2FwYWJpbGl0aWVzKCk7Ci19Ci0KLWNvbnN0IFJlYWx0aW1lTWVk
aWFTb3VyY2VTZXR0aW5ncyYgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlOjpzZXR0aW5ncygp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fY3VycmVudFNldHRpbmdzOwotfQotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoTElCV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lSW5jb21pbmdWaWRl
b1NvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0
aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAx
ZWI3YzM2NGZlMzIzMjIyMmVhYjRmMjViN2I0MTAwY2M5MTAyODA5Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL21hYy9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuaAorKysgL2Rldi9udWxs
CkBAIC0xLDg2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCi0gKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICog
ICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bSB0aGlzCi0gKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
Ci0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgVVNFKExJQldFQlJUQykK
LQotI2luY2x1ZGUgIkxpYldlYlJUQ01hY3Jvcy5oIgotI2luY2x1ZGUgIlJlYWx0aW1lTWVkaWFT
b3VyY2UuaCIKLSNpbmNsdWRlIDx3ZWJydGMvYXBpL21lZGlhc3RyZWFtaW50ZXJmYWNlLmg+Ci0j
aW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi11c2luZyBDTVNhbXBsZUJ1ZmZlclJlZiA9IHN0
cnVjdCBvcGFxdWVDTVNhbXBsZUJ1ZmZlcio7Ci11c2luZyBDVlBpeGVsQnVmZmVyUmVmID0gc3Ry
dWN0IF9fQ1ZCdWZmZXIqOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENhcHR1cmVE
ZXZpY2U7Ci0KLWNsYXNzIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZSBmaW5hbCA6IHB1Ymxp
YyBSZWFsdGltZU1lZGlhU291cmNlLCBwcml2YXRlIHJ0Yzo6VmlkZW9TaW5rSW50ZXJmYWNlPHdl
YnJ0Yzo6VmlkZW9GcmFtZT4gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8UmVhbHRpbWVJbmNv
bWluZ1ZpZGVvU291cmNlPiBjcmVhdGUocnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9U
cmFja0ludGVyZmFjZT4mJiwgU3RyaW5nJiYpOwotICAgIH5SZWFsdGltZUluY29taW5nVmlkZW9T
b3VyY2UoKSB7IHN0b3BQcm9kdWNpbmdEYXRhKCk7IH0KLQotICAgIHZvaWQgc2V0U291cmNlVHJh
Y2socnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9UcmFja0ludGVyZmFjZT4mJik7Ci0K
LXByaXZhdGU6Ci0gICAgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlKHJ0Yzo6c2NvcGVkX3Jl
ZnB0cjx3ZWJydGM6OlZpZGVvVHJhY2tJbnRlcmZhY2U+JiYsIFN0cmluZyYmKTsKLQotICAgIC8v
IFJlYWx0aW1lTWVkaWFTb3VyY2UgQVBJCi0gICAgdm9pZCBzdGFydFByb2R1Y2luZ0RhdGEoKSBm
aW5hbDsKLSAgICB2b2lkIHN0b3BQcm9kdWNpbmdEYXRhKCkgIGZpbmFsOwotCi0gICAgY29uc3Qg
UmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcyYgY2FwYWJpbGl0aWVzKCkgY29uc3QgZmlu
YWw7Ci0gICAgY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzJiBzZXR0aW5ncygpIGNv
bnN0IGZpbmFsOwotCi0gICAgdm9pZCBwcm9jZXNzTmV3U2FtcGxlKENNU2FtcGxlQnVmZmVyUmVm
LCB1bnNpZ25lZCwgdW5zaWduZWQsIE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uKTsKLQotICAg
IGJvb2wgYXBwbHlTaXplKGNvbnN0IEludFNpemUmKSBmaW5hbCB7IHJldHVybiB0cnVlOyB9Ci0K
LSAgICAvLyBydGM6OlZpZGVvU2lua0ludGVyZmFjZQotICAgIHZvaWQgT25GcmFtZShjb25zdCB3
ZWJydGM6OlZpZGVvRnJhbWUmKSBmaW5hbDsKLQotICAgIENWUGl4ZWxCdWZmZXJSZWYgcGl4ZWxC
dWZmZXJGcm9tVmlkZW9GcmFtZShjb25zdCB3ZWJydGM6OlZpZGVvRnJhbWUmKTsKLQotICAgIFJl
YWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyBtX2N1cnJlbnRTZXR0aW5nczsKLSAgICBydGM6OnNj
b3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb1RyYWNrSW50ZXJmYWNlPiBtX3ZpZGVvVHJhY2s7Ci0g
ICAgUmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiBtX2J1ZmZlcjsKLSAgICBSZXRhaW5QdHI8
Q1ZQaXhlbEJ1ZmZlclJlZj4gbV9ibGFja0ZyYW1lOwotICAgIGludCBtX2JsYWNrRnJhbWVXaWR0
aCB7IDAgfTsKLSAgICBpbnQgbV9ibGFja0ZyYW1lSGVpZ2h0IHsgMCB9OwotI2lmICFSRUxFQVNF
X0xPR19ESVNBQkxFRAotICAgIHNpemVfdCBtX251bWJlck9mRnJhbWVzIHsgMCB9OwotI2VuZGlm
Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoTElCV0VCUlRD
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1Jl
YWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1hYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTWFjLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5jNjYyNWE3YzgwZTk5MDkxYWViYzQ2ZTFiYTQxMmRhNjM1ZmI2Yjk2Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0
aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1hYy5jcHAKQEAgLTAsMCArMSwxNjcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBk
aXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VN
YWMuaCIKKworI2lmIFVTRShMSUJXRUJSVEMpCisKKyNpbmNsdWRlICJNZWRpYVNhbXBsZUFWRk9i
akMuaCIKKyNpbmNsdWRlIDx3ZWJydGMvc2RrL29iamMvRnJhbWV3b3JrL0NsYXNzZXMvVmlkZW8v
Y29yZXZpZGVvX2ZyYW1lX2J1ZmZlci5oPgorCisjaW5jbHVkZSAiQ29yZU1lZGlhU29mdExpbmsu
aCIKKyNpbmNsdWRlICJDb3JlVmlkZW9Tb2Z0TGluay5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK1JlZjxSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWM+IFJlYWx0aW1lSW5jb21pbmdW
aWRlb1NvdXJjZU1hYzo6Y3JlYXRlKHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvVHJh
Y2tJbnRlcmZhY2U+JiYgdmlkZW9UcmFjaywgU3RyaW5nJiYgdHJhY2tJZCkKK3sKKyAgICBhdXRv
IHNvdXJjZSA9IGFkb3B0UmVmKCpuZXcgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTWFjKFdU
Rk1vdmUodmlkZW9UcmFjayksIFdURk1vdmUodHJhY2tJZCkpKTsKKyAgICByZXR1cm4gc291cmNl
OworfQorCitSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWM6OlJlYWx0aW1lSW5jb21pbmdW
aWRlb1NvdXJjZU1hYyhydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb1RyYWNrSW50ZXJm
YWNlPiYmIHZpZGVvVHJhY2ssIFN0cmluZyYmIHZpZGVvVHJhY2tJZCkKKyAgICA6IFJlYWx0aW1l
SW5jb21pbmdWaWRlb1NvdXJjZShXVEZNb3ZlKHZpZGVvVHJhY2spLCBXVEZNb3ZlKHZpZGVvVHJh
Y2tJZCkpCit7Cit9CisKK0NWUGl4ZWxCdWZmZXJSZWYgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291
cmNlTWFjOjpwaXhlbEJ1ZmZlckZyb21WaWRlb0ZyYW1lKGNvbnN0IHdlYnJ0Yzo6VmlkZW9GcmFt
ZSYgZnJhbWUpCit7CisgICAgaWYgKG11dGVkKCkpIHsKKyAgICAgICAgaWYgKCFtX2JsYWNrRnJh
bWUgfHwgbV9ibGFja0ZyYW1lV2lkdGggIT0gZnJhbWUud2lkdGgoKSB8fCBtX2JsYWNrRnJhbWVI
ZWlnaHQgIT0gZnJhbWUuaGVpZ2h0KCkpIHsKKyAgICAgICAgICAgIENWUGl4ZWxCdWZmZXJSZWYg
cGl4ZWxCdWZmZXIgPSBudWxscHRyOworICAgICAgICAgICAgYXV0byBzdGF0dXMgPSBDVlBpeGVs
QnVmZmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGZyYW1lLndpZHRoKCksIGZyYW1lLmhl
aWdodCgpLCBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyOFBsYW5hciwgbnVsbHB0ciwgJnBp
eGVsQnVmZmVyKTsKKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoc3RhdHVzLCBzdGF0dXMgPT0g
bm9FcnIpOworCisgICAgICAgICAgICBtX2JsYWNrRnJhbWUgPSBwaXhlbEJ1ZmZlcjsKKyAgICAg
ICAgICAgIG1fYmxhY2tGcmFtZVdpZHRoID0gZnJhbWUud2lkdGgoKTsKKyAgICAgICAgICAgIG1f
YmxhY2tGcmFtZUhlaWdodCA9IGZyYW1lLmhlaWdodCgpOworCisgICAgICAgICAgICBzdGF0dXMg
PSBDVlBpeGVsQnVmZmVyTG9ja0Jhc2VBZGRyZXNzKHBpeGVsQnVmZmVyLCAwKTsKKyAgICAgICAg
ICAgIEFTU0VSVChzdGF0dXMgPT0gbm9FcnIpOworICAgICAgICAgICAgdm9pZCogZGF0YSA9IENW
UGl4ZWxCdWZmZXJHZXRCYXNlQWRkcmVzcyhwaXhlbEJ1ZmZlcik7CisgICAgICAgICAgICBzaXpl
X3QgeUxlbmd0aCA9IGZyYW1lLndpZHRoKCkgKiBmcmFtZS5oZWlnaHQoKTsKKyAgICAgICAgICAg
IG1lbXNldChkYXRhLCAwLCB5TGVuZ3RoKTsKKyAgICAgICAgICAgIG1lbXNldChzdGF0aWNfY2Fz
dDx1aW50OF90Kj4oZGF0YSkgKyB5TGVuZ3RoLCAxMjgsIHlMZW5ndGggLyAyKTsKKworICAgICAg
ICAgICAgc3RhdHVzID0gQ1ZQaXhlbEJ1ZmZlclVubG9ja0Jhc2VBZGRyZXNzKHBpeGVsQnVmZmVy
LCAwKTsKKyAgICAgICAgICAgIEFTU0VSVCghc3RhdHVzKTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gbV9ibGFja0ZyYW1lLmdldCgpOworICAgIH0KKyAgICBhdXRvIGJ1ZmZlciA9IGZyYW1l
LnZpZGVvX2ZyYW1lX2J1ZmZlcigpOworICAgIEFTU0VSVChidWZmZXItPnR5cGUoKSA9PSB3ZWJy
dGM6OlZpZGVvRnJhbWVCdWZmZXI6OlR5cGU6OmtOYXRpdmUpOworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDx3ZWJydGM6OkNvcmVWaWRlb0ZyYW1lQnVmZmVyJj4oKmJ1ZmZlcikucGl4ZWxfYnVmZmVy
KCk7Cit9CisKK3ZvaWQgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTWFjOjpPbkZyYW1lKGNv
bnN0IHdlYnJ0Yzo6VmlkZW9GcmFtZSYgZnJhbWUpCit7CisgICAgaWYgKCFpc1Byb2R1Y2luZ0Rh
dGEoKSkKKyAgICAgICAgcmV0dXJuOworCisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAg
aWYgKCEoKyttX251bWJlck9mRnJhbWVzICUgMzApKQorICAgICAgICBSRUxFQVNFX0xPRyhNZWRp
YVN0cmVhbSwgIlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1hYzo6T25GcmFtZSAlenUgZnJh
bWUiLCBtX251bWJlck9mRnJhbWVzKTsKKyNlbmRpZgorCisgICAgYXV0byBwaXhlbEJ1ZmZlciA9
IHBpeGVsQnVmZmVyRnJvbVZpZGVvRnJhbWUoZnJhbWUpOworCisgICAgLy8gRklYTUU6IENvbnZl
cnQgdGltaW5nIGluZm9ybWF0aW9uIGZyb20gVmlkZW9GcmFtZSB0byBDTVNhbXBsZVRpbWluZ0lu
Zm8uCisgICAgLy8gRm9yIHRoZSBtb21lbnQsIHdlIHdpbGwgcHJldGVuZCB0aGF0IGZyYW1lcyBz
aG91bGQgYmUgcmVuZGVyZWQgYXNhcC4KKyAgICBDTVNhbXBsZVRpbWluZ0luZm8gdGltaW5nSW5m
bzsKKyAgICB0aW1pbmdJbmZvLnByZXNlbnRhdGlvblRpbWVTdGFtcCA9IGtDTVRpbWVJbnZhbGlk
OworICAgIHRpbWluZ0luZm8uZGVjb2RlVGltZVN0YW1wID0ga0NNVGltZUludmFsaWQ7CisgICAg
dGltaW5nSW5mby5kdXJhdGlvbiA9IGtDTVRpbWVJbnZhbGlkOworCisgICAgQ01WaWRlb0Zvcm1h
dERlc2NyaXB0aW9uUmVmIGZvcm1hdERlc2NyaXB0aW9uOworICAgIE9TU3RhdHVzIG9zdGF0dXMg
PSBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25DcmVhdGVGb3JJbWFnZUJ1ZmZlcihrQ0ZBbGxvY2F0
b3JEZWZhdWx0LCAoQ1ZJbWFnZUJ1ZmZlclJlZilwaXhlbEJ1ZmZlciwgJmZvcm1hdERlc2NyaXB0
aW9uKTsKKyAgICBpZiAob3N0YXR1cyAhPSBub0VycikgeworICAgICAgICBMT0dfRVJST1IoIkZh
aWxlZCB0byBpbml0aWFsaXplIENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbjogJWQiLCBzdGF0aWNf
Y2FzdDxpbnQ+KG9zdGF0dXMpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIENNU2Ft
cGxlQnVmZmVyUmVmIHNhbXBsZUJ1ZmZlcjsKKyAgICBvc3RhdHVzID0gQ01TYW1wbGVCdWZmZXJD
cmVhdGVSZWFkeVdpdGhJbWFnZUJ1ZmZlcihrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAoQ1ZJbWFnZUJ1
ZmZlclJlZilwaXhlbEJ1ZmZlciwgZm9ybWF0RGVzY3JpcHRpb24sICZ0aW1pbmdJbmZvLCAmc2Ft
cGxlQnVmZmVyKTsKKyAgICBpZiAob3N0YXR1cyAhPSBub0VycikgeworICAgICAgICBMT0dfRVJS
T1IoIkZhaWxlZCB0byBjcmVhdGUgdGhlIHNhbXBsZSBidWZmZXI6ICVkIiwgc3RhdGljX2Nhc3Q8
aW50Pihvc3RhdHVzKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQ0ZSZWxlYXNlKGZv
cm1hdERlc2NyaXB0aW9uKTsKKworICAgIGF1dG8gc2FtcGxlID0gYWRvcHRDRihzYW1wbGVCdWZm
ZXIpOworCisgICAgQ0ZBcnJheVJlZiBhdHRhY2htZW50c0FycmF5ID0gQ01TYW1wbGVCdWZmZXJH
ZXRTYW1wbGVBdHRhY2htZW50c0FycmF5KHNhbXBsZUJ1ZmZlciwgdHJ1ZSk7CisgICAgZm9yIChD
RkluZGV4IGkgPSAwOyBpIDwgQ0ZBcnJheUdldENvdW50KGF0dGFjaG1lbnRzQXJyYXkpOyArK2kp
IHsKKyAgICAgICAgQ0ZNdXRhYmxlRGljdGlvbmFyeVJlZiBhdHRhY2htZW50cyA9IChDRk11dGFi
bGVEaWN0aW9uYXJ5UmVmKUNGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoYXR0YWNobWVudHNBcnJheSwg
aSk7CisgICAgICAgIENGRGljdGlvbmFyeVNldFZhbHVlKGF0dGFjaG1lbnRzLCBrQ01TYW1wbGVB
dHRhY2htZW50S2V5X0Rpc3BsYXlJbW1lZGlhdGVseSwga0NGQm9vbGVhblRydWUpOworICAgIH0K
KworICAgIHVuc2lnbmVkIHdpZHRoID0gZnJhbWUud2lkdGgoKTsKKyAgICB1bnNpZ25lZCBoZWln
aHQgPSBmcmFtZS5oZWlnaHQoKTsKKworICAgIE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uIHJv
dGF0aW9uOworICAgIHN3aXRjaCAoZnJhbWUucm90YXRpb24oKSkgeworICAgIGNhc2Ugd2VicnRj
OjprVmlkZW9Sb3RhdGlvbl8wOgorICAgICAgICByb3RhdGlvbiA9IE1lZGlhU2FtcGxlOjpWaWRl
b1JvdGF0aW9uOjpOb25lOworICAgICAgICBicmVhazsKKyAgICBjYXNlIHdlYnJ0Yzo6a1ZpZGVv
Um90YXRpb25fMTgwOgorICAgICAgICByb3RhdGlvbiA9IE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0
aW9uOjpVcHNpZGVEb3duOworICAgICAgICBicmVhazsKKyAgICBjYXNlIHdlYnJ0Yzo6a1ZpZGVv
Um90YXRpb25fOTA6CisgICAgICAgIHJvdGF0aW9uID0gTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRp
b246OlJpZ2h0OworICAgICAgICBzdGQ6OnN3YXAod2lkdGgsIGhlaWdodCk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8yNzA6CisgICAgICAgIHJvdGF0
aW9uID0gTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246OkxlZnQ7CisgICAgICAgIHN0ZDo6c3dh
cCh3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgUmVmUHRyPFJl
YWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1hYz4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBj
YWxsT25NYWluVGhyZWFkKFtwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwg
c2FtcGxlID0gV1RGTW92ZShzYW1wbGUpLCB3aWR0aCwgaGVpZ2h0LCByb3RhdGlvbl0geworICAg
ICAgICBwcm90ZWN0ZWRUaGlzLT5wcm9jZXNzTmV3U2FtcGxlKHNhbXBsZS5nZXQoKSwgd2lkdGgs
IGhlaWdodCwgcm90YXRpb24pOworICAgIH0pOworfQorCit2b2lkIFJlYWx0aW1lSW5jb21pbmdW
aWRlb1NvdXJjZU1hYzo6cHJvY2Vzc05ld1NhbXBsZShDTVNhbXBsZUJ1ZmZlclJlZiBzYW1wbGUs
IHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0
aW9uIHJvdGF0aW9uKQoreworICAgIG1fYnVmZmVyID0gc2FtcGxlOworICAgIGlmICh3aWR0aCAh
PSBtX2N1cnJlbnRTZXR0aW5ncy53aWR0aCgpIHx8IGhlaWdodCAhPSBtX2N1cnJlbnRTZXR0aW5n
cy5oZWlnaHQoKSkgeworICAgICAgICBtX2N1cnJlbnRTZXR0aW5ncy5zZXRXaWR0aCh3aWR0aCk7
CisgICAgICAgIG1fY3VycmVudFNldHRpbmdzLnNldEhlaWdodChoZWlnaHQpOworICAgICAgICBz
ZXR0aW5nc0RpZENoYW5nZSgpOworICAgIH0KKworICAgIHZpZGVvU2FtcGxlQXZhaWxhYmxlKE1l
ZGlhU2FtcGxlQVZGT2JqQzo6Y3JlYXRlKHNhbXBsZSwgcm90YXRpb24pKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKExJQldFQlJUQykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUluY29taW5n
VmlkZW9Tb3VyY2VNYWMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21h
Yy9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NjU5MmY5MGQw
OTBkZGIzMjNkZDQ1ODE2NDUyYTc5ZjgxNDMwYjljCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lSW5jb21pbmdWaWRlb1Nv
dXJjZU1hYy5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1
dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKExJ
QldFQlJUQykKKworI2luY2x1ZGUgIlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5oIgorCit1
c2luZyBDTVNhbXBsZUJ1ZmZlclJlZiA9IHN0cnVjdCBvcGFxdWVDTVNhbXBsZUJ1ZmZlcio7Cit1
c2luZyBDVlBpeGVsQnVmZmVyUmVmID0gc3RydWN0IF9fQ1ZCdWZmZXIqOworCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1hYyBmaW5hbCA6
IHB1YmxpYyBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UgeworcHVibGljOgorICAgIHN0YXRp
YyBSZWY8UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTWFjPiBjcmVhdGUocnRjOjpzY29wZWRf
cmVmcHRyPHdlYnJ0Yzo6VmlkZW9UcmFja0ludGVyZmFjZT4mJiwgU3RyaW5nJiYpOworICAgIH5S
ZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWMoKSB7IHN0b3BQcm9kdWNpbmdEYXRhKCk7IH0K
KworcHJpdmF0ZToKKyAgICBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWMocnRjOjpzY29w
ZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9UcmFja0ludGVyZmFjZT4mJiwgU3RyaW5nJiYpOworCisg
ICAgdm9pZCBwcm9jZXNzTmV3U2FtcGxlKENNU2FtcGxlQnVmZmVyUmVmLCB1bnNpZ25lZCwgdW5z
aWduZWQsIE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uKTsKKyAgICBDVlBpeGVsQnVmZmVyUmVm
IHBpeGVsQnVmZmVyRnJvbVZpZGVvRnJhbWUoY29uc3Qgd2VicnRjOjpWaWRlb0ZyYW1lJik7CisK
KyAgICAvLyBydGM6OlZpZGVvU2lua0ludGVyZmFjZQorICAgIHZvaWQgT25GcmFtZShjb25zdCB3
ZWJydGM6OlZpZGVvRnJhbWUmKSBmaW5hbDsKKworICAgIFJldGFpblB0cjxDTVNhbXBsZUJ1ZmZl
clJlZj4gbV9idWZmZXI7CisgICAgUmV0YWluUHRyPENWUGl4ZWxCdWZmZXJSZWY+IG1fYmxhY2tG
cmFtZTsKKyAgICBpbnQgbV9ibGFja0ZyYW1lV2lkdGggeyAwIH07CisgICAgaW50IG1fYmxhY2tG
cmFtZUhlaWdodCB7IDAgfTsKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICBzaXplX3Qg
bV9udW1iZXJPZkZyYW1lcyB7IDAgfTsKKyNlbmRpZgorfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gVVNFKExJQldFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2Uu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lT3V0
Z29pbmdWaWRlb1NvdXJjZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmNDUw
ZGYzM2M2ZjZhMjU4N2RhMzliNWVjODJjY2ZjZDYwYTBlN2QuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSwyNjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQsIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgcmVxdWlyZWQgdG8gYmUgbWV0
OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUg
b2YgQXBwbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAg
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0g
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKLSAqIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwK
LSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SCi0gKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgotICogQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJSZWFsdGltZU91dGdvaW5nVmlkZW9T
b3VyY2UuaCIKLQotI2lmIFVTRShMSUJXRUJSVEMpCi0KLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0j
aW5jbHVkZSA8d2VicnRjL2FwaS92aWRlby9pNDIwX2J1ZmZlci5oPgotI2luY2x1ZGUgPHdlYnJ0
Yy9jb21tb25fdmlkZW8vbGlieXV2L2luY2x1ZGUvd2VicnRjX2xpYnl1di5oPgotI2luY2x1ZGUg
PHdlYnJ0Yy9zZGsvb2JqYy9GcmFtZXdvcmsvQ2xhc3Nlcy9WaWRlby9jb3JldmlkZW9fZnJhbWVf
YnVmZmVyLmg+Ci0jaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+Ci0jaW5jbHVkZSA8d3RmL01h
aW5UaHJlYWQuaD4KLQotI2luY2x1ZGUgIkNvcmVNZWRpYVNvZnRMaW5rLmgiCi0jaW5jbHVkZSAi
Q29yZVZpZGVvU29mdExpbmsuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1SZWFsdGltZU91
dGdvaW5nVmlkZW9Tb3VyY2U6OlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZShSZWY8TWVkaWFT
dHJlYW1UcmFja1ByaXZhdGU+JiYgdmlkZW9Tb3VyY2UpCi0gICAgOiBtX3ZpZGVvU291cmNlKFdU
Rk1vdmUodmlkZW9Tb3VyY2UpKQotICAgICwgbV9ibGFja0ZyYW1lVGltZXIoKnRoaXMsICZSZWFs
dGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnNlbmRPbmVCbGFja0ZyYW1lKQotewotICAgIG1fdmlk
ZW9Tb3VyY2UtPmFkZE9ic2VydmVyKCp0aGlzKTsKLSAgICBpbml0aWFsaXplRnJvbVNvdXJjZSgp
OwotfQotCi1ib29sIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6c2V0U291cmNlKFJlZjxN
ZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4mJiBuZXdTb3VyY2UpCi17Ci0gICAgaWYgKCFtX2luaXRp
YWxTZXR0aW5ncykKLSAgICAgICAgbV9pbml0aWFsU2V0dGluZ3MgPSBtX3ZpZGVvU291cmNlLT5z
b3VyY2UoKS5zZXR0aW5ncygpOwotCi0gICAgbV92aWRlb1NvdXJjZS0+cmVtb3ZlT2JzZXJ2ZXIo
KnRoaXMpOwotICAgIG1fdmlkZW9Tb3VyY2UgPSBXVEZNb3ZlKG5ld1NvdXJjZSk7Ci0gICAgbV92
aWRlb1NvdXJjZS0+YWRkT2JzZXJ2ZXIoKnRoaXMpOwotCi0gICAgaW5pdGlhbGl6ZUZyb21Tb3Vy
Y2UoKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRl
b1NvdXJjZTo6c3RvcCgpCi17Ci0gICAgbV92aWRlb1NvdXJjZS0+cmVtb3ZlT2JzZXJ2ZXIoKnRo
aXMpOwotICAgIG1fYmxhY2tGcmFtZVRpbWVyLnN0b3AoKTsKLSAgICBtX2lzU3RvcHBlZCA9IHRy
dWU7Ci19Ci0KLXZvaWQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjp1cGRhdGVCbGFja0Zy
YW1lc1NlbmRpbmcoKQotewotICAgIGlmICghbV9tdXRlZCAmJiBtX2VuYWJsZWQpIHsKLSAgICAg
ICAgaWYgKG1fYmxhY2tGcmFtZVRpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgICAgICBtX2JsYWNr
RnJhbWVUaW1lci5zdG9wKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzZW5kQmxh
Y2tGcmFtZXNJZk5lZWRlZCgpOwotfQotCi12b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJj
ZTo6c291cmNlTXV0ZWRDaGFuZ2VkKCkKLXsKLSAgICBBU1NFUlQobV9tdXRlZCAhPSBtX3ZpZGVv
U291cmNlLT5tdXRlZCgpKTsKLQotICAgIG1fbXV0ZWQgPSBtX3ZpZGVvU291cmNlLT5tdXRlZCgp
OwotCi0gICAgdXBkYXRlQmxhY2tGcmFtZXNTZW5kaW5nKCk7Ci19Ci0KLXZvaWQgUmVhbHRpbWVP
dXRnb2luZ1ZpZGVvU291cmNlOjpzb3VyY2VFbmFibGVkQ2hhbmdlZCgpCi17Ci0gICAgQVNTRVJU
KG1fZW5hYmxlZCAhPSBtX3ZpZGVvU291cmNlLT5lbmFibGVkKCkpOwotCi0gICAgbV9lbmFibGVk
ID0gbV92aWRlb1NvdXJjZS0+ZW5hYmxlZCgpOwotCi0gICAgdXBkYXRlQmxhY2tGcmFtZXNTZW5k
aW5nKCk7Ci19Ci0KLXZvaWQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjppbml0aWFsaXpl
RnJvbVNvdXJjZSgpCi17Ci0gICAgY29uc3QgYXV0byYgc2V0dGluZ3MgPSBtX3ZpZGVvU291cmNl
LT5zb3VyY2UoKS5zZXR0aW5ncygpOwotICAgIG1fd2lkdGggPSBzZXR0aW5ncy53aWR0aCgpOwot
ICAgIG1faGVpZ2h0ID0gc2V0dGluZ3MuaGVpZ2h0KCk7Ci0KLSAgICBtX211dGVkID0gbV92aWRl
b1NvdXJjZS0+bXV0ZWQoKTsKLSAgICBtX2VuYWJsZWQgPSBtX3ZpZGVvU291cmNlLT5lbmFibGVk
KCk7Ci0KLSAgICB1cGRhdGVCbGFja0ZyYW1lc1NlbmRpbmcoKTsKLX0KLQotYm9vbCBSZWFsdGlt
ZU91dGdvaW5nVmlkZW9Tb3VyY2U6OkdldFN0YXRzKFN0YXRzKikKLXsKLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLXZvaWQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpBZGRPclVwZGF0ZVNp
bmsocnRjOjpWaWRlb1NpbmtJbnRlcmZhY2U8d2VicnRjOjpWaWRlb0ZyYW1lPiogc2luaywgY29u
c3QgcnRjOjpWaWRlb1NpbmtXYW50cyYgc2lua1dhbnRzKQotewotICAgIEFTU0VSVCghc2lua1dh
bnRzLmJsYWNrX2ZyYW1lcyk7Ci0KLSAgICBpZiAoc2lua1dhbnRzLnJvdGF0aW9uX2FwcGxpZWQp
Ci0gICAgICAgIG1fc2hvdWxkQXBwbHlSb3RhdGlvbiA9IHRydWU7Ci0KLSAgICBpZiAoIW1fc2lu
a3MuY29udGFpbnMoc2luaykpCi0gICAgICAgIG1fc2lua3MuYXBwZW5kKHNpbmspOwotCi0gICAg
Y2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSgpIHsKLSAg
ICAgICAgcHJvdGVjdGVkVGhpcy0+c2VuZEJsYWNrRnJhbWVzSWZOZWVkZWQoKTsKLSAgICB9KTsK
LX0KLQotdm9pZCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OlJlbW92ZVNpbmsocnRjOjpW
aWRlb1NpbmtJbnRlcmZhY2U8d2VicnRjOjpWaWRlb0ZyYW1lPiogc2luaykKLXsKLSAgICBtX3Np
bmtzLnJlbW92ZUZpcnN0KHNpbmspOwotCi0gICAgaWYgKG1fc2lua3Muc2l6ZSgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBjYWxsT25NYWluVGhyZWFkKFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJl
ZigqdGhpcyldKCkgewotICAgICAgICBpZiAocHJvdGVjdGVkVGhpcy0+bV9ibGFja0ZyYW1lVGlt
ZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgICAgIHByb3RlY3RlZFRoaXMtPm1fYmxhY2tGcmFtZVRp
bWVyLnN0b3AoKTsKLSAgICB9KTsKLX0KLQotdm9pZCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3Vy
Y2U6OnNlbmRCbGFja0ZyYW1lc0lmTmVlZGVkKCkKLXsKLSAgICBpZiAobV9ibGFja0ZyYW1lVGlt
ZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX3NpbmtzLnNpemUo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX211dGVkICYmIG1fZW5hYmxlZCkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX3dpZHRoIHx8ICFtX2hlaWdodCkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaWYgKCFtX2JsYWNrRnJhbWUpIHsKLSAgICAgICAgYXV0byB3aWR0aCA9
IG1fd2lkdGg7Ci0gICAgICAgIGF1dG8gaGVpZ2h0ID0gbV9oZWlnaHQ7Ci0gICAgICAgIGlmICht
X3Nob3VsZEFwcGx5Um90YXRpb24gJiYgKG1fY3VycmVudFJvdGF0aW9uID09IHdlYnJ0Yzo6a1Zp
ZGVvUm90YXRpb25fMCB8fCBtX2N1cnJlbnRSb3RhdGlvbiA9PSB3ZWJydGM6OmtWaWRlb1JvdGF0
aW9uXzkwKSkKLSAgICAgICAgICAgIHN0ZDo6c3dhcCh3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAg
YXV0byBmcmFtZSA9IG1fYnVmZmVyUG9vbC5DcmVhdGVCdWZmZXIod2lkdGgsIGhlaWdodCk7Ci0g
ICAgICAgIEFTU0VSVChmcmFtZSk7Ci0gICAgICAgIGlmICghZnJhbWUpIHsKLSAgICAgICAgICAg
IFJFTEVBU0VfTE9HKFdlYlJUQywgIlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6c2VuZEJs
YWNrRnJhbWVzSWZOZWVkZWQgdW5hYmxlIHRvIHNlbmQgYmxhY2sgZnJhbWVzIik7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgd2VicnRjOjpJNDIwQnVmZmVyOjpTZXRC
bGFjayhmcmFtZS5nZXQoKSk7Ci0gICAgICAgIG1fYmxhY2tGcmFtZSA9IFdURk1vdmUoZnJhbWUp
OwotICAgIH0KLSAgICBzZW5kT25lQmxhY2tGcmFtZSgpOwotICAgIG1fYmxhY2tGcmFtZVRpbWVy
LnN0YXJ0UmVwZWF0aW5nKDFfcyk7Ci19Ci0KLXZvaWQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291
cmNlOjpzZW5kT25lQmxhY2tGcmFtZSgpCi17Ci0gICAgUkVMRUFTRV9MT0coTWVkaWFTdHJlYW0s
ICJSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnNlbmRPbmVCbGFja0ZyYW1lIik7Ci0gICAg
c2VuZEZyYW1lKHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvRnJhbWVCdWZmZXI+KG1f
YmxhY2tGcmFtZSkpOwotfQotCi12b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6c2Vu
ZEZyYW1lKHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvRnJhbWVCdWZmZXI+JiYgYnVm
ZmVyKQotewotICAgIGludDY0X3QgdGltZXN0YW1wTWljcm9TZWNvbmRzID0gbW9ub3RvbmljYWxs
eUluY3JlYXNpbmdUaW1lTVMoKSAqIDEwMDA7Ci0gICAgd2VicnRjOjpWaWRlb0ZyYW1lIGZyYW1l
KGJ1ZmZlciwgbV9zaG91bGRBcHBseVJvdGF0aW9uID8gd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8w
IDogbV9jdXJyZW50Um90YXRpb24sIHRpbWVzdGFtcE1pY3JvU2Vjb25kcyk7Ci0gICAgZm9yIChh
dXRvKiBzaW5rIDogbV9zaW5rcykKLSAgICAgICAgc2luay0+T25GcmFtZShmcmFtZSk7Ci19Ci0K
LXZvaWQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjp2aWRlb1NhbXBsZUF2YWlsYWJsZShN
ZWRpYVNhbXBsZSYgc2FtcGxlKQotewotICAgIGlmICghbV9zaW5rcy5zaXplKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmIChtX211dGVkIHx8ICFtX2VuYWJsZWQpCi0gICAgICAgIHJldHVy
bjsKLQotI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAotICAgIGlmICghKCsrbV9udW1iZXJPZkZy
YW1lcyAlIDMwKSkKLSAgICAgICAgUkVMRUFTRV9MT0coTWVkaWFTdHJlYW0sICJSZWFsdGltZU91
dGdvaW5nVmlkZW9Tb3VyY2U6OnNlbmRGcmFtZSAlenUgZnJhbWUiLCBtX251bWJlck9mRnJhbWVz
KTsKLSNlbmRpZgotCi0gICAgc3dpdGNoIChzYW1wbGUudmlkZW9Sb3RhdGlvbigpKSB7Ci0gICAg
Y2FzZSBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6Tm9uZToKLSAgICAgICAgbV9jdXJyZW50
Um90YXRpb24gPSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzA7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246OlVwc2lkZURvd246Ci0gICAgICAgIG1f
Y3VycmVudFJvdGF0aW9uID0gd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8xODA7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246OlJpZ2h0OgotICAgICAg
ICBtX2N1cnJlbnRSb3RhdGlvbiA9IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fOTA7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246OkxlZnQ6Ci0gICAg
ICAgIG1fY3VycmVudFJvdGF0aW9uID0gd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8yNzA7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLQotICAgIEFTU0VSVChzYW1wbGUucGxhdGZvcm1TYW1wbGUoKS50
eXBlID09IFBsYXRmb3JtU2FtcGxlOjpDTVNhbXBsZUJ1ZmZlclR5cGUpOwotICAgIGF1dG8gcGl4
ZWxCdWZmZXIgPSBzdGF0aWNfY2FzdDxDVlBpeGVsQnVmZmVyUmVmPihDTVNhbXBsZUJ1ZmZlckdl
dEltYWdlQnVmZmVyKHNhbXBsZS5wbGF0Zm9ybVNhbXBsZSgpLnNhbXBsZS5jbVNhbXBsZUJ1ZmZl
cikpOwotICAgIGF1dG8gcGl4ZWxGb3JtYXRUeXBlID0gQ1ZQaXhlbEJ1ZmZlckdldFBpeGVsRm9y
bWF0VHlwZShwaXhlbEJ1ZmZlcik7Ci0KLSAgICBpZiAocGl4ZWxGb3JtYXRUeXBlID09IGtDVlBp
eGVsRm9ybWF0VHlwZV80MjBZcENiQ3I4UGxhbmFyIHx8IHBpeGVsRm9ybWF0VHlwZSA9PSBrQ1ZQ
aXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyOEJpUGxhbmFyRnVsbFJhbmdlKSB7Ci0gICAgICAgIHJ0
Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvRnJhbWVCdWZmZXI+IGJ1ZmZlciA9IG5ldyBy
dGM6OlJlZkNvdW50ZWRPYmplY3Q8d2VicnRjOjpDb3JlVmlkZW9GcmFtZUJ1ZmZlcj4ocGl4ZWxC
dWZmZXIpOwotICAgICAgICBpZiAobV9zaG91bGRBcHBseVJvdGF0aW9uICYmIG1fY3VycmVudFJv
dGF0aW9uICE9IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMCkgewotICAgICAgICAgICAgLy8gRklY
TUU6IFdlIHNob3VsZCBtYWtlIEFWVmlkZW9DYXB0dXJlU291cmNlIGhhbmRsZSB0aGUgcm90YXRp
b24gd2hlbmV2ZXIgcG9zc2libGUuCi0gICAgICAgICAgICAvLyBUaGlzIGltcGxlbWVudGF0aW9u
IGlzIGluZWZmaWNpZW50LCB3ZSBzaG91bGQgcm90YXRlIG9uIHRoZSBDTVNhbXBsZUJ1ZmZlciBk
aXJlY3RseSBpbnN0ZWFkIG9mIGRvaW5nIHRoaXMgZG91YmxlIGFsbG9jYXRpb24uCi0gICAgICAg
ICAgICBhdXRvIHJvdGF0ZWRCdWZmZXIgPSBidWZmZXItPlRvSTQyMCgpOwotICAgICAgICAgICAg
QVNTRVJUKHJvdGF0ZWRCdWZmZXIpOwotICAgICAgICAgICAgYnVmZmVyID0gd2VicnRjOjpJNDIw
QnVmZmVyOjpSb3RhdGUoKnJvdGF0ZWRCdWZmZXIsIG1fY3VycmVudFJvdGF0aW9uKTsKLSAgICAg
ICAgfQotICAgICAgICBzZW5kRnJhbWUoV1RGTW92ZShidWZmZXIpKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIENWUGl4ZWxCdWZmZXJMb2NrQmFzZUFkZHJlc3MocGl4ZWxCdWZmZXIs
IDApOwotICAgIGF1dG8qIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KENWUGl4
ZWxCdWZmZXJHZXRCYXNlQWRkcmVzc09mUGxhbmUocGl4ZWxCdWZmZXIsIDApKTsKLQotICAgIEFT
U0VSVChtX3dpZHRoKTsKLSAgICBBU1NFUlQobV9oZWlnaHQpOwotCi0gICAgYXV0byBuZXdCdWZm
ZXIgPSBtX2J1ZmZlclBvb2wuQ3JlYXRlQnVmZmVyKG1fd2lkdGgsIG1faGVpZ2h0KTsKLSAgICBB
U1NFUlQobmV3QnVmZmVyKTsKLSAgICBpZiAoIW5ld0J1ZmZlcikgewotICAgICAgICBSRUxFQVNF
X0xPRyhXZWJSVEMsICJSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnZpZGVvU2FtcGxlQXZh
aWxhYmxlIHVuYWJsZSB0byBhbGxvY2F0ZSBidWZmZXIgZm9yIGNvbnZlcnNpb24gdG8gWVVWIik7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHBpeGVsRm9ybWF0VHlwZSA9PSBrQ1ZQ
aXhlbEZvcm1hdFR5cGVfMzJCR1JBKQotICAgICAgICB3ZWJydGM6OkNvbnZlcnRUb0k0MjAod2Vi
cnRjOjpWaWRlb1R5cGU6OmtBUkdCLCBzb3VyY2UsIDAsIDAsIG1fd2lkdGgsIG1faGVpZ2h0LCAw
LCB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzAsIG5ld0J1ZmZlcik7Ci0gICAgZWxzZSB7Ci0gICAg
ICAgIEFTU0VSVChwaXhlbEZvcm1hdFR5cGUgPT0ga0NWUGl4ZWxGb3JtYXRUeXBlXzMyQVJHQik7
Ci0gICAgICAgIHdlYnJ0Yzo6Q29udmVydFRvSTQyMCh3ZWJydGM6OlZpZGVvVHlwZTo6a0JHUkEs
IHNvdXJjZSwgMCwgMCwgbV93aWR0aCwgbV9oZWlnaHQsIDAsIHdlYnJ0Yzo6a1ZpZGVvUm90YXRp
b25fMCwgbmV3QnVmZmVyKTsKLSAgICB9Ci0gICAgQ1ZQaXhlbEJ1ZmZlclVubG9ja0Jhc2VBZGRy
ZXNzKHBpeGVsQnVmZmVyLCAwKTsKLSAgICBpZiAobV9zaG91bGRBcHBseVJvdGF0aW9uICYmIG1f
Y3VycmVudFJvdGF0aW9uICE9IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMCkKLSAgICAgICAgbmV3
QnVmZmVyID0gd2VicnRjOjpJNDIwQnVmZmVyOjpSb3RhdGUoKm5ld0J1ZmZlciwgbV9jdXJyZW50
Um90YXRpb24pOwotICAgIHNlbmRGcmFtZShXVEZNb3ZlKG5ld0J1ZmZlcikpOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoTElCV0VCUlRDKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lT3V0Z29p
bmdWaWRlb1NvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFj
L1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAyN2U3OGI1MTY1ZDA1Njk1ZmUxYTQ1ODQwODU5YmIxMWMxMmU0ODg2Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuaAorKysgL2Rl
di9udWxsCkBAIC0xLDExNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCwg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSByZXF1aXJlZCB0
byBiZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0
aGUgbmFtZSBvZiBBcHBsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
Ci0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgotICogQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLSAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCi0gKiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBVU0UoTElCV0VCUlRDKQotCi0jaW5jbHVk
ZSAiTGliV2ViUlRDTWFjcm9zLmgiCi0jaW5jbHVkZSAiTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUu
aCIKLSNpbmNsdWRlIDxUaW1lci5oPgotI2luY2x1ZGUgPHdlYnJ0Yy9hcGkvbWVkaWFzdHJlYW1p
bnRlcmZhY2UuaD4KLSNpbmNsdWRlIDx3ZWJydGMvYmFzZS9vcHRpb25hbC5oPgotI2luY2x1ZGUg
PHdlYnJ0Yy9jb21tb25fdmlkZW8vaW5jbHVkZS9pNDIwX2J1ZmZlcl9wb29sLmg+Ci0jaW5jbHVk
ZSA8d2VicnRjL21lZGlhL2Jhc2UvdmlkZW9zaW5raW50ZXJmYWNlLmg+Ci0jaW5jbHVkZSA8d3Rm
L09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlIGZp
bmFsIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFJlYWx0aW1lT3V0Z29pbmdWaWRlb1Nv
dXJjZT4sIHB1YmxpYyB3ZWJydGM6OlZpZGVvVHJhY2tTb3VyY2VJbnRlcmZhY2UsIHByaXZhdGUg
TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6Ok9ic2VydmVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZT4gY3JlYXRlKFJlZjxNZWRpYVN0cmVhbVRy
YWNrUHJpdmF0ZT4mJiB2aWRlb1NvdXJjZSkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBSZWFsdGlt
ZU91dGdvaW5nVmlkZW9Tb3VyY2UoV1RGTW92ZSh2aWRlb1NvdXJjZSkpKTsgfQotICAgIH5SZWFs
dGltZU91dGdvaW5nVmlkZW9Tb3VyY2UoKSB7IHN0b3AoKTsgfQotCi0gICAgdm9pZCBzdG9wKCk7
Ci0gICAgYm9vbCBzZXRTb3VyY2UoUmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiYmKTsKLSAg
ICBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYgc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV92aWRl
b1NvdXJjZS5nZXQoKTsgfQotCi0gICAgaW50IEFkZFJlZigpIGNvbnN0IGZpbmFsIHsgcmVmKCk7
IHJldHVybiByZWZDb3VudCgpOyB9Ci0gICAgaW50IFJlbGVhc2UoKSBjb25zdCBmaW5hbCB7IGRl
cmVmKCk7IHJldHVybiByZWZDb3VudCgpOyB9Ci0KLSAgICB2b2lkIHNldEFwcGx5Um90YXRpb24o
Ym9vbCBzaG91bGRBcHBseVJvdGF0aW9uKSB7IG1fc2hvdWxkQXBwbHlSb3RhdGlvbiA9IHNob3Vs
ZEFwcGx5Um90YXRpb247IH0KLQotcHJpdmF0ZToKLSAgICBSZWFsdGltZU91dGdvaW5nVmlkZW9T
b3VyY2UoUmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiYmKTsKLQotICAgIHZvaWQgc2VuZEZy
YW1lKHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvRnJhbWVCdWZmZXI+JiYpOwotICAg
IHZvaWQgc2VuZEJsYWNrRnJhbWVzSWZOZWVkZWQoKTsKLSAgICB2b2lkIHNlbmRPbmVCbGFja0Zy
YW1lKCk7Ci0gICAgdm9pZCBpbml0aWFsaXplRnJvbVNvdXJjZSgpOwotICAgIHZvaWQgdXBkYXRl
QmxhY2tGcmFtZXNTZW5kaW5nKCk7Ci0KLSAgICAvLyBOb3RpZmllciBBUEkKLSAgICB2b2lkIFJl
Z2lzdGVyT2JzZXJ2ZXIod2VicnRjOjpPYnNlcnZlckludGVyZmFjZSopIGZpbmFsIHsgfQotICAg
IHZvaWQgVW5yZWdpc3Rlck9ic2VydmVyKHdlYnJ0Yzo6T2JzZXJ2ZXJJbnRlcmZhY2UqKSBmaW5h
bCB7IH0KLQotICAgIC8vIFZpZGVvVHJhY2tTb3VyY2VJbnRlcmZhY2UgQVBJCi0gICAgYm9vbCBp
c19zY3JlZW5jYXN0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBydGM6Ok9w
dGlvbmFsPGJvb2w+IG5lZWRzX2Rlbm9pc2luZygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHJ0Yzo6
T3B0aW9uYWw8Ym9vbD4oKTsgfQotICAgIGJvb2wgR2V0U3RhdHMoU3RhdHMqKSBmaW5hbDsKLQot
ICAgIC8vIE1lZGlhU291cmNlSW50ZXJmYWNlIEFQSQotICAgIFNvdXJjZVN0YXRlIHN0YXRlKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gU291cmNlU3RhdGUoKTsgfQotICAgIGJvb2wgcmVtb3RlKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgLy8gcnRjOjpWaWRlb1NvdXJjZUlu
dGVyZmFjZTx3ZWJydGM6OlZpZGVvRnJhbWU+IEFQSQotICAgIHZvaWQgQWRkT3JVcGRhdGVTaW5r
KHJ0Yzo6VmlkZW9TaW5rSW50ZXJmYWNlPHdlYnJ0Yzo6VmlkZW9GcmFtZT4qLCBjb25zdCBydGM6
OlZpZGVvU2lua1dhbnRzJikgZmluYWw7Ci0gICAgdm9pZCBSZW1vdmVTaW5rKHJ0Yzo6VmlkZW9T
aW5rSW50ZXJmYWNlPHdlYnJ0Yzo6VmlkZW9GcmFtZT4qKSBmaW5hbDsKLQotICAgIHZvaWQgc291
cmNlTXV0ZWRDaGFuZ2VkKCk7Ci0gICAgdm9pZCBzb3VyY2VFbmFibGVkQ2hhbmdlZCgpOwotICAg
IHZvaWQgdmlkZW9TYW1wbGVBdmFpbGFibGUoTWVkaWFTYW1wbGUmKTsKLQotICAgIC8vIE1lZGlh
U3RyZWFtVHJhY2tQcml2YXRlOjpPYnNlcnZlciBBUEkKLSAgICB2b2lkIHRyYWNrTXV0ZWRDaGFu
Z2VkKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJikgZmluYWwgeyBzb3VyY2VNdXRlZENoYW5nZWQo
KTsgfQotICAgIHZvaWQgdHJhY2tFbmFibGVkQ2hhbmdlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0
ZSYpIGZpbmFsIHsgc291cmNlRW5hYmxlZENoYW5nZWQoKTsgfQotICAgIHZvaWQgdHJhY2tTZXR0
aW5nc0NoYW5nZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmKSBmaW5hbCB7IGluaXRpYWxpemVG
cm9tU291cmNlKCk7IH0KLSAgICB2b2lkIHNhbXBsZUJ1ZmZlclVwZGF0ZWQoTWVkaWFTdHJlYW1U
cmFja1ByaXZhdGUmLCBNZWRpYVNhbXBsZSYgc2FtcGxlKSBmaW5hbCB7IHZpZGVvU2FtcGxlQXZh
aWxhYmxlKHNhbXBsZSk7IH0KLSAgICB2b2lkIHRyYWNrRW5kZWQoTWVkaWFTdHJlYW1UcmFja1By
aXZhdGUmKSBmaW5hbCB7IH0KLQotICAgIFZlY3RvcjxydGM6OlZpZGVvU2lua0ludGVyZmFjZTx3
ZWJydGM6OlZpZGVvRnJhbWU+Kj4gbV9zaW5rczsKLSAgICB3ZWJydGM6Okk0MjBCdWZmZXJQb29s
IG1fYnVmZmVyUG9vbDsKLSAgICBSZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+IG1fdmlkZW9T
b3VyY2U7Ci0gICAgYm9vbCBtX2VuYWJsZWQgeyB0cnVlIH07Ci0gICAgYm9vbCBtX211dGVkIHsg
ZmFsc2UgfTsKLSAgICBzdGQ6Om9wdGlvbmFsPFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncz4g
bV9pbml0aWFsU2V0dGluZ3M7Ci0gICAgd2VicnRjOjpWaWRlb1JvdGF0aW9uIG1fY3VycmVudFJv
dGF0aW9uIHsgd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8wIH07Ci0gICAgdWludDMyX3QgbV93aWR0
aCB7IDAgfTsKLSAgICB1aW50MzJfdCBtX2hlaWdodCB7IDAgfTsKLSAgICBib29sIG1faXNTdG9w
cGVkIHsgZmFsc2UgfTsKLSAgICBUaW1lciBtX2JsYWNrRnJhbWVUaW1lcjsKLSAgICBydGM6OnNj
b3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb0ZyYW1lQnVmZmVyPiBtX2JsYWNrRnJhbWU7Ci0gICAg
Ym9vbCBtX3Nob3VsZEFwcGx5Um90YXRpb24geyBmYWxzZSB9OwotI2lmICFSRUxFQVNFX0xPR19E
SVNBQkxFRAotICAgIHNpemVfdCBtX251bWJlck9mRnJhbWVzIHsgMCB9OwotI2VuZGlmCi19Owot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoTElCV0VCUlRDKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1l
T3V0Z29pbmdWaWRlb1NvdXJjZU1hYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTWFjLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4yOWI4Nzk3YzQ0ZGM2OTgzMzViMWI4OGU0MTVmZTZlYTIxMjA0ZTcyCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lT3V0
Z29pbmdWaWRlb1NvdXJjZU1hYy5jcHAKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTcgQXBwbGUgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkLCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIHJlcXVpcmVkIHRvIGJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gbm9yIHRoZSBuYW1lcyBvZgor
ICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTWFjLmgiCisKKyNpZiBVU0UoTElCV0VCUlRD
KQorCisjaW5jbHVkZSA8d2VicnRjL3Nkay9vYmpjL0ZyYW1ld29yay9DbGFzc2VzL1ZpZGVvL2Nv
cmV2aWRlb19mcmFtZV9idWZmZXIuaD4KKworI2luY2x1ZGUgIkNvcmVNZWRpYVNvZnRMaW5rLmgi
CisjaW5jbHVkZSAiQ29yZVZpZGVvU29mdExpbmsuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VNYWM6OlJlYWx0aW1lT3V0Z29pbmdWaWRlb1Nv
dXJjZU1hYyhSZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYgdmlkZW9Tb3VyY2UpCisgICAg
OiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UoV1RGTW92ZSh2aWRlb1NvdXJjZSkpCit7Cit9
CisKK3ZvaWQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTWFjOjp2aWRlb1NhbXBsZUF2YWls
YWJsZShNZWRpYVNhbXBsZSYgc2FtcGxlKQoreworICAgIGlmICghbV9zaW5rcy5zaXplKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmIChtX211dGVkIHx8ICFtX2VuYWJsZWQpCisgICAgICAg
IHJldHVybjsKKworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgIGlmICghKCsrbV9udW1i
ZXJPZkZyYW1lcyAlIDMwKSkKKyAgICAgICAgUkVMRUFTRV9MT0coTWVkaWFTdHJlYW0sICJSZWFs
dGltZU91dGdvaW5nVmlkZW9Tb3VyY2VNYWM6OnNlbmRGcmFtZSAlenUgZnJhbWUiLCBtX251bWJl
ck9mRnJhbWVzKTsKKyNlbmRpZgorCisgICAgc3dpdGNoIChzYW1wbGUudmlkZW9Sb3RhdGlvbigp
KSB7CisgICAgY2FzZSBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6Tm9uZToKKyAgICAgICAg
bV9jdXJyZW50Um90YXRpb24gPSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzA7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246OlVwc2lkZURvd246Cisg
ICAgICAgIG1fY3VycmVudFJvdGF0aW9uID0gd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8xODA7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246OlJpZ2h0
OgorICAgICAgICBtX2N1cnJlbnRSb3RhdGlvbiA9IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fOTA7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246Okxl
ZnQ6CisgICAgICAgIG1fY3VycmVudFJvdGF0aW9uID0gd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8y
NzA7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIEFTU0VSVChzYW1wbGUucGxhdGZvcm1T
YW1wbGUoKS50eXBlID09IFBsYXRmb3JtU2FtcGxlOjpDTVNhbXBsZUJ1ZmZlclR5cGUpOworICAg
IGF1dG8gcGl4ZWxCdWZmZXIgPSBzdGF0aWNfY2FzdDxDVlBpeGVsQnVmZmVyUmVmPihDTVNhbXBs
ZUJ1ZmZlckdldEltYWdlQnVmZmVyKHNhbXBsZS5wbGF0Zm9ybVNhbXBsZSgpLnNhbXBsZS5jbVNh
bXBsZUJ1ZmZlcikpOworICAgIGF1dG8gcGl4ZWxGb3JtYXRUeXBlID0gQ1ZQaXhlbEJ1ZmZlckdl
dFBpeGVsRm9ybWF0VHlwZShwaXhlbEJ1ZmZlcik7CisKKyAgICBpZiAocGl4ZWxGb3JtYXRUeXBl
ID09IGtDVlBpeGVsRm9ybWF0VHlwZV80MjBZcENiQ3I4UGxhbmFyIHx8IHBpeGVsRm9ybWF0VHlw
ZSA9PSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyOEJpUGxhbmFyRnVsbFJhbmdlKSB7Cisg
ICAgICAgIHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvRnJhbWVCdWZmZXI+IGJ1ZmZl
ciA9IG5ldyBydGM6OlJlZkNvdW50ZWRPYmplY3Q8d2VicnRjOjpDb3JlVmlkZW9GcmFtZUJ1ZmZl
cj4ocGl4ZWxCdWZmZXIpOworICAgICAgICBpZiAobV9zaG91bGRBcHBseVJvdGF0aW9uICYmIG1f
Y3VycmVudFJvdGF0aW9uICE9IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMCkgeworICAgICAgICAg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCBtYWtlIEFWVmlkZW9DYXB0dXJlU291cmNlIGhhbmRsZSB0
aGUgcm90YXRpb24gd2hlbmV2ZXIgcG9zc2libGUuCisgICAgICAgICAgICAvLyBUaGlzIGltcGxl
bWVudGF0aW9uIGlzIGluZWZmaWNpZW50LCB3ZSBzaG91bGQgcm90YXRlIG9uIHRoZSBDTVNhbXBs
ZUJ1ZmZlciBkaXJlY3RseSBpbnN0ZWFkIG9mIGRvaW5nIHRoaXMgZG91YmxlIGFsbG9jYXRpb24u
CisgICAgICAgICAgICBhdXRvIHJvdGF0ZWRCdWZmZXIgPSBidWZmZXItPlRvSTQyMCgpOworICAg
ICAgICAgICAgQVNTRVJUKHJvdGF0ZWRCdWZmZXIpOworICAgICAgICAgICAgYnVmZmVyID0gd2Vi
cnRjOjpJNDIwQnVmZmVyOjpSb3RhdGUoKnJvdGF0ZWRCdWZmZXIsIG1fY3VycmVudFJvdGF0aW9u
KTsKKyAgICAgICAgfQorICAgICAgICBzZW5kRnJhbWUoV1RGTW92ZShidWZmZXIpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIENWUGl4ZWxCdWZmZXJMb2NrQmFzZUFkZHJlc3MocGl4
ZWxCdWZmZXIsIDApOworICAgIGF1dG8qIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhf
dCo+KENWUGl4ZWxCdWZmZXJHZXRCYXNlQWRkcmVzc09mUGxhbmUocGl4ZWxCdWZmZXIsIDApKTsK
KworICAgIEFTU0VSVChtX3dpZHRoKTsKKyAgICBBU1NFUlQobV9oZWlnaHQpOworCisgICAgYXV0
byBuZXdCdWZmZXIgPSBtX2J1ZmZlclBvb2wuQ3JlYXRlQnVmZmVyKG1fd2lkdGgsIG1faGVpZ2h0
KTsKKyAgICBBU1NFUlQobmV3QnVmZmVyKTsKKyAgICBpZiAoIW5ld0J1ZmZlcikgeworICAgICAg
ICBSRUxFQVNFX0xPRyhXZWJSVEMsICJSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VNYWM6OnZp
ZGVvU2FtcGxlQXZhaWxhYmxlIHVuYWJsZSB0byBhbGxvY2F0ZSBidWZmZXIgZm9yIGNvbnZlcnNp
b24gdG8gWVVWIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKHBpeGVsRm9ybWF0
VHlwZSA9PSBrQ1ZQaXhlbEZvcm1hdFR5cGVfMzJCR1JBKQorICAgICAgICB3ZWJydGM6OkNvbnZl
cnRUb0k0MjAod2VicnRjOjpWaWRlb1R5cGU6OmtBUkdCLCBzb3VyY2UsIDAsIDAsIG1fd2lkdGgs
IG1faGVpZ2h0LCAwLCB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzAsIG5ld0J1ZmZlcik7CisgICAg
ZWxzZSB7CisgICAgICAgIEFTU0VSVChwaXhlbEZvcm1hdFR5cGUgPT0ga0NWUGl4ZWxGb3JtYXRU
eXBlXzMyQVJHQik7CisgICAgICAgIHdlYnJ0Yzo6Q29udmVydFRvSTQyMCh3ZWJydGM6OlZpZGVv
VHlwZTo6a0JHUkEsIHNvdXJjZSwgMCwgMCwgbV93aWR0aCwgbV9oZWlnaHQsIDAsIHdlYnJ0Yzo6
a1ZpZGVvUm90YXRpb25fMCwgbmV3QnVmZmVyKTsKKyAgICB9CisgICAgQ1ZQaXhlbEJ1ZmZlclVu
bG9ja0Jhc2VBZGRyZXNzKHBpeGVsQnVmZmVyLCAwKTsKKyAgICBpZiAobV9zaG91bGRBcHBseVJv
dGF0aW9uICYmIG1fY3VycmVudFJvdGF0aW9uICE9IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMCkK
KyAgICAgICAgbmV3QnVmZmVyID0gd2VicnRjOjpJNDIwQnVmZmVyOjpSb3RhdGUoKm5ld0J1ZmZl
ciwgbV9jdXJyZW50Um90YXRpb24pOworICAgIHNlbmRGcmFtZShXVEZNb3ZlKG5ld0J1ZmZlcikp
OworfQorCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShMSUJXRUJS
VEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMv
UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTWFjLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTWFjLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZmQyMWI3Y2Y3MTg3ZWZkZmI0ZTllZjhmZDc0MzNjZTdiNjY0OGFiZAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGlt
ZU91dGdvaW5nVmlkZW9Tb3VyY2VNYWMuaApAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE3IEFwcGxlIEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSByZXF1aXJlZCB0byBiZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YK
KyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoTElC
V0VCUlRDKQorCisjaW5jbHVkZSAiUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTWFj
IGZpbmFsIDogcHVibGljIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZSB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFJlZjxSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VNYWM+IGNyZWF0ZShSZWY8
TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYgdmlkZW9Tb3VyY2UpIHsgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTWFjKFdURk1vdmUodmlkZW9Tb3VyY2Up
KSk7IH0KKyAgICB+UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTWFjKCkgeyB9CisKK3ByaXZh
dGU6CisgICAgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTWFjKFJlZjxNZWRpYVN0cmVhbVRy
YWNrUHJpdmF0ZT4mJik7CisKKyAgICB2b2lkIHZpZGVvU2FtcGxlQXZhaWxhYmxlKE1lZGlhU2Ft
cGxlJikgZmluYWw7CisKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICBzaXplX3QgbV9u
dW1iZXJPZkZyYW1lcyB7IDAgfTsKKyNlbmRpZgorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gVVNFKExJQldFQlJUQykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322665</attachid>
            <date>2017-10-04 06:28:36 -0700</date>
            <delta_ts>2017-10-04 08:08:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177869-20171004152835.patch</filename>
            <type>text/plain</type>
            <size>77702</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIyODM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjU0NjFlNWRhZjY2YjU4
N2NiNjU4MzAxNmNlZDg4YmFlNzhiOTJlZS4uYjA0ZDg3OTEzMDAxMDI4MjBiZjU3YTAyNjUzZmMz
Mzc5YWJlMGExNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDE3LTEwLTA0ICBBbGVq
YW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisgICAgICAgIE1ha2UgUmVhbHRp
bWVJbmNvbWluZ0F1ZGlvU291cmNlcyBhbmQgUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlcyBw
b3J0IGFnbm9zdGljCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzc4NjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBSZWZhY3RvciB0aGUgUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlIGFuZCBSZWFsdGlt
ZU91dGdvaW5nQXVkaW9Tb3VyY2UgY2xhc3NlcywKKyAgICAgICAgbW92ZSB0aGUgbWFjIHNwZWNp
ZmljIGNvZGUgdG8gYSBkaWZmZXJlbnQgY2xhc3MuIFRoaXMgd2F5IHdlIGNhbiB1c2UgdGhlbSBm
cm9tCisgICAgICAgIG90aGVyIHBvcnRzLgorCisgICAgICAgIE5vIG5ldyBmdW5jdGlvbmFsaXR5
LCBqdXN0IGEgcmVmYWN0b3IuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAg
KiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0v
bWVkaWFzdHJlYW0vUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6OlJlYWx0aW1lSW5jb21p
bmdWaWRlb1NvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9T
b3VyY2U6OnN0YXJ0UHJvZHVjaW5nRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUlu
Y29taW5nVmlkZW9Tb3VyY2U6OnNldFNvdXJjZVRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
YWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6c3RvcFByb2R1Y2luZ0RhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlOjpjYXBhYmlsaXRpZXMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlOjpzZXR0aW5n
cyBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVJbmNvbWlu
Z1ZpZGVvU291cmNlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL21hYy9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuaC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuY3BwOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lT3V0
Z29pbmdWaWRlb1NvdXJjZS5jcHAuCisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5n
VmlkZW9Tb3VyY2U6OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVh
bHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmguCisg
ICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnZpZGVvU2FtcGxl
QXZhaWxhYmxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVJ
bmNvbWluZ1ZpZGVvU291cmNlTWFjLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuY3BwLgor
ICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTWFjOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTWFjOjpSZWFs
dGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWMpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJ
bmNvbWluZ1ZpZGVvU291cmNlTWFjOjpwaXhlbEJ1ZmZlckZyb21WaWRlb0ZyYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1hYzo6T25GcmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWM6OnByb2Nlc3NO
ZXdTYW1wbGUpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUlu
Y29taW5nVmlkZW9Tb3VyY2VNYWMuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuaC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNl
TWFjLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nVmlkZW9T
b3VyY2VNYWM6OlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZU1hYyk6CisgICAgICAgIChXZWJD
b3JlOjpSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VNYWM6OnZpZGVvU2FtcGxlQXZhaWxhYmxl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1Zp
ZGVvU291cmNlTWFjLmg6IEFkZGVkLgorCiAyMDE3LTEwLTA0ICBNaWNoYWVsIENhdGFuemFybyAg
PG1jYXRhbnphcm9AaWdhbGlhLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OKHIyMjIzOTIpOiBb
V1BFXVtHVEtdIE1hbnkgZm9ybXMgdGVzdHMgYXJlIGZhaWxpbmcgZHVlIHRvIGJyb2tlbiBldmVu
dCB0aW1lc3RhbXBzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBi
L1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDFjYzE2YzdkMWZhYmRlZjY1Nzhi
NDIyMTExZGJiNTY1ZTM5MDQ4OWQuLjhjYjVjNDQwZTBhM2VmZDlkNTg3ZGFiOTA3ZGVhYmQ3N2Zi
Y2MzMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0yNTUxLDkgKzI1NTEsMTEgQEAgc2V0KFdl
YkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3Vy
Y2VTdXBwb3J0ZWRDb25zdHJhaW50cy5jcHAKICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SVENJ
Y2VDYW5kaWRhdGVEZXNjcmlwdG9yLmNwcAogICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL1JUQ1Nl
c3Npb25EZXNjcmlwdGlvbkRlc2NyaXB0b3IuY3BwCisgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0v
UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmNwcAogICAgIHBsYXRmb3JtL21lZGlhc3RyZWFt
L1JlYWx0aW1lTWVkaWFTb3VyY2UuY3BwCiAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRp
bWVNZWRpYVNvdXJjZUNlbnRlci5jcHAKICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGlt
ZU1lZGlhU291cmNlU2V0dGluZ3MuY3BwCisgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRp
bWVPdXRnb2luZ1ZpZGVvU291cmNlLmNwcAogICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL1NEUFBy
b2Nlc3NvclNjcmlwdFJlc291cmNlLmNwcAogCiAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGli
d2VicnRjL0xpYldlYlJUQ1Byb3ZpZGVyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGIwZTc1NDk3MGIwNDBiM2M1NTBiMDcx
NzA1MDk2MWJkZGQ4NzZmMjUuLjRkNjEyNTA1MWUwMjUyMzRkN2MwNGUyNjI1NDNjNWE4NzcwYzA0
NGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKQEAgLTI3NTQsNyArMjc1NCw5IEBACiAJCTVDRDlGNTY3MUFBMEY3NDIwMERBNDVGRiAv
KiBERkFCeXRlY29kZUNvbXBpbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1QzM5MzA1RjFBQTBGNkE5MDAyOUM4MTYgLyogREZBQnl0ZWNvZGVDb21w
aWxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTVDRDlGNTY4MUFBMEY3NDYwMERBNDVGRiAvKiBERkFCeXRlY29kZUludGVycHJldGVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzM5MzA2MTFBQTBG
NkE5MDAyOUM4MTYgLyogREZBQnl0ZWNvZGVJbnRlcnByZXRlci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTVDREQ4MzNEMUU0MzI0RDkwMDYyMUU5
MiAvKiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNERDgzM0IxRTQzMjRCQjAwNjIxRTkyIC8qIFJl
YWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5jcHAgKi87IH07CisJCTVDREQ4MzNEMUU0MzI0RDkw
MDYyMUU5MyAvKiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VNYWMuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNERDgzM0IxRTQzMjRCQjAwNjIx
RTkzIC8qIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZU1hYy5jcHAgKi87IH07CiAJCTVDREQ4
MzNFMUU0MzI0REMwMDYyMUU5MiAvKiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNERDgzMzkxRTQz
MjRCQjAwNjIxRTkyIC8qIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5jcHAgKi87IH07CisJ
CTVDREQ4MzNFMUU0MzI0REMwMDYyMUU5MyAvKiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VN
YWMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNE
RDgzMzkxRTQzMjRCQjAwNjIxRTkzIC8qIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1hYy5j
cHAgKi87IH07CiAJCTVDREQ4MzY0MUU0MzI1QTAwMDYyMUU5MiAvKiBMaWJXZWJSVENEYXRhQ2hh
bm5lbEhhbmRsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNUNERDgzM0YxRTQzMjUzRDAwNjIxRTkyIC8qIExpYldlYlJUQ0RhdGFDaGFubmVsSGFu
ZGxlci5jcHAgKi87IH07CiAJCTVDREZBNkM4MUFBNEYyREEwMEVBODc0NiAvKiBDb250ZW50RXh0
ZW5zaW9uQWN0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNUNERkE2QzcxQUE0RjJEQTAwRUE4NzQ2IC8qIENvbnRlbnRFeHRlbnNpb25BY3Rpb25z
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNUNF
NUQ5QUIxREI4OUEwMzAwQ0U3QThEIC8qIEpTVGV4dERlY29kZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNFNUQ5QTcxREI4OTlGQzAwQ0U3QThE
IC8qIEpTVGV4dERlY29kZXIuY3BwICovOyB9OwpAQCAtMTA3MDQsOCArMTA3MDYsMTAgQEAKIAkJ
NUNCQzhEQUExQUFBMzAyMjAwRTFDODAzIC8qIE1lZGlhQWNjZXNzaWJpbGl0eVNvZnRMaW5rLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlhQWNjZXNzaWJpbGl0
eVNvZnRMaW5rLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNCQzhEQUIxQUFB
MzAyMjAwRTFDODAzIC8qIE1lZGlhQWNjZXNzaWJpbGl0eVNvZnRMaW5rLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhQWNjZXNzaWJpbGl0eVNvZnRMaW5rLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDREQ4MzM5MUU0MzI0QkIwMDYyMUU5MiAvKiBSZWFs
dGltZUluY29taW5nVmlkZW9Tb3VyY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNUNERDgzMzkxRTQzMjRCQjAwNjIxRTkzIC8qIFJlYWx0aW1lSW5jb21p
bmdWaWRlb1NvdXJjZU1hYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1Q0REODMzQTFFNDMyNEJCMDA2MjFFOTIgLyogUmVhbHRpbWVJbmNvbWluZ1Zp
ZGVvU291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlYWx0aW1lSW5j
b21pbmdWaWRlb1NvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Q0REODMz
QjFFNDMyNEJCMDA2MjFFOTIgLyogUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1Nv
dXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDREQ4MzNCMUU0MzI0QkIw
MDYyMUU5MyAvKiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VNYWMuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTWFj
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNERDgzM0MxRTQzMjRCQjAwNjIx
RTkyIC8qIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNUNERDgzM0YxRTQzMjUzRDAwNjIxRTkyIC8qIExpYldlYlJUQ0Rh
dGFDaGFubmVsSGFuZGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBMaWJXZWJSVENEYXRhQ2hhbm5lbEhhbmRsZXIuY3BwOyBwYXRoID0gbGlid2VicnRjL0xpYldl
YlJUQ0RhdGFDaGFubmVsSGFuZGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTVDREQ4MzQwMUU0MzI1M0QwMDYyMUU5MiAvKiBMaWJXZWJSVENEYXRhQ2hhbm5lbEhhbmRsZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTGliV2ViUlRDRGF0YUNoYW5uZWxI
YW5kbGVyLmg7IHBhdGggPSBsaWJ3ZWJydGMvTGliV2ViUlRDRGF0YUNoYW5uZWxIYW5kbGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjUzNyw2ICsxNjU0MSw4IEBACiAJCQkJ
MDdGRkRFNjYxODFBRUQ0MjAwNzJENDA5IC8qIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmNwcCAq
LywKIAkJCQkwN0ZGREU2NzE4MUFFRDQyMDA3MkQ0MDkgLyogTWVkaWFTdHJlYW1UcmFja1ByaXZh
dGUuaCAqLywKIAkJCQk1RUJCODkzODFDNzdCREE0MDBDNjVENDEgLyogUGVlck1lZGlhRGVzY3Jp
cHRpb24uaCAqLywKKwkJCQk1Q0REODMzOTFFNDMyNEJCMDA2MjFFOTIgLyogUmVhbHRpbWVJbmNv
bWluZ1ZpZGVvU291cmNlLmNwcCAqLywKKwkJCQk1Q0REODMzQTFFNDMyNEJCMDA2MjFFOTIgLyog
UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmggKi8sCiAJCQkJNEE0RjY1NkIxQUE5OTdGMTAw
RTM4Q0REIC8qIFJlYWx0aW1lTWVkaWFTb3VyY2UuY3BwICovLAogCQkJCTRBNEY2NTZDMUFBOTk3
RjEwMEUzOENERCAvKiBSZWFsdGltZU1lZGlhU291cmNlLmggKi8sCiAJCQkJNEE0RjY1NkQxQUE5
OTdGMTAwRTM4Q0REIC8qIFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMuaCAqLywKQEAg
LTE2NTQ2LDYgKzE2NTUyLDggQEAKIAkJCQk0QTRGNjU2RjFBQTk5N0YxMDBFMzhDREQgLyogUmVh
bHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzLmggKi8sCiAJCQkJMkVDNDFERTIxQzA0MTBBMzAwRDI5
NEZFIC8qIFJlYWx0aW1lTWVkaWFTb3VyY2VTdXBwb3J0ZWRDb25zdHJhaW50cy5jcHAgKi8sCiAJ
CQkJMDdDMUMwRTQxQkZCNjBFRDAwQkQyMjU2IC8qIFJlYWx0aW1lTWVkaWFTb3VyY2VTdXBwb3J0
ZWRDb25zdHJhaW50cy5oICovLAorCQkJCTVDREQ4MzNCMUU0MzI0QkIwMDYyMUU5MiAvKiBSZWFs
dGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuY3BwICovLAorCQkJCTVDREQ4MzNDMUU0MzI0QkIwMDYy
MUU5MiAvKiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuaCAqLywKIAkJCQkzMTM1OTEwQzFF
N0REQ0I2MDBGMzA2MzAgLyogUlRDQnVuZGxlUG9saWN5LmggKi8sCiAJCQkJMDcyMjFCQTIxN0NG
MEFENDAwODQ4RTUxIC8qIFJUQ0RhdGFDaGFubmVsSGFuZGxlci5oICovLAogCQkJCTA3MjIxQkEz
MTdDRjBBRDQwMDg0OEU1MSAvKiBSVENEYXRhQ2hhbm5lbEhhbmRsZXJDbGllbnQuaCAqLywKQEAg
LTE2NTk4LDE0ICsxNjYwNiwxMiBAQAogCQkJCTA3RUU3NkVFMUJFQTYxOTgwMEY4OTEzMyAvKiBN
b2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5tbSAqLywKIAkJCQk0MTEwM0FBQTFFMzk3OTBBMDA3
NjlGMDMgLyogUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlLmNwcCAqLywKIAkJCQk0MTEwM0FB
OTFFMzk3OTBBMDA3NjlGMDMgLyogUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlLmggKi8sCi0J
CQkJNUNERDgzMzkxRTQzMjRCQjAwNjIxRTkyIC8qIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJj
ZS5jcHAgKi8sCi0JCQkJNUNERDgzM0ExRTQzMjRCQjAwNjIxRTkyIC8qIFJlYWx0aW1lSW5jb21p
bmdWaWRlb1NvdXJjZS5oICovLAorCQkJCTVDREQ4MzM5MUU0MzI0QkIwMDYyMUU5MyAvKiBSZWFs
dGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWMuY3BwICovLAogCQkJCTRBMEZGQUEzMUFBRjVFRjYw
MDYyODAzQiAvKiBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTWFjLmNwcCAqLywKIAkJCQk0QTBG
RkFBNDFBQUY1RUY2MDA2MjgwM0IgLyogUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck1hYy5oICov
LAogCQkJCTQxMTAzQUE3MUUzOTc5MEEwMDc2OUYwMyAvKiBSZWFsdGltZU91dGdvaW5nQXVkaW9T
b3VyY2UuY3BwICovLAogCQkJCTQxMTAzQUE4MUUzOTc5MEEwMDc2OUYwMyAvKiBSZWFsdGltZU91
dGdvaW5nQXVkaW9Tb3VyY2UuaCAqLywKLQkJCQk1Q0REODMzQjFFNDMyNEJCMDA2MjFFOTIgLyog
UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmNwcCAqLywKLQkJCQk1Q0REODMzQzFFNDMyNEJC
MDA2MjFFOTIgLyogUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmggKi8sCisJCQkJNUNERDgz
M0IxRTQzMjRCQjAwNjIxRTkzIC8qIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZU1hYy5jcHAg
Ki8sCiAJCQkJMDdENjM3M0UxQkIwQjExMzAwMjU2Q0U5IC8qIFdlYkF1ZGlvU291cmNlUHJvdmlk
ZXJBVkZPYmpDLmggKi8sCiAJCQkJMDdENjM3M0YxQkIwQjExMzAwMjU2Q0U5IC8qIFdlYkF1ZGlv
U291cmNlUHJvdmlkZXJBVkZPYmpDLm1tICovLAogCQkJKTsKQEAgLTMzNjM5LDYgKzMzNjQ1LDcg
QEAKIAkJCQlGRDMxNjAzQjEyQjAyNjc2MDBDMUEzNTkgLyogUmVhbHRpbWVBbmFseXNlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk0MTEwM0FBRTFFMzk3OTEwMDA3NjlGMDMgLyogUmVhbHRpbWVJ
bmNvbWluZ0F1ZGlvU291cmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDREQ4MzNFMUU0MzI0
REMwMDYyMUU5MiAvKiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJNUNERDgzM0UxRTQzMjREQzAwNjIxRTkzIC8qIFJlYWx0aW1lSW5jb21pbmdWaWRl
b1NvdXJjZU1hYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0QTRGNjU3MDFBQTk5N0YxMDBFMzhD
REQgLyogUmVhbHRpbWVNZWRpYVNvdXJjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0QTBGRkFB
MTFBQUY1RUEyMDA2MjgwM0IgLyogUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk0QTBGRkFBNTFBQUY1RUY2MDA2MjgwM0IgLyogUmVhbHRpbWVNZWRpYVNv
dXJjZUNlbnRlck1hYy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTMzNjQ2LDYgKzMzNjUzLDcgQEAK
IAkJCQkyRUM0MURFNDFDMDQxMEEzMDBEMjk0RkUgLyogUmVhbHRpbWVNZWRpYVNvdXJjZVN1cHBv
cnRlZENvbnN0cmFpbnRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQxMTAzQUFCMUUzOTc5MTAw
MDc2OUYwMyAvKiBSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNUNERDgzM0QxRTQzMjREOTAwNjIxRTkyIC8qIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1Nv
dXJjZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1Q0REODMzRDFFNDMyNEQ5MDA2MjFFOTMgLyog
UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTWFjLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZE
NDVBOTVBMTc1RDQxNzEwMEMyMUVDOCAvKiBSZWN0YW5nbGVTaGFwZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlCQ0FCNDE4MTEzRTM1NkU4MDBEOEFBRjMgLyogUmVnaW9uLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE1NzhGNDQwMURFMEI2MzQwMDNERkM2QSAvKiBSZWplY3RlZFByb21pc2VUcmFj
a2VyLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNTNiMGYwZTk4OTJkNzZjMGQzYmNkN2NjMmQ5NWMyODE5ODRjN2VlZgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1Jl
YWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5jcHAKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqICAgIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRp
c3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5o
IgorCisjaWYgVVNFKExJQldFQlJUQykKKworI2lmIFBMQVRGT1JNKENPQ09BKQorI2luY2x1ZGUg
IlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1hYy5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJM
b2dnaW5nLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVmPFJlYWx0aW1lSW5jb21pbmdW
aWRlb1NvdXJjZT4gUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlOjpjcmVhdGUocnRjOjpzY29w
ZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9UcmFja0ludGVyZmFjZT4mJiB2aWRlb1RyYWNrLCBTdHJp
bmcmJiB0cmFja0lkKQoreworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIGF1dG8gc291cmNlID0g
YWRvcHRSZWYoKm5ldyBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWMoV1RGTW92ZSh2aWRl
b1RyYWNrKSwgV1RGTW92ZSh0cmFja0lkKSkpOworI2Vsc2UKKyAgICBhdXRvIHNvdXJjZSA9IGFk
b3B0UmVmKCpuZXcgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlKFdURk1vdmUodmlkZW9UcmFj
ayksIFdURk1vdmUodHJhY2tJZCkpKTsKKyNlbmRpZgorICAgIHNvdXJjZS0+c3RhcnQoKTsKKyAg
ICByZXR1cm4gc291cmNlOworfQorCitSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6OlJlYWx0
aW1lSW5jb21pbmdWaWRlb1NvdXJjZShydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb1Ry
YWNrSW50ZXJmYWNlPiYmIHZpZGVvVHJhY2ssIFN0cmluZyYmIHZpZGVvVHJhY2tJZCkKKyAgICA6
IFJlYWx0aW1lTWVkaWFTb3VyY2UoV1RGTW92ZSh2aWRlb1RyYWNrSWQpLCBSZWFsdGltZU1lZGlh
U291cmNlOjpUeXBlOjpWaWRlbywgU3RyaW5nKCkpCisgICAgLCBtX3ZpZGVvVHJhY2soV1RGTW92
ZSh2aWRlb1RyYWNrKSkKK3sKKyAgICBtX2N1cnJlbnRTZXR0aW5ncy5zZXRXaWR0aCg2NDApOwor
ICAgIG1fY3VycmVudFNldHRpbmdzLnNldEhlaWdodCg0ODApOworICAgIG5vdGlmeU11dGVkQ2hh
bmdlKCFtX3ZpZGVvVHJhY2spOworfQorCit2b2lkIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJj
ZTo6c3RhcnRQcm9kdWNpbmdEYXRhKCkKK3sKKyAgICBpZiAobV92aWRlb1RyYWNrKQorICAgICAg
ICBtX3ZpZGVvVHJhY2stPkFkZE9yVXBkYXRlU2luayh0aGlzLCBydGM6OlZpZGVvU2lua1dhbnRz
KCkpOworfQorCit2b2lkIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6c2V0U291cmNlVHJh
Y2socnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9UcmFja0ludGVyZmFjZT4mJiB0cmFj
aykKK3sKKyAgICBBU1NFUlQoIW1fdmlkZW9UcmFjayk7CisgICAgQVNTRVJUKHRyYWNrKTsKKwor
ICAgIG1fdmlkZW9UcmFjayA9IFdURk1vdmUodHJhY2spOworICAgIG5vdGlmeU11dGVkQ2hhbmdl
KCFtX3ZpZGVvVHJhY2spOworICAgIGlmIChpc1Byb2R1Y2luZ0RhdGEoKSkKKyAgICAgICAgbV92
aWRlb1RyYWNrLT5BZGRPclVwZGF0ZVNpbmsodGhpcywgcnRjOjpWaWRlb1NpbmtXYW50cygpKTsK
K30KKwordm9pZCBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6OnN0b3BQcm9kdWNpbmdEYXRh
KCkKK3sKKyAgICBpZiAobV92aWRlb1RyYWNrKQorICAgICAgICBtX3ZpZGVvVHJhY2stPlJlbW92
ZVNpbmsodGhpcyk7Cit9CisKK2NvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMm
IFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6Y2FwYWJpbGl0aWVzKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllczo6ZW1wdHlDYXBhYmlsaXRp
ZXMoKTsKK30KKworY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzJiBSZWFsdGltZUlu
Y29taW5nVmlkZW9Tb3VyY2U6OnNldHRpbmdzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jdXJy
ZW50U2V0dGluZ3M7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVT
RShMSUJXRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjU1MDM4ZjYzZTk1NmRmYWY3OGFlNTdjNjIzNGUwZGE2ZjQ2YWY3YzgKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZUluY29taW5n
VmlkZW9Tb3VyY2UuaApAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICog
My4gTmVpdGhlciB0aGUgbmFtZSBvZiBFcmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250
cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20gdGhpcworICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVT
RShMSUJXRUJSVEMpCisKKyNpbmNsdWRlICJMaWJXZWJSVENNYWNyb3MuaCIKKyNpbmNsdWRlICJS
ZWFsdGltZU1lZGlhU291cmNlLmgiCisjaW5jbHVkZSA8d2VicnRjL2FwaS9tZWRpYXN0cmVhbWlu
dGVyZmFjZS5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBDYXB0dXJlRGV2aWNlOworCitjbGFzcyBSZWFsdGltZUluY29taW5nVmlk
ZW9Tb3VyY2UgOiBwdWJsaWMgUmVhbHRpbWVNZWRpYVNvdXJjZSwgcHJpdmF0ZSBydGM6OlZpZGVv
U2lua0ludGVyZmFjZTx3ZWJydGM6OlZpZGVvRnJhbWU+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UmVmPFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZT4gY3JlYXRlKHJ0Yzo6c2NvcGVkX3JlZnB0
cjx3ZWJydGM6OlZpZGVvVHJhY2tJbnRlcmZhY2U+JiYsIFN0cmluZyYmKTsKKyAgICB+UmVhbHRp
bWVJbmNvbWluZ1ZpZGVvU291cmNlKCkgeyBzdG9wUHJvZHVjaW5nRGF0YSgpOyB9CisKKyAgICB2
b2lkIHNldFNvdXJjZVRyYWNrKHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvVHJhY2tJ
bnRlcmZhY2U+JiYpOworCitwcm90ZWN0ZWQ6CisgICAgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRp
bmdzIG1fY3VycmVudFNldHRpbmdzOworCitwcml2YXRlOgorICAgIFJlYWx0aW1lSW5jb21pbmdW
aWRlb1NvdXJjZShydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb1RyYWNrSW50ZXJmYWNl
PiYmLCBTdHJpbmcmJik7CisKKyAgICAvLyBSZWFsdGltZU1lZGlhU291cmNlIEFQSQorICAgIHZv
aWQgc3RhcnRQcm9kdWNpbmdEYXRhKCkgZmluYWw7CisgICAgdm9pZCBzdG9wUHJvZHVjaW5nRGF0
YSgpICBmaW5hbDsKKworICAgIGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMm
IGNhcGFiaWxpdGllcygpIGNvbnN0IGZpbmFsOworICAgIGNvbnN0IFJlYWx0aW1lTWVkaWFTb3Vy
Y2VTZXR0aW5ncyYgc2V0dGluZ3MoKSBjb25zdCBmaW5hbDsKKworICAgIGJvb2wgYXBwbHlTaXpl
KGNvbnN0IEludFNpemUmKSBmaW5hbCB7IHJldHVybiB0cnVlOyB9CisKKyAgICAvLyBydGM6OlZp
ZGVvU2lua0ludGVyZmFjZQorICAgIHZvaWQgT25GcmFtZShjb25zdCB3ZWJydGM6OlZpZGVvRnJh
bWUmKSBvdmVycmlkZSB7IH07CisKKyAgICBydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRl
b1RyYWNrSW50ZXJmYWNlPiBtX3ZpZGVvVHJhY2s7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBVU0UoTElCV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lT3V0Z29pbmdWaWRl
b1NvdXJjZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzNjYjhhMDQ2YjE4NDhjNzJmMmNhMjc2MmZkZTMzY2Qy
OTljOTUzMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5jcHAKQEAgLTAsMCArMSwyMDYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkLCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIHJlcXVpcmVkIHRvIGJlIG1ldDoKKyAqCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmgiCisKKyNpZiBV
U0UoTElCV0VCUlRDKQorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgPHdlYnJ0Yy9h
cGkvdmlkZW8vaTQyMF9idWZmZXIuaD4KKyNpbmNsdWRlIDx3ZWJydGMvY29tbW9uX3ZpZGVvL2xp
Ynl1di9pbmNsdWRlL3dlYnJ0Y19saWJ5dXYuaD4KKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUu
aD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorCisjaWYgUExBVEZPUk0oQ09DT0EpCisj
aW5jbHVkZSAiUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTWFjLmgiCisjZW5kaWYKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitSZWY8UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlPiBSZWFs
dGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OmNyZWF0ZShSZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZh
dGU+JiYgdmlkZW9Tb3VyY2UpCit7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTWFjKFdURk1vdmUodmlkZW9T
b3VyY2UpKSk7CisjZWxzZQorICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFJlYWx0aW1lT3V0Z29p
bmdWaWRlb1NvdXJjZShXVEZNb3ZlKHZpZGVvU291cmNlKSkpOworI2VuZGlmCit9CisKK1JlYWx0
aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlKFJlZjxN
ZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4mJiB2aWRlb1NvdXJjZSkKKyAgICA6IG1fdmlkZW9Tb3Vy
Y2UoV1RGTW92ZSh2aWRlb1NvdXJjZSkpCisgICAgLCBtX2JsYWNrRnJhbWVUaW1lcigqdGhpcywg
JlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6c2VuZE9uZUJsYWNrRnJhbWUpCit7CisgICAg
bV92aWRlb1NvdXJjZS0+YWRkT2JzZXJ2ZXIoKnRoaXMpOworICAgIGluaXRpYWxpemVGcm9tU291
cmNlKCk7Cit9CisKK2Jvb2wgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpzZXRTb3VyY2Uo
UmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiYmIG5ld1NvdXJjZSkKK3sKKyAgICBpZiAoIW1f
aW5pdGlhbFNldHRpbmdzKQorICAgICAgICBtX2luaXRpYWxTZXR0aW5ncyA9IG1fdmlkZW9Tb3Vy
Y2UtPnNvdXJjZSgpLnNldHRpbmdzKCk7CisKKyAgICBtX3ZpZGVvU291cmNlLT5yZW1vdmVPYnNl
cnZlcigqdGhpcyk7CisgICAgbV92aWRlb1NvdXJjZSA9IFdURk1vdmUobmV3U291cmNlKTsKKyAg
ICBtX3ZpZGVvU291cmNlLT5hZGRPYnNlcnZlcigqdGhpcyk7CisKKyAgICBpbml0aWFsaXplRnJv
bVNvdXJjZSgpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUmVhbHRpbWVPdXRnb2lu
Z1ZpZGVvU291cmNlOjpzdG9wKCkKK3sKKyAgICBtX3ZpZGVvU291cmNlLT5yZW1vdmVPYnNlcnZl
cigqdGhpcyk7CisgICAgbV9ibGFja0ZyYW1lVGltZXIuc3RvcCgpOworICAgIG1faXNTdG9wcGVk
ID0gdHJ1ZTsKK30KKwordm9pZCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnVwZGF0ZUJs
YWNrRnJhbWVzU2VuZGluZygpCit7CisgICAgaWYgKCFtX211dGVkICYmIG1fZW5hYmxlZCkgewor
ICAgICAgICBpZiAobV9ibGFja0ZyYW1lVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgICAgIG1f
YmxhY2tGcmFtZVRpbWVyLnN0b3AoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNl
bmRCbGFja0ZyYW1lc0lmTmVlZGVkKCk7Cit9CisKK3ZvaWQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVv
U291cmNlOjpzb3VyY2VNdXRlZENoYW5nZWQoKQoreworICAgIEFTU0VSVChtX211dGVkICE9IG1f
dmlkZW9Tb3VyY2UtPm11dGVkKCkpOworCisgICAgbV9tdXRlZCA9IG1fdmlkZW9Tb3VyY2UtPm11
dGVkKCk7CisKKyAgICB1cGRhdGVCbGFja0ZyYW1lc1NlbmRpbmcoKTsKK30KKwordm9pZCBSZWFs
dGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnNvdXJjZUVuYWJsZWRDaGFuZ2VkKCkKK3sKKyAgICBB
U1NFUlQobV9lbmFibGVkICE9IG1fdmlkZW9Tb3VyY2UtPmVuYWJsZWQoKSk7CisKKyAgICBtX2Vu
YWJsZWQgPSBtX3ZpZGVvU291cmNlLT5lbmFibGVkKCk7CisKKyAgICB1cGRhdGVCbGFja0ZyYW1l
c1NlbmRpbmcoKTsKK30KKwordm9pZCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OmluaXRp
YWxpemVGcm9tU291cmNlKCkKK3sKKyAgICBjb25zdCBhdXRvJiBzZXR0aW5ncyA9IG1fdmlkZW9T
b3VyY2UtPnNvdXJjZSgpLnNldHRpbmdzKCk7CisgICAgbV93aWR0aCA9IHNldHRpbmdzLndpZHRo
KCk7CisgICAgbV9oZWlnaHQgPSBzZXR0aW5ncy5oZWlnaHQoKTsKKworICAgIG1fbXV0ZWQgPSBt
X3ZpZGVvU291cmNlLT5tdXRlZCgpOworICAgIG1fZW5hYmxlZCA9IG1fdmlkZW9Tb3VyY2UtPmVu
YWJsZWQoKTsKKworICAgIHVwZGF0ZUJsYWNrRnJhbWVzU2VuZGluZygpOworfQorCitib29sIFJl
YWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6R2V0U3RhdHMoU3RhdHMqKQoreworICAgIHJldHVy
biBmYWxzZTsKK30KKwordm9pZCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OkFkZE9yVXBk
YXRlU2luayhydGM6OlZpZGVvU2lua0ludGVyZmFjZTx3ZWJydGM6OlZpZGVvRnJhbWU+KiBzaW5r
LCBjb25zdCBydGM6OlZpZGVvU2lua1dhbnRzJiBzaW5rV2FudHMpCit7CisgICAgQVNTRVJUKCFz
aW5rV2FudHMuYmxhY2tfZnJhbWVzKTsKKworICAgIGlmIChzaW5rV2FudHMucm90YXRpb25fYXBw
bGllZCkKKyAgICAgICAgbV9zaG91bGRBcHBseVJvdGF0aW9uID0gdHJ1ZTsKKworICAgIGlmICgh
bV9zaW5rcy5jb250YWlucyhzaW5rKSkKKyAgICAgICAgbV9zaW5rcy5hcHBlbmQoc2luayk7CisK
KyAgICBjYWxsT25NYWluVGhyZWFkKFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldKCkg
eworICAgICAgICBwcm90ZWN0ZWRUaGlzLT5zZW5kQmxhY2tGcmFtZXNJZk5lZWRlZCgpOworICAg
IH0pOworfQorCit2b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6UmVtb3ZlU2luayhy
dGM6OlZpZGVvU2lua0ludGVyZmFjZTx3ZWJydGM6OlZpZGVvRnJhbWU+KiBzaW5rKQoreworICAg
IG1fc2lua3MucmVtb3ZlRmlyc3Qoc2luayk7CisKKyAgICBpZiAobV9zaW5rcy5zaXplKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIGNhbGxPbk1haW5UaHJlYWQoW3Byb3RlY3RlZFRoaXMgPSBt
YWtlUmVmKCp0aGlzKV0oKSB7CisgICAgICAgIGlmIChwcm90ZWN0ZWRUaGlzLT5tX2JsYWNrRnJh
bWVUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+bV9ibGFja0Zy
YW1lVGltZXIuc3RvcCgpOworICAgIH0pOworfQorCit2b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRl
b1NvdXJjZTo6c2VuZEJsYWNrRnJhbWVzSWZOZWVkZWQoKQoreworICAgIGlmIChtX2JsYWNrRnJh
bWVUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fc2lua3Mu
c2l6ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fbXV0ZWQgJiYgbV9lbmFibGVk
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fd2lkdGggfHwgIW1faGVpZ2h0KQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fYmxhY2tGcmFtZSkgeworICAgICAgICBhdXRvIHdp
ZHRoID0gbV93aWR0aDsKKyAgICAgICAgYXV0byBoZWlnaHQgPSBtX2hlaWdodDsKKyAgICAgICAg
aWYgKG1fc2hvdWxkQXBwbHlSb3RhdGlvbiAmJiAobV9jdXJyZW50Um90YXRpb24gPT0gd2VicnRj
OjprVmlkZW9Sb3RhdGlvbl8wIHx8IG1fY3VycmVudFJvdGF0aW9uID09IHdlYnJ0Yzo6a1ZpZGVv
Um90YXRpb25fOTApKQorICAgICAgICAgICAgc3RkOjpzd2FwKHdpZHRoLCBoZWlnaHQpOworICAg
ICAgICBhdXRvIGZyYW1lID0gbV9idWZmZXJQb29sLkNyZWF0ZUJ1ZmZlcih3aWR0aCwgaGVpZ2h0
KTsKKyAgICAgICAgQVNTRVJUKGZyYW1lKTsKKyAgICAgICAgaWYgKCFmcmFtZSkgeworICAgICAg
ICAgICAgUkVMRUFTRV9MT0coV2ViUlRDLCAiUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpz
ZW5kQmxhY2tGcmFtZXNJZk5lZWRlZCB1bmFibGUgdG8gc2VuZCBibGFjayBmcmFtZXMiKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB3ZWJydGM6Okk0MjBCdWZmZXI6
OlNldEJsYWNrKGZyYW1lLmdldCgpKTsKKyAgICAgICAgbV9ibGFja0ZyYW1lID0gV1RGTW92ZShm
cmFtZSk7CisgICAgfQorICAgIHNlbmRPbmVCbGFja0ZyYW1lKCk7CisgICAgbV9ibGFja0ZyYW1l
VGltZXIuc3RhcnRSZXBlYXRpbmcoMV9zKTsKK30KKwordm9pZCBSZWFsdGltZU91dGdvaW5nVmlk
ZW9Tb3VyY2U6OnNlbmRPbmVCbGFja0ZyYW1lKCkKK3sKKyAgICBSRUxFQVNFX0xPRyhNZWRpYVN0
cmVhbSwgIlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6c2VuZE9uZUJsYWNrRnJhbWUiKTsK
KyAgICBzZW5kRnJhbWUocnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9GcmFtZUJ1ZmZl
cj4obV9ibGFja0ZyYW1lKSk7Cit9CisKK3ZvaWQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNl
OjpzZW5kRnJhbWUocnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9GcmFtZUJ1ZmZlcj4m
JiBidWZmZXIpCit7CisgICAgaW50NjRfdCB0aW1lc3RhbXBNaWNyb1NlY29uZHMgPSBtb25vdG9u
aWNhbGx5SW5jcmVhc2luZ1RpbWVNUygpICogMTAwMDsKKyAgICB3ZWJydGM6OlZpZGVvRnJhbWUg
ZnJhbWUoYnVmZmVyLCBtX3Nob3VsZEFwcGx5Um90YXRpb24gPyB3ZWJydGM6OmtWaWRlb1JvdGF0
aW9uXzAgOiBtX2N1cnJlbnRSb3RhdGlvbiwgdGltZXN0YW1wTWljcm9TZWNvbmRzKTsKKyAgICBm
b3IgKGF1dG8qIHNpbmsgOiBtX3NpbmtzKQorICAgICAgICBzaW5rLT5PbkZyYW1lKGZyYW1lKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKExJQldFQlJUQykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1l
T3V0Z29pbmdWaWRlb1NvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzY1N2MwY2Y4YTBm
Y2QxNjViNmNlMGIzYWFjN2IxNjI4MzU2NjE0NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5o
CkBAIC0wLDAgKzEsMTE2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCwgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSByZXF1aXJlZCB0byBiZSBt
ZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFt
ZSBvZiBBcHBsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAg
ICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoTElCV0VCUlRDKQorCisjaW5jbHVkZSAiTGli
V2ViUlRDTWFjcm9zLmgiCisjaW5jbHVkZSAiTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUuaCIKKyNp
bmNsdWRlIDxUaW1lci5oPgorI2luY2x1ZGUgPHdlYnJ0Yy9hcGkvbWVkaWFzdHJlYW1pbnRlcmZh
Y2UuaD4KKyNpbmNsdWRlIDx3ZWJydGMvYmFzZS9vcHRpb25hbC5oPgorI2luY2x1ZGUgPHdlYnJ0
Yy9jb21tb25fdmlkZW8vaW5jbHVkZS9pNDIwX2J1ZmZlcl9wb29sLmg+CisjaW5jbHVkZSA8d2Vi
cnRjL21lZGlhL2Jhc2UvdmlkZW9zaW5raW50ZXJmYWNlLmg+CisjaW5jbHVkZSA8d3RmL09wdGlv
bmFsLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlIDogcHVibGlj
IFRocmVhZFNhZmVSZWZDb3VudGVkPFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZT4sIHB1Ymxp
YyB3ZWJydGM6OlZpZGVvVHJhY2tTb3VyY2VJbnRlcmZhY2UsIHByaXZhdGUgTWVkaWFTdHJlYW1U
cmFja1ByaXZhdGU6Ok9ic2VydmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFJlYWx0aW1l
T3V0Z29pbmdWaWRlb1NvdXJjZT4gY3JlYXRlKFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4m
JiB2aWRlb1NvdXJjZSk7CisgICAgflJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZSgpIHsgc3Rv
cCgpOyB9CisKKyAgICB2b2lkIHN0b3AoKTsKKyAgICBib29sIHNldFNvdXJjZShSZWY8TWVkaWFT
dHJlYW1UcmFja1ByaXZhdGU+JiYpOworICAgIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJiBzb3Vy
Y2UoKSBjb25zdCB7IHJldHVybiBtX3ZpZGVvU291cmNlLmdldCgpOyB9CisKKyAgICBpbnQgQWRk
UmVmKCkgY29uc3QgZmluYWwgeyByZWYoKTsgcmV0dXJuIHJlZkNvdW50KCk7IH0KKyAgICBpbnQg
UmVsZWFzZSgpIGNvbnN0IGZpbmFsIHsgZGVyZWYoKTsgcmV0dXJuIHJlZkNvdW50KCk7IH0KKwor
ICAgIHZvaWQgc2V0QXBwbHlSb3RhdGlvbihib29sIHNob3VsZEFwcGx5Um90YXRpb24pIHsgbV9z
aG91bGRBcHBseVJvdGF0aW9uID0gc2hvdWxkQXBwbHlSb3RhdGlvbjsgfQorCitwcm90ZWN0ZWQ6
CisgICAgVmVjdG9yPHJ0Yzo6VmlkZW9TaW5rSW50ZXJmYWNlPHdlYnJ0Yzo6VmlkZW9GcmFtZT4q
PiBtX3NpbmtzOworICAgIHdlYnJ0Yzo6STQyMEJ1ZmZlclBvb2wgbV9idWZmZXJQb29sOworCisg
ICAgYm9vbCBtX2VuYWJsZWQgeyB0cnVlIH07CisgICAgYm9vbCBtX211dGVkIHsgZmFsc2UgfTsK
KyAgICB1aW50MzJfdCBtX3dpZHRoIHsgMCB9OworICAgIHVpbnQzMl90IG1faGVpZ2h0IHsgMCB9
OworICAgIGJvb2wgbV9zaG91bGRBcHBseVJvdGF0aW9uIHsgZmFsc2UgfTsKKworcHJpdmF0ZToK
KyAgICBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UoUmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2
YXRlPiYmKTsKKworICAgIHZvaWQgc2VuZEZyYW1lKHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6
OlZpZGVvRnJhbWVCdWZmZXI+JiYpOworICAgIHZvaWQgc2VuZEJsYWNrRnJhbWVzSWZOZWVkZWQo
KTsKKyAgICB2b2lkIHNlbmRPbmVCbGFja0ZyYW1lKCk7CisgICAgdm9pZCBpbml0aWFsaXplRnJv
bVNvdXJjZSgpOworICAgIHZvaWQgdXBkYXRlQmxhY2tGcmFtZXNTZW5kaW5nKCk7CisKKyAgICAv
LyBOb3RpZmllciBBUEkKKyAgICB2b2lkIFJlZ2lzdGVyT2JzZXJ2ZXIod2VicnRjOjpPYnNlcnZl
ckludGVyZmFjZSopIGZpbmFsIHsgfQorICAgIHZvaWQgVW5yZWdpc3Rlck9ic2VydmVyKHdlYnJ0
Yzo6T2JzZXJ2ZXJJbnRlcmZhY2UqKSBmaW5hbCB7IH0KKworICAgIC8vIFZpZGVvVHJhY2tTb3Vy
Y2VJbnRlcmZhY2UgQVBJCisgICAgYm9vbCBpc19zY3JlZW5jYXN0KCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICBydGM6Ok9wdGlvbmFsPGJvb2w+IG5lZWRzX2Rlbm9pc2luZygp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIHJ0Yzo6T3B0aW9uYWw8Ym9vbD4oKTsgfQorICAgIGJvb2wg
R2V0U3RhdHMoU3RhdHMqKSBmaW5hbDsKKworICAgIC8vIE1lZGlhU291cmNlSW50ZXJmYWNlIEFQ
SQorICAgIFNvdXJjZVN0YXRlIHN0YXRlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gU291cmNlU3Rh
dGUoKTsgfQorICAgIGJvb2wgcmVtb3RlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQor
CisgICAgLy8gcnRjOjpWaWRlb1NvdXJjZUludGVyZmFjZTx3ZWJydGM6OlZpZGVvRnJhbWU+IEFQ
SQorICAgIHZvaWQgQWRkT3JVcGRhdGVTaW5rKHJ0Yzo6VmlkZW9TaW5rSW50ZXJmYWNlPHdlYnJ0
Yzo6VmlkZW9GcmFtZT4qLCBjb25zdCBydGM6OlZpZGVvU2lua1dhbnRzJikgZmluYWw7CisgICAg
dm9pZCBSZW1vdmVTaW5rKHJ0Yzo6VmlkZW9TaW5rSW50ZXJmYWNlPHdlYnJ0Yzo6VmlkZW9GcmFt
ZT4qKSBmaW5hbDsKKworICAgIHZvaWQgc291cmNlTXV0ZWRDaGFuZ2VkKCk7CisgICAgdm9pZCBz
b3VyY2VFbmFibGVkQ2hhbmdlZCgpOworICAgIHZpcnR1YWwgdm9pZCB2aWRlb1NhbXBsZUF2YWls
YWJsZShNZWRpYVNhbXBsZSYpIHsgfTsKKworICAgIC8vIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRl
OjpPYnNlcnZlciBBUEkKKyAgICB2b2lkIHRyYWNrTXV0ZWRDaGFuZ2VkKE1lZGlhU3RyZWFtVHJh
Y2tQcml2YXRlJikgZmluYWwgeyBzb3VyY2VNdXRlZENoYW5nZWQoKTsgfQorICAgIHZvaWQgdHJh
Y2tFbmFibGVkQ2hhbmdlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYpIGZpbmFsIHsgc291cmNl
RW5hYmxlZENoYW5nZWQoKTsgfQorICAgIHZvaWQgdHJhY2tTZXR0aW5nc0NoYW5nZWQoTWVkaWFT
dHJlYW1UcmFja1ByaXZhdGUmKSBmaW5hbCB7IGluaXRpYWxpemVGcm9tU291cmNlKCk7IH0KKyAg
ICB2b2lkIHNhbXBsZUJ1ZmZlclVwZGF0ZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmLCBNZWRp
YVNhbXBsZSYgc2FtcGxlKSBmaW5hbCB7IHZpZGVvU2FtcGxlQXZhaWxhYmxlKHNhbXBsZSk7IH0K
KyAgICB2b2lkIHRyYWNrRW5kZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmKSBmaW5hbCB7IH0K
KworICAgIFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4gbV92aWRlb1NvdXJjZTsKKyAgICBz
dGQ6Om9wdGlvbmFsPFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncz4gbV9pbml0aWFsU2V0dGlu
Z3M7CisgICAgd2VicnRjOjpWaWRlb1JvdGF0aW9uIG1fY3VycmVudFJvdGF0aW9uIHsgd2VicnRj
OjprVmlkZW9Sb3RhdGlvbl8wIH07CisgICAgYm9vbCBtX2lzU3RvcHBlZCB7IGZhbHNlIH07Cisg
ICAgVGltZXIgbV9ibGFja0ZyYW1lVGltZXI7CisgICAgcnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0
Yzo6VmlkZW9GcmFtZUJ1ZmZlcj4gbV9ibGFja0ZyYW1lOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKExJQldFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUluY29taW5nVmlkZW9Tb3Vy
Y2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1l
SW5jb21pbmdWaWRlb1NvdXJjZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMy
NjE4ZDY5NTI3NjNmZTdkN2M0YjZiOGNlNGY5Y2RjMTgyN2EzNzEuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vbWFjL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwyMDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKLSAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3Jz
Ci0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tIHRoaXMKLSAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5oIgotCi0jaWYgVVNFKExJQldFQlJUQykKLQot
I2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJNZWRpYVNhbXBsZUFWRk9iakMuaCIKLSNp
bmNsdWRlIDx3ZWJydGMvc2RrL29iamMvRnJhbWV3b3JrL0NsYXNzZXMvVmlkZW8vY29yZXZpZGVv
X2ZyYW1lX2J1ZmZlci5oPgotCi0jaW5jbHVkZSAiQ29yZU1lZGlhU29mdExpbmsuaCIKLSNpbmNs
dWRlICJDb3JlVmlkZW9Tb2Z0TGluay5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVJlZjxS
ZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U+IFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6
Y3JlYXRlKHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvVHJhY2tJbnRlcmZhY2U+JiYg
dmlkZW9UcmFjaywgU3RyaW5nJiYgdHJhY2tJZCkKLXsKLSAgICBhdXRvIHNvdXJjZSA9IGFkb3B0
UmVmKCpuZXcgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlKFdURk1vdmUodmlkZW9UcmFjayks
IFdURk1vdmUodHJhY2tJZCkpKTsKLSAgICBzb3VyY2UtPnN0YXJ0KCk7Ci0gICAgcmV0dXJuIHNv
dXJjZTsKLX0KLQotUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlOjpSZWFsdGltZUluY29taW5n
VmlkZW9Tb3VyY2UocnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9UcmFja0ludGVyZmFj
ZT4mJiB2aWRlb1RyYWNrLCBTdHJpbmcmJiB2aWRlb1RyYWNrSWQpCi0gICAgOiBSZWFsdGltZU1l
ZGlhU291cmNlKFdURk1vdmUodmlkZW9UcmFja0lkKSwgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlw
ZTo6VmlkZW8sIFN0cmluZygpKQotICAgICwgbV92aWRlb1RyYWNrKFdURk1vdmUodmlkZW9UcmFj
aykpCi17Ci0gICAgbV9jdXJyZW50U2V0dGluZ3Muc2V0V2lkdGgoNjQwKTsKLSAgICBtX2N1cnJl
bnRTZXR0aW5ncy5zZXRIZWlnaHQoNDgwKTsKLSAgICBub3RpZnlNdXRlZENoYW5nZSghbV92aWRl
b1RyYWNrKTsKLX0KLQotdm9pZCBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6OnN0YXJ0UHJv
ZHVjaW5nRGF0YSgpCi17Ci0gICAgaWYgKG1fdmlkZW9UcmFjaykKLSAgICAgICAgbV92aWRlb1Ry
YWNrLT5BZGRPclVwZGF0ZVNpbmsodGhpcywgcnRjOjpWaWRlb1NpbmtXYW50cygpKTsKLX0KLQot
dm9pZCBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6OnNldFNvdXJjZVRyYWNrKHJ0Yzo6c2Nv
cGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvVHJhY2tJbnRlcmZhY2U+JiYgdHJhY2spCi17Ci0gICAg
QVNTRVJUKCFtX3ZpZGVvVHJhY2spOwotICAgIEFTU0VSVCh0cmFjayk7Ci0KLSAgICBtX3ZpZGVv
VHJhY2sgPSBXVEZNb3ZlKHRyYWNrKTsKLSAgICBub3RpZnlNdXRlZENoYW5nZSghbV92aWRlb1Ry
YWNrKTsKLSAgICBpZiAoaXNQcm9kdWNpbmdEYXRhKCkpCi0gICAgICAgIG1fdmlkZW9UcmFjay0+
QWRkT3JVcGRhdGVTaW5rKHRoaXMsIHJ0Yzo6VmlkZW9TaW5rV2FudHMoKSk7Ci19Ci0KLXZvaWQg
UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlOjpzdG9wUHJvZHVjaW5nRGF0YSgpCi17Ci0gICAg
aWYgKG1fdmlkZW9UcmFjaykKLSAgICAgICAgbV92aWRlb1RyYWNrLT5SZW1vdmVTaW5rKHRoaXMp
OwotfQotCi1DVlBpeGVsQnVmZmVyUmVmIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6cGl4
ZWxCdWZmZXJGcm9tVmlkZW9GcmFtZShjb25zdCB3ZWJydGM6OlZpZGVvRnJhbWUmIGZyYW1lKQot
ewotICAgIGlmIChtdXRlZCgpKSB7Ci0gICAgICAgIGlmICghbV9ibGFja0ZyYW1lIHx8IG1fYmxh
Y2tGcmFtZVdpZHRoICE9IGZyYW1lLndpZHRoKCkgfHwgbV9ibGFja0ZyYW1lSGVpZ2h0ICE9IGZy
YW1lLmhlaWdodCgpKSB7Ci0gICAgICAgICAgICBDVlBpeGVsQnVmZmVyUmVmIHBpeGVsQnVmZmVy
ID0gbnVsbHB0cjsKLSAgICAgICAgICAgIGF1dG8gc3RhdHVzID0gQ1ZQaXhlbEJ1ZmZlckNyZWF0
ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBmcmFtZS53aWR0aCgpLCBmcmFtZS5oZWlnaHQoKSwga0NW
UGl4ZWxGb3JtYXRUeXBlXzQyMFlwQ2JDcjhQbGFuYXIsIG51bGxwdHIsICZwaXhlbEJ1ZmZlcik7
Ci0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHN0YXR1cywgc3RhdHVzID09IG5vRXJyKTsKLQot
ICAgICAgICAgICAgbV9ibGFja0ZyYW1lID0gcGl4ZWxCdWZmZXI7Ci0gICAgICAgICAgICBtX2Js
YWNrRnJhbWVXaWR0aCA9IGZyYW1lLndpZHRoKCk7Ci0gICAgICAgICAgICBtX2JsYWNrRnJhbWVI
ZWlnaHQgPSBmcmFtZS5oZWlnaHQoKTsKLQotICAgICAgICAgICAgc3RhdHVzID0gQ1ZQaXhlbEJ1
ZmZlckxvY2tCYXNlQWRkcmVzcyhwaXhlbEJ1ZmZlciwgMCk7Ci0gICAgICAgICAgICBBU1NFUlQo
c3RhdHVzID09IG5vRXJyKTsKLSAgICAgICAgICAgIHZvaWQqIGRhdGEgPSBDVlBpeGVsQnVmZmVy
R2V0QmFzZUFkZHJlc3MocGl4ZWxCdWZmZXIpOwotICAgICAgICAgICAgc2l6ZV90IHlMZW5ndGgg
PSBmcmFtZS53aWR0aCgpICogZnJhbWUuaGVpZ2h0KCk7Ci0gICAgICAgICAgICBtZW1zZXQoZGF0
YSwgMCwgeUxlbmd0aCk7Ci0gICAgICAgICAgICBtZW1zZXQoc3RhdGljX2Nhc3Q8dWludDhfdCo+
KGRhdGEpICsgeUxlbmd0aCwgMTI4LCB5TGVuZ3RoIC8gMik7Ci0KLSAgICAgICAgICAgIHN0YXR1
cyA9IENWUGl4ZWxCdWZmZXJVbmxvY2tCYXNlQWRkcmVzcyhwaXhlbEJ1ZmZlciwgMCk7Ci0gICAg
ICAgICAgICBBU1NFUlQoIXN0YXR1cyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1fYmxh
Y2tGcmFtZS5nZXQoKTsKLSAgICB9Ci0gICAgYXV0byBidWZmZXIgPSBmcmFtZS52aWRlb19mcmFt
ZV9idWZmZXIoKTsKLSAgICBBU1NFUlQoYnVmZmVyLT50eXBlKCkgPT0gd2VicnRjOjpWaWRlb0Zy
YW1lQnVmZmVyOjpUeXBlOjprTmF0aXZlKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8d2VicnRj
OjpDb3JlVmlkZW9GcmFtZUJ1ZmZlciY+KCpidWZmZXIpLnBpeGVsX2J1ZmZlcigpOwotfQotCi12
b2lkIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6T25GcmFtZShjb25zdCB3ZWJydGM6OlZp
ZGVvRnJhbWUmIGZyYW1lKQotewotICAgIGlmICghaXNQcm9kdWNpbmdEYXRhKCkpCi0gICAgICAg
IHJldHVybjsKLQotI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAotICAgIGlmICghKCsrbV9udW1i
ZXJPZkZyYW1lcyAlIDMwKSkKLSAgICAgICAgUkVMRUFTRV9MT0coTWVkaWFTdHJlYW0sICJSZWFs
dGltZUluY29taW5nVmlkZW9Tb3VyY2U6Ok9uRnJhbWUgJXp1IGZyYW1lIiwgbV9udW1iZXJPZkZy
YW1lcyk7Ci0jZW5kaWYKLQotICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBwaXhlbEJ1ZmZlckZyb21W
aWRlb0ZyYW1lKGZyYW1lKTsKLQotICAgIC8vIEZJWE1FOiBDb252ZXJ0IHRpbWluZyBpbmZvcm1h
dGlvbiBmcm9tIFZpZGVvRnJhbWUgdG8gQ01TYW1wbGVUaW1pbmdJbmZvLgotICAgIC8vIEZvciB0
aGUgbW9tZW50LCB3ZSB3aWxsIHByZXRlbmQgdGhhdCBmcmFtZXMgc2hvdWxkIGJlIHJlbmRlcmVk
IGFzYXAuCi0gICAgQ01TYW1wbGVUaW1pbmdJbmZvIHRpbWluZ0luZm87Ci0gICAgdGltaW5nSW5m
by5wcmVzZW50YXRpb25UaW1lU3RhbXAgPSBrQ01UaW1lSW52YWxpZDsKLSAgICB0aW1pbmdJbmZv
LmRlY29kZVRpbWVTdGFtcCA9IGtDTVRpbWVJbnZhbGlkOwotICAgIHRpbWluZ0luZm8uZHVyYXRp
b24gPSBrQ01UaW1lSW52YWxpZDsKLQotICAgIENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvblJlZiBm
b3JtYXREZXNjcmlwdGlvbjsKLSAgICBPU1N0YXR1cyBvc3RhdHVzID0gQ01WaWRlb0Zvcm1hdERl
c2NyaXB0aW9uQ3JlYXRlRm9ySW1hZ2VCdWZmZXIoa0NGQWxsb2NhdG9yRGVmYXVsdCwgKENWSW1h
Z2VCdWZmZXJSZWYpcGl4ZWxCdWZmZXIsICZmb3JtYXREZXNjcmlwdGlvbik7Ci0gICAgaWYgKG9z
dGF0dXMgIT0gbm9FcnIpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gaW5pdGlhbGl6
ZSBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb246ICVkIiwgc3RhdGljX2Nhc3Q8aW50Pihvc3RhdHVz
KSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBDTVNhbXBsZUJ1ZmZlclJlZiBzYW1w
bGVCdWZmZXI7Ci0gICAgb3N0YXR1cyA9IENNU2FtcGxlQnVmZmVyQ3JlYXRlUmVhZHlXaXRoSW1h
Z2VCdWZmZXIoa0NGQWxsb2NhdG9yRGVmYXVsdCwgKENWSW1hZ2VCdWZmZXJSZWYpcGl4ZWxCdWZm
ZXIsIGZvcm1hdERlc2NyaXB0aW9uLCAmdGltaW5nSW5mbywgJnNhbXBsZUJ1ZmZlcik7Ci0gICAg
aWYgKG9zdGF0dXMgIT0gbm9FcnIpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3Jl
YXRlIHRoZSBzYW1wbGUgYnVmZmVyOiAlZCIsIHN0YXRpY19jYXN0PGludD4ob3N0YXR1cykpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIENGUmVsZWFzZShmb3JtYXREZXNjcmlwdGlvbik7
Ci0KLSAgICBhdXRvIHNhbXBsZSA9IGFkb3B0Q0Yoc2FtcGxlQnVmZmVyKTsKLQotICAgIENGQXJy
YXlSZWYgYXR0YWNobWVudHNBcnJheSA9IENNU2FtcGxlQnVmZmVyR2V0U2FtcGxlQXR0YWNobWVu
dHNBcnJheShzYW1wbGVCdWZmZXIsIHRydWUpOwotICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8
IENGQXJyYXlHZXRDb3VudChhdHRhY2htZW50c0FycmF5KTsgKytpKSB7Ci0gICAgICAgIENGTXV0
YWJsZURpY3Rpb25hcnlSZWYgYXR0YWNobWVudHMgPSAoQ0ZNdXRhYmxlRGljdGlvbmFyeVJlZilD
RkFycmF5R2V0VmFsdWVBdEluZGV4KGF0dGFjaG1lbnRzQXJyYXksIGkpOwotICAgICAgICBDRkRp
Y3Rpb25hcnlTZXRWYWx1ZShhdHRhY2htZW50cywga0NNU2FtcGxlQXR0YWNobWVudEtleV9EaXNw
bGF5SW1tZWRpYXRlbHksIGtDRkJvb2xlYW5UcnVlKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCB3
aWR0aCA9IGZyYW1lLndpZHRoKCk7Ci0gICAgdW5zaWduZWQgaGVpZ2h0ID0gZnJhbWUuaGVpZ2h0
KCk7Ci0KLSAgICBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbiByb3RhdGlvbjsKLSAgICBzd2l0
Y2ggKGZyYW1lLnJvdGF0aW9uKCkpIHsKLSAgICBjYXNlIHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25f
MDoKLSAgICAgICAgcm90YXRpb24gPSBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6Tm9uZTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzE4MDoKLSAg
ICAgICAgcm90YXRpb24gPSBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6VXBzaWRlRG93bjsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzkwOgotICAg
ICAgICByb3RhdGlvbiA9IE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpSaWdodDsKLSAgICAg
ICAgc3RkOjpzd2FwKHdpZHRoLCBoZWlnaHQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIHdl
YnJ0Yzo6a1ZpZGVvUm90YXRpb25fMjcwOgotICAgICAgICByb3RhdGlvbiA9IE1lZGlhU2FtcGxl
OjpWaWRlb1JvdGF0aW9uOjpMZWZ0OwotICAgICAgICBzdGQ6OnN3YXAod2lkdGgsIGhlaWdodCk7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIFJlZlB0cjxSZWFsdGltZUluY29taW5nVmlk
ZW9Tb3VyY2U+IHByb3RlY3RlZFRoaXModGhpcyk7Ci0gICAgY2FsbE9uTWFpblRocmVhZChbcHJv
dGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyksIHNhbXBsZSA9IFdURk1vdmUoc2Ft
cGxlKSwgd2lkdGgsIGhlaWdodCwgcm90YXRpb25dIHsKLSAgICAgICAgcHJvdGVjdGVkVGhpcy0+
cHJvY2Vzc05ld1NhbXBsZShzYW1wbGUuZ2V0KCksIHdpZHRoLCBoZWlnaHQsIHJvdGF0aW9uKTsK
LSAgICB9KTsKLX0KLQotdm9pZCBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6OnByb2Nlc3NO
ZXdTYW1wbGUoQ01TYW1wbGVCdWZmZXJSZWYgc2FtcGxlLCB1bnNpZ25lZCB3aWR0aCwgdW5zaWdu
ZWQgaGVpZ2h0LCBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbiByb3RhdGlvbikKLXsKLSAgICBt
X2J1ZmZlciA9IHNhbXBsZTsKLSAgICBpZiAod2lkdGggIT0gbV9jdXJyZW50U2V0dGluZ3Mud2lk
dGgoKSB8fCBoZWlnaHQgIT0gbV9jdXJyZW50U2V0dGluZ3MuaGVpZ2h0KCkpIHsKLSAgICAgICAg
bV9jdXJyZW50U2V0dGluZ3Muc2V0V2lkdGgod2lkdGgpOwotICAgICAgICBtX2N1cnJlbnRTZXR0
aW5ncy5zZXRIZWlnaHQoaGVpZ2h0KTsKLSAgICAgICAgc2V0dGluZ3NEaWRDaGFuZ2UoKTsKLSAg
ICB9Ci0KLSAgICB2aWRlb1NhbXBsZUF2YWlsYWJsZShNZWRpYVNhbXBsZUFWRk9iakM6OmNyZWF0
ZShzYW1wbGUsIHJvdGF0aW9uKSk7Ci19Ci0KLWNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBh
YmlsaXRpZXMmIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6Y2FwYWJpbGl0aWVzKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllczo6ZW1wdHlD
YXBhYmlsaXRpZXMoKTsKLX0KLQotY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzJiBS
ZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6OnNldHRpbmdzKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbV9jdXJyZW50U2V0dGluZ3M7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmIC8vIFVTRShMSUJXRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291
cmNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlYjdjMzY0ZmUzMjMyMjIyZWFi
NGYyNWI3YjQxMDBjYzkxMDI4MDkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0
aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5oCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqICAgIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
LSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24g
bm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSAqICAgIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0g
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI3ByYWdtYSBvbmNlCi0KLSNpZiBVU0UoTElCV0VCUlRDKQotCi0jaW5jbHVkZSAiTGliV2Vi
UlRDTWFjcm9zLmgiCi0jaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZS5oIgotI2luY2x1ZGUg
PHdlYnJ0Yy9hcGkvbWVkaWFzdHJlYW1pbnRlcmZhY2UuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWlu
UHRyLmg+Ci0KLXVzaW5nIENNU2FtcGxlQnVmZmVyUmVmID0gc3RydWN0IG9wYXF1ZUNNU2FtcGxl
QnVmZmVyKjsKLXVzaW5nIENWUGl4ZWxCdWZmZXJSZWYgPSBzdHJ1Y3QgX19DVkJ1ZmZlcio7Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQ2FwdHVyZURldmljZTsKLQotY2xhc3MgUmVh
bHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlIGZpbmFsIDogcHVibGljIFJlYWx0aW1lTWVkaWFTb3Vy
Y2UsIHByaXZhdGUgcnRjOjpWaWRlb1NpbmtJbnRlcmZhY2U8d2VicnRjOjpWaWRlb0ZyYW1lPiB7
Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U+IGNy
ZWF0ZShydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb1RyYWNrSW50ZXJmYWNlPiYmLCBT
dHJpbmcmJik7Ci0gICAgflJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZSgpIHsgc3RvcFByb2R1
Y2luZ0RhdGEoKTsgfQotCi0gICAgdm9pZCBzZXRTb3VyY2VUcmFjayhydGM6OnNjb3BlZF9yZWZw
dHI8d2VicnRjOjpWaWRlb1RyYWNrSW50ZXJmYWNlPiYmKTsKLQotcHJpdmF0ZToKLSAgICBSZWFs
dGltZUluY29taW5nVmlkZW9Tb3VyY2UocnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9U
cmFja0ludGVyZmFjZT4mJiwgU3RyaW5nJiYpOwotCi0gICAgLy8gUmVhbHRpbWVNZWRpYVNvdXJj
ZSBBUEkKLSAgICB2b2lkIHN0YXJ0UHJvZHVjaW5nRGF0YSgpIGZpbmFsOwotICAgIHZvaWQgc3Rv
cFByb2R1Y2luZ0RhdGEoKSAgZmluYWw7Ci0KLSAgICBjb25zdCBSZWFsdGltZU1lZGlhU291cmNl
Q2FwYWJpbGl0aWVzJiBjYXBhYmlsaXRpZXMoKSBjb25zdCBmaW5hbDsKLSAgICBjb25zdCBSZWFs
dGltZU1lZGlhU291cmNlU2V0dGluZ3MmIHNldHRpbmdzKCkgY29uc3QgZmluYWw7Ci0KLSAgICB2
b2lkIHByb2Nlc3NOZXdTYW1wbGUoQ01TYW1wbGVCdWZmZXJSZWYsIHVuc2lnbmVkLCB1bnNpZ25l
ZCwgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb24pOwotCi0gICAgYm9vbCBhcHBseVNpemUoY29u
c3QgSW50U2l6ZSYpIGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KLQotICAgIC8vIHJ0Yzo6VmlkZW9T
aW5rSW50ZXJmYWNlCi0gICAgdm9pZCBPbkZyYW1lKGNvbnN0IHdlYnJ0Yzo6VmlkZW9GcmFtZSYp
IGZpbmFsOwotCi0gICAgQ1ZQaXhlbEJ1ZmZlclJlZiBwaXhlbEJ1ZmZlckZyb21WaWRlb0ZyYW1l
KGNvbnN0IHdlYnJ0Yzo6VmlkZW9GcmFtZSYpOwotCi0gICAgUmVhbHRpbWVNZWRpYVNvdXJjZVNl
dHRpbmdzIG1fY3VycmVudFNldHRpbmdzOwotICAgIHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6
OlZpZGVvVHJhY2tJbnRlcmZhY2U+IG1fdmlkZW9UcmFjazsKLSAgICBSZXRhaW5QdHI8Q01TYW1w
bGVCdWZmZXJSZWY+IG1fYnVmZmVyOwotICAgIFJldGFpblB0cjxDVlBpeGVsQnVmZmVyUmVmPiBt
X2JsYWNrRnJhbWU7Ci0gICAgaW50IG1fYmxhY2tGcmFtZVdpZHRoIHsgMCB9OwotICAgIGludCBt
X2JsYWNrRnJhbWVIZWlnaHQgeyAwIH07Ci0jaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECi0gICAg
c2l6ZV90IG1fbnVtYmVyT2ZGcmFtZXMgeyAwIH07Ci0jZW5kaWYKLX07Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShMSUJXRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVJbmNvbWluZ1ZpZGVv
U291cmNlTWFjLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9S
ZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM2NjI1YTdjODBl
OTkwOTFhZWJjNDZlMWJhNDEyZGE2MzVmYjZiOTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291
cmNlTWFjLmNwcApAQCAtMCwwICsxLDE2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDMu
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29u
dHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1hYy5oIgorCisjaWYgVVNFKExJ
QldFQlJUQykKKworI2luY2x1ZGUgIk1lZGlhU2FtcGxlQVZGT2JqQy5oIgorI2luY2x1ZGUgPHdl
YnJ0Yy9zZGsvb2JqYy9GcmFtZXdvcmsvQ2xhc3Nlcy9WaWRlby9jb3JldmlkZW9fZnJhbWVfYnVm
ZmVyLmg+CisKKyNpbmNsdWRlICJDb3JlTWVkaWFTb2Z0TGluay5oIgorI2luY2x1ZGUgIkNvcmVW
aWRlb1NvZnRMaW5rLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVmPFJlYWx0aW1lSW5j
b21pbmdWaWRlb1NvdXJjZU1hYz4gUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTWFjOjpjcmVh
dGUocnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9UcmFja0ludGVyZmFjZT4mJiB2aWRl
b1RyYWNrLCBTdHJpbmcmJiB0cmFja0lkKQoreworICAgIGF1dG8gc291cmNlID0gYWRvcHRSZWYo
Km5ldyBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWMoV1RGTW92ZSh2aWRlb1RyYWNrKSwg
V1RGTW92ZSh0cmFja0lkKSkpOworICAgIHJldHVybiBzb3VyY2U7Cit9CisKK1JlYWx0aW1lSW5j
b21pbmdWaWRlb1NvdXJjZU1hYzo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTWFjKHJ0Yzo6
c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvVHJhY2tJbnRlcmZhY2U+JiYgdmlkZW9UcmFjaywg
U3RyaW5nJiYgdmlkZW9UcmFja0lkKQorICAgIDogUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNl
KFdURk1vdmUodmlkZW9UcmFjayksIFdURk1vdmUodmlkZW9UcmFja0lkKSkKK3sKK30KKworQ1ZQ
aXhlbEJ1ZmZlclJlZiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWM6OnBpeGVsQnVmZmVy
RnJvbVZpZGVvRnJhbWUoY29uc3Qgd2VicnRjOjpWaWRlb0ZyYW1lJiBmcmFtZSkKK3sKKyAgICBp
ZiAobXV0ZWQoKSkgeworICAgICAgICBpZiAoIW1fYmxhY2tGcmFtZSB8fCBtX2JsYWNrRnJhbWVX
aWR0aCAhPSBmcmFtZS53aWR0aCgpIHx8IG1fYmxhY2tGcmFtZUhlaWdodCAhPSBmcmFtZS5oZWln
aHQoKSkgeworICAgICAgICAgICAgQ1ZQaXhlbEJ1ZmZlclJlZiBwaXhlbEJ1ZmZlciA9IG51bGxw
dHI7CisgICAgICAgICAgICBhdXRvIHN0YXR1cyA9IENWUGl4ZWxCdWZmZXJDcmVhdGUoa0NGQWxs
b2NhdG9yRGVmYXVsdCwgZnJhbWUud2lkdGgoKSwgZnJhbWUuaGVpZ2h0KCksIGtDVlBpeGVsRm9y
bWF0VHlwZV80MjBZcENiQ3I4UGxhbmFyLCBudWxscHRyLCAmcGl4ZWxCdWZmZXIpOworICAgICAg
ICAgICAgQVNTRVJUX1VOVVNFRChzdGF0dXMsIHN0YXR1cyA9PSBub0Vycik7CisKKyAgICAgICAg
ICAgIG1fYmxhY2tGcmFtZSA9IHBpeGVsQnVmZmVyOworICAgICAgICAgICAgbV9ibGFja0ZyYW1l
V2lkdGggPSBmcmFtZS53aWR0aCgpOworICAgICAgICAgICAgbV9ibGFja0ZyYW1lSGVpZ2h0ID0g
ZnJhbWUuaGVpZ2h0KCk7CisKKyAgICAgICAgICAgIHN0YXR1cyA9IENWUGl4ZWxCdWZmZXJMb2Nr
QmFzZUFkZHJlc3MocGl4ZWxCdWZmZXIsIDApOworICAgICAgICAgICAgQVNTRVJUKHN0YXR1cyA9
PSBub0Vycik7CisgICAgICAgICAgICB2b2lkKiBkYXRhID0gQ1ZQaXhlbEJ1ZmZlckdldEJhc2VB
ZGRyZXNzKHBpeGVsQnVmZmVyKTsKKyAgICAgICAgICAgIHNpemVfdCB5TGVuZ3RoID0gZnJhbWUu
d2lkdGgoKSAqIGZyYW1lLmhlaWdodCgpOworICAgICAgICAgICAgbWVtc2V0KGRhdGEsIDAsIHlM
ZW5ndGgpOworICAgICAgICAgICAgbWVtc2V0KHN0YXRpY19jYXN0PHVpbnQ4X3QqPihkYXRhKSAr
IHlMZW5ndGgsIDEyOCwgeUxlbmd0aCAvIDIpOworCisgICAgICAgICAgICBzdGF0dXMgPSBDVlBp
eGVsQnVmZmVyVW5sb2NrQmFzZUFkZHJlc3MocGl4ZWxCdWZmZXIsIDApOworICAgICAgICAgICAg
QVNTRVJUKCFzdGF0dXMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtX2JsYWNrRnJhbWUu
Z2V0KCk7CisgICAgfQorICAgIGF1dG8gYnVmZmVyID0gZnJhbWUudmlkZW9fZnJhbWVfYnVmZmVy
KCk7CisgICAgQVNTRVJUKGJ1ZmZlci0+dHlwZSgpID09IHdlYnJ0Yzo6VmlkZW9GcmFtZUJ1ZmZl
cjo6VHlwZTo6a05hdGl2ZSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHdlYnJ0Yzo6Q29yZVZp
ZGVvRnJhbWVCdWZmZXImPigqYnVmZmVyKS5waXhlbF9idWZmZXIoKTsKK30KKwordm9pZCBSZWFs
dGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWM6Ok9uRnJhbWUoY29uc3Qgd2VicnRjOjpWaWRlb0Zy
YW1lJiBmcmFtZSkKK3sKKyAgICBpZiAoIWlzUHJvZHVjaW5nRGF0YSgpKQorICAgICAgICByZXR1
cm47CisKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICBpZiAoISgrK21fbnVtYmVyT2ZG
cmFtZXMgJSAzMCkpCisgICAgICAgIFJFTEVBU0VfTE9HKE1lZGlhU3RyZWFtLCAiUmVhbHRpbWVJ
bmNvbWluZ1ZpZGVvU291cmNlTWFjOjpPbkZyYW1lICV6dSBmcmFtZSIsIG1fbnVtYmVyT2ZGcmFt
ZXMpOworI2VuZGlmCisKKyAgICBhdXRvIHBpeGVsQnVmZmVyID0gcGl4ZWxCdWZmZXJGcm9tVmlk
ZW9GcmFtZShmcmFtZSk7CisKKyAgICAvLyBGSVhNRTogQ29udmVydCB0aW1pbmcgaW5mb3JtYXRp
b24gZnJvbSBWaWRlb0ZyYW1lIHRvIENNU2FtcGxlVGltaW5nSW5mby4KKyAgICAvLyBGb3IgdGhl
IG1vbWVudCwgd2Ugd2lsbCBwcmV0ZW5kIHRoYXQgZnJhbWVzIHNob3VsZCBiZSByZW5kZXJlZCBh
c2FwLgorICAgIENNU2FtcGxlVGltaW5nSW5mbyB0aW1pbmdJbmZvOworICAgIHRpbWluZ0luZm8u
cHJlc2VudGF0aW9uVGltZVN0YW1wID0ga0NNVGltZUludmFsaWQ7CisgICAgdGltaW5nSW5mby5k
ZWNvZGVUaW1lU3RhbXAgPSBrQ01UaW1lSW52YWxpZDsKKyAgICB0aW1pbmdJbmZvLmR1cmF0aW9u
ID0ga0NNVGltZUludmFsaWQ7CisKKyAgICBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25SZWYgZm9y
bWF0RGVzY3JpcHRpb247CisgICAgT1NTdGF0dXMgb3N0YXR1cyA9IENNVmlkZW9Gb3JtYXREZXNj
cmlwdGlvbkNyZWF0ZUZvckltYWdlQnVmZmVyKGtDRkFsbG9jYXRvckRlZmF1bHQsIChDVkltYWdl
QnVmZmVyUmVmKXBpeGVsQnVmZmVyLCAmZm9ybWF0RGVzY3JpcHRpb24pOworICAgIGlmIChvc3Rh
dHVzICE9IG5vRXJyKSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGluaXRpYWxpemUg
Q01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uOiAlZCIsIHN0YXRpY19jYXN0PGludD4ob3N0YXR1cykp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQ01TYW1wbGVCdWZmZXJSZWYgc2FtcGxl
QnVmZmVyOworICAgIG9zdGF0dXMgPSBDTVNhbXBsZUJ1ZmZlckNyZWF0ZVJlYWR5V2l0aEltYWdl
QnVmZmVyKGtDRkFsbG9jYXRvckRlZmF1bHQsIChDVkltYWdlQnVmZmVyUmVmKXBpeGVsQnVmZmVy
LCBmb3JtYXREZXNjcmlwdGlvbiwgJnRpbWluZ0luZm8sICZzYW1wbGVCdWZmZXIpOworICAgIGlm
IChvc3RhdHVzICE9IG5vRXJyKSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0
ZSB0aGUgc2FtcGxlIGJ1ZmZlcjogJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KG9zdGF0dXMpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBDRlJlbGVhc2UoZm9ybWF0RGVzY3JpcHRpb24pOwor
CisgICAgYXV0byBzYW1wbGUgPSBhZG9wdENGKHNhbXBsZUJ1ZmZlcik7CisKKyAgICBDRkFycmF5
UmVmIGF0dGFjaG1lbnRzQXJyYXkgPSBDTVNhbXBsZUJ1ZmZlckdldFNhbXBsZUF0dGFjaG1lbnRz
QXJyYXkoc2FtcGxlQnVmZmVyLCB0cnVlKTsKKyAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCBD
RkFycmF5R2V0Q291bnQoYXR0YWNobWVudHNBcnJheSk7ICsraSkgeworICAgICAgICBDRk11dGFi
bGVEaWN0aW9uYXJ5UmVmIGF0dGFjaG1lbnRzID0gKENGTXV0YWJsZURpY3Rpb25hcnlSZWYpQ0ZB
cnJheUdldFZhbHVlQXRJbmRleChhdHRhY2htZW50c0FycmF5LCBpKTsKKyAgICAgICAgQ0ZEaWN0
aW9uYXJ5U2V0VmFsdWUoYXR0YWNobWVudHMsIGtDTVNhbXBsZUF0dGFjaG1lbnRLZXlfRGlzcGxh
eUltbWVkaWF0ZWx5LCBrQ0ZCb29sZWFuVHJ1ZSk7CisgICAgfQorCisgICAgdW5zaWduZWQgd2lk
dGggPSBmcmFtZS53aWR0aCgpOworICAgIHVuc2lnbmVkIGhlaWdodCA9IGZyYW1lLmhlaWdodCgp
OworCisgICAgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb24gcm90YXRpb247CisgICAgc3dpdGNo
IChmcmFtZS5yb3RhdGlvbigpKSB7CisgICAgY2FzZSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzA6
CisgICAgICAgIHJvdGF0aW9uID0gTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246Ok5vbmU7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8xODA6CisgICAg
ICAgIHJvdGF0aW9uID0gTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246OlVwc2lkZURvd247Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugd2VicnRjOjprVmlkZW9Sb3RhdGlvbl85MDoKKyAgICAg
ICAgcm90YXRpb24gPSBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6UmlnaHQ7CisgICAgICAg
IHN0ZDo6c3dhcCh3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSB3ZWJy
dGM6OmtWaWRlb1JvdGF0aW9uXzI3MDoKKyAgICAgICAgcm90YXRpb24gPSBNZWRpYVNhbXBsZTo6
VmlkZW9Sb3RhdGlvbjo6TGVmdDsKKyAgICAgICAgc3RkOjpzd2FwKHdpZHRoLCBoZWlnaHQpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBSZWZQdHI8UmVhbHRpbWVJbmNvbWluZ1ZpZGVv
U291cmNlTWFjPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIGNhbGxPbk1haW5UaHJlYWQoW3By
b3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpLCBzYW1wbGUgPSBXVEZNb3ZlKHNh
bXBsZSksIHdpZHRoLCBoZWlnaHQsIHJvdGF0aW9uXSB7CisgICAgICAgIHByb3RlY3RlZFRoaXMt
PnByb2Nlc3NOZXdTYW1wbGUoc2FtcGxlLmdldCgpLCB3aWR0aCwgaGVpZ2h0LCByb3RhdGlvbik7
CisgICAgfSk7Cit9CisKK3ZvaWQgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTWFjOjpwcm9j
ZXNzTmV3U2FtcGxlKENNU2FtcGxlQnVmZmVyUmVmIHNhbXBsZSwgdW5zaWduZWQgd2lkdGgsIHVu
c2lnbmVkIGhlaWdodCwgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb24gcm90YXRpb24pCit7Cisg
ICAgbV9idWZmZXIgPSBzYW1wbGU7CisgICAgaWYgKHdpZHRoICE9IG1fY3VycmVudFNldHRpbmdz
LndpZHRoKCkgfHwgaGVpZ2h0ICE9IG1fY3VycmVudFNldHRpbmdzLmhlaWdodCgpKSB7CisgICAg
ICAgIG1fY3VycmVudFNldHRpbmdzLnNldFdpZHRoKHdpZHRoKTsKKyAgICAgICAgbV9jdXJyZW50
U2V0dGluZ3Muc2V0SGVpZ2h0KGhlaWdodCk7CisgICAgICAgIHNldHRpbmdzRGlkQ2hhbmdlKCk7
CisgICAgfQorCisgICAgdmlkZW9TYW1wbGVBdmFpbGFibGUoTWVkaWFTYW1wbGVBVkZPYmpDOjpj
cmVhdGUoc2FtcGxlLCByb3RhdGlvbikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBVU0UoTElCV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1hYy5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lSW5jb21pbmdW
aWRlb1NvdXJjZU1hYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg2NTkyZjkwZDA5MGRkYjMyM2RkNDU4MTY0NTJh
NzlmODE0MzBiOWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTWFjLmgKQEAgLTAsMCAr
MSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
ICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2Yg
RXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAq
ICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoTElCV0VCUlRDKQorCisjaW5jbHVk
ZSAiUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmgiCisKK3VzaW5nIENNU2FtcGxlQnVmZmVy
UmVmID0gc3RydWN0IG9wYXF1ZUNNU2FtcGxlQnVmZmVyKjsKK3VzaW5nIENWUGl4ZWxCdWZmZXJS
ZWYgPSBzdHJ1Y3QgX19DVkJ1ZmZlcio7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTWFjIGZpbmFsIDogcHVibGljIFJlYWx0aW1lSW5j
b21pbmdWaWRlb1NvdXJjZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxSZWFsdGltZUluY29t
aW5nVmlkZW9Tb3VyY2VNYWM+IGNyZWF0ZShydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRl
b1RyYWNrSW50ZXJmYWNlPiYmLCBTdHJpbmcmJik7CisgICAgflJlYWx0aW1lSW5jb21pbmdWaWRl
b1NvdXJjZU1hYygpIHsgc3RvcFByb2R1Y2luZ0RhdGEoKTsgfQorCitwcml2YXRlOgorICAgIFJl
YWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1hYyhydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpW
aWRlb1RyYWNrSW50ZXJmYWNlPiYmLCBTdHJpbmcmJik7CisKKyAgICB2b2lkIHByb2Nlc3NOZXdT
YW1wbGUoQ01TYW1wbGVCdWZmZXJSZWYsIHVuc2lnbmVkLCB1bnNpZ25lZCwgTWVkaWFTYW1wbGU6
OlZpZGVvUm90YXRpb24pOworICAgIENWUGl4ZWxCdWZmZXJSZWYgcGl4ZWxCdWZmZXJGcm9tVmlk
ZW9GcmFtZShjb25zdCB3ZWJydGM6OlZpZGVvRnJhbWUmKTsKKworICAgIC8vIHJ0Yzo6VmlkZW9T
aW5rSW50ZXJmYWNlCisgICAgdm9pZCBPbkZyYW1lKGNvbnN0IHdlYnJ0Yzo6VmlkZW9GcmFtZSYp
IGZpbmFsOworCisgICAgUmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiBtX2J1ZmZlcjsKKyAg
ICBSZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gbV9ibGFja0ZyYW1lOworICAgIGludCBtX2Js
YWNrRnJhbWVXaWR0aCB7IDAgfTsKKyAgICBpbnQgbV9ibGFja0ZyYW1lSGVpZ2h0IHsgMCB9Owor
I2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgIHNpemVfdCBtX251bWJlck9mRnJhbWVzIHsg
MCB9OworI2VuZGlmCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBV
U0UoTElCV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Y0NTBkZjMzYzZmNmEyNTg3ZGEzOWI1
ZWM4MmNjZmNkNjBhMGU3ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVP
dXRnb2luZ1ZpZGVvU291cmNlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI2NiArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSByZXF1aXJlZCB0byBiZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUgotICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IKLSAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCi0gKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5oIgotCi0jaWYgVVNF
KExJQldFQlJUQykKLQotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlIDx3ZWJydGMvYXBp
L3ZpZGVvL2k0MjBfYnVmZmVyLmg+Ci0jaW5jbHVkZSA8d2VicnRjL2NvbW1vbl92aWRlby9saWJ5
dXYvaW5jbHVkZS93ZWJydGNfbGlieXV2Lmg+Ci0jaW5jbHVkZSA8d2VicnRjL3Nkay9vYmpjL0Zy
YW1ld29yay9DbGFzc2VzL1ZpZGVvL2NvcmV2aWRlb19mcmFtZV9idWZmZXIuaD4KLSNpbmNsdWRl
IDx3dGYvQ3VycmVudFRpbWUuaD4KLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotCi0jaW5j
bHVkZSAiQ29yZU1lZGlhU29mdExpbmsuaCIKLSNpbmNsdWRlICJDb3JlVmlkZW9Tb2Z0TGluay5o
IgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6
UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlKFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4m
JiB2aWRlb1NvdXJjZSkKLSAgICA6IG1fdmlkZW9Tb3VyY2UoV1RGTW92ZSh2aWRlb1NvdXJjZSkp
Ci0gICAgLCBtX2JsYWNrRnJhbWVUaW1lcigqdGhpcywgJlJlYWx0aW1lT3V0Z29pbmdWaWRlb1Nv
dXJjZTo6c2VuZE9uZUJsYWNrRnJhbWUpCi17Ci0gICAgbV92aWRlb1NvdXJjZS0+YWRkT2JzZXJ2
ZXIoKnRoaXMpOwotICAgIGluaXRpYWxpemVGcm9tU291cmNlKCk7Ci19Ci0KLWJvb2wgUmVhbHRp
bWVPdXRnb2luZ1ZpZGVvU291cmNlOjpzZXRTb3VyY2UoUmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2
YXRlPiYmIG5ld1NvdXJjZSkKLXsKLSAgICBpZiAoIW1faW5pdGlhbFNldHRpbmdzKQotICAgICAg
ICBtX2luaXRpYWxTZXR0aW5ncyA9IG1fdmlkZW9Tb3VyY2UtPnNvdXJjZSgpLnNldHRpbmdzKCk7
Ci0KLSAgICBtX3ZpZGVvU291cmNlLT5yZW1vdmVPYnNlcnZlcigqdGhpcyk7Ci0gICAgbV92aWRl
b1NvdXJjZSA9IFdURk1vdmUobmV3U291cmNlKTsKLSAgICBtX3ZpZGVvU291cmNlLT5hZGRPYnNl
cnZlcigqdGhpcyk7Ci0KLSAgICBpbml0aWFsaXplRnJvbVNvdXJjZSgpOwotCi0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLXZvaWQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpzdG9wKCkKLXsK
LSAgICBtX3ZpZGVvU291cmNlLT5yZW1vdmVPYnNlcnZlcigqdGhpcyk7Ci0gICAgbV9ibGFja0Zy
YW1lVGltZXIuc3RvcCgpOwotICAgIG1faXNTdG9wcGVkID0gdHJ1ZTsKLX0KLQotdm9pZCBSZWFs
dGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnVwZGF0ZUJsYWNrRnJhbWVzU2VuZGluZygpCi17Ci0g
ICAgaWYgKCFtX211dGVkICYmIG1fZW5hYmxlZCkgewotICAgICAgICBpZiAobV9ibGFja0ZyYW1l
VGltZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgICAgIG1fYmxhY2tGcmFtZVRpbWVyLnN0b3AoKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHNlbmRCbGFja0ZyYW1lc0lmTmVlZGVkKCk7
Ci19Ci0KLXZvaWQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpzb3VyY2VNdXRlZENoYW5n
ZWQoKQotewotICAgIEFTU0VSVChtX211dGVkICE9IG1fdmlkZW9Tb3VyY2UtPm11dGVkKCkpOwot
Ci0gICAgbV9tdXRlZCA9IG1fdmlkZW9Tb3VyY2UtPm11dGVkKCk7Ci0KLSAgICB1cGRhdGVCbGFj
a0ZyYW1lc1NlbmRpbmcoKTsKLX0KLQotdm9pZCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6
OnNvdXJjZUVuYWJsZWRDaGFuZ2VkKCkKLXsKLSAgICBBU1NFUlQobV9lbmFibGVkICE9IG1fdmlk
ZW9Tb3VyY2UtPmVuYWJsZWQoKSk7Ci0KLSAgICBtX2VuYWJsZWQgPSBtX3ZpZGVvU291cmNlLT5l
bmFibGVkKCk7Ci0KLSAgICB1cGRhdGVCbGFja0ZyYW1lc1NlbmRpbmcoKTsKLX0KLQotdm9pZCBS
ZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OmluaXRpYWxpemVGcm9tU291cmNlKCkKLXsKLSAg
ICBjb25zdCBhdXRvJiBzZXR0aW5ncyA9IG1fdmlkZW9Tb3VyY2UtPnNvdXJjZSgpLnNldHRpbmdz
KCk7Ci0gICAgbV93aWR0aCA9IHNldHRpbmdzLndpZHRoKCk7Ci0gICAgbV9oZWlnaHQgPSBzZXR0
aW5ncy5oZWlnaHQoKTsKLQotICAgIG1fbXV0ZWQgPSBtX3ZpZGVvU291cmNlLT5tdXRlZCgpOwot
ICAgIG1fZW5hYmxlZCA9IG1fdmlkZW9Tb3VyY2UtPmVuYWJsZWQoKTsKLQotICAgIHVwZGF0ZUJs
YWNrRnJhbWVzU2VuZGluZygpOwotfQotCi1ib29sIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJj
ZTo6R2V0U3RhdHMoU3RhdHMqKQotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBSZWFs
dGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OkFkZE9yVXBkYXRlU2luayhydGM6OlZpZGVvU2lua0lu
dGVyZmFjZTx3ZWJydGM6OlZpZGVvRnJhbWU+KiBzaW5rLCBjb25zdCBydGM6OlZpZGVvU2lua1dh
bnRzJiBzaW5rV2FudHMpCi17Ci0gICAgQVNTRVJUKCFzaW5rV2FudHMuYmxhY2tfZnJhbWVzKTsK
LQotICAgIGlmIChzaW5rV2FudHMucm90YXRpb25fYXBwbGllZCkKLSAgICAgICAgbV9zaG91bGRB
cHBseVJvdGF0aW9uID0gdHJ1ZTsKLQotICAgIGlmICghbV9zaW5rcy5jb250YWlucyhzaW5rKSkK
LSAgICAgICAgbV9zaW5rcy5hcHBlbmQoc2luayk7Ci0KLSAgICBjYWxsT25NYWluVGhyZWFkKFtw
cm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldKCkgewotICAgICAgICBwcm90ZWN0ZWRUaGlz
LT5zZW5kQmxhY2tGcmFtZXNJZk5lZWRlZCgpOwotICAgIH0pOwotfQotCi12b2lkIFJlYWx0aW1l
T3V0Z29pbmdWaWRlb1NvdXJjZTo6UmVtb3ZlU2luayhydGM6OlZpZGVvU2lua0ludGVyZmFjZTx3
ZWJydGM6OlZpZGVvRnJhbWU+KiBzaW5rKQotewotICAgIG1fc2lua3MucmVtb3ZlRmlyc3Qoc2lu
ayk7Ci0KLSAgICBpZiAobV9zaW5rcy5zaXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNh
bGxPbk1haW5UaHJlYWQoW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0oKSB7Ci0gICAg
ICAgIGlmIChwcm90ZWN0ZWRUaGlzLT5tX2JsYWNrRnJhbWVUaW1lci5pc0FjdGl2ZSgpKQotICAg
ICAgICAgICAgcHJvdGVjdGVkVGhpcy0+bV9ibGFja0ZyYW1lVGltZXIuc3RvcCgpOwotICAgIH0p
OwotfQotCi12b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6c2VuZEJsYWNrRnJhbWVz
SWZOZWVkZWQoKQotewotICAgIGlmIChtX2JsYWNrRnJhbWVUaW1lci5pc0FjdGl2ZSgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fc2lua3Muc2l6ZSgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAoIW1fbXV0ZWQgJiYgbV9lbmFibGVkKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAoIW1fd2lkdGggfHwgIW1faGVpZ2h0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
IW1fYmxhY2tGcmFtZSkgewotICAgICAgICBhdXRvIHdpZHRoID0gbV93aWR0aDsKLSAgICAgICAg
YXV0byBoZWlnaHQgPSBtX2hlaWdodDsKLSAgICAgICAgaWYgKG1fc2hvdWxkQXBwbHlSb3RhdGlv
biAmJiAobV9jdXJyZW50Um90YXRpb24gPT0gd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8wIHx8IG1f
Y3VycmVudFJvdGF0aW9uID09IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fOTApKQotICAgICAgICAg
ICAgc3RkOjpzd2FwKHdpZHRoLCBoZWlnaHQpOwotICAgICAgICBhdXRvIGZyYW1lID0gbV9idWZm
ZXJQb29sLkNyZWF0ZUJ1ZmZlcih3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgQVNTRVJUKGZyYW1l
KTsKLSAgICAgICAgaWYgKCFmcmFtZSkgewotICAgICAgICAgICAgUkVMRUFTRV9MT0coV2ViUlRD
LCAiUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpzZW5kQmxhY2tGcmFtZXNJZk5lZWRlZCB1
bmFibGUgdG8gc2VuZCBibGFjayBmcmFtZXMiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgICAgICB3ZWJydGM6Okk0MjBCdWZmZXI6OlNldEJsYWNrKGZyYW1lLmdldCgpKTsK
LSAgICAgICAgbV9ibGFja0ZyYW1lID0gV1RGTW92ZShmcmFtZSk7Ci0gICAgfQotICAgIHNlbmRP
bmVCbGFja0ZyYW1lKCk7Ci0gICAgbV9ibGFja0ZyYW1lVGltZXIuc3RhcnRSZXBlYXRpbmcoMV9z
KTsKLX0KLQotdm9pZCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnNlbmRPbmVCbGFja0Zy
YW1lKCkKLXsKLSAgICBSRUxFQVNFX0xPRyhNZWRpYVN0cmVhbSwgIlJlYWx0aW1lT3V0Z29pbmdW
aWRlb1NvdXJjZTo6c2VuZE9uZUJsYWNrRnJhbWUiKTsKLSAgICBzZW5kRnJhbWUocnRjOjpzY29w
ZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9GcmFtZUJ1ZmZlcj4obV9ibGFja0ZyYW1lKSk7Ci19Ci0K
LXZvaWQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpzZW5kRnJhbWUocnRjOjpzY29wZWRf
cmVmcHRyPHdlYnJ0Yzo6VmlkZW9GcmFtZUJ1ZmZlcj4mJiBidWZmZXIpCi17Ci0gICAgaW50NjRf
dCB0aW1lc3RhbXBNaWNyb1NlY29uZHMgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWVNUygp
ICogMTAwMDsKLSAgICB3ZWJydGM6OlZpZGVvRnJhbWUgZnJhbWUoYnVmZmVyLCBtX3Nob3VsZEFw
cGx5Um90YXRpb24gPyB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzAgOiBtX2N1cnJlbnRSb3RhdGlv
biwgdGltZXN0YW1wTWljcm9TZWNvbmRzKTsKLSAgICBmb3IgKGF1dG8qIHNpbmsgOiBtX3Npbmtz
KQotICAgICAgICBzaW5rLT5PbkZyYW1lKGZyYW1lKTsKLX0KLQotdm9pZCBSZWFsdGltZU91dGdv
aW5nVmlkZW9Tb3VyY2U6OnZpZGVvU2FtcGxlQXZhaWxhYmxlKE1lZGlhU2FtcGxlJiBzYW1wbGUp
Ci17Ci0gICAgaWYgKCFtX3NpbmtzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KG1fbXV0ZWQgfHwgIW1fZW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgIVJFTEVBU0Vf
TE9HX0RJU0FCTEVECi0gICAgaWYgKCEoKyttX251bWJlck9mRnJhbWVzICUgMzApKQotICAgICAg
ICBSRUxFQVNFX0xPRyhNZWRpYVN0cmVhbSwgIlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6
c2VuZEZyYW1lICV6dSBmcmFtZSIsIG1fbnVtYmVyT2ZGcmFtZXMpOwotI2VuZGlmCi0KLSAgICBz
d2l0Y2ggKHNhbXBsZS52aWRlb1JvdGF0aW9uKCkpIHsKLSAgICBjYXNlIE1lZGlhU2FtcGxlOjpW
aWRlb1JvdGF0aW9uOjpOb25lOgotICAgICAgICBtX2N1cnJlbnRSb3RhdGlvbiA9IHdlYnJ0Yzo6
a1ZpZGVvUm90YXRpb25fMDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBNZWRpYVNhbXBsZTo6
VmlkZW9Sb3RhdGlvbjo6VXBzaWRlRG93bjoKLSAgICAgICAgbV9jdXJyZW50Um90YXRpb24gPSB3
ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzE4MDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBNZWRp
YVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6UmlnaHQ6Ci0gICAgICAgIG1fY3VycmVudFJvdGF0aW9u
ID0gd2VicnRjOjprVmlkZW9Sb3RhdGlvbl85MDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBN
ZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6TGVmdDoKLSAgICAgICAgbV9jdXJyZW50Um90YXRp
b24gPSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzI3MDsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
Ci0gICAgQVNTRVJUKHNhbXBsZS5wbGF0Zm9ybVNhbXBsZSgpLnR5cGUgPT0gUGxhdGZvcm1TYW1w
bGU6OkNNU2FtcGxlQnVmZmVyVHlwZSk7Ci0gICAgYXV0byBwaXhlbEJ1ZmZlciA9IHN0YXRpY19j
YXN0PENWUGl4ZWxCdWZmZXJSZWY+KENNU2FtcGxlQnVmZmVyR2V0SW1hZ2VCdWZmZXIoc2FtcGxl
LnBsYXRmb3JtU2FtcGxlKCkuc2FtcGxlLmNtU2FtcGxlQnVmZmVyKSk7Ci0gICAgYXV0byBwaXhl
bEZvcm1hdFR5cGUgPSBDVlBpeGVsQnVmZmVyR2V0UGl4ZWxGb3JtYXRUeXBlKHBpeGVsQnVmZmVy
KTsKLQotICAgIGlmIChwaXhlbEZvcm1hdFR5cGUgPT0ga0NWUGl4ZWxGb3JtYXRUeXBlXzQyMFlw
Q2JDcjhQbGFuYXIgfHwgcGl4ZWxGb3JtYXRUeXBlID09IGtDVlBpeGVsRm9ybWF0VHlwZV80MjBZ
cENiQ3I4QmlQbGFuYXJGdWxsUmFuZ2UpIHsKLSAgICAgICAgcnRjOjpzY29wZWRfcmVmcHRyPHdl
YnJ0Yzo6VmlkZW9GcmFtZUJ1ZmZlcj4gYnVmZmVyID0gbmV3IHJ0Yzo6UmVmQ291bnRlZE9iamVj
dDx3ZWJydGM6OkNvcmVWaWRlb0ZyYW1lQnVmZmVyPihwaXhlbEJ1ZmZlcik7Ci0gICAgICAgIGlm
IChtX3Nob3VsZEFwcGx5Um90YXRpb24gJiYgbV9jdXJyZW50Um90YXRpb24gIT0gd2VicnRjOjpr
VmlkZW9Sb3RhdGlvbl8wKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG1ha2Ug
QVZWaWRlb0NhcHR1cmVTb3VyY2UgaGFuZGxlIHRoZSByb3RhdGlvbiB3aGVuZXZlciBwb3NzaWJs
ZS4KLSAgICAgICAgICAgIC8vIFRoaXMgaW1wbGVtZW50YXRpb24gaXMgaW5lZmZpY2llbnQsIHdl
IHNob3VsZCByb3RhdGUgb24gdGhlIENNU2FtcGxlQnVmZmVyIGRpcmVjdGx5IGluc3RlYWQgb2Yg
ZG9pbmcgdGhpcyBkb3VibGUgYWxsb2NhdGlvbi4KLSAgICAgICAgICAgIGF1dG8gcm90YXRlZEJ1
ZmZlciA9IGJ1ZmZlci0+VG9JNDIwKCk7Ci0gICAgICAgICAgICBBU1NFUlQocm90YXRlZEJ1ZmZl
cik7Ci0gICAgICAgICAgICBidWZmZXIgPSB3ZWJydGM6Okk0MjBCdWZmZXI6OlJvdGF0ZSgqcm90
YXRlZEJ1ZmZlciwgbV9jdXJyZW50Um90YXRpb24pOwotICAgICAgICB9Ci0gICAgICAgIHNlbmRG
cmFtZShXVEZNb3ZlKGJ1ZmZlcikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQ1ZQ
aXhlbEJ1ZmZlckxvY2tCYXNlQWRkcmVzcyhwaXhlbEJ1ZmZlciwgMCk7Ci0gICAgYXV0byogc291
cmNlID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oQ1ZQaXhlbEJ1ZmZlckdldEJhc2VBZGRy
ZXNzT2ZQbGFuZShwaXhlbEJ1ZmZlciwgMCkpOwotCi0gICAgQVNTRVJUKG1fd2lkdGgpOwotICAg
IEFTU0VSVChtX2hlaWdodCk7Ci0KLSAgICBhdXRvIG5ld0J1ZmZlciA9IG1fYnVmZmVyUG9vbC5D
cmVhdGVCdWZmZXIobV93aWR0aCwgbV9oZWlnaHQpOwotICAgIEFTU0VSVChuZXdCdWZmZXIpOwot
ICAgIGlmICghbmV3QnVmZmVyKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HKFdlYlJUQywgIlJlYWx0
aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6dmlkZW9TYW1wbGVBdmFpbGFibGUgdW5hYmxlIHRvIGFs
bG9jYXRlIGJ1ZmZlciBmb3IgY29udmVyc2lvbiB0byBZVVYiKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBpZiAocGl4ZWxGb3JtYXRUeXBlID09IGtDVlBpeGVsRm9ybWF0VHlwZV8zMkJH
UkEpCi0gICAgICAgIHdlYnJ0Yzo6Q29udmVydFRvSTQyMCh3ZWJydGM6OlZpZGVvVHlwZTo6a0FS
R0IsIHNvdXJjZSwgMCwgMCwgbV93aWR0aCwgbV9oZWlnaHQsIDAsIHdlYnJ0Yzo6a1ZpZGVvUm90
YXRpb25fMCwgbmV3QnVmZmVyKTsKLSAgICBlbHNlIHsKLSAgICAgICAgQVNTRVJUKHBpeGVsRm9y
bWF0VHlwZSA9PSBrQ1ZQaXhlbEZvcm1hdFR5cGVfMzJBUkdCKTsKLSAgICAgICAgd2VicnRjOjpD
b252ZXJ0VG9JNDIwKHdlYnJ0Yzo6VmlkZW9UeXBlOjprQkdSQSwgc291cmNlLCAwLCAwLCBtX3dp
ZHRoLCBtX2hlaWdodCwgMCwgd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8wLCBuZXdCdWZmZXIpOwot
ICAgIH0KLSAgICBDVlBpeGVsQnVmZmVyVW5sb2NrQmFzZUFkZHJlc3MocGl4ZWxCdWZmZXIsIDAp
OwotICAgIGlmIChtX3Nob3VsZEFwcGx5Um90YXRpb24gJiYgbV9jdXJyZW50Um90YXRpb24gIT0g
d2VicnRjOjprVmlkZW9Sb3RhdGlvbl8wKQotICAgICAgICBuZXdCdWZmZXIgPSB3ZWJydGM6Okk0
MjBCdWZmZXI6OlJvdGF0ZSgqbmV3QnVmZmVyLCBtX2N1cnJlbnRSb3RhdGlvbik7Ci0gICAgc2Vu
ZEZyYW1lKFdURk1vdmUobmV3QnVmZmVyKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LQotI2VuZGlmIC8vIFVTRShMSUJXRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1Zp
ZGVvU291cmNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3ZTc4YjUxNjVkMDU2
OTVmZTFhNDU4NDA4NTliYjExYzEyZTQ4ODYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFj
L1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE2ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkLCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIHJlcXVpcmVkIHRvIGJlIG1ldDoKLSAqCi0gKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCi0gKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUgotICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKLSAqIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
Ci0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21h
IG9uY2UKLQotI2lmIFVTRShMSUJXRUJSVEMpCi0KLSNpbmNsdWRlICJMaWJXZWJSVENNYWNyb3Mu
aCIKLSNpbmNsdWRlICJNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5oIgotI2luY2x1ZGUgPFRpbWVy
Lmg+Ci0jaW5jbHVkZSA8d2VicnRjL2FwaS9tZWRpYXN0cmVhbWludGVyZmFjZS5oPgotI2luY2x1
ZGUgPHdlYnJ0Yy9iYXNlL29wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d2VicnRjL2NvbW1vbl92aWRl
by9pbmNsdWRlL2k0MjBfYnVmZmVyX3Bvb2wuaD4KLSNpbmNsdWRlIDx3ZWJydGMvbWVkaWEvYmFz
ZS92aWRlb3NpbmtpbnRlcmZhY2UuaD4KLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNs
dWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1jbGFzcyBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UgZmluYWwgOiBwdWJsaWMgVGhyZWFk
U2FmZVJlZkNvdW50ZWQ8UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlPiwgcHVibGljIHdlYnJ0
Yzo6VmlkZW9UcmFja1NvdXJjZUludGVyZmFjZSwgcHJpdmF0ZSBNZWRpYVN0cmVhbVRyYWNrUHJp
dmF0ZTo6T2JzZXJ2ZXIgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8UmVhbHRpbWVPdXRnb2lu
Z1ZpZGVvU291cmNlPiBjcmVhdGUoUmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiYmIHZpZGVv
U291cmNlKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJj
ZShXVEZNb3ZlKHZpZGVvU291cmNlKSkpOyB9Ci0gICAgflJlYWx0aW1lT3V0Z29pbmdWaWRlb1Nv
dXJjZSgpIHsgc3RvcCgpOyB9Ci0KLSAgICB2b2lkIHN0b3AoKTsKLSAgICBib29sIHNldFNvdXJj
ZShSZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYpOwotICAgIE1lZGlhU3RyZWFtVHJhY2tQ
cml2YXRlJiBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3ZpZGVvU291cmNlLmdldCgpOyB9Ci0K
LSAgICBpbnQgQWRkUmVmKCkgY29uc3QgZmluYWwgeyByZWYoKTsgcmV0dXJuIHJlZkNvdW50KCk7
IH0KLSAgICBpbnQgUmVsZWFzZSgpIGNvbnN0IGZpbmFsIHsgZGVyZWYoKTsgcmV0dXJuIHJlZkNv
dW50KCk7IH0KLQotICAgIHZvaWQgc2V0QXBwbHlSb3RhdGlvbihib29sIHNob3VsZEFwcGx5Um90
YXRpb24pIHsgbV9zaG91bGRBcHBseVJvdGF0aW9uID0gc2hvdWxkQXBwbHlSb3RhdGlvbjsgfQot
Ci1wcml2YXRlOgotICAgIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZShSZWY8TWVkaWFTdHJl
YW1UcmFja1ByaXZhdGU+JiYpOwotCi0gICAgdm9pZCBzZW5kRnJhbWUocnRjOjpzY29wZWRfcmVm
cHRyPHdlYnJ0Yzo6VmlkZW9GcmFtZUJ1ZmZlcj4mJik7Ci0gICAgdm9pZCBzZW5kQmxhY2tGcmFt
ZXNJZk5lZWRlZCgpOwotICAgIHZvaWQgc2VuZE9uZUJsYWNrRnJhbWUoKTsKLSAgICB2b2lkIGlu
aXRpYWxpemVGcm9tU291cmNlKCk7Ci0gICAgdm9pZCB1cGRhdGVCbGFja0ZyYW1lc1NlbmRpbmco
KTsKLQotICAgIC8vIE5vdGlmaWVyIEFQSQotICAgIHZvaWQgUmVnaXN0ZXJPYnNlcnZlcih3ZWJy
dGM6Ok9ic2VydmVySW50ZXJmYWNlKikgZmluYWwgeyB9Ci0gICAgdm9pZCBVbnJlZ2lzdGVyT2Jz
ZXJ2ZXIod2VicnRjOjpPYnNlcnZlckludGVyZmFjZSopIGZpbmFsIHsgfQotCi0gICAgLy8gVmlk
ZW9UcmFja1NvdXJjZUludGVyZmFjZSBBUEkKLSAgICBib29sIGlzX3NjcmVlbmNhc3QoKSBjb25z
dCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQotICAgIHJ0Yzo6T3B0aW9uYWw8Ym9vbD4gbmVlZHNf
ZGVub2lzaW5nKCkgY29uc3QgZmluYWwgeyByZXR1cm4gcnRjOjpPcHRpb25hbDxib29sPigpOyB9
Ci0gICAgYm9vbCBHZXRTdGF0cyhTdGF0cyopIGZpbmFsOwotCi0gICAgLy8gTWVkaWFTb3VyY2VJ
bnRlcmZhY2UgQVBJCi0gICAgU291cmNlU3RhdGUgc3RhdGUoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBTb3VyY2VTdGF0ZSgpOyB9Ci0gICAgYm9vbCByZW1vdGUoKSBjb25zdCBmaW5hbCB7IHJldHVy
biB0cnVlOyB9Ci0KLSAgICAvLyBydGM6OlZpZGVvU291cmNlSW50ZXJmYWNlPHdlYnJ0Yzo6Vmlk
ZW9GcmFtZT4gQVBJCi0gICAgdm9pZCBBZGRPclVwZGF0ZVNpbmsocnRjOjpWaWRlb1NpbmtJbnRl
cmZhY2U8d2VicnRjOjpWaWRlb0ZyYW1lPiosIGNvbnN0IHJ0Yzo6VmlkZW9TaW5rV2FudHMmKSBm
aW5hbDsKLSAgICB2b2lkIFJlbW92ZVNpbmsocnRjOjpWaWRlb1NpbmtJbnRlcmZhY2U8d2VicnRj
OjpWaWRlb0ZyYW1lPiopIGZpbmFsOwotCi0gICAgdm9pZCBzb3VyY2VNdXRlZENoYW5nZWQoKTsK
LSAgICB2b2lkIHNvdXJjZUVuYWJsZWRDaGFuZ2VkKCk7Ci0gICAgdm9pZCB2aWRlb1NhbXBsZUF2
YWlsYWJsZShNZWRpYVNhbXBsZSYpOwotCi0gICAgLy8gTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6
Ok9ic2VydmVyIEFQSQotICAgIHZvaWQgdHJhY2tNdXRlZENoYW5nZWQoTWVkaWFTdHJlYW1UcmFj
a1ByaXZhdGUmKSBmaW5hbCB7IHNvdXJjZU11dGVkQ2hhbmdlZCgpOyB9Ci0gICAgdm9pZCB0cmFj
a0VuYWJsZWRDaGFuZ2VkKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJikgZmluYWwgeyBzb3VyY2VF
bmFibGVkQ2hhbmdlZCgpOyB9Ci0gICAgdm9pZCB0cmFja1NldHRpbmdzQ2hhbmdlZChNZWRpYVN0
cmVhbVRyYWNrUHJpdmF0ZSYpIGZpbmFsIHsgaW5pdGlhbGl6ZUZyb21Tb3VyY2UoKTsgfQotICAg
IHZvaWQgc2FtcGxlQnVmZmVyVXBkYXRlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYsIE1lZGlh
U2FtcGxlJiBzYW1wbGUpIGZpbmFsIHsgdmlkZW9TYW1wbGVBdmFpbGFibGUoc2FtcGxlKTsgfQot
ICAgIHZvaWQgdHJhY2tFbmRlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYpIGZpbmFsIHsgfQot
Ci0gICAgVmVjdG9yPHJ0Yzo6VmlkZW9TaW5rSW50ZXJmYWNlPHdlYnJ0Yzo6VmlkZW9GcmFtZT4q
PiBtX3NpbmtzOwotICAgIHdlYnJ0Yzo6STQyMEJ1ZmZlclBvb2wgbV9idWZmZXJQb29sOwotICAg
IFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4gbV92aWRlb1NvdXJjZTsKLSAgICBib29sIG1f
ZW5hYmxlZCB7IHRydWUgfTsKLSAgICBib29sIG1fbXV0ZWQgeyBmYWxzZSB9OwotICAgIHN0ZDo6
b3B0aW9uYWw8UmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzPiBtX2luaXRpYWxTZXR0aW5nczsK
LSAgICB3ZWJydGM6OlZpZGVvUm90YXRpb24gbV9jdXJyZW50Um90YXRpb24geyB3ZWJydGM6OmtW
aWRlb1JvdGF0aW9uXzAgfTsKLSAgICB1aW50MzJfdCBtX3dpZHRoIHsgMCB9OwotICAgIHVpbnQz
Ml90IG1faGVpZ2h0IHsgMCB9OwotICAgIGJvb2wgbV9pc1N0b3BwZWQgeyBmYWxzZSB9OwotICAg
IFRpbWVyIG1fYmxhY2tGcmFtZVRpbWVyOwotICAgIHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6
OlZpZGVvRnJhbWVCdWZmZXI+IG1fYmxhY2tGcmFtZTsKLSAgICBib29sIG1fc2hvdWxkQXBwbHlS
b3RhdGlvbiB7IGZhbHNlIH07Ci0jaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECi0gICAgc2l6ZV90
IG1fbnVtYmVyT2ZGcmFtZXMgeyAwIH07Ci0jZW5kaWYKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmIC8vIFVTRShMSUJXRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNl
TWFjLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGlt
ZU91dGdvaW5nVmlkZW9Tb3VyY2VNYWMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI5Yjg3OTdjNDRkYzY5ODMz
NWIxYjg4ZTQxNWZlNmVhMjEyMDRlNzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTWFj
LmNwcApAQCAtMCwwICsxLDExOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJ
bmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQsIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgcmVxdWlyZWQgdG8g
YmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhl
IG5hbWUgb2YgQXBwbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAor
ICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZWFsdGltZU91dGdvaW5n
VmlkZW9Tb3VyY2VNYWMuaCIKKworI2lmIFVTRShMSUJXRUJSVEMpCisKKyNpbmNsdWRlIDx3ZWJy
dGMvc2RrL29iamMvRnJhbWV3b3JrL0NsYXNzZXMvVmlkZW8vY29yZXZpZGVvX2ZyYW1lX2J1ZmZl
ci5oPgorCisjaW5jbHVkZSAiQ29yZU1lZGlhU29mdExpbmsuaCIKKyNpbmNsdWRlICJDb3JlVmlk
ZW9Tb2Z0TGluay5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlYWx0aW1lT3V0Z29pbmdW
aWRlb1NvdXJjZU1hYzo6UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTWFjKFJlZjxNZWRpYVN0
cmVhbVRyYWNrUHJpdmF0ZT4mJiB2aWRlb1NvdXJjZSkKKyAgICA6IFJlYWx0aW1lT3V0Z29pbmdW
aWRlb1NvdXJjZShXVEZNb3ZlKHZpZGVvU291cmNlKSkKK3sKK30KKwordm9pZCBSZWFsdGltZU91
dGdvaW5nVmlkZW9Tb3VyY2VNYWM6OnZpZGVvU2FtcGxlQXZhaWxhYmxlKE1lZGlhU2FtcGxlJiBz
YW1wbGUpCit7CisgICAgaWYgKCFtX3NpbmtzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKG1fbXV0ZWQgfHwgIW1fZW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisjaWYgIVJF
TEVBU0VfTE9HX0RJU0FCTEVECisgICAgaWYgKCEoKyttX251bWJlck9mRnJhbWVzICUgMzApKQor
ICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYVN0cmVhbSwgIlJlYWx0aW1lT3V0Z29pbmdWaWRlb1Nv
dXJjZU1hYzo6c2VuZEZyYW1lICV6dSBmcmFtZSIsIG1fbnVtYmVyT2ZGcmFtZXMpOworI2VuZGlm
CisKKyAgICBzd2l0Y2ggKHNhbXBsZS52aWRlb1JvdGF0aW9uKCkpIHsKKyAgICBjYXNlIE1lZGlh
U2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpOb25lOgorICAgICAgICBtX2N1cnJlbnRSb3RhdGlvbiA9
IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNZWRp
YVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6VXBzaWRlRG93bjoKKyAgICAgICAgbV9jdXJyZW50Um90
YXRpb24gPSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzE4MDsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6UmlnaHQ6CisgICAgICAgIG1fY3VycmVu
dFJvdGF0aW9uID0gd2VicnRjOjprVmlkZW9Sb3RhdGlvbl85MDsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6TGVmdDoKKyAgICAgICAgbV9jdXJy
ZW50Um90YXRpb24gPSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzI3MDsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorCisgICAgQVNTRVJUKHNhbXBsZS5wbGF0Zm9ybVNhbXBsZSgpLnR5cGUgPT0gUGxh
dGZvcm1TYW1wbGU6OkNNU2FtcGxlQnVmZmVyVHlwZSk7CisgICAgYXV0byBwaXhlbEJ1ZmZlciA9
IHN0YXRpY19jYXN0PENWUGl4ZWxCdWZmZXJSZWY+KENNU2FtcGxlQnVmZmVyR2V0SW1hZ2VCdWZm
ZXIoc2FtcGxlLnBsYXRmb3JtU2FtcGxlKCkuc2FtcGxlLmNtU2FtcGxlQnVmZmVyKSk7CisgICAg
YXV0byBwaXhlbEZvcm1hdFR5cGUgPSBDVlBpeGVsQnVmZmVyR2V0UGl4ZWxGb3JtYXRUeXBlKHBp
eGVsQnVmZmVyKTsKKworICAgIGlmIChwaXhlbEZvcm1hdFR5cGUgPT0ga0NWUGl4ZWxGb3JtYXRU
eXBlXzQyMFlwQ2JDcjhQbGFuYXIgfHwgcGl4ZWxGb3JtYXRUeXBlID09IGtDVlBpeGVsRm9ybWF0
VHlwZV80MjBZcENiQ3I4QmlQbGFuYXJGdWxsUmFuZ2UpIHsKKyAgICAgICAgcnRjOjpzY29wZWRf
cmVmcHRyPHdlYnJ0Yzo6VmlkZW9GcmFtZUJ1ZmZlcj4gYnVmZmVyID0gbmV3IHJ0Yzo6UmVmQ291
bnRlZE9iamVjdDx3ZWJydGM6OkNvcmVWaWRlb0ZyYW1lQnVmZmVyPihwaXhlbEJ1ZmZlcik7Cisg
ICAgICAgIGlmIChtX3Nob3VsZEFwcGx5Um90YXRpb24gJiYgbV9jdXJyZW50Um90YXRpb24gIT0g
d2VicnRjOjprVmlkZW9Sb3RhdGlvbl8wKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkIG1ha2UgQVZWaWRlb0NhcHR1cmVTb3VyY2UgaGFuZGxlIHRoZSByb3RhdGlvbiB3aGVuZXZl
ciBwb3NzaWJsZS4KKyAgICAgICAgICAgIC8vIFRoaXMgaW1wbGVtZW50YXRpb24gaXMgaW5lZmZp
Y2llbnQsIHdlIHNob3VsZCByb3RhdGUgb24gdGhlIENNU2FtcGxlQnVmZmVyIGRpcmVjdGx5IGlu
c3RlYWQgb2YgZG9pbmcgdGhpcyBkb3VibGUgYWxsb2NhdGlvbi4KKyAgICAgICAgICAgIGF1dG8g
cm90YXRlZEJ1ZmZlciA9IGJ1ZmZlci0+VG9JNDIwKCk7CisgICAgICAgICAgICBBU1NFUlQocm90
YXRlZEJ1ZmZlcik7CisgICAgICAgICAgICBidWZmZXIgPSB3ZWJydGM6Okk0MjBCdWZmZXI6OlJv
dGF0ZSgqcm90YXRlZEJ1ZmZlciwgbV9jdXJyZW50Um90YXRpb24pOworICAgICAgICB9CisgICAg
ICAgIHNlbmRGcmFtZShXVEZNb3ZlKGJ1ZmZlcikpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgQ1ZQaXhlbEJ1ZmZlckxvY2tCYXNlQWRkcmVzcyhwaXhlbEJ1ZmZlciwgMCk7CisgICAg
YXV0byogc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oQ1ZQaXhlbEJ1ZmZlckdl
dEJhc2VBZGRyZXNzT2ZQbGFuZShwaXhlbEJ1ZmZlciwgMCkpOworCisgICAgQVNTRVJUKG1fd2lk
dGgpOworICAgIEFTU0VSVChtX2hlaWdodCk7CisKKyAgICBhdXRvIG5ld0J1ZmZlciA9IG1fYnVm
ZmVyUG9vbC5DcmVhdGVCdWZmZXIobV93aWR0aCwgbV9oZWlnaHQpOworICAgIEFTU0VSVChuZXdC
dWZmZXIpOworICAgIGlmICghbmV3QnVmZmVyKSB7CisgICAgICAgIFJFTEVBU0VfTE9HKFdlYlJU
QywgIlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZU1hYzo6dmlkZW9TYW1wbGVBdmFpbGFibGUg
dW5hYmxlIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3IgY29udmVyc2lvbiB0byBZVVYiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAocGl4ZWxGb3JtYXRUeXBlID09IGtDVlBpeGVsRm9y
bWF0VHlwZV8zMkJHUkEpCisgICAgICAgIHdlYnJ0Yzo6Q29udmVydFRvSTQyMCh3ZWJydGM6OlZp
ZGVvVHlwZTo6a0FSR0IsIHNvdXJjZSwgMCwgMCwgbV93aWR0aCwgbV9oZWlnaHQsIDAsIHdlYnJ0
Yzo6a1ZpZGVvUm90YXRpb25fMCwgbmV3QnVmZmVyKTsKKyAgICBlbHNlIHsKKyAgICAgICAgQVNT
RVJUKHBpeGVsRm9ybWF0VHlwZSA9PSBrQ1ZQaXhlbEZvcm1hdFR5cGVfMzJBUkdCKTsKKyAgICAg
ICAgd2VicnRjOjpDb252ZXJ0VG9JNDIwKHdlYnJ0Yzo6VmlkZW9UeXBlOjprQkdSQSwgc291cmNl
LCAwLCAwLCBtX3dpZHRoLCBtX2hlaWdodCwgMCwgd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8wLCBu
ZXdCdWZmZXIpOworICAgIH0KKyAgICBDVlBpeGVsQnVmZmVyVW5sb2NrQmFzZUFkZHJlc3MocGl4
ZWxCdWZmZXIsIDApOworICAgIGlmIChtX3Nob3VsZEFwcGx5Um90YXRpb24gJiYgbV9jdXJyZW50
Um90YXRpb24gIT0gd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8wKQorICAgICAgICBuZXdCdWZmZXIg
PSB3ZWJydGM6Okk0MjBCdWZmZXI6OlJvdGF0ZSgqbmV3QnVmZmVyLCBtX2N1cnJlbnRSb3RhdGlv
bik7CisgICAgc2VuZEZyYW1lKFdURk1vdmUobmV3QnVmZmVyKSk7Cit9CisKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKExJQldFQlJUQykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU91dGdvaW5nVmlk
ZW9Tb3VyY2VNYWMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9S
ZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VNYWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mZDIxYjdjZjcxODdl
ZmRmYjRlOWVmOGZkNzQzM2NlN2I2NjQ4YWJkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJj
ZU1hYy5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkLCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIHJlcXVpcmVkIHRv
IGJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEFwcGxlIEluYy4gbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
KyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShMSUJXRUJSVEMpCisKKyNpbmNsdWRl
ICJSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VNYWMgZmluYWwgOiBwdWJsaWMgUmVh
bHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFJlYWx0
aW1lT3V0Z29pbmdWaWRlb1NvdXJjZU1hYz4gY3JlYXRlKFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJp
dmF0ZT4mJiB2aWRlb1NvdXJjZSkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBSZWFsdGltZU91dGdv
aW5nVmlkZW9Tb3VyY2VNYWMoV1RGTW92ZSh2aWRlb1NvdXJjZSkpKTsgfQorICAgIH5SZWFsdGlt
ZU91dGdvaW5nVmlkZW9Tb3VyY2VNYWMoKSB7IH0KKworcHJpdmF0ZToKKyAgICBSZWFsdGltZU91
dGdvaW5nVmlkZW9Tb3VyY2VNYWMoUmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiYmKTsKKwor
ICAgIHZvaWQgdmlkZW9TYW1wbGVBdmFpbGFibGUoTWVkaWFTYW1wbGUmKSBmaW5hbDsKKworI2lm
ICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgIHNpemVfdCBtX251bWJlck9mRnJhbWVzIHsgMCB9
OworI2VuZGlmCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0Uo
TElCV0VCUlRDKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322672</attachid>
            <date>2017-10-04 08:08:38 -0700</date>
            <delta_ts>2017-10-04 08:51:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177869-20171004170836.patch</filename>
            <type>text/plain</type>
            <size>79548</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIyODM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjU0NjFlNWRhZjY2YjU4
N2NiNjU4MzAxNmNlZDg4YmFlNzhiOTJlZS4uMTZjYTkyMGM3NWU1NzZkMzgyMTU3YmZkODU1NjQ3
YjA4M2YxYzdhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDE3LTEwLTA0ICBBbGVq
YW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisgICAgICAgIE1ha2UgUmVhbHRp
bWVJbmNvbWluZ1ZpZGVvU291cmNlcyBhbmQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlcyBw
b3J0IGFnbm9zdGljCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzc4NjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBSZWZhY3RvciB0aGUgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlIGFuZCBSZWFsdGlt
ZU91dGdvaW5nVmlkZW9Tb3VyY2UgY2xhc3NlcywKKyAgICAgICAgbW92ZSB0aGUgbWFjIHNwZWNp
ZmljIGNvZGUgdG8gYSBkaWZmZXJlbnQgY2xhc3MuIFRoaXMgd2F5IHdlIGNhbiB1c2UgdGhlbSBm
cm9tCisgICAgICAgIG90aGVyIHBvcnRzLgorCisgICAgICAgIE5vIG5ldyBmdW5jdGlvbmFsaXR5
LCBqdXN0IGEgcmVmYWN0b3IuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAg
KiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0v
bWVkaWFzdHJlYW0vUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6OlJlYWx0aW1lSW5jb21p
bmdWaWRlb1NvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9T
b3VyY2U6OnN0YXJ0UHJvZHVjaW5nRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUlu
Y29taW5nVmlkZW9Tb3VyY2U6OnNldFNvdXJjZVRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
YWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6c3RvcFByb2R1Y2luZ0RhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlOjpjYXBhYmlsaXRpZXMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlOjpzZXR0aW5n
cyBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVJbmNvbWlu
Z1ZpZGVvU291cmNlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL21hYy9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuaC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuY3BwOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lT3V0
Z29pbmdWaWRlb1NvdXJjZS5jcHAuCisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5n
VmlkZW9Tb3VyY2U6OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVh
bHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmguCisg
ICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnZpZGVvU2FtcGxl
QXZhaWxhYmxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVJ
bmNvbWluZ1ZpZGVvU291cmNlTWFjLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuY3BwLgor
ICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTWFjOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTWFjOjpSZWFs
dGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWMpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJ
bmNvbWluZ1ZpZGVvU291cmNlTWFjOjpwaXhlbEJ1ZmZlckZyb21WaWRlb0ZyYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1hYzo6T25GcmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWM6OnByb2Nlc3NO
ZXdTYW1wbGUpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUlu
Y29taW5nVmlkZW9Tb3VyY2VNYWMuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuaC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNl
TWFjLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nVmlkZW9T
b3VyY2VNYWM6OlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZU1hYyk6CisgICAgICAgIChXZWJD
b3JlOjpSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VNYWM6OnZpZGVvU2FtcGxlQXZhaWxhYmxl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1Zp
ZGVvU291cmNlTWFjLmg6IEFkZGVkLgorCiAyMDE3LTEwLTA0ICBNaWNoYWVsIENhdGFuemFybyAg
PG1jYXRhbnphcm9AaWdhbGlhLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OKHIyMjIzOTIpOiBb
V1BFXVtHVEtdIE1hbnkgZm9ybXMgdGVzdHMgYXJlIGZhaWxpbmcgZHVlIHRvIGJyb2tlbiBldmVu
dCB0aW1lc3RhbXBzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBi
L1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDFjYzE2YzdkMWZhYmRlZjY1Nzhi
NDIyMTExZGJiNTY1ZTM5MDQ4OWQuLjhjYjVjNDQwZTBhM2VmZDlkNTg3ZGFiOTA3ZGVhYmQ3N2Zi
Y2MzMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0yNTUxLDkgKzI1NTEsMTEgQEAgc2V0KFdl
YkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3Vy
Y2VTdXBwb3J0ZWRDb25zdHJhaW50cy5jcHAKICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SVENJ
Y2VDYW5kaWRhdGVEZXNjcmlwdG9yLmNwcAogICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL1JUQ1Nl
c3Npb25EZXNjcmlwdGlvbkRlc2NyaXB0b3IuY3BwCisgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0v
UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmNwcAogICAgIHBsYXRmb3JtL21lZGlhc3RyZWFt
L1JlYWx0aW1lTWVkaWFTb3VyY2UuY3BwCiAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRp
bWVNZWRpYVNvdXJjZUNlbnRlci5jcHAKICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGlt
ZU1lZGlhU291cmNlU2V0dGluZ3MuY3BwCisgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRp
bWVPdXRnb2luZ1ZpZGVvU291cmNlLmNwcAogICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL1NEUFBy
b2Nlc3NvclNjcmlwdFJlc291cmNlLmNwcAogCiAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGli
d2VicnRjL0xpYldlYlJUQ1Byb3ZpZGVyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGIwZTc1NDk3MGIwNDBiM2M1NTBiMDcx
NzA1MDk2MWJkZGQ4NzZmMjUuLjVhYjE4ZDg3ZTU0N2ViMzQ3OTRjYWJlNTljZDY3OTkwNGNlYWY2
ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKQEAgLTI3NTQsNyArMjc1NCw5IEBACiAJCTVDRDlGNTY3MUFBMEY3NDIwMERBNDVGRiAv
KiBERkFCeXRlY29kZUNvbXBpbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1QzM5MzA1RjFBQTBGNkE5MDAyOUM4MTYgLyogREZBQnl0ZWNvZGVDb21w
aWxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTVDRDlGNTY4MUFBMEY3NDYwMERBNDVGRiAvKiBERkFCeXRlY29kZUludGVycHJldGVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzM5MzA2MTFBQTBG
NkE5MDAyOUM4MTYgLyogREZBQnl0ZWNvZGVJbnRlcnByZXRlci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTVDREQ4MzNEMUU0MzI0RDkwMDYyMUU5
MiAvKiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNERDgzM0IxRTQzMjRCQjAwNjIxRTkyIC8qIFJl
YWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5jcHAgKi87IH07CisJCTVDREQ4MzNEMUU0MzI0RDkw
MDYyMUU5MyAvKiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VNYWMuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNERDgzM0IxRTQzMjRCQjAwNjIx
RTkzIC8qIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZU1hYy5jcHAgKi87IH07CiAJCTVDREQ4
MzNFMUU0MzI0REMwMDYyMUU5MiAvKiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNERDgzMzkxRTQz
MjRCQjAwNjIxRTkyIC8qIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5jcHAgKi87IH07CisJ
CTVDREQ4MzNFMUU0MzI0REMwMDYyMUU5MyAvKiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VN
YWMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNE
RDgzMzkxRTQzMjRCQjAwNjIxRTkzIC8qIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1hYy5j
cHAgKi87IH07CiAJCTVDREQ4MzY0MUU0MzI1QTAwMDYyMUU5MiAvKiBMaWJXZWJSVENEYXRhQ2hh
bm5lbEhhbmRsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNUNERDgzM0YxRTQzMjUzRDAwNjIxRTkyIC8qIExpYldlYlJUQ0RhdGFDaGFubmVsSGFu
ZGxlci5jcHAgKi87IH07CiAJCTVDREZBNkM4MUFBNEYyREEwMEVBODc0NiAvKiBDb250ZW50RXh0
ZW5zaW9uQWN0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNUNERkE2QzcxQUE0RjJEQTAwRUE4NzQ2IC8qIENvbnRlbnRFeHRlbnNpb25BY3Rpb25z
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNUNF
NUQ5QUIxREI4OUEwMzAwQ0U3QThEIC8qIEpTVGV4dERlY29kZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNFNUQ5QTcxREI4OTlGQzAwQ0U3QThE
IC8qIEpTVGV4dERlY29kZXIuY3BwICovOyB9OwpAQCAtOTYwNiw2ICs5NjA4LDggQEAKIAkJNDFB
QkU2NzkxRDA1ODBENTAwNkQ4NjJEIC8qIENyb3NzT3JpZ2luUHJlZmxpZ2h0Q2hlY2tlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDcm9zc09yaWdpblByZWZsaWdo
dENoZWNrZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUFCRTY3QTFEMDU4
MEQ1MDA2RDg2MkQgLyogQ3Jvc3NPcmlnaW5QcmVmbGlnaHRDaGVja2VyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENyb3NzT3JpZ2luUHJlZmxpZ2h0Q2hlY2tlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUFENzUzOTFDRUY2QkNFMDBBMzE0ODYgLyogRmV0
Y2hPcHRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZldGNoT3B0aW9u
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MUIyOEIyMTFGODUxRjMyMDBGQjUy
QUMgLyogUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTWFjLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZU1hYy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk0MUIyOEIyMjFGODUxRjMyMDBGQjUyQUMgLyogUmVhbHRp
bWVJbmNvbWluZ1ZpZGVvU291cmNlTWFjLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk0MUIyQTYyNTFFRjFCRjYwMDAyQjlEN0EgLyogV2ViQXVkaW9Tb3VyY2VQcm92
aWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJBdWRpb1NvdXJjZVByb3ZpZGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxQjQ1OURBMUY0Q0FEQjkwMDAwRjZGRCAvKiBSZWFkYWJs
ZVN0cmVhbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWFkYWJsZVN0cmVh
bS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUI0NTlFRDFGNTVFQkM3MDAwMEY2
RkQgLyogUmVhZGFibGVTdHJlYW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gUmVhZGFibGVTdHJlYW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MTA3MDQsOCArMTA3MDgsMTAgQEAKIAkJNUNCQzhEQUExQUFBMzAyMjAwRTFDODAzIC8qIE1lZGlh
QWNjZXNzaWJpbGl0eVNvZnRMaW5rLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IE1lZGlhQWNjZXNzaWJpbGl0eVNvZnRMaW5rLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNUNCQzhEQUIxQUFBMzAyMjAwRTFDODAzIC8qIE1lZGlhQWNjZXNzaWJpbGl0
eVNvZnRMaW5rLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhQWNjZXNz
aWJpbGl0eVNvZnRMaW5rLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDREQ4MzM5
MUU0MzI0QkIwMDYyMUU5MiAvKiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291
cmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNERDgzMzkxRTQzMjRCQjAw
NjIxRTkzIC8qIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1hYy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWMu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Q0REODMzQTFFNDMyNEJCMDA2MjFF
OTIgLyogUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1Q0REODMzQjFFNDMyNEJCMDA2MjFFOTIgLyogUmVhbHRpbWVPdXRn
b2luZ1ZpZGVvU291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTVDREQ4MzNCMUU0MzI0QkIwMDYyMUU5MyAvKiBSZWFsdGltZU91dGdvaW5nVmlkZW9T
b3VyY2VNYWMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVhbHRp
bWVPdXRnb2luZ1ZpZGVvU291cmNlTWFjLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNUNERDgzM0MxRTQzMjRCQjAwNjIxRTkyIC8qIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJj
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWFsdGltZU91dGdvaW5nVmlk
ZW9Tb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNERDgzM0YxRTQzMjUz
RDAwNjIxRTkyIC8qIExpYldlYlJUQ0RhdGFDaGFubmVsSGFuZGxlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBMaWJXZWJSVENEYXRhQ2hhbm5lbEhhbmRsZXIuY3Bw
OyBwYXRoID0gbGlid2VicnRjL0xpYldlYlJUQ0RhdGFDaGFubmVsSGFuZGxlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDREQ4MzQwMUU0MzI1M0QwMDYyMUU5MiAvKiBMaWJX
ZWJSVENEYXRhQ2hhbm5lbEhhbmRsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gTGliV2ViUlRDRGF0YUNoYW5uZWxIYW5kbGVyLmg7IHBhdGggPSBsaWJ3ZWJydGMvTGliV2Vi
UlRDRGF0YUNoYW5uZWxIYW5kbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
NjUzNyw2ICsxNjU0Myw4IEBACiAJCQkJMDdGRkRFNjYxODFBRUQ0MjAwNzJENDA5IC8qIE1lZGlh
U3RyZWFtVHJhY2tQcml2YXRlLmNwcCAqLywKIAkJCQkwN0ZGREU2NzE4MUFFRDQyMDA3MkQ0MDkg
LyogTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUuaCAqLywKIAkJCQk1RUJCODkzODFDNzdCREE0MDBD
NjVENDEgLyogUGVlck1lZGlhRGVzY3JpcHRpb24uaCAqLywKKwkJCQk1Q0REODMzOTFFNDMyNEJC
MDA2MjFFOTIgLyogUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmNwcCAqLywKKwkJCQk1Q0RE
ODMzQTFFNDMyNEJCMDA2MjFFOTIgLyogUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmggKi8s
CiAJCQkJNEE0RjY1NkIxQUE5OTdGMTAwRTM4Q0REIC8qIFJlYWx0aW1lTWVkaWFTb3VyY2UuY3Bw
ICovLAogCQkJCTRBNEY2NTZDMUFBOTk3RjEwMEUzOENERCAvKiBSZWFsdGltZU1lZGlhU291cmNl
LmggKi8sCiAJCQkJNEE0RjY1NkQxQUE5OTdGMTAwRTM4Q0REIC8qIFJlYWx0aW1lTWVkaWFTb3Vy
Y2VDYXBhYmlsaXRpZXMuaCAqLywKQEAgLTE2NTQ2LDYgKzE2NTU0LDggQEAKIAkJCQk0QTRGNjU2
RjFBQTk5N0YxMDBFMzhDREQgLyogUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzLmggKi8sCiAJ
CQkJMkVDNDFERTIxQzA0MTBBMzAwRDI5NEZFIC8qIFJlYWx0aW1lTWVkaWFTb3VyY2VTdXBwb3J0
ZWRDb25zdHJhaW50cy5jcHAgKi8sCiAJCQkJMDdDMUMwRTQxQkZCNjBFRDAwQkQyMjU2IC8qIFJl
YWx0aW1lTWVkaWFTb3VyY2VTdXBwb3J0ZWRDb25zdHJhaW50cy5oICovLAorCQkJCTVDREQ4MzNC
MUU0MzI0QkIwMDYyMUU5MiAvKiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuY3BwICovLAor
CQkJCTVDREQ4MzNDMUU0MzI0QkIwMDYyMUU5MiAvKiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3Vy
Y2UuaCAqLywKIAkJCQkzMTM1OTEwQzFFN0REQ0I2MDBGMzA2MzAgLyogUlRDQnVuZGxlUG9saWN5
LmggKi8sCiAJCQkJMDcyMjFCQTIxN0NGMEFENDAwODQ4RTUxIC8qIFJUQ0RhdGFDaGFubmVsSGFu
ZGxlci5oICovLAogCQkJCTA3MjIxQkEzMTdDRjBBRDQwMDg0OEU1MSAvKiBSVENEYXRhQ2hhbm5l
bEhhbmRsZXJDbGllbnQuaCAqLywKQEAgLTE2NTk4LDE0ICsxNjYwOCwxMiBAQAogCQkJCTA3RUU3
NkVFMUJFQTYxOTgwMEY4OTEzMyAvKiBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5tbSAqLywK
IAkJCQk0MTEwM0FBQTFFMzk3OTBBMDA3NjlGMDMgLyogUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291
cmNlLmNwcCAqLywKIAkJCQk0MTEwM0FBOTFFMzk3OTBBMDA3NjlGMDMgLyogUmVhbHRpbWVJbmNv
bWluZ0F1ZGlvU291cmNlLmggKi8sCi0JCQkJNUNERDgzMzkxRTQzMjRCQjAwNjIxRTkyIC8qIFJl
YWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5jcHAgKi8sCi0JCQkJNUNERDgzM0ExRTQzMjRCQjAw
NjIxRTkyIC8qIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5oICovLAorCQkJCTVDREQ4MzM5
MUU0MzI0QkIwMDYyMUU5MyAvKiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWMuY3BwICov
LAogCQkJCTRBMEZGQUEzMUFBRjVFRjYwMDYyODAzQiAvKiBSZWFsdGltZU1lZGlhU291cmNlQ2Vu
dGVyTWFjLmNwcCAqLywKIAkJCQk0QTBGRkFBNDFBQUY1RUY2MDA2MjgwM0IgLyogUmVhbHRpbWVN
ZWRpYVNvdXJjZUNlbnRlck1hYy5oICovLAogCQkJCTQxMTAzQUE3MUUzOTc5MEEwMDc2OUYwMyAv
KiBSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2UuY3BwICovLAogCQkJCTQxMTAzQUE4MUUzOTc5
MEEwMDc2OUYwMyAvKiBSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2UuaCAqLywKLQkJCQk1Q0RE
ODMzQjFFNDMyNEJCMDA2MjFFOTIgLyogUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmNwcCAq
LywKLQkJCQk1Q0REODMzQzFFNDMyNEJCMDA2MjFFOTIgLyogUmVhbHRpbWVPdXRnb2luZ1ZpZGVv
U291cmNlLmggKi8sCisJCQkJNUNERDgzM0IxRTQzMjRCQjAwNjIxRTkzIC8qIFJlYWx0aW1lT3V0
Z29pbmdWaWRlb1NvdXJjZU1hYy5jcHAgKi8sCiAJCQkJMDdENjM3M0UxQkIwQjExMzAwMjU2Q0U5
IC8qIFdlYkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDLmggKi8sCiAJCQkJMDdENjM3M0YxQkIw
QjExMzAwMjU2Q0U5IC8qIFdlYkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDLm1tICovLAogCQkJ
KTsKQEAgLTMzNjM5LDYgKzMzNjQ3LDcgQEAKIAkJCQlGRDMxNjAzQjEyQjAyNjc2MDBDMUEzNTkg
LyogUmVhbHRpbWVBbmFseXNlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MTEwM0FBRTFFMzk3
OTEwMDA3NjlGMDMgLyogUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTVDREQ4MzNFMUU0MzI0REMwMDYyMUU5MiAvKiBSZWFsdGltZUluY29taW5nVmlk
ZW9Tb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNUNERDgzM0UxRTQzMjREQzAwNjIxRTkz
IC8qIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1hYy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk0QTRGNjU3MDFBQTk5N0YxMDBFMzhDREQgLyogUmVhbHRpbWVNZWRpYVNvdXJjZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk0QTBGRkFBMTFBQUY1RUEyMDA2MjgwM0IgLyogUmVhbHRpbWVNZWRp
YVNvdXJjZUNlbnRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0QTBGRkFBNTFBQUY1RUY2MDA2
MjgwM0IgLyogUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck1hYy5jcHAgaW4gU291cmNlcyAqLywK
QEAgLTMzNjQ2LDYgKzMzNjU1LDcgQEAKIAkJCQkyRUM0MURFNDFDMDQxMEEzMDBEMjk0RkUgLyog
UmVhbHRpbWVNZWRpYVNvdXJjZVN1cHBvcnRlZENvbnN0cmFpbnRzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTQxMTAzQUFCMUUzOTc5MTAwMDc2OUYwMyAvKiBSZWFsdGltZU91dGdvaW5nQXVkaW9T
b3VyY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUNERDgzM0QxRTQzMjREOTAwNjIxRTkyIC8q
IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1Q0RE
ODMzRDFFNDMyNEQ5MDA2MjFFOTMgLyogUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTWFjLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUZENDVBOTVBMTc1RDQxNzEwMEMyMUVDOCAvKiBSZWN0YW5n
bGVTaGFwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0FCNDE4MTEzRTM1NkU4MDBEOEFBRjMg
LyogUmVnaW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1NzhGNDQwMURFMEI2MzQwMDNERkM2
QSAvKiBSZWplY3RlZFByb21pc2VUcmFja2VyLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVJbmNvbWluZ1Zp
ZGVvU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0
aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWY2Mjk1MjFjZmFkOGVmNTdi
ZjRhOTY5NjQzOTRjMmQ0OGRjYWQxYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5jcHAKQEAg
LTAsMCArMSwxMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisgKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICog
ICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZWFs
dGltZUluY29taW5nVmlkZW9Tb3VyY2UuaCIKKworI2lmIFVTRShMSUJXRUJSVEMpCisKKyNpZiBQ
TEFURk9STShDT0NPQSkKKyNpbmNsdWRlICJSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWMu
aCIKKyNlbmRpZgorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK1JlZjxSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U+IFJlYWx0aW1lSW5jb21pbmdWaWRl
b1NvdXJjZTo6Y3JlYXRlKHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvVHJhY2tJbnRl
cmZhY2U+JiYgdmlkZW9UcmFjaywgU3RyaW5nJiYgdHJhY2tJZCkKK3sKKyNpZiBQTEFURk9STShD
T0NPQSkKKyAgICBhdXRvIHNvdXJjZSA9IFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1hYzo6
Y3JlYXRlKFdURk1vdmUodmlkZW9UcmFjayksIFdURk1vdmUodHJhY2tJZCkpOworI2Vsc2UKKyAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IEdUSyBzcGVjaWZpYyBvdXRnb2luZyB2aWRlbyBzb3VyY2UK
KyAgICBhdXRvIHNvdXJjZSA9IGFkb3B0UmVmKCpuZXcgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291
cmNlKFdURk1vdmUodmlkZW9UcmFjayksIFdURk1vdmUodHJhY2tJZCkpKTsKKyNlbmRpZgorICAg
IHNvdXJjZS0+c3RhcnQoKTsKKyAgICByZXR1cm4gc291cmNlOworfQorCitSZWFsdGltZUluY29t
aW5nVmlkZW9Tb3VyY2U6OlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZShydGM6OnNjb3BlZF9y
ZWZwdHI8d2VicnRjOjpWaWRlb1RyYWNrSW50ZXJmYWNlPiYmIHZpZGVvVHJhY2ssIFN0cmluZyYm
IHZpZGVvVHJhY2tJZCkKKyAgICA6IFJlYWx0aW1lTWVkaWFTb3VyY2UoV1RGTW92ZSh2aWRlb1Ry
YWNrSWQpLCBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpWaWRlbywgU3RyaW5nKCkpCisgICAg
LCBtX3ZpZGVvVHJhY2soV1RGTW92ZSh2aWRlb1RyYWNrKSkKK3sKKyAgICBtX2N1cnJlbnRTZXR0
aW5ncy5zZXRXaWR0aCg2NDApOworICAgIG1fY3VycmVudFNldHRpbmdzLnNldEhlaWdodCg0ODAp
OworICAgIG5vdGlmeU11dGVkQ2hhbmdlKCFtX3ZpZGVvVHJhY2spOworfQorCit2b2lkIFJlYWx0
aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6c3RhcnRQcm9kdWNpbmdEYXRhKCkKK3sKKyAgICBpZiAo
bV92aWRlb1RyYWNrKQorICAgICAgICBtX3ZpZGVvVHJhY2stPkFkZE9yVXBkYXRlU2luayh0aGlz
LCBydGM6OlZpZGVvU2lua1dhbnRzKCkpOworfQorCit2b2lkIFJlYWx0aW1lSW5jb21pbmdWaWRl
b1NvdXJjZTo6c2V0U291cmNlVHJhY2socnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9U
cmFja0ludGVyZmFjZT4mJiB0cmFjaykKK3sKKyAgICBBU1NFUlQoIW1fdmlkZW9UcmFjayk7Cisg
ICAgQVNTRVJUKHRyYWNrKTsKKworICAgIG1fdmlkZW9UcmFjayA9IFdURk1vdmUodHJhY2spOwor
ICAgIG5vdGlmeU11dGVkQ2hhbmdlKCFtX3ZpZGVvVHJhY2spOworICAgIGlmIChpc1Byb2R1Y2lu
Z0RhdGEoKSkKKyAgICAgICAgbV92aWRlb1RyYWNrLT5BZGRPclVwZGF0ZVNpbmsodGhpcywgcnRj
OjpWaWRlb1NpbmtXYW50cygpKTsKK30KKwordm9pZCBSZWFsdGltZUluY29taW5nVmlkZW9Tb3Vy
Y2U6OnN0b3BQcm9kdWNpbmdEYXRhKCkKK3sKKyAgICBpZiAobV92aWRlb1RyYWNrKQorICAgICAg
ICBtX3ZpZGVvVHJhY2stPlJlbW92ZVNpbmsodGhpcyk7Cit9CisKK2NvbnN0IFJlYWx0aW1lTWVk
aWFTb3VyY2VDYXBhYmlsaXRpZXMmIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6Y2FwYWJp
bGl0aWVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxp
dGllczo6ZW1wdHlDYXBhYmlsaXRpZXMoKTsKK30KKworY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJj
ZVNldHRpbmdzJiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6OnNldHRpbmdzKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9jdXJyZW50U2V0dGluZ3M7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIFVTRShMSUJXRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lSW5jb21pbmdWaWRl
b1NvdXJjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjczNzgxMmY2MDU3YTM1NzE0OGE4NmFiNjM1NjE5NjAyYThk
ZDVhYzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuaApAQCAtMCwwICsxLDc0IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogICAgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICog
ICAgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBFcmljc3NvbiBub3Ig
dGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICAgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2lmIFVTRShMSUJXRUJSVEMpCisKKyNpbmNsdWRlICJMaWJXZWJSVENN
YWNyb3MuaCIKKyNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNlLmgiCisjaW5jbHVkZSA8d2Vi
cnRjL2FwaS9tZWRpYXN0cmVhbWludGVyZmFjZS5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDYXB0dXJlRGV2aWNlOworCitjbGFz
cyBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UgOiBwdWJsaWMgUmVhbHRpbWVNZWRpYVNvdXJj
ZSwgcHJpdmF0ZSBydGM6OlZpZGVvU2lua0ludGVyZmFjZTx3ZWJydGM6OlZpZGVvRnJhbWU+IHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZT4gY3Jl
YXRlKHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvVHJhY2tJbnRlcmZhY2U+JiYsIFN0
cmluZyYmKTsKKyAgICB+UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlKCkgeyBzdG9wUHJvZHVj
aW5nRGF0YSgpOyB9CisKKyAgICB2b2lkIHNldFNvdXJjZVRyYWNrKHJ0Yzo6c2NvcGVkX3JlZnB0
cjx3ZWJydGM6OlZpZGVvVHJhY2tJbnRlcmZhY2U+JiYpOworCitwcm90ZWN0ZWQ6CisgICAgUmVh
bHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlKHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVv
VHJhY2tJbnRlcmZhY2U+JiYsIFN0cmluZyYmKTsKKworICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VT
ZXR0aW5ncyBtX2N1cnJlbnRTZXR0aW5nczsKKworcHJpdmF0ZToKKyAgICAvLyBSZWFsdGltZU1l
ZGlhU291cmNlIEFQSQorICAgIHZvaWQgc3RhcnRQcm9kdWNpbmdEYXRhKCkgZmluYWw7CisgICAg
dm9pZCBzdG9wUHJvZHVjaW5nRGF0YSgpICBmaW5hbDsKKworICAgIGNvbnN0IFJlYWx0aW1lTWVk
aWFTb3VyY2VDYXBhYmlsaXRpZXMmIGNhcGFiaWxpdGllcygpIGNvbnN0IGZpbmFsOworICAgIGNv
bnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyYgc2V0dGluZ3MoKSBjb25zdCBmaW5hbDsK
KworICAgIGJvb2wgYXBwbHlTaXplKGNvbnN0IEludFNpemUmKSBmaW5hbCB7IHJldHVybiB0cnVl
OyB9CisKKyAgICAvLyBydGM6OlZpZGVvU2lua0ludGVyZmFjZQorICAgIHZvaWQgT25GcmFtZShj
b25zdCB3ZWJydGM6OlZpZGVvRnJhbWUmKSBvdmVycmlkZSB7IH07CisKKyAgICBydGM6OnNjb3Bl
ZF9yZWZwdHI8d2VicnRjOjpWaWRlb1RyYWNrSW50ZXJmYWNlPiBtX3ZpZGVvVHJhY2s7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoTElCV0VCUlRDKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVPdXRn
b2luZ1ZpZGVvU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmRlNWIxMmE4ZWZl
ODRiNmJhNWJmMjhlY2MzN2FlYzFkOTEzZWE1NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5j
cHAKQEAgLTAsMCArMSwyMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkLCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIHJlcXVpcmVkIHRvIGJl
IG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBu
YW1lIG9mIEFwcGxlIEluYy4gbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAq
ICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVPdXRnb2luZ1Zp
ZGVvU291cmNlLmgiCisKKyNpZiBVU0UoTElCV0VCUlRDKQorCisjaW5jbHVkZSAiTG9nZ2luZy5o
IgorI2luY2x1ZGUgPHdlYnJ0Yy9hcGkvdmlkZW8vaTQyMF9idWZmZXIuaD4KKyNpbmNsdWRlIDx3
ZWJydGMvY29tbW9uX3ZpZGVvL2xpYnl1di9pbmNsdWRlL3dlYnJ0Y19saWJ5dXYuaD4KKyNpbmNs
dWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorCisj
aWYgUExBVEZPUk0oQ09DT0EpCisjaW5jbHVkZSAiUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNl
TWFjLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWY8UmVhbHRpbWVPdXRn
b2luZ1ZpZGVvU291cmNlPiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OmNyZWF0ZShSZWY8
TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYgdmlkZW9Tb3VyY2UpCit7CisjaWYgUExBVEZPUk0o
Q09DT0EpCisgICAgcmV0dXJuIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZU1hYzo6Y3JlYXRl
KFdURk1vdmUodmlkZW9Tb3VyY2UpKTsKKyNlbHNlCisgICAgLy8gRklYTUU6IEltcGxlbWVudCBH
VEsgc3BlY2lmaWMgb3V0Z29pbmcgdmlkZW8gc291cmNlLgorICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZShXVEZNb3ZlKHZpZGVvU291cmNlKSkpOwor
I2VuZGlmCit9CisKK1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6UmVhbHRpbWVPdXRnb2lu
Z1ZpZGVvU291cmNlKFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4mJiB2aWRlb1NvdXJjZSkK
KyAgICA6IG1fdmlkZW9Tb3VyY2UoV1RGTW92ZSh2aWRlb1NvdXJjZSkpCisgICAgLCBtX2JsYWNr
RnJhbWVUaW1lcigqdGhpcywgJlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6c2VuZE9uZUJs
YWNrRnJhbWUpCit7CisgICAgbV92aWRlb1NvdXJjZS0+YWRkT2JzZXJ2ZXIoKnRoaXMpOworICAg
IGluaXRpYWxpemVGcm9tU291cmNlKCk7Cit9CisKK2Jvb2wgUmVhbHRpbWVPdXRnb2luZ1ZpZGVv
U291cmNlOjpzZXRTb3VyY2UoUmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiYmIG5ld1NvdXJj
ZSkKK3sKKyAgICBpZiAoIW1faW5pdGlhbFNldHRpbmdzKQorICAgICAgICBtX2luaXRpYWxTZXR0
aW5ncyA9IG1fdmlkZW9Tb3VyY2UtPnNvdXJjZSgpLnNldHRpbmdzKCk7CisKKyAgICBtX3ZpZGVv
U291cmNlLT5yZW1vdmVPYnNlcnZlcigqdGhpcyk7CisgICAgbV92aWRlb1NvdXJjZSA9IFdURk1v
dmUobmV3U291cmNlKTsKKyAgICBtX3ZpZGVvU291cmNlLT5hZGRPYnNlcnZlcigqdGhpcyk7CisK
KyAgICBpbml0aWFsaXplRnJvbVNvdXJjZSgpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Zv
aWQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpzdG9wKCkKK3sKKyAgICBtX3ZpZGVvU291
cmNlLT5yZW1vdmVPYnNlcnZlcigqdGhpcyk7CisgICAgbV9ibGFja0ZyYW1lVGltZXIuc3RvcCgp
OworICAgIG1faXNTdG9wcGVkID0gdHJ1ZTsKK30KKwordm9pZCBSZWFsdGltZU91dGdvaW5nVmlk
ZW9Tb3VyY2U6OnVwZGF0ZUJsYWNrRnJhbWVzU2VuZGluZygpCit7CisgICAgaWYgKCFtX211dGVk
ICYmIG1fZW5hYmxlZCkgeworICAgICAgICBpZiAobV9ibGFja0ZyYW1lVGltZXIuaXNBY3RpdmUo
KSkKKyAgICAgICAgICAgIG1fYmxhY2tGcmFtZVRpbWVyLnN0b3AoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIHNlbmRCbGFja0ZyYW1lc0lmTmVlZGVkKCk7Cit9CisKK3ZvaWQgUmVh
bHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpzb3VyY2VNdXRlZENoYW5nZWQoKQoreworICAgIEFT
U0VSVChtX211dGVkICE9IG1fdmlkZW9Tb3VyY2UtPm11dGVkKCkpOworCisgICAgbV9tdXRlZCA9
IG1fdmlkZW9Tb3VyY2UtPm11dGVkKCk7CisKKyAgICB1cGRhdGVCbGFja0ZyYW1lc1NlbmRpbmco
KTsKK30KKwordm9pZCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnNvdXJjZUVuYWJsZWRD
aGFuZ2VkKCkKK3sKKyAgICBBU1NFUlQobV9lbmFibGVkICE9IG1fdmlkZW9Tb3VyY2UtPmVuYWJs
ZWQoKSk7CisKKyAgICBtX2VuYWJsZWQgPSBtX3ZpZGVvU291cmNlLT5lbmFibGVkKCk7CisKKyAg
ICB1cGRhdGVCbGFja0ZyYW1lc1NlbmRpbmcoKTsKK30KKwordm9pZCBSZWFsdGltZU91dGdvaW5n
VmlkZW9Tb3VyY2U6OmluaXRpYWxpemVGcm9tU291cmNlKCkKK3sKKyAgICBjb25zdCBhdXRvJiBz
ZXR0aW5ncyA9IG1fdmlkZW9Tb3VyY2UtPnNvdXJjZSgpLnNldHRpbmdzKCk7CisgICAgbV93aWR0
aCA9IHNldHRpbmdzLndpZHRoKCk7CisgICAgbV9oZWlnaHQgPSBzZXR0aW5ncy5oZWlnaHQoKTsK
KworICAgIG1fbXV0ZWQgPSBtX3ZpZGVvU291cmNlLT5tdXRlZCgpOworICAgIG1fZW5hYmxlZCA9
IG1fdmlkZW9Tb3VyY2UtPmVuYWJsZWQoKTsKKworICAgIHVwZGF0ZUJsYWNrRnJhbWVzU2VuZGlu
ZygpOworfQorCitib29sIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6R2V0U3RhdHMoU3Rh
dHMqKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBSZWFsdGltZU91dGdvaW5nVmlk
ZW9Tb3VyY2U6OkFkZE9yVXBkYXRlU2luayhydGM6OlZpZGVvU2lua0ludGVyZmFjZTx3ZWJydGM6
OlZpZGVvRnJhbWU+KiBzaW5rLCBjb25zdCBydGM6OlZpZGVvU2lua1dhbnRzJiBzaW5rV2FudHMp
Cit7CisgICAgQVNTRVJUKCFzaW5rV2FudHMuYmxhY2tfZnJhbWVzKTsKKworICAgIGlmIChzaW5r
V2FudHMucm90YXRpb25fYXBwbGllZCkKKyAgICAgICAgbV9zaG91bGRBcHBseVJvdGF0aW9uID0g
dHJ1ZTsKKworICAgIGlmICghbV9zaW5rcy5jb250YWlucyhzaW5rKSkKKyAgICAgICAgbV9zaW5r
cy5hcHBlbmQoc2luayk7CisKKyAgICBjYWxsT25NYWluVGhyZWFkKFtwcm90ZWN0ZWRUaGlzID0g
bWFrZVJlZigqdGhpcyldKCkgeworICAgICAgICBwcm90ZWN0ZWRUaGlzLT5zZW5kQmxhY2tGcmFt
ZXNJZk5lZWRlZCgpOworICAgIH0pOworfQorCit2b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1Nv
dXJjZTo6UmVtb3ZlU2luayhydGM6OlZpZGVvU2lua0ludGVyZmFjZTx3ZWJydGM6OlZpZGVvRnJh
bWU+KiBzaW5rKQoreworICAgIG1fc2lua3MucmVtb3ZlRmlyc3Qoc2luayk7CisKKyAgICBpZiAo
bV9zaW5rcy5zaXplKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNhbGxPbk1haW5UaHJlYWQo
W3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0oKSB7CisgICAgICAgIGlmIChwcm90ZWN0
ZWRUaGlzLT5tX2JsYWNrRnJhbWVUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICAgICAgcHJvdGVj
dGVkVGhpcy0+bV9ibGFja0ZyYW1lVGltZXIuc3RvcCgpOworICAgIH0pOworfQorCit2b2lkIFJl
YWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6c2VuZEJsYWNrRnJhbWVzSWZOZWVkZWQoKQorewor
ICAgIGlmIChtX2JsYWNrRnJhbWVUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAoIW1fc2lua3Muc2l6ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1f
bXV0ZWQgJiYgbV9lbmFibGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fd2lkdGgg
fHwgIW1faGVpZ2h0KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fYmxhY2tGcmFtZSkg
eworICAgICAgICBhdXRvIHdpZHRoID0gbV93aWR0aDsKKyAgICAgICAgYXV0byBoZWlnaHQgPSBt
X2hlaWdodDsKKyAgICAgICAgaWYgKG1fc2hvdWxkQXBwbHlSb3RhdGlvbiAmJiAobV9jdXJyZW50
Um90YXRpb24gPT0gd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8wIHx8IG1fY3VycmVudFJvdGF0aW9u
ID09IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fOTApKQorICAgICAgICAgICAgc3RkOjpzd2FwKHdp
ZHRoLCBoZWlnaHQpOworICAgICAgICBhdXRvIGZyYW1lID0gbV9idWZmZXJQb29sLkNyZWF0ZUJ1
ZmZlcih3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgQVNTRVJUKGZyYW1lKTsKKyAgICAgICAgaWYg
KCFmcmFtZSkgeworICAgICAgICAgICAgUkVMRUFTRV9MT0coV2ViUlRDLCAiUmVhbHRpbWVPdXRn
b2luZ1ZpZGVvU291cmNlOjpzZW5kQmxhY2tGcmFtZXNJZk5lZWRlZCB1bmFibGUgdG8gc2VuZCBi
bGFjayBmcmFtZXMiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB3
ZWJydGM6Okk0MjBCdWZmZXI6OlNldEJsYWNrKGZyYW1lLmdldCgpKTsKKyAgICAgICAgbV9ibGFj
a0ZyYW1lID0gV1RGTW92ZShmcmFtZSk7CisgICAgfQorICAgIHNlbmRPbmVCbGFja0ZyYW1lKCk7
CisgICAgbV9ibGFja0ZyYW1lVGltZXIuc3RhcnRSZXBlYXRpbmcoMV9zKTsKK30KKwordm9pZCBS
ZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnNlbmRPbmVCbGFja0ZyYW1lKCkKK3sKKyAgICBS
RUxFQVNFX0xPRyhNZWRpYVN0cmVhbSwgIlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6c2Vu
ZE9uZUJsYWNrRnJhbWUiKTsKKyAgICBzZW5kRnJhbWUocnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0
Yzo6VmlkZW9GcmFtZUJ1ZmZlcj4obV9ibGFja0ZyYW1lKSk7Cit9CisKK3ZvaWQgUmVhbHRpbWVP
dXRnb2luZ1ZpZGVvU291cmNlOjpzZW5kRnJhbWUocnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6
VmlkZW9GcmFtZUJ1ZmZlcj4mJiBidWZmZXIpCit7CisgICAgaW50NjRfdCB0aW1lc3RhbXBNaWNy
b1NlY29uZHMgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWVNUygpICogMTAwMDsKKyAgICB3
ZWJydGM6OlZpZGVvRnJhbWUgZnJhbWUoYnVmZmVyLCBtX3Nob3VsZEFwcGx5Um90YXRpb24gPyB3
ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzAgOiBtX2N1cnJlbnRSb3RhdGlvbiwgdGltZXN0YW1wTWlj
cm9TZWNvbmRzKTsKKyAgICBmb3IgKGF1dG8qIHNpbmsgOiBtX3NpbmtzKQorICAgICAgICBzaW5r
LT5PbkZyYW1lKGZyYW1lKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gVVNFKExJQldFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZTk1NGEyMGU1MjYwYzM4NzVmOWI3MWUyNTg5MTQwM2I5ZWZlYzZmNAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lT3V0
Z29pbmdWaWRlb1NvdXJjZS5oCkBAIC0wLDAgKzEsMTE3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE3IEFwcGxlIEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSByZXF1aXJlZCB0byBiZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAz
LiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YKKyAqICAg
ICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoTElCV0VCUlRD
KQorCisjaW5jbHVkZSAiTGliV2ViUlRDTWFjcm9zLmgiCisjaW5jbHVkZSAiTWVkaWFTdHJlYW1U
cmFja1ByaXZhdGUuaCIKKyNpbmNsdWRlIDxUaW1lci5oPgorI2luY2x1ZGUgPHdlYnJ0Yy9hcGkv
bWVkaWFzdHJlYW1pbnRlcmZhY2UuaD4KKyNpbmNsdWRlIDx3ZWJydGMvYmFzZS9vcHRpb25hbC5o
PgorI2luY2x1ZGUgPHdlYnJ0Yy9jb21tb25fdmlkZW8vaW5jbHVkZS9pNDIwX2J1ZmZlcl9wb29s
Lmg+CisjaW5jbHVkZSA8d2VicnRjL21lZGlhL2Jhc2UvdmlkZW9zaW5raW50ZXJmYWNlLmg+Cisj
aW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3Vu
dGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVhbHRpbWVPdXRnb2luZ1Zp
ZGVvU291cmNlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFJlYWx0aW1lT3V0Z29pbmdW
aWRlb1NvdXJjZT4sIHB1YmxpYyB3ZWJydGM6OlZpZGVvVHJhY2tTb3VyY2VJbnRlcmZhY2UsIHBy
aXZhdGUgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6Ok9ic2VydmVyIHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgUmVmPFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZT4gY3JlYXRlKFJlZjxNZWRpYVN0
cmVhbVRyYWNrUHJpdmF0ZT4mJiB2aWRlb1NvdXJjZSk7CisgICAgflJlYWx0aW1lT3V0Z29pbmdW
aWRlb1NvdXJjZSgpIHsgc3RvcCgpOyB9CisKKyAgICB2b2lkIHN0b3AoKTsKKyAgICBib29sIHNl
dFNvdXJjZShSZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYpOworICAgIE1lZGlhU3RyZWFt
VHJhY2tQcml2YXRlJiBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3ZpZGVvU291cmNlLmdldCgp
OyB9CisKKyAgICBpbnQgQWRkUmVmKCkgY29uc3QgZmluYWwgeyByZWYoKTsgcmV0dXJuIHJlZkNv
dW50KCk7IH0KKyAgICBpbnQgUmVsZWFzZSgpIGNvbnN0IGZpbmFsIHsgZGVyZWYoKTsgcmV0dXJu
IHJlZkNvdW50KCk7IH0KKworICAgIHZvaWQgc2V0QXBwbHlSb3RhdGlvbihib29sIHNob3VsZEFw
cGx5Um90YXRpb24pIHsgbV9zaG91bGRBcHBseVJvdGF0aW9uID0gc2hvdWxkQXBwbHlSb3RhdGlv
bjsgfQorCitwcm90ZWN0ZWQ6CisgICAgZXhwbGljaXQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291
cmNlKFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4mJik7CisKKyAgICB2b2lkIHNlbmRGcmFt
ZShydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb0ZyYW1lQnVmZmVyPiYmKTsKKworICAg
IFZlY3RvcjxydGM6OlZpZGVvU2lua0ludGVyZmFjZTx3ZWJydGM6OlZpZGVvRnJhbWU+Kj4gbV9z
aW5rczsKKyAgICB3ZWJydGM6Okk0MjBCdWZmZXJQb29sIG1fYnVmZmVyUG9vbDsKKworICAgIGJv
b2wgbV9lbmFibGVkIHsgdHJ1ZSB9OworICAgIGJvb2wgbV9tdXRlZCB7IGZhbHNlIH07CisgICAg
dWludDMyX3QgbV93aWR0aCB7IDAgfTsKKyAgICB1aW50MzJfdCBtX2hlaWdodCB7IDAgfTsKKyAg
ICBib29sIG1fc2hvdWxkQXBwbHlSb3RhdGlvbiB7IGZhbHNlIH07CisgICAgd2VicnRjOjpWaWRl
b1JvdGF0aW9uIG1fY3VycmVudFJvdGF0aW9uIHsgd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8wIH07
CisKK3ByaXZhdGU6CisgICAgdm9pZCBzZW5kQmxhY2tGcmFtZXNJZk5lZWRlZCgpOworICAgIHZv
aWQgc2VuZE9uZUJsYWNrRnJhbWUoKTsKKyAgICB2b2lkIGluaXRpYWxpemVGcm9tU291cmNlKCk7
CisgICAgdm9pZCB1cGRhdGVCbGFja0ZyYW1lc1NlbmRpbmcoKTsKKworICAgIC8vIE5vdGlmaWVy
IEFQSQorICAgIHZvaWQgUmVnaXN0ZXJPYnNlcnZlcih3ZWJydGM6Ok9ic2VydmVySW50ZXJmYWNl
KikgZmluYWwgeyB9CisgICAgdm9pZCBVbnJlZ2lzdGVyT2JzZXJ2ZXIod2VicnRjOjpPYnNlcnZl
ckludGVyZmFjZSopIGZpbmFsIHsgfQorCisgICAgLy8gVmlkZW9UcmFja1NvdXJjZUludGVyZmFj
ZSBBUEkKKyAgICBib29sIGlzX3NjcmVlbmNhc3QoKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxz
ZTsgfQorICAgIHJ0Yzo6T3B0aW9uYWw8Ym9vbD4gbmVlZHNfZGVub2lzaW5nKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gcnRjOjpPcHRpb25hbDxib29sPigpOyB9CisgICAgYm9vbCBHZXRTdGF0cyhT
dGF0cyopIGZpbmFsOworCisgICAgLy8gTWVkaWFTb3VyY2VJbnRlcmZhY2UgQVBJCisgICAgU291
cmNlU3RhdGUgc3RhdGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBTb3VyY2VTdGF0ZSgpOyB9Cisg
ICAgYm9vbCByZW1vdGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CisKKyAgICAvLyBy
dGM6OlZpZGVvU291cmNlSW50ZXJmYWNlPHdlYnJ0Yzo6VmlkZW9GcmFtZT4gQVBJCisgICAgdm9p
ZCBBZGRPclVwZGF0ZVNpbmsocnRjOjpWaWRlb1NpbmtJbnRlcmZhY2U8d2VicnRjOjpWaWRlb0Zy
YW1lPiosIGNvbnN0IHJ0Yzo6VmlkZW9TaW5rV2FudHMmKSBmaW5hbDsKKyAgICB2b2lkIFJlbW92
ZVNpbmsocnRjOjpWaWRlb1NpbmtJbnRlcmZhY2U8d2VicnRjOjpWaWRlb0ZyYW1lPiopIGZpbmFs
OworCisgICAgdm9pZCBzb3VyY2VNdXRlZENoYW5nZWQoKTsKKyAgICB2b2lkIHNvdXJjZUVuYWJs
ZWRDaGFuZ2VkKCk7CisgICAgdmlydHVhbCB2b2lkIHZpZGVvU2FtcGxlQXZhaWxhYmxlKE1lZGlh
U2FtcGxlJikgeyB9OworCisgICAgLy8gTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6Ok9ic2VydmVy
IEFQSQorICAgIHZvaWQgdHJhY2tNdXRlZENoYW5nZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUm
KSBmaW5hbCB7IHNvdXJjZU11dGVkQ2hhbmdlZCgpOyB9CisgICAgdm9pZCB0cmFja0VuYWJsZWRD
aGFuZ2VkKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJikgZmluYWwgeyBzb3VyY2VFbmFibGVkQ2hh
bmdlZCgpOyB9CisgICAgdm9pZCB0cmFja1NldHRpbmdzQ2hhbmdlZChNZWRpYVN0cmVhbVRyYWNr
UHJpdmF0ZSYpIGZpbmFsIHsgaW5pdGlhbGl6ZUZyb21Tb3VyY2UoKTsgfQorICAgIHZvaWQgc2Ft
cGxlQnVmZmVyVXBkYXRlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYsIE1lZGlhU2FtcGxlJiBz
YW1wbGUpIGZpbmFsIHsgdmlkZW9TYW1wbGVBdmFpbGFibGUoc2FtcGxlKTsgfQorICAgIHZvaWQg
dHJhY2tFbmRlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYpIGZpbmFsIHsgfQorCisgICAgUmVm
PE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiBtX3ZpZGVvU291cmNlOworICAgIHN0ZDo6b3B0aW9u
YWw8UmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzPiBtX2luaXRpYWxTZXR0aW5nczsKKyAgICBi
b29sIG1faXNTdG9wcGVkIHsgZmFsc2UgfTsKKyAgICBUaW1lciBtX2JsYWNrRnJhbWVUaW1lcjsK
KyAgICBydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb0ZyYW1lQnVmZmVyPiBtX2JsYWNr
RnJhbWU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoTElC
V0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
bWFjL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzI2MThkNjk1Mjc2M2ZlN2Q3YzRiNmI4Y2U0Zjlj
ZGMxODI3YTM3MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVJbmNvbWlu
Z1ZpZGVvU291cmNlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIwNiArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogICAgaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAg
ZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotICogICAgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
LSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNl
LmgiCi0KLSNpZiBVU0UoTElCV0VCUlRDKQotCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1
ZGUgIk1lZGlhU2FtcGxlQVZGT2JqQy5oIgotI2luY2x1ZGUgPHdlYnJ0Yy9zZGsvb2JqYy9GcmFt
ZXdvcmsvQ2xhc3Nlcy9WaWRlby9jb3JldmlkZW9fZnJhbWVfYnVmZmVyLmg+Ci0KLSNpbmNsdWRl
ICJDb3JlTWVkaWFTb2Z0TGluay5oIgotI2luY2x1ZGUgIkNvcmVWaWRlb1NvZnRMaW5rLmgiCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUmVmPFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZT4g
UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlOjpjcmVhdGUocnRjOjpzY29wZWRfcmVmcHRyPHdl
YnJ0Yzo6VmlkZW9UcmFja0ludGVyZmFjZT4mJiB2aWRlb1RyYWNrLCBTdHJpbmcmJiB0cmFja0lk
KQotewotICAgIGF1dG8gc291cmNlID0gYWRvcHRSZWYoKm5ldyBSZWFsdGltZUluY29taW5nVmlk
ZW9Tb3VyY2UoV1RGTW92ZSh2aWRlb1RyYWNrKSwgV1RGTW92ZSh0cmFja0lkKSkpOwotICAgIHNv
dXJjZS0+c3RhcnQoKTsKLSAgICByZXR1cm4gc291cmNlOwotfQotCi1SZWFsdGltZUluY29taW5n
VmlkZW9Tb3VyY2U6OlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZShydGM6OnNjb3BlZF9yZWZw
dHI8d2VicnRjOjpWaWRlb1RyYWNrSW50ZXJmYWNlPiYmIHZpZGVvVHJhY2ssIFN0cmluZyYmIHZp
ZGVvVHJhY2tJZCkKLSAgICA6IFJlYWx0aW1lTWVkaWFTb3VyY2UoV1RGTW92ZSh2aWRlb1RyYWNr
SWQpLCBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpWaWRlbywgU3RyaW5nKCkpCi0gICAgLCBt
X3ZpZGVvVHJhY2soV1RGTW92ZSh2aWRlb1RyYWNrKSkKLXsKLSAgICBtX2N1cnJlbnRTZXR0aW5n
cy5zZXRXaWR0aCg2NDApOwotICAgIG1fY3VycmVudFNldHRpbmdzLnNldEhlaWdodCg0ODApOwot
ICAgIG5vdGlmeU11dGVkQ2hhbmdlKCFtX3ZpZGVvVHJhY2spOwotfQotCi12b2lkIFJlYWx0aW1l
SW5jb21pbmdWaWRlb1NvdXJjZTo6c3RhcnRQcm9kdWNpbmdEYXRhKCkKLXsKLSAgICBpZiAobV92
aWRlb1RyYWNrKQotICAgICAgICBtX3ZpZGVvVHJhY2stPkFkZE9yVXBkYXRlU2luayh0aGlzLCBy
dGM6OlZpZGVvU2lua1dhbnRzKCkpOwotfQotCi12b2lkIFJlYWx0aW1lSW5jb21pbmdWaWRlb1Nv
dXJjZTo6c2V0U291cmNlVHJhY2socnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9UcmFj
a0ludGVyZmFjZT4mJiB0cmFjaykKLXsKLSAgICBBU1NFUlQoIW1fdmlkZW9UcmFjayk7Ci0gICAg
QVNTRVJUKHRyYWNrKTsKLQotICAgIG1fdmlkZW9UcmFjayA9IFdURk1vdmUodHJhY2spOwotICAg
IG5vdGlmeU11dGVkQ2hhbmdlKCFtX3ZpZGVvVHJhY2spOwotICAgIGlmIChpc1Byb2R1Y2luZ0Rh
dGEoKSkKLSAgICAgICAgbV92aWRlb1RyYWNrLT5BZGRPclVwZGF0ZVNpbmsodGhpcywgcnRjOjpW
aWRlb1NpbmtXYW50cygpKTsKLX0KLQotdm9pZCBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6
OnN0b3BQcm9kdWNpbmdEYXRhKCkKLXsKLSAgICBpZiAobV92aWRlb1RyYWNrKQotICAgICAgICBt
X3ZpZGVvVHJhY2stPlJlbW92ZVNpbmsodGhpcyk7Ci19Ci0KLUNWUGl4ZWxCdWZmZXJSZWYgUmVh
bHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlOjpwaXhlbEJ1ZmZlckZyb21WaWRlb0ZyYW1lKGNvbnN0
IHdlYnJ0Yzo6VmlkZW9GcmFtZSYgZnJhbWUpCi17Ci0gICAgaWYgKG11dGVkKCkpIHsKLSAgICAg
ICAgaWYgKCFtX2JsYWNrRnJhbWUgfHwgbV9ibGFja0ZyYW1lV2lkdGggIT0gZnJhbWUud2lkdGgo
KSB8fCBtX2JsYWNrRnJhbWVIZWlnaHQgIT0gZnJhbWUuaGVpZ2h0KCkpIHsKLSAgICAgICAgICAg
IENWUGl4ZWxCdWZmZXJSZWYgcGl4ZWxCdWZmZXIgPSBudWxscHRyOwotICAgICAgICAgICAgYXV0
byBzdGF0dXMgPSBDVlBpeGVsQnVmZmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGZyYW1l
LndpZHRoKCksIGZyYW1lLmhlaWdodCgpLCBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyOFBs
YW5hciwgbnVsbHB0ciwgJnBpeGVsQnVmZmVyKTsKLSAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQo
c3RhdHVzLCBzdGF0dXMgPT0gbm9FcnIpOwotCi0gICAgICAgICAgICBtX2JsYWNrRnJhbWUgPSBw
aXhlbEJ1ZmZlcjsKLSAgICAgICAgICAgIG1fYmxhY2tGcmFtZVdpZHRoID0gZnJhbWUud2lkdGgo
KTsKLSAgICAgICAgICAgIG1fYmxhY2tGcmFtZUhlaWdodCA9IGZyYW1lLmhlaWdodCgpOwotCi0g
ICAgICAgICAgICBzdGF0dXMgPSBDVlBpeGVsQnVmZmVyTG9ja0Jhc2VBZGRyZXNzKHBpeGVsQnVm
ZmVyLCAwKTsKLSAgICAgICAgICAgIEFTU0VSVChzdGF0dXMgPT0gbm9FcnIpOwotICAgICAgICAg
ICAgdm9pZCogZGF0YSA9IENWUGl4ZWxCdWZmZXJHZXRCYXNlQWRkcmVzcyhwaXhlbEJ1ZmZlcik7
Ci0gICAgICAgICAgICBzaXplX3QgeUxlbmd0aCA9IGZyYW1lLndpZHRoKCkgKiBmcmFtZS5oZWln
aHQoKTsKLSAgICAgICAgICAgIG1lbXNldChkYXRhLCAwLCB5TGVuZ3RoKTsKLSAgICAgICAgICAg
IG1lbXNldChzdGF0aWNfY2FzdDx1aW50OF90Kj4oZGF0YSkgKyB5TGVuZ3RoLCAxMjgsIHlMZW5n
dGggLyAyKTsKLQotICAgICAgICAgICAgc3RhdHVzID0gQ1ZQaXhlbEJ1ZmZlclVubG9ja0Jhc2VB
ZGRyZXNzKHBpeGVsQnVmZmVyLCAwKTsKLSAgICAgICAgICAgIEFTU0VSVCghc3RhdHVzKTsKLSAg
ICAgICAgfQotICAgICAgICByZXR1cm4gbV9ibGFja0ZyYW1lLmdldCgpOwotICAgIH0KLSAgICBh
dXRvIGJ1ZmZlciA9IGZyYW1lLnZpZGVvX2ZyYW1lX2J1ZmZlcigpOwotICAgIEFTU0VSVChidWZm
ZXItPnR5cGUoKSA9PSB3ZWJydGM6OlZpZGVvRnJhbWVCdWZmZXI6OlR5cGU6OmtOYXRpdmUpOwot
ICAgIHJldHVybiBzdGF0aWNfY2FzdDx3ZWJydGM6OkNvcmVWaWRlb0ZyYW1lQnVmZmVyJj4oKmJ1
ZmZlcikucGl4ZWxfYnVmZmVyKCk7Ci19Ci0KLXZvaWQgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291
cmNlOjpPbkZyYW1lKGNvbnN0IHdlYnJ0Yzo6VmlkZW9GcmFtZSYgZnJhbWUpCi17Ci0gICAgaWYg
KCFpc1Byb2R1Y2luZ0RhdGEoKSkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgIVJFTEVBU0VfTE9H
X0RJU0FCTEVECi0gICAgaWYgKCEoKyttX251bWJlck9mRnJhbWVzICUgMzApKQotICAgICAgICBS
RUxFQVNFX0xPRyhNZWRpYVN0cmVhbSwgIlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6T25G
cmFtZSAlenUgZnJhbWUiLCBtX251bWJlck9mRnJhbWVzKTsKLSNlbmRpZgotCi0gICAgYXV0byBw
aXhlbEJ1ZmZlciA9IHBpeGVsQnVmZmVyRnJvbVZpZGVvRnJhbWUoZnJhbWUpOwotCi0gICAgLy8g
RklYTUU6IENvbnZlcnQgdGltaW5nIGluZm9ybWF0aW9uIGZyb20gVmlkZW9GcmFtZSB0byBDTVNh
bXBsZVRpbWluZ0luZm8uCi0gICAgLy8gRm9yIHRoZSBtb21lbnQsIHdlIHdpbGwgcHJldGVuZCB0
aGF0IGZyYW1lcyBzaG91bGQgYmUgcmVuZGVyZWQgYXNhcC4KLSAgICBDTVNhbXBsZVRpbWluZ0lu
Zm8gdGltaW5nSW5mbzsKLSAgICB0aW1pbmdJbmZvLnByZXNlbnRhdGlvblRpbWVTdGFtcCA9IGtD
TVRpbWVJbnZhbGlkOwotICAgIHRpbWluZ0luZm8uZGVjb2RlVGltZVN0YW1wID0ga0NNVGltZUlu
dmFsaWQ7Ci0gICAgdGltaW5nSW5mby5kdXJhdGlvbiA9IGtDTVRpbWVJbnZhbGlkOwotCi0gICAg
Q01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uUmVmIGZvcm1hdERlc2NyaXB0aW9uOwotICAgIE9TU3Rh
dHVzIG9zdGF0dXMgPSBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25DcmVhdGVGb3JJbWFnZUJ1ZmZl
cihrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAoQ1ZJbWFnZUJ1ZmZlclJlZilwaXhlbEJ1ZmZlciwgJmZv
cm1hdERlc2NyaXB0aW9uKTsKLSAgICBpZiAob3N0YXR1cyAhPSBub0VycikgewotICAgICAgICBM
T0dfRVJST1IoIkZhaWxlZCB0byBpbml0aWFsaXplIENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbjog
JWQiLCBzdGF0aWNfY2FzdDxpbnQ+KG9zdGF0dXMpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIENNU2FtcGxlQnVmZmVyUmVmIHNhbXBsZUJ1ZmZlcjsKLSAgICBvc3RhdHVzID0gQ01T
YW1wbGVCdWZmZXJDcmVhdGVSZWFkeVdpdGhJbWFnZUJ1ZmZlcihrQ0ZBbGxvY2F0b3JEZWZhdWx0
LCAoQ1ZJbWFnZUJ1ZmZlclJlZilwaXhlbEJ1ZmZlciwgZm9ybWF0RGVzY3JpcHRpb24sICZ0aW1p
bmdJbmZvLCAmc2FtcGxlQnVmZmVyKTsKLSAgICBpZiAob3N0YXR1cyAhPSBub0VycikgewotICAg
ICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgdGhlIHNhbXBsZSBidWZmZXI6ICVkIiwg
c3RhdGljX2Nhc3Q8aW50Pihvc3RhdHVzKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
Q0ZSZWxlYXNlKGZvcm1hdERlc2NyaXB0aW9uKTsKLQotICAgIGF1dG8gc2FtcGxlID0gYWRvcHRD
RihzYW1wbGVCdWZmZXIpOwotCi0gICAgQ0ZBcnJheVJlZiBhdHRhY2htZW50c0FycmF5ID0gQ01T
YW1wbGVCdWZmZXJHZXRTYW1wbGVBdHRhY2htZW50c0FycmF5KHNhbXBsZUJ1ZmZlciwgdHJ1ZSk7
Ci0gICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwgQ0ZBcnJheUdldENvdW50KGF0dGFjaG1lbnRz
QXJyYXkpOyArK2kpIHsKLSAgICAgICAgQ0ZNdXRhYmxlRGljdGlvbmFyeVJlZiBhdHRhY2htZW50
cyA9IChDRk11dGFibGVEaWN0aW9uYXJ5UmVmKUNGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoYXR0YWNo
bWVudHNBcnJheSwgaSk7Ci0gICAgICAgIENGRGljdGlvbmFyeVNldFZhbHVlKGF0dGFjaG1lbnRz
LCBrQ01TYW1wbGVBdHRhY2htZW50S2V5X0Rpc3BsYXlJbW1lZGlhdGVseSwga0NGQm9vbGVhblRy
dWUpOwotICAgIH0KLQotICAgIHVuc2lnbmVkIHdpZHRoID0gZnJhbWUud2lkdGgoKTsKLSAgICB1
bnNpZ25lZCBoZWlnaHQgPSBmcmFtZS5oZWlnaHQoKTsKLQotICAgIE1lZGlhU2FtcGxlOjpWaWRl
b1JvdGF0aW9uIHJvdGF0aW9uOwotICAgIHN3aXRjaCAoZnJhbWUucm90YXRpb24oKSkgewotICAg
IGNhc2Ugd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8wOgotICAgICAgICByb3RhdGlvbiA9IE1lZGlh
U2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpOb25lOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIHdl
YnJ0Yzo6a1ZpZGVvUm90YXRpb25fMTgwOgotICAgICAgICByb3RhdGlvbiA9IE1lZGlhU2FtcGxl
OjpWaWRlb1JvdGF0aW9uOjpVcHNpZGVEb3duOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIHdl
YnJ0Yzo6a1ZpZGVvUm90YXRpb25fOTA6Ci0gICAgICAgIHJvdGF0aW9uID0gTWVkaWFTYW1wbGU6
OlZpZGVvUm90YXRpb246OlJpZ2h0OwotICAgICAgICBzdGQ6OnN3YXAod2lkdGgsIGhlaWdodCk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ugd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8yNzA6Ci0g
ICAgICAgIHJvdGF0aW9uID0gTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246OkxlZnQ7Ci0gICAg
ICAgIHN0ZDo6c3dhcCh3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0g
ICAgUmVmUHRyPFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZT4gcHJvdGVjdGVkVGhpcyh0aGlz
KTsKLSAgICBjYWxsT25NYWluVGhyZWFkKFtwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0
ZWRUaGlzKSwgc2FtcGxlID0gV1RGTW92ZShzYW1wbGUpLCB3aWR0aCwgaGVpZ2h0LCByb3RhdGlv
bl0gewotICAgICAgICBwcm90ZWN0ZWRUaGlzLT5wcm9jZXNzTmV3U2FtcGxlKHNhbXBsZS5nZXQo
KSwgd2lkdGgsIGhlaWdodCwgcm90YXRpb24pOwotICAgIH0pOwotfQotCi12b2lkIFJlYWx0aW1l
SW5jb21pbmdWaWRlb1NvdXJjZTo6cHJvY2Vzc05ld1NhbXBsZShDTVNhbXBsZUJ1ZmZlclJlZiBz
YW1wbGUsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIE1lZGlhU2FtcGxlOjpWaWRl
b1JvdGF0aW9uIHJvdGF0aW9uKQotewotICAgIG1fYnVmZmVyID0gc2FtcGxlOwotICAgIGlmICh3
aWR0aCAhPSBtX2N1cnJlbnRTZXR0aW5ncy53aWR0aCgpIHx8IGhlaWdodCAhPSBtX2N1cnJlbnRT
ZXR0aW5ncy5oZWlnaHQoKSkgewotICAgICAgICBtX2N1cnJlbnRTZXR0aW5ncy5zZXRXaWR0aCh3
aWR0aCk7Ci0gICAgICAgIG1fY3VycmVudFNldHRpbmdzLnNldEhlaWdodChoZWlnaHQpOwotICAg
ICAgICBzZXR0aW5nc0RpZENoYW5nZSgpOwotICAgIH0KLQotICAgIHZpZGVvU2FtcGxlQXZhaWxh
YmxlKE1lZGlhU2FtcGxlQVZGT2JqQzo6Y3JlYXRlKHNhbXBsZSwgcm90YXRpb24pKTsKLX0KLQot
Y29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcyYgUmVhbHRpbWVJbmNvbWluZ1Zp
ZGVvU291cmNlOjpjYXBhYmlsaXRpZXMoKSBjb25zdAotewotICAgIHJldHVybiBSZWFsdGltZU1l
ZGlhU291cmNlQ2FwYWJpbGl0aWVzOjplbXB0eUNhcGFiaWxpdGllcygpOwotfQotCi1jb25zdCBS
ZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MmIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6
c2V0dGluZ3MoKSBjb25zdAotewotICAgIHJldHVybiBtX2N1cnJlbnRTZXR0aW5nczsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKExJQldFQlJUQykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUlu
Y29taW5nVmlkZW9Tb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L21hYy9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMWViN2MzNjRmZTMyMzIyMjJlYWI0ZjI1YjdiNDEwMGNjOTEwMjgwOS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmgKKysr
IC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgotICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICogMy4g
TmVpdGhlciB0aGUgbmFtZSBvZiBFcmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmli
dXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20gdGhpcwotICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAot
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIFVTRShM
SUJXRUJSVEMpCi0KLSNpbmNsdWRlICJMaWJXZWJSVENNYWNyb3MuaCIKLSNpbmNsdWRlICJSZWFs
dGltZU1lZGlhU291cmNlLmgiCi0jaW5jbHVkZSA8d2VicnRjL2FwaS9tZWRpYXN0cmVhbWludGVy
ZmFjZS5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotdXNpbmcgQ01TYW1wbGVCdWZm
ZXJSZWYgPSBzdHJ1Y3Qgb3BhcXVlQ01TYW1wbGVCdWZmZXIqOwotdXNpbmcgQ1ZQaXhlbEJ1ZmZl
clJlZiA9IHN0cnVjdCBfX0NWQnVmZmVyKjsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFz
cyBDYXB0dXJlRGV2aWNlOwotCi1jbGFzcyBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UgZmlu
YWwgOiBwdWJsaWMgUmVhbHRpbWVNZWRpYVNvdXJjZSwgcHJpdmF0ZSBydGM6OlZpZGVvU2lua0lu
dGVyZmFjZTx3ZWJydGM6OlZpZGVvRnJhbWU+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFJl
YWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZT4gY3JlYXRlKHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJy
dGM6OlZpZGVvVHJhY2tJbnRlcmZhY2U+JiYsIFN0cmluZyYmKTsKLSAgICB+UmVhbHRpbWVJbmNv
bWluZ1ZpZGVvU291cmNlKCkgeyBzdG9wUHJvZHVjaW5nRGF0YSgpOyB9Ci0KLSAgICB2b2lkIHNl
dFNvdXJjZVRyYWNrKHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvVHJhY2tJbnRlcmZh
Y2U+JiYpOwotCi1wcml2YXRlOgotICAgIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZShydGM6
OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb1RyYWNrSW50ZXJmYWNlPiYmLCBTdHJpbmcmJik7
Ci0KLSAgICAvLyBSZWFsdGltZU1lZGlhU291cmNlIEFQSQotICAgIHZvaWQgc3RhcnRQcm9kdWNp
bmdEYXRhKCkgZmluYWw7Ci0gICAgdm9pZCBzdG9wUHJvZHVjaW5nRGF0YSgpICBmaW5hbDsKLQot
ICAgIGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMmIGNhcGFiaWxpdGllcygp
IGNvbnN0IGZpbmFsOwotICAgIGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyYgc2V0
dGluZ3MoKSBjb25zdCBmaW5hbDsKLQotICAgIHZvaWQgcHJvY2Vzc05ld1NhbXBsZShDTVNhbXBs
ZUJ1ZmZlclJlZiwgdW5zaWduZWQsIHVuc2lnbmVkLCBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlv
bik7Ci0KLSAgICBib29sIGFwcGx5U2l6ZShjb25zdCBJbnRTaXplJikgZmluYWwgeyByZXR1cm4g
dHJ1ZTsgfQotCi0gICAgLy8gcnRjOjpWaWRlb1NpbmtJbnRlcmZhY2UKLSAgICB2b2lkIE9uRnJh
bWUoY29uc3Qgd2VicnRjOjpWaWRlb0ZyYW1lJikgZmluYWw7Ci0KLSAgICBDVlBpeGVsQnVmZmVy
UmVmIHBpeGVsQnVmZmVyRnJvbVZpZGVvRnJhbWUoY29uc3Qgd2VicnRjOjpWaWRlb0ZyYW1lJik7
Ci0KLSAgICBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MgbV9jdXJyZW50U2V0dGluZ3M7Ci0g
ICAgcnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9UcmFja0ludGVyZmFjZT4gbV92aWRl
b1RyYWNrOwotICAgIFJldGFpblB0cjxDTVNhbXBsZUJ1ZmZlclJlZj4gbV9idWZmZXI7Ci0gICAg
UmV0YWluUHRyPENWUGl4ZWxCdWZmZXJSZWY+IG1fYmxhY2tGcmFtZTsKLSAgICBpbnQgbV9ibGFj
a0ZyYW1lV2lkdGggeyAwIH07Ci0gICAgaW50IG1fYmxhY2tGcmFtZUhlaWdodCB7IDAgfTsKLSNp
ZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKLSAgICBzaXplX3QgbV9udW1iZXJPZkZyYW1lcyB7IDAg
fTsKLSNlbmRpZgotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNF
KExJQldFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL21hYy9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWMuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1h
Yy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMTQxZGE5OWM5YWU5MmM2ZjllMDkyYWZiMmU5N2JiNjY5ZGE1ZGNh
MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L21hYy9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWMuY3BwCkBAIC0wLDAgKzEsMTY4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogICAgaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogICAgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICAg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVJbmNvbWluZ1Zp
ZGVvU291cmNlTWFjLmgiCisKKyNpZiBVU0UoTElCV0VCUlRDKQorCisjaW5jbHVkZSAiTG9nZ2lu
Zy5oIgorI2luY2x1ZGUgIk1lZGlhU2FtcGxlQVZGT2JqQy5oIgorI2luY2x1ZGUgPHdlYnJ0Yy9z
ZGsvb2JqYy9GcmFtZXdvcmsvQ2xhc3Nlcy9WaWRlby9jb3JldmlkZW9fZnJhbWVfYnVmZmVyLmg+
CisKKyNpbmNsdWRlICJDb3JlTWVkaWFTb2Z0TGluay5oIgorI2luY2x1ZGUgIkNvcmVWaWRlb1Nv
ZnRMaW5rLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVmPFJlYWx0aW1lSW5jb21pbmdW
aWRlb1NvdXJjZU1hYz4gUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTWFjOjpjcmVhdGUocnRj
OjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9UcmFja0ludGVyZmFjZT4mJiB2aWRlb1RyYWNr
LCBTdHJpbmcmJiB0cmFja0lkKQoreworICAgIGF1dG8gc291cmNlID0gYWRvcHRSZWYoKm5ldyBS
ZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWMoV1RGTW92ZSh2aWRlb1RyYWNrKSwgV1RGTW92
ZSh0cmFja0lkKSkpOworICAgIHJldHVybiBzb3VyY2U7Cit9CisKK1JlYWx0aW1lSW5jb21pbmdW
aWRlb1NvdXJjZU1hYzo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTWFjKHJ0Yzo6c2NvcGVk
X3JlZnB0cjx3ZWJydGM6OlZpZGVvVHJhY2tJbnRlcmZhY2U+JiYgdmlkZW9UcmFjaywgU3RyaW5n
JiYgdmlkZW9UcmFja0lkKQorICAgIDogUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlKFdURk1v
dmUodmlkZW9UcmFjayksIFdURk1vdmUodmlkZW9UcmFja0lkKSkKK3sKK30KKworQ1ZQaXhlbEJ1
ZmZlclJlZiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWM6OnBpeGVsQnVmZmVyRnJvbVZp
ZGVvRnJhbWUoY29uc3Qgd2VicnRjOjpWaWRlb0ZyYW1lJiBmcmFtZSkKK3sKKyAgICBpZiAobXV0
ZWQoKSkgeworICAgICAgICBpZiAoIW1fYmxhY2tGcmFtZSB8fCBtX2JsYWNrRnJhbWVXaWR0aCAh
PSBmcmFtZS53aWR0aCgpIHx8IG1fYmxhY2tGcmFtZUhlaWdodCAhPSBmcmFtZS5oZWlnaHQoKSkg
eworICAgICAgICAgICAgQ1ZQaXhlbEJ1ZmZlclJlZiBwaXhlbEJ1ZmZlciA9IG51bGxwdHI7Cisg
ICAgICAgICAgICBhdXRvIHN0YXR1cyA9IENWUGl4ZWxCdWZmZXJDcmVhdGUoa0NGQWxsb2NhdG9y
RGVmYXVsdCwgZnJhbWUud2lkdGgoKSwgZnJhbWUuaGVpZ2h0KCksIGtDVlBpeGVsRm9ybWF0VHlw
ZV80MjBZcENiQ3I4UGxhbmFyLCBudWxscHRyLCAmcGl4ZWxCdWZmZXIpOworICAgICAgICAgICAg
QVNTRVJUX1VOVVNFRChzdGF0dXMsIHN0YXR1cyA9PSBub0Vycik7CisKKyAgICAgICAgICAgIG1f
YmxhY2tGcmFtZSA9IHBpeGVsQnVmZmVyOworICAgICAgICAgICAgbV9ibGFja0ZyYW1lV2lkdGgg
PSBmcmFtZS53aWR0aCgpOworICAgICAgICAgICAgbV9ibGFja0ZyYW1lSGVpZ2h0ID0gZnJhbWUu
aGVpZ2h0KCk7CisKKyAgICAgICAgICAgIHN0YXR1cyA9IENWUGl4ZWxCdWZmZXJMb2NrQmFzZUFk
ZHJlc3MocGl4ZWxCdWZmZXIsIDApOworICAgICAgICAgICAgQVNTRVJUKHN0YXR1cyA9PSBub0Vy
cik7CisgICAgICAgICAgICB2b2lkKiBkYXRhID0gQ1ZQaXhlbEJ1ZmZlckdldEJhc2VBZGRyZXNz
KHBpeGVsQnVmZmVyKTsKKyAgICAgICAgICAgIHNpemVfdCB5TGVuZ3RoID0gZnJhbWUud2lkdGgo
KSAqIGZyYW1lLmhlaWdodCgpOworICAgICAgICAgICAgbWVtc2V0KGRhdGEsIDAsIHlMZW5ndGgp
OworICAgICAgICAgICAgbWVtc2V0KHN0YXRpY19jYXN0PHVpbnQ4X3QqPihkYXRhKSArIHlMZW5n
dGgsIDEyOCwgeUxlbmd0aCAvIDIpOworCisgICAgICAgICAgICBzdGF0dXMgPSBDVlBpeGVsQnVm
ZmVyVW5sb2NrQmFzZUFkZHJlc3MocGl4ZWxCdWZmZXIsIDApOworICAgICAgICAgICAgQVNTRVJU
KCFzdGF0dXMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtX2JsYWNrRnJhbWUuZ2V0KCk7
CisgICAgfQorICAgIGF1dG8gYnVmZmVyID0gZnJhbWUudmlkZW9fZnJhbWVfYnVmZmVyKCk7Cisg
ICAgQVNTRVJUKGJ1ZmZlci0+dHlwZSgpID09IHdlYnJ0Yzo6VmlkZW9GcmFtZUJ1ZmZlcjo6VHlw
ZTo6a05hdGl2ZSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHdlYnJ0Yzo6Q29yZVZpZGVvRnJh
bWVCdWZmZXImPigqYnVmZmVyKS5waXhlbF9idWZmZXIoKTsKK30KKwordm9pZCBSZWFsdGltZUlu
Y29taW5nVmlkZW9Tb3VyY2VNYWM6Ok9uRnJhbWUoY29uc3Qgd2VicnRjOjpWaWRlb0ZyYW1lJiBm
cmFtZSkKK3sKKyAgICBpZiAoIWlzUHJvZHVjaW5nRGF0YSgpKQorICAgICAgICByZXR1cm47CisK
KyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICBpZiAoISgrK21fbnVtYmVyT2ZGcmFtZXMg
JSAzMCkpCisgICAgICAgIFJFTEVBU0VfTE9HKE1lZGlhU3RyZWFtLCAiUmVhbHRpbWVJbmNvbWlu
Z1ZpZGVvU291cmNlTWFjOjpPbkZyYW1lICV6dSBmcmFtZSIsIG1fbnVtYmVyT2ZGcmFtZXMpOwor
I2VuZGlmCisKKyAgICBhdXRvIHBpeGVsQnVmZmVyID0gcGl4ZWxCdWZmZXJGcm9tVmlkZW9GcmFt
ZShmcmFtZSk7CisKKyAgICAvLyBGSVhNRTogQ29udmVydCB0aW1pbmcgaW5mb3JtYXRpb24gZnJv
bSBWaWRlb0ZyYW1lIHRvIENNU2FtcGxlVGltaW5nSW5mby4KKyAgICAvLyBGb3IgdGhlIG1vbWVu
dCwgd2Ugd2lsbCBwcmV0ZW5kIHRoYXQgZnJhbWVzIHNob3VsZCBiZSByZW5kZXJlZCBhc2FwLgor
ICAgIENNU2FtcGxlVGltaW5nSW5mbyB0aW1pbmdJbmZvOworICAgIHRpbWluZ0luZm8ucHJlc2Vu
dGF0aW9uVGltZVN0YW1wID0ga0NNVGltZUludmFsaWQ7CisgICAgdGltaW5nSW5mby5kZWNvZGVU
aW1lU3RhbXAgPSBrQ01UaW1lSW52YWxpZDsKKyAgICB0aW1pbmdJbmZvLmR1cmF0aW9uID0ga0NN
VGltZUludmFsaWQ7CisKKyAgICBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25SZWYgZm9ybWF0RGVz
Y3JpcHRpb247CisgICAgT1NTdGF0dXMgb3N0YXR1cyA9IENNVmlkZW9Gb3JtYXREZXNjcmlwdGlv
bkNyZWF0ZUZvckltYWdlQnVmZmVyKGtDRkFsbG9jYXRvckRlZmF1bHQsIChDVkltYWdlQnVmZmVy
UmVmKXBpeGVsQnVmZmVyLCAmZm9ybWF0RGVzY3JpcHRpb24pOworICAgIGlmIChvc3RhdHVzICE9
IG5vRXJyKSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGluaXRpYWxpemUgQ01WaWRl
b0Zvcm1hdERlc2NyaXB0aW9uOiAlZCIsIHN0YXRpY19jYXN0PGludD4ob3N0YXR1cykpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgQ01TYW1wbGVCdWZmZXJSZWYgc2FtcGxlQnVmZmVy
OworICAgIG9zdGF0dXMgPSBDTVNhbXBsZUJ1ZmZlckNyZWF0ZVJlYWR5V2l0aEltYWdlQnVmZmVy
KGtDRkFsbG9jYXRvckRlZmF1bHQsIChDVkltYWdlQnVmZmVyUmVmKXBpeGVsQnVmZmVyLCBmb3Jt
YXREZXNjcmlwdGlvbiwgJnRpbWluZ0luZm8sICZzYW1wbGVCdWZmZXIpOworICAgIGlmIChvc3Rh
dHVzICE9IG5vRXJyKSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSB0aGUg
c2FtcGxlIGJ1ZmZlcjogJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KG9zdGF0dXMpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBDRlJlbGVhc2UoZm9ybWF0RGVzY3JpcHRpb24pOworCisgICAg
YXV0byBzYW1wbGUgPSBhZG9wdENGKHNhbXBsZUJ1ZmZlcik7CisKKyAgICBDRkFycmF5UmVmIGF0
dGFjaG1lbnRzQXJyYXkgPSBDTVNhbXBsZUJ1ZmZlckdldFNhbXBsZUF0dGFjaG1lbnRzQXJyYXko
c2FtcGxlQnVmZmVyLCB0cnVlKTsKKyAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCBDRkFycmF5
R2V0Q291bnQoYXR0YWNobWVudHNBcnJheSk7ICsraSkgeworICAgICAgICBDRk11dGFibGVEaWN0
aW9uYXJ5UmVmIGF0dGFjaG1lbnRzID0gKENGTXV0YWJsZURpY3Rpb25hcnlSZWYpQ0ZBcnJheUdl
dFZhbHVlQXRJbmRleChhdHRhY2htZW50c0FycmF5LCBpKTsKKyAgICAgICAgQ0ZEaWN0aW9uYXJ5
U2V0VmFsdWUoYXR0YWNobWVudHMsIGtDTVNhbXBsZUF0dGFjaG1lbnRLZXlfRGlzcGxheUltbWVk
aWF0ZWx5LCBrQ0ZCb29sZWFuVHJ1ZSk7CisgICAgfQorCisgICAgdW5zaWduZWQgd2lkdGggPSBm
cmFtZS53aWR0aCgpOworICAgIHVuc2lnbmVkIGhlaWdodCA9IGZyYW1lLmhlaWdodCgpOworCisg
ICAgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb24gcm90YXRpb247CisgICAgc3dpdGNoIChmcmFt
ZS5yb3RhdGlvbigpKSB7CisgICAgY2FzZSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzA6CisgICAg
ICAgIHJvdGF0aW9uID0gTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246Ok5vbmU7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8xODA6CisgICAgICAgIHJv
dGF0aW9uID0gTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246OlVwc2lkZURvd247CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugd2VicnRjOjprVmlkZW9Sb3RhdGlvbl85MDoKKyAgICAgICAgcm90
YXRpb24gPSBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6UmlnaHQ7CisgICAgICAgIHN0ZDo6
c3dhcCh3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSB3ZWJydGM6OmtW
aWRlb1JvdGF0aW9uXzI3MDoKKyAgICAgICAgcm90YXRpb24gPSBNZWRpYVNhbXBsZTo6VmlkZW9S
b3RhdGlvbjo6TGVmdDsKKyAgICAgICAgc3RkOjpzd2FwKHdpZHRoLCBoZWlnaHQpOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBSZWZQdHI8UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNl
TWFjPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIGNhbGxPbk1haW5UaHJlYWQoW3Byb3RlY3Rl
ZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpLCBzYW1wbGUgPSBXVEZNb3ZlKHNhbXBsZSks
IHdpZHRoLCBoZWlnaHQsIHJvdGF0aW9uXSB7CisgICAgICAgIHByb3RlY3RlZFRoaXMtPnByb2Nl
c3NOZXdTYW1wbGUoc2FtcGxlLmdldCgpLCB3aWR0aCwgaGVpZ2h0LCByb3RhdGlvbik7CisgICAg
fSk7Cit9CisKK3ZvaWQgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTWFjOjpwcm9jZXNzTmV3
U2FtcGxlKENNU2FtcGxlQnVmZmVyUmVmIHNhbXBsZSwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVk
IGhlaWdodCwgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb24gcm90YXRpb24pCit7CisgICAgbV9i
dWZmZXIgPSBzYW1wbGU7CisgICAgaWYgKHdpZHRoICE9IG1fY3VycmVudFNldHRpbmdzLndpZHRo
KCkgfHwgaGVpZ2h0ICE9IG1fY3VycmVudFNldHRpbmdzLmhlaWdodCgpKSB7CisgICAgICAgIG1f
Y3VycmVudFNldHRpbmdzLnNldFdpZHRoKHdpZHRoKTsKKyAgICAgICAgbV9jdXJyZW50U2V0dGlu
Z3Muc2V0SGVpZ2h0KGhlaWdodCk7CisgICAgICAgIHNldHRpbmdzRGlkQ2hhbmdlKCk7CisgICAg
fQorCisgICAgdmlkZW9TYW1wbGVBdmFpbGFibGUoTWVkaWFTYW1wbGVBVkZPYmpDOjpjcmVhdGUo
c2FtcGxlLCByb3RhdGlvbikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBVU0UoTElCV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1hYy5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lSW5jb21pbmdWaWRlb1Nv
dXJjZU1hYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU4ODdhNjU1YjE0NjViZGY5ZjQ2MzA0ZDg2MDcwODZhNjU1
ZTkwNjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9tYWMvUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTWFjLmgKQEAgLTAsMCArMSw2NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqICAgIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nz
b24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoTElCV0VCUlRDKQorCisjaW5jbHVkZSAiUmVh
bHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmgiCisKK3VzaW5nIENNU2FtcGxlQnVmZmVyUmVmID0g
c3RydWN0IG9wYXF1ZUNNU2FtcGxlQnVmZmVyKjsKK3VzaW5nIENWUGl4ZWxCdWZmZXJSZWYgPSBz
dHJ1Y3QgX19DVkJ1ZmZlcio7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVhbHRp
bWVJbmNvbWluZ1ZpZGVvU291cmNlTWFjIGZpbmFsIDogcHVibGljIFJlYWx0aW1lSW5jb21pbmdW
aWRlb1NvdXJjZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxSZWFsdGltZUluY29taW5nVmlk
ZW9Tb3VyY2VNYWM+IGNyZWF0ZShydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb1RyYWNr
SW50ZXJmYWNlPiYmLCBTdHJpbmcmJik7CisKK3ByaXZhdGU6CisgICAgUmVhbHRpbWVJbmNvbWlu
Z1ZpZGVvU291cmNlTWFjKHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvVHJhY2tJbnRl
cmZhY2U+JiYsIFN0cmluZyYmKTsKKworICAgIHZvaWQgcHJvY2Vzc05ld1NhbXBsZShDTVNhbXBs
ZUJ1ZmZlclJlZiwgdW5zaWduZWQsIHVuc2lnbmVkLCBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlv
bik7CisgICAgQ1ZQaXhlbEJ1ZmZlclJlZiBwaXhlbEJ1ZmZlckZyb21WaWRlb0ZyYW1lKGNvbnN0
IHdlYnJ0Yzo6VmlkZW9GcmFtZSYpOworCisgICAgLy8gcnRjOjpWaWRlb1NpbmtJbnRlcmZhY2UK
KyAgICB2b2lkIE9uRnJhbWUoY29uc3Qgd2VicnRjOjpWaWRlb0ZyYW1lJikgZmluYWw7CisKKyAg
ICBSZXRhaW5QdHI8Q01TYW1wbGVCdWZmZXJSZWY+IG1fYnVmZmVyOworICAgIFJldGFpblB0cjxD
VlBpeGVsQnVmZmVyUmVmPiBtX2JsYWNrRnJhbWU7CisgICAgaW50IG1fYmxhY2tGcmFtZVdpZHRo
IHsgMCB9OworICAgIGludCBtX2JsYWNrRnJhbWVIZWlnaHQgeyAwIH07CisjaWYgIVJFTEVBU0Vf
TE9HX0RJU0FCTEVECisgICAgc2l6ZV90IG1fbnVtYmVyT2ZGcmFtZXMgeyAwIH07CisjZW5kaWYK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShMSUJXRUJSVEMp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVh
bHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL21hYy9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAzZjQ1MGRmMzNjNmY2YTI1ODdkYTM5YjVlYzgyY2NmY2Q2MGEw
ZTdkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU91dGdvaW5nVmlkZW9T
b3VyY2UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjY2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTcgQXBwbGUgSW5jLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkLCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIHJlcXVpcmVkIHRvIGJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gbm9yIHRoZSBuYW1lcyBvZgot
ICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SCi0gKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotICogU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIKLSAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmgiCi0KLSNpZiBVU0UoTElCV0VCUlRDKQot
Ci0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgPHdlYnJ0Yy9hcGkvdmlkZW8vaTQyMF9i
dWZmZXIuaD4KLSNpbmNsdWRlIDx3ZWJydGMvY29tbW9uX3ZpZGVvL2xpYnl1di9pbmNsdWRlL3dl
YnJ0Y19saWJ5dXYuaD4KLSNpbmNsdWRlIDx3ZWJydGMvc2RrL29iamMvRnJhbWV3b3JrL0NsYXNz
ZXMvVmlkZW8vY29yZXZpZGVvX2ZyYW1lX2J1ZmZlci5oPgotI2luY2x1ZGUgPHd0Zi9DdXJyZW50
VGltZS5oPgotI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0KLSNpbmNsdWRlICJDb3JlTWVk
aWFTb2Z0TGluay5oIgotI2luY2x1ZGUgIkNvcmVWaWRlb1NvZnRMaW5rLmgiCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpSZWFsdGltZU91dGdv
aW5nVmlkZW9Tb3VyY2UoUmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiYmIHZpZGVvU291cmNl
KQotICAgIDogbV92aWRlb1NvdXJjZShXVEZNb3ZlKHZpZGVvU291cmNlKSkKLSAgICAsIG1fYmxh
Y2tGcmFtZVRpbWVyKCp0aGlzLCAmUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpzZW5kT25l
QmxhY2tGcmFtZSkKLXsKLSAgICBtX3ZpZGVvU291cmNlLT5hZGRPYnNlcnZlcigqdGhpcyk7Ci0g
ICAgaW5pdGlhbGl6ZUZyb21Tb3VyY2UoKTsKLX0KLQotYm9vbCBSZWFsdGltZU91dGdvaW5nVmlk
ZW9Tb3VyY2U6OnNldFNvdXJjZShSZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYgbmV3U291
cmNlKQotewotICAgIGlmICghbV9pbml0aWFsU2V0dGluZ3MpCi0gICAgICAgIG1faW5pdGlhbFNl
dHRpbmdzID0gbV92aWRlb1NvdXJjZS0+c291cmNlKCkuc2V0dGluZ3MoKTsKLQotICAgIG1fdmlk
ZW9Tb3VyY2UtPnJlbW92ZU9ic2VydmVyKCp0aGlzKTsKLSAgICBtX3ZpZGVvU291cmNlID0gV1RG
TW92ZShuZXdTb3VyY2UpOwotICAgIG1fdmlkZW9Tb3VyY2UtPmFkZE9ic2VydmVyKCp0aGlzKTsK
LQotICAgIGluaXRpYWxpemVGcm9tU291cmNlKCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
dm9pZCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnN0b3AoKQotewotICAgIG1fdmlkZW9T
b3VyY2UtPnJlbW92ZU9ic2VydmVyKCp0aGlzKTsKLSAgICBtX2JsYWNrRnJhbWVUaW1lci5zdG9w
KCk7Ci0gICAgbV9pc1N0b3BwZWQgPSB0cnVlOwotfQotCi12b2lkIFJlYWx0aW1lT3V0Z29pbmdW
aWRlb1NvdXJjZTo6dXBkYXRlQmxhY2tGcmFtZXNTZW5kaW5nKCkKLXsKLSAgICBpZiAoIW1fbXV0
ZWQgJiYgbV9lbmFibGVkKSB7Ci0gICAgICAgIGlmIChtX2JsYWNrRnJhbWVUaW1lci5pc0FjdGl2
ZSgpKQotICAgICAgICAgICAgbV9ibGFja0ZyYW1lVGltZXIuc3RvcCgpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgc2VuZEJsYWNrRnJhbWVzSWZOZWVkZWQoKTsKLX0KLQotdm9pZCBS
ZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnNvdXJjZU11dGVkQ2hhbmdlZCgpCi17Ci0gICAg
QVNTRVJUKG1fbXV0ZWQgIT0gbV92aWRlb1NvdXJjZS0+bXV0ZWQoKSk7Ci0KLSAgICBtX211dGVk
ID0gbV92aWRlb1NvdXJjZS0+bXV0ZWQoKTsKLQotICAgIHVwZGF0ZUJsYWNrRnJhbWVzU2VuZGlu
ZygpOwotfQotCi12b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6c291cmNlRW5hYmxl
ZENoYW5nZWQoKQotewotICAgIEFTU0VSVChtX2VuYWJsZWQgIT0gbV92aWRlb1NvdXJjZS0+ZW5h
YmxlZCgpKTsKLQotICAgIG1fZW5hYmxlZCA9IG1fdmlkZW9Tb3VyY2UtPmVuYWJsZWQoKTsKLQot
ICAgIHVwZGF0ZUJsYWNrRnJhbWVzU2VuZGluZygpOwotfQotCi12b2lkIFJlYWx0aW1lT3V0Z29p
bmdWaWRlb1NvdXJjZTo6aW5pdGlhbGl6ZUZyb21Tb3VyY2UoKQotewotICAgIGNvbnN0IGF1dG8m
IHNldHRpbmdzID0gbV92aWRlb1NvdXJjZS0+c291cmNlKCkuc2V0dGluZ3MoKTsKLSAgICBtX3dp
ZHRoID0gc2V0dGluZ3Mud2lkdGgoKTsKLSAgICBtX2hlaWdodCA9IHNldHRpbmdzLmhlaWdodCgp
OwotCi0gICAgbV9tdXRlZCA9IG1fdmlkZW9Tb3VyY2UtPm11dGVkKCk7Ci0gICAgbV9lbmFibGVk
ID0gbV92aWRlb1NvdXJjZS0+ZW5hYmxlZCgpOwotCi0gICAgdXBkYXRlQmxhY2tGcmFtZXNTZW5k
aW5nKCk7Ci19Ci0KLWJvb2wgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpHZXRTdGF0cyhT
dGF0cyopCi17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJlYWx0aW1lT3V0Z29pbmdW
aWRlb1NvdXJjZTo6QWRkT3JVcGRhdGVTaW5rKHJ0Yzo6VmlkZW9TaW5rSW50ZXJmYWNlPHdlYnJ0
Yzo6VmlkZW9GcmFtZT4qIHNpbmssIGNvbnN0IHJ0Yzo6VmlkZW9TaW5rV2FudHMmIHNpbmtXYW50
cykKLXsKLSAgICBBU1NFUlQoIXNpbmtXYW50cy5ibGFja19mcmFtZXMpOwotCi0gICAgaWYgKHNp
bmtXYW50cy5yb3RhdGlvbl9hcHBsaWVkKQotICAgICAgICBtX3Nob3VsZEFwcGx5Um90YXRpb24g
PSB0cnVlOwotCi0gICAgaWYgKCFtX3NpbmtzLmNvbnRhaW5zKHNpbmspKQotICAgICAgICBtX3Np
bmtzLmFwcGVuZChzaW5rKTsKLQotICAgIGNhbGxPbk1haW5UaHJlYWQoW3Byb3RlY3RlZFRoaXMg
PSBtYWtlUmVmKCp0aGlzKV0oKSB7Ci0gICAgICAgIHByb3RlY3RlZFRoaXMtPnNlbmRCbGFja0Zy
YW1lc0lmTmVlZGVkKCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVv
U291cmNlOjpSZW1vdmVTaW5rKHJ0Yzo6VmlkZW9TaW5rSW50ZXJmYWNlPHdlYnJ0Yzo6VmlkZW9G
cmFtZT4qIHNpbmspCi17Ci0gICAgbV9zaW5rcy5yZW1vdmVGaXJzdChzaW5rKTsKLQotICAgIGlm
IChtX3NpbmtzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2FsbE9uTWFpblRocmVh
ZChbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSgpIHsKLSAgICAgICAgaWYgKHByb3Rl
Y3RlZFRoaXMtPm1fYmxhY2tGcmFtZVRpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgICAgICBwcm90
ZWN0ZWRUaGlzLT5tX2JsYWNrRnJhbWVUaW1lci5zdG9wKCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQg
UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpzZW5kQmxhY2tGcmFtZXNJZk5lZWRlZCgpCi17
Ci0gICAgaWYgKG1fYmxhY2tGcmFtZVRpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmICghbV9zaW5rcy5zaXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICgh
bV9tdXRlZCAmJiBtX2VuYWJsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV93aWR0
aCB8fCAhbV9oZWlnaHQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9ibGFja0ZyYW1l
KSB7Ci0gICAgICAgIGF1dG8gd2lkdGggPSBtX3dpZHRoOwotICAgICAgICBhdXRvIGhlaWdodCA9
IG1faGVpZ2h0OwotICAgICAgICBpZiAobV9zaG91bGRBcHBseVJvdGF0aW9uICYmIChtX2N1cnJl
bnRSb3RhdGlvbiA9PSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzAgfHwgbV9jdXJyZW50Um90YXRp
b24gPT0gd2VicnRjOjprVmlkZW9Sb3RhdGlvbl85MCkpCi0gICAgICAgICAgICBzdGQ6OnN3YXAo
d2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIGF1dG8gZnJhbWUgPSBtX2J1ZmZlclBvb2wuQ3JlYXRl
QnVmZmVyKHdpZHRoLCBoZWlnaHQpOwotICAgICAgICBBU1NFUlQoZnJhbWUpOwotICAgICAgICBp
ZiAoIWZyYW1lKSB7Ci0gICAgICAgICAgICBSRUxFQVNFX0xPRyhXZWJSVEMsICJSZWFsdGltZU91
dGdvaW5nVmlkZW9Tb3VyY2U6OnNlbmRCbGFja0ZyYW1lc0lmTmVlZGVkIHVuYWJsZSB0byBzZW5k
IGJsYWNrIGZyYW1lcyIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAg
IHdlYnJ0Yzo6STQyMEJ1ZmZlcjo6U2V0QmxhY2soZnJhbWUuZ2V0KCkpOwotICAgICAgICBtX2Js
YWNrRnJhbWUgPSBXVEZNb3ZlKGZyYW1lKTsKLSAgICB9Ci0gICAgc2VuZE9uZUJsYWNrRnJhbWUo
KTsKLSAgICBtX2JsYWNrRnJhbWVUaW1lci5zdGFydFJlcGVhdGluZygxX3MpOwotfQotCi12b2lk
IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6c2VuZE9uZUJsYWNrRnJhbWUoKQotewotICAg
IFJFTEVBU0VfTE9HKE1lZGlhU3RyZWFtLCAiUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpz
ZW5kT25lQmxhY2tGcmFtZSIpOwotICAgIHNlbmRGcmFtZShydGM6OnNjb3BlZF9yZWZwdHI8d2Vi
cnRjOjpWaWRlb0ZyYW1lQnVmZmVyPihtX2JsYWNrRnJhbWUpKTsKLX0KLQotdm9pZCBSZWFsdGlt
ZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnNlbmRGcmFtZShydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRj
OjpWaWRlb0ZyYW1lQnVmZmVyPiYmIGJ1ZmZlcikKLXsKLSAgICBpbnQ2NF90IHRpbWVzdGFtcE1p
Y3JvU2Vjb25kcyA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZU1TKCkgKiAxMDAwOwotICAg
IHdlYnJ0Yzo6VmlkZW9GcmFtZSBmcmFtZShidWZmZXIsIG1fc2hvdWxkQXBwbHlSb3RhdGlvbiA/
IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMCA6IG1fY3VycmVudFJvdGF0aW9uLCB0aW1lc3RhbXBN
aWNyb1NlY29uZHMpOwotICAgIGZvciAoYXV0byogc2luayA6IG1fc2lua3MpCi0gICAgICAgIHNp
bmstPk9uRnJhbWUoZnJhbWUpOwotfQotCi12b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJj
ZTo6dmlkZW9TYW1wbGVBdmFpbGFibGUoTWVkaWFTYW1wbGUmIHNhbXBsZSkKLXsKLSAgICBpZiAo
IW1fc2lua3Muc2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9tdXRlZCB8fCAh
bV9lbmFibGVkKQotICAgICAgICByZXR1cm47Ci0KLSNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQK
LSAgICBpZiAoISgrK21fbnVtYmVyT2ZGcmFtZXMgJSAzMCkpCi0gICAgICAgIFJFTEVBU0VfTE9H
KE1lZGlhU3RyZWFtLCAiUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpzZW5kRnJhbWUgJXp1
IGZyYW1lIiwgbV9udW1iZXJPZkZyYW1lcyk7Ci0jZW5kaWYKLQotICAgIHN3aXRjaCAoc2FtcGxl
LnZpZGVvUm90YXRpb24oKSkgewotICAgIGNhc2UgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246
Ok5vbmU6Ci0gICAgICAgIG1fY3VycmVudFJvdGF0aW9uID0gd2VicnRjOjprVmlkZW9Sb3RhdGlv
bl8wOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9u
OjpVcHNpZGVEb3duOgotICAgICAgICBtX2N1cnJlbnRSb3RhdGlvbiA9IHdlYnJ0Yzo6a1ZpZGVv
Um90YXRpb25fMTgwOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE1lZGlhU2FtcGxlOjpWaWRl
b1JvdGF0aW9uOjpSaWdodDoKLSAgICAgICAgbV9jdXJyZW50Um90YXRpb24gPSB3ZWJydGM6OmtW
aWRlb1JvdGF0aW9uXzkwOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE1lZGlhU2FtcGxlOjpW
aWRlb1JvdGF0aW9uOjpMZWZ0OgotICAgICAgICBtX2N1cnJlbnRSb3RhdGlvbiA9IHdlYnJ0Yzo6
a1ZpZGVvUm90YXRpb25fMjcwOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBBU1NFUlQo
c2FtcGxlLnBsYXRmb3JtU2FtcGxlKCkudHlwZSA9PSBQbGF0Zm9ybVNhbXBsZTo6Q01TYW1wbGVC
dWZmZXJUeXBlKTsKLSAgICBhdXRvIHBpeGVsQnVmZmVyID0gc3RhdGljX2Nhc3Q8Q1ZQaXhlbEJ1
ZmZlclJlZj4oQ01TYW1wbGVCdWZmZXJHZXRJbWFnZUJ1ZmZlcihzYW1wbGUucGxhdGZvcm1TYW1w
bGUoKS5zYW1wbGUuY21TYW1wbGVCdWZmZXIpKTsKLSAgICBhdXRvIHBpeGVsRm9ybWF0VHlwZSA9
IENWUGl4ZWxCdWZmZXJHZXRQaXhlbEZvcm1hdFR5cGUocGl4ZWxCdWZmZXIpOwotCi0gICAgaWYg
KHBpeGVsRm9ybWF0VHlwZSA9PSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyOFBsYW5hciB8
fCBwaXhlbEZvcm1hdFR5cGUgPT0ga0NWUGl4ZWxGb3JtYXRUeXBlXzQyMFlwQ2JDcjhCaVBsYW5h
ckZ1bGxSYW5nZSkgewotICAgICAgICBydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb0Zy
YW1lQnVmZmVyPiBidWZmZXIgPSBuZXcgcnRjOjpSZWZDb3VudGVkT2JqZWN0PHdlYnJ0Yzo6Q29y
ZVZpZGVvRnJhbWVCdWZmZXI+KHBpeGVsQnVmZmVyKTsKLSAgICAgICAgaWYgKG1fc2hvdWxkQXBw
bHlSb3RhdGlvbiAmJiBtX2N1cnJlbnRSb3RhdGlvbiAhPSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9u
XzApIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbWFrZSBBVlZpZGVvQ2FwdHVy
ZVNvdXJjZSBoYW5kbGUgdGhlIHJvdGF0aW9uIHdoZW5ldmVyIHBvc3NpYmxlLgotICAgICAgICAg
ICAgLy8gVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBpbmVmZmljaWVudCwgd2Ugc2hvdWxkIHJvdGF0
ZSBvbiB0aGUgQ01TYW1wbGVCdWZmZXIgZGlyZWN0bHkgaW5zdGVhZCBvZiBkb2luZyB0aGlzIGRv
dWJsZSBhbGxvY2F0aW9uLgotICAgICAgICAgICAgYXV0byByb3RhdGVkQnVmZmVyID0gYnVmZmVy
LT5Ub0k0MjAoKTsKLSAgICAgICAgICAgIEFTU0VSVChyb3RhdGVkQnVmZmVyKTsKLSAgICAgICAg
ICAgIGJ1ZmZlciA9IHdlYnJ0Yzo6STQyMEJ1ZmZlcjo6Um90YXRlKCpyb3RhdGVkQnVmZmVyLCBt
X2N1cnJlbnRSb3RhdGlvbik7Ci0gICAgICAgIH0KLSAgICAgICAgc2VuZEZyYW1lKFdURk1vdmUo
YnVmZmVyKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBDVlBpeGVsQnVmZmVyTG9j
a0Jhc2VBZGRyZXNzKHBpeGVsQnVmZmVyLCAwKTsKLSAgICBhdXRvKiBzb3VyY2UgPSByZWludGVy
cHJldF9jYXN0PHVpbnQ4X3QqPihDVlBpeGVsQnVmZmVyR2V0QmFzZUFkZHJlc3NPZlBsYW5lKHBp
eGVsQnVmZmVyLCAwKSk7Ci0KLSAgICBBU1NFUlQobV93aWR0aCk7Ci0gICAgQVNTRVJUKG1faGVp
Z2h0KTsKLQotICAgIGF1dG8gbmV3QnVmZmVyID0gbV9idWZmZXJQb29sLkNyZWF0ZUJ1ZmZlciht
X3dpZHRoLCBtX2hlaWdodCk7Ci0gICAgQVNTRVJUKG5ld0J1ZmZlcik7Ci0gICAgaWYgKCFuZXdC
dWZmZXIpIHsKLSAgICAgICAgUkVMRUFTRV9MT0coV2ViUlRDLCAiUmVhbHRpbWVPdXRnb2luZ1Zp
ZGVvU291cmNlOjp2aWRlb1NhbXBsZUF2YWlsYWJsZSB1bmFibGUgdG8gYWxsb2NhdGUgYnVmZmVy
IGZvciBjb252ZXJzaW9uIHRvIFlVViIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlm
IChwaXhlbEZvcm1hdFR5cGUgPT0ga0NWUGl4ZWxGb3JtYXRUeXBlXzMyQkdSQSkKLSAgICAgICAg
d2VicnRjOjpDb252ZXJ0VG9JNDIwKHdlYnJ0Yzo6VmlkZW9UeXBlOjprQVJHQiwgc291cmNlLCAw
LCAwLCBtX3dpZHRoLCBtX2hlaWdodCwgMCwgd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8wLCBuZXdC
dWZmZXIpOwotICAgIGVsc2UgewotICAgICAgICBBU1NFUlQocGl4ZWxGb3JtYXRUeXBlID09IGtD
VlBpeGVsRm9ybWF0VHlwZV8zMkFSR0IpOwotICAgICAgICB3ZWJydGM6OkNvbnZlcnRUb0k0MjAo
d2VicnRjOjpWaWRlb1R5cGU6OmtCR1JBLCBzb3VyY2UsIDAsIDAsIG1fd2lkdGgsIG1faGVpZ2h0
LCAwLCB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzAsIG5ld0J1ZmZlcik7Ci0gICAgfQotICAgIENW
UGl4ZWxCdWZmZXJVbmxvY2tCYXNlQWRkcmVzcyhwaXhlbEJ1ZmZlciwgMCk7Ci0gICAgaWYgKG1f
c2hvdWxkQXBwbHlSb3RhdGlvbiAmJiBtX2N1cnJlbnRSb3RhdGlvbiAhPSB3ZWJydGM6OmtWaWRl
b1JvdGF0aW9uXzApCi0gICAgICAgIG5ld0J1ZmZlciA9IHdlYnJ0Yzo6STQyMEJ1ZmZlcjo6Um90
YXRlKCpuZXdCdWZmZXIsIG1fY3VycmVudFJvdGF0aW9uKTsKLSAgICBzZW5kRnJhbWUoV1RGTW92
ZShuZXdCdWZmZXIpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8g
VVNFKExJQldFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL21hYy9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjdlNzhiNTE2NWQwNTY5NWZlMWE0NTg0MDg1
OWJiMTFjMTJlNDg4Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRn
b2luZ1ZpZGVvU291cmNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTYgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgcmVxdWlyZWQgdG8gYmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IKLSAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0g
KiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUgotICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYg
VVNFKExJQldFQlJUQykKLQotI2luY2x1ZGUgIkxpYldlYlJUQ01hY3Jvcy5oIgotI2luY2x1ZGUg
Ik1lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmgiCi0jaW5jbHVkZSA8VGltZXIuaD4KLSNpbmNsdWRl
IDx3ZWJydGMvYXBpL21lZGlhc3RyZWFtaW50ZXJmYWNlLmg+Ci0jaW5jbHVkZSA8d2VicnRjL2Jh
c2Uvb3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3ZWJydGMvY29tbW9uX3ZpZGVvL2luY2x1ZGUvaTQy
MF9idWZmZXJfcG9vbC5oPgotI2luY2x1ZGUgPHdlYnJ0Yy9tZWRpYS9iYXNlL3ZpZGVvc2lua2lu
dGVyZmFjZS5oPgotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi9UaHJl
YWRTYWZlUmVmQ291bnRlZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFJlYWx0
aW1lT3V0Z29pbmdWaWRlb1NvdXJjZSBmaW5hbCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRl
ZDxSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U+LCBwdWJsaWMgd2VicnRjOjpWaWRlb1RyYWNr
U291cmNlSW50ZXJmYWNlLCBwcml2YXRlIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpPYnNlcnZl
ciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U+
IGNyZWF0ZShSZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYgdmlkZW9Tb3VyY2UpIHsgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlKFdURk1vdmUodmlk
ZW9Tb3VyY2UpKSk7IH0KLSAgICB+UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlKCkgeyBzdG9w
KCk7IH0KLQotICAgIHZvaWQgc3RvcCgpOwotICAgIGJvb2wgc2V0U291cmNlKFJlZjxNZWRpYVN0
cmVhbVRyYWNrUHJpdmF0ZT4mJik7Ci0gICAgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmIHNvdXJj
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmlkZW9Tb3VyY2UuZ2V0KCk7IH0KLQotICAgIGludCBBZGRS
ZWYoKSBjb25zdCBmaW5hbCB7IHJlZigpOyByZXR1cm4gcmVmQ291bnQoKTsgfQotICAgIGludCBS
ZWxlYXNlKCkgY29uc3QgZmluYWwgeyBkZXJlZigpOyByZXR1cm4gcmVmQ291bnQoKTsgfQotCi0g
ICAgdm9pZCBzZXRBcHBseVJvdGF0aW9uKGJvb2wgc2hvdWxkQXBwbHlSb3RhdGlvbikgeyBtX3No
b3VsZEFwcGx5Um90YXRpb24gPSBzaG91bGRBcHBseVJvdGF0aW9uOyB9Ci0KLXByaXZhdGU6Ci0g
ICAgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlKFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0
ZT4mJik7Ci0KLSAgICB2b2lkIHNlbmRGcmFtZShydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpW
aWRlb0ZyYW1lQnVmZmVyPiYmKTsKLSAgICB2b2lkIHNlbmRCbGFja0ZyYW1lc0lmTmVlZGVkKCk7
Ci0gICAgdm9pZCBzZW5kT25lQmxhY2tGcmFtZSgpOwotICAgIHZvaWQgaW5pdGlhbGl6ZUZyb21T
b3VyY2UoKTsKLSAgICB2b2lkIHVwZGF0ZUJsYWNrRnJhbWVzU2VuZGluZygpOwotCi0gICAgLy8g
Tm90aWZpZXIgQVBJCi0gICAgdm9pZCBSZWdpc3Rlck9ic2VydmVyKHdlYnJ0Yzo6T2JzZXJ2ZXJJ
bnRlcmZhY2UqKSBmaW5hbCB7IH0KLSAgICB2b2lkIFVucmVnaXN0ZXJPYnNlcnZlcih3ZWJydGM6
Ok9ic2VydmVySW50ZXJmYWNlKikgZmluYWwgeyB9Ci0KLSAgICAvLyBWaWRlb1RyYWNrU291cmNl
SW50ZXJmYWNlIEFQSQotICAgIGJvb2wgaXNfc2NyZWVuY2FzdCgpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIGZhbHNlOyB9Ci0gICAgcnRjOjpPcHRpb25hbDxib29sPiBuZWVkc19kZW5vaXNpbmcoKSBj
b25zdCBmaW5hbCB7IHJldHVybiBydGM6Ok9wdGlvbmFsPGJvb2w+KCk7IH0KLSAgICBib29sIEdl
dFN0YXRzKFN0YXRzKikgZmluYWw7Ci0KLSAgICAvLyBNZWRpYVNvdXJjZUludGVyZmFjZSBBUEkK
LSAgICBTb3VyY2VTdGF0ZSBzdGF0ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIFNvdXJjZVN0YXRl
KCk7IH0KLSAgICBib29sIHJlbW90ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KLQot
ICAgIC8vIHJ0Yzo6VmlkZW9Tb3VyY2VJbnRlcmZhY2U8d2VicnRjOjpWaWRlb0ZyYW1lPiBBUEkK
LSAgICB2b2lkIEFkZE9yVXBkYXRlU2luayhydGM6OlZpZGVvU2lua0ludGVyZmFjZTx3ZWJydGM6
OlZpZGVvRnJhbWU+KiwgY29uc3QgcnRjOjpWaWRlb1NpbmtXYW50cyYpIGZpbmFsOwotICAgIHZv
aWQgUmVtb3ZlU2luayhydGM6OlZpZGVvU2lua0ludGVyZmFjZTx3ZWJydGM6OlZpZGVvRnJhbWU+
KikgZmluYWw7Ci0KLSAgICB2b2lkIHNvdXJjZU11dGVkQ2hhbmdlZCgpOwotICAgIHZvaWQgc291
cmNlRW5hYmxlZENoYW5nZWQoKTsKLSAgICB2b2lkIHZpZGVvU2FtcGxlQXZhaWxhYmxlKE1lZGlh
U2FtcGxlJik7Ci0KLSAgICAvLyBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6T2JzZXJ2ZXIgQVBJ
Ci0gICAgdm9pZCB0cmFja011dGVkQ2hhbmdlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYpIGZp
bmFsIHsgc291cmNlTXV0ZWRDaGFuZ2VkKCk7IH0KLSAgICB2b2lkIHRyYWNrRW5hYmxlZENoYW5n
ZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmKSBmaW5hbCB7IHNvdXJjZUVuYWJsZWRDaGFuZ2Vk
KCk7IH0KLSAgICB2b2lkIHRyYWNrU2V0dGluZ3NDaGFuZ2VkKE1lZGlhU3RyZWFtVHJhY2tQcml2
YXRlJikgZmluYWwgeyBpbml0aWFsaXplRnJvbVNvdXJjZSgpOyB9Ci0gICAgdm9pZCBzYW1wbGVC
dWZmZXJVcGRhdGVkKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJiwgTWVkaWFTYW1wbGUmIHNhbXBs
ZSkgZmluYWwgeyB2aWRlb1NhbXBsZUF2YWlsYWJsZShzYW1wbGUpOyB9Ci0gICAgdm9pZCB0cmFj
a0VuZGVkKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJikgZmluYWwgeyB9Ci0KLSAgICBWZWN0b3I8
cnRjOjpWaWRlb1NpbmtJbnRlcmZhY2U8d2VicnRjOjpWaWRlb0ZyYW1lPio+IG1fc2lua3M7Ci0g
ICAgd2VicnRjOjpJNDIwQnVmZmVyUG9vbCBtX2J1ZmZlclBvb2w7Ci0gICAgUmVmPE1lZGlhU3Ry
ZWFtVHJhY2tQcml2YXRlPiBtX3ZpZGVvU291cmNlOwotICAgIGJvb2wgbV9lbmFibGVkIHsgdHJ1
ZSB9OwotICAgIGJvb2wgbV9tdXRlZCB7IGZhbHNlIH07Ci0gICAgc3RkOjpvcHRpb25hbDxSZWFs
dGltZU1lZGlhU291cmNlU2V0dGluZ3M+IG1faW5pdGlhbFNldHRpbmdzOwotICAgIHdlYnJ0Yzo6
VmlkZW9Sb3RhdGlvbiBtX2N1cnJlbnRSb3RhdGlvbiB7IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25f
MCB9OwotICAgIHVpbnQzMl90IG1fd2lkdGggeyAwIH07Ci0gICAgdWludDMyX3QgbV9oZWlnaHQg
eyAwIH07Ci0gICAgYm9vbCBtX2lzU3RvcHBlZCB7IGZhbHNlIH07Ci0gICAgVGltZXIgbV9ibGFj
a0ZyYW1lVGltZXI7Ci0gICAgcnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9GcmFtZUJ1
ZmZlcj4gbV9ibGFja0ZyYW1lOwotICAgIGJvb2wgbV9zaG91bGRBcHBseVJvdGF0aW9uIHsgZmFs
c2UgfTsKLSNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKLSAgICBzaXplX3QgbV9udW1iZXJPZkZy
YW1lcyB7IDAgfTsKLSNlbmRpZgotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5k
aWYgLy8gVVNFKExJQldFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VNYWMuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lT3V0Z29pbmdWaWRl
b1NvdXJjZU1hYy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2VjZjU1OTU0MzkzYzNiZDg3N2ZjYzdlZDQ5OTNm
ZDBhOTUxZTYyNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL21hYy9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VNYWMuY3BwCkBAIC0wLDAg
KzEsMTIxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCwgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSByZXF1aXJlZCB0byBiZSBtZXQ6CisgKgor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBs
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZU1h
Yy5oIgorCisjaWYgVVNFKExJQldFQlJUQykKKworI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNs
dWRlIDx3ZWJydGMvYXBpL3ZpZGVvL2k0MjBfYnVmZmVyLmg+CisjaW5jbHVkZSA8d2VicnRjL2Nv
bW1vbl92aWRlby9saWJ5dXYvaW5jbHVkZS93ZWJydGNfbGlieXV2Lmg+CisjaW5jbHVkZSA8d2Vi
cnRjL3Nkay9vYmpjL0ZyYW1ld29yay9DbGFzc2VzL1ZpZGVvL2NvcmV2aWRlb19mcmFtZV9idWZm
ZXIuaD4KKworI2luY2x1ZGUgIkNvcmVNZWRpYVNvZnRMaW5rLmgiCisjaW5jbHVkZSAiQ29yZVZp
ZGVvU29mdExpbmsuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWFsdGltZU91dGdvaW5n
VmlkZW9Tb3VyY2VNYWM6OlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZU1hYyhSZWY8TWVkaWFT
dHJlYW1UcmFja1ByaXZhdGU+JiYgdmlkZW9Tb3VyY2UpCisgICAgOiBSZWFsdGltZU91dGdvaW5n
VmlkZW9Tb3VyY2UoV1RGTW92ZSh2aWRlb1NvdXJjZSkpCit7Cit9CisKK3ZvaWQgUmVhbHRpbWVP
dXRnb2luZ1ZpZGVvU291cmNlTWFjOjp2aWRlb1NhbXBsZUF2YWlsYWJsZShNZWRpYVNhbXBsZSYg
c2FtcGxlKQoreworICAgIGlmICghbV9zaW5rcy5zaXplKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmIChtX211dGVkIHx8ICFtX2VuYWJsZWQpCisgICAgICAgIHJldHVybjsKKworI2lmICFS
RUxFQVNFX0xPR19ESVNBQkxFRAorICAgIGlmICghKCsrbV9udW1iZXJPZkZyYW1lcyAlIDMwKSkK
KyAgICAgICAgUkVMRUFTRV9MT0coTWVkaWFTdHJlYW0sICJSZWFsdGltZU91dGdvaW5nVmlkZW9T
b3VyY2VNYWM6OnNlbmRGcmFtZSAlenUgZnJhbWUiLCBtX251bWJlck9mRnJhbWVzKTsKKyNlbmRp
ZgorCisgICAgc3dpdGNoIChzYW1wbGUudmlkZW9Sb3RhdGlvbigpKSB7CisgICAgY2FzZSBNZWRp
YVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6Tm9uZToKKyAgICAgICAgbV9jdXJyZW50Um90YXRpb24g
PSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzA7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTWVk
aWFTYW1wbGU6OlZpZGVvUm90YXRpb246OlVwc2lkZURvd246CisgICAgICAgIG1fY3VycmVudFJv
dGF0aW9uID0gd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8xODA7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246OlJpZ2h0OgorICAgICAgICBtX2N1cnJl
bnRSb3RhdGlvbiA9IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fOTA7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246OkxlZnQ6CisgICAgICAgIG1fY3Vy
cmVudFJvdGF0aW9uID0gd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8yNzA7CisgICAgICAgIGJyZWFr
OworICAgIH0KKworICAgIEFTU0VSVChzYW1wbGUucGxhdGZvcm1TYW1wbGUoKS50eXBlID09IFBs
YXRmb3JtU2FtcGxlOjpDTVNhbXBsZUJ1ZmZlclR5cGUpOworICAgIGF1dG8gcGl4ZWxCdWZmZXIg
PSBzdGF0aWNfY2FzdDxDVlBpeGVsQnVmZmVyUmVmPihDTVNhbXBsZUJ1ZmZlckdldEltYWdlQnVm
ZmVyKHNhbXBsZS5wbGF0Zm9ybVNhbXBsZSgpLnNhbXBsZS5jbVNhbXBsZUJ1ZmZlcikpOworICAg
IGF1dG8gcGl4ZWxGb3JtYXRUeXBlID0gQ1ZQaXhlbEJ1ZmZlckdldFBpeGVsRm9ybWF0VHlwZShw
aXhlbEJ1ZmZlcik7CisKKyAgICBpZiAocGl4ZWxGb3JtYXRUeXBlID09IGtDVlBpeGVsRm9ybWF0
VHlwZV80MjBZcENiQ3I4UGxhbmFyIHx8IHBpeGVsRm9ybWF0VHlwZSA9PSBrQ1ZQaXhlbEZvcm1h
dFR5cGVfNDIwWXBDYkNyOEJpUGxhbmFyRnVsbFJhbmdlKSB7CisgICAgICAgIHJ0Yzo6c2NvcGVk
X3JlZnB0cjx3ZWJydGM6OlZpZGVvRnJhbWVCdWZmZXI+IGJ1ZmZlciA9IG5ldyBydGM6OlJlZkNv
dW50ZWRPYmplY3Q8d2VicnRjOjpDb3JlVmlkZW9GcmFtZUJ1ZmZlcj4ocGl4ZWxCdWZmZXIpOwor
ICAgICAgICBpZiAobV9zaG91bGRBcHBseVJvdGF0aW9uICYmIG1fY3VycmVudFJvdGF0aW9uICE9
IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMCkgeworICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNo
b3VsZCBtYWtlIEFWVmlkZW9DYXB0dXJlU291cmNlIGhhbmRsZSB0aGUgcm90YXRpb24gd2hlbmV2
ZXIgcG9zc2libGUuCisgICAgICAgICAgICAvLyBUaGlzIGltcGxlbWVudGF0aW9uIGlzIGluZWZm
aWNpZW50LCB3ZSBzaG91bGQgcm90YXRlIG9uIHRoZSBDTVNhbXBsZUJ1ZmZlciBkaXJlY3RseSBp
bnN0ZWFkIG9mIGRvaW5nIHRoaXMgZG91YmxlIGFsbG9jYXRpb24uCisgICAgICAgICAgICBhdXRv
IHJvdGF0ZWRCdWZmZXIgPSBidWZmZXItPlRvSTQyMCgpOworICAgICAgICAgICAgQVNTRVJUKHJv
dGF0ZWRCdWZmZXIpOworICAgICAgICAgICAgYnVmZmVyID0gd2VicnRjOjpJNDIwQnVmZmVyOjpS
b3RhdGUoKnJvdGF0ZWRCdWZmZXIsIG1fY3VycmVudFJvdGF0aW9uKTsKKyAgICAgICAgfQorICAg
ICAgICBzZW5kRnJhbWUoV1RGTW92ZShidWZmZXIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIENWUGl4ZWxCdWZmZXJMb2NrQmFzZUFkZHJlc3MocGl4ZWxCdWZmZXIsIDApOworICAg
IGF1dG8qIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KENWUGl4ZWxCdWZmZXJH
ZXRCYXNlQWRkcmVzc09mUGxhbmUocGl4ZWxCdWZmZXIsIDApKTsKKworICAgIEFTU0VSVChtX3dp
ZHRoKTsKKyAgICBBU1NFUlQobV9oZWlnaHQpOworCisgICAgYXV0byBuZXdCdWZmZXIgPSBtX2J1
ZmZlclBvb2wuQ3JlYXRlQnVmZmVyKG1fd2lkdGgsIG1faGVpZ2h0KTsKKyAgICBBU1NFUlQobmV3
QnVmZmVyKTsKKyAgICBpZiAoIW5ld0J1ZmZlcikgeworICAgICAgICBSRUxFQVNFX0xPRyhXZWJS
VEMsICJSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VNYWM6OnZpZGVvU2FtcGxlQXZhaWxhYmxl
IHVuYWJsZSB0byBhbGxvY2F0ZSBidWZmZXIgZm9yIGNvbnZlcnNpb24gdG8gWVVWIik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKHBpeGVsRm9ybWF0VHlwZSA9PSBrQ1ZQaXhlbEZv
cm1hdFR5cGVfMzJCR1JBKQorICAgICAgICB3ZWJydGM6OkNvbnZlcnRUb0k0MjAod2VicnRjOjpW
aWRlb1R5cGU6OmtBUkdCLCBzb3VyY2UsIDAsIDAsIG1fd2lkdGgsIG1faGVpZ2h0LCAwLCB3ZWJy
dGM6OmtWaWRlb1JvdGF0aW9uXzAsIG5ld0J1ZmZlcik7CisgICAgZWxzZSB7CisgICAgICAgIEFT
U0VSVChwaXhlbEZvcm1hdFR5cGUgPT0ga0NWUGl4ZWxGb3JtYXRUeXBlXzMyQVJHQik7CisgICAg
ICAgIHdlYnJ0Yzo6Q29udmVydFRvSTQyMCh3ZWJydGM6OlZpZGVvVHlwZTo6a0JHUkEsIHNvdXJj
ZSwgMCwgMCwgbV93aWR0aCwgbV9oZWlnaHQsIDAsIHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMCwg
bmV3QnVmZmVyKTsKKyAgICB9CisgICAgQ1ZQaXhlbEJ1ZmZlclVubG9ja0Jhc2VBZGRyZXNzKHBp
eGVsQnVmZmVyLCAwKTsKKyAgICBpZiAobV9zaG91bGRBcHBseVJvdGF0aW9uICYmIG1fY3VycmVu
dFJvdGF0aW9uICE9IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMCkKKyAgICAgICAgbmV3QnVmZmVy
ID0gd2VicnRjOjpJNDIwQnVmZmVyOjpSb3RhdGUoKm5ld0J1ZmZlciwgbV9jdXJyZW50Um90YXRp
b24pOworICAgIHNlbmRGcmFtZShXVEZNb3ZlKG5ld0J1ZmZlcikpOworfQorCisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShMSUJXRUJSVEMpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1Zp
ZGVvU291cmNlTWFjLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMv
UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTWFjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTk4MmFhZjQ0MmFk
MzJhNjM2NGVlNzk5Y2IzY2FhMWUxNTYzMzIxMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3Vy
Y2VNYWMuaApAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCwg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSByZXF1aXJlZCB0
byBiZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0
aGUgbmFtZSBvZiBBcHBsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
CisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoTElCV0VCUlRDKQorCisjaW5jbHVk
ZSAiUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTWFjIGZpbmFsIDogcHVibGljIFJl
YWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxSZWFs
dGltZU91dGdvaW5nVmlkZW9Tb3VyY2VNYWM+IGNyZWF0ZShSZWY8TWVkaWFTdHJlYW1UcmFja1By
aXZhdGU+JiYgdmlkZW9Tb3VyY2UpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVhbHRpbWVPdXRn
b2luZ1ZpZGVvU291cmNlTWFjKFdURk1vdmUodmlkZW9Tb3VyY2UpKSk7IH0KKyAgICB+UmVhbHRp
bWVPdXRnb2luZ1ZpZGVvU291cmNlTWFjKCkgeyB9CisKK3Byb3RlY3RlZDoKKyAgICBleHBsaWNp
dCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VNYWMoUmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2
YXRlPiYmKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIHZpZGVvU2FtcGxlQXZhaWxhYmxlKE1lZGlh
U2FtcGxlJikgZmluYWw7CisKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICBzaXplX3Qg
bV9udW1iZXJPZkZyYW1lcyB7IDAgfTsKKyNlbmRpZgorfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gVVNFKExJQldFQlJUQykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322675</attachid>
            <date>2017-10-04 08:51:54 -0700</date>
            <delta_ts>2017-10-04 09:03:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177869-20171004175152.patch</filename>
            <type>text/plain</type>
            <size>77811</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIyODM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTE5ZTJkYzVhNjVhNWE0
YTcwNjgwOWJlOGNmNzg4MGMwYjQ4NTQ3OS4uMTExNjkwMTlhYTBhM2FmZTkzYWMxNjU2NDVkNzI4
ODE5MDhjMjc1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDE3LTEwLTA0ICBBbGVq
YW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisgICAgICAgIE1ha2UgUmVhbHRp
bWVJbmNvbWluZ1ZpZGVvU291cmNlcyBhbmQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlcyBw
b3J0IGFnbm9zdGljCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzc4NjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBSZWZhY3RvciB0aGUgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlIGFuZCBSZWFsdGlt
ZU91dGdvaW5nVmlkZW9Tb3VyY2UgY2xhc3NlcywKKyAgICAgICAgbW92ZSB0aGUgbWFjIHNwZWNp
ZmljIGNvZGUgdG8gYSBkaWZmZXJlbnQgY2xhc3MuIFRoaXMgd2F5IHdlIGNhbiB1c2UgdGhlbSBm
cm9tCisgICAgICAgIG90aGVyIHBvcnRzLgorCisgICAgICAgIE5vIG5ldyBmdW5jdGlvbmFsaXR5
LCBqdXN0IGEgcmVmYWN0b3IuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAg
KiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0v
bWVkaWFzdHJlYW0vUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6OlJlYWx0aW1lSW5jb21p
bmdWaWRlb1NvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9T
b3VyY2U6OnN0YXJ0UHJvZHVjaW5nRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUlu
Y29taW5nVmlkZW9Tb3VyY2U6OnNldFNvdXJjZVRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
YWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6c3RvcFByb2R1Y2luZ0RhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlOjpjYXBhYmlsaXRpZXMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlOjpzZXR0aW5n
cyBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVJbmNvbWlu
Z1ZpZGVvU291cmNlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL21hYy9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuaC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuY3BwOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lT3V0
Z29pbmdWaWRlb1NvdXJjZS5jcHAuCisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5n
VmlkZW9Tb3VyY2U6OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVh
bHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmguCisg
ICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnZpZGVvU2FtcGxl
QXZhaWxhYmxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVJ
bmNvbWluZ1ZpZGVvU291cmNlTWFjLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuY3BwLgor
ICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTWFjOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTWFjOjpSZWFs
dGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWMpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJ
bmNvbWluZ1ZpZGVvU291cmNlTWFjOjpwaXhlbEJ1ZmZlckZyb21WaWRlb0ZyYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1hYzo6T25GcmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWM6OnByb2Nlc3NO
ZXdTYW1wbGUpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUlu
Y29taW5nVmlkZW9Tb3VyY2VNYWMuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuaC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNl
TWFjLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nVmlkZW9T
b3VyY2VNYWM6OlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZU1hYyk6CisgICAgICAgIChXZWJD
b3JlOjpSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VNYWM6OnZpZGVvU2FtcGxlQXZhaWxhYmxl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1Zp
ZGVvU291cmNlTWFjLmg6IEFkZGVkLgorCiAyMDE3LTEwLTA0ICBZb3Vlbm4gRmFibGV0ICA8eW91
ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgT3BlbldlYlJUQyBiYWNrZW5kCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1BlZXJDb25uZWN0aW9u
QmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1BlZXJDb25u
ZWN0aW9uQmFja2VuZC5jcHAKaW5kZXggM2YyYjk1ZjExOTdlMjNiZTM4M2E0ZjY5MTU5YzJmMGU5
OGI1MmNjOS4uMmFkODRiZDk4MjU4ZjdjY2Y2ZTU5Y2U1YTIyNjJkNjFlYTUzMGU1OSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9QZWVyQ29ubmVjdGlvbkJh
Y2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUGVlckNv
bm5lY3Rpb25CYWNrZW5kLmNwcApAQCAtNDYsNiArNDYsMTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiB1c2luZyBuYW1lc3BhY2UgUEFMOwogCisjaWYgIVVTRShMSUJXRUJSVEMpCitzdGF0aWMg
c3RkOjp1bmlxdWVfcHRyPFBlZXJDb25uZWN0aW9uQmFja2VuZD4gY3JlYXRlTm9QZWVyQ29ubmVj
dGlvbkJhY2tlbmQoUlRDUGVlckNvbm5lY3Rpb24mKQoreworICAgIHJldHVybiBudWxscHRyOwor
fQorCitDcmVhdGVQZWVyQ29ubmVjdGlvbkJhY2tlbmQgUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpj
cmVhdGUgPSBjcmVhdGVOb1BlZXJDb25uZWN0aW9uQmFja2VuZDsKKyNlbmRpZgorCiBQZWVyQ29u
bmVjdGlvbkJhY2tlbmQ6OlBlZXJDb25uZWN0aW9uQmFja2VuZChSVENQZWVyQ29ubmVjdGlvbiYg
cGVlckNvbm5lY3Rpb24pCiAgICAgOiBtX3BlZXJDb25uZWN0aW9uKHBlZXJDb25uZWN0aW9uKQog
I2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDM3MzhhMGU3ZTc0MjdiYjgyZjAyYWZiOTQ0
MDZlMmVlMzEyMDE4ODUuLjRkYTQxMmM4ZTRkY2Y5ZTQ0NGNjMDM3MWQzYWMzZjkyMmU0NTlmODkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKQEAgLTI3NTYsNyArMjc1Niw5IEBACiAJCTVDRDlGNTY3MUFBMEY3NDIwMERBNDVGRiAvKiBE
RkFCeXRlY29kZUNvbXBpbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1QzM5MzA1RjFBQTBGNkE5MDAyOUM4MTYgLyogREZBQnl0ZWNvZGVDb21waWxl
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTVD
RDlGNTY4MUFBMEY3NDYwMERBNDVGRiAvKiBERkFCeXRlY29kZUludGVycHJldGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzM5MzA2MTFBQTBGNkE5
MDAyOUM4MTYgLyogREZBQnl0ZWNvZGVJbnRlcnByZXRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTVDREQ4MzNEMUU0MzI0RDkwMDYyMUU5MiAv
KiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNERDgzM0IxRTQzMjRCQjAwNjIxRTkyIC8qIFJlYWx0
aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5jcHAgKi87IH07CisJCTVDREQ4MzNEMUU0MzI0RDkwMDYy
MUU5MyAvKiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VNYWMuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNERDgzM0IxRTQzMjRCQjAwNjIxRTkz
IC8qIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZU1hYy5jcHAgKi87IH07CiAJCTVDREQ4MzNF
MUU0MzI0REMwMDYyMUU5MiAvKiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNERDgzMzkxRTQzMjRC
QjAwNjIxRTkyIC8qIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5jcHAgKi87IH07CisJCTVD
REQ4MzNFMUU0MzI0REMwMDYyMUU5MyAvKiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWMu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNERDgz
MzkxRTQzMjRCQjAwNjIxRTkzIC8qIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1hYy5jcHAg
Ki87IH07CiAJCTVDREQ4MzY0MUU0MzI1QTAwMDYyMUU5MiAvKiBMaWJXZWJSVENEYXRhQ2hhbm5l
bEhhbmRsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNUNERDgzM0YxRTQzMjUzRDAwNjIxRTkyIC8qIExpYldlYlJUQ0RhdGFDaGFubmVsSGFuZGxl
ci5jcHAgKi87IH07CiAJCTVDREZBNkM4MUFBNEYyREEwMEVBODc0NiAvKiBDb250ZW50RXh0ZW5z
aW9uQWN0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNUNERkE2QzcxQUE0RjJEQTAwRUE4NzQ2IC8qIENvbnRlbnRFeHRlbnNpb25BY3Rpb25zLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNUNFNUQ5
QUIxREI4OUEwMzAwQ0U3QThEIC8qIEpTVGV4dERlY29kZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNFNUQ5QTcxREI4OTlGQzAwQ0U3QThEIC8q
IEpTVGV4dERlY29kZXIuY3BwICovOyB9OwpAQCAtMTA2OTIsOCArMTA2OTQsMTAgQEAKIAkJNUNC
QzhEQUExQUFBMzAyMjAwRTFDODAzIC8qIE1lZGlhQWNjZXNzaWJpbGl0eVNvZnRMaW5rLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlhQWNjZXNzaWJpbGl0eVNv
ZnRMaW5rLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNCQzhEQUIxQUFBMzAy
MjAwRTFDODAzIC8qIE1lZGlhQWNjZXNzaWJpbGl0eVNvZnRMaW5rLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhQWNjZXNzaWJpbGl0eVNvZnRMaW5rLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDREQ4MzM5MUU0MzI0QkIwMDYyMUU5MiAvKiBSZWFsdGlt
ZUluY29taW5nVmlkZW9Tb3VyY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNUNERDgzMzkxRTQzMjRCQjAwNjIxRTkzIC8qIFJlYWx0aW1lSW5jb21pbmdW
aWRlb1NvdXJjZU1hYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBS
ZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1Q0REODMzQTFFNDMyNEJCMDA2MjFFOTIgLyogUmVhbHRpbWVJbmNvbWluZ1ZpZGVv
U291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlYWx0aW1lSW5jb21p
bmdWaWRlb1NvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Q0REODMzQjFF
NDMyNEJCMDA2MjFFOTIgLyogUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJj
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDREQ4MzNCMUU0MzI0QkIwMDYy
MUU5MyAvKiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VNYWMuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTWFjLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNERDgzM0MxRTQzMjRCQjAwNjIxRTky
IC8qIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNUNERDgzM0YxRTQzMjUzRDAwNjIxRTkyIC8qIExpYldlYlJUQ0RhdGFD
aGFubmVsSGFuZGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBM
aWJXZWJSVENEYXRhQ2hhbm5lbEhhbmRsZXIuY3BwOyBwYXRoID0gbGlid2VicnRjL0xpYldlYlJU
Q0RhdGFDaGFubmVsSGFuZGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVD
REQ4MzQwMUU0MzI1M0QwMDYyMUU5MiAvKiBMaWJXZWJSVENEYXRhQ2hhbm5lbEhhbmRsZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTGliV2ViUlRDRGF0YUNoYW5uZWxIYW5k
bGVyLmg7IHBhdGggPSBsaWJ3ZWJydGMvTGliV2ViUlRDRGF0YUNoYW5uZWxIYW5kbGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjUwMCw2ICsxNjUwNCw4IEBACiAJCQkJMDdG
RkRFNjYxODFBRUQ0MjAwNzJENDA5IC8qIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmNwcCAqLywK
IAkJCQkwN0ZGREU2NzE4MUFFRDQyMDA3MkQ0MDkgLyogTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUu
aCAqLywKIAkJCQk1RUJCODkzODFDNzdCREE0MDBDNjVENDEgLyogUGVlck1lZGlhRGVzY3JpcHRp
b24uaCAqLywKKwkJCQk1Q0REODMzOTFFNDMyNEJCMDA2MjFFOTIgLyogUmVhbHRpbWVJbmNvbWlu
Z1ZpZGVvU291cmNlLmNwcCAqLywKKwkJCQk1Q0REODMzQTFFNDMyNEJCMDA2MjFFOTIgLyogUmVh
bHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmggKi8sCiAJCQkJNEE0RjY1NkIxQUE5OTdGMTAwRTM4
Q0REIC8qIFJlYWx0aW1lTWVkaWFTb3VyY2UuY3BwICovLAogCQkJCTRBNEY2NTZDMUFBOTk3RjEw
MEUzOENERCAvKiBSZWFsdGltZU1lZGlhU291cmNlLmggKi8sCiAJCQkJNEE0RjY1NkQxQUE5OTdG
MTAwRTM4Q0REIC8qIFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMuaCAqLywKQEAgLTE2
NTA5LDYgKzE2NTE1LDggQEAKIAkJCQk0QTRGNjU2RjFBQTk5N0YxMDBFMzhDREQgLyogUmVhbHRp
bWVNZWRpYVNvdXJjZVNldHRpbmdzLmggKi8sCiAJCQkJMkVDNDFERTIxQzA0MTBBMzAwRDI5NEZF
IC8qIFJlYWx0aW1lTWVkaWFTb3VyY2VTdXBwb3J0ZWRDb25zdHJhaW50cy5jcHAgKi8sCiAJCQkJ
MDdDMUMwRTQxQkZCNjBFRDAwQkQyMjU2IC8qIFJlYWx0aW1lTWVkaWFTb3VyY2VTdXBwb3J0ZWRD
b25zdHJhaW50cy5oICovLAorCQkJCTVDREQ4MzNCMUU0MzI0QkIwMDYyMUU5MiAvKiBSZWFsdGlt
ZU91dGdvaW5nVmlkZW9Tb3VyY2UuY3BwICovLAorCQkJCTVDREQ4MzNDMUU0MzI0QkIwMDYyMUU5
MiAvKiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuaCAqLywKIAkJCQkzMTM1OTEwQzFFN0RE
Q0I2MDBGMzA2MzAgLyogUlRDQnVuZGxlUG9saWN5LmggKi8sCiAJCQkJMDcyMjFCQTIxN0NGMEFE
NDAwODQ4RTUxIC8qIFJUQ0RhdGFDaGFubmVsSGFuZGxlci5oICovLAogCQkJCTA3MjIxQkEzMTdD
RjBBRDQwMDg0OEU1MSAvKiBSVENEYXRhQ2hhbm5lbEhhbmRsZXJDbGllbnQuaCAqLywKQEAgLTE2
NTU5LDE0ICsxNjU2NywxMiBAQAogCQkJCTA3RUU3NkVFMUJFQTYxOTgwMEY4OTEzMyAvKiBNb2Nr
UmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5tbSAqLywKIAkJCQk0MTEwM0FBQTFFMzk3OTBBMDA3NjlG
MDMgLyogUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlLmNwcCAqLywKIAkJCQk0MTEwM0FBOTFF
Mzk3OTBBMDA3NjlGMDMgLyogUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlLmggKi8sCi0JCQkJ
NUNERDgzMzkxRTQzMjRCQjAwNjIxRTkyIC8qIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5j
cHAgKi8sCi0JCQkJNUNERDgzM0ExRTQzMjRCQjAwNjIxRTkyIC8qIFJlYWx0aW1lSW5jb21pbmdW
aWRlb1NvdXJjZS5oICovLAorCQkJCTVDREQ4MzM5MUU0MzI0QkIwMDYyMUU5MyAvKiBSZWFsdGlt
ZUluY29taW5nVmlkZW9Tb3VyY2VNYWMuY3BwICovLAogCQkJCTRBMEZGQUEzMUFBRjVFRjYwMDYy
ODAzQiAvKiBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTWFjLmNwcCAqLywKIAkJCQk0QTBGRkFB
NDFBQUY1RUY2MDA2MjgwM0IgLyogUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck1hYy5oICovLAog
CQkJCTQxMTAzQUE3MUUzOTc5MEEwMDc2OUYwMyAvKiBSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3Vy
Y2UuY3BwICovLAogCQkJCTQxMTAzQUE4MUUzOTc5MEEwMDc2OUYwMyAvKiBSZWFsdGltZU91dGdv
aW5nQXVkaW9Tb3VyY2UuaCAqLywKLQkJCQk1Q0REODMzQjFFNDMyNEJCMDA2MjFFOTIgLyogUmVh
bHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmNwcCAqLywKLQkJCQk1Q0REODMzQzFFNDMyNEJCMDA2
MjFFOTIgLyogUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmggKi8sCisJCQkJNUNERDgzM0Ix
RTQzMjRCQjAwNjIxRTkzIC8qIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZU1hYy5jcHAgKi8s
CiAJCQkJMDdENjM3M0UxQkIwQjExMzAwMjU2Q0U5IC8qIFdlYkF1ZGlvU291cmNlUHJvdmlkZXJB
VkZPYmpDLmggKi8sCiAJCQkJMDdENjM3M0YxQkIwQjExMzAwMjU2Q0U5IC8qIFdlYkF1ZGlvU291
cmNlUHJvdmlkZXJBVkZPYmpDLm1tICovLAogCQkJKTsKQEAgLTMzNTg2LDYgKzMzNTkyLDcgQEAK
IAkJCQlGRDMxNjAzQjEyQjAyNjc2MDBDMUEzNTkgLyogUmVhbHRpbWVBbmFseXNlci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk0MTEwM0FBRTFFMzk3OTEwMDA3NjlGMDMgLyogUmVhbHRpbWVJbmNv
bWluZ0F1ZGlvU291cmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDREQ4MzNFMUU0MzI0REMw
MDYyMUU5MiAvKiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJNUNERDgzM0UxRTQzMjREQzAwNjIxRTkzIC8qIFJlYWx0aW1lSW5jb21pbmdWaWRlb1Nv
dXJjZU1hYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0QTRGNjU3MDFBQTk5N0YxMDBFMzhDREQg
LyogUmVhbHRpbWVNZWRpYVNvdXJjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0QTBGRkFBMTFB
QUY1RUEyMDA2MjgwM0IgLyogUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk0QTBGRkFBNTFBQUY1RUY2MDA2MjgwM0IgLyogUmVhbHRpbWVNZWRpYVNvdXJj
ZUNlbnRlck1hYy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTMzNTkzLDYgKzMzNjAwLDcgQEAKIAkJ
CQkyRUM0MURFNDFDMDQxMEEzMDBEMjk0RkUgLyogUmVhbHRpbWVNZWRpYVNvdXJjZVN1cHBvcnRl
ZENvbnN0cmFpbnRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQxMTAzQUFCMUUzOTc5MTAwMDc2
OUYwMyAvKiBSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNUNERDgzM0QxRTQzMjREOTAwNjIxRTkyIC8qIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJj
ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1Q0REODMzRDFFNDMyNEQ5MDA2MjFFOTMgLyogUmVh
bHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTWFjLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZENDVB
OTVBMTc1RDQxNzEwMEMyMUVDOCAvKiBSZWN0YW5nbGVTaGFwZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlCQ0FCNDE4MTEzRTM1NkU4MDBEOEFBRjMgLyogUmVnaW9uLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUE1NzhGNDQwMURFMEI2MzQwMDNERkM2QSAvKiBSZWplY3RlZFByb21pc2VUcmFja2Vy
LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uOWY2Mjk1MjFjZmFkOGVmNTdiZjRhOTY5NjQzOTRjMmQ0OGRjYWQxYQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0
aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5jcHAKQEAgLTAsMCArMSwxMDAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0
cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuaCIK
KworI2lmIFVTRShMSUJXRUJSVEMpCisKKyNpZiBQTEFURk9STShDT0NPQSkKKyNpbmNsdWRlICJS
ZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWMuaCIKKyNlbmRpZgorCisjaW5jbHVkZSAiTG9n
Z2luZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlZjxSZWFsdGltZUluY29taW5nVmlk
ZW9Tb3VyY2U+IFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6Y3JlYXRlKHJ0Yzo6c2NvcGVk
X3JlZnB0cjx3ZWJydGM6OlZpZGVvVHJhY2tJbnRlcmZhY2U+JiYgdmlkZW9UcmFjaywgU3RyaW5n
JiYgdHJhY2tJZCkKK3sKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBhdXRvIHNvdXJjZSA9IFJl
YWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1hYzo6Y3JlYXRlKFdURk1vdmUodmlkZW9UcmFjayks
IFdURk1vdmUodHJhY2tJZCkpOworI2Vsc2UKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IEdUSyBz
cGVjaWZpYyBvdXRnb2luZyB2aWRlbyBzb3VyY2UKKyAgICBhdXRvIHNvdXJjZSA9IGFkb3B0UmVm
KCpuZXcgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlKFdURk1vdmUodmlkZW9UcmFjayksIFdU
Rk1vdmUodHJhY2tJZCkpKTsKKyNlbmRpZgorICAgIHNvdXJjZS0+c3RhcnQoKTsKKyAgICByZXR1
cm4gc291cmNlOworfQorCitSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6OlJlYWx0aW1lSW5j
b21pbmdWaWRlb1NvdXJjZShydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb1RyYWNrSW50
ZXJmYWNlPiYmIHZpZGVvVHJhY2ssIFN0cmluZyYmIHZpZGVvVHJhY2tJZCkKKyAgICA6IFJlYWx0
aW1lTWVkaWFTb3VyY2UoV1RGTW92ZSh2aWRlb1RyYWNrSWQpLCBSZWFsdGltZU1lZGlhU291cmNl
OjpUeXBlOjpWaWRlbywgU3RyaW5nKCkpCisgICAgLCBtX3ZpZGVvVHJhY2soV1RGTW92ZSh2aWRl
b1RyYWNrKSkKK3sKKyAgICBtX2N1cnJlbnRTZXR0aW5ncy5zZXRXaWR0aCg2NDApOworICAgIG1f
Y3VycmVudFNldHRpbmdzLnNldEhlaWdodCg0ODApOworICAgIG5vdGlmeU11dGVkQ2hhbmdlKCFt
X3ZpZGVvVHJhY2spOworfQorCit2b2lkIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6c3Rh
cnRQcm9kdWNpbmdEYXRhKCkKK3sKKyAgICBpZiAobV92aWRlb1RyYWNrKQorICAgICAgICBtX3Zp
ZGVvVHJhY2stPkFkZE9yVXBkYXRlU2luayh0aGlzLCBydGM6OlZpZGVvU2lua1dhbnRzKCkpOwor
fQorCit2b2lkIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6c2V0U291cmNlVHJhY2socnRj
OjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9UcmFja0ludGVyZmFjZT4mJiB0cmFjaykKK3sK
KyAgICBBU1NFUlQoIW1fdmlkZW9UcmFjayk7CisgICAgQVNTRVJUKHRyYWNrKTsKKworICAgIG1f
dmlkZW9UcmFjayA9IFdURk1vdmUodHJhY2spOworICAgIG5vdGlmeU11dGVkQ2hhbmdlKCFtX3Zp
ZGVvVHJhY2spOworICAgIGlmIChpc1Byb2R1Y2luZ0RhdGEoKSkKKyAgICAgICAgbV92aWRlb1Ry
YWNrLT5BZGRPclVwZGF0ZVNpbmsodGhpcywgcnRjOjpWaWRlb1NpbmtXYW50cygpKTsKK30KKwor
dm9pZCBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6OnN0b3BQcm9kdWNpbmdEYXRhKCkKK3sK
KyAgICBpZiAobV92aWRlb1RyYWNrKQorICAgICAgICBtX3ZpZGVvVHJhY2stPlJlbW92ZVNpbmso
dGhpcyk7Cit9CisKK2NvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMmIFJlYWx0
aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6Y2FwYWJpbGl0aWVzKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllczo6ZW1wdHlDYXBhYmlsaXRpZXMoKTsK
K30KKworY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzJiBSZWFsdGltZUluY29taW5n
VmlkZW9Tb3VyY2U6OnNldHRpbmdzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jdXJyZW50U2V0
dGluZ3M7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShMSUJX
RUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9S
ZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjczNzgx
MmY2MDU3YTM1NzE0OGE4NmFiNjM1NjE5NjAyYThkZDVhYzYKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZUluY29taW5nVmlkZW9T
b3VyY2UuaApAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICogMy4gTmVp
dGhlciB0aGUgbmFtZSBvZiBFcmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRv
cnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20gdGhpcworICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShMSUJX
RUJSVEMpCisKKyNpbmNsdWRlICJMaWJXZWJSVENNYWNyb3MuaCIKKyNpbmNsdWRlICJSZWFsdGlt
ZU1lZGlhU291cmNlLmgiCisjaW5jbHVkZSA8d2VicnRjL2FwaS9tZWRpYXN0cmVhbWludGVyZmFj
ZS5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBDYXB0dXJlRGV2aWNlOworCitjbGFzcyBSZWFsdGltZUluY29taW5nVmlkZW9Tb3Vy
Y2UgOiBwdWJsaWMgUmVhbHRpbWVNZWRpYVNvdXJjZSwgcHJpdmF0ZSBydGM6OlZpZGVvU2lua0lu
dGVyZmFjZTx3ZWJydGM6OlZpZGVvRnJhbWU+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFJl
YWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZT4gY3JlYXRlKHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJy
dGM6OlZpZGVvVHJhY2tJbnRlcmZhY2U+JiYsIFN0cmluZyYmKTsKKyAgICB+UmVhbHRpbWVJbmNv
bWluZ1ZpZGVvU291cmNlKCkgeyBzdG9wUHJvZHVjaW5nRGF0YSgpOyB9CisKKyAgICB2b2lkIHNl
dFNvdXJjZVRyYWNrKHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvVHJhY2tJbnRlcmZh
Y2U+JiYpOworCitwcm90ZWN0ZWQ6CisgICAgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlKHJ0
Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvVHJhY2tJbnRlcmZhY2U+JiYsIFN0cmluZyYm
KTsKKworICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyBtX2N1cnJlbnRTZXR0aW5nczsK
KworcHJpdmF0ZToKKyAgICAvLyBSZWFsdGltZU1lZGlhU291cmNlIEFQSQorICAgIHZvaWQgc3Rh
cnRQcm9kdWNpbmdEYXRhKCkgZmluYWw7CisgICAgdm9pZCBzdG9wUHJvZHVjaW5nRGF0YSgpICBm
aW5hbDsKKworICAgIGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMmIGNhcGFi
aWxpdGllcygpIGNvbnN0IGZpbmFsOworICAgIGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0
aW5ncyYgc2V0dGluZ3MoKSBjb25zdCBmaW5hbDsKKworICAgIGJvb2wgYXBwbHlTaXplKGNvbnN0
IEludFNpemUmKSBmaW5hbCB7IHJldHVybiB0cnVlOyB9CisKKyAgICAvLyBydGM6OlZpZGVvU2lu
a0ludGVyZmFjZQorICAgIHZvaWQgT25GcmFtZShjb25zdCB3ZWJydGM6OlZpZGVvRnJhbWUmKSBv
dmVycmlkZSB7IH07CisKKyAgICBydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb1RyYWNr
SW50ZXJmYWNlPiBtX3ZpZGVvVHJhY2s7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBVU0UoTElCV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJj
ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZmRlNWIxMmE4ZWZlODRiNmJhNWJmMjhlY2MzN2FlYzFkOTEzZWE1
NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5jcHAKQEAgLTAsMCArMSwyMDcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkLCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIHJlcXVpcmVkIHRvIGJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgor
ICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmgiCisKKyNpZiBVU0UoTElC
V0VCUlRDKQorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgPHdlYnJ0Yy9hcGkvdmlk
ZW8vaTQyMF9idWZmZXIuaD4KKyNpbmNsdWRlIDx3ZWJydGMvY29tbW9uX3ZpZGVvL2xpYnl1di9p
bmNsdWRlL3dlYnJ0Y19saWJ5dXYuaD4KKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKyNp
bmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorCisjaWYgUExBVEZPUk0oQ09DT0EpCisjaW5jbHVk
ZSAiUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTWFjLmgiCisjZW5kaWYKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitSZWY8UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlPiBSZWFsdGltZU91
dGdvaW5nVmlkZW9Tb3VyY2U6OmNyZWF0ZShSZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYg
dmlkZW9Tb3VyY2UpCit7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgcmV0dXJuIFJlYWx0aW1l
T3V0Z29pbmdWaWRlb1NvdXJjZU1hYzo6Y3JlYXRlKFdURk1vdmUodmlkZW9Tb3VyY2UpKTsKKyNl
bHNlCisgICAgLy8gRklYTUU6IEltcGxlbWVudCBHVEsgc3BlY2lmaWMgb3V0Z29pbmcgdmlkZW8g
c291cmNlLgorICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1Nv
dXJjZShXVEZNb3ZlKHZpZGVvU291cmNlKSkpOworI2VuZGlmCit9CisKK1JlYWx0aW1lT3V0Z29p
bmdWaWRlb1NvdXJjZTo6UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlKFJlZjxNZWRpYVN0cmVh
bVRyYWNrUHJpdmF0ZT4mJiB2aWRlb1NvdXJjZSkKKyAgICA6IG1fdmlkZW9Tb3VyY2UoV1RGTW92
ZSh2aWRlb1NvdXJjZSkpCisgICAgLCBtX2JsYWNrRnJhbWVUaW1lcigqdGhpcywgJlJlYWx0aW1l
T3V0Z29pbmdWaWRlb1NvdXJjZTo6c2VuZE9uZUJsYWNrRnJhbWUpCit7CisgICAgbV92aWRlb1Nv
dXJjZS0+YWRkT2JzZXJ2ZXIoKnRoaXMpOworICAgIGluaXRpYWxpemVGcm9tU291cmNlKCk7Cit9
CisKK2Jvb2wgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpzZXRTb3VyY2UoUmVmPE1lZGlh
U3RyZWFtVHJhY2tQcml2YXRlPiYmIG5ld1NvdXJjZSkKK3sKKyAgICBpZiAoIW1faW5pdGlhbFNl
dHRpbmdzKQorICAgICAgICBtX2luaXRpYWxTZXR0aW5ncyA9IG1fdmlkZW9Tb3VyY2UtPnNvdXJj
ZSgpLnNldHRpbmdzKCk7CisKKyAgICBtX3ZpZGVvU291cmNlLT5yZW1vdmVPYnNlcnZlcigqdGhp
cyk7CisgICAgbV92aWRlb1NvdXJjZSA9IFdURk1vdmUobmV3U291cmNlKTsKKyAgICBtX3ZpZGVv
U291cmNlLT5hZGRPYnNlcnZlcigqdGhpcyk7CisKKyAgICBpbml0aWFsaXplRnJvbVNvdXJjZSgp
OworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291
cmNlOjpzdG9wKCkKK3sKKyAgICBtX3ZpZGVvU291cmNlLT5yZW1vdmVPYnNlcnZlcigqdGhpcyk7
CisgICAgbV9ibGFja0ZyYW1lVGltZXIuc3RvcCgpOworICAgIG1faXNTdG9wcGVkID0gdHJ1ZTsK
K30KKwordm9pZCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnVwZGF0ZUJsYWNrRnJhbWVz
U2VuZGluZygpCit7CisgICAgaWYgKCFtX211dGVkICYmIG1fZW5hYmxlZCkgeworICAgICAgICBp
ZiAobV9ibGFja0ZyYW1lVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgICAgIG1fYmxhY2tGcmFt
ZVRpbWVyLnN0b3AoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNlbmRCbGFja0Zy
YW1lc0lmTmVlZGVkKCk7Cit9CisKK3ZvaWQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpz
b3VyY2VNdXRlZENoYW5nZWQoKQoreworICAgIEFTU0VSVChtX211dGVkICE9IG1fdmlkZW9Tb3Vy
Y2UtPm11dGVkKCkpOworCisgICAgbV9tdXRlZCA9IG1fdmlkZW9Tb3VyY2UtPm11dGVkKCk7CisK
KyAgICB1cGRhdGVCbGFja0ZyYW1lc1NlbmRpbmcoKTsKK30KKwordm9pZCBSZWFsdGltZU91dGdv
aW5nVmlkZW9Tb3VyY2U6OnNvdXJjZUVuYWJsZWRDaGFuZ2VkKCkKK3sKKyAgICBBU1NFUlQobV9l
bmFibGVkICE9IG1fdmlkZW9Tb3VyY2UtPmVuYWJsZWQoKSk7CisKKyAgICBtX2VuYWJsZWQgPSBt
X3ZpZGVvU291cmNlLT5lbmFibGVkKCk7CisKKyAgICB1cGRhdGVCbGFja0ZyYW1lc1NlbmRpbmco
KTsKK30KKwordm9pZCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OmluaXRpYWxpemVGcm9t
U291cmNlKCkKK3sKKyAgICBjb25zdCBhdXRvJiBzZXR0aW5ncyA9IG1fdmlkZW9Tb3VyY2UtPnNv
dXJjZSgpLnNldHRpbmdzKCk7CisgICAgbV93aWR0aCA9IHNldHRpbmdzLndpZHRoKCk7CisgICAg
bV9oZWlnaHQgPSBzZXR0aW5ncy5oZWlnaHQoKTsKKworICAgIG1fbXV0ZWQgPSBtX3ZpZGVvU291
cmNlLT5tdXRlZCgpOworICAgIG1fZW5hYmxlZCA9IG1fdmlkZW9Tb3VyY2UtPmVuYWJsZWQoKTsK
KworICAgIHVwZGF0ZUJsYWNrRnJhbWVzU2VuZGluZygpOworfQorCitib29sIFJlYWx0aW1lT3V0
Z29pbmdWaWRlb1NvdXJjZTo6R2V0U3RhdHMoU3RhdHMqKQoreworICAgIHJldHVybiBmYWxzZTsK
K30KKwordm9pZCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OkFkZE9yVXBkYXRlU2luayhy
dGM6OlZpZGVvU2lua0ludGVyZmFjZTx3ZWJydGM6OlZpZGVvRnJhbWU+KiBzaW5rLCBjb25zdCBy
dGM6OlZpZGVvU2lua1dhbnRzJiBzaW5rV2FudHMpCit7CisgICAgQVNTRVJUKCFzaW5rV2FudHMu
YmxhY2tfZnJhbWVzKTsKKworICAgIGlmIChzaW5rV2FudHMucm90YXRpb25fYXBwbGllZCkKKyAg
ICAgICAgbV9zaG91bGRBcHBseVJvdGF0aW9uID0gdHJ1ZTsKKworICAgIGlmICghbV9zaW5rcy5j
b250YWlucyhzaW5rKSkKKyAgICAgICAgbV9zaW5rcy5hcHBlbmQoc2luayk7CisKKyAgICBjYWxs
T25NYWluVGhyZWFkKFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldKCkgeworICAgICAg
ICBwcm90ZWN0ZWRUaGlzLT5zZW5kQmxhY2tGcmFtZXNJZk5lZWRlZCgpOworICAgIH0pOworfQor
Cit2b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6UmVtb3ZlU2luayhydGM6OlZpZGVv
U2lua0ludGVyZmFjZTx3ZWJydGM6OlZpZGVvRnJhbWU+KiBzaW5rKQoreworICAgIG1fc2lua3Mu
cmVtb3ZlRmlyc3Qoc2luayk7CisKKyAgICBpZiAobV9zaW5rcy5zaXplKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGNhbGxPbk1haW5UaHJlYWQoW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0
aGlzKV0oKSB7CisgICAgICAgIGlmIChwcm90ZWN0ZWRUaGlzLT5tX2JsYWNrRnJhbWVUaW1lci5p
c0FjdGl2ZSgpKQorICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+bV9ibGFja0ZyYW1lVGltZXIu
c3RvcCgpOworICAgIH0pOworfQorCit2b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6
c2VuZEJsYWNrRnJhbWVzSWZOZWVkZWQoKQoreworICAgIGlmIChtX2JsYWNrRnJhbWVUaW1lci5p
c0FjdGl2ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fc2lua3Muc2l6ZSgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fbXV0ZWQgJiYgbV9lbmFibGVkKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoIW1fd2lkdGggfHwgIW1faGVpZ2h0KQorICAgICAgICByZXR1
cm47CisKKyAgICBpZiAoIW1fYmxhY2tGcmFtZSkgeworICAgICAgICBhdXRvIHdpZHRoID0gbV93
aWR0aDsKKyAgICAgICAgYXV0byBoZWlnaHQgPSBtX2hlaWdodDsKKyAgICAgICAgaWYgKG1fc2hv
dWxkQXBwbHlSb3RhdGlvbiAmJiAobV9jdXJyZW50Um90YXRpb24gPT0gd2VicnRjOjprVmlkZW9S
b3RhdGlvbl8wIHx8IG1fY3VycmVudFJvdGF0aW9uID09IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25f
OTApKQorICAgICAgICAgICAgc3RkOjpzd2FwKHdpZHRoLCBoZWlnaHQpOworICAgICAgICBhdXRv
IGZyYW1lID0gbV9idWZmZXJQb29sLkNyZWF0ZUJ1ZmZlcih3aWR0aCwgaGVpZ2h0KTsKKyAgICAg
ICAgQVNTRVJUKGZyYW1lKTsKKyAgICAgICAgaWYgKCFmcmFtZSkgeworICAgICAgICAgICAgUkVM
RUFTRV9MT0coV2ViUlRDLCAiUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpzZW5kQmxhY2tG
cmFtZXNJZk5lZWRlZCB1bmFibGUgdG8gc2VuZCBibGFjayBmcmFtZXMiKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB3ZWJydGM6Okk0MjBCdWZmZXI6OlNldEJsYWNr
KGZyYW1lLmdldCgpKTsKKyAgICAgICAgbV9ibGFja0ZyYW1lID0gV1RGTW92ZShmcmFtZSk7Cisg
ICAgfQorICAgIHNlbmRPbmVCbGFja0ZyYW1lKCk7CisgICAgbV9ibGFja0ZyYW1lVGltZXIuc3Rh
cnRSZXBlYXRpbmcoMV9zKTsKK30KKwordm9pZCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6
OnNlbmRPbmVCbGFja0ZyYW1lKCkKK3sKKyAgICBSRUxFQVNFX0xPRyhNZWRpYVN0cmVhbSwgIlJl
YWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6c2VuZE9uZUJsYWNrRnJhbWUiKTsKKyAgICBzZW5k
RnJhbWUocnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9GcmFtZUJ1ZmZlcj4obV9ibGFj
a0ZyYW1lKSk7Cit9CisKK3ZvaWQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpzZW5kRnJh
bWUocnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9GcmFtZUJ1ZmZlcj4mJiBidWZmZXIp
Cit7CisgICAgaW50NjRfdCB0aW1lc3RhbXBNaWNyb1NlY29uZHMgPSBtb25vdG9uaWNhbGx5SW5j
cmVhc2luZ1RpbWVNUygpICogMTAwMDsKKyAgICB3ZWJydGM6OlZpZGVvRnJhbWUgZnJhbWUoYnVm
ZmVyLCBtX3Nob3VsZEFwcGx5Um90YXRpb24gPyB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzAgOiBt
X2N1cnJlbnRSb3RhdGlvbiwgdGltZXN0YW1wTWljcm9TZWNvbmRzKTsKKyAgICBmb3IgKGF1dG8q
IHNpbmsgOiBtX3NpbmtzKQorICAgICAgICBzaW5rLT5PbkZyYW1lKGZyYW1lKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKExJQldFQlJUQykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lT3V0Z29pbmdW
aWRlb1NvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRp
bWVPdXRnb2luZ1ZpZGVvU291cmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTk1NGEyMGU1MjYwYzM4NzVmOWI3
MWUyNTg5MTQwM2I5ZWZlYzZmNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5oCkBAIC0wLDAg
KzEsMTE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCwgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSByZXF1aXJlZCB0byBiZSBtZXQ6CisgKgor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBs
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpZiBVU0UoTElCV0VCUlRDKQorCisjaW5jbHVkZSAiTGliV2ViUlRDTWFj
cm9zLmgiCisjaW5jbHVkZSAiTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUuaCIKKyNpbmNsdWRlIDxU
aW1lci5oPgorI2luY2x1ZGUgPHdlYnJ0Yy9hcGkvbWVkaWFzdHJlYW1pbnRlcmZhY2UuaD4KKyNp
bmNsdWRlIDx3ZWJydGMvYmFzZS9vcHRpb25hbC5oPgorI2luY2x1ZGUgPHdlYnJ0Yy9jb21tb25f
dmlkZW8vaW5jbHVkZS9pNDIwX2J1ZmZlcl9wb29sLmg+CisjaW5jbHVkZSA8d2VicnRjL21lZGlh
L2Jhc2UvdmlkZW9zaW5raW50ZXJmYWNlLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Cisj
aW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlIDogcHVibGljIFRocmVhZFNh
ZmVSZWZDb3VudGVkPFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZT4sIHB1YmxpYyB3ZWJydGM6
OlZpZGVvVHJhY2tTb3VyY2VJbnRlcmZhY2UsIHByaXZhdGUgTWVkaWFTdHJlYW1UcmFja1ByaXZh
dGU6Ok9ic2VydmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFJlYWx0aW1lT3V0Z29pbmdW
aWRlb1NvdXJjZT4gY3JlYXRlKFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4mJiB2aWRlb1Nv
dXJjZSk7CisgICAgflJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZSgpIHsgc3RvcCgpOyB9CisK
KyAgICB2b2lkIHN0b3AoKTsKKyAgICBib29sIHNldFNvdXJjZShSZWY8TWVkaWFTdHJlYW1UcmFj
a1ByaXZhdGU+JiYpOworICAgIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJiBzb3VyY2UoKSBjb25z
dCB7IHJldHVybiBtX3ZpZGVvU291cmNlLmdldCgpOyB9CisKKyAgICBpbnQgQWRkUmVmKCkgY29u
c3QgZmluYWwgeyByZWYoKTsgcmV0dXJuIHJlZkNvdW50KCk7IH0KKyAgICBpbnQgUmVsZWFzZSgp
IGNvbnN0IGZpbmFsIHsgZGVyZWYoKTsgcmV0dXJuIHJlZkNvdW50KCk7IH0KKworICAgIHZvaWQg
c2V0QXBwbHlSb3RhdGlvbihib29sIHNob3VsZEFwcGx5Um90YXRpb24pIHsgbV9zaG91bGRBcHBs
eVJvdGF0aW9uID0gc2hvdWxkQXBwbHlSb3RhdGlvbjsgfQorCitwcm90ZWN0ZWQ6CisgICAgZXhw
bGljaXQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlKFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJp
dmF0ZT4mJik7CisKKyAgICB2b2lkIHNlbmRGcmFtZShydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRj
OjpWaWRlb0ZyYW1lQnVmZmVyPiYmKTsKKworICAgIFZlY3RvcjxydGM6OlZpZGVvU2lua0ludGVy
ZmFjZTx3ZWJydGM6OlZpZGVvRnJhbWU+Kj4gbV9zaW5rczsKKyAgICB3ZWJydGM6Okk0MjBCdWZm
ZXJQb29sIG1fYnVmZmVyUG9vbDsKKworICAgIGJvb2wgbV9lbmFibGVkIHsgdHJ1ZSB9OworICAg
IGJvb2wgbV9tdXRlZCB7IGZhbHNlIH07CisgICAgdWludDMyX3QgbV93aWR0aCB7IDAgfTsKKyAg
ICB1aW50MzJfdCBtX2hlaWdodCB7IDAgfTsKKyAgICBib29sIG1fc2hvdWxkQXBwbHlSb3RhdGlv
biB7IGZhbHNlIH07CisgICAgd2VicnRjOjpWaWRlb1JvdGF0aW9uIG1fY3VycmVudFJvdGF0aW9u
IHsgd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8wIH07CisKK3ByaXZhdGU6CisgICAgdm9pZCBzZW5k
QmxhY2tGcmFtZXNJZk5lZWRlZCgpOworICAgIHZvaWQgc2VuZE9uZUJsYWNrRnJhbWUoKTsKKyAg
ICB2b2lkIGluaXRpYWxpemVGcm9tU291cmNlKCk7CisgICAgdm9pZCB1cGRhdGVCbGFja0ZyYW1l
c1NlbmRpbmcoKTsKKworICAgIC8vIE5vdGlmaWVyIEFQSQorICAgIHZvaWQgUmVnaXN0ZXJPYnNl
cnZlcih3ZWJydGM6Ok9ic2VydmVySW50ZXJmYWNlKikgZmluYWwgeyB9CisgICAgdm9pZCBVbnJl
Z2lzdGVyT2JzZXJ2ZXIod2VicnRjOjpPYnNlcnZlckludGVyZmFjZSopIGZpbmFsIHsgfQorCisg
ICAgLy8gVmlkZW9UcmFja1NvdXJjZUludGVyZmFjZSBBUEkKKyAgICBib29sIGlzX3NjcmVlbmNh
c3QoKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQorICAgIHJ0Yzo6T3B0aW9uYWw8Ym9v
bD4gbmVlZHNfZGVub2lzaW5nKCkgY29uc3QgZmluYWwgeyByZXR1cm4gcnRjOjpPcHRpb25hbDxi
b29sPigpOyB9CisgICAgYm9vbCBHZXRTdGF0cyhTdGF0cyopIGZpbmFsOworCisgICAgLy8gTWVk
aWFTb3VyY2VJbnRlcmZhY2UgQVBJCisgICAgU291cmNlU3RhdGUgc3RhdGUoKSBjb25zdCBmaW5h
bCB7IHJldHVybiBTb3VyY2VTdGF0ZSgpOyB9CisgICAgYm9vbCByZW1vdGUoKSBjb25zdCBmaW5h
bCB7IHJldHVybiB0cnVlOyB9CisKKyAgICAvLyBydGM6OlZpZGVvU291cmNlSW50ZXJmYWNlPHdl
YnJ0Yzo6VmlkZW9GcmFtZT4gQVBJCisgICAgdm9pZCBBZGRPclVwZGF0ZVNpbmsocnRjOjpWaWRl
b1NpbmtJbnRlcmZhY2U8d2VicnRjOjpWaWRlb0ZyYW1lPiosIGNvbnN0IHJ0Yzo6VmlkZW9TaW5r
V2FudHMmKSBmaW5hbDsKKyAgICB2b2lkIFJlbW92ZVNpbmsocnRjOjpWaWRlb1NpbmtJbnRlcmZh
Y2U8d2VicnRjOjpWaWRlb0ZyYW1lPiopIGZpbmFsOworCisgICAgdm9pZCBzb3VyY2VNdXRlZENo
YW5nZWQoKTsKKyAgICB2b2lkIHNvdXJjZUVuYWJsZWRDaGFuZ2VkKCk7CisgICAgdmlydHVhbCB2
b2lkIHZpZGVvU2FtcGxlQXZhaWxhYmxlKE1lZGlhU2FtcGxlJikgeyB9OworCisgICAgLy8gTWVk
aWFTdHJlYW1UcmFja1ByaXZhdGU6Ok9ic2VydmVyIEFQSQorICAgIHZvaWQgdHJhY2tNdXRlZENo
YW5nZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmKSBmaW5hbCB7IHNvdXJjZU11dGVkQ2hhbmdl
ZCgpOyB9CisgICAgdm9pZCB0cmFja0VuYWJsZWRDaGFuZ2VkKE1lZGlhU3RyZWFtVHJhY2tQcml2
YXRlJikgZmluYWwgeyBzb3VyY2VFbmFibGVkQ2hhbmdlZCgpOyB9CisgICAgdm9pZCB0cmFja1Nl
dHRpbmdzQ2hhbmdlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYpIGZpbmFsIHsgaW5pdGlhbGl6
ZUZyb21Tb3VyY2UoKTsgfQorICAgIHZvaWQgc2FtcGxlQnVmZmVyVXBkYXRlZChNZWRpYVN0cmVh
bVRyYWNrUHJpdmF0ZSYsIE1lZGlhU2FtcGxlJiBzYW1wbGUpIGZpbmFsIHsgdmlkZW9TYW1wbGVB
dmFpbGFibGUoc2FtcGxlKTsgfQorICAgIHZvaWQgdHJhY2tFbmRlZChNZWRpYVN0cmVhbVRyYWNr
UHJpdmF0ZSYpIGZpbmFsIHsgfQorCisgICAgUmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiBt
X3ZpZGVvU291cmNlOworICAgIHN0ZDo6b3B0aW9uYWw8UmVhbHRpbWVNZWRpYVNvdXJjZVNldHRp
bmdzPiBtX2luaXRpYWxTZXR0aW5nczsKKyAgICBib29sIG1faXNTdG9wcGVkIHsgZmFsc2UgfTsK
KyAgICBUaW1lciBtX2JsYWNrRnJhbWVUaW1lcjsKKyAgICBydGM6OnNjb3BlZF9yZWZwdHI8d2Vi
cnRjOjpWaWRlb0ZyYW1lQnVmZmVyPiBtX2JsYWNrRnJhbWU7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoTElCV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lSW5jb21pbmdWaWRlb1Nv
dXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRp
bWVJbmNvbWluZ1ZpZGVvU291cmNlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YzI2MThkNjk1Mjc2M2ZlN2Q3YzRiNmI4Y2U0ZjljZGMxODI3YTM3MS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDIwNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgotICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRv
cnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20gdGhpcwotICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmgiCi0KLSNpZiBVU0UoTElCV0VCUlRDKQot
Ci0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIk1lZGlhU2FtcGxlQVZGT2JqQy5oIgot
I2luY2x1ZGUgPHdlYnJ0Yy9zZGsvb2JqYy9GcmFtZXdvcmsvQ2xhc3Nlcy9WaWRlby9jb3Jldmlk
ZW9fZnJhbWVfYnVmZmVyLmg+Ci0KLSNpbmNsdWRlICJDb3JlTWVkaWFTb2Z0TGluay5oIgotI2lu
Y2x1ZGUgIkNvcmVWaWRlb1NvZnRMaW5rLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUmVm
PFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZT4gUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNl
OjpjcmVhdGUocnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9UcmFja0ludGVyZmFjZT4m
JiB2aWRlb1RyYWNrLCBTdHJpbmcmJiB0cmFja0lkKQotewotICAgIGF1dG8gc291cmNlID0gYWRv
cHRSZWYoKm5ldyBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UoV1RGTW92ZSh2aWRlb1RyYWNr
KSwgV1RGTW92ZSh0cmFja0lkKSkpOwotICAgIHNvdXJjZS0+c3RhcnQoKTsKLSAgICByZXR1cm4g
c291cmNlOwotfQotCi1SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6OlJlYWx0aW1lSW5jb21p
bmdWaWRlb1NvdXJjZShydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb1RyYWNrSW50ZXJm
YWNlPiYmIHZpZGVvVHJhY2ssIFN0cmluZyYmIHZpZGVvVHJhY2tJZCkKLSAgICA6IFJlYWx0aW1l
TWVkaWFTb3VyY2UoV1RGTW92ZSh2aWRlb1RyYWNrSWQpLCBSZWFsdGltZU1lZGlhU291cmNlOjpU
eXBlOjpWaWRlbywgU3RyaW5nKCkpCi0gICAgLCBtX3ZpZGVvVHJhY2soV1RGTW92ZSh2aWRlb1Ry
YWNrKSkKLXsKLSAgICBtX2N1cnJlbnRTZXR0aW5ncy5zZXRXaWR0aCg2NDApOwotICAgIG1fY3Vy
cmVudFNldHRpbmdzLnNldEhlaWdodCg0ODApOwotICAgIG5vdGlmeU11dGVkQ2hhbmdlKCFtX3Zp
ZGVvVHJhY2spOwotfQotCi12b2lkIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6c3RhcnRQ
cm9kdWNpbmdEYXRhKCkKLXsKLSAgICBpZiAobV92aWRlb1RyYWNrKQotICAgICAgICBtX3ZpZGVv
VHJhY2stPkFkZE9yVXBkYXRlU2luayh0aGlzLCBydGM6OlZpZGVvU2lua1dhbnRzKCkpOwotfQot
Ci12b2lkIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6c2V0U291cmNlVHJhY2socnRjOjpz
Y29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9UcmFja0ludGVyZmFjZT4mJiB0cmFjaykKLXsKLSAg
ICBBU1NFUlQoIW1fdmlkZW9UcmFjayk7Ci0gICAgQVNTRVJUKHRyYWNrKTsKLQotICAgIG1fdmlk
ZW9UcmFjayA9IFdURk1vdmUodHJhY2spOwotICAgIG5vdGlmeU11dGVkQ2hhbmdlKCFtX3ZpZGVv
VHJhY2spOwotICAgIGlmIChpc1Byb2R1Y2luZ0RhdGEoKSkKLSAgICAgICAgbV92aWRlb1RyYWNr
LT5BZGRPclVwZGF0ZVNpbmsodGhpcywgcnRjOjpWaWRlb1NpbmtXYW50cygpKTsKLX0KLQotdm9p
ZCBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6OnN0b3BQcm9kdWNpbmdEYXRhKCkKLXsKLSAg
ICBpZiAobV92aWRlb1RyYWNrKQotICAgICAgICBtX3ZpZGVvVHJhY2stPlJlbW92ZVNpbmsodGhp
cyk7Ci19Ci0KLUNWUGl4ZWxCdWZmZXJSZWYgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlOjpw
aXhlbEJ1ZmZlckZyb21WaWRlb0ZyYW1lKGNvbnN0IHdlYnJ0Yzo6VmlkZW9GcmFtZSYgZnJhbWUp
Ci17Ci0gICAgaWYgKG11dGVkKCkpIHsKLSAgICAgICAgaWYgKCFtX2JsYWNrRnJhbWUgfHwgbV9i
bGFja0ZyYW1lV2lkdGggIT0gZnJhbWUud2lkdGgoKSB8fCBtX2JsYWNrRnJhbWVIZWlnaHQgIT0g
ZnJhbWUuaGVpZ2h0KCkpIHsKLSAgICAgICAgICAgIENWUGl4ZWxCdWZmZXJSZWYgcGl4ZWxCdWZm
ZXIgPSBudWxscHRyOwotICAgICAgICAgICAgYXV0byBzdGF0dXMgPSBDVlBpeGVsQnVmZmVyQ3Jl
YXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGZyYW1lLndpZHRoKCksIGZyYW1lLmhlaWdodCgpLCBr
Q1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyOFBsYW5hciwgbnVsbHB0ciwgJnBpeGVsQnVmZmVy
KTsKLSAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoc3RhdHVzLCBzdGF0dXMgPT0gbm9FcnIpOwot
Ci0gICAgICAgICAgICBtX2JsYWNrRnJhbWUgPSBwaXhlbEJ1ZmZlcjsKLSAgICAgICAgICAgIG1f
YmxhY2tGcmFtZVdpZHRoID0gZnJhbWUud2lkdGgoKTsKLSAgICAgICAgICAgIG1fYmxhY2tGcmFt
ZUhlaWdodCA9IGZyYW1lLmhlaWdodCgpOwotCi0gICAgICAgICAgICBzdGF0dXMgPSBDVlBpeGVs
QnVmZmVyTG9ja0Jhc2VBZGRyZXNzKHBpeGVsQnVmZmVyLCAwKTsKLSAgICAgICAgICAgIEFTU0VS
VChzdGF0dXMgPT0gbm9FcnIpOwotICAgICAgICAgICAgdm9pZCogZGF0YSA9IENWUGl4ZWxCdWZm
ZXJHZXRCYXNlQWRkcmVzcyhwaXhlbEJ1ZmZlcik7Ci0gICAgICAgICAgICBzaXplX3QgeUxlbmd0
aCA9IGZyYW1lLndpZHRoKCkgKiBmcmFtZS5oZWlnaHQoKTsKLSAgICAgICAgICAgIG1lbXNldChk
YXRhLCAwLCB5TGVuZ3RoKTsKLSAgICAgICAgICAgIG1lbXNldChzdGF0aWNfY2FzdDx1aW50OF90
Kj4oZGF0YSkgKyB5TGVuZ3RoLCAxMjgsIHlMZW5ndGggLyAyKTsKLQotICAgICAgICAgICAgc3Rh
dHVzID0gQ1ZQaXhlbEJ1ZmZlclVubG9ja0Jhc2VBZGRyZXNzKHBpeGVsQnVmZmVyLCAwKTsKLSAg
ICAgICAgICAgIEFTU0VSVCghc3RhdHVzKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbV9i
bGFja0ZyYW1lLmdldCgpOwotICAgIH0KLSAgICBhdXRvIGJ1ZmZlciA9IGZyYW1lLnZpZGVvX2Zy
YW1lX2J1ZmZlcigpOwotICAgIEFTU0VSVChidWZmZXItPnR5cGUoKSA9PSB3ZWJydGM6OlZpZGVv
RnJhbWVCdWZmZXI6OlR5cGU6OmtOYXRpdmUpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDx3ZWJy
dGM6OkNvcmVWaWRlb0ZyYW1lQnVmZmVyJj4oKmJ1ZmZlcikucGl4ZWxfYnVmZmVyKCk7Ci19Ci0K
LXZvaWQgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlOjpPbkZyYW1lKGNvbnN0IHdlYnJ0Yzo6
VmlkZW9GcmFtZSYgZnJhbWUpCi17Ci0gICAgaWYgKCFpc1Byb2R1Y2luZ0RhdGEoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0jaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECi0gICAgaWYgKCEoKyttX251
bWJlck9mRnJhbWVzICUgMzApKQotICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYVN0cmVhbSwgIlJl
YWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6T25GcmFtZSAlenUgZnJhbWUiLCBtX251bWJlck9m
RnJhbWVzKTsKLSNlbmRpZgotCi0gICAgYXV0byBwaXhlbEJ1ZmZlciA9IHBpeGVsQnVmZmVyRnJv
bVZpZGVvRnJhbWUoZnJhbWUpOwotCi0gICAgLy8gRklYTUU6IENvbnZlcnQgdGltaW5nIGluZm9y
bWF0aW9uIGZyb20gVmlkZW9GcmFtZSB0byBDTVNhbXBsZVRpbWluZ0luZm8uCi0gICAgLy8gRm9y
IHRoZSBtb21lbnQsIHdlIHdpbGwgcHJldGVuZCB0aGF0IGZyYW1lcyBzaG91bGQgYmUgcmVuZGVy
ZWQgYXNhcC4KLSAgICBDTVNhbXBsZVRpbWluZ0luZm8gdGltaW5nSW5mbzsKLSAgICB0aW1pbmdJ
bmZvLnByZXNlbnRhdGlvblRpbWVTdGFtcCA9IGtDTVRpbWVJbnZhbGlkOwotICAgIHRpbWluZ0lu
Zm8uZGVjb2RlVGltZVN0YW1wID0ga0NNVGltZUludmFsaWQ7Ci0gICAgdGltaW5nSW5mby5kdXJh
dGlvbiA9IGtDTVRpbWVJbnZhbGlkOwotCi0gICAgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uUmVm
IGZvcm1hdERlc2NyaXB0aW9uOwotICAgIE9TU3RhdHVzIG9zdGF0dXMgPSBDTVZpZGVvRm9ybWF0
RGVzY3JpcHRpb25DcmVhdGVGb3JJbWFnZUJ1ZmZlcihrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAoQ1ZJ
bWFnZUJ1ZmZlclJlZilwaXhlbEJ1ZmZlciwgJmZvcm1hdERlc2NyaXB0aW9uKTsKLSAgICBpZiAo
b3N0YXR1cyAhPSBub0VycikgewotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBpbml0aWFs
aXplIENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbjogJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KG9zdGF0
dXMpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIENNU2FtcGxlQnVmZmVyUmVmIHNh
bXBsZUJ1ZmZlcjsKLSAgICBvc3RhdHVzID0gQ01TYW1wbGVCdWZmZXJDcmVhdGVSZWFkeVdpdGhJ
bWFnZUJ1ZmZlcihrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAoQ1ZJbWFnZUJ1ZmZlclJlZilwaXhlbEJ1
ZmZlciwgZm9ybWF0RGVzY3JpcHRpb24sICZ0aW1pbmdJbmZvLCAmc2FtcGxlQnVmZmVyKTsKLSAg
ICBpZiAob3N0YXR1cyAhPSBub0VycikgewotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBj
cmVhdGUgdGhlIHNhbXBsZSBidWZmZXI6ICVkIiwgc3RhdGljX2Nhc3Q8aW50Pihvc3RhdHVzKSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgQ0ZSZWxlYXNlKGZvcm1hdERlc2NyaXB0aW9u
KTsKLQotICAgIGF1dG8gc2FtcGxlID0gYWRvcHRDRihzYW1wbGVCdWZmZXIpOwotCi0gICAgQ0ZB
cnJheVJlZiBhdHRhY2htZW50c0FycmF5ID0gQ01TYW1wbGVCdWZmZXJHZXRTYW1wbGVBdHRhY2ht
ZW50c0FycmF5KHNhbXBsZUJ1ZmZlciwgdHJ1ZSk7Ci0gICAgZm9yIChDRkluZGV4IGkgPSAwOyBp
IDwgQ0ZBcnJheUdldENvdW50KGF0dGFjaG1lbnRzQXJyYXkpOyArK2kpIHsKLSAgICAgICAgQ0ZN
dXRhYmxlRGljdGlvbmFyeVJlZiBhdHRhY2htZW50cyA9IChDRk11dGFibGVEaWN0aW9uYXJ5UmVm
KUNGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoYXR0YWNobWVudHNBcnJheSwgaSk7Ci0gICAgICAgIENG
RGljdGlvbmFyeVNldFZhbHVlKGF0dGFjaG1lbnRzLCBrQ01TYW1wbGVBdHRhY2htZW50S2V5X0Rp
c3BsYXlJbW1lZGlhdGVseSwga0NGQm9vbGVhblRydWUpOwotICAgIH0KLQotICAgIHVuc2lnbmVk
IHdpZHRoID0gZnJhbWUud2lkdGgoKTsKLSAgICB1bnNpZ25lZCBoZWlnaHQgPSBmcmFtZS5oZWln
aHQoKTsKLQotICAgIE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uIHJvdGF0aW9uOwotICAgIHN3
aXRjaCAoZnJhbWUucm90YXRpb24oKSkgewotICAgIGNhc2Ugd2VicnRjOjprVmlkZW9Sb3RhdGlv
bl8wOgotICAgICAgICByb3RhdGlvbiA9IE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpOb25l
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMTgwOgot
ICAgICAgICByb3RhdGlvbiA9IE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpVcHNpZGVEb3du
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fOTA6Ci0g
ICAgICAgIHJvdGF0aW9uID0gTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246OlJpZ2h0OwotICAg
ICAgICBzdGQ6OnN3YXAod2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
d2VicnRjOjprVmlkZW9Sb3RhdGlvbl8yNzA6Ci0gICAgICAgIHJvdGF0aW9uID0gTWVkaWFTYW1w
bGU6OlZpZGVvUm90YXRpb246OkxlZnQ7Ci0gICAgICAgIHN0ZDo6c3dhcCh3aWR0aCwgaGVpZ2h0
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgUmVmUHRyPFJlYWx0aW1lSW5jb21pbmdW
aWRlb1NvdXJjZT4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKLSAgICBjYWxsT25NYWluVGhyZWFkKFtw
cm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwgc2FtcGxlID0gV1RGTW92ZShz
YW1wbGUpLCB3aWR0aCwgaGVpZ2h0LCByb3RhdGlvbl0gewotICAgICAgICBwcm90ZWN0ZWRUaGlz
LT5wcm9jZXNzTmV3U2FtcGxlKHNhbXBsZS5nZXQoKSwgd2lkdGgsIGhlaWdodCwgcm90YXRpb24p
OwotICAgIH0pOwotfQotCi12b2lkIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6cHJvY2Vz
c05ld1NhbXBsZShDTVNhbXBsZUJ1ZmZlclJlZiBzYW1wbGUsIHVuc2lnbmVkIHdpZHRoLCB1bnNp
Z25lZCBoZWlnaHQsIE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uIHJvdGF0aW9uKQotewotICAg
IG1fYnVmZmVyID0gc2FtcGxlOwotICAgIGlmICh3aWR0aCAhPSBtX2N1cnJlbnRTZXR0aW5ncy53
aWR0aCgpIHx8IGhlaWdodCAhPSBtX2N1cnJlbnRTZXR0aW5ncy5oZWlnaHQoKSkgewotICAgICAg
ICBtX2N1cnJlbnRTZXR0aW5ncy5zZXRXaWR0aCh3aWR0aCk7Ci0gICAgICAgIG1fY3VycmVudFNl
dHRpbmdzLnNldEhlaWdodChoZWlnaHQpOwotICAgICAgICBzZXR0aW5nc0RpZENoYW5nZSgpOwot
ICAgIH0KLQotICAgIHZpZGVvU2FtcGxlQXZhaWxhYmxlKE1lZGlhU2FtcGxlQVZGT2JqQzo6Y3Jl
YXRlKHNhbXBsZSwgcm90YXRpb24pKTsKLX0KLQotY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZUNh
cGFiaWxpdGllcyYgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlOjpjYXBhYmlsaXRpZXMoKSBj
b25zdAotewotICAgIHJldHVybiBSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzOjplbXB0
eUNhcGFiaWxpdGllcygpOwotfQotCi1jb25zdCBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3Mm
IFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6c2V0dGluZ3MoKSBjb25zdAotewotICAgIHJl
dHVybiBtX2N1cnJlbnRTZXR0aW5nczsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gVVNFKExJQldFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUluY29taW5nVmlkZW9T
b3VyY2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWViN2MzNjRmZTMyMzIyMjJl
YWI0ZjI1YjdiNDEwMGNjOTEwMjgwOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVh
bHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogICAgaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQotICogICAgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBFcmljc3Nv
biBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotICogICAgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
LSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIFVTRShMSUJXRUJSVEMpCi0KLSNpbmNsdWRlICJMaWJX
ZWJSVENNYWNyb3MuaCIKLSNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNlLmgiCi0jaW5jbHVk
ZSA8d2VicnRjL2FwaS9tZWRpYXN0cmVhbWludGVyZmFjZS5oPgotI2luY2x1ZGUgPHd0Zi9SZXRh
aW5QdHIuaD4KLQotdXNpbmcgQ01TYW1wbGVCdWZmZXJSZWYgPSBzdHJ1Y3Qgb3BhcXVlQ01TYW1w
bGVCdWZmZXIqOwotdXNpbmcgQ1ZQaXhlbEJ1ZmZlclJlZiA9IHN0cnVjdCBfX0NWQnVmZmVyKjsK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBDYXB0dXJlRGV2aWNlOwotCi1jbGFzcyBS
ZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UgZmluYWwgOiBwdWJsaWMgUmVhbHRpbWVNZWRpYVNv
dXJjZSwgcHJpdmF0ZSBydGM6OlZpZGVvU2lua0ludGVyZmFjZTx3ZWJydGM6OlZpZGVvRnJhbWU+
IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZT4g
Y3JlYXRlKHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvVHJhY2tJbnRlcmZhY2U+JiYs
IFN0cmluZyYmKTsKLSAgICB+UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlKCkgeyBzdG9wUHJv
ZHVjaW5nRGF0YSgpOyB9Ci0KLSAgICB2b2lkIHNldFNvdXJjZVRyYWNrKHJ0Yzo6c2NvcGVkX3Jl
ZnB0cjx3ZWJydGM6OlZpZGVvVHJhY2tJbnRlcmZhY2U+JiYpOwotCi1wcml2YXRlOgotICAgIFJl
YWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZShydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRl
b1RyYWNrSW50ZXJmYWNlPiYmLCBTdHJpbmcmJik7Ci0KLSAgICAvLyBSZWFsdGltZU1lZGlhU291
cmNlIEFQSQotICAgIHZvaWQgc3RhcnRQcm9kdWNpbmdEYXRhKCkgZmluYWw7Ci0gICAgdm9pZCBz
dG9wUHJvZHVjaW5nRGF0YSgpICBmaW5hbDsKLQotICAgIGNvbnN0IFJlYWx0aW1lTWVkaWFTb3Vy
Y2VDYXBhYmlsaXRpZXMmIGNhcGFiaWxpdGllcygpIGNvbnN0IGZpbmFsOwotICAgIGNvbnN0IFJl
YWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyYgc2V0dGluZ3MoKSBjb25zdCBmaW5hbDsKLQotICAg
IHZvaWQgcHJvY2Vzc05ld1NhbXBsZShDTVNhbXBsZUJ1ZmZlclJlZiwgdW5zaWduZWQsIHVuc2ln
bmVkLCBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbik7Ci0KLSAgICBib29sIGFwcGx5U2l6ZShj
b25zdCBJbnRTaXplJikgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgLy8gcnRjOjpWaWRl
b1NpbmtJbnRlcmZhY2UKLSAgICB2b2lkIE9uRnJhbWUoY29uc3Qgd2VicnRjOjpWaWRlb0ZyYW1l
JikgZmluYWw7Ci0KLSAgICBDVlBpeGVsQnVmZmVyUmVmIHBpeGVsQnVmZmVyRnJvbVZpZGVvRnJh
bWUoY29uc3Qgd2VicnRjOjpWaWRlb0ZyYW1lJik7Ci0KLSAgICBSZWFsdGltZU1lZGlhU291cmNl
U2V0dGluZ3MgbV9jdXJyZW50U2V0dGluZ3M7Ci0gICAgcnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0
Yzo6VmlkZW9UcmFja0ludGVyZmFjZT4gbV92aWRlb1RyYWNrOwotICAgIFJldGFpblB0cjxDTVNh
bXBsZUJ1ZmZlclJlZj4gbV9idWZmZXI7Ci0gICAgUmV0YWluUHRyPENWUGl4ZWxCdWZmZXJSZWY+
IG1fYmxhY2tGcmFtZTsKLSAgICBpbnQgbV9ibGFja0ZyYW1lV2lkdGggeyAwIH07Ci0gICAgaW50
IG1fYmxhY2tGcmFtZUhlaWdodCB7IDAgfTsKLSNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKLSAg
ICBzaXplX3QgbV9udW1iZXJPZkZyYW1lcyB7IDAgfTsKLSNlbmRpZgotfTsKLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKExJQldFQlJUQykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUluY29taW5nVmlk
ZW9Tb3VyY2VNYWMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFj
L1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1hYy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTQxZGE5OWM5
YWU5MmM2ZjllMDkyYWZiMmU5N2JiNjY5ZGE1ZGNhMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUluY29taW5nVmlkZW9T
b3VyY2VNYWMuY3BwCkBAIC0wLDAgKzEsMTY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICog
My4gTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cyBj
b250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTWFjLmgiCisKKyNpZiBVU0Uo
TElCV0VCUlRDKQorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIk1lZGlhU2FtcGxl
QVZGT2JqQy5oIgorI2luY2x1ZGUgPHdlYnJ0Yy9zZGsvb2JqYy9GcmFtZXdvcmsvQ2xhc3Nlcy9W
aWRlby9jb3JldmlkZW9fZnJhbWVfYnVmZmVyLmg+CisKKyNpbmNsdWRlICJDb3JlTWVkaWFTb2Z0
TGluay5oIgorI2luY2x1ZGUgIkNvcmVWaWRlb1NvZnRMaW5rLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworUmVmPFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1hYz4gUmVhbHRpbWVJbmNv
bWluZ1ZpZGVvU291cmNlTWFjOjpjcmVhdGUocnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6Vmlk
ZW9UcmFja0ludGVyZmFjZT4mJiB2aWRlb1RyYWNrLCBTdHJpbmcmJiB0cmFja0lkKQoreworICAg
IGF1dG8gc291cmNlID0gYWRvcHRSZWYoKm5ldyBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VN
YWMoV1RGTW92ZSh2aWRlb1RyYWNrKSwgV1RGTW92ZSh0cmFja0lkKSkpOworICAgIHJldHVybiBz
b3VyY2U7Cit9CisKK1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1hYzo6UmVhbHRpbWVJbmNv
bWluZ1ZpZGVvU291cmNlTWFjKHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvVHJhY2tJ
bnRlcmZhY2U+JiYgdmlkZW9UcmFjaywgU3RyaW5nJiYgdmlkZW9UcmFja0lkKQorICAgIDogUmVh
bHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlKFdURk1vdmUodmlkZW9UcmFjayksIFdURk1vdmUodmlk
ZW9UcmFja0lkKSkKK3sKK30KKworQ1ZQaXhlbEJ1ZmZlclJlZiBSZWFsdGltZUluY29taW5nVmlk
ZW9Tb3VyY2VNYWM6OnBpeGVsQnVmZmVyRnJvbVZpZGVvRnJhbWUoY29uc3Qgd2VicnRjOjpWaWRl
b0ZyYW1lJiBmcmFtZSkKK3sKKyAgICBpZiAobXV0ZWQoKSkgeworICAgICAgICBpZiAoIW1fYmxh
Y2tGcmFtZSB8fCBtX2JsYWNrRnJhbWVXaWR0aCAhPSBmcmFtZS53aWR0aCgpIHx8IG1fYmxhY2tG
cmFtZUhlaWdodCAhPSBmcmFtZS5oZWlnaHQoKSkgeworICAgICAgICAgICAgQ1ZQaXhlbEJ1ZmZl
clJlZiBwaXhlbEJ1ZmZlciA9IG51bGxwdHI7CisgICAgICAgICAgICBhdXRvIHN0YXR1cyA9IENW
UGl4ZWxCdWZmZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgZnJhbWUud2lkdGgoKSwgZnJh
bWUuaGVpZ2h0KCksIGtDVlBpeGVsRm9ybWF0VHlwZV80MjBZcENiQ3I4UGxhbmFyLCBudWxscHRy
LCAmcGl4ZWxCdWZmZXIpOworICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChzdGF0dXMsIHN0YXR1
cyA9PSBub0Vycik7CisKKyAgICAgICAgICAgIG1fYmxhY2tGcmFtZSA9IHBpeGVsQnVmZmVyOwor
ICAgICAgICAgICAgbV9ibGFja0ZyYW1lV2lkdGggPSBmcmFtZS53aWR0aCgpOworICAgICAgICAg
ICAgbV9ibGFja0ZyYW1lSGVpZ2h0ID0gZnJhbWUuaGVpZ2h0KCk7CisKKyAgICAgICAgICAgIHN0
YXR1cyA9IENWUGl4ZWxCdWZmZXJMb2NrQmFzZUFkZHJlc3MocGl4ZWxCdWZmZXIsIDApOworICAg
ICAgICAgICAgQVNTRVJUKHN0YXR1cyA9PSBub0Vycik7CisgICAgICAgICAgICB2b2lkKiBkYXRh
ID0gQ1ZQaXhlbEJ1ZmZlckdldEJhc2VBZGRyZXNzKHBpeGVsQnVmZmVyKTsKKyAgICAgICAgICAg
IHNpemVfdCB5TGVuZ3RoID0gZnJhbWUud2lkdGgoKSAqIGZyYW1lLmhlaWdodCgpOworICAgICAg
ICAgICAgbWVtc2V0KGRhdGEsIDAsIHlMZW5ndGgpOworICAgICAgICAgICAgbWVtc2V0KHN0YXRp
Y19jYXN0PHVpbnQ4X3QqPihkYXRhKSArIHlMZW5ndGgsIDEyOCwgeUxlbmd0aCAvIDIpOworCisg
ICAgICAgICAgICBzdGF0dXMgPSBDVlBpeGVsQnVmZmVyVW5sb2NrQmFzZUFkZHJlc3MocGl4ZWxC
dWZmZXIsIDApOworICAgICAgICAgICAgQVNTRVJUKCFzdGF0dXMpOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBtX2JsYWNrRnJhbWUuZ2V0KCk7CisgICAgfQorICAgIGF1dG8gYnVmZmVyID0g
ZnJhbWUudmlkZW9fZnJhbWVfYnVmZmVyKCk7CisgICAgQVNTRVJUKGJ1ZmZlci0+dHlwZSgpID09
IHdlYnJ0Yzo6VmlkZW9GcmFtZUJ1ZmZlcjo6VHlwZTo6a05hdGl2ZSk7CisgICAgcmV0dXJuIHN0
YXRpY19jYXN0PHdlYnJ0Yzo6Q29yZVZpZGVvRnJhbWVCdWZmZXImPigqYnVmZmVyKS5waXhlbF9i
dWZmZXIoKTsKK30KKwordm9pZCBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWM6Ok9uRnJh
bWUoY29uc3Qgd2VicnRjOjpWaWRlb0ZyYW1lJiBmcmFtZSkKK3sKKyAgICBpZiAoIWlzUHJvZHVj
aW5nRGF0YSgpKQorICAgICAgICByZXR1cm47CisKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQK
KyAgICBpZiAoISgrK21fbnVtYmVyT2ZGcmFtZXMgJSAzMCkpCisgICAgICAgIFJFTEVBU0VfTE9H
KE1lZGlhU3RyZWFtLCAiUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTWFjOjpPbkZyYW1lICV6
dSBmcmFtZSIsIG1fbnVtYmVyT2ZGcmFtZXMpOworI2VuZGlmCisKKyAgICBhdXRvIHBpeGVsQnVm
ZmVyID0gcGl4ZWxCdWZmZXJGcm9tVmlkZW9GcmFtZShmcmFtZSk7CisKKyAgICAvLyBGSVhNRTog
Q29udmVydCB0aW1pbmcgaW5mb3JtYXRpb24gZnJvbSBWaWRlb0ZyYW1lIHRvIENNU2FtcGxlVGlt
aW5nSW5mby4KKyAgICAvLyBGb3IgdGhlIG1vbWVudCwgd2Ugd2lsbCBwcmV0ZW5kIHRoYXQgZnJh
bWVzIHNob3VsZCBiZSByZW5kZXJlZCBhc2FwLgorICAgIENNU2FtcGxlVGltaW5nSW5mbyB0aW1p
bmdJbmZvOworICAgIHRpbWluZ0luZm8ucHJlc2VudGF0aW9uVGltZVN0YW1wID0ga0NNVGltZUlu
dmFsaWQ7CisgICAgdGltaW5nSW5mby5kZWNvZGVUaW1lU3RhbXAgPSBrQ01UaW1lSW52YWxpZDsK
KyAgICB0aW1pbmdJbmZvLmR1cmF0aW9uID0ga0NNVGltZUludmFsaWQ7CisKKyAgICBDTVZpZGVv
Rm9ybWF0RGVzY3JpcHRpb25SZWYgZm9ybWF0RGVzY3JpcHRpb247CisgICAgT1NTdGF0dXMgb3N0
YXR1cyA9IENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbkNyZWF0ZUZvckltYWdlQnVmZmVyKGtDRkFs
bG9jYXRvckRlZmF1bHQsIChDVkltYWdlQnVmZmVyUmVmKXBpeGVsQnVmZmVyLCAmZm9ybWF0RGVz
Y3JpcHRpb24pOworICAgIGlmIChvc3RhdHVzICE9IG5vRXJyKSB7CisgICAgICAgIExPR19FUlJP
UigiRmFpbGVkIHRvIGluaXRpYWxpemUgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uOiAlZCIsIHN0
YXRpY19jYXN0PGludD4ob3N0YXR1cykpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
Q01TYW1wbGVCdWZmZXJSZWYgc2FtcGxlQnVmZmVyOworICAgIG9zdGF0dXMgPSBDTVNhbXBsZUJ1
ZmZlckNyZWF0ZVJlYWR5V2l0aEltYWdlQnVmZmVyKGtDRkFsbG9jYXRvckRlZmF1bHQsIChDVklt
YWdlQnVmZmVyUmVmKXBpeGVsQnVmZmVyLCBmb3JtYXREZXNjcmlwdGlvbiwgJnRpbWluZ0luZm8s
ICZzYW1wbGVCdWZmZXIpOworICAgIGlmIChvc3RhdHVzICE9IG5vRXJyKSB7CisgICAgICAgIExP
R19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSB0aGUgc2FtcGxlIGJ1ZmZlcjogJWQiLCBzdGF0aWNf
Y2FzdDxpbnQ+KG9zdGF0dXMpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBDRlJlbGVh
c2UoZm9ybWF0RGVzY3JpcHRpb24pOworCisgICAgYXV0byBzYW1wbGUgPSBhZG9wdENGKHNhbXBs
ZUJ1ZmZlcik7CisKKyAgICBDRkFycmF5UmVmIGF0dGFjaG1lbnRzQXJyYXkgPSBDTVNhbXBsZUJ1
ZmZlckdldFNhbXBsZUF0dGFjaG1lbnRzQXJyYXkoc2FtcGxlQnVmZmVyLCB0cnVlKTsKKyAgICBm
b3IgKENGSW5kZXggaSA9IDA7IGkgPCBDRkFycmF5R2V0Q291bnQoYXR0YWNobWVudHNBcnJheSk7
ICsraSkgeworICAgICAgICBDRk11dGFibGVEaWN0aW9uYXJ5UmVmIGF0dGFjaG1lbnRzID0gKENG
TXV0YWJsZURpY3Rpb25hcnlSZWYpQ0ZBcnJheUdldFZhbHVlQXRJbmRleChhdHRhY2htZW50c0Fy
cmF5LCBpKTsKKyAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUoYXR0YWNobWVudHMsIGtDTVNh
bXBsZUF0dGFjaG1lbnRLZXlfRGlzcGxheUltbWVkaWF0ZWx5LCBrQ0ZCb29sZWFuVHJ1ZSk7Cisg
ICAgfQorCisgICAgdW5zaWduZWQgd2lkdGggPSBmcmFtZS53aWR0aCgpOworICAgIHVuc2lnbmVk
IGhlaWdodCA9IGZyYW1lLmhlaWdodCgpOworCisgICAgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRp
b24gcm90YXRpb247CisgICAgc3dpdGNoIChmcmFtZS5yb3RhdGlvbigpKSB7CisgICAgY2FzZSB3
ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzA6CisgICAgICAgIHJvdGF0aW9uID0gTWVkaWFTYW1wbGU6
OlZpZGVvUm90YXRpb246Ok5vbmU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugd2VicnRjOjpr
VmlkZW9Sb3RhdGlvbl8xODA6CisgICAgICAgIHJvdGF0aW9uID0gTWVkaWFTYW1wbGU6OlZpZGVv
Um90YXRpb246OlVwc2lkZURvd247CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugd2VicnRjOjpr
VmlkZW9Sb3RhdGlvbl85MDoKKyAgICAgICAgcm90YXRpb24gPSBNZWRpYVNhbXBsZTo6VmlkZW9S
b3RhdGlvbjo6UmlnaHQ7CisgICAgICAgIHN0ZDo6c3dhcCh3aWR0aCwgaGVpZ2h0KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzI3MDoKKyAgICAgICAg
cm90YXRpb24gPSBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6TGVmdDsKKyAgICAgICAgc3Rk
Ojpzd2FwKHdpZHRoLCBoZWlnaHQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBSZWZQ
dHI8UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTWFjPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwor
ICAgIGNhbGxPbk1haW5UaHJlYWQoW3Byb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRo
aXMpLCBzYW1wbGUgPSBXVEZNb3ZlKHNhbXBsZSksIHdpZHRoLCBoZWlnaHQsIHJvdGF0aW9uXSB7
CisgICAgICAgIHByb3RlY3RlZFRoaXMtPnByb2Nlc3NOZXdTYW1wbGUoc2FtcGxlLmdldCgpLCB3
aWR0aCwgaGVpZ2h0LCByb3RhdGlvbik7CisgICAgfSk7Cit9CisKK3ZvaWQgUmVhbHRpbWVJbmNv
bWluZ1ZpZGVvU291cmNlTWFjOjpwcm9jZXNzTmV3U2FtcGxlKENNU2FtcGxlQnVmZmVyUmVmIHNh
bXBsZSwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgTWVkaWFTYW1wbGU6OlZpZGVv
Um90YXRpb24gcm90YXRpb24pCit7CisgICAgbV9idWZmZXIgPSBzYW1wbGU7CisgICAgaWYgKHdp
ZHRoICE9IG1fY3VycmVudFNldHRpbmdzLndpZHRoKCkgfHwgaGVpZ2h0ICE9IG1fY3VycmVudFNl
dHRpbmdzLmhlaWdodCgpKSB7CisgICAgICAgIG1fY3VycmVudFNldHRpbmdzLnNldFdpZHRoKHdp
ZHRoKTsKKyAgICAgICAgbV9jdXJyZW50U2V0dGluZ3Muc2V0SGVpZ2h0KGhlaWdodCk7CisgICAg
ICAgIHNldHRpbmdzRGlkQ2hhbmdlKCk7CisgICAgfQorCisgICAgdmlkZW9TYW1wbGVBdmFpbGFi
bGUoTWVkaWFTYW1wbGVBVkZPYmpDOjpjcmVhdGUoc2FtcGxlLCByb3RhdGlvbikpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoTElCV0VCUlRDKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lSW5j
b21pbmdWaWRlb1NvdXJjZU1hYy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vbWFjL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1hYy5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU4ODdh
NjU1YjE0NjViZGY5ZjQ2MzA0ZDg2MDcwODZhNjU1ZTkwNjUKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVJbmNvbWluZ1Zp
ZGVvU291cmNlTWFjLmgKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAq
IDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29u
dHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBV
U0UoTElCV0VCUlRDKQorCisjaW5jbHVkZSAiUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmgi
CisKK3VzaW5nIENNU2FtcGxlQnVmZmVyUmVmID0gc3RydWN0IG9wYXF1ZUNNU2FtcGxlQnVmZmVy
KjsKK3VzaW5nIENWUGl4ZWxCdWZmZXJSZWYgPSBzdHJ1Y3QgX19DVkJ1ZmZlcio7CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTWFjIGZp
bmFsIDogcHVibGljIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZSB7CitwdWJsaWM6CisgICAg
c3RhdGljIFJlZjxSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWM+IGNyZWF0ZShydGM6OnNj
b3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb1RyYWNrSW50ZXJmYWNlPiYmLCBTdHJpbmcmJik7CisK
K3ByaXZhdGU6CisgICAgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTWFjKHJ0Yzo6c2NvcGVk
X3JlZnB0cjx3ZWJydGM6OlZpZGVvVHJhY2tJbnRlcmZhY2U+JiYsIFN0cmluZyYmKTsKKworICAg
IHZvaWQgcHJvY2Vzc05ld1NhbXBsZShDTVNhbXBsZUJ1ZmZlclJlZiwgdW5zaWduZWQsIHVuc2ln
bmVkLCBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbik7CisgICAgQ1ZQaXhlbEJ1ZmZlclJlZiBw
aXhlbEJ1ZmZlckZyb21WaWRlb0ZyYW1lKGNvbnN0IHdlYnJ0Yzo6VmlkZW9GcmFtZSYpOworCisg
ICAgLy8gcnRjOjpWaWRlb1NpbmtJbnRlcmZhY2UKKyAgICB2b2lkIE9uRnJhbWUoY29uc3Qgd2Vi
cnRjOjpWaWRlb0ZyYW1lJikgZmluYWw7CisKKyAgICBSZXRhaW5QdHI8Q01TYW1wbGVCdWZmZXJS
ZWY+IG1fYnVmZmVyOworICAgIFJldGFpblB0cjxDVlBpeGVsQnVmZmVyUmVmPiBtX2JsYWNrRnJh
bWU7CisgICAgaW50IG1fYmxhY2tGcmFtZVdpZHRoIHsgMCB9OworICAgIGludCBtX2JsYWNrRnJh
bWVIZWlnaHQgeyAwIH07CisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAgc2l6ZV90IG1f
bnVtYmVyT2ZGcmFtZXMgeyAwIH07CisjZW5kaWYKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIFVTRShMSUJXRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU91dGdv
aW5nVmlkZW9Tb3VyY2UuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjQ1MGRm
MzNjNmY2YTI1ODdkYTM5YjVlYzgyY2NmY2Q2MGEwZTdkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL21hYy9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMjY2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkLCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIHJlcXVpcmVkIHRvIGJlIG1ldDoK
LSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9m
IEFwcGxlIEluYy4gbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCi0gKiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0g
KiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUgotICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKLSAqIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291
cmNlLmgiCi0KLSNpZiBVU0UoTElCV0VCUlRDKQotCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2lu
Y2x1ZGUgPHdlYnJ0Yy9hcGkvdmlkZW8vaTQyMF9idWZmZXIuaD4KLSNpbmNsdWRlIDx3ZWJydGMv
Y29tbW9uX3ZpZGVvL2xpYnl1di9pbmNsdWRlL3dlYnJ0Y19saWJ5dXYuaD4KLSNpbmNsdWRlIDx3
ZWJydGMvc2RrL29iamMvRnJhbWV3b3JrL0NsYXNzZXMvVmlkZW8vY29yZXZpZGVvX2ZyYW1lX2J1
ZmZlci5oPgotI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgotI2luY2x1ZGUgPHd0Zi9NYWlu
VGhyZWFkLmg+Ci0KLSNpbmNsdWRlICJDb3JlTWVkaWFTb2Z0TGluay5oIgotI2luY2x1ZGUgIkNv
cmVWaWRlb1NvZnRMaW5rLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUmVhbHRpbWVPdXRn
b2luZ1ZpZGVvU291cmNlOjpSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UoUmVmPE1lZGlhU3Ry
ZWFtVHJhY2tQcml2YXRlPiYmIHZpZGVvU291cmNlKQotICAgIDogbV92aWRlb1NvdXJjZShXVEZN
b3ZlKHZpZGVvU291cmNlKSkKLSAgICAsIG1fYmxhY2tGcmFtZVRpbWVyKCp0aGlzLCAmUmVhbHRp
bWVPdXRnb2luZ1ZpZGVvU291cmNlOjpzZW5kT25lQmxhY2tGcmFtZSkKLXsKLSAgICBtX3ZpZGVv
U291cmNlLT5hZGRPYnNlcnZlcigqdGhpcyk7Ci0gICAgaW5pdGlhbGl6ZUZyb21Tb3VyY2UoKTsK
LX0KLQotYm9vbCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnNldFNvdXJjZShSZWY8TWVk
aWFTdHJlYW1UcmFja1ByaXZhdGU+JiYgbmV3U291cmNlKQotewotICAgIGlmICghbV9pbml0aWFs
U2V0dGluZ3MpCi0gICAgICAgIG1faW5pdGlhbFNldHRpbmdzID0gbV92aWRlb1NvdXJjZS0+c291
cmNlKCkuc2V0dGluZ3MoKTsKLQotICAgIG1fdmlkZW9Tb3VyY2UtPnJlbW92ZU9ic2VydmVyKCp0
aGlzKTsKLSAgICBtX3ZpZGVvU291cmNlID0gV1RGTW92ZShuZXdTb3VyY2UpOwotICAgIG1fdmlk
ZW9Tb3VyY2UtPmFkZE9ic2VydmVyKCp0aGlzKTsKLQotICAgIGluaXRpYWxpemVGcm9tU291cmNl
KCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBSZWFsdGltZU91dGdvaW5nVmlkZW9T
b3VyY2U6OnN0b3AoKQotewotICAgIG1fdmlkZW9Tb3VyY2UtPnJlbW92ZU9ic2VydmVyKCp0aGlz
KTsKLSAgICBtX2JsYWNrRnJhbWVUaW1lci5zdG9wKCk7Ci0gICAgbV9pc1N0b3BwZWQgPSB0cnVl
OwotfQotCi12b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6dXBkYXRlQmxhY2tGcmFt
ZXNTZW5kaW5nKCkKLXsKLSAgICBpZiAoIW1fbXV0ZWQgJiYgbV9lbmFibGVkKSB7Ci0gICAgICAg
IGlmIChtX2JsYWNrRnJhbWVUaW1lci5pc0FjdGl2ZSgpKQotICAgICAgICAgICAgbV9ibGFja0Zy
YW1lVGltZXIuc3RvcCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc2VuZEJsYWNr
RnJhbWVzSWZOZWVkZWQoKTsKLX0KLQotdm9pZCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6
OnNvdXJjZU11dGVkQ2hhbmdlZCgpCi17Ci0gICAgQVNTRVJUKG1fbXV0ZWQgIT0gbV92aWRlb1Nv
dXJjZS0+bXV0ZWQoKSk7Ci0KLSAgICBtX211dGVkID0gbV92aWRlb1NvdXJjZS0+bXV0ZWQoKTsK
LQotICAgIHVwZGF0ZUJsYWNrRnJhbWVzU2VuZGluZygpOwotfQotCi12b2lkIFJlYWx0aW1lT3V0
Z29pbmdWaWRlb1NvdXJjZTo6c291cmNlRW5hYmxlZENoYW5nZWQoKQotewotICAgIEFTU0VSVCht
X2VuYWJsZWQgIT0gbV92aWRlb1NvdXJjZS0+ZW5hYmxlZCgpKTsKLQotICAgIG1fZW5hYmxlZCA9
IG1fdmlkZW9Tb3VyY2UtPmVuYWJsZWQoKTsKLQotICAgIHVwZGF0ZUJsYWNrRnJhbWVzU2VuZGlu
ZygpOwotfQotCi12b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6aW5pdGlhbGl6ZUZy
b21Tb3VyY2UoKQotewotICAgIGNvbnN0IGF1dG8mIHNldHRpbmdzID0gbV92aWRlb1NvdXJjZS0+
c291cmNlKCkuc2V0dGluZ3MoKTsKLSAgICBtX3dpZHRoID0gc2V0dGluZ3Mud2lkdGgoKTsKLSAg
ICBtX2hlaWdodCA9IHNldHRpbmdzLmhlaWdodCgpOwotCi0gICAgbV9tdXRlZCA9IG1fdmlkZW9T
b3VyY2UtPm11dGVkKCk7Ci0gICAgbV9lbmFibGVkID0gbV92aWRlb1NvdXJjZS0+ZW5hYmxlZCgp
OwotCi0gICAgdXBkYXRlQmxhY2tGcmFtZXNTZW5kaW5nKCk7Ci19Ci0KLWJvb2wgUmVhbHRpbWVP
dXRnb2luZ1ZpZGVvU291cmNlOjpHZXRTdGF0cyhTdGF0cyopCi17Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi12b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6QWRkT3JVcGRhdGVTaW5r
KHJ0Yzo6VmlkZW9TaW5rSW50ZXJmYWNlPHdlYnJ0Yzo6VmlkZW9GcmFtZT4qIHNpbmssIGNvbnN0
IHJ0Yzo6VmlkZW9TaW5rV2FudHMmIHNpbmtXYW50cykKLXsKLSAgICBBU1NFUlQoIXNpbmtXYW50
cy5ibGFja19mcmFtZXMpOwotCi0gICAgaWYgKHNpbmtXYW50cy5yb3RhdGlvbl9hcHBsaWVkKQot
ICAgICAgICBtX3Nob3VsZEFwcGx5Um90YXRpb24gPSB0cnVlOwotCi0gICAgaWYgKCFtX3Npbmtz
LmNvbnRhaW5zKHNpbmspKQotICAgICAgICBtX3NpbmtzLmFwcGVuZChzaW5rKTsKLQotICAgIGNh
bGxPbk1haW5UaHJlYWQoW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0oKSB7Ci0gICAg
ICAgIHByb3RlY3RlZFRoaXMtPnNlbmRCbGFja0ZyYW1lc0lmTmVlZGVkKCk7Ci0gICAgfSk7Ci19
Ci0KLXZvaWQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpSZW1vdmVTaW5rKHJ0Yzo6Vmlk
ZW9TaW5rSW50ZXJmYWNlPHdlYnJ0Yzo6VmlkZW9GcmFtZT4qIHNpbmspCi17Ci0gICAgbV9zaW5r
cy5yZW1vdmVGaXJzdChzaW5rKTsKLQotICAgIGlmIChtX3NpbmtzLnNpemUoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYo
KnRoaXMpXSgpIHsKLSAgICAgICAgaWYgKHByb3RlY3RlZFRoaXMtPm1fYmxhY2tGcmFtZVRpbWVy
LmlzQWN0aXZlKCkpCi0gICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5tX2JsYWNrRnJhbWVUaW1l
ci5zdG9wKCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNl
OjpzZW5kQmxhY2tGcmFtZXNJZk5lZWRlZCgpCi17Ci0gICAgaWYgKG1fYmxhY2tGcmFtZVRpbWVy
LmlzQWN0aXZlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9zaW5rcy5zaXplKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9tdXRlZCAmJiBtX2VuYWJsZWQpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmICghbV93aWR0aCB8fCAhbV9oZWlnaHQpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmICghbV9ibGFja0ZyYW1lKSB7Ci0gICAgICAgIGF1dG8gd2lkdGggPSBt
X3dpZHRoOwotICAgICAgICBhdXRvIGhlaWdodCA9IG1faGVpZ2h0OwotICAgICAgICBpZiAobV9z
aG91bGRBcHBseVJvdGF0aW9uICYmIChtX2N1cnJlbnRSb3RhdGlvbiA9PSB3ZWJydGM6OmtWaWRl
b1JvdGF0aW9uXzAgfHwgbV9jdXJyZW50Um90YXRpb24gPT0gd2VicnRjOjprVmlkZW9Sb3RhdGlv
bl85MCkpCi0gICAgICAgICAgICBzdGQ6OnN3YXAod2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIGF1
dG8gZnJhbWUgPSBtX2J1ZmZlclBvb2wuQ3JlYXRlQnVmZmVyKHdpZHRoLCBoZWlnaHQpOwotICAg
ICAgICBBU1NFUlQoZnJhbWUpOwotICAgICAgICBpZiAoIWZyYW1lKSB7Ci0gICAgICAgICAgICBS
RUxFQVNFX0xPRyhXZWJSVEMsICJSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnNlbmRCbGFj
a0ZyYW1lc0lmTmVlZGVkIHVuYWJsZSB0byBzZW5kIGJsYWNrIGZyYW1lcyIpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHdlYnJ0Yzo6STQyMEJ1ZmZlcjo6U2V0Qmxh
Y2soZnJhbWUuZ2V0KCkpOwotICAgICAgICBtX2JsYWNrRnJhbWUgPSBXVEZNb3ZlKGZyYW1lKTsK
LSAgICB9Ci0gICAgc2VuZE9uZUJsYWNrRnJhbWUoKTsKLSAgICBtX2JsYWNrRnJhbWVUaW1lci5z
dGFydFJlcGVhdGluZygxX3MpOwotfQotCi12b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJj
ZTo6c2VuZE9uZUJsYWNrRnJhbWUoKQotewotICAgIFJFTEVBU0VfTE9HKE1lZGlhU3RyZWFtLCAi
UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpzZW5kT25lQmxhY2tGcmFtZSIpOwotICAgIHNl
bmRGcmFtZShydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb0ZyYW1lQnVmZmVyPihtX2Js
YWNrRnJhbWUpKTsKLX0KLQotdm9pZCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnNlbmRG
cmFtZShydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb0ZyYW1lQnVmZmVyPiYmIGJ1ZmZl
cikKLXsKLSAgICBpbnQ2NF90IHRpbWVzdGFtcE1pY3JvU2Vjb25kcyA9IG1vbm90b25pY2FsbHlJ
bmNyZWFzaW5nVGltZU1TKCkgKiAxMDAwOwotICAgIHdlYnJ0Yzo6VmlkZW9GcmFtZSBmcmFtZShi
dWZmZXIsIG1fc2hvdWxkQXBwbHlSb3RhdGlvbiA/IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMCA6
IG1fY3VycmVudFJvdGF0aW9uLCB0aW1lc3RhbXBNaWNyb1NlY29uZHMpOwotICAgIGZvciAoYXV0
byogc2luayA6IG1fc2lua3MpCi0gICAgICAgIHNpbmstPk9uRnJhbWUoZnJhbWUpOwotfQotCi12
b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6dmlkZW9TYW1wbGVBdmFpbGFibGUoTWVk
aWFTYW1wbGUmIHNhbXBsZSkKLXsKLSAgICBpZiAoIW1fc2lua3Muc2l6ZSgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAobV9tdXRlZCB8fCAhbV9lbmFibGVkKQotICAgICAgICByZXR1cm47
Ci0KLSNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKLSAgICBpZiAoISgrK21fbnVtYmVyT2ZGcmFt
ZXMgJSAzMCkpCi0gICAgICAgIFJFTEVBU0VfTE9HKE1lZGlhU3RyZWFtLCAiUmVhbHRpbWVPdXRn
b2luZ1ZpZGVvU291cmNlOjpzZW5kRnJhbWUgJXp1IGZyYW1lIiwgbV9udW1iZXJPZkZyYW1lcyk7
Ci0jZW5kaWYKLQotICAgIHN3aXRjaCAoc2FtcGxlLnZpZGVvUm90YXRpb24oKSkgewotICAgIGNh
c2UgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246Ok5vbmU6Ci0gICAgICAgIG1fY3VycmVudFJv
dGF0aW9uID0gd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8wOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpVcHNpZGVEb3duOgotICAgICAgICBtX2N1
cnJlbnRSb3RhdGlvbiA9IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMTgwOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpSaWdodDoKLSAgICAgICAg
bV9jdXJyZW50Um90YXRpb24gPSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzkwOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpMZWZ0OgotICAgICAg
ICBtX2N1cnJlbnRSb3RhdGlvbiA9IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMjcwOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0KLSAgICBBU1NFUlQoc2FtcGxlLnBsYXRmb3JtU2FtcGxlKCkudHlw
ZSA9PSBQbGF0Zm9ybVNhbXBsZTo6Q01TYW1wbGVCdWZmZXJUeXBlKTsKLSAgICBhdXRvIHBpeGVs
QnVmZmVyID0gc3RhdGljX2Nhc3Q8Q1ZQaXhlbEJ1ZmZlclJlZj4oQ01TYW1wbGVCdWZmZXJHZXRJ
bWFnZUJ1ZmZlcihzYW1wbGUucGxhdGZvcm1TYW1wbGUoKS5zYW1wbGUuY21TYW1wbGVCdWZmZXIp
KTsKLSAgICBhdXRvIHBpeGVsRm9ybWF0VHlwZSA9IENWUGl4ZWxCdWZmZXJHZXRQaXhlbEZvcm1h
dFR5cGUocGl4ZWxCdWZmZXIpOwotCi0gICAgaWYgKHBpeGVsRm9ybWF0VHlwZSA9PSBrQ1ZQaXhl
bEZvcm1hdFR5cGVfNDIwWXBDYkNyOFBsYW5hciB8fCBwaXhlbEZvcm1hdFR5cGUgPT0ga0NWUGl4
ZWxGb3JtYXRUeXBlXzQyMFlwQ2JDcjhCaVBsYW5hckZ1bGxSYW5nZSkgewotICAgICAgICBydGM6
OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb0ZyYW1lQnVmZmVyPiBidWZmZXIgPSBuZXcgcnRj
OjpSZWZDb3VudGVkT2JqZWN0PHdlYnJ0Yzo6Q29yZVZpZGVvRnJhbWVCdWZmZXI+KHBpeGVsQnVm
ZmVyKTsKLSAgICAgICAgaWYgKG1fc2hvdWxkQXBwbHlSb3RhdGlvbiAmJiBtX2N1cnJlbnRSb3Rh
dGlvbiAhPSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzApIHsKLSAgICAgICAgICAgIC8vIEZJWE1F
OiBXZSBzaG91bGQgbWFrZSBBVlZpZGVvQ2FwdHVyZVNvdXJjZSBoYW5kbGUgdGhlIHJvdGF0aW9u
IHdoZW5ldmVyIHBvc3NpYmxlLgotICAgICAgICAgICAgLy8gVGhpcyBpbXBsZW1lbnRhdGlvbiBp
cyBpbmVmZmljaWVudCwgd2Ugc2hvdWxkIHJvdGF0ZSBvbiB0aGUgQ01TYW1wbGVCdWZmZXIgZGly
ZWN0bHkgaW5zdGVhZCBvZiBkb2luZyB0aGlzIGRvdWJsZSBhbGxvY2F0aW9uLgotICAgICAgICAg
ICAgYXV0byByb3RhdGVkQnVmZmVyID0gYnVmZmVyLT5Ub0k0MjAoKTsKLSAgICAgICAgICAgIEFT
U0VSVChyb3RhdGVkQnVmZmVyKTsKLSAgICAgICAgICAgIGJ1ZmZlciA9IHdlYnJ0Yzo6STQyMEJ1
ZmZlcjo6Um90YXRlKCpyb3RhdGVkQnVmZmVyLCBtX2N1cnJlbnRSb3RhdGlvbik7Ci0gICAgICAg
IH0KLSAgICAgICAgc2VuZEZyYW1lKFdURk1vdmUoYnVmZmVyKSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBDVlBpeGVsQnVmZmVyTG9ja0Jhc2VBZGRyZXNzKHBpeGVsQnVmZmVyLCAw
KTsKLSAgICBhdXRvKiBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihDVlBpeGVs
QnVmZmVyR2V0QmFzZUFkZHJlc3NPZlBsYW5lKHBpeGVsQnVmZmVyLCAwKSk7Ci0KLSAgICBBU1NF
UlQobV93aWR0aCk7Ci0gICAgQVNTRVJUKG1faGVpZ2h0KTsKLQotICAgIGF1dG8gbmV3QnVmZmVy
ID0gbV9idWZmZXJQb29sLkNyZWF0ZUJ1ZmZlcihtX3dpZHRoLCBtX2hlaWdodCk7Ci0gICAgQVNT
RVJUKG5ld0J1ZmZlcik7Ci0gICAgaWYgKCFuZXdCdWZmZXIpIHsKLSAgICAgICAgUkVMRUFTRV9M
T0coV2ViUlRDLCAiUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjp2aWRlb1NhbXBsZUF2YWls
YWJsZSB1bmFibGUgdG8gYWxsb2NhdGUgYnVmZmVyIGZvciBjb252ZXJzaW9uIHRvIFlVViIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChwaXhlbEZvcm1hdFR5cGUgPT0ga0NWUGl4
ZWxGb3JtYXRUeXBlXzMyQkdSQSkKLSAgICAgICAgd2VicnRjOjpDb252ZXJ0VG9JNDIwKHdlYnJ0
Yzo6VmlkZW9UeXBlOjprQVJHQiwgc291cmNlLCAwLCAwLCBtX3dpZHRoLCBtX2hlaWdodCwgMCwg
d2VicnRjOjprVmlkZW9Sb3RhdGlvbl8wLCBuZXdCdWZmZXIpOwotICAgIGVsc2UgewotICAgICAg
ICBBU1NFUlQocGl4ZWxGb3JtYXRUeXBlID09IGtDVlBpeGVsRm9ybWF0VHlwZV8zMkFSR0IpOwot
ICAgICAgICB3ZWJydGM6OkNvbnZlcnRUb0k0MjAod2VicnRjOjpWaWRlb1R5cGU6OmtCR1JBLCBz
b3VyY2UsIDAsIDAsIG1fd2lkdGgsIG1faGVpZ2h0LCAwLCB3ZWJydGM6OmtWaWRlb1JvdGF0aW9u
XzAsIG5ld0J1ZmZlcik7Ci0gICAgfQotICAgIENWUGl4ZWxCdWZmZXJVbmxvY2tCYXNlQWRkcmVz
cyhwaXhlbEJ1ZmZlciwgMCk7Ci0gICAgaWYgKG1fc2hvdWxkQXBwbHlSb3RhdGlvbiAmJiBtX2N1
cnJlbnRSb3RhdGlvbiAhPSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzApCi0gICAgICAgIG5ld0J1
ZmZlciA9IHdlYnJ0Yzo6STQyMEJ1ZmZlcjo6Um90YXRlKCpuZXdCdWZmZXIsIG1fY3VycmVudFJv
dGF0aW9uKTsKLSAgICBzZW5kRnJhbWUoV1RGTW92ZShuZXdCdWZmZXIpKTsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKExJQldFQlJUQykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU91dGdvaW5n
VmlkZW9Tb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9S
ZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMjdlNzhiNTE2NWQwNTY5NWZlMWE0NTg0MDg1OWJiMTFjMTJlNDg4Ni4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmgKKysrIC9kZXYv
bnVsbApAQCAtMSwxMTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJ
bmMuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQsIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgcmVxdWlyZWQgdG8g
YmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhl
IG5hbWUgb2YgQXBwbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAot
ICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKLSAqIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0gKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgotICogQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgVVNFKExJQldFQlJUQykKLQotI2luY2x1ZGUg
IkxpYldlYlJUQ01hY3Jvcy5oIgotI2luY2x1ZGUgIk1lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmgi
Ci0jaW5jbHVkZSA8VGltZXIuaD4KLSNpbmNsdWRlIDx3ZWJydGMvYXBpL21lZGlhc3RyZWFtaW50
ZXJmYWNlLmg+Ci0jaW5jbHVkZSA8d2VicnRjL2Jhc2Uvb3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3
ZWJydGMvY29tbW9uX3ZpZGVvL2luY2x1ZGUvaTQyMF9idWZmZXJfcG9vbC5oPgotI2luY2x1ZGUg
PHdlYnJ0Yy9tZWRpYS9iYXNlL3ZpZGVvc2lua2ludGVyZmFjZS5oPgotI2luY2x1ZGUgPHd0Zi9P
cHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZSBmaW5h
bCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3Vy
Y2U+LCBwdWJsaWMgd2VicnRjOjpWaWRlb1RyYWNrU291cmNlSW50ZXJmYWNlLCBwcml2YXRlIE1l
ZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpPYnNlcnZlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJl
ZjxSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U+IGNyZWF0ZShSZWY8TWVkaWFTdHJlYW1UcmFj
a1ByaXZhdGU+JiYgdmlkZW9Tb3VyY2UpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVhbHRpbWVP
dXRnb2luZ1ZpZGVvU291cmNlKFdURk1vdmUodmlkZW9Tb3VyY2UpKSk7IH0KLSAgICB+UmVhbHRp
bWVPdXRnb2luZ1ZpZGVvU291cmNlKCkgeyBzdG9wKCk7IH0KLQotICAgIHZvaWQgc3RvcCgpOwot
ICAgIGJvb2wgc2V0U291cmNlKFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4mJik7Ci0gICAg
TWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmlkZW9T
b3VyY2UuZ2V0KCk7IH0KLQotICAgIGludCBBZGRSZWYoKSBjb25zdCBmaW5hbCB7IHJlZigpOyBy
ZXR1cm4gcmVmQ291bnQoKTsgfQotICAgIGludCBSZWxlYXNlKCkgY29uc3QgZmluYWwgeyBkZXJl
ZigpOyByZXR1cm4gcmVmQ291bnQoKTsgfQotCi0gICAgdm9pZCBzZXRBcHBseVJvdGF0aW9uKGJv
b2wgc2hvdWxkQXBwbHlSb3RhdGlvbikgeyBtX3Nob3VsZEFwcGx5Um90YXRpb24gPSBzaG91bGRB
cHBseVJvdGF0aW9uOyB9Ci0KLXByaXZhdGU6Ci0gICAgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291
cmNlKFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4mJik7Ci0KLSAgICB2b2lkIHNlbmRGcmFt
ZShydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb0ZyYW1lQnVmZmVyPiYmKTsKLSAgICB2
b2lkIHNlbmRCbGFja0ZyYW1lc0lmTmVlZGVkKCk7Ci0gICAgdm9pZCBzZW5kT25lQmxhY2tGcmFt
ZSgpOwotICAgIHZvaWQgaW5pdGlhbGl6ZUZyb21Tb3VyY2UoKTsKLSAgICB2b2lkIHVwZGF0ZUJs
YWNrRnJhbWVzU2VuZGluZygpOwotCi0gICAgLy8gTm90aWZpZXIgQVBJCi0gICAgdm9pZCBSZWdp
c3Rlck9ic2VydmVyKHdlYnJ0Yzo6T2JzZXJ2ZXJJbnRlcmZhY2UqKSBmaW5hbCB7IH0KLSAgICB2
b2lkIFVucmVnaXN0ZXJPYnNlcnZlcih3ZWJydGM6Ok9ic2VydmVySW50ZXJmYWNlKikgZmluYWwg
eyB9Ci0KLSAgICAvLyBWaWRlb1RyYWNrU291cmNlSW50ZXJmYWNlIEFQSQotICAgIGJvb2wgaXNf
c2NyZWVuY2FzdCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgcnRjOjpPcHRp
b25hbDxib29sPiBuZWVkc19kZW5vaXNpbmcoKSBjb25zdCBmaW5hbCB7IHJldHVybiBydGM6Ok9w
dGlvbmFsPGJvb2w+KCk7IH0KLSAgICBib29sIEdldFN0YXRzKFN0YXRzKikgZmluYWw7Ci0KLSAg
ICAvLyBNZWRpYVNvdXJjZUludGVyZmFjZSBBUEkKLSAgICBTb3VyY2VTdGF0ZSBzdGF0ZSgpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIFNvdXJjZVN0YXRlKCk7IH0KLSAgICBib29sIHJlbW90ZSgpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KLQotICAgIC8vIHJ0Yzo6VmlkZW9Tb3VyY2VJbnRl
cmZhY2U8d2VicnRjOjpWaWRlb0ZyYW1lPiBBUEkKLSAgICB2b2lkIEFkZE9yVXBkYXRlU2luayhy
dGM6OlZpZGVvU2lua0ludGVyZmFjZTx3ZWJydGM6OlZpZGVvRnJhbWU+KiwgY29uc3QgcnRjOjpW
aWRlb1NpbmtXYW50cyYpIGZpbmFsOwotICAgIHZvaWQgUmVtb3ZlU2luayhydGM6OlZpZGVvU2lu
a0ludGVyZmFjZTx3ZWJydGM6OlZpZGVvRnJhbWU+KikgZmluYWw7Ci0KLSAgICB2b2lkIHNvdXJj
ZU11dGVkQ2hhbmdlZCgpOwotICAgIHZvaWQgc291cmNlRW5hYmxlZENoYW5nZWQoKTsKLSAgICB2
b2lkIHZpZGVvU2FtcGxlQXZhaWxhYmxlKE1lZGlhU2FtcGxlJik7Ci0KLSAgICAvLyBNZWRpYVN0
cmVhbVRyYWNrUHJpdmF0ZTo6T2JzZXJ2ZXIgQVBJCi0gICAgdm9pZCB0cmFja011dGVkQ2hhbmdl
ZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYpIGZpbmFsIHsgc291cmNlTXV0ZWRDaGFuZ2VkKCk7
IH0KLSAgICB2b2lkIHRyYWNrRW5hYmxlZENoYW5nZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUm
KSBmaW5hbCB7IHNvdXJjZUVuYWJsZWRDaGFuZ2VkKCk7IH0KLSAgICB2b2lkIHRyYWNrU2V0dGlu
Z3NDaGFuZ2VkKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJikgZmluYWwgeyBpbml0aWFsaXplRnJv
bVNvdXJjZSgpOyB9Ci0gICAgdm9pZCBzYW1wbGVCdWZmZXJVcGRhdGVkKE1lZGlhU3RyZWFtVHJh
Y2tQcml2YXRlJiwgTWVkaWFTYW1wbGUmIHNhbXBsZSkgZmluYWwgeyB2aWRlb1NhbXBsZUF2YWls
YWJsZShzYW1wbGUpOyB9Ci0gICAgdm9pZCB0cmFja0VuZGVkKE1lZGlhU3RyZWFtVHJhY2tQcml2
YXRlJikgZmluYWwgeyB9Ci0KLSAgICBWZWN0b3I8cnRjOjpWaWRlb1NpbmtJbnRlcmZhY2U8d2Vi
cnRjOjpWaWRlb0ZyYW1lPio+IG1fc2lua3M7Ci0gICAgd2VicnRjOjpJNDIwQnVmZmVyUG9vbCBt
X2J1ZmZlclBvb2w7Ci0gICAgUmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiBtX3ZpZGVvU291
cmNlOwotICAgIGJvb2wgbV9lbmFibGVkIHsgdHJ1ZSB9OwotICAgIGJvb2wgbV9tdXRlZCB7IGZh
bHNlIH07Ci0gICAgc3RkOjpvcHRpb25hbDxSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M+IG1f
aW5pdGlhbFNldHRpbmdzOwotICAgIHdlYnJ0Yzo6VmlkZW9Sb3RhdGlvbiBtX2N1cnJlbnRSb3Rh
dGlvbiB7IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMCB9OwotICAgIHVpbnQzMl90IG1fd2lkdGgg
eyAwIH07Ci0gICAgdWludDMyX3QgbV9oZWlnaHQgeyAwIH07Ci0gICAgYm9vbCBtX2lzU3RvcHBl
ZCB7IGZhbHNlIH07Ci0gICAgVGltZXIgbV9ibGFja0ZyYW1lVGltZXI7Ci0gICAgcnRjOjpzY29w
ZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9GcmFtZUJ1ZmZlcj4gbV9ibGFja0ZyYW1lOwotICAgIGJv
b2wgbV9zaG91bGRBcHBseVJvdGF0aW9uIHsgZmFsc2UgfTsKLSNpZiAhUkVMRUFTRV9MT0dfRElT
QUJMRUQKLSAgICBzaXplX3QgbV9udW1iZXJPZkZyYW1lcyB7IDAgfTsKLSNlbmRpZgotfTsKLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKExJQldFQlJUQykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU91
dGdvaW5nVmlkZW9Tb3VyY2VNYWMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZU1hYy5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
N2VjZjU1OTU0MzkzYzNiZDg3N2ZjYzdlZDQ5OTNmZDBhOTUxZTYyNQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU91dGdv
aW5nVmlkZW9Tb3VyY2VNYWMuY3BwCkBAIC0wLDAgKzEsMTIxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE3IEFwcGxlIEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSByZXF1aXJlZCB0byBiZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YKKyAq
ICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZU1hYy5oIgorCisjaWYgVVNFKExJQldFQlJUQykK
KworI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlIDx3ZWJydGMvYXBpL3ZpZGVvL2k0MjBf
YnVmZmVyLmg+CisjaW5jbHVkZSA8d2VicnRjL2NvbW1vbl92aWRlby9saWJ5dXYvaW5jbHVkZS93
ZWJydGNfbGlieXV2Lmg+CisjaW5jbHVkZSA8d2VicnRjL3Nkay9vYmpjL0ZyYW1ld29yay9DbGFz
c2VzL1ZpZGVvL2NvcmV2aWRlb19mcmFtZV9idWZmZXIuaD4KKworI2luY2x1ZGUgIkNvcmVNZWRp
YVNvZnRMaW5rLmgiCisjaW5jbHVkZSAiQ29yZVZpZGVvU29mdExpbmsuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VNYWM6OlJlYWx0aW1lT3V0
Z29pbmdWaWRlb1NvdXJjZU1hYyhSZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYgdmlkZW9T
b3VyY2UpCisgICAgOiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UoV1RGTW92ZSh2aWRlb1Nv
dXJjZSkpCit7Cit9CisKK3ZvaWQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTWFjOjp2aWRl
b1NhbXBsZUF2YWlsYWJsZShNZWRpYVNhbXBsZSYgc2FtcGxlKQoreworICAgIGlmICghbV9zaW5r
cy5zaXplKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX211dGVkIHx8ICFtX2VuYWJs
ZWQpCisgICAgICAgIHJldHVybjsKKworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgIGlm
ICghKCsrbV9udW1iZXJPZkZyYW1lcyAlIDMwKSkKKyAgICAgICAgUkVMRUFTRV9MT0coTWVkaWFT
dHJlYW0sICJSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VNYWM6OnNlbmRGcmFtZSAlenUgZnJh
bWUiLCBtX251bWJlck9mRnJhbWVzKTsKKyNlbmRpZgorCisgICAgc3dpdGNoIChzYW1wbGUudmlk
ZW9Sb3RhdGlvbigpKSB7CisgICAgY2FzZSBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6Tm9u
ZToKKyAgICAgICAgbV9jdXJyZW50Um90YXRpb24gPSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzA7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246OlVw
c2lkZURvd246CisgICAgICAgIG1fY3VycmVudFJvdGF0aW9uID0gd2VicnRjOjprVmlkZW9Sb3Rh
dGlvbl8xODA7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTWVkaWFTYW1wbGU6OlZpZGVvUm90
YXRpb246OlJpZ2h0OgorICAgICAgICBtX2N1cnJlbnRSb3RhdGlvbiA9IHdlYnJ0Yzo6a1ZpZGVv
Um90YXRpb25fOTA7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTWVkaWFTYW1wbGU6OlZpZGVv
Um90YXRpb246OkxlZnQ6CisgICAgICAgIG1fY3VycmVudFJvdGF0aW9uID0gd2VicnRjOjprVmlk
ZW9Sb3RhdGlvbl8yNzA7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIEFTU0VSVChzYW1w
bGUucGxhdGZvcm1TYW1wbGUoKS50eXBlID09IFBsYXRmb3JtU2FtcGxlOjpDTVNhbXBsZUJ1ZmZl
clR5cGUpOworICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBzdGF0aWNfY2FzdDxDVlBpeGVsQnVmZmVy
UmVmPihDTVNhbXBsZUJ1ZmZlckdldEltYWdlQnVmZmVyKHNhbXBsZS5wbGF0Zm9ybVNhbXBsZSgp
LnNhbXBsZS5jbVNhbXBsZUJ1ZmZlcikpOworICAgIGF1dG8gcGl4ZWxGb3JtYXRUeXBlID0gQ1ZQ
aXhlbEJ1ZmZlckdldFBpeGVsRm9ybWF0VHlwZShwaXhlbEJ1ZmZlcik7CisKKyAgICBpZiAocGl4
ZWxGb3JtYXRUeXBlID09IGtDVlBpeGVsRm9ybWF0VHlwZV80MjBZcENiQ3I4UGxhbmFyIHx8IHBp
eGVsRm9ybWF0VHlwZSA9PSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyOEJpUGxhbmFyRnVs
bFJhbmdlKSB7CisgICAgICAgIHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvRnJhbWVC
dWZmZXI+IGJ1ZmZlciA9IG5ldyBydGM6OlJlZkNvdW50ZWRPYmplY3Q8d2VicnRjOjpDb3JlVmlk
ZW9GcmFtZUJ1ZmZlcj4ocGl4ZWxCdWZmZXIpOworICAgICAgICBpZiAobV9zaG91bGRBcHBseVJv
dGF0aW9uICYmIG1fY3VycmVudFJvdGF0aW9uICE9IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMCkg
eworICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBtYWtlIEFWVmlkZW9DYXB0dXJlU291
cmNlIGhhbmRsZSB0aGUgcm90YXRpb24gd2hlbmV2ZXIgcG9zc2libGUuCisgICAgICAgICAgICAv
LyBUaGlzIGltcGxlbWVudGF0aW9uIGlzIGluZWZmaWNpZW50LCB3ZSBzaG91bGQgcm90YXRlIG9u
IHRoZSBDTVNhbXBsZUJ1ZmZlciBkaXJlY3RseSBpbnN0ZWFkIG9mIGRvaW5nIHRoaXMgZG91Ymxl
IGFsbG9jYXRpb24uCisgICAgICAgICAgICBhdXRvIHJvdGF0ZWRCdWZmZXIgPSBidWZmZXItPlRv
STQyMCgpOworICAgICAgICAgICAgQVNTRVJUKHJvdGF0ZWRCdWZmZXIpOworICAgICAgICAgICAg
YnVmZmVyID0gd2VicnRjOjpJNDIwQnVmZmVyOjpSb3RhdGUoKnJvdGF0ZWRCdWZmZXIsIG1fY3Vy
cmVudFJvdGF0aW9uKTsKKyAgICAgICAgfQorICAgICAgICBzZW5kRnJhbWUoV1RGTW92ZShidWZm
ZXIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIENWUGl4ZWxCdWZmZXJMb2NrQmFz
ZUFkZHJlc3MocGl4ZWxCdWZmZXIsIDApOworICAgIGF1dG8qIHNvdXJjZSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDhfdCo+KENWUGl4ZWxCdWZmZXJHZXRCYXNlQWRkcmVzc09mUGxhbmUocGl4ZWxC
dWZmZXIsIDApKTsKKworICAgIEFTU0VSVChtX3dpZHRoKTsKKyAgICBBU1NFUlQobV9oZWlnaHQp
OworCisgICAgYXV0byBuZXdCdWZmZXIgPSBtX2J1ZmZlclBvb2wuQ3JlYXRlQnVmZmVyKG1fd2lk
dGgsIG1faGVpZ2h0KTsKKyAgICBBU1NFUlQobmV3QnVmZmVyKTsKKyAgICBpZiAoIW5ld0J1ZmZl
cikgeworICAgICAgICBSRUxFQVNFX0xPRyhXZWJSVEMsICJSZWFsdGltZU91dGdvaW5nVmlkZW9T
b3VyY2VNYWM6OnZpZGVvU2FtcGxlQXZhaWxhYmxlIHVuYWJsZSB0byBhbGxvY2F0ZSBidWZmZXIg
Zm9yIGNvbnZlcnNpb24gdG8gWVVWIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYg
KHBpeGVsRm9ybWF0VHlwZSA9PSBrQ1ZQaXhlbEZvcm1hdFR5cGVfMzJCR1JBKQorICAgICAgICB3
ZWJydGM6OkNvbnZlcnRUb0k0MjAod2VicnRjOjpWaWRlb1R5cGU6OmtBUkdCLCBzb3VyY2UsIDAs
IDAsIG1fd2lkdGgsIG1faGVpZ2h0LCAwLCB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzAsIG5ld0J1
ZmZlcik7CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVChwaXhlbEZvcm1hdFR5cGUgPT0ga0NW
UGl4ZWxGb3JtYXRUeXBlXzMyQVJHQik7CisgICAgICAgIHdlYnJ0Yzo6Q29udmVydFRvSTQyMCh3
ZWJydGM6OlZpZGVvVHlwZTo6a0JHUkEsIHNvdXJjZSwgMCwgMCwgbV93aWR0aCwgbV9oZWlnaHQs
IDAsIHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMCwgbmV3QnVmZmVyKTsKKyAgICB9CisgICAgQ1ZQ
aXhlbEJ1ZmZlclVubG9ja0Jhc2VBZGRyZXNzKHBpeGVsQnVmZmVyLCAwKTsKKyAgICBpZiAobV9z
aG91bGRBcHBseVJvdGF0aW9uICYmIG1fY3VycmVudFJvdGF0aW9uICE9IHdlYnJ0Yzo6a1ZpZGVv
Um90YXRpb25fMCkKKyAgICAgICAgbmV3QnVmZmVyID0gd2VicnRjOjpJNDIwQnVmZmVyOjpSb3Rh
dGUoKm5ld0J1ZmZlciwgbV9jdXJyZW50Um90YXRpb24pOworICAgIHNlbmRGcmFtZShXVEZNb3Zl
KG5ld0J1ZmZlcikpOworfQorCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IFVTRShMSUJXRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTWFjLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNl
TWFjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZTk4MmFhZjQ0MmFkMzJhNjM2NGVlNzk5Y2IzY2FhMWUxNTYzMzIx
MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L21hYy9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VNYWMuaApAQCAtMCwwICsxLDU1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSByZXF1aXJlZCB0byBiZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpZiBVU0UoTElCV0VCUlRDKQorCisjaW5jbHVkZSAiUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291
cmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVhbHRpbWVPdXRnb2luZ1Zp
ZGVvU291cmNlTWFjIGZpbmFsIDogcHVibGljIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZSB7
CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VNYWM+
IGNyZWF0ZShSZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYgdmlkZW9Tb3VyY2UpIHsgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTWFjKFdURk1vdmUo
dmlkZW9Tb3VyY2UpKSk7IH0KKyAgICB+UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTWFjKCkg
eyB9CisKK3Byb3RlY3RlZDoKKyAgICBleHBsaWNpdCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3Vy
Y2VNYWMoUmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiYmKTsKKworcHJpdmF0ZToKKyAgICB2
b2lkIHZpZGVvU2FtcGxlQXZhaWxhYmxlKE1lZGlhU2FtcGxlJikgZmluYWw7CisKKyNpZiAhUkVM
RUFTRV9MT0dfRElTQUJMRUQKKyAgICBzaXplX3QgbV9udW1iZXJPZkZyYW1lcyB7IDAgfTsKKyNl
bmRpZgorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKExJQldF
QlJUQykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322679</attachid>
            <date>2017-10-04 09:03:54 -0700</date>
            <delta_ts>2017-10-04 09:59:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177869-20171004180352.patch</filename>
            <type>text/plain</type>
            <size>79635</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIyODUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWFmYmJmMjFlNWIwYzcw
NjZiMzJmMjlmOGY4ZDNlYzExOTc4MTA4Ni4uNTU4ZjI2YjU0YjIwYzFiNmU0N2E5M2NkN2RiZGU0
MmNiZWMzZGM5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDE3LTEwLTA0ICBBbGVq
YW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisgICAgICAgIE1ha2UgUmVhbHRp
bWVJbmNvbWluZ1ZpZGVvU291cmNlcyBhbmQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlcyBw
b3J0IGFnbm9zdGljCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzc4NjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBSZWZhY3RvciB0aGUgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlIGFuZCBSZWFsdGlt
ZU91dGdvaW5nVmlkZW9Tb3VyY2UgY2xhc3NlcywKKyAgICAgICAgbW92ZSB0aGUgbWFjIHNwZWNp
ZmljIGNvZGUgdG8gYSBkaWZmZXJlbnQgY2xhc3MuIFRoaXMgd2F5IHdlIGNhbiB1c2UgdGhlbSBm
cm9tCisgICAgICAgIG90aGVyIHBvcnRzLgorCisgICAgICAgIE5vIG5ldyBmdW5jdGlvbmFsaXR5
LCBqdXN0IGEgcmVmYWN0b3IuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAg
KiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0v
bWVkaWFzdHJlYW0vUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6OlJlYWx0aW1lSW5jb21p
bmdWaWRlb1NvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9T
b3VyY2U6OnN0YXJ0UHJvZHVjaW5nRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUlu
Y29taW5nVmlkZW9Tb3VyY2U6OnNldFNvdXJjZVRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
YWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6c3RvcFByb2R1Y2luZ0RhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlOjpjYXBhYmlsaXRpZXMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlOjpzZXR0aW5n
cyBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVJbmNvbWlu
Z1ZpZGVvU291cmNlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL21hYy9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuaC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuY3BwOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lT3V0
Z29pbmdWaWRlb1NvdXJjZS5jcHAuCisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5n
VmlkZW9Tb3VyY2U6OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVh
bHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmguCisg
ICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnZpZGVvU2FtcGxl
QXZhaWxhYmxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVJ
bmNvbWluZ1ZpZGVvU291cmNlTWFjLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuY3BwLgor
ICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTWFjOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTWFjOjpSZWFs
dGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWMpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJ
bmNvbWluZ1ZpZGVvU291cmNlTWFjOjpwaXhlbEJ1ZmZlckZyb21WaWRlb0ZyYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1hYzo6T25GcmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWM6OnByb2Nlc3NO
ZXdTYW1wbGUpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUlu
Y29taW5nVmlkZW9Tb3VyY2VNYWMuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuaC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNl
TWFjLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nVmlkZW9T
b3VyY2VNYWM6OlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZU1hYyk6CisgICAgICAgIChXZWJD
b3JlOjpSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VNYWM6OnZpZGVvU2FtcGxlQXZhaWxhYmxl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1Zp
ZGVvU291cmNlTWFjLmg6IEFkZGVkLgorCiAyMDE3LTEwLTA0ICBNaWd1ZWwgR29tZXogIDxtYWdv
bWV6QGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZDogZml4IEdUSyBkZWJ1ZyBidWls
ZCBhZnRlciByMjIyODQxLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50
eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCAxY2MxNmM3ZDFmYWJkZWY2
NTc4YjQyMjExMWRiYjU2NWUzOTA0ODlkLi44Y2I1YzQ0MGUwYTNlZmQ5ZDU4N2RhYjkwN2RlYWJk
NzdmYmNjMzFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMjU1MSw5ICsyNTUxLDExIEBAIHNl
dChXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlh
U291cmNlU3VwcG9ydGVkQ29uc3RyYWludHMuY3BwCiAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0v
UlRDSWNlQ2FuZGlkYXRlRGVzY3JpcHRvci5jcHAKICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9S
VENTZXNzaW9uRGVzY3JpcHRpb25EZXNjcmlwdG9yLmNwcAorICAgIHBsYXRmb3JtL21lZGlhc3Ry
ZWFtL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5jcHAKICAgICBwbGF0Zm9ybS9tZWRpYXN0
cmVhbS9SZWFsdGltZU1lZGlhU291cmNlLmNwcAogICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL1Jl
YWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuY3BwCiAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVh
bHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzLmNwcAorICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL1Jl
YWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5jcHAKICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9T
RFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5jcHAKIAogICAgIHBsYXRmb3JtL21lZGlhc3RyZWFt
L2xpYndlYnJ0Yy9MaWJXZWJSVENQcm92aWRlci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBiMGU3NTQ5NzBiMDQwYjNjNTUw
YjA3MTcwNTA5NjFiZGRkODc2ZjI1Li5iN2Y3NGU1ZWJkNjk4MTdmYzUwOWM1MzE5YWVkZWEzOTI0
NzQ2YTUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCkBAIC0yNzU0LDcgKzI3NTQsOSBAQAogCQk1Q0Q5RjU2NzFBQTBGNzQyMDBEQTQ1
RkYgLyogREZBQnl0ZWNvZGVDb21waWxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNUMzOTMwNUYxQUEwRjZBOTAwMjlDODE2IC8qIERGQUJ5dGVjb2Rl
Q29tcGlsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk1Q0Q5RjU2ODFBQTBGNzQ2MDBEQTQ1RkYgLyogREZBQnl0ZWNvZGVJbnRlcnByZXRlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUMzOTMwNjEx
QUEwRjZBOTAwMjlDODE2IC8qIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1Q0REODMzRDFFNDMyNEQ5MDA2
MjFFOTIgLyogUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDREQ4MzNCMUU0MzI0QkIwMDYyMUU5MiAv
KiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuY3BwICovOyB9OworCQk1Q0REODMzRDFFNDMy
NEQ5MDA2MjFFOTMgLyogUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTWFjLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDREQ4MzNCMUU0MzI0QkIw
MDYyMUU5MyAvKiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VNYWMuY3BwICovOyB9OwogCQk1
Q0REODMzRTFFNDMyNERDMDA2MjFFOTIgLyogUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDREQ4MzM5
MUU0MzI0QkIwMDYyMUU5MiAvKiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuY3BwICovOyB9
OworCQk1Q0REODMzRTFFNDMyNERDMDA2MjFFOTMgLyogUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291
cmNlTWFjLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDVDREQ4MzM5MUU0MzI0QkIwMDYyMUU5MyAvKiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VN
YWMuY3BwICovOyB9OwogCQk1Q0REODM2NDFFNDMyNUEwMDA2MjFFOTIgLyogTGliV2ViUlRDRGF0
YUNoYW5uZWxIYW5kbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDVDREQ4MzNGMUU0MzI1M0QwMDYyMUU5MiAvKiBMaWJXZWJSVENEYXRhQ2hhbm5l
bEhhbmRsZXIuY3BwICovOyB9OwogCQk1Q0RGQTZDODFBQTRGMkRBMDBFQTg3NDYgLyogQ29udGVu
dEV4dGVuc2lvbkFjdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDVDREZBNkM3MUFBNEYyREEwMEVBODc0NiAvKiBDb250ZW50RXh0ZW5zaW9uQWN0
aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTVDRTVEOUFCMURCODlBMDMwMENFN0E4RCAvKiBKU1RleHREZWNvZGVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDRTVEOUE3MURCODk5RkMwMENF
N0E4RCAvKiBKU1RleHREZWNvZGVyLmNwcCAqLzsgfTsKQEAgLTk2MDYsNiArOTYwOCw4IEBACiAJ
CTQxQUJFNjc5MUQwNTgwRDUwMDZEODYyRCAvKiBDcm9zc09yaWdpblByZWZsaWdodENoZWNrZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ3Jvc3NPcmlnaW5QcmVm
bGlnaHRDaGVja2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFBQkU2N0Ex
RDA1ODBENTAwNkQ4NjJEIC8qIENyb3NzT3JpZ2luUHJlZmxpZ2h0Q2hlY2tlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDcm9zc09yaWdpblByZWZsaWdodENoZWNrZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFBRDc1MzkxQ0VGNkJDRTAwQTMxNDg2IC8q
IEZldGNoT3B0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGZXRjaE9w
dGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDFCMjhCMjExRjg1MUYzMjAw
RkI1MkFDIC8qIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZU1hYy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VNYWMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDFCMjhCMjIxRjg1MUYzMjAwRkI1MkFDIC8qIFJl
YWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNDFCMkE2MjUxRUYxQkY2MDAwMkI5RDdBIC8qIFdlYkF1ZGlvU291cmNl
UHJvdmlkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQXVkaW9Tb3VyY2VQcm92aWRlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUI0NTlEQTFGNENBREI5MDAwMEY2RkQgLyogUmVh
ZGFibGVTdHJlYW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVhZGFibGVT
dHJlYW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFCNDU5RUQxRjU1RUJDNzAw
MDBGNkZEIC8qIFJlYWRhYmxlU3RyZWFtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFJlYWRhYmxlU3RyZWFtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTEwNzA0LDggKzEwNzA4LDEwIEBACiAJCTVDQkM4REFBMUFBQTMwMjIwMEUxQzgwMyAvKiBN
ZWRpYUFjY2Vzc2liaWxpdHlTb2Z0TGluay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBNZWRpYUFjY2Vzc2liaWxpdHlTb2Z0TGluay5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTVDQkM4REFCMUFBQTMwMjIwMEUxQzgwMyAvKiBNZWRpYUFjY2Vzc2li
aWxpdHlTb2Z0TGluay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYUFj
Y2Vzc2liaWxpdHlTb2Z0TGluay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Q0RE
ODMzOTFFNDMyNEJCMDA2MjFFOTIgLyogUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlYWx0aW1lSW5jb21pbmdWaWRl
b1NvdXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDREQ4MzM5MUU0MzI0
QkIwMDYyMUU5MyAvKiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNl
TWFjLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNERDgzM0ExRTQzMjRCQjAw
NjIxRTkyIC8qIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNERDgzM0IxRTQzMjRCQjAwNjIxRTkyIC8qIFJlYWx0aW1l
T3V0Z29pbmdWaWRlb1NvdXJjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk1Q0REODMzQjFFNDMyNEJCMDA2MjFFOTMgLyogUmVhbHRpbWVPdXRnb2luZ1Zp
ZGVvU291cmNlTWFjLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJl
YWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZU1hYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTVDREQ4MzNDMUU0MzI0QkIwMDYyMUU5MiAvKiBSZWFsdGltZU91dGdvaW5nVmlkZW9T
b3VyY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVhbHRpbWVPdXRnb2lu
Z1ZpZGVvU291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDREQ4MzNGMUU0
MzI1M0QwMDYyMUU5MiAvKiBMaWJXZWJSVENEYXRhQ2hhbm5lbEhhbmRsZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTGliV2ViUlRDRGF0YUNoYW5uZWxIYW5kbGVy
LmNwcDsgcGF0aCA9IGxpYndlYnJ0Yy9MaWJXZWJSVENEYXRhQ2hhbm5lbEhhbmRsZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Q0REODM0MDFFNDMyNTNEMDA2MjFFOTIgLyog
TGliV2ViUlRDRGF0YUNoYW5uZWxIYW5kbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IExpYldlYlJUQ0RhdGFDaGFubmVsSGFuZGxlci5oOyBwYXRoID0gbGlid2VicnRjL0xp
YldlYlJUQ0RhdGFDaGFubmVsSGFuZGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMTY1MzcsNiArMTY1NDMsOCBAQAogCQkJCTA3RkZERTY2MTgxQUVENDIwMDcyRDQwOSAvKiBN
ZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5jcHAgKi8sCiAJCQkJMDdGRkRFNjcxODFBRUQ0MjAwNzJE
NDA5IC8qIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmggKi8sCiAJCQkJNUVCQjg5MzgxQzc3QkRB
NDAwQzY1RDQxIC8qIFBlZXJNZWRpYURlc2NyaXB0aW9uLmggKi8sCisJCQkJNUNERDgzMzkxRTQz
MjRCQjAwNjIxRTkyIC8qIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5jcHAgKi8sCisJCQkJ
NUNERDgzM0ExRTQzMjRCQjAwNjIxRTkyIC8qIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5o
ICovLAogCQkJCTRBNEY2NTZCMUFBOTk3RjEwMEUzOENERCAvKiBSZWFsdGltZU1lZGlhU291cmNl
LmNwcCAqLywKIAkJCQk0QTRGNjU2QzFBQTk5N0YxMDBFMzhDREQgLyogUmVhbHRpbWVNZWRpYVNv
dXJjZS5oICovLAogCQkJCTRBNEY2NTZEMUFBOTk3RjEwMEUzOENERCAvKiBSZWFsdGltZU1lZGlh
U291cmNlQ2FwYWJpbGl0aWVzLmggKi8sCkBAIC0xNjU0Niw2ICsxNjU1NCw4IEBACiAJCQkJNEE0
RjY1NkYxQUE5OTdGMTAwRTM4Q0REIC8qIFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncy5oICov
LAogCQkJCTJFQzQxREUyMUMwNDEwQTMwMEQyOTRGRSAvKiBSZWFsdGltZU1lZGlhU291cmNlU3Vw
cG9ydGVkQ29uc3RyYWludHMuY3BwICovLAogCQkJCTA3QzFDMEU0MUJGQjYwRUQwMEJEMjI1NiAv
KiBSZWFsdGltZU1lZGlhU291cmNlU3VwcG9ydGVkQ29uc3RyYWludHMuaCAqLywKKwkJCQk1Q0RE
ODMzQjFFNDMyNEJCMDA2MjFFOTIgLyogUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmNwcCAq
LywKKwkJCQk1Q0REODMzQzFFNDMyNEJCMDA2MjFFOTIgLyogUmVhbHRpbWVPdXRnb2luZ1ZpZGVv
U291cmNlLmggKi8sCiAJCQkJMzEzNTkxMEMxRTdERENCNjAwRjMwNjMwIC8qIFJUQ0J1bmRsZVBv
bGljeS5oICovLAogCQkJCTA3MjIxQkEyMTdDRjBBRDQwMDg0OEU1MSAvKiBSVENEYXRhQ2hhbm5l
bEhhbmRsZXIuaCAqLywKIAkJCQkwNzIyMUJBMzE3Q0YwQUQ0MDA4NDhFNTEgLyogUlRDRGF0YUNo
YW5uZWxIYW5kbGVyQ2xpZW50LmggKi8sCkBAIC0xNjU5OCwxNCArMTY2MDgsMTQgQEAKIAkJCQkw
N0VFNzZFRTFCRUE2MTk4MDBGODkxMzMgLyogTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMubW0g
Ki8sCiAJCQkJNDExMDNBQUExRTM5NzkwQTAwNzY5RjAzIC8qIFJlYWx0aW1lSW5jb21pbmdBdWRp
b1NvdXJjZS5jcHAgKi8sCiAJCQkJNDExMDNBQTkxRTM5NzkwQTAwNzY5RjAzIC8qIFJlYWx0aW1l
SW5jb21pbmdBdWRpb1NvdXJjZS5oICovLAotCQkJCTVDREQ4MzM5MUU0MzI0QkIwMDYyMUU5MiAv
KiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuY3BwICovLAotCQkJCTVDREQ4MzNBMUU0MzI0
QkIwMDYyMUU5MiAvKiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuaCAqLywKKwkJCQk0MTEw
M0FBOTFFMzk3OTBBMDA3NjlGMDQgLyogUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlTWFjLmgg
Ki8sCisJCQkJNUNERDgzMzkxRTQzMjRCQjAwNjIxRTkzIC8qIFJlYWx0aW1lSW5jb21pbmdWaWRl
b1NvdXJjZU1hYy5jcHAgKi8sCiAJCQkJNEEwRkZBQTMxQUFGNUVGNjAwNjI4MDNCIC8qIFJlYWx0
aW1lTWVkaWFTb3VyY2VDZW50ZXJNYWMuY3BwICovLAogCQkJCTRBMEZGQUE0MUFBRjVFRjYwMDYy
ODAzQiAvKiBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTWFjLmggKi8sCiAJCQkJNDExMDNBQTcx
RTM5NzkwQTAwNzY5RjAzIC8qIFJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZS5jcHAgKi8sCiAJ
CQkJNDExMDNBQTgxRTM5NzkwQTAwNzY5RjAzIC8qIFJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJj
ZS5oICovLAotCQkJCTVDREQ4MzNCMUU0MzI0QkIwMDYyMUU5MiAvKiBSZWFsdGltZU91dGdvaW5n
VmlkZW9Tb3VyY2UuY3BwICovLAotCQkJCTVDREQ4MzNDMUU0MzI0QkIwMDYyMUU5MiAvKiBSZWFs
dGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuaCAqLywKKwkJCQk0MTEwM0FBODFFMzk3OTBBMDA3NjlG
MDQgLyogUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlTWFjLmggKi8sCisJCQkJNUNERDgzM0Ix
RTQzMjRCQjAwNjIxRTkzIC8qIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZU1hYy5jcHAgKi8s
CiAJCQkJMDdENjM3M0UxQkIwQjExMzAwMjU2Q0U5IC8qIFdlYkF1ZGlvU291cmNlUHJvdmlkZXJB
VkZPYmpDLmggKi8sCiAJCQkJMDdENjM3M0YxQkIwQjExMzAwMjU2Q0U5IC8qIFdlYkF1ZGlvU291
cmNlUHJvdmlkZXJBVkZPYmpDLm1tICovLAogCQkJKTsKQEAgLTMzNjM5LDYgKzMzNjQ5LDcgQEAK
IAkJCQlGRDMxNjAzQjEyQjAyNjc2MDBDMUEzNTkgLyogUmVhbHRpbWVBbmFseXNlci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk0MTEwM0FBRTFFMzk3OTEwMDA3NjlGMDMgLyogUmVhbHRpbWVJbmNv
bWluZ0F1ZGlvU291cmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDREQ4MzNFMUU0MzI0REMw
MDYyMUU5MiAvKiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJNUNERDgzM0UxRTQzMjREQzAwNjIxRTkzIC8qIFJlYWx0aW1lSW5jb21pbmdWaWRlb1Nv
dXJjZU1hYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0QTRGNjU3MDFBQTk5N0YxMDBFMzhDREQg
LyogUmVhbHRpbWVNZWRpYVNvdXJjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0QTBGRkFBMTFB
QUY1RUEyMDA2MjgwM0IgLyogUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk0QTBGRkFBNTFBQUY1RUY2MDA2MjgwM0IgLyogUmVhbHRpbWVNZWRpYVNvdXJj
ZUNlbnRlck1hYy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTMzNjQ2LDYgKzMzNjU3LDcgQEAKIAkJ
CQkyRUM0MURFNDFDMDQxMEEzMDBEMjk0RkUgLyogUmVhbHRpbWVNZWRpYVNvdXJjZVN1cHBvcnRl
ZENvbnN0cmFpbnRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQxMTAzQUFCMUUzOTc5MTAwMDc2
OUYwMyAvKiBSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNUNERDgzM0QxRTQzMjREOTAwNjIxRTkyIC8qIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJj
ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1Q0REODMzRDFFNDMyNEQ5MDA2MjFFOTMgLyogUmVh
bHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTWFjLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZENDVB
OTVBMTc1RDQxNzEwMEMyMUVDOCAvKiBSZWN0YW5nbGVTaGFwZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlCQ0FCNDE4MTEzRTM1NkU4MDBEOEFBRjMgLyogUmVnaW9uLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUE1NzhGNDQwMURFMEI2MzQwMDNERkM2QSAvKiBSZWplY3RlZFByb21pc2VUcmFja2Vy
LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uOWY2Mjk1MjFjZmFkOGVmNTdiZjRhOTY5NjQzOTRjMmQ0OGRjYWQxYQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0
aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5jcHAKQEAgLTAsMCArMSwxMDAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0
cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuaCIK
KworI2lmIFVTRShMSUJXRUJSVEMpCisKKyNpZiBQTEFURk9STShDT0NPQSkKKyNpbmNsdWRlICJS
ZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWMuaCIKKyNlbmRpZgorCisjaW5jbHVkZSAiTG9n
Z2luZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlZjxSZWFsdGltZUluY29taW5nVmlk
ZW9Tb3VyY2U+IFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6Y3JlYXRlKHJ0Yzo6c2NvcGVk
X3JlZnB0cjx3ZWJydGM6OlZpZGVvVHJhY2tJbnRlcmZhY2U+JiYgdmlkZW9UcmFjaywgU3RyaW5n
JiYgdHJhY2tJZCkKK3sKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBhdXRvIHNvdXJjZSA9IFJl
YWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1hYzo6Y3JlYXRlKFdURk1vdmUodmlkZW9UcmFjayks
IFdURk1vdmUodHJhY2tJZCkpOworI2Vsc2UKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IEdUSyBz
cGVjaWZpYyBvdXRnb2luZyB2aWRlbyBzb3VyY2UKKyAgICBhdXRvIHNvdXJjZSA9IGFkb3B0UmVm
KCpuZXcgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlKFdURk1vdmUodmlkZW9UcmFjayksIFdU
Rk1vdmUodHJhY2tJZCkpKTsKKyNlbmRpZgorICAgIHNvdXJjZS0+c3RhcnQoKTsKKyAgICByZXR1
cm4gc291cmNlOworfQorCitSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6OlJlYWx0aW1lSW5j
b21pbmdWaWRlb1NvdXJjZShydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb1RyYWNrSW50
ZXJmYWNlPiYmIHZpZGVvVHJhY2ssIFN0cmluZyYmIHZpZGVvVHJhY2tJZCkKKyAgICA6IFJlYWx0
aW1lTWVkaWFTb3VyY2UoV1RGTW92ZSh2aWRlb1RyYWNrSWQpLCBSZWFsdGltZU1lZGlhU291cmNl
OjpUeXBlOjpWaWRlbywgU3RyaW5nKCkpCisgICAgLCBtX3ZpZGVvVHJhY2soV1RGTW92ZSh2aWRl
b1RyYWNrKSkKK3sKKyAgICBtX2N1cnJlbnRTZXR0aW5ncy5zZXRXaWR0aCg2NDApOworICAgIG1f
Y3VycmVudFNldHRpbmdzLnNldEhlaWdodCg0ODApOworICAgIG5vdGlmeU11dGVkQ2hhbmdlKCFt
X3ZpZGVvVHJhY2spOworfQorCit2b2lkIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6c3Rh
cnRQcm9kdWNpbmdEYXRhKCkKK3sKKyAgICBpZiAobV92aWRlb1RyYWNrKQorICAgICAgICBtX3Zp
ZGVvVHJhY2stPkFkZE9yVXBkYXRlU2luayh0aGlzLCBydGM6OlZpZGVvU2lua1dhbnRzKCkpOwor
fQorCit2b2lkIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6c2V0U291cmNlVHJhY2socnRj
OjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9UcmFja0ludGVyZmFjZT4mJiB0cmFjaykKK3sK
KyAgICBBU1NFUlQoIW1fdmlkZW9UcmFjayk7CisgICAgQVNTRVJUKHRyYWNrKTsKKworICAgIG1f
dmlkZW9UcmFjayA9IFdURk1vdmUodHJhY2spOworICAgIG5vdGlmeU11dGVkQ2hhbmdlKCFtX3Zp
ZGVvVHJhY2spOworICAgIGlmIChpc1Byb2R1Y2luZ0RhdGEoKSkKKyAgICAgICAgbV92aWRlb1Ry
YWNrLT5BZGRPclVwZGF0ZVNpbmsodGhpcywgcnRjOjpWaWRlb1NpbmtXYW50cygpKTsKK30KKwor
dm9pZCBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6OnN0b3BQcm9kdWNpbmdEYXRhKCkKK3sK
KyAgICBpZiAobV92aWRlb1RyYWNrKQorICAgICAgICBtX3ZpZGVvVHJhY2stPlJlbW92ZVNpbmso
dGhpcyk7Cit9CisKK2NvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMmIFJlYWx0
aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6Y2FwYWJpbGl0aWVzKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllczo6ZW1wdHlDYXBhYmlsaXRpZXMoKTsK
K30KKworY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzJiBSZWFsdGltZUluY29taW5n
VmlkZW9Tb3VyY2U6OnNldHRpbmdzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jdXJyZW50U2V0
dGluZ3M7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShMSUJX
RUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9S
ZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjczNzgx
MmY2MDU3YTM1NzE0OGE4NmFiNjM1NjE5NjAyYThkZDVhYzYKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZUluY29taW5nVmlkZW9T
b3VyY2UuaApAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICogMy4gTmVp
dGhlciB0aGUgbmFtZSBvZiBFcmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRv
cnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20gdGhpcworICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShMSUJX
RUJSVEMpCisKKyNpbmNsdWRlICJMaWJXZWJSVENNYWNyb3MuaCIKKyNpbmNsdWRlICJSZWFsdGlt
ZU1lZGlhU291cmNlLmgiCisjaW5jbHVkZSA8d2VicnRjL2FwaS9tZWRpYXN0cmVhbWludGVyZmFj
ZS5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBDYXB0dXJlRGV2aWNlOworCitjbGFzcyBSZWFsdGltZUluY29taW5nVmlkZW9Tb3Vy
Y2UgOiBwdWJsaWMgUmVhbHRpbWVNZWRpYVNvdXJjZSwgcHJpdmF0ZSBydGM6OlZpZGVvU2lua0lu
dGVyZmFjZTx3ZWJydGM6OlZpZGVvRnJhbWU+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFJl
YWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZT4gY3JlYXRlKHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJy
dGM6OlZpZGVvVHJhY2tJbnRlcmZhY2U+JiYsIFN0cmluZyYmKTsKKyAgICB+UmVhbHRpbWVJbmNv
bWluZ1ZpZGVvU291cmNlKCkgeyBzdG9wUHJvZHVjaW5nRGF0YSgpOyB9CisKKyAgICB2b2lkIHNl
dFNvdXJjZVRyYWNrKHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvVHJhY2tJbnRlcmZh
Y2U+JiYpOworCitwcm90ZWN0ZWQ6CisgICAgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlKHJ0
Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvVHJhY2tJbnRlcmZhY2U+JiYsIFN0cmluZyYm
KTsKKworICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyBtX2N1cnJlbnRTZXR0aW5nczsK
KworcHJpdmF0ZToKKyAgICAvLyBSZWFsdGltZU1lZGlhU291cmNlIEFQSQorICAgIHZvaWQgc3Rh
cnRQcm9kdWNpbmdEYXRhKCkgZmluYWw7CisgICAgdm9pZCBzdG9wUHJvZHVjaW5nRGF0YSgpICBm
aW5hbDsKKworICAgIGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMmIGNhcGFi
aWxpdGllcygpIGNvbnN0IGZpbmFsOworICAgIGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0
aW5ncyYgc2V0dGluZ3MoKSBjb25zdCBmaW5hbDsKKworICAgIGJvb2wgYXBwbHlTaXplKGNvbnN0
IEludFNpemUmKSBmaW5hbCB7IHJldHVybiB0cnVlOyB9CisKKyAgICAvLyBydGM6OlZpZGVvU2lu
a0ludGVyZmFjZQorICAgIHZvaWQgT25GcmFtZShjb25zdCB3ZWJydGM6OlZpZGVvRnJhbWUmKSBv
dmVycmlkZSB7IH07CisKKyAgICBydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb1RyYWNr
SW50ZXJmYWNlPiBtX3ZpZGVvVHJhY2s7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBVU0UoTElCV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJj
ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZmRlNWIxMmE4ZWZlODRiNmJhNWJmMjhlY2MzN2FlYzFkOTEzZWE1
NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5jcHAKQEAgLTAsMCArMSwyMDcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkLCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIHJlcXVpcmVkIHRvIGJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgor
ICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmgiCisKKyNpZiBVU0UoTElC
V0VCUlRDKQorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgPHdlYnJ0Yy9hcGkvdmlk
ZW8vaTQyMF9idWZmZXIuaD4KKyNpbmNsdWRlIDx3ZWJydGMvY29tbW9uX3ZpZGVvL2xpYnl1di9p
bmNsdWRlL3dlYnJ0Y19saWJ5dXYuaD4KKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKyNp
bmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorCisjaWYgUExBVEZPUk0oQ09DT0EpCisjaW5jbHVk
ZSAiUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTWFjLmgiCisjZW5kaWYKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitSZWY8UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlPiBSZWFsdGltZU91
dGdvaW5nVmlkZW9Tb3VyY2U6OmNyZWF0ZShSZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYg
dmlkZW9Tb3VyY2UpCit7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgcmV0dXJuIFJlYWx0aW1l
T3V0Z29pbmdWaWRlb1NvdXJjZU1hYzo6Y3JlYXRlKFdURk1vdmUodmlkZW9Tb3VyY2UpKTsKKyNl
bHNlCisgICAgLy8gRklYTUU6IEltcGxlbWVudCBHVEsgc3BlY2lmaWMgb3V0Z29pbmcgdmlkZW8g
c291cmNlLgorICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1Nv
dXJjZShXVEZNb3ZlKHZpZGVvU291cmNlKSkpOworI2VuZGlmCit9CisKK1JlYWx0aW1lT3V0Z29p
bmdWaWRlb1NvdXJjZTo6UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlKFJlZjxNZWRpYVN0cmVh
bVRyYWNrUHJpdmF0ZT4mJiB2aWRlb1NvdXJjZSkKKyAgICA6IG1fdmlkZW9Tb3VyY2UoV1RGTW92
ZSh2aWRlb1NvdXJjZSkpCisgICAgLCBtX2JsYWNrRnJhbWVUaW1lcigqdGhpcywgJlJlYWx0aW1l
T3V0Z29pbmdWaWRlb1NvdXJjZTo6c2VuZE9uZUJsYWNrRnJhbWUpCit7CisgICAgbV92aWRlb1Nv
dXJjZS0+YWRkT2JzZXJ2ZXIoKnRoaXMpOworICAgIGluaXRpYWxpemVGcm9tU291cmNlKCk7Cit9
CisKK2Jvb2wgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpzZXRTb3VyY2UoUmVmPE1lZGlh
U3RyZWFtVHJhY2tQcml2YXRlPiYmIG5ld1NvdXJjZSkKK3sKKyAgICBpZiAoIW1faW5pdGlhbFNl
dHRpbmdzKQorICAgICAgICBtX2luaXRpYWxTZXR0aW5ncyA9IG1fdmlkZW9Tb3VyY2UtPnNvdXJj
ZSgpLnNldHRpbmdzKCk7CisKKyAgICBtX3ZpZGVvU291cmNlLT5yZW1vdmVPYnNlcnZlcigqdGhp
cyk7CisgICAgbV92aWRlb1NvdXJjZSA9IFdURk1vdmUobmV3U291cmNlKTsKKyAgICBtX3ZpZGVv
U291cmNlLT5hZGRPYnNlcnZlcigqdGhpcyk7CisKKyAgICBpbml0aWFsaXplRnJvbVNvdXJjZSgp
OworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291
cmNlOjpzdG9wKCkKK3sKKyAgICBtX3ZpZGVvU291cmNlLT5yZW1vdmVPYnNlcnZlcigqdGhpcyk7
CisgICAgbV9ibGFja0ZyYW1lVGltZXIuc3RvcCgpOworICAgIG1faXNTdG9wcGVkID0gdHJ1ZTsK
K30KKwordm9pZCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnVwZGF0ZUJsYWNrRnJhbWVz
U2VuZGluZygpCit7CisgICAgaWYgKCFtX211dGVkICYmIG1fZW5hYmxlZCkgeworICAgICAgICBp
ZiAobV9ibGFja0ZyYW1lVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgICAgIG1fYmxhY2tGcmFt
ZVRpbWVyLnN0b3AoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNlbmRCbGFja0Zy
YW1lc0lmTmVlZGVkKCk7Cit9CisKK3ZvaWQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpz
b3VyY2VNdXRlZENoYW5nZWQoKQoreworICAgIEFTU0VSVChtX211dGVkICE9IG1fdmlkZW9Tb3Vy
Y2UtPm11dGVkKCkpOworCisgICAgbV9tdXRlZCA9IG1fdmlkZW9Tb3VyY2UtPm11dGVkKCk7CisK
KyAgICB1cGRhdGVCbGFja0ZyYW1lc1NlbmRpbmcoKTsKK30KKwordm9pZCBSZWFsdGltZU91dGdv
aW5nVmlkZW9Tb3VyY2U6OnNvdXJjZUVuYWJsZWRDaGFuZ2VkKCkKK3sKKyAgICBBU1NFUlQobV9l
bmFibGVkICE9IG1fdmlkZW9Tb3VyY2UtPmVuYWJsZWQoKSk7CisKKyAgICBtX2VuYWJsZWQgPSBt
X3ZpZGVvU291cmNlLT5lbmFibGVkKCk7CisKKyAgICB1cGRhdGVCbGFja0ZyYW1lc1NlbmRpbmco
KTsKK30KKwordm9pZCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OmluaXRpYWxpemVGcm9t
U291cmNlKCkKK3sKKyAgICBjb25zdCBhdXRvJiBzZXR0aW5ncyA9IG1fdmlkZW9Tb3VyY2UtPnNv
dXJjZSgpLnNldHRpbmdzKCk7CisgICAgbV93aWR0aCA9IHNldHRpbmdzLndpZHRoKCk7CisgICAg
bV9oZWlnaHQgPSBzZXR0aW5ncy5oZWlnaHQoKTsKKworICAgIG1fbXV0ZWQgPSBtX3ZpZGVvU291
cmNlLT5tdXRlZCgpOworICAgIG1fZW5hYmxlZCA9IG1fdmlkZW9Tb3VyY2UtPmVuYWJsZWQoKTsK
KworICAgIHVwZGF0ZUJsYWNrRnJhbWVzU2VuZGluZygpOworfQorCitib29sIFJlYWx0aW1lT3V0
Z29pbmdWaWRlb1NvdXJjZTo6R2V0U3RhdHMoU3RhdHMqKQoreworICAgIHJldHVybiBmYWxzZTsK
K30KKwordm9pZCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OkFkZE9yVXBkYXRlU2luayhy
dGM6OlZpZGVvU2lua0ludGVyZmFjZTx3ZWJydGM6OlZpZGVvRnJhbWU+KiBzaW5rLCBjb25zdCBy
dGM6OlZpZGVvU2lua1dhbnRzJiBzaW5rV2FudHMpCit7CisgICAgQVNTRVJUKCFzaW5rV2FudHMu
YmxhY2tfZnJhbWVzKTsKKworICAgIGlmIChzaW5rV2FudHMucm90YXRpb25fYXBwbGllZCkKKyAg
ICAgICAgbV9zaG91bGRBcHBseVJvdGF0aW9uID0gdHJ1ZTsKKworICAgIGlmICghbV9zaW5rcy5j
b250YWlucyhzaW5rKSkKKyAgICAgICAgbV9zaW5rcy5hcHBlbmQoc2luayk7CisKKyAgICBjYWxs
T25NYWluVGhyZWFkKFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldKCkgeworICAgICAg
ICBwcm90ZWN0ZWRUaGlzLT5zZW5kQmxhY2tGcmFtZXNJZk5lZWRlZCgpOworICAgIH0pOworfQor
Cit2b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6UmVtb3ZlU2luayhydGM6OlZpZGVv
U2lua0ludGVyZmFjZTx3ZWJydGM6OlZpZGVvRnJhbWU+KiBzaW5rKQoreworICAgIG1fc2lua3Mu
cmVtb3ZlRmlyc3Qoc2luayk7CisKKyAgICBpZiAobV9zaW5rcy5zaXplKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGNhbGxPbk1haW5UaHJlYWQoW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0
aGlzKV0oKSB7CisgICAgICAgIGlmIChwcm90ZWN0ZWRUaGlzLT5tX2JsYWNrRnJhbWVUaW1lci5p
c0FjdGl2ZSgpKQorICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+bV9ibGFja0ZyYW1lVGltZXIu
c3RvcCgpOworICAgIH0pOworfQorCit2b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6
c2VuZEJsYWNrRnJhbWVzSWZOZWVkZWQoKQoreworICAgIGlmIChtX2JsYWNrRnJhbWVUaW1lci5p
c0FjdGl2ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fc2lua3Muc2l6ZSgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fbXV0ZWQgJiYgbV9lbmFibGVkKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoIW1fd2lkdGggfHwgIW1faGVpZ2h0KQorICAgICAgICByZXR1
cm47CisKKyAgICBpZiAoIW1fYmxhY2tGcmFtZSkgeworICAgICAgICBhdXRvIHdpZHRoID0gbV93
aWR0aDsKKyAgICAgICAgYXV0byBoZWlnaHQgPSBtX2hlaWdodDsKKyAgICAgICAgaWYgKG1fc2hv
dWxkQXBwbHlSb3RhdGlvbiAmJiAobV9jdXJyZW50Um90YXRpb24gPT0gd2VicnRjOjprVmlkZW9S
b3RhdGlvbl8wIHx8IG1fY3VycmVudFJvdGF0aW9uID09IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25f
OTApKQorICAgICAgICAgICAgc3RkOjpzd2FwKHdpZHRoLCBoZWlnaHQpOworICAgICAgICBhdXRv
IGZyYW1lID0gbV9idWZmZXJQb29sLkNyZWF0ZUJ1ZmZlcih3aWR0aCwgaGVpZ2h0KTsKKyAgICAg
ICAgQVNTRVJUKGZyYW1lKTsKKyAgICAgICAgaWYgKCFmcmFtZSkgeworICAgICAgICAgICAgUkVM
RUFTRV9MT0coV2ViUlRDLCAiUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpzZW5kQmxhY2tG
cmFtZXNJZk5lZWRlZCB1bmFibGUgdG8gc2VuZCBibGFjayBmcmFtZXMiKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB3ZWJydGM6Okk0MjBCdWZmZXI6OlNldEJsYWNr
KGZyYW1lLmdldCgpKTsKKyAgICAgICAgbV9ibGFja0ZyYW1lID0gV1RGTW92ZShmcmFtZSk7Cisg
ICAgfQorICAgIHNlbmRPbmVCbGFja0ZyYW1lKCk7CisgICAgbV9ibGFja0ZyYW1lVGltZXIuc3Rh
cnRSZXBlYXRpbmcoMV9zKTsKK30KKwordm9pZCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6
OnNlbmRPbmVCbGFja0ZyYW1lKCkKK3sKKyAgICBSRUxFQVNFX0xPRyhNZWRpYVN0cmVhbSwgIlJl
YWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6c2VuZE9uZUJsYWNrRnJhbWUiKTsKKyAgICBzZW5k
RnJhbWUocnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9GcmFtZUJ1ZmZlcj4obV9ibGFj
a0ZyYW1lKSk7Cit9CisKK3ZvaWQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpzZW5kRnJh
bWUocnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9GcmFtZUJ1ZmZlcj4mJiBidWZmZXIp
Cit7CisgICAgaW50NjRfdCB0aW1lc3RhbXBNaWNyb1NlY29uZHMgPSBtb25vdG9uaWNhbGx5SW5j
cmVhc2luZ1RpbWVNUygpICogMTAwMDsKKyAgICB3ZWJydGM6OlZpZGVvRnJhbWUgZnJhbWUoYnVm
ZmVyLCBtX3Nob3VsZEFwcGx5Um90YXRpb24gPyB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzAgOiBt
X2N1cnJlbnRSb3RhdGlvbiwgdGltZXN0YW1wTWljcm9TZWNvbmRzKTsKKyAgICBmb3IgKGF1dG8q
IHNpbmsgOiBtX3NpbmtzKQorICAgICAgICBzaW5rLT5PbkZyYW1lKGZyYW1lKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKExJQldFQlJUQykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lT3V0Z29pbmdW
aWRlb1NvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRp
bWVPdXRnb2luZ1ZpZGVvU291cmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTk1NGEyMGU1MjYwYzM4NzVmOWI3
MWUyNTg5MTQwM2I5ZWZlYzZmNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5oCkBAIC0wLDAg
KzEsMTE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCwgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSByZXF1aXJlZCB0byBiZSBtZXQ6CisgKgor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBs
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpZiBVU0UoTElCV0VCUlRDKQorCisjaW5jbHVkZSAiTGliV2ViUlRDTWFj
cm9zLmgiCisjaW5jbHVkZSAiTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUuaCIKKyNpbmNsdWRlIDxU
aW1lci5oPgorI2luY2x1ZGUgPHdlYnJ0Yy9hcGkvbWVkaWFzdHJlYW1pbnRlcmZhY2UuaD4KKyNp
bmNsdWRlIDx3ZWJydGMvYmFzZS9vcHRpb25hbC5oPgorI2luY2x1ZGUgPHdlYnJ0Yy9jb21tb25f
dmlkZW8vaW5jbHVkZS9pNDIwX2J1ZmZlcl9wb29sLmg+CisjaW5jbHVkZSA8d2VicnRjL21lZGlh
L2Jhc2UvdmlkZW9zaW5raW50ZXJmYWNlLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Cisj
aW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlIDogcHVibGljIFRocmVhZFNh
ZmVSZWZDb3VudGVkPFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZT4sIHB1YmxpYyB3ZWJydGM6
OlZpZGVvVHJhY2tTb3VyY2VJbnRlcmZhY2UsIHByaXZhdGUgTWVkaWFTdHJlYW1UcmFja1ByaXZh
dGU6Ok9ic2VydmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFJlYWx0aW1lT3V0Z29pbmdW
aWRlb1NvdXJjZT4gY3JlYXRlKFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4mJiB2aWRlb1Nv
dXJjZSk7CisgICAgflJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZSgpIHsgc3RvcCgpOyB9CisK
KyAgICB2b2lkIHN0b3AoKTsKKyAgICBib29sIHNldFNvdXJjZShSZWY8TWVkaWFTdHJlYW1UcmFj
a1ByaXZhdGU+JiYpOworICAgIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJiBzb3VyY2UoKSBjb25z
dCB7IHJldHVybiBtX3ZpZGVvU291cmNlLmdldCgpOyB9CisKKyAgICBpbnQgQWRkUmVmKCkgY29u
c3QgZmluYWwgeyByZWYoKTsgcmV0dXJuIHJlZkNvdW50KCk7IH0KKyAgICBpbnQgUmVsZWFzZSgp
IGNvbnN0IGZpbmFsIHsgZGVyZWYoKTsgcmV0dXJuIHJlZkNvdW50KCk7IH0KKworICAgIHZvaWQg
c2V0QXBwbHlSb3RhdGlvbihib29sIHNob3VsZEFwcGx5Um90YXRpb24pIHsgbV9zaG91bGRBcHBs
eVJvdGF0aW9uID0gc2hvdWxkQXBwbHlSb3RhdGlvbjsgfQorCitwcm90ZWN0ZWQ6CisgICAgZXhw
bGljaXQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlKFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJp
dmF0ZT4mJik7CisKKyAgICB2b2lkIHNlbmRGcmFtZShydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRj
OjpWaWRlb0ZyYW1lQnVmZmVyPiYmKTsKKworICAgIFZlY3RvcjxydGM6OlZpZGVvU2lua0ludGVy
ZmFjZTx3ZWJydGM6OlZpZGVvRnJhbWU+Kj4gbV9zaW5rczsKKyAgICB3ZWJydGM6Okk0MjBCdWZm
ZXJQb29sIG1fYnVmZmVyUG9vbDsKKworICAgIGJvb2wgbV9lbmFibGVkIHsgdHJ1ZSB9OworICAg
IGJvb2wgbV9tdXRlZCB7IGZhbHNlIH07CisgICAgdWludDMyX3QgbV93aWR0aCB7IDAgfTsKKyAg
ICB1aW50MzJfdCBtX2hlaWdodCB7IDAgfTsKKyAgICBib29sIG1fc2hvdWxkQXBwbHlSb3RhdGlv
biB7IGZhbHNlIH07CisgICAgd2VicnRjOjpWaWRlb1JvdGF0aW9uIG1fY3VycmVudFJvdGF0aW9u
IHsgd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8wIH07CisKK3ByaXZhdGU6CisgICAgdm9pZCBzZW5k
QmxhY2tGcmFtZXNJZk5lZWRlZCgpOworICAgIHZvaWQgc2VuZE9uZUJsYWNrRnJhbWUoKTsKKyAg
ICB2b2lkIGluaXRpYWxpemVGcm9tU291cmNlKCk7CisgICAgdm9pZCB1cGRhdGVCbGFja0ZyYW1l
c1NlbmRpbmcoKTsKKworICAgIC8vIE5vdGlmaWVyIEFQSQorICAgIHZvaWQgUmVnaXN0ZXJPYnNl
cnZlcih3ZWJydGM6Ok9ic2VydmVySW50ZXJmYWNlKikgZmluYWwgeyB9CisgICAgdm9pZCBVbnJl
Z2lzdGVyT2JzZXJ2ZXIod2VicnRjOjpPYnNlcnZlckludGVyZmFjZSopIGZpbmFsIHsgfQorCisg
ICAgLy8gVmlkZW9UcmFja1NvdXJjZUludGVyZmFjZSBBUEkKKyAgICBib29sIGlzX3NjcmVlbmNh
c3QoKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQorICAgIHJ0Yzo6T3B0aW9uYWw8Ym9v
bD4gbmVlZHNfZGVub2lzaW5nKCkgY29uc3QgZmluYWwgeyByZXR1cm4gcnRjOjpPcHRpb25hbDxi
b29sPigpOyB9CisgICAgYm9vbCBHZXRTdGF0cyhTdGF0cyopIGZpbmFsOworCisgICAgLy8gTWVk
aWFTb3VyY2VJbnRlcmZhY2UgQVBJCisgICAgU291cmNlU3RhdGUgc3RhdGUoKSBjb25zdCBmaW5h
bCB7IHJldHVybiBTb3VyY2VTdGF0ZSgpOyB9CisgICAgYm9vbCByZW1vdGUoKSBjb25zdCBmaW5h
bCB7IHJldHVybiB0cnVlOyB9CisKKyAgICAvLyBydGM6OlZpZGVvU291cmNlSW50ZXJmYWNlPHdl
YnJ0Yzo6VmlkZW9GcmFtZT4gQVBJCisgICAgdm9pZCBBZGRPclVwZGF0ZVNpbmsocnRjOjpWaWRl
b1NpbmtJbnRlcmZhY2U8d2VicnRjOjpWaWRlb0ZyYW1lPiosIGNvbnN0IHJ0Yzo6VmlkZW9TaW5r
V2FudHMmKSBmaW5hbDsKKyAgICB2b2lkIFJlbW92ZVNpbmsocnRjOjpWaWRlb1NpbmtJbnRlcmZh
Y2U8d2VicnRjOjpWaWRlb0ZyYW1lPiopIGZpbmFsOworCisgICAgdm9pZCBzb3VyY2VNdXRlZENo
YW5nZWQoKTsKKyAgICB2b2lkIHNvdXJjZUVuYWJsZWRDaGFuZ2VkKCk7CisgICAgdmlydHVhbCB2
b2lkIHZpZGVvU2FtcGxlQXZhaWxhYmxlKE1lZGlhU2FtcGxlJikgeyB9OworCisgICAgLy8gTWVk
aWFTdHJlYW1UcmFja1ByaXZhdGU6Ok9ic2VydmVyIEFQSQorICAgIHZvaWQgdHJhY2tNdXRlZENo
YW5nZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmKSBmaW5hbCB7IHNvdXJjZU11dGVkQ2hhbmdl
ZCgpOyB9CisgICAgdm9pZCB0cmFja0VuYWJsZWRDaGFuZ2VkKE1lZGlhU3RyZWFtVHJhY2tQcml2
YXRlJikgZmluYWwgeyBzb3VyY2VFbmFibGVkQ2hhbmdlZCgpOyB9CisgICAgdm9pZCB0cmFja1Nl
dHRpbmdzQ2hhbmdlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYpIGZpbmFsIHsgaW5pdGlhbGl6
ZUZyb21Tb3VyY2UoKTsgfQorICAgIHZvaWQgc2FtcGxlQnVmZmVyVXBkYXRlZChNZWRpYVN0cmVh
bVRyYWNrUHJpdmF0ZSYsIE1lZGlhU2FtcGxlJiBzYW1wbGUpIGZpbmFsIHsgdmlkZW9TYW1wbGVB
dmFpbGFibGUoc2FtcGxlKTsgfQorICAgIHZvaWQgdHJhY2tFbmRlZChNZWRpYVN0cmVhbVRyYWNr
UHJpdmF0ZSYpIGZpbmFsIHsgfQorCisgICAgUmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiBt
X3ZpZGVvU291cmNlOworICAgIHN0ZDo6b3B0aW9uYWw8UmVhbHRpbWVNZWRpYVNvdXJjZVNldHRp
bmdzPiBtX2luaXRpYWxTZXR0aW5nczsKKyAgICBib29sIG1faXNTdG9wcGVkIHsgZmFsc2UgfTsK
KyAgICBUaW1lciBtX2JsYWNrRnJhbWVUaW1lcjsKKyAgICBydGM6OnNjb3BlZF9yZWZwdHI8d2Vi
cnRjOjpWaWRlb0ZyYW1lQnVmZmVyPiBtX2JsYWNrRnJhbWU7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoTElCV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lSW5jb21pbmdWaWRlb1Nv
dXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRp
bWVJbmNvbWluZ1ZpZGVvU291cmNlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YzI2MThkNjk1Mjc2M2ZlN2Q3YzRiNmI4Y2U0ZjljZGMxODI3YTM3MS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDIwNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgotICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRv
cnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20gdGhpcwotICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmgiCi0KLSNpZiBVU0UoTElCV0VCUlRDKQot
Ci0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIk1lZGlhU2FtcGxlQVZGT2JqQy5oIgot
I2luY2x1ZGUgPHdlYnJ0Yy9zZGsvb2JqYy9GcmFtZXdvcmsvQ2xhc3Nlcy9WaWRlby9jb3Jldmlk
ZW9fZnJhbWVfYnVmZmVyLmg+Ci0KLSNpbmNsdWRlICJDb3JlTWVkaWFTb2Z0TGluay5oIgotI2lu
Y2x1ZGUgIkNvcmVWaWRlb1NvZnRMaW5rLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUmVm
PFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZT4gUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNl
OjpjcmVhdGUocnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9UcmFja0ludGVyZmFjZT4m
JiB2aWRlb1RyYWNrLCBTdHJpbmcmJiB0cmFja0lkKQotewotICAgIGF1dG8gc291cmNlID0gYWRv
cHRSZWYoKm5ldyBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UoV1RGTW92ZSh2aWRlb1RyYWNr
KSwgV1RGTW92ZSh0cmFja0lkKSkpOwotICAgIHNvdXJjZS0+c3RhcnQoKTsKLSAgICByZXR1cm4g
c291cmNlOwotfQotCi1SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6OlJlYWx0aW1lSW5jb21p
bmdWaWRlb1NvdXJjZShydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb1RyYWNrSW50ZXJm
YWNlPiYmIHZpZGVvVHJhY2ssIFN0cmluZyYmIHZpZGVvVHJhY2tJZCkKLSAgICA6IFJlYWx0aW1l
TWVkaWFTb3VyY2UoV1RGTW92ZSh2aWRlb1RyYWNrSWQpLCBSZWFsdGltZU1lZGlhU291cmNlOjpU
eXBlOjpWaWRlbywgU3RyaW5nKCkpCi0gICAgLCBtX3ZpZGVvVHJhY2soV1RGTW92ZSh2aWRlb1Ry
YWNrKSkKLXsKLSAgICBtX2N1cnJlbnRTZXR0aW5ncy5zZXRXaWR0aCg2NDApOwotICAgIG1fY3Vy
cmVudFNldHRpbmdzLnNldEhlaWdodCg0ODApOwotICAgIG5vdGlmeU11dGVkQ2hhbmdlKCFtX3Zp
ZGVvVHJhY2spOwotfQotCi12b2lkIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6c3RhcnRQ
cm9kdWNpbmdEYXRhKCkKLXsKLSAgICBpZiAobV92aWRlb1RyYWNrKQotICAgICAgICBtX3ZpZGVv
VHJhY2stPkFkZE9yVXBkYXRlU2luayh0aGlzLCBydGM6OlZpZGVvU2lua1dhbnRzKCkpOwotfQot
Ci12b2lkIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6c2V0U291cmNlVHJhY2socnRjOjpz
Y29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9UcmFja0ludGVyZmFjZT4mJiB0cmFjaykKLXsKLSAg
ICBBU1NFUlQoIW1fdmlkZW9UcmFjayk7Ci0gICAgQVNTRVJUKHRyYWNrKTsKLQotICAgIG1fdmlk
ZW9UcmFjayA9IFdURk1vdmUodHJhY2spOwotICAgIG5vdGlmeU11dGVkQ2hhbmdlKCFtX3ZpZGVv
VHJhY2spOwotICAgIGlmIChpc1Byb2R1Y2luZ0RhdGEoKSkKLSAgICAgICAgbV92aWRlb1RyYWNr
LT5BZGRPclVwZGF0ZVNpbmsodGhpcywgcnRjOjpWaWRlb1NpbmtXYW50cygpKTsKLX0KLQotdm9p
ZCBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6OnN0b3BQcm9kdWNpbmdEYXRhKCkKLXsKLSAg
ICBpZiAobV92aWRlb1RyYWNrKQotICAgICAgICBtX3ZpZGVvVHJhY2stPlJlbW92ZVNpbmsodGhp
cyk7Ci19Ci0KLUNWUGl4ZWxCdWZmZXJSZWYgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlOjpw
aXhlbEJ1ZmZlckZyb21WaWRlb0ZyYW1lKGNvbnN0IHdlYnJ0Yzo6VmlkZW9GcmFtZSYgZnJhbWUp
Ci17Ci0gICAgaWYgKG11dGVkKCkpIHsKLSAgICAgICAgaWYgKCFtX2JsYWNrRnJhbWUgfHwgbV9i
bGFja0ZyYW1lV2lkdGggIT0gZnJhbWUud2lkdGgoKSB8fCBtX2JsYWNrRnJhbWVIZWlnaHQgIT0g
ZnJhbWUuaGVpZ2h0KCkpIHsKLSAgICAgICAgICAgIENWUGl4ZWxCdWZmZXJSZWYgcGl4ZWxCdWZm
ZXIgPSBudWxscHRyOwotICAgICAgICAgICAgYXV0byBzdGF0dXMgPSBDVlBpeGVsQnVmZmVyQ3Jl
YXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGZyYW1lLndpZHRoKCksIGZyYW1lLmhlaWdodCgpLCBr
Q1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyOFBsYW5hciwgbnVsbHB0ciwgJnBpeGVsQnVmZmVy
KTsKLSAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoc3RhdHVzLCBzdGF0dXMgPT0gbm9FcnIpOwot
Ci0gICAgICAgICAgICBtX2JsYWNrRnJhbWUgPSBwaXhlbEJ1ZmZlcjsKLSAgICAgICAgICAgIG1f
YmxhY2tGcmFtZVdpZHRoID0gZnJhbWUud2lkdGgoKTsKLSAgICAgICAgICAgIG1fYmxhY2tGcmFt
ZUhlaWdodCA9IGZyYW1lLmhlaWdodCgpOwotCi0gICAgICAgICAgICBzdGF0dXMgPSBDVlBpeGVs
QnVmZmVyTG9ja0Jhc2VBZGRyZXNzKHBpeGVsQnVmZmVyLCAwKTsKLSAgICAgICAgICAgIEFTU0VS
VChzdGF0dXMgPT0gbm9FcnIpOwotICAgICAgICAgICAgdm9pZCogZGF0YSA9IENWUGl4ZWxCdWZm
ZXJHZXRCYXNlQWRkcmVzcyhwaXhlbEJ1ZmZlcik7Ci0gICAgICAgICAgICBzaXplX3QgeUxlbmd0
aCA9IGZyYW1lLndpZHRoKCkgKiBmcmFtZS5oZWlnaHQoKTsKLSAgICAgICAgICAgIG1lbXNldChk
YXRhLCAwLCB5TGVuZ3RoKTsKLSAgICAgICAgICAgIG1lbXNldChzdGF0aWNfY2FzdDx1aW50OF90
Kj4oZGF0YSkgKyB5TGVuZ3RoLCAxMjgsIHlMZW5ndGggLyAyKTsKLQotICAgICAgICAgICAgc3Rh
dHVzID0gQ1ZQaXhlbEJ1ZmZlclVubG9ja0Jhc2VBZGRyZXNzKHBpeGVsQnVmZmVyLCAwKTsKLSAg
ICAgICAgICAgIEFTU0VSVCghc3RhdHVzKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbV9i
bGFja0ZyYW1lLmdldCgpOwotICAgIH0KLSAgICBhdXRvIGJ1ZmZlciA9IGZyYW1lLnZpZGVvX2Zy
YW1lX2J1ZmZlcigpOwotICAgIEFTU0VSVChidWZmZXItPnR5cGUoKSA9PSB3ZWJydGM6OlZpZGVv
RnJhbWVCdWZmZXI6OlR5cGU6OmtOYXRpdmUpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDx3ZWJy
dGM6OkNvcmVWaWRlb0ZyYW1lQnVmZmVyJj4oKmJ1ZmZlcikucGl4ZWxfYnVmZmVyKCk7Ci19Ci0K
LXZvaWQgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlOjpPbkZyYW1lKGNvbnN0IHdlYnJ0Yzo6
VmlkZW9GcmFtZSYgZnJhbWUpCi17Ci0gICAgaWYgKCFpc1Byb2R1Y2luZ0RhdGEoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0jaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECi0gICAgaWYgKCEoKyttX251
bWJlck9mRnJhbWVzICUgMzApKQotICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYVN0cmVhbSwgIlJl
YWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6T25GcmFtZSAlenUgZnJhbWUiLCBtX251bWJlck9m
RnJhbWVzKTsKLSNlbmRpZgotCi0gICAgYXV0byBwaXhlbEJ1ZmZlciA9IHBpeGVsQnVmZmVyRnJv
bVZpZGVvRnJhbWUoZnJhbWUpOwotCi0gICAgLy8gRklYTUU6IENvbnZlcnQgdGltaW5nIGluZm9y
bWF0aW9uIGZyb20gVmlkZW9GcmFtZSB0byBDTVNhbXBsZVRpbWluZ0luZm8uCi0gICAgLy8gRm9y
IHRoZSBtb21lbnQsIHdlIHdpbGwgcHJldGVuZCB0aGF0IGZyYW1lcyBzaG91bGQgYmUgcmVuZGVy
ZWQgYXNhcC4KLSAgICBDTVNhbXBsZVRpbWluZ0luZm8gdGltaW5nSW5mbzsKLSAgICB0aW1pbmdJ
bmZvLnByZXNlbnRhdGlvblRpbWVTdGFtcCA9IGtDTVRpbWVJbnZhbGlkOwotICAgIHRpbWluZ0lu
Zm8uZGVjb2RlVGltZVN0YW1wID0ga0NNVGltZUludmFsaWQ7Ci0gICAgdGltaW5nSW5mby5kdXJh
dGlvbiA9IGtDTVRpbWVJbnZhbGlkOwotCi0gICAgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uUmVm
IGZvcm1hdERlc2NyaXB0aW9uOwotICAgIE9TU3RhdHVzIG9zdGF0dXMgPSBDTVZpZGVvRm9ybWF0
RGVzY3JpcHRpb25DcmVhdGVGb3JJbWFnZUJ1ZmZlcihrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAoQ1ZJ
bWFnZUJ1ZmZlclJlZilwaXhlbEJ1ZmZlciwgJmZvcm1hdERlc2NyaXB0aW9uKTsKLSAgICBpZiAo
b3N0YXR1cyAhPSBub0VycikgewotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBpbml0aWFs
aXplIENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbjogJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KG9zdGF0
dXMpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIENNU2FtcGxlQnVmZmVyUmVmIHNh
bXBsZUJ1ZmZlcjsKLSAgICBvc3RhdHVzID0gQ01TYW1wbGVCdWZmZXJDcmVhdGVSZWFkeVdpdGhJ
bWFnZUJ1ZmZlcihrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAoQ1ZJbWFnZUJ1ZmZlclJlZilwaXhlbEJ1
ZmZlciwgZm9ybWF0RGVzY3JpcHRpb24sICZ0aW1pbmdJbmZvLCAmc2FtcGxlQnVmZmVyKTsKLSAg
ICBpZiAob3N0YXR1cyAhPSBub0VycikgewotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBj
cmVhdGUgdGhlIHNhbXBsZSBidWZmZXI6ICVkIiwgc3RhdGljX2Nhc3Q8aW50Pihvc3RhdHVzKSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgQ0ZSZWxlYXNlKGZvcm1hdERlc2NyaXB0aW9u
KTsKLQotICAgIGF1dG8gc2FtcGxlID0gYWRvcHRDRihzYW1wbGVCdWZmZXIpOwotCi0gICAgQ0ZB
cnJheVJlZiBhdHRhY2htZW50c0FycmF5ID0gQ01TYW1wbGVCdWZmZXJHZXRTYW1wbGVBdHRhY2ht
ZW50c0FycmF5KHNhbXBsZUJ1ZmZlciwgdHJ1ZSk7Ci0gICAgZm9yIChDRkluZGV4IGkgPSAwOyBp
IDwgQ0ZBcnJheUdldENvdW50KGF0dGFjaG1lbnRzQXJyYXkpOyArK2kpIHsKLSAgICAgICAgQ0ZN
dXRhYmxlRGljdGlvbmFyeVJlZiBhdHRhY2htZW50cyA9IChDRk11dGFibGVEaWN0aW9uYXJ5UmVm
KUNGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoYXR0YWNobWVudHNBcnJheSwgaSk7Ci0gICAgICAgIENG
RGljdGlvbmFyeVNldFZhbHVlKGF0dGFjaG1lbnRzLCBrQ01TYW1wbGVBdHRhY2htZW50S2V5X0Rp
c3BsYXlJbW1lZGlhdGVseSwga0NGQm9vbGVhblRydWUpOwotICAgIH0KLQotICAgIHVuc2lnbmVk
IHdpZHRoID0gZnJhbWUud2lkdGgoKTsKLSAgICB1bnNpZ25lZCBoZWlnaHQgPSBmcmFtZS5oZWln
aHQoKTsKLQotICAgIE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uIHJvdGF0aW9uOwotICAgIHN3
aXRjaCAoZnJhbWUucm90YXRpb24oKSkgewotICAgIGNhc2Ugd2VicnRjOjprVmlkZW9Sb3RhdGlv
bl8wOgotICAgICAgICByb3RhdGlvbiA9IE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpOb25l
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMTgwOgot
ICAgICAgICByb3RhdGlvbiA9IE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpVcHNpZGVEb3du
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fOTA6Ci0g
ICAgICAgIHJvdGF0aW9uID0gTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246OlJpZ2h0OwotICAg
ICAgICBzdGQ6OnN3YXAod2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
d2VicnRjOjprVmlkZW9Sb3RhdGlvbl8yNzA6Ci0gICAgICAgIHJvdGF0aW9uID0gTWVkaWFTYW1w
bGU6OlZpZGVvUm90YXRpb246OkxlZnQ7Ci0gICAgICAgIHN0ZDo6c3dhcCh3aWR0aCwgaGVpZ2h0
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgUmVmUHRyPFJlYWx0aW1lSW5jb21pbmdW
aWRlb1NvdXJjZT4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKLSAgICBjYWxsT25NYWluVGhyZWFkKFtw
cm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwgc2FtcGxlID0gV1RGTW92ZShz
YW1wbGUpLCB3aWR0aCwgaGVpZ2h0LCByb3RhdGlvbl0gewotICAgICAgICBwcm90ZWN0ZWRUaGlz
LT5wcm9jZXNzTmV3U2FtcGxlKHNhbXBsZS5nZXQoKSwgd2lkdGgsIGhlaWdodCwgcm90YXRpb24p
OwotICAgIH0pOwotfQotCi12b2lkIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6cHJvY2Vz
c05ld1NhbXBsZShDTVNhbXBsZUJ1ZmZlclJlZiBzYW1wbGUsIHVuc2lnbmVkIHdpZHRoLCB1bnNp
Z25lZCBoZWlnaHQsIE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uIHJvdGF0aW9uKQotewotICAg
IG1fYnVmZmVyID0gc2FtcGxlOwotICAgIGlmICh3aWR0aCAhPSBtX2N1cnJlbnRTZXR0aW5ncy53
aWR0aCgpIHx8IGhlaWdodCAhPSBtX2N1cnJlbnRTZXR0aW5ncy5oZWlnaHQoKSkgewotICAgICAg
ICBtX2N1cnJlbnRTZXR0aW5ncy5zZXRXaWR0aCh3aWR0aCk7Ci0gICAgICAgIG1fY3VycmVudFNl
dHRpbmdzLnNldEhlaWdodChoZWlnaHQpOwotICAgICAgICBzZXR0aW5nc0RpZENoYW5nZSgpOwot
ICAgIH0KLQotICAgIHZpZGVvU2FtcGxlQXZhaWxhYmxlKE1lZGlhU2FtcGxlQVZGT2JqQzo6Y3Jl
YXRlKHNhbXBsZSwgcm90YXRpb24pKTsKLX0KLQotY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZUNh
cGFiaWxpdGllcyYgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlOjpjYXBhYmlsaXRpZXMoKSBj
b25zdAotewotICAgIHJldHVybiBSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzOjplbXB0
eUNhcGFiaWxpdGllcygpOwotfQotCi1jb25zdCBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3Mm
IFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6c2V0dGluZ3MoKSBjb25zdAotewotICAgIHJl
dHVybiBtX2N1cnJlbnRTZXR0aW5nczsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gVVNFKExJQldFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUluY29taW5nVmlkZW9T
b3VyY2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWViN2MzNjRmZTMyMzIyMjJl
YWI0ZjI1YjdiNDEwMGNjOTEwMjgwOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVh
bHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogICAgaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQotICogICAgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBFcmljc3Nv
biBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotICogICAgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
LSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIFVTRShMSUJXRUJSVEMpCi0KLSNpbmNsdWRlICJMaWJX
ZWJSVENNYWNyb3MuaCIKLSNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNlLmgiCi0jaW5jbHVk
ZSA8d2VicnRjL2FwaS9tZWRpYXN0cmVhbWludGVyZmFjZS5oPgotI2luY2x1ZGUgPHd0Zi9SZXRh
aW5QdHIuaD4KLQotdXNpbmcgQ01TYW1wbGVCdWZmZXJSZWYgPSBzdHJ1Y3Qgb3BhcXVlQ01TYW1w
bGVCdWZmZXIqOwotdXNpbmcgQ1ZQaXhlbEJ1ZmZlclJlZiA9IHN0cnVjdCBfX0NWQnVmZmVyKjsK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBDYXB0dXJlRGV2aWNlOwotCi1jbGFzcyBS
ZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UgZmluYWwgOiBwdWJsaWMgUmVhbHRpbWVNZWRpYVNv
dXJjZSwgcHJpdmF0ZSBydGM6OlZpZGVvU2lua0ludGVyZmFjZTx3ZWJydGM6OlZpZGVvRnJhbWU+
IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZT4g
Y3JlYXRlKHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvVHJhY2tJbnRlcmZhY2U+JiYs
IFN0cmluZyYmKTsKLSAgICB+UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlKCkgeyBzdG9wUHJv
ZHVjaW5nRGF0YSgpOyB9Ci0KLSAgICB2b2lkIHNldFNvdXJjZVRyYWNrKHJ0Yzo6c2NvcGVkX3Jl
ZnB0cjx3ZWJydGM6OlZpZGVvVHJhY2tJbnRlcmZhY2U+JiYpOwotCi1wcml2YXRlOgotICAgIFJl
YWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZShydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRl
b1RyYWNrSW50ZXJmYWNlPiYmLCBTdHJpbmcmJik7Ci0KLSAgICAvLyBSZWFsdGltZU1lZGlhU291
cmNlIEFQSQotICAgIHZvaWQgc3RhcnRQcm9kdWNpbmdEYXRhKCkgZmluYWw7Ci0gICAgdm9pZCBz
dG9wUHJvZHVjaW5nRGF0YSgpICBmaW5hbDsKLQotICAgIGNvbnN0IFJlYWx0aW1lTWVkaWFTb3Vy
Y2VDYXBhYmlsaXRpZXMmIGNhcGFiaWxpdGllcygpIGNvbnN0IGZpbmFsOwotICAgIGNvbnN0IFJl
YWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyYgc2V0dGluZ3MoKSBjb25zdCBmaW5hbDsKLQotICAg
IHZvaWQgcHJvY2Vzc05ld1NhbXBsZShDTVNhbXBsZUJ1ZmZlclJlZiwgdW5zaWduZWQsIHVuc2ln
bmVkLCBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbik7Ci0KLSAgICBib29sIGFwcGx5U2l6ZShj
b25zdCBJbnRTaXplJikgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgLy8gcnRjOjpWaWRl
b1NpbmtJbnRlcmZhY2UKLSAgICB2b2lkIE9uRnJhbWUoY29uc3Qgd2VicnRjOjpWaWRlb0ZyYW1l
JikgZmluYWw7Ci0KLSAgICBDVlBpeGVsQnVmZmVyUmVmIHBpeGVsQnVmZmVyRnJvbVZpZGVvRnJh
bWUoY29uc3Qgd2VicnRjOjpWaWRlb0ZyYW1lJik7Ci0KLSAgICBSZWFsdGltZU1lZGlhU291cmNl
U2V0dGluZ3MgbV9jdXJyZW50U2V0dGluZ3M7Ci0gICAgcnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0
Yzo6VmlkZW9UcmFja0ludGVyZmFjZT4gbV92aWRlb1RyYWNrOwotICAgIFJldGFpblB0cjxDTVNh
bXBsZUJ1ZmZlclJlZj4gbV9idWZmZXI7Ci0gICAgUmV0YWluUHRyPENWUGl4ZWxCdWZmZXJSZWY+
IG1fYmxhY2tGcmFtZTsKLSAgICBpbnQgbV9ibGFja0ZyYW1lV2lkdGggeyAwIH07Ci0gICAgaW50
IG1fYmxhY2tGcmFtZUhlaWdodCB7IDAgfTsKLSNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKLSAg
ICBzaXplX3QgbV9udW1iZXJPZkZyYW1lcyB7IDAgfTsKLSNlbmRpZgotfTsKLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKExJQldFQlJUQykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUluY29taW5nVmlk
ZW9Tb3VyY2VNYWMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFj
L1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1hYy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTQxZGE5OWM5
YWU5MmM2ZjllMDkyYWZiMmU5N2JiNjY5ZGE1ZGNhMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUluY29taW5nVmlkZW9T
b3VyY2VNYWMuY3BwCkBAIC0wLDAgKzEsMTY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICog
My4gTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cyBj
b250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTWFjLmgiCisKKyNpZiBVU0Uo
TElCV0VCUlRDKQorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIk1lZGlhU2FtcGxl
QVZGT2JqQy5oIgorI2luY2x1ZGUgPHdlYnJ0Yy9zZGsvb2JqYy9GcmFtZXdvcmsvQ2xhc3Nlcy9W
aWRlby9jb3JldmlkZW9fZnJhbWVfYnVmZmVyLmg+CisKKyNpbmNsdWRlICJDb3JlTWVkaWFTb2Z0
TGluay5oIgorI2luY2x1ZGUgIkNvcmVWaWRlb1NvZnRMaW5rLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworUmVmPFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1hYz4gUmVhbHRpbWVJbmNv
bWluZ1ZpZGVvU291cmNlTWFjOjpjcmVhdGUocnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6Vmlk
ZW9UcmFja0ludGVyZmFjZT4mJiB2aWRlb1RyYWNrLCBTdHJpbmcmJiB0cmFja0lkKQoreworICAg
IGF1dG8gc291cmNlID0gYWRvcHRSZWYoKm5ldyBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VN
YWMoV1RGTW92ZSh2aWRlb1RyYWNrKSwgV1RGTW92ZSh0cmFja0lkKSkpOworICAgIHJldHVybiBz
b3VyY2U7Cit9CisKK1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1hYzo6UmVhbHRpbWVJbmNv
bWluZ1ZpZGVvU291cmNlTWFjKHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvVHJhY2tJ
bnRlcmZhY2U+JiYgdmlkZW9UcmFjaywgU3RyaW5nJiYgdmlkZW9UcmFja0lkKQorICAgIDogUmVh
bHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlKFdURk1vdmUodmlkZW9UcmFjayksIFdURk1vdmUodmlk
ZW9UcmFja0lkKSkKK3sKK30KKworQ1ZQaXhlbEJ1ZmZlclJlZiBSZWFsdGltZUluY29taW5nVmlk
ZW9Tb3VyY2VNYWM6OnBpeGVsQnVmZmVyRnJvbVZpZGVvRnJhbWUoY29uc3Qgd2VicnRjOjpWaWRl
b0ZyYW1lJiBmcmFtZSkKK3sKKyAgICBpZiAobXV0ZWQoKSkgeworICAgICAgICBpZiAoIW1fYmxh
Y2tGcmFtZSB8fCBtX2JsYWNrRnJhbWVXaWR0aCAhPSBmcmFtZS53aWR0aCgpIHx8IG1fYmxhY2tG
cmFtZUhlaWdodCAhPSBmcmFtZS5oZWlnaHQoKSkgeworICAgICAgICAgICAgQ1ZQaXhlbEJ1ZmZl
clJlZiBwaXhlbEJ1ZmZlciA9IG51bGxwdHI7CisgICAgICAgICAgICBhdXRvIHN0YXR1cyA9IENW
UGl4ZWxCdWZmZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgZnJhbWUud2lkdGgoKSwgZnJh
bWUuaGVpZ2h0KCksIGtDVlBpeGVsRm9ybWF0VHlwZV80MjBZcENiQ3I4UGxhbmFyLCBudWxscHRy
LCAmcGl4ZWxCdWZmZXIpOworICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChzdGF0dXMsIHN0YXR1
cyA9PSBub0Vycik7CisKKyAgICAgICAgICAgIG1fYmxhY2tGcmFtZSA9IHBpeGVsQnVmZmVyOwor
ICAgICAgICAgICAgbV9ibGFja0ZyYW1lV2lkdGggPSBmcmFtZS53aWR0aCgpOworICAgICAgICAg
ICAgbV9ibGFja0ZyYW1lSGVpZ2h0ID0gZnJhbWUuaGVpZ2h0KCk7CisKKyAgICAgICAgICAgIHN0
YXR1cyA9IENWUGl4ZWxCdWZmZXJMb2NrQmFzZUFkZHJlc3MocGl4ZWxCdWZmZXIsIDApOworICAg
ICAgICAgICAgQVNTRVJUKHN0YXR1cyA9PSBub0Vycik7CisgICAgICAgICAgICB2b2lkKiBkYXRh
ID0gQ1ZQaXhlbEJ1ZmZlckdldEJhc2VBZGRyZXNzKHBpeGVsQnVmZmVyKTsKKyAgICAgICAgICAg
IHNpemVfdCB5TGVuZ3RoID0gZnJhbWUud2lkdGgoKSAqIGZyYW1lLmhlaWdodCgpOworICAgICAg
ICAgICAgbWVtc2V0KGRhdGEsIDAsIHlMZW5ndGgpOworICAgICAgICAgICAgbWVtc2V0KHN0YXRp
Y19jYXN0PHVpbnQ4X3QqPihkYXRhKSArIHlMZW5ndGgsIDEyOCwgeUxlbmd0aCAvIDIpOworCisg
ICAgICAgICAgICBzdGF0dXMgPSBDVlBpeGVsQnVmZmVyVW5sb2NrQmFzZUFkZHJlc3MocGl4ZWxC
dWZmZXIsIDApOworICAgICAgICAgICAgQVNTRVJUKCFzdGF0dXMpOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBtX2JsYWNrRnJhbWUuZ2V0KCk7CisgICAgfQorICAgIGF1dG8gYnVmZmVyID0g
ZnJhbWUudmlkZW9fZnJhbWVfYnVmZmVyKCk7CisgICAgQVNTRVJUKGJ1ZmZlci0+dHlwZSgpID09
IHdlYnJ0Yzo6VmlkZW9GcmFtZUJ1ZmZlcjo6VHlwZTo6a05hdGl2ZSk7CisgICAgcmV0dXJuIHN0
YXRpY19jYXN0PHdlYnJ0Yzo6Q29yZVZpZGVvRnJhbWVCdWZmZXImPigqYnVmZmVyKS5waXhlbF9i
dWZmZXIoKTsKK30KKwordm9pZCBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWM6Ok9uRnJh
bWUoY29uc3Qgd2VicnRjOjpWaWRlb0ZyYW1lJiBmcmFtZSkKK3sKKyAgICBpZiAoIWlzUHJvZHVj
aW5nRGF0YSgpKQorICAgICAgICByZXR1cm47CisKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQK
KyAgICBpZiAoISgrK21fbnVtYmVyT2ZGcmFtZXMgJSAzMCkpCisgICAgICAgIFJFTEVBU0VfTE9H
KE1lZGlhU3RyZWFtLCAiUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTWFjOjpPbkZyYW1lICV6
dSBmcmFtZSIsIG1fbnVtYmVyT2ZGcmFtZXMpOworI2VuZGlmCisKKyAgICBhdXRvIHBpeGVsQnVm
ZmVyID0gcGl4ZWxCdWZmZXJGcm9tVmlkZW9GcmFtZShmcmFtZSk7CisKKyAgICAvLyBGSVhNRTog
Q29udmVydCB0aW1pbmcgaW5mb3JtYXRpb24gZnJvbSBWaWRlb0ZyYW1lIHRvIENNU2FtcGxlVGlt
aW5nSW5mby4KKyAgICAvLyBGb3IgdGhlIG1vbWVudCwgd2Ugd2lsbCBwcmV0ZW5kIHRoYXQgZnJh
bWVzIHNob3VsZCBiZSByZW5kZXJlZCBhc2FwLgorICAgIENNU2FtcGxlVGltaW5nSW5mbyB0aW1p
bmdJbmZvOworICAgIHRpbWluZ0luZm8ucHJlc2VudGF0aW9uVGltZVN0YW1wID0ga0NNVGltZUlu
dmFsaWQ7CisgICAgdGltaW5nSW5mby5kZWNvZGVUaW1lU3RhbXAgPSBrQ01UaW1lSW52YWxpZDsK
KyAgICB0aW1pbmdJbmZvLmR1cmF0aW9uID0ga0NNVGltZUludmFsaWQ7CisKKyAgICBDTVZpZGVv
Rm9ybWF0RGVzY3JpcHRpb25SZWYgZm9ybWF0RGVzY3JpcHRpb247CisgICAgT1NTdGF0dXMgb3N0
YXR1cyA9IENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbkNyZWF0ZUZvckltYWdlQnVmZmVyKGtDRkFs
bG9jYXRvckRlZmF1bHQsIChDVkltYWdlQnVmZmVyUmVmKXBpeGVsQnVmZmVyLCAmZm9ybWF0RGVz
Y3JpcHRpb24pOworICAgIGlmIChvc3RhdHVzICE9IG5vRXJyKSB7CisgICAgICAgIExPR19FUlJP
UigiRmFpbGVkIHRvIGluaXRpYWxpemUgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uOiAlZCIsIHN0
YXRpY19jYXN0PGludD4ob3N0YXR1cykpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
Q01TYW1wbGVCdWZmZXJSZWYgc2FtcGxlQnVmZmVyOworICAgIG9zdGF0dXMgPSBDTVNhbXBsZUJ1
ZmZlckNyZWF0ZVJlYWR5V2l0aEltYWdlQnVmZmVyKGtDRkFsbG9jYXRvckRlZmF1bHQsIChDVklt
YWdlQnVmZmVyUmVmKXBpeGVsQnVmZmVyLCBmb3JtYXREZXNjcmlwdGlvbiwgJnRpbWluZ0luZm8s
ICZzYW1wbGVCdWZmZXIpOworICAgIGlmIChvc3RhdHVzICE9IG5vRXJyKSB7CisgICAgICAgIExP
R19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSB0aGUgc2FtcGxlIGJ1ZmZlcjogJWQiLCBzdGF0aWNf
Y2FzdDxpbnQ+KG9zdGF0dXMpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBDRlJlbGVh
c2UoZm9ybWF0RGVzY3JpcHRpb24pOworCisgICAgYXV0byBzYW1wbGUgPSBhZG9wdENGKHNhbXBs
ZUJ1ZmZlcik7CisKKyAgICBDRkFycmF5UmVmIGF0dGFjaG1lbnRzQXJyYXkgPSBDTVNhbXBsZUJ1
ZmZlckdldFNhbXBsZUF0dGFjaG1lbnRzQXJyYXkoc2FtcGxlQnVmZmVyLCB0cnVlKTsKKyAgICBm
b3IgKENGSW5kZXggaSA9IDA7IGkgPCBDRkFycmF5R2V0Q291bnQoYXR0YWNobWVudHNBcnJheSk7
ICsraSkgeworICAgICAgICBDRk11dGFibGVEaWN0aW9uYXJ5UmVmIGF0dGFjaG1lbnRzID0gKENG
TXV0YWJsZURpY3Rpb25hcnlSZWYpQ0ZBcnJheUdldFZhbHVlQXRJbmRleChhdHRhY2htZW50c0Fy
cmF5LCBpKTsKKyAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUoYXR0YWNobWVudHMsIGtDTVNh
bXBsZUF0dGFjaG1lbnRLZXlfRGlzcGxheUltbWVkaWF0ZWx5LCBrQ0ZCb29sZWFuVHJ1ZSk7Cisg
ICAgfQorCisgICAgdW5zaWduZWQgd2lkdGggPSBmcmFtZS53aWR0aCgpOworICAgIHVuc2lnbmVk
IGhlaWdodCA9IGZyYW1lLmhlaWdodCgpOworCisgICAgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRp
b24gcm90YXRpb247CisgICAgc3dpdGNoIChmcmFtZS5yb3RhdGlvbigpKSB7CisgICAgY2FzZSB3
ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzA6CisgICAgICAgIHJvdGF0aW9uID0gTWVkaWFTYW1wbGU6
OlZpZGVvUm90YXRpb246Ok5vbmU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugd2VicnRjOjpr
VmlkZW9Sb3RhdGlvbl8xODA6CisgICAgICAgIHJvdGF0aW9uID0gTWVkaWFTYW1wbGU6OlZpZGVv
Um90YXRpb246OlVwc2lkZURvd247CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugd2VicnRjOjpr
VmlkZW9Sb3RhdGlvbl85MDoKKyAgICAgICAgcm90YXRpb24gPSBNZWRpYVNhbXBsZTo6VmlkZW9S
b3RhdGlvbjo6UmlnaHQ7CisgICAgICAgIHN0ZDo6c3dhcCh3aWR0aCwgaGVpZ2h0KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzI3MDoKKyAgICAgICAg
cm90YXRpb24gPSBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6TGVmdDsKKyAgICAgICAgc3Rk
Ojpzd2FwKHdpZHRoLCBoZWlnaHQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBSZWZQ
dHI8UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTWFjPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwor
ICAgIGNhbGxPbk1haW5UaHJlYWQoW3Byb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRo
aXMpLCBzYW1wbGUgPSBXVEZNb3ZlKHNhbXBsZSksIHdpZHRoLCBoZWlnaHQsIHJvdGF0aW9uXSB7
CisgICAgICAgIHByb3RlY3RlZFRoaXMtPnByb2Nlc3NOZXdTYW1wbGUoc2FtcGxlLmdldCgpLCB3
aWR0aCwgaGVpZ2h0LCByb3RhdGlvbik7CisgICAgfSk7Cit9CisKK3ZvaWQgUmVhbHRpbWVJbmNv
bWluZ1ZpZGVvU291cmNlTWFjOjpwcm9jZXNzTmV3U2FtcGxlKENNU2FtcGxlQnVmZmVyUmVmIHNh
bXBsZSwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgTWVkaWFTYW1wbGU6OlZpZGVv
Um90YXRpb24gcm90YXRpb24pCit7CisgICAgbV9idWZmZXIgPSBzYW1wbGU7CisgICAgaWYgKHdp
ZHRoICE9IG1fY3VycmVudFNldHRpbmdzLndpZHRoKCkgfHwgaGVpZ2h0ICE9IG1fY3VycmVudFNl
dHRpbmdzLmhlaWdodCgpKSB7CisgICAgICAgIG1fY3VycmVudFNldHRpbmdzLnNldFdpZHRoKHdp
ZHRoKTsKKyAgICAgICAgbV9jdXJyZW50U2V0dGluZ3Muc2V0SGVpZ2h0KGhlaWdodCk7CisgICAg
ICAgIHNldHRpbmdzRGlkQ2hhbmdlKCk7CisgICAgfQorCisgICAgdmlkZW9TYW1wbGVBdmFpbGFi
bGUoTWVkaWFTYW1wbGVBVkZPYmpDOjpjcmVhdGUoc2FtcGxlLCByb3RhdGlvbikpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoTElCV0VCUlRDKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lSW5j
b21pbmdWaWRlb1NvdXJjZU1hYy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vbWFjL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1hYy5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU4ODdh
NjU1YjE0NjViZGY5ZjQ2MzA0ZDg2MDcwODZhNjU1ZTkwNjUKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVJbmNvbWluZ1Zp
ZGVvU291cmNlTWFjLmgKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAq
IDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29u
dHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBV
U0UoTElCV0VCUlRDKQorCisjaW5jbHVkZSAiUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmgi
CisKK3VzaW5nIENNU2FtcGxlQnVmZmVyUmVmID0gc3RydWN0IG9wYXF1ZUNNU2FtcGxlQnVmZmVy
KjsKK3VzaW5nIENWUGl4ZWxCdWZmZXJSZWYgPSBzdHJ1Y3QgX19DVkJ1ZmZlcio7CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTWFjIGZp
bmFsIDogcHVibGljIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZSB7CitwdWJsaWM6CisgICAg
c3RhdGljIFJlZjxSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWM+IGNyZWF0ZShydGM6OnNj
b3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb1RyYWNrSW50ZXJmYWNlPiYmLCBTdHJpbmcmJik7CisK
K3ByaXZhdGU6CisgICAgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTWFjKHJ0Yzo6c2NvcGVk
X3JlZnB0cjx3ZWJydGM6OlZpZGVvVHJhY2tJbnRlcmZhY2U+JiYsIFN0cmluZyYmKTsKKworICAg
IHZvaWQgcHJvY2Vzc05ld1NhbXBsZShDTVNhbXBsZUJ1ZmZlclJlZiwgdW5zaWduZWQsIHVuc2ln
bmVkLCBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbik7CisgICAgQ1ZQaXhlbEJ1ZmZlclJlZiBw
aXhlbEJ1ZmZlckZyb21WaWRlb0ZyYW1lKGNvbnN0IHdlYnJ0Yzo6VmlkZW9GcmFtZSYpOworCisg
ICAgLy8gcnRjOjpWaWRlb1NpbmtJbnRlcmZhY2UKKyAgICB2b2lkIE9uRnJhbWUoY29uc3Qgd2Vi
cnRjOjpWaWRlb0ZyYW1lJikgZmluYWw7CisKKyAgICBSZXRhaW5QdHI8Q01TYW1wbGVCdWZmZXJS
ZWY+IG1fYnVmZmVyOworICAgIFJldGFpblB0cjxDVlBpeGVsQnVmZmVyUmVmPiBtX2JsYWNrRnJh
bWU7CisgICAgaW50IG1fYmxhY2tGcmFtZVdpZHRoIHsgMCB9OworICAgIGludCBtX2JsYWNrRnJh
bWVIZWlnaHQgeyAwIH07CisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAgc2l6ZV90IG1f
bnVtYmVyT2ZGcmFtZXMgeyAwIH07CisjZW5kaWYKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIFVTRShMSUJXRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU91dGdv
aW5nVmlkZW9Tb3VyY2UuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjQ1MGRm
MzNjNmY2YTI1ODdkYTM5YjVlYzgyY2NmY2Q2MGEwZTdkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL21hYy9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMjY2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkLCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIHJlcXVpcmVkIHRvIGJlIG1ldDoK
LSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9m
IEFwcGxlIEluYy4gbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCi0gKiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0g
KiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUgotICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKLSAqIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291
cmNlLmgiCi0KLSNpZiBVU0UoTElCV0VCUlRDKQotCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2lu
Y2x1ZGUgPHdlYnJ0Yy9hcGkvdmlkZW8vaTQyMF9idWZmZXIuaD4KLSNpbmNsdWRlIDx3ZWJydGMv
Y29tbW9uX3ZpZGVvL2xpYnl1di9pbmNsdWRlL3dlYnJ0Y19saWJ5dXYuaD4KLSNpbmNsdWRlIDx3
ZWJydGMvc2RrL29iamMvRnJhbWV3b3JrL0NsYXNzZXMvVmlkZW8vY29yZXZpZGVvX2ZyYW1lX2J1
ZmZlci5oPgotI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgotI2luY2x1ZGUgPHd0Zi9NYWlu
VGhyZWFkLmg+Ci0KLSNpbmNsdWRlICJDb3JlTWVkaWFTb2Z0TGluay5oIgotI2luY2x1ZGUgIkNv
cmVWaWRlb1NvZnRMaW5rLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUmVhbHRpbWVPdXRn
b2luZ1ZpZGVvU291cmNlOjpSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UoUmVmPE1lZGlhU3Ry
ZWFtVHJhY2tQcml2YXRlPiYmIHZpZGVvU291cmNlKQotICAgIDogbV92aWRlb1NvdXJjZShXVEZN
b3ZlKHZpZGVvU291cmNlKSkKLSAgICAsIG1fYmxhY2tGcmFtZVRpbWVyKCp0aGlzLCAmUmVhbHRp
bWVPdXRnb2luZ1ZpZGVvU291cmNlOjpzZW5kT25lQmxhY2tGcmFtZSkKLXsKLSAgICBtX3ZpZGVv
U291cmNlLT5hZGRPYnNlcnZlcigqdGhpcyk7Ci0gICAgaW5pdGlhbGl6ZUZyb21Tb3VyY2UoKTsK
LX0KLQotYm9vbCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnNldFNvdXJjZShSZWY8TWVk
aWFTdHJlYW1UcmFja1ByaXZhdGU+JiYgbmV3U291cmNlKQotewotICAgIGlmICghbV9pbml0aWFs
U2V0dGluZ3MpCi0gICAgICAgIG1faW5pdGlhbFNldHRpbmdzID0gbV92aWRlb1NvdXJjZS0+c291
cmNlKCkuc2V0dGluZ3MoKTsKLQotICAgIG1fdmlkZW9Tb3VyY2UtPnJlbW92ZU9ic2VydmVyKCp0
aGlzKTsKLSAgICBtX3ZpZGVvU291cmNlID0gV1RGTW92ZShuZXdTb3VyY2UpOwotICAgIG1fdmlk
ZW9Tb3VyY2UtPmFkZE9ic2VydmVyKCp0aGlzKTsKLQotICAgIGluaXRpYWxpemVGcm9tU291cmNl
KCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBSZWFsdGltZU91dGdvaW5nVmlkZW9T
b3VyY2U6OnN0b3AoKQotewotICAgIG1fdmlkZW9Tb3VyY2UtPnJlbW92ZU9ic2VydmVyKCp0aGlz
KTsKLSAgICBtX2JsYWNrRnJhbWVUaW1lci5zdG9wKCk7Ci0gICAgbV9pc1N0b3BwZWQgPSB0cnVl
OwotfQotCi12b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6dXBkYXRlQmxhY2tGcmFt
ZXNTZW5kaW5nKCkKLXsKLSAgICBpZiAoIW1fbXV0ZWQgJiYgbV9lbmFibGVkKSB7Ci0gICAgICAg
IGlmIChtX2JsYWNrRnJhbWVUaW1lci5pc0FjdGl2ZSgpKQotICAgICAgICAgICAgbV9ibGFja0Zy
YW1lVGltZXIuc3RvcCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc2VuZEJsYWNr
RnJhbWVzSWZOZWVkZWQoKTsKLX0KLQotdm9pZCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6
OnNvdXJjZU11dGVkQ2hhbmdlZCgpCi17Ci0gICAgQVNTRVJUKG1fbXV0ZWQgIT0gbV92aWRlb1Nv
dXJjZS0+bXV0ZWQoKSk7Ci0KLSAgICBtX211dGVkID0gbV92aWRlb1NvdXJjZS0+bXV0ZWQoKTsK
LQotICAgIHVwZGF0ZUJsYWNrRnJhbWVzU2VuZGluZygpOwotfQotCi12b2lkIFJlYWx0aW1lT3V0
Z29pbmdWaWRlb1NvdXJjZTo6c291cmNlRW5hYmxlZENoYW5nZWQoKQotewotICAgIEFTU0VSVCht
X2VuYWJsZWQgIT0gbV92aWRlb1NvdXJjZS0+ZW5hYmxlZCgpKTsKLQotICAgIG1fZW5hYmxlZCA9
IG1fdmlkZW9Tb3VyY2UtPmVuYWJsZWQoKTsKLQotICAgIHVwZGF0ZUJsYWNrRnJhbWVzU2VuZGlu
ZygpOwotfQotCi12b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6aW5pdGlhbGl6ZUZy
b21Tb3VyY2UoKQotewotICAgIGNvbnN0IGF1dG8mIHNldHRpbmdzID0gbV92aWRlb1NvdXJjZS0+
c291cmNlKCkuc2V0dGluZ3MoKTsKLSAgICBtX3dpZHRoID0gc2V0dGluZ3Mud2lkdGgoKTsKLSAg
ICBtX2hlaWdodCA9IHNldHRpbmdzLmhlaWdodCgpOwotCi0gICAgbV9tdXRlZCA9IG1fdmlkZW9T
b3VyY2UtPm11dGVkKCk7Ci0gICAgbV9lbmFibGVkID0gbV92aWRlb1NvdXJjZS0+ZW5hYmxlZCgp
OwotCi0gICAgdXBkYXRlQmxhY2tGcmFtZXNTZW5kaW5nKCk7Ci19Ci0KLWJvb2wgUmVhbHRpbWVP
dXRnb2luZ1ZpZGVvU291cmNlOjpHZXRTdGF0cyhTdGF0cyopCi17Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi12b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6QWRkT3JVcGRhdGVTaW5r
KHJ0Yzo6VmlkZW9TaW5rSW50ZXJmYWNlPHdlYnJ0Yzo6VmlkZW9GcmFtZT4qIHNpbmssIGNvbnN0
IHJ0Yzo6VmlkZW9TaW5rV2FudHMmIHNpbmtXYW50cykKLXsKLSAgICBBU1NFUlQoIXNpbmtXYW50
cy5ibGFja19mcmFtZXMpOwotCi0gICAgaWYgKHNpbmtXYW50cy5yb3RhdGlvbl9hcHBsaWVkKQot
ICAgICAgICBtX3Nob3VsZEFwcGx5Um90YXRpb24gPSB0cnVlOwotCi0gICAgaWYgKCFtX3Npbmtz
LmNvbnRhaW5zKHNpbmspKQotICAgICAgICBtX3NpbmtzLmFwcGVuZChzaW5rKTsKLQotICAgIGNh
bGxPbk1haW5UaHJlYWQoW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0oKSB7Ci0gICAg
ICAgIHByb3RlY3RlZFRoaXMtPnNlbmRCbGFja0ZyYW1lc0lmTmVlZGVkKCk7Ci0gICAgfSk7Ci19
Ci0KLXZvaWQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpSZW1vdmVTaW5rKHJ0Yzo6Vmlk
ZW9TaW5rSW50ZXJmYWNlPHdlYnJ0Yzo6VmlkZW9GcmFtZT4qIHNpbmspCi17Ci0gICAgbV9zaW5r
cy5yZW1vdmVGaXJzdChzaW5rKTsKLQotICAgIGlmIChtX3NpbmtzLnNpemUoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYo
KnRoaXMpXSgpIHsKLSAgICAgICAgaWYgKHByb3RlY3RlZFRoaXMtPm1fYmxhY2tGcmFtZVRpbWVy
LmlzQWN0aXZlKCkpCi0gICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5tX2JsYWNrRnJhbWVUaW1l
ci5zdG9wKCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNl
OjpzZW5kQmxhY2tGcmFtZXNJZk5lZWRlZCgpCi17Ci0gICAgaWYgKG1fYmxhY2tGcmFtZVRpbWVy
LmlzQWN0aXZlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9zaW5rcy5zaXplKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9tdXRlZCAmJiBtX2VuYWJsZWQpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmICghbV93aWR0aCB8fCAhbV9oZWlnaHQpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmICghbV9ibGFja0ZyYW1lKSB7Ci0gICAgICAgIGF1dG8gd2lkdGggPSBt
X3dpZHRoOwotICAgICAgICBhdXRvIGhlaWdodCA9IG1faGVpZ2h0OwotICAgICAgICBpZiAobV9z
aG91bGRBcHBseVJvdGF0aW9uICYmIChtX2N1cnJlbnRSb3RhdGlvbiA9PSB3ZWJydGM6OmtWaWRl
b1JvdGF0aW9uXzAgfHwgbV9jdXJyZW50Um90YXRpb24gPT0gd2VicnRjOjprVmlkZW9Sb3RhdGlv
bl85MCkpCi0gICAgICAgICAgICBzdGQ6OnN3YXAod2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIGF1
dG8gZnJhbWUgPSBtX2J1ZmZlclBvb2wuQ3JlYXRlQnVmZmVyKHdpZHRoLCBoZWlnaHQpOwotICAg
ICAgICBBU1NFUlQoZnJhbWUpOwotICAgICAgICBpZiAoIWZyYW1lKSB7Ci0gICAgICAgICAgICBS
RUxFQVNFX0xPRyhXZWJSVEMsICJSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnNlbmRCbGFj
a0ZyYW1lc0lmTmVlZGVkIHVuYWJsZSB0byBzZW5kIGJsYWNrIGZyYW1lcyIpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHdlYnJ0Yzo6STQyMEJ1ZmZlcjo6U2V0Qmxh
Y2soZnJhbWUuZ2V0KCkpOwotICAgICAgICBtX2JsYWNrRnJhbWUgPSBXVEZNb3ZlKGZyYW1lKTsK
LSAgICB9Ci0gICAgc2VuZE9uZUJsYWNrRnJhbWUoKTsKLSAgICBtX2JsYWNrRnJhbWVUaW1lci5z
dGFydFJlcGVhdGluZygxX3MpOwotfQotCi12b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJj
ZTo6c2VuZE9uZUJsYWNrRnJhbWUoKQotewotICAgIFJFTEVBU0VfTE9HKE1lZGlhU3RyZWFtLCAi
UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpzZW5kT25lQmxhY2tGcmFtZSIpOwotICAgIHNl
bmRGcmFtZShydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb0ZyYW1lQnVmZmVyPihtX2Js
YWNrRnJhbWUpKTsKLX0KLQotdm9pZCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnNlbmRG
cmFtZShydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb0ZyYW1lQnVmZmVyPiYmIGJ1ZmZl
cikKLXsKLSAgICBpbnQ2NF90IHRpbWVzdGFtcE1pY3JvU2Vjb25kcyA9IG1vbm90b25pY2FsbHlJ
bmNyZWFzaW5nVGltZU1TKCkgKiAxMDAwOwotICAgIHdlYnJ0Yzo6VmlkZW9GcmFtZSBmcmFtZShi
dWZmZXIsIG1fc2hvdWxkQXBwbHlSb3RhdGlvbiA/IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMCA6
IG1fY3VycmVudFJvdGF0aW9uLCB0aW1lc3RhbXBNaWNyb1NlY29uZHMpOwotICAgIGZvciAoYXV0
byogc2luayA6IG1fc2lua3MpCi0gICAgICAgIHNpbmstPk9uRnJhbWUoZnJhbWUpOwotfQotCi12
b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6dmlkZW9TYW1wbGVBdmFpbGFibGUoTWVk
aWFTYW1wbGUmIHNhbXBsZSkKLXsKLSAgICBpZiAoIW1fc2lua3Muc2l6ZSgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAobV9tdXRlZCB8fCAhbV9lbmFibGVkKQotICAgICAgICByZXR1cm47
Ci0KLSNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKLSAgICBpZiAoISgrK21fbnVtYmVyT2ZGcmFt
ZXMgJSAzMCkpCi0gICAgICAgIFJFTEVBU0VfTE9HKE1lZGlhU3RyZWFtLCAiUmVhbHRpbWVPdXRn
b2luZ1ZpZGVvU291cmNlOjpzZW5kRnJhbWUgJXp1IGZyYW1lIiwgbV9udW1iZXJPZkZyYW1lcyk7
Ci0jZW5kaWYKLQotICAgIHN3aXRjaCAoc2FtcGxlLnZpZGVvUm90YXRpb24oKSkgewotICAgIGNh
c2UgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246Ok5vbmU6Ci0gICAgICAgIG1fY3VycmVudFJv
dGF0aW9uID0gd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8wOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpVcHNpZGVEb3duOgotICAgICAgICBtX2N1
cnJlbnRSb3RhdGlvbiA9IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMTgwOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpSaWdodDoKLSAgICAgICAg
bV9jdXJyZW50Um90YXRpb24gPSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzkwOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpMZWZ0OgotICAgICAg
ICBtX2N1cnJlbnRSb3RhdGlvbiA9IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMjcwOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0KLSAgICBBU1NFUlQoc2FtcGxlLnBsYXRmb3JtU2FtcGxlKCkudHlw
ZSA9PSBQbGF0Zm9ybVNhbXBsZTo6Q01TYW1wbGVCdWZmZXJUeXBlKTsKLSAgICBhdXRvIHBpeGVs
QnVmZmVyID0gc3RhdGljX2Nhc3Q8Q1ZQaXhlbEJ1ZmZlclJlZj4oQ01TYW1wbGVCdWZmZXJHZXRJ
bWFnZUJ1ZmZlcihzYW1wbGUucGxhdGZvcm1TYW1wbGUoKS5zYW1wbGUuY21TYW1wbGVCdWZmZXIp
KTsKLSAgICBhdXRvIHBpeGVsRm9ybWF0VHlwZSA9IENWUGl4ZWxCdWZmZXJHZXRQaXhlbEZvcm1h
dFR5cGUocGl4ZWxCdWZmZXIpOwotCi0gICAgaWYgKHBpeGVsRm9ybWF0VHlwZSA9PSBrQ1ZQaXhl
bEZvcm1hdFR5cGVfNDIwWXBDYkNyOFBsYW5hciB8fCBwaXhlbEZvcm1hdFR5cGUgPT0ga0NWUGl4
ZWxGb3JtYXRUeXBlXzQyMFlwQ2JDcjhCaVBsYW5hckZ1bGxSYW5nZSkgewotICAgICAgICBydGM6
OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb0ZyYW1lQnVmZmVyPiBidWZmZXIgPSBuZXcgcnRj
OjpSZWZDb3VudGVkT2JqZWN0PHdlYnJ0Yzo6Q29yZVZpZGVvRnJhbWVCdWZmZXI+KHBpeGVsQnVm
ZmVyKTsKLSAgICAgICAgaWYgKG1fc2hvdWxkQXBwbHlSb3RhdGlvbiAmJiBtX2N1cnJlbnRSb3Rh
dGlvbiAhPSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzApIHsKLSAgICAgICAgICAgIC8vIEZJWE1F
OiBXZSBzaG91bGQgbWFrZSBBVlZpZGVvQ2FwdHVyZVNvdXJjZSBoYW5kbGUgdGhlIHJvdGF0aW9u
IHdoZW5ldmVyIHBvc3NpYmxlLgotICAgICAgICAgICAgLy8gVGhpcyBpbXBsZW1lbnRhdGlvbiBp
cyBpbmVmZmljaWVudCwgd2Ugc2hvdWxkIHJvdGF0ZSBvbiB0aGUgQ01TYW1wbGVCdWZmZXIgZGly
ZWN0bHkgaW5zdGVhZCBvZiBkb2luZyB0aGlzIGRvdWJsZSBhbGxvY2F0aW9uLgotICAgICAgICAg
ICAgYXV0byByb3RhdGVkQnVmZmVyID0gYnVmZmVyLT5Ub0k0MjAoKTsKLSAgICAgICAgICAgIEFT
U0VSVChyb3RhdGVkQnVmZmVyKTsKLSAgICAgICAgICAgIGJ1ZmZlciA9IHdlYnJ0Yzo6STQyMEJ1
ZmZlcjo6Um90YXRlKCpyb3RhdGVkQnVmZmVyLCBtX2N1cnJlbnRSb3RhdGlvbik7Ci0gICAgICAg
IH0KLSAgICAgICAgc2VuZEZyYW1lKFdURk1vdmUoYnVmZmVyKSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBDVlBpeGVsQnVmZmVyTG9ja0Jhc2VBZGRyZXNzKHBpeGVsQnVmZmVyLCAw
KTsKLSAgICBhdXRvKiBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihDVlBpeGVs
QnVmZmVyR2V0QmFzZUFkZHJlc3NPZlBsYW5lKHBpeGVsQnVmZmVyLCAwKSk7Ci0KLSAgICBBU1NF
UlQobV93aWR0aCk7Ci0gICAgQVNTRVJUKG1faGVpZ2h0KTsKLQotICAgIGF1dG8gbmV3QnVmZmVy
ID0gbV9idWZmZXJQb29sLkNyZWF0ZUJ1ZmZlcihtX3dpZHRoLCBtX2hlaWdodCk7Ci0gICAgQVNT
RVJUKG5ld0J1ZmZlcik7Ci0gICAgaWYgKCFuZXdCdWZmZXIpIHsKLSAgICAgICAgUkVMRUFTRV9M
T0coV2ViUlRDLCAiUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjp2aWRlb1NhbXBsZUF2YWls
YWJsZSB1bmFibGUgdG8gYWxsb2NhdGUgYnVmZmVyIGZvciBjb252ZXJzaW9uIHRvIFlVViIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChwaXhlbEZvcm1hdFR5cGUgPT0ga0NWUGl4
ZWxGb3JtYXRUeXBlXzMyQkdSQSkKLSAgICAgICAgd2VicnRjOjpDb252ZXJ0VG9JNDIwKHdlYnJ0
Yzo6VmlkZW9UeXBlOjprQVJHQiwgc291cmNlLCAwLCAwLCBtX3dpZHRoLCBtX2hlaWdodCwgMCwg
d2VicnRjOjprVmlkZW9Sb3RhdGlvbl8wLCBuZXdCdWZmZXIpOwotICAgIGVsc2UgewotICAgICAg
ICBBU1NFUlQocGl4ZWxGb3JtYXRUeXBlID09IGtDVlBpeGVsRm9ybWF0VHlwZV8zMkFSR0IpOwot
ICAgICAgICB3ZWJydGM6OkNvbnZlcnRUb0k0MjAod2VicnRjOjpWaWRlb1R5cGU6OmtCR1JBLCBz
b3VyY2UsIDAsIDAsIG1fd2lkdGgsIG1faGVpZ2h0LCAwLCB3ZWJydGM6OmtWaWRlb1JvdGF0aW9u
XzAsIG5ld0J1ZmZlcik7Ci0gICAgfQotICAgIENWUGl4ZWxCdWZmZXJVbmxvY2tCYXNlQWRkcmVz
cyhwaXhlbEJ1ZmZlciwgMCk7Ci0gICAgaWYgKG1fc2hvdWxkQXBwbHlSb3RhdGlvbiAmJiBtX2N1
cnJlbnRSb3RhdGlvbiAhPSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzApCi0gICAgICAgIG5ld0J1
ZmZlciA9IHdlYnJ0Yzo6STQyMEJ1ZmZlcjo6Um90YXRlKCpuZXdCdWZmZXIsIG1fY3VycmVudFJv
dGF0aW9uKTsKLSAgICBzZW5kRnJhbWUoV1RGTW92ZShuZXdCdWZmZXIpKTsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKExJQldFQlJUQykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU91dGdvaW5n
VmlkZW9Tb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9S
ZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMjdlNzhiNTE2NWQwNTY5NWZlMWE0NTg0MDg1OWJiMTFjMTJlNDg4Ni4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmgKKysrIC9kZXYv
bnVsbApAQCAtMSwxMTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJ
bmMuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQsIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgcmVxdWlyZWQgdG8g
YmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhl
IG5hbWUgb2YgQXBwbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAot
ICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKLSAqIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0gKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgotICogQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgVVNFKExJQldFQlJUQykKLQotI2luY2x1ZGUg
IkxpYldlYlJUQ01hY3Jvcy5oIgotI2luY2x1ZGUgIk1lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmgi
Ci0jaW5jbHVkZSA8VGltZXIuaD4KLSNpbmNsdWRlIDx3ZWJydGMvYXBpL21lZGlhc3RyZWFtaW50
ZXJmYWNlLmg+Ci0jaW5jbHVkZSA8d2VicnRjL2Jhc2Uvb3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3
ZWJydGMvY29tbW9uX3ZpZGVvL2luY2x1ZGUvaTQyMF9idWZmZXJfcG9vbC5oPgotI2luY2x1ZGUg
PHdlYnJ0Yy9tZWRpYS9iYXNlL3ZpZGVvc2lua2ludGVyZmFjZS5oPgotI2luY2x1ZGUgPHd0Zi9P
cHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZSBmaW5h
bCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3Vy
Y2U+LCBwdWJsaWMgd2VicnRjOjpWaWRlb1RyYWNrU291cmNlSW50ZXJmYWNlLCBwcml2YXRlIE1l
ZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpPYnNlcnZlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJl
ZjxSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U+IGNyZWF0ZShSZWY8TWVkaWFTdHJlYW1UcmFj
a1ByaXZhdGU+JiYgdmlkZW9Tb3VyY2UpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVhbHRpbWVP
dXRnb2luZ1ZpZGVvU291cmNlKFdURk1vdmUodmlkZW9Tb3VyY2UpKSk7IH0KLSAgICB+UmVhbHRp
bWVPdXRnb2luZ1ZpZGVvU291cmNlKCkgeyBzdG9wKCk7IH0KLQotICAgIHZvaWQgc3RvcCgpOwot
ICAgIGJvb2wgc2V0U291cmNlKFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4mJik7Ci0gICAg
TWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmlkZW9T
b3VyY2UuZ2V0KCk7IH0KLQotICAgIGludCBBZGRSZWYoKSBjb25zdCBmaW5hbCB7IHJlZigpOyBy
ZXR1cm4gcmVmQ291bnQoKTsgfQotICAgIGludCBSZWxlYXNlKCkgY29uc3QgZmluYWwgeyBkZXJl
ZigpOyByZXR1cm4gcmVmQ291bnQoKTsgfQotCi0gICAgdm9pZCBzZXRBcHBseVJvdGF0aW9uKGJv
b2wgc2hvdWxkQXBwbHlSb3RhdGlvbikgeyBtX3Nob3VsZEFwcGx5Um90YXRpb24gPSBzaG91bGRB
cHBseVJvdGF0aW9uOyB9Ci0KLXByaXZhdGU6Ci0gICAgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291
cmNlKFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4mJik7Ci0KLSAgICB2b2lkIHNlbmRGcmFt
ZShydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb0ZyYW1lQnVmZmVyPiYmKTsKLSAgICB2
b2lkIHNlbmRCbGFja0ZyYW1lc0lmTmVlZGVkKCk7Ci0gICAgdm9pZCBzZW5kT25lQmxhY2tGcmFt
ZSgpOwotICAgIHZvaWQgaW5pdGlhbGl6ZUZyb21Tb3VyY2UoKTsKLSAgICB2b2lkIHVwZGF0ZUJs
YWNrRnJhbWVzU2VuZGluZygpOwotCi0gICAgLy8gTm90aWZpZXIgQVBJCi0gICAgdm9pZCBSZWdp
c3Rlck9ic2VydmVyKHdlYnJ0Yzo6T2JzZXJ2ZXJJbnRlcmZhY2UqKSBmaW5hbCB7IH0KLSAgICB2
b2lkIFVucmVnaXN0ZXJPYnNlcnZlcih3ZWJydGM6Ok9ic2VydmVySW50ZXJmYWNlKikgZmluYWwg
eyB9Ci0KLSAgICAvLyBWaWRlb1RyYWNrU291cmNlSW50ZXJmYWNlIEFQSQotICAgIGJvb2wgaXNf
c2NyZWVuY2FzdCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgcnRjOjpPcHRp
b25hbDxib29sPiBuZWVkc19kZW5vaXNpbmcoKSBjb25zdCBmaW5hbCB7IHJldHVybiBydGM6Ok9w
dGlvbmFsPGJvb2w+KCk7IH0KLSAgICBib29sIEdldFN0YXRzKFN0YXRzKikgZmluYWw7Ci0KLSAg
ICAvLyBNZWRpYVNvdXJjZUludGVyZmFjZSBBUEkKLSAgICBTb3VyY2VTdGF0ZSBzdGF0ZSgpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIFNvdXJjZVN0YXRlKCk7IH0KLSAgICBib29sIHJlbW90ZSgpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KLQotICAgIC8vIHJ0Yzo6VmlkZW9Tb3VyY2VJbnRl
cmZhY2U8d2VicnRjOjpWaWRlb0ZyYW1lPiBBUEkKLSAgICB2b2lkIEFkZE9yVXBkYXRlU2luayhy
dGM6OlZpZGVvU2lua0ludGVyZmFjZTx3ZWJydGM6OlZpZGVvRnJhbWU+KiwgY29uc3QgcnRjOjpW
aWRlb1NpbmtXYW50cyYpIGZpbmFsOwotICAgIHZvaWQgUmVtb3ZlU2luayhydGM6OlZpZGVvU2lu
a0ludGVyZmFjZTx3ZWJydGM6OlZpZGVvRnJhbWU+KikgZmluYWw7Ci0KLSAgICB2b2lkIHNvdXJj
ZU11dGVkQ2hhbmdlZCgpOwotICAgIHZvaWQgc291cmNlRW5hYmxlZENoYW5nZWQoKTsKLSAgICB2
b2lkIHZpZGVvU2FtcGxlQXZhaWxhYmxlKE1lZGlhU2FtcGxlJik7Ci0KLSAgICAvLyBNZWRpYVN0
cmVhbVRyYWNrUHJpdmF0ZTo6T2JzZXJ2ZXIgQVBJCi0gICAgdm9pZCB0cmFja011dGVkQ2hhbmdl
ZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYpIGZpbmFsIHsgc291cmNlTXV0ZWRDaGFuZ2VkKCk7
IH0KLSAgICB2b2lkIHRyYWNrRW5hYmxlZENoYW5nZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUm
KSBmaW5hbCB7IHNvdXJjZUVuYWJsZWRDaGFuZ2VkKCk7IH0KLSAgICB2b2lkIHRyYWNrU2V0dGlu
Z3NDaGFuZ2VkKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJikgZmluYWwgeyBpbml0aWFsaXplRnJv
bVNvdXJjZSgpOyB9Ci0gICAgdm9pZCBzYW1wbGVCdWZmZXJVcGRhdGVkKE1lZGlhU3RyZWFtVHJh
Y2tQcml2YXRlJiwgTWVkaWFTYW1wbGUmIHNhbXBsZSkgZmluYWwgeyB2aWRlb1NhbXBsZUF2YWls
YWJsZShzYW1wbGUpOyB9Ci0gICAgdm9pZCB0cmFja0VuZGVkKE1lZGlhU3RyZWFtVHJhY2tQcml2
YXRlJikgZmluYWwgeyB9Ci0KLSAgICBWZWN0b3I8cnRjOjpWaWRlb1NpbmtJbnRlcmZhY2U8d2Vi
cnRjOjpWaWRlb0ZyYW1lPio+IG1fc2lua3M7Ci0gICAgd2VicnRjOjpJNDIwQnVmZmVyUG9vbCBt
X2J1ZmZlclBvb2w7Ci0gICAgUmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiBtX3ZpZGVvU291
cmNlOwotICAgIGJvb2wgbV9lbmFibGVkIHsgdHJ1ZSB9OwotICAgIGJvb2wgbV9tdXRlZCB7IGZh
bHNlIH07Ci0gICAgc3RkOjpvcHRpb25hbDxSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M+IG1f
aW5pdGlhbFNldHRpbmdzOwotICAgIHdlYnJ0Yzo6VmlkZW9Sb3RhdGlvbiBtX2N1cnJlbnRSb3Rh
dGlvbiB7IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMCB9OwotICAgIHVpbnQzMl90IG1fd2lkdGgg
eyAwIH07Ci0gICAgdWludDMyX3QgbV9oZWlnaHQgeyAwIH07Ci0gICAgYm9vbCBtX2lzU3RvcHBl
ZCB7IGZhbHNlIH07Ci0gICAgVGltZXIgbV9ibGFja0ZyYW1lVGltZXI7Ci0gICAgcnRjOjpzY29w
ZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9GcmFtZUJ1ZmZlcj4gbV9ibGFja0ZyYW1lOwotICAgIGJv
b2wgbV9zaG91bGRBcHBseVJvdGF0aW9uIHsgZmFsc2UgfTsKLSNpZiAhUkVMRUFTRV9MT0dfRElT
QUJMRUQKLSAgICBzaXplX3QgbV9udW1iZXJPZkZyYW1lcyB7IDAgfTsKLSNlbmRpZgotfTsKLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKExJQldFQlJUQykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU91
dGdvaW5nVmlkZW9Tb3VyY2VNYWMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZU1hYy5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
N2VjZjU1OTU0MzkzYzNiZDg3N2ZjYzdlZDQ5OTNmZDBhOTUxZTYyNQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU91dGdv
aW5nVmlkZW9Tb3VyY2VNYWMuY3BwCkBAIC0wLDAgKzEsMTIxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE3IEFwcGxlIEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSByZXF1aXJlZCB0byBiZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YKKyAq
ICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZU1hYy5oIgorCisjaWYgVVNFKExJQldFQlJUQykK
KworI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlIDx3ZWJydGMvYXBpL3ZpZGVvL2k0MjBf
YnVmZmVyLmg+CisjaW5jbHVkZSA8d2VicnRjL2NvbW1vbl92aWRlby9saWJ5dXYvaW5jbHVkZS93
ZWJydGNfbGlieXV2Lmg+CisjaW5jbHVkZSA8d2VicnRjL3Nkay9vYmpjL0ZyYW1ld29yay9DbGFz
c2VzL1ZpZGVvL2NvcmV2aWRlb19mcmFtZV9idWZmZXIuaD4KKworI2luY2x1ZGUgIkNvcmVNZWRp
YVNvZnRMaW5rLmgiCisjaW5jbHVkZSAiQ29yZVZpZGVvU29mdExpbmsuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VNYWM6OlJlYWx0aW1lT3V0
Z29pbmdWaWRlb1NvdXJjZU1hYyhSZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYgdmlkZW9T
b3VyY2UpCisgICAgOiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UoV1RGTW92ZSh2aWRlb1Nv
dXJjZSkpCit7Cit9CisKK3ZvaWQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTWFjOjp2aWRl
b1NhbXBsZUF2YWlsYWJsZShNZWRpYVNhbXBsZSYgc2FtcGxlKQoreworICAgIGlmICghbV9zaW5r
cy5zaXplKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX211dGVkIHx8ICFtX2VuYWJs
ZWQpCisgICAgICAgIHJldHVybjsKKworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgIGlm
ICghKCsrbV9udW1iZXJPZkZyYW1lcyAlIDMwKSkKKyAgICAgICAgUkVMRUFTRV9MT0coTWVkaWFT
dHJlYW0sICJSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VNYWM6OnNlbmRGcmFtZSAlenUgZnJh
bWUiLCBtX251bWJlck9mRnJhbWVzKTsKKyNlbmRpZgorCisgICAgc3dpdGNoIChzYW1wbGUudmlk
ZW9Sb3RhdGlvbigpKSB7CisgICAgY2FzZSBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6Tm9u
ZToKKyAgICAgICAgbV9jdXJyZW50Um90YXRpb24gPSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzA7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246OlVw
c2lkZURvd246CisgICAgICAgIG1fY3VycmVudFJvdGF0aW9uID0gd2VicnRjOjprVmlkZW9Sb3Rh
dGlvbl8xODA7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTWVkaWFTYW1wbGU6OlZpZGVvUm90
YXRpb246OlJpZ2h0OgorICAgICAgICBtX2N1cnJlbnRSb3RhdGlvbiA9IHdlYnJ0Yzo6a1ZpZGVv
Um90YXRpb25fOTA7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTWVkaWFTYW1wbGU6OlZpZGVv
Um90YXRpb246OkxlZnQ6CisgICAgICAgIG1fY3VycmVudFJvdGF0aW9uID0gd2VicnRjOjprVmlk
ZW9Sb3RhdGlvbl8yNzA7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIEFTU0VSVChzYW1w
bGUucGxhdGZvcm1TYW1wbGUoKS50eXBlID09IFBsYXRmb3JtU2FtcGxlOjpDTVNhbXBsZUJ1ZmZl
clR5cGUpOworICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBzdGF0aWNfY2FzdDxDVlBpeGVsQnVmZmVy
UmVmPihDTVNhbXBsZUJ1ZmZlckdldEltYWdlQnVmZmVyKHNhbXBsZS5wbGF0Zm9ybVNhbXBsZSgp
LnNhbXBsZS5jbVNhbXBsZUJ1ZmZlcikpOworICAgIGF1dG8gcGl4ZWxGb3JtYXRUeXBlID0gQ1ZQ
aXhlbEJ1ZmZlckdldFBpeGVsRm9ybWF0VHlwZShwaXhlbEJ1ZmZlcik7CisKKyAgICBpZiAocGl4
ZWxGb3JtYXRUeXBlID09IGtDVlBpeGVsRm9ybWF0VHlwZV80MjBZcENiQ3I4UGxhbmFyIHx8IHBp
eGVsRm9ybWF0VHlwZSA9PSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyOEJpUGxhbmFyRnVs
bFJhbmdlKSB7CisgICAgICAgIHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvRnJhbWVC
dWZmZXI+IGJ1ZmZlciA9IG5ldyBydGM6OlJlZkNvdW50ZWRPYmplY3Q8d2VicnRjOjpDb3JlVmlk
ZW9GcmFtZUJ1ZmZlcj4ocGl4ZWxCdWZmZXIpOworICAgICAgICBpZiAobV9zaG91bGRBcHBseVJv
dGF0aW9uICYmIG1fY3VycmVudFJvdGF0aW9uICE9IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMCkg
eworICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBtYWtlIEFWVmlkZW9DYXB0dXJlU291
cmNlIGhhbmRsZSB0aGUgcm90YXRpb24gd2hlbmV2ZXIgcG9zc2libGUuCisgICAgICAgICAgICAv
LyBUaGlzIGltcGxlbWVudGF0aW9uIGlzIGluZWZmaWNpZW50LCB3ZSBzaG91bGQgcm90YXRlIG9u
IHRoZSBDTVNhbXBsZUJ1ZmZlciBkaXJlY3RseSBpbnN0ZWFkIG9mIGRvaW5nIHRoaXMgZG91Ymxl
IGFsbG9jYXRpb24uCisgICAgICAgICAgICBhdXRvIHJvdGF0ZWRCdWZmZXIgPSBidWZmZXItPlRv
STQyMCgpOworICAgICAgICAgICAgQVNTRVJUKHJvdGF0ZWRCdWZmZXIpOworICAgICAgICAgICAg
YnVmZmVyID0gd2VicnRjOjpJNDIwQnVmZmVyOjpSb3RhdGUoKnJvdGF0ZWRCdWZmZXIsIG1fY3Vy
cmVudFJvdGF0aW9uKTsKKyAgICAgICAgfQorICAgICAgICBzZW5kRnJhbWUoV1RGTW92ZShidWZm
ZXIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIENWUGl4ZWxCdWZmZXJMb2NrQmFz
ZUFkZHJlc3MocGl4ZWxCdWZmZXIsIDApOworICAgIGF1dG8qIHNvdXJjZSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDhfdCo+KENWUGl4ZWxCdWZmZXJHZXRCYXNlQWRkcmVzc09mUGxhbmUocGl4ZWxC
dWZmZXIsIDApKTsKKworICAgIEFTU0VSVChtX3dpZHRoKTsKKyAgICBBU1NFUlQobV9oZWlnaHQp
OworCisgICAgYXV0byBuZXdCdWZmZXIgPSBtX2J1ZmZlclBvb2wuQ3JlYXRlQnVmZmVyKG1fd2lk
dGgsIG1faGVpZ2h0KTsKKyAgICBBU1NFUlQobmV3QnVmZmVyKTsKKyAgICBpZiAoIW5ld0J1ZmZl
cikgeworICAgICAgICBSRUxFQVNFX0xPRyhXZWJSVEMsICJSZWFsdGltZU91dGdvaW5nVmlkZW9T
b3VyY2VNYWM6OnZpZGVvU2FtcGxlQXZhaWxhYmxlIHVuYWJsZSB0byBhbGxvY2F0ZSBidWZmZXIg
Zm9yIGNvbnZlcnNpb24gdG8gWVVWIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYg
KHBpeGVsRm9ybWF0VHlwZSA9PSBrQ1ZQaXhlbEZvcm1hdFR5cGVfMzJCR1JBKQorICAgICAgICB3
ZWJydGM6OkNvbnZlcnRUb0k0MjAod2VicnRjOjpWaWRlb1R5cGU6OmtBUkdCLCBzb3VyY2UsIDAs
IDAsIG1fd2lkdGgsIG1faGVpZ2h0LCAwLCB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzAsIG5ld0J1
ZmZlcik7CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVChwaXhlbEZvcm1hdFR5cGUgPT0ga0NW
UGl4ZWxGb3JtYXRUeXBlXzMyQVJHQik7CisgICAgICAgIHdlYnJ0Yzo6Q29udmVydFRvSTQyMCh3
ZWJydGM6OlZpZGVvVHlwZTo6a0JHUkEsIHNvdXJjZSwgMCwgMCwgbV93aWR0aCwgbV9oZWlnaHQs
IDAsIHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMCwgbmV3QnVmZmVyKTsKKyAgICB9CisgICAgQ1ZQ
aXhlbEJ1ZmZlclVubG9ja0Jhc2VBZGRyZXNzKHBpeGVsQnVmZmVyLCAwKTsKKyAgICBpZiAobV9z
aG91bGRBcHBseVJvdGF0aW9uICYmIG1fY3VycmVudFJvdGF0aW9uICE9IHdlYnJ0Yzo6a1ZpZGVv
Um90YXRpb25fMCkKKyAgICAgICAgbmV3QnVmZmVyID0gd2VicnRjOjpJNDIwQnVmZmVyOjpSb3Rh
dGUoKm5ld0J1ZmZlciwgbV9jdXJyZW50Um90YXRpb24pOworICAgIHNlbmRGcmFtZShXVEZNb3Zl
KG5ld0J1ZmZlcikpOworfQorCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IFVTRShMSUJXRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTWFjLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNl
TWFjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZTk4MmFhZjQ0MmFkMzJhNjM2NGVlNzk5Y2IzY2FhMWUxNTYzMzIx
MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L21hYy9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VNYWMuaApAQCAtMCwwICsxLDU1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSByZXF1aXJlZCB0byBiZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpZiBVU0UoTElCV0VCUlRDKQorCisjaW5jbHVkZSAiUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291
cmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVhbHRpbWVPdXRnb2luZ1Zp
ZGVvU291cmNlTWFjIGZpbmFsIDogcHVibGljIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZSB7
CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VNYWM+
IGNyZWF0ZShSZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYgdmlkZW9Tb3VyY2UpIHsgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTWFjKFdURk1vdmUo
dmlkZW9Tb3VyY2UpKSk7IH0KKyAgICB+UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTWFjKCkg
eyB9CisKK3Byb3RlY3RlZDoKKyAgICBleHBsaWNpdCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3Vy
Y2VNYWMoUmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiYmKTsKKworcHJpdmF0ZToKKyAgICB2
b2lkIHZpZGVvU2FtcGxlQXZhaWxhYmxlKE1lZGlhU2FtcGxlJikgZmluYWw7CisKKyNpZiAhUkVM
RUFTRV9MT0dfRElTQUJMRUQKKyAgICBzaXplX3QgbV9udW1iZXJPZkZyYW1lcyB7IDAgfTsKKyNl
bmRpZgorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKExJQldF
QlJUQykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322685</attachid>
            <date>2017-10-04 10:00:03 -0700</date>
            <delta_ts>2017-10-05 02:47:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177869-20171004190001.patch</filename>
            <type>text/plain</type>
            <size>80727</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIyODUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWFmYmJmMjFlNWIwYzcw
NjZiMzJmMjlmOGY4ZDNlYzExOTc4MTA4Ni4uNTU4ZjI2YjU0YjIwYzFiNmU0N2E5M2NkN2RiZGU0
MmNiZWMzZGM5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDE3LTEwLTA0ICBBbGVq
YW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisgICAgICAgIE1ha2UgUmVhbHRp
bWVJbmNvbWluZ1ZpZGVvU291cmNlcyBhbmQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlcyBw
b3J0IGFnbm9zdGljCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzc4NjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBSZWZhY3RvciB0aGUgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlIGFuZCBSZWFsdGlt
ZU91dGdvaW5nVmlkZW9Tb3VyY2UgY2xhc3NlcywKKyAgICAgICAgbW92ZSB0aGUgbWFjIHNwZWNp
ZmljIGNvZGUgdG8gYSBkaWZmZXJlbnQgY2xhc3MuIFRoaXMgd2F5IHdlIGNhbiB1c2UgdGhlbSBm
cm9tCisgICAgICAgIG90aGVyIHBvcnRzLgorCisgICAgICAgIE5vIG5ldyBmdW5jdGlvbmFsaXR5
LCBqdXN0IGEgcmVmYWN0b3IuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAg
KiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0v
bWVkaWFzdHJlYW0vUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6OlJlYWx0aW1lSW5jb21p
bmdWaWRlb1NvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9T
b3VyY2U6OnN0YXJ0UHJvZHVjaW5nRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUlu
Y29taW5nVmlkZW9Tb3VyY2U6OnNldFNvdXJjZVRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
YWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6c3RvcFByb2R1Y2luZ0RhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlOjpjYXBhYmlsaXRpZXMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlOjpzZXR0aW5n
cyBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVJbmNvbWlu
Z1ZpZGVvU291cmNlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL21hYy9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuaC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuY3BwOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lT3V0
Z29pbmdWaWRlb1NvdXJjZS5jcHAuCisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5n
VmlkZW9Tb3VyY2U6OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVh
bHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmguCisg
ICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnZpZGVvU2FtcGxl
QXZhaWxhYmxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVJ
bmNvbWluZ1ZpZGVvU291cmNlTWFjLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuY3BwLgor
ICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTWFjOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTWFjOjpSZWFs
dGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWMpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJ
bmNvbWluZ1ZpZGVvU291cmNlTWFjOjpwaXhlbEJ1ZmZlckZyb21WaWRlb0ZyYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1hYzo6T25GcmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWM6OnByb2Nlc3NO
ZXdTYW1wbGUpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUlu
Y29taW5nVmlkZW9Tb3VyY2VNYWMuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuaC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNl
TWFjLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nVmlkZW9T
b3VyY2VNYWM6OlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZU1hYyk6CisgICAgICAgIChXZWJD
b3JlOjpSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VNYWM6OnZpZGVvU2FtcGxlQXZhaWxhYmxl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1Zp
ZGVvU291cmNlTWFjLmg6IEFkZGVkLgorCiAyMDE3LTEwLTA0ICBNaWd1ZWwgR29tZXogIDxtYWdv
bWV6QGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZDogZml4IEdUSyBkZWJ1ZyBidWls
ZCBhZnRlciByMjIyODQxLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50
eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCAxY2MxNmM3ZDFmYWJkZWY2
NTc4YjQyMjExMWRiYjU2NWUzOTA0ODlkLi44Y2I1YzQ0MGUwYTNlZmQ5ZDU4N2RhYjkwN2RlYWJk
NzdmYmNjMzFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMjU1MSw5ICsyNTUxLDExIEBAIHNl
dChXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlh
U291cmNlU3VwcG9ydGVkQ29uc3RyYWludHMuY3BwCiAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0v
UlRDSWNlQ2FuZGlkYXRlRGVzY3JpcHRvci5jcHAKICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9S
VENTZXNzaW9uRGVzY3JpcHRpb25EZXNjcmlwdG9yLmNwcAorICAgIHBsYXRmb3JtL21lZGlhc3Ry
ZWFtL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5jcHAKICAgICBwbGF0Zm9ybS9tZWRpYXN0
cmVhbS9SZWFsdGltZU1lZGlhU291cmNlLmNwcAogICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL1Jl
YWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuY3BwCiAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVh
bHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzLmNwcAorICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL1Jl
YWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5jcHAKICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9T
RFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5jcHAKIAogICAgIHBsYXRmb3JtL21lZGlhc3RyZWFt
L2xpYndlYnJ0Yy9MaWJXZWJSVENQcm92aWRlci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBiMGU3NTQ5NzBiMDQwYjNjNTUw
YjA3MTcwNTA5NjFiZGRkODc2ZjI1Li40ZjgwYjY1NGY5OGUyZTk1YTBlNjkyOTU4NDJmMTFhM2U2
N2M5ZWZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCkBAIC0yNzU0LDcgKzI3NTQsOSBAQAogCQk1Q0Q5RjU2NzFBQTBGNzQyMDBEQTQ1
RkYgLyogREZBQnl0ZWNvZGVDb21waWxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNUMzOTMwNUYxQUEwRjZBOTAwMjlDODE2IC8qIERGQUJ5dGVjb2Rl
Q29tcGlsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk1Q0Q5RjU2ODFBQTBGNzQ2MDBEQTQ1RkYgLyogREZBQnl0ZWNvZGVJbnRlcnByZXRlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUMzOTMwNjEx
QUEwRjZBOTAwMjlDODE2IC8qIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1Q0REODMzRDFFNDMyNEQ5MDA2
MjFFOTIgLyogUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDREQ4MzNCMUU0MzI0QkIwMDYyMUU5MiAv
KiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuY3BwICovOyB9OworCQk1Q0REODMzRDFFNDMy
NEQ5MDA2MjFFOTMgLyogUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTWFjLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDREQ4MzNCMUU0MzI0QkIw
MDYyMUU5MyAvKiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VNYWMuY3BwICovOyB9OwogCQk1
Q0REODMzRTFFNDMyNERDMDA2MjFFOTIgLyogUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDREQ4MzM5
MUU0MzI0QkIwMDYyMUU5MiAvKiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuY3BwICovOyB9
OworCQk1Q0REODMzRTFFNDMyNERDMDA2MjFFOTMgLyogUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291
cmNlTWFjLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDVDREQ4MzM5MUU0MzI0QkIwMDYyMUU5MyAvKiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VN
YWMuY3BwICovOyB9OwogCQk1Q0REODM2NDFFNDMyNUEwMDA2MjFFOTIgLyogTGliV2ViUlRDRGF0
YUNoYW5uZWxIYW5kbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDVDREQ4MzNGMUU0MzI1M0QwMDYyMUU5MiAvKiBMaWJXZWJSVENEYXRhQ2hhbm5l
bEhhbmRsZXIuY3BwICovOyB9OwogCQk1Q0RGQTZDODFBQTRGMkRBMDBFQTg3NDYgLyogQ29udGVu
dEV4dGVuc2lvbkFjdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDVDREZBNkM3MUFBNEYyREEwMEVBODc0NiAvKiBDb250ZW50RXh0ZW5zaW9uQWN0
aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTVDRTVEOUFCMURCODlBMDMwMENFN0E4RCAvKiBKU1RleHREZWNvZGVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDRTVEOUE3MURCODk5RkMwMENF
N0E4RCAvKiBKU1RleHREZWNvZGVyLmNwcCAqLzsgfTsKQEAgLTk2MDYsNiArOTYwOCw4IEBACiAJ
CTQxQUJFNjc5MUQwNTgwRDUwMDZEODYyRCAvKiBDcm9zc09yaWdpblByZWZsaWdodENoZWNrZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ3Jvc3NPcmlnaW5QcmVm
bGlnaHRDaGVja2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFBQkU2N0Ex
RDA1ODBENTAwNkQ4NjJEIC8qIENyb3NzT3JpZ2luUHJlZmxpZ2h0Q2hlY2tlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDcm9zc09yaWdpblByZWZsaWdodENoZWNrZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFBRDc1MzkxQ0VGNkJDRTAwQTMxNDg2IC8q
IEZldGNoT3B0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGZXRjaE9w
dGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDFCMjhCMjIxRjg1MUYzMjAw
RkI1MkFDIC8qIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1hYy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDFCMjhCMjExRjg1MUYzMjAwRkI1MkFDIC8qIFJl
YWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZU1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VNYWMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNDFCMkE2MjUxRUYxQkY2MDAwMkI5RDdBIC8qIFdlYkF1ZGlvU291cmNl
UHJvdmlkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQXVkaW9Tb3VyY2VQcm92aWRlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUI0NTlEQTFGNENBREI5MDAwMEY2RkQgLyogUmVh
ZGFibGVTdHJlYW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVhZGFibGVT
dHJlYW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFCNDU5RUQxRjU1RUJDNzAw
MDBGNkZEIC8qIFJlYWRhYmxlU3RyZWFtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFJlYWRhYmxlU3RyZWFtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTEwNzA0LDggKzEwNzA4LDEwIEBACiAJCTVDQkM4REFBMUFBQTMwMjIwMEUxQzgwMyAvKiBN
ZWRpYUFjY2Vzc2liaWxpdHlTb2Z0TGluay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBNZWRpYUFjY2Vzc2liaWxpdHlTb2Z0TGluay5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTVDQkM4REFCMUFBQTMwMjIwMEUxQzgwMyAvKiBNZWRpYUFjY2Vzc2li
aWxpdHlTb2Z0TGluay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYUFj
Y2Vzc2liaWxpdHlTb2Z0TGluay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Q0RE
ODMzOTFFNDMyNEJCMDA2MjFFOTIgLyogUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlYWx0aW1lSW5jb21pbmdWaWRl
b1NvdXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDREQ4MzM5MUU0MzI0
QkIwMDYyMUU5MyAvKiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNl
TWFjLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNERDgzM0ExRTQzMjRCQjAw
NjIxRTkyIC8qIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNERDgzM0IxRTQzMjRCQjAwNjIxRTkyIC8qIFJlYWx0aW1l
T3V0Z29pbmdWaWRlb1NvdXJjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk1Q0REODMzQjFFNDMyNEJCMDA2MjFFOTMgLyogUmVhbHRpbWVPdXRnb2luZ1Zp
ZGVvU291cmNlTWFjLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJl
YWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZU1hYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTVDREQ4MzNDMUU0MzI0QkIwMDYyMUU5MiAvKiBSZWFsdGltZU91dGdvaW5nVmlkZW9T
b3VyY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVhbHRpbWVPdXRnb2lu
Z1ZpZGVvU291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDREQ4MzNGMUU0
MzI1M0QwMDYyMUU5MiAvKiBMaWJXZWJSVENEYXRhQ2hhbm5lbEhhbmRsZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTGliV2ViUlRDRGF0YUNoYW5uZWxIYW5kbGVy
LmNwcDsgcGF0aCA9IGxpYndlYnJ0Yy9MaWJXZWJSVENEYXRhQ2hhbm5lbEhhbmRsZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Q0REODM0MDFFNDMyNTNEMDA2MjFFOTIgLyog
TGliV2ViUlRDRGF0YUNoYW5uZWxIYW5kbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IExpYldlYlJUQ0RhdGFDaGFubmVsSGFuZGxlci5oOyBwYXRoID0gbGlid2VicnRjL0xp
YldlYlJUQ0RhdGFDaGFubmVsSGFuZGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMTY1MzcsNiArMTY1NDMsOCBAQAogCQkJCTA3RkZERTY2MTgxQUVENDIwMDcyRDQwOSAvKiBN
ZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5jcHAgKi8sCiAJCQkJMDdGRkRFNjcxODFBRUQ0MjAwNzJE
NDA5IC8qIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmggKi8sCiAJCQkJNUVCQjg5MzgxQzc3QkRB
NDAwQzY1RDQxIC8qIFBlZXJNZWRpYURlc2NyaXB0aW9uLmggKi8sCisJCQkJNUNERDgzMzkxRTQz
MjRCQjAwNjIxRTkyIC8qIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5jcHAgKi8sCisJCQkJ
NUNERDgzM0ExRTQzMjRCQjAwNjIxRTkyIC8qIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5o
ICovLAogCQkJCTRBNEY2NTZCMUFBOTk3RjEwMEUzOENERCAvKiBSZWFsdGltZU1lZGlhU291cmNl
LmNwcCAqLywKIAkJCQk0QTRGNjU2QzFBQTk5N0YxMDBFMzhDREQgLyogUmVhbHRpbWVNZWRpYVNv
dXJjZS5oICovLAogCQkJCTRBNEY2NTZEMUFBOTk3RjEwMEUzOENERCAvKiBSZWFsdGltZU1lZGlh
U291cmNlQ2FwYWJpbGl0aWVzLmggKi8sCkBAIC0xNjU0Niw2ICsxNjU1NCw4IEBACiAJCQkJNEE0
RjY1NkYxQUE5OTdGMTAwRTM4Q0REIC8qIFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncy5oICov
LAogCQkJCTJFQzQxREUyMUMwNDEwQTMwMEQyOTRGRSAvKiBSZWFsdGltZU1lZGlhU291cmNlU3Vw
cG9ydGVkQ29uc3RyYWludHMuY3BwICovLAogCQkJCTA3QzFDMEU0MUJGQjYwRUQwMEJEMjI1NiAv
KiBSZWFsdGltZU1lZGlhU291cmNlU3VwcG9ydGVkQ29uc3RyYWludHMuaCAqLywKKwkJCQk1Q0RE
ODMzQjFFNDMyNEJCMDA2MjFFOTIgLyogUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmNwcCAq
LywKKwkJCQk1Q0REODMzQzFFNDMyNEJCMDA2MjFFOTIgLyogUmVhbHRpbWVPdXRnb2luZ1ZpZGVv
U291cmNlLmggKi8sCiAJCQkJMzEzNTkxMEMxRTdERENCNjAwRjMwNjMwIC8qIFJUQ0J1bmRsZVBv
bGljeS5oICovLAogCQkJCTA3MjIxQkEyMTdDRjBBRDQwMDg0OEU1MSAvKiBSVENEYXRhQ2hhbm5l
bEhhbmRsZXIuaCAqLywKIAkJCQkwNzIyMUJBMzE3Q0YwQUQ0MDA4NDhFNTEgLyogUlRDRGF0YUNo
YW5uZWxIYW5kbGVyQ2xpZW50LmggKi8sCkBAIC0xNjU5OCwxNCArMTY2MDgsMTQgQEAKIAkJCQkw
N0VFNzZFRTFCRUE2MTk4MDBGODkxMzMgLyogTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMubW0g
Ki8sCiAJCQkJNDExMDNBQUExRTM5NzkwQTAwNzY5RjAzIC8qIFJlYWx0aW1lSW5jb21pbmdBdWRp
b1NvdXJjZS5jcHAgKi8sCiAJCQkJNDExMDNBQTkxRTM5NzkwQTAwNzY5RjAzIC8qIFJlYWx0aW1l
SW5jb21pbmdBdWRpb1NvdXJjZS5oICovLAotCQkJCTVDREQ4MzM5MUU0MzI0QkIwMDYyMUU5MiAv
KiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuY3BwICovLAotCQkJCTVDREQ4MzNBMUU0MzI0
QkIwMDYyMUU5MiAvKiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuaCAqLywKKwkJCQk0MTEw
M0FBOTFFMzk3OTBBMDA3NjlGMDQgLyogUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlTWFjLmgg
Ki8sCisJCQkJNUNERDgzMzkxRTQzMjRCQjAwNjIxRTkzIC8qIFJlYWx0aW1lSW5jb21pbmdWaWRl
b1NvdXJjZU1hYy5jcHAgKi8sCiAJCQkJNEEwRkZBQTMxQUFGNUVGNjAwNjI4MDNCIC8qIFJlYWx0
aW1lTWVkaWFTb3VyY2VDZW50ZXJNYWMuY3BwICovLAogCQkJCTRBMEZGQUE0MUFBRjVFRjYwMDYy
ODAzQiAvKiBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTWFjLmggKi8sCiAJCQkJNDExMDNBQTcx
RTM5NzkwQTAwNzY5RjAzIC8qIFJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZS5jcHAgKi8sCiAJ
CQkJNDExMDNBQTgxRTM5NzkwQTAwNzY5RjAzIC8qIFJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJj
ZS5oICovLAotCQkJCTVDREQ4MzNCMUU0MzI0QkIwMDYyMUU5MiAvKiBSZWFsdGltZU91dGdvaW5n
VmlkZW9Tb3VyY2UuY3BwICovLAotCQkJCTVDREQ4MzNDMUU0MzI0QkIwMDYyMUU5MiAvKiBSZWFs
dGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuaCAqLywKKwkJCQk0MTEwM0FBODFFMzk3OTBBMDA3NjlG
MDQgLyogUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlTWFjLmggKi8sCisJCQkJNUNERDgzM0Ix
RTQzMjRCQjAwNjIxRTkzIC8qIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZU1hYy5jcHAgKi8s
CiAJCQkJMDdENjM3M0UxQkIwQjExMzAwMjU2Q0U5IC8qIFdlYkF1ZGlvU291cmNlUHJvdmlkZXJB
VkZPYmpDLmggKi8sCiAJCQkJMDdENjM3M0YxQkIwQjExMzAwMjU2Q0U5IC8qIFdlYkF1ZGlvU291
cmNlUHJvdmlkZXJBVkZPYmpDLm1tICovLAogCQkJKTsKQEAgLTI5NjYxLDYgKzI5NjcxLDcgQEAK
IAkJCQk0MTI5QzlBQjFGNTlDNTczMDA5RDc0MDMgLyogUmVhZGFibGVTdHJlYW1Tb3VyY2UuaCBp
biBIZWFkZXJzICovLAogCQkJCUZEMzE2MDNDMTJCMDI2NzYwMEMxQTM1OSAvKiBSZWFsdGltZUFu
YWx5c2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MTEwM0FBRDFFMzk3OTEwMDA3NjlGMDMgLyog
UmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlLmggaW4gSGVhZGVycyAqLywKKwkJCQk0MUIyOEIy
MjFGODUxRjMyMDBGQjUyQUMgLyogUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTWFjLmggaW4g
SGVhZGVycyAqLywKIAkJCQk0QTRGNjU3MTFBQTk5N0YxMDBFMzhDREQgLyogUmVhbHRpbWVNZWRp
YVNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNEE0RjY1NzIxQUE5OTdGMTAwRTM4Q0REIC8q
IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTRB
MEZGQUEyMUFBRjVFQTIwMDYyODAzQiAvKiBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmggaW4g
SGVhZGVycyAqLywKQEAgLTI5NjY4LDYgKzI5Njc5LDcgQEAKIAkJCQk0QTRGNjU3NDFBQTk5N0Yx
MDBFMzhDREQgLyogUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwN0MxQzBFNTFCRkI2MEVEMDBCRDIyNTYgLyogUmVhbHRpbWVNZWRpYVNvdXJjZVN1cHBv
cnRlZENvbnN0cmFpbnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MTEwM0FBQzFFMzk3OTEwMDA3
NjlGMDMgLyogUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlLmggaW4gSGVhZGVycyAqLywKKwkJ
CQk0MUIyOEIyMTFGODUxRjMyMDBGQjUyQUMgLyogUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNl
TWFjLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MUI5NTIyNDFGNThBNThGMDA5MzFEQzIgLyogUmVj
b3JkaW5nU3dpenpsZVR5cGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzQzNjhFODBDMjI2RTMy
MDA1RUZCNUYgLyogUmVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQ0NUE5NTgxNzVENDE0QzAw
QzIxRUM4IC8qIFJlY3RhbmdsZVNoYXBlLmggaW4gSGVhZGVycyAqLywKQEAgLTMzNjM5LDYgKzMz
NjUxLDcgQEAKIAkJCQlGRDMxNjAzQjEyQjAyNjc2MDBDMUEzNTkgLyogUmVhbHRpbWVBbmFseXNl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MTEwM0FBRTFFMzk3OTEwMDA3NjlGMDMgLyogUmVh
bHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDREQ4MzNF
MUU0MzI0REMwMDYyMUU5MiAvKiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJNUNERDgzM0UxRTQzMjREQzAwNjIxRTkzIC8qIFJlYWx0aW1lSW5jb21p
bmdWaWRlb1NvdXJjZU1hYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0QTRGNjU3MDFBQTk5N0Yx
MDBFMzhDREQgLyogUmVhbHRpbWVNZWRpYVNvdXJjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0
QTBGRkFBMTFBQUY1RUEyMDA2MjgwM0IgLyogUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk0QTBGRkFBNTFBQUY1RUY2MDA2MjgwM0IgLyogUmVhbHRpbWVN
ZWRpYVNvdXJjZUNlbnRlck1hYy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTMzNjQ2LDYgKzMzNjU5
LDcgQEAKIAkJCQkyRUM0MURFNDFDMDQxMEEzMDBEMjk0RkUgLyogUmVhbHRpbWVNZWRpYVNvdXJj
ZVN1cHBvcnRlZENvbnN0cmFpbnRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQxMTAzQUFCMUUz
OTc5MTAwMDc2OUYwMyAvKiBSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2UuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNUNERDgzM0QxRTQzMjREOTAwNjIxRTkyIC8qIFJlYWx0aW1lT3V0Z29pbmdW
aWRlb1NvdXJjZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1Q0REODMzRDFFNDMyNEQ5MDA2MjFF
OTMgLyogUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTWFjLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUZENDVBOTVBMTc1RDQxNzEwMEMyMUVDOCAvKiBSZWN0YW5nbGVTaGFwZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlCQ0FCNDE4MTEzRTM1NkU4MDBEOEFBRjMgLyogUmVnaW9uLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE1NzhGNDQwMURFMEI2MzQwMDNERkM2QSAvKiBSZWplY3RlZFByb21p
c2VUcmFja2VyLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lSW5jb21pbmdWaWRlb1Nv
dXJjZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uOWY2Mjk1MjFjZmFkOGVmNTdiZjRhOTY5NjQzOTRjMmQ0OGRj
YWQxYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5jcHAKQEAgLTAsMCArMSwxMDAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisg
KiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZWFsdGltZUluY29taW5nVmlkZW9T
b3VyY2UuaCIKKworI2lmIFVTRShMSUJXRUJSVEMpCisKKyNpZiBQTEFURk9STShDT0NPQSkKKyNp
bmNsdWRlICJSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWMuaCIKKyNlbmRpZgorCisjaW5j
bHVkZSAiTG9nZ2luZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlZjxSZWFsdGltZUlu
Y29taW5nVmlkZW9Tb3VyY2U+IFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6Y3JlYXRlKHJ0
Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvVHJhY2tJbnRlcmZhY2U+JiYgdmlkZW9UcmFj
aywgU3RyaW5nJiYgdHJhY2tJZCkKK3sKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBhdXRvIHNv
dXJjZSA9IFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1hYzo6Y3JlYXRlKFdURk1vdmUodmlk
ZW9UcmFjayksIFdURk1vdmUodHJhY2tJZCkpOworI2Vsc2UKKyAgICAvLyBGSVhNRTogSW1wbGVt
ZW50IEdUSyBzcGVjaWZpYyBvdXRnb2luZyB2aWRlbyBzb3VyY2UKKyAgICBhdXRvIHNvdXJjZSA9
IGFkb3B0UmVmKCpuZXcgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlKFdURk1vdmUodmlkZW9U
cmFjayksIFdURk1vdmUodHJhY2tJZCkpKTsKKyNlbmRpZgorICAgIHNvdXJjZS0+c3RhcnQoKTsK
KyAgICByZXR1cm4gc291cmNlOworfQorCitSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6OlJl
YWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZShydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRl
b1RyYWNrSW50ZXJmYWNlPiYmIHZpZGVvVHJhY2ssIFN0cmluZyYmIHZpZGVvVHJhY2tJZCkKKyAg
ICA6IFJlYWx0aW1lTWVkaWFTb3VyY2UoV1RGTW92ZSh2aWRlb1RyYWNrSWQpLCBSZWFsdGltZU1l
ZGlhU291cmNlOjpUeXBlOjpWaWRlbywgU3RyaW5nKCkpCisgICAgLCBtX3ZpZGVvVHJhY2soV1RG
TW92ZSh2aWRlb1RyYWNrKSkKK3sKKyAgICBtX2N1cnJlbnRTZXR0aW5ncy5zZXRXaWR0aCg2NDAp
OworICAgIG1fY3VycmVudFNldHRpbmdzLnNldEhlaWdodCg0ODApOworICAgIG5vdGlmeU11dGVk
Q2hhbmdlKCFtX3ZpZGVvVHJhY2spOworfQorCit2b2lkIFJlYWx0aW1lSW5jb21pbmdWaWRlb1Nv
dXJjZTo6c3RhcnRQcm9kdWNpbmdEYXRhKCkKK3sKKyAgICBpZiAobV92aWRlb1RyYWNrKQorICAg
ICAgICBtX3ZpZGVvVHJhY2stPkFkZE9yVXBkYXRlU2luayh0aGlzLCBydGM6OlZpZGVvU2lua1dh
bnRzKCkpOworfQorCit2b2lkIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6c2V0U291cmNl
VHJhY2socnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9UcmFja0ludGVyZmFjZT4mJiB0
cmFjaykKK3sKKyAgICBBU1NFUlQoIW1fdmlkZW9UcmFjayk7CisgICAgQVNTRVJUKHRyYWNrKTsK
KworICAgIG1fdmlkZW9UcmFjayA9IFdURk1vdmUodHJhY2spOworICAgIG5vdGlmeU11dGVkQ2hh
bmdlKCFtX3ZpZGVvVHJhY2spOworICAgIGlmIChpc1Byb2R1Y2luZ0RhdGEoKSkKKyAgICAgICAg
bV92aWRlb1RyYWNrLT5BZGRPclVwZGF0ZVNpbmsodGhpcywgcnRjOjpWaWRlb1NpbmtXYW50cygp
KTsKK30KKwordm9pZCBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6OnN0b3BQcm9kdWNpbmdE
YXRhKCkKK3sKKyAgICBpZiAobV92aWRlb1RyYWNrKQorICAgICAgICBtX3ZpZGVvVHJhY2stPlJl
bW92ZVNpbmsodGhpcyk7Cit9CisKK2NvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRp
ZXMmIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6Y2FwYWJpbGl0aWVzKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllczo6ZW1wdHlDYXBhYmls
aXRpZXMoKTsKK30KKworY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzJiBSZWFsdGlt
ZUluY29taW5nVmlkZW9Tb3VyY2U6OnNldHRpbmdzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9j
dXJyZW50U2V0dGluZ3M7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IFVTRShMSUJXRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjczNzgxMmY2MDU3YTM1NzE0OGE4NmFiNjM1NjE5NjAyYThkZDVhYzYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZUluY29t
aW5nVmlkZW9Tb3VyY2UuaApAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgor
ICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBFcmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBj
b250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IFVTRShMSUJXRUJSVEMpCisKKyNpbmNsdWRlICJMaWJXZWJSVENNYWNyb3MuaCIKKyNpbmNsdWRl
ICJSZWFsdGltZU1lZGlhU291cmNlLmgiCisjaW5jbHVkZSA8d2VicnRjL2FwaS9tZWRpYXN0cmVh
bWludGVyZmFjZS5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBDYXB0dXJlRGV2aWNlOworCitjbGFzcyBSZWFsdGltZUluY29taW5n
VmlkZW9Tb3VyY2UgOiBwdWJsaWMgUmVhbHRpbWVNZWRpYVNvdXJjZSwgcHJpdmF0ZSBydGM6OlZp
ZGVvU2lua0ludGVyZmFjZTx3ZWJydGM6OlZpZGVvRnJhbWU+IHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUmVmPFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZT4gY3JlYXRlKHJ0Yzo6c2NvcGVkX3Jl
ZnB0cjx3ZWJydGM6OlZpZGVvVHJhY2tJbnRlcmZhY2U+JiYsIFN0cmluZyYmKTsKKyAgICB+UmVh
bHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlKCkgeyBzdG9wUHJvZHVjaW5nRGF0YSgpOyB9CisKKyAg
ICB2b2lkIHNldFNvdXJjZVRyYWNrKHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvVHJh
Y2tJbnRlcmZhY2U+JiYpOworCitwcm90ZWN0ZWQ6CisgICAgUmVhbHRpbWVJbmNvbWluZ1ZpZGVv
U291cmNlKHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvVHJhY2tJbnRlcmZhY2U+JiYs
IFN0cmluZyYmKTsKKworICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyBtX2N1cnJlbnRT
ZXR0aW5nczsKKworcHJpdmF0ZToKKyAgICAvLyBSZWFsdGltZU1lZGlhU291cmNlIEFQSQorICAg
IHZvaWQgc3RhcnRQcm9kdWNpbmdEYXRhKCkgZmluYWw7CisgICAgdm9pZCBzdG9wUHJvZHVjaW5n
RGF0YSgpICBmaW5hbDsKKworICAgIGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRp
ZXMmIGNhcGFiaWxpdGllcygpIGNvbnN0IGZpbmFsOworICAgIGNvbnN0IFJlYWx0aW1lTWVkaWFT
b3VyY2VTZXR0aW5ncyYgc2V0dGluZ3MoKSBjb25zdCBmaW5hbDsKKworICAgIGJvb2wgYXBwbHlT
aXplKGNvbnN0IEludFNpemUmKSBmaW5hbCB7IHJldHVybiB0cnVlOyB9CisKKyAgICAvLyBydGM6
OlZpZGVvU2lua0ludGVyZmFjZQorICAgIHZvaWQgT25GcmFtZShjb25zdCB3ZWJydGM6OlZpZGVv
RnJhbWUmKSBvdmVycmlkZSB7IH07CisKKyAgICBydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpW
aWRlb1RyYWNrSW50ZXJmYWNlPiBtX3ZpZGVvVHJhY2s7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoTElCV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lT3V0Z29pbmdW
aWRlb1NvdXJjZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmRlNWIxMmE4ZWZlODRiNmJhNWJmMjhlY2MzN2Fl
YzFkOTEzZWE1NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5jcHAKQEAgLTAsMCArMSwyMDcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkLCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIHJlcXVpcmVkIHRvIGJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisg
KiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmgiCisKKyNp
ZiBVU0UoTElCV0VCUlRDKQorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgPHdlYnJ0
Yy9hcGkvdmlkZW8vaTQyMF9idWZmZXIuaD4KKyNpbmNsdWRlIDx3ZWJydGMvY29tbW9uX3ZpZGVv
L2xpYnl1di9pbmNsdWRlL3dlYnJ0Y19saWJ5dXYuaD4KKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRp
bWUuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorCisjaWYgUExBVEZPUk0oQ09DT0Ep
CisjaW5jbHVkZSAiUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTWFjLmgiCisjZW5kaWYKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWY8UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlPiBS
ZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OmNyZWF0ZShSZWY8TWVkaWFTdHJlYW1UcmFja1By
aXZhdGU+JiYgdmlkZW9Tb3VyY2UpCit7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgcmV0dXJu
IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZU1hYzo6Y3JlYXRlKFdURk1vdmUodmlkZW9Tb3Vy
Y2UpKTsKKyNlbHNlCisgICAgLy8gRklYTUU6IEltcGxlbWVudCBHVEsgc3BlY2lmaWMgb3V0Z29p
bmcgdmlkZW8gc291cmNlLgorICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFJlYWx0aW1lT3V0Z29p
bmdWaWRlb1NvdXJjZShXVEZNb3ZlKHZpZGVvU291cmNlKSkpOworI2VuZGlmCit9CisKK1JlYWx0
aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlKFJlZjxN
ZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4mJiB2aWRlb1NvdXJjZSkKKyAgICA6IG1fdmlkZW9Tb3Vy
Y2UoV1RGTW92ZSh2aWRlb1NvdXJjZSkpCisgICAgLCBtX2JsYWNrRnJhbWVUaW1lcigqdGhpcywg
JlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6c2VuZE9uZUJsYWNrRnJhbWUpCit7CisgICAg
bV92aWRlb1NvdXJjZS0+YWRkT2JzZXJ2ZXIoKnRoaXMpOworICAgIGluaXRpYWxpemVGcm9tU291
cmNlKCk7Cit9CisKK2Jvb2wgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpzZXRTb3VyY2Uo
UmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiYmIG5ld1NvdXJjZSkKK3sKKyAgICBpZiAoIW1f
aW5pdGlhbFNldHRpbmdzKQorICAgICAgICBtX2luaXRpYWxTZXR0aW5ncyA9IG1fdmlkZW9Tb3Vy
Y2UtPnNvdXJjZSgpLnNldHRpbmdzKCk7CisKKyAgICBtX3ZpZGVvU291cmNlLT5yZW1vdmVPYnNl
cnZlcigqdGhpcyk7CisgICAgbV92aWRlb1NvdXJjZSA9IFdURk1vdmUobmV3U291cmNlKTsKKyAg
ICBtX3ZpZGVvU291cmNlLT5hZGRPYnNlcnZlcigqdGhpcyk7CisKKyAgICBpbml0aWFsaXplRnJv
bVNvdXJjZSgpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUmVhbHRpbWVPdXRnb2lu
Z1ZpZGVvU291cmNlOjpzdG9wKCkKK3sKKyAgICBtX3ZpZGVvU291cmNlLT5yZW1vdmVPYnNlcnZl
cigqdGhpcyk7CisgICAgbV9ibGFja0ZyYW1lVGltZXIuc3RvcCgpOworICAgIG1faXNTdG9wcGVk
ID0gdHJ1ZTsKK30KKwordm9pZCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnVwZGF0ZUJs
YWNrRnJhbWVzU2VuZGluZygpCit7CisgICAgaWYgKCFtX211dGVkICYmIG1fZW5hYmxlZCkgewor
ICAgICAgICBpZiAobV9ibGFja0ZyYW1lVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgICAgIG1f
YmxhY2tGcmFtZVRpbWVyLnN0b3AoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNl
bmRCbGFja0ZyYW1lc0lmTmVlZGVkKCk7Cit9CisKK3ZvaWQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVv
U291cmNlOjpzb3VyY2VNdXRlZENoYW5nZWQoKQoreworICAgIEFTU0VSVChtX211dGVkICE9IG1f
dmlkZW9Tb3VyY2UtPm11dGVkKCkpOworCisgICAgbV9tdXRlZCA9IG1fdmlkZW9Tb3VyY2UtPm11
dGVkKCk7CisKKyAgICB1cGRhdGVCbGFja0ZyYW1lc1NlbmRpbmcoKTsKK30KKwordm9pZCBSZWFs
dGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnNvdXJjZUVuYWJsZWRDaGFuZ2VkKCkKK3sKKyAgICBB
U1NFUlQobV9lbmFibGVkICE9IG1fdmlkZW9Tb3VyY2UtPmVuYWJsZWQoKSk7CisKKyAgICBtX2Vu
YWJsZWQgPSBtX3ZpZGVvU291cmNlLT5lbmFibGVkKCk7CisKKyAgICB1cGRhdGVCbGFja0ZyYW1l
c1NlbmRpbmcoKTsKK30KKwordm9pZCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OmluaXRp
YWxpemVGcm9tU291cmNlKCkKK3sKKyAgICBjb25zdCBhdXRvJiBzZXR0aW5ncyA9IG1fdmlkZW9T
b3VyY2UtPnNvdXJjZSgpLnNldHRpbmdzKCk7CisgICAgbV93aWR0aCA9IHNldHRpbmdzLndpZHRo
KCk7CisgICAgbV9oZWlnaHQgPSBzZXR0aW5ncy5oZWlnaHQoKTsKKworICAgIG1fbXV0ZWQgPSBt
X3ZpZGVvU291cmNlLT5tdXRlZCgpOworICAgIG1fZW5hYmxlZCA9IG1fdmlkZW9Tb3VyY2UtPmVu
YWJsZWQoKTsKKworICAgIHVwZGF0ZUJsYWNrRnJhbWVzU2VuZGluZygpOworfQorCitib29sIFJl
YWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6R2V0U3RhdHMoU3RhdHMqKQoreworICAgIHJldHVy
biBmYWxzZTsKK30KKwordm9pZCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OkFkZE9yVXBk
YXRlU2luayhydGM6OlZpZGVvU2lua0ludGVyZmFjZTx3ZWJydGM6OlZpZGVvRnJhbWU+KiBzaW5r
LCBjb25zdCBydGM6OlZpZGVvU2lua1dhbnRzJiBzaW5rV2FudHMpCit7CisgICAgQVNTRVJUKCFz
aW5rV2FudHMuYmxhY2tfZnJhbWVzKTsKKworICAgIGlmIChzaW5rV2FudHMucm90YXRpb25fYXBw
bGllZCkKKyAgICAgICAgbV9zaG91bGRBcHBseVJvdGF0aW9uID0gdHJ1ZTsKKworICAgIGlmICgh
bV9zaW5rcy5jb250YWlucyhzaW5rKSkKKyAgICAgICAgbV9zaW5rcy5hcHBlbmQoc2luayk7CisK
KyAgICBjYWxsT25NYWluVGhyZWFkKFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldKCkg
eworICAgICAgICBwcm90ZWN0ZWRUaGlzLT5zZW5kQmxhY2tGcmFtZXNJZk5lZWRlZCgpOworICAg
IH0pOworfQorCit2b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6UmVtb3ZlU2luayhy
dGM6OlZpZGVvU2lua0ludGVyZmFjZTx3ZWJydGM6OlZpZGVvRnJhbWU+KiBzaW5rKQoreworICAg
IG1fc2lua3MucmVtb3ZlRmlyc3Qoc2luayk7CisKKyAgICBpZiAobV9zaW5rcy5zaXplKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIGNhbGxPbk1haW5UaHJlYWQoW3Byb3RlY3RlZFRoaXMgPSBt
YWtlUmVmKCp0aGlzKV0oKSB7CisgICAgICAgIGlmIChwcm90ZWN0ZWRUaGlzLT5tX2JsYWNrRnJh
bWVUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+bV9ibGFja0Zy
YW1lVGltZXIuc3RvcCgpOworICAgIH0pOworfQorCit2b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRl
b1NvdXJjZTo6c2VuZEJsYWNrRnJhbWVzSWZOZWVkZWQoKQoreworICAgIGlmIChtX2JsYWNrRnJh
bWVUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fc2lua3Mu
c2l6ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fbXV0ZWQgJiYgbV9lbmFibGVk
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fd2lkdGggfHwgIW1faGVpZ2h0KQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fYmxhY2tGcmFtZSkgeworICAgICAgICBhdXRvIHdp
ZHRoID0gbV93aWR0aDsKKyAgICAgICAgYXV0byBoZWlnaHQgPSBtX2hlaWdodDsKKyAgICAgICAg
aWYgKG1fc2hvdWxkQXBwbHlSb3RhdGlvbiAmJiAobV9jdXJyZW50Um90YXRpb24gPT0gd2VicnRj
OjprVmlkZW9Sb3RhdGlvbl8wIHx8IG1fY3VycmVudFJvdGF0aW9uID09IHdlYnJ0Yzo6a1ZpZGVv
Um90YXRpb25fOTApKQorICAgICAgICAgICAgc3RkOjpzd2FwKHdpZHRoLCBoZWlnaHQpOworICAg
ICAgICBhdXRvIGZyYW1lID0gbV9idWZmZXJQb29sLkNyZWF0ZUJ1ZmZlcih3aWR0aCwgaGVpZ2h0
KTsKKyAgICAgICAgQVNTRVJUKGZyYW1lKTsKKyAgICAgICAgaWYgKCFmcmFtZSkgeworICAgICAg
ICAgICAgUkVMRUFTRV9MT0coV2ViUlRDLCAiUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpz
ZW5kQmxhY2tGcmFtZXNJZk5lZWRlZCB1bmFibGUgdG8gc2VuZCBibGFjayBmcmFtZXMiKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB3ZWJydGM6Okk0MjBCdWZmZXI6
OlNldEJsYWNrKGZyYW1lLmdldCgpKTsKKyAgICAgICAgbV9ibGFja0ZyYW1lID0gV1RGTW92ZShm
cmFtZSk7CisgICAgfQorICAgIHNlbmRPbmVCbGFja0ZyYW1lKCk7CisgICAgbV9ibGFja0ZyYW1l
VGltZXIuc3RhcnRSZXBlYXRpbmcoMV9zKTsKK30KKwordm9pZCBSZWFsdGltZU91dGdvaW5nVmlk
ZW9Tb3VyY2U6OnNlbmRPbmVCbGFja0ZyYW1lKCkKK3sKKyAgICBSRUxFQVNFX0xPRyhNZWRpYVN0
cmVhbSwgIlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6c2VuZE9uZUJsYWNrRnJhbWUiKTsK
KyAgICBzZW5kRnJhbWUocnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9GcmFtZUJ1ZmZl
cj4obV9ibGFja0ZyYW1lKSk7Cit9CisKK3ZvaWQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNl
OjpzZW5kRnJhbWUocnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9GcmFtZUJ1ZmZlcj4m
JiBidWZmZXIpCit7CisgICAgaW50NjRfdCB0aW1lc3RhbXBNaWNyb1NlY29uZHMgPSBtb25vdG9u
aWNhbGx5SW5jcmVhc2luZ1RpbWVNUygpICogMTAwMDsKKyAgICB3ZWJydGM6OlZpZGVvRnJhbWUg
ZnJhbWUoYnVmZmVyLCBtX3Nob3VsZEFwcGx5Um90YXRpb24gPyB3ZWJydGM6OmtWaWRlb1JvdGF0
aW9uXzAgOiBtX2N1cnJlbnRSb3RhdGlvbiwgdGltZXN0YW1wTWljcm9TZWNvbmRzKTsKKyAgICBm
b3IgKGF1dG8qIHNpbmsgOiBtX3NpbmtzKQorICAgICAgICBzaW5rLT5PbkZyYW1lKGZyYW1lKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKExJQldFQlJUQykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1l
T3V0Z29pbmdWaWRlb1NvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTk1NGEyMGU1MjYw
YzM4NzVmOWI3MWUyNTg5MTQwM2I5ZWZlYzZmNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5o
CkBAIC0wLDAgKzEsMTE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCwgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSByZXF1aXJlZCB0byBiZSBt
ZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFt
ZSBvZiBBcHBsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAg
ICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoTElCV0VCUlRDKQorCisjaW5jbHVkZSAiTGli
V2ViUlRDTWFjcm9zLmgiCisjaW5jbHVkZSAiTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUuaCIKKyNp
bmNsdWRlIDxUaW1lci5oPgorI2luY2x1ZGUgPHdlYnJ0Yy9hcGkvbWVkaWFzdHJlYW1pbnRlcmZh
Y2UuaD4KKyNpbmNsdWRlIDx3ZWJydGMvYmFzZS9vcHRpb25hbC5oPgorI2luY2x1ZGUgPHdlYnJ0
Yy9jb21tb25fdmlkZW8vaW5jbHVkZS9pNDIwX2J1ZmZlcl9wb29sLmg+CisjaW5jbHVkZSA8d2Vi
cnRjL21lZGlhL2Jhc2UvdmlkZW9zaW5raW50ZXJmYWNlLmg+CisjaW5jbHVkZSA8d3RmL09wdGlv
bmFsLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlIDogcHVibGlj
IFRocmVhZFNhZmVSZWZDb3VudGVkPFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZT4sIHB1Ymxp
YyB3ZWJydGM6OlZpZGVvVHJhY2tTb3VyY2VJbnRlcmZhY2UsIHByaXZhdGUgTWVkaWFTdHJlYW1U
cmFja1ByaXZhdGU6Ok9ic2VydmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFJlYWx0aW1l
T3V0Z29pbmdWaWRlb1NvdXJjZT4gY3JlYXRlKFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4m
JiB2aWRlb1NvdXJjZSk7CisgICAgflJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZSgpIHsgc3Rv
cCgpOyB9CisKKyAgICB2b2lkIHN0b3AoKTsKKyAgICBib29sIHNldFNvdXJjZShSZWY8TWVkaWFT
dHJlYW1UcmFja1ByaXZhdGU+JiYpOworICAgIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJiBzb3Vy
Y2UoKSBjb25zdCB7IHJldHVybiBtX3ZpZGVvU291cmNlLmdldCgpOyB9CisKKyAgICBpbnQgQWRk
UmVmKCkgY29uc3QgZmluYWwgeyByZWYoKTsgcmV0dXJuIHJlZkNvdW50KCk7IH0KKyAgICBpbnQg
UmVsZWFzZSgpIGNvbnN0IGZpbmFsIHsgZGVyZWYoKTsgcmV0dXJuIHJlZkNvdW50KCk7IH0KKwor
ICAgIHZvaWQgc2V0QXBwbHlSb3RhdGlvbihib29sIHNob3VsZEFwcGx5Um90YXRpb24pIHsgbV9z
aG91bGRBcHBseVJvdGF0aW9uID0gc2hvdWxkQXBwbHlSb3RhdGlvbjsgfQorCitwcm90ZWN0ZWQ6
CisgICAgZXhwbGljaXQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlKFJlZjxNZWRpYVN0cmVh
bVRyYWNrUHJpdmF0ZT4mJik7CisKKyAgICB2b2lkIHNlbmRGcmFtZShydGM6OnNjb3BlZF9yZWZw
dHI8d2VicnRjOjpWaWRlb0ZyYW1lQnVmZmVyPiYmKTsKKworICAgIFZlY3RvcjxydGM6OlZpZGVv
U2lua0ludGVyZmFjZTx3ZWJydGM6OlZpZGVvRnJhbWU+Kj4gbV9zaW5rczsKKyAgICB3ZWJydGM6
Okk0MjBCdWZmZXJQb29sIG1fYnVmZmVyUG9vbDsKKworICAgIGJvb2wgbV9lbmFibGVkIHsgdHJ1
ZSB9OworICAgIGJvb2wgbV9tdXRlZCB7IGZhbHNlIH07CisgICAgdWludDMyX3QgbV93aWR0aCB7
IDAgfTsKKyAgICB1aW50MzJfdCBtX2hlaWdodCB7IDAgfTsKKyAgICBib29sIG1fc2hvdWxkQXBw
bHlSb3RhdGlvbiB7IGZhbHNlIH07CisgICAgd2VicnRjOjpWaWRlb1JvdGF0aW9uIG1fY3VycmVu
dFJvdGF0aW9uIHsgd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8wIH07CisKK3ByaXZhdGU6CisgICAg
dm9pZCBzZW5kQmxhY2tGcmFtZXNJZk5lZWRlZCgpOworICAgIHZvaWQgc2VuZE9uZUJsYWNrRnJh
bWUoKTsKKyAgICB2b2lkIGluaXRpYWxpemVGcm9tU291cmNlKCk7CisgICAgdm9pZCB1cGRhdGVC
bGFja0ZyYW1lc1NlbmRpbmcoKTsKKworICAgIC8vIE5vdGlmaWVyIEFQSQorICAgIHZvaWQgUmVn
aXN0ZXJPYnNlcnZlcih3ZWJydGM6Ok9ic2VydmVySW50ZXJmYWNlKikgZmluYWwgeyB9CisgICAg
dm9pZCBVbnJlZ2lzdGVyT2JzZXJ2ZXIod2VicnRjOjpPYnNlcnZlckludGVyZmFjZSopIGZpbmFs
IHsgfQorCisgICAgLy8gVmlkZW9UcmFja1NvdXJjZUludGVyZmFjZSBBUEkKKyAgICBib29sIGlz
X3NjcmVlbmNhc3QoKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQorICAgIHJ0Yzo6T3B0
aW9uYWw8Ym9vbD4gbmVlZHNfZGVub2lzaW5nKCkgY29uc3QgZmluYWwgeyByZXR1cm4gcnRjOjpP
cHRpb25hbDxib29sPigpOyB9CisgICAgYm9vbCBHZXRTdGF0cyhTdGF0cyopIGZpbmFsOworCisg
ICAgLy8gTWVkaWFTb3VyY2VJbnRlcmZhY2UgQVBJCisgICAgU291cmNlU3RhdGUgc3RhdGUoKSBj
b25zdCBmaW5hbCB7IHJldHVybiBTb3VyY2VTdGF0ZSgpOyB9CisgICAgYm9vbCByZW1vdGUoKSBj
b25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CisKKyAgICAvLyBydGM6OlZpZGVvU291cmNlSW50
ZXJmYWNlPHdlYnJ0Yzo6VmlkZW9GcmFtZT4gQVBJCisgICAgdm9pZCBBZGRPclVwZGF0ZVNpbmso
cnRjOjpWaWRlb1NpbmtJbnRlcmZhY2U8d2VicnRjOjpWaWRlb0ZyYW1lPiosIGNvbnN0IHJ0Yzo6
VmlkZW9TaW5rV2FudHMmKSBmaW5hbDsKKyAgICB2b2lkIFJlbW92ZVNpbmsocnRjOjpWaWRlb1Np
bmtJbnRlcmZhY2U8d2VicnRjOjpWaWRlb0ZyYW1lPiopIGZpbmFsOworCisgICAgdm9pZCBzb3Vy
Y2VNdXRlZENoYW5nZWQoKTsKKyAgICB2b2lkIHNvdXJjZUVuYWJsZWRDaGFuZ2VkKCk7CisgICAg
dmlydHVhbCB2b2lkIHZpZGVvU2FtcGxlQXZhaWxhYmxlKE1lZGlhU2FtcGxlJikgeyB9OworCisg
ICAgLy8gTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6Ok9ic2VydmVyIEFQSQorICAgIHZvaWQgdHJh
Y2tNdXRlZENoYW5nZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmKSBmaW5hbCB7IHNvdXJjZU11
dGVkQ2hhbmdlZCgpOyB9CisgICAgdm9pZCB0cmFja0VuYWJsZWRDaGFuZ2VkKE1lZGlhU3RyZWFt
VHJhY2tQcml2YXRlJikgZmluYWwgeyBzb3VyY2VFbmFibGVkQ2hhbmdlZCgpOyB9CisgICAgdm9p
ZCB0cmFja1NldHRpbmdzQ2hhbmdlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYpIGZpbmFsIHsg
aW5pdGlhbGl6ZUZyb21Tb3VyY2UoKTsgfQorICAgIHZvaWQgc2FtcGxlQnVmZmVyVXBkYXRlZChN
ZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYsIE1lZGlhU2FtcGxlJiBzYW1wbGUpIGZpbmFsIHsgdmlk
ZW9TYW1wbGVBdmFpbGFibGUoc2FtcGxlKTsgfQorICAgIHZvaWQgdHJhY2tFbmRlZChNZWRpYVN0
cmVhbVRyYWNrUHJpdmF0ZSYpIGZpbmFsIHsgfQorCisgICAgUmVmPE1lZGlhU3RyZWFtVHJhY2tQ
cml2YXRlPiBtX3ZpZGVvU291cmNlOworICAgIHN0ZDo6b3B0aW9uYWw8UmVhbHRpbWVNZWRpYVNv
dXJjZVNldHRpbmdzPiBtX2luaXRpYWxTZXR0aW5nczsKKyAgICBib29sIG1faXNTdG9wcGVkIHsg
ZmFsc2UgfTsKKyAgICBUaW1lciBtX2JsYWNrRnJhbWVUaW1lcjsKKyAgICBydGM6OnNjb3BlZF9y
ZWZwdHI8d2VicnRjOjpWaWRlb0ZyYW1lQnVmZmVyPiBtX2JsYWNrRnJhbWU7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoTElCV0VCUlRDKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lSW5jb21p
bmdWaWRlb1NvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9t
YWMvUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggYzI2MThkNjk1Mjc2M2ZlN2Q3YzRiNmI4Y2U0ZjljZGMxODI3YTM3MS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDIwNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICog
My4gTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cyBj
b250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20gdGhpcwotICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmgiCi0KLSNpZiBVU0UoTElC
V0VCUlRDKQotCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIk1lZGlhU2FtcGxlQVZG
T2JqQy5oIgotI2luY2x1ZGUgPHdlYnJ0Yy9zZGsvb2JqYy9GcmFtZXdvcmsvQ2xhc3Nlcy9WaWRl
by9jb3JldmlkZW9fZnJhbWVfYnVmZmVyLmg+Ci0KLSNpbmNsdWRlICJDb3JlTWVkaWFTb2Z0TGlu
ay5oIgotI2luY2x1ZGUgIkNvcmVWaWRlb1NvZnRMaW5rLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotUmVmPFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZT4gUmVhbHRpbWVJbmNvbWluZ1Zp
ZGVvU291cmNlOjpjcmVhdGUocnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9UcmFja0lu
dGVyZmFjZT4mJiB2aWRlb1RyYWNrLCBTdHJpbmcmJiB0cmFja0lkKQotewotICAgIGF1dG8gc291
cmNlID0gYWRvcHRSZWYoKm5ldyBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UoV1RGTW92ZSh2
aWRlb1RyYWNrKSwgV1RGTW92ZSh0cmFja0lkKSkpOwotICAgIHNvdXJjZS0+c3RhcnQoKTsKLSAg
ICByZXR1cm4gc291cmNlOwotfQotCi1SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6OlJlYWx0
aW1lSW5jb21pbmdWaWRlb1NvdXJjZShydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb1Ry
YWNrSW50ZXJmYWNlPiYmIHZpZGVvVHJhY2ssIFN0cmluZyYmIHZpZGVvVHJhY2tJZCkKLSAgICA6
IFJlYWx0aW1lTWVkaWFTb3VyY2UoV1RGTW92ZSh2aWRlb1RyYWNrSWQpLCBSZWFsdGltZU1lZGlh
U291cmNlOjpUeXBlOjpWaWRlbywgU3RyaW5nKCkpCi0gICAgLCBtX3ZpZGVvVHJhY2soV1RGTW92
ZSh2aWRlb1RyYWNrKSkKLXsKLSAgICBtX2N1cnJlbnRTZXR0aW5ncy5zZXRXaWR0aCg2NDApOwot
ICAgIG1fY3VycmVudFNldHRpbmdzLnNldEhlaWdodCg0ODApOwotICAgIG5vdGlmeU11dGVkQ2hh
bmdlKCFtX3ZpZGVvVHJhY2spOwotfQotCi12b2lkIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJj
ZTo6c3RhcnRQcm9kdWNpbmdEYXRhKCkKLXsKLSAgICBpZiAobV92aWRlb1RyYWNrKQotICAgICAg
ICBtX3ZpZGVvVHJhY2stPkFkZE9yVXBkYXRlU2luayh0aGlzLCBydGM6OlZpZGVvU2lua1dhbnRz
KCkpOwotfQotCi12b2lkIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6c2V0U291cmNlVHJh
Y2socnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9UcmFja0ludGVyZmFjZT4mJiB0cmFj
aykKLXsKLSAgICBBU1NFUlQoIW1fdmlkZW9UcmFjayk7Ci0gICAgQVNTRVJUKHRyYWNrKTsKLQot
ICAgIG1fdmlkZW9UcmFjayA9IFdURk1vdmUodHJhY2spOwotICAgIG5vdGlmeU11dGVkQ2hhbmdl
KCFtX3ZpZGVvVHJhY2spOwotICAgIGlmIChpc1Byb2R1Y2luZ0RhdGEoKSkKLSAgICAgICAgbV92
aWRlb1RyYWNrLT5BZGRPclVwZGF0ZVNpbmsodGhpcywgcnRjOjpWaWRlb1NpbmtXYW50cygpKTsK
LX0KLQotdm9pZCBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6OnN0b3BQcm9kdWNpbmdEYXRh
KCkKLXsKLSAgICBpZiAobV92aWRlb1RyYWNrKQotICAgICAgICBtX3ZpZGVvVHJhY2stPlJlbW92
ZVNpbmsodGhpcyk7Ci19Ci0KLUNWUGl4ZWxCdWZmZXJSZWYgUmVhbHRpbWVJbmNvbWluZ1ZpZGVv
U291cmNlOjpwaXhlbEJ1ZmZlckZyb21WaWRlb0ZyYW1lKGNvbnN0IHdlYnJ0Yzo6VmlkZW9GcmFt
ZSYgZnJhbWUpCi17Ci0gICAgaWYgKG11dGVkKCkpIHsKLSAgICAgICAgaWYgKCFtX2JsYWNrRnJh
bWUgfHwgbV9ibGFja0ZyYW1lV2lkdGggIT0gZnJhbWUud2lkdGgoKSB8fCBtX2JsYWNrRnJhbWVI
ZWlnaHQgIT0gZnJhbWUuaGVpZ2h0KCkpIHsKLSAgICAgICAgICAgIENWUGl4ZWxCdWZmZXJSZWYg
cGl4ZWxCdWZmZXIgPSBudWxscHRyOwotICAgICAgICAgICAgYXV0byBzdGF0dXMgPSBDVlBpeGVs
QnVmZmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGZyYW1lLndpZHRoKCksIGZyYW1lLmhl
aWdodCgpLCBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyOFBsYW5hciwgbnVsbHB0ciwgJnBp
eGVsQnVmZmVyKTsKLSAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoc3RhdHVzLCBzdGF0dXMgPT0g
bm9FcnIpOwotCi0gICAgICAgICAgICBtX2JsYWNrRnJhbWUgPSBwaXhlbEJ1ZmZlcjsKLSAgICAg
ICAgICAgIG1fYmxhY2tGcmFtZVdpZHRoID0gZnJhbWUud2lkdGgoKTsKLSAgICAgICAgICAgIG1f
YmxhY2tGcmFtZUhlaWdodCA9IGZyYW1lLmhlaWdodCgpOwotCi0gICAgICAgICAgICBzdGF0dXMg
PSBDVlBpeGVsQnVmZmVyTG9ja0Jhc2VBZGRyZXNzKHBpeGVsQnVmZmVyLCAwKTsKLSAgICAgICAg
ICAgIEFTU0VSVChzdGF0dXMgPT0gbm9FcnIpOwotICAgICAgICAgICAgdm9pZCogZGF0YSA9IENW
UGl4ZWxCdWZmZXJHZXRCYXNlQWRkcmVzcyhwaXhlbEJ1ZmZlcik7Ci0gICAgICAgICAgICBzaXpl
X3QgeUxlbmd0aCA9IGZyYW1lLndpZHRoKCkgKiBmcmFtZS5oZWlnaHQoKTsKLSAgICAgICAgICAg
IG1lbXNldChkYXRhLCAwLCB5TGVuZ3RoKTsKLSAgICAgICAgICAgIG1lbXNldChzdGF0aWNfY2Fz
dDx1aW50OF90Kj4oZGF0YSkgKyB5TGVuZ3RoLCAxMjgsIHlMZW5ndGggLyAyKTsKLQotICAgICAg
ICAgICAgc3RhdHVzID0gQ1ZQaXhlbEJ1ZmZlclVubG9ja0Jhc2VBZGRyZXNzKHBpeGVsQnVmZmVy
LCAwKTsKLSAgICAgICAgICAgIEFTU0VSVCghc3RhdHVzKTsKLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gbV9ibGFja0ZyYW1lLmdldCgpOwotICAgIH0KLSAgICBhdXRvIGJ1ZmZlciA9IGZyYW1l
LnZpZGVvX2ZyYW1lX2J1ZmZlcigpOwotICAgIEFTU0VSVChidWZmZXItPnR5cGUoKSA9PSB3ZWJy
dGM6OlZpZGVvRnJhbWVCdWZmZXI6OlR5cGU6OmtOYXRpdmUpOwotICAgIHJldHVybiBzdGF0aWNf
Y2FzdDx3ZWJydGM6OkNvcmVWaWRlb0ZyYW1lQnVmZmVyJj4oKmJ1ZmZlcikucGl4ZWxfYnVmZmVy
KCk7Ci19Ci0KLXZvaWQgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlOjpPbkZyYW1lKGNvbnN0
IHdlYnJ0Yzo6VmlkZW9GcmFtZSYgZnJhbWUpCi17Ci0gICAgaWYgKCFpc1Byb2R1Y2luZ0RhdGEo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECi0gICAgaWYg
KCEoKyttX251bWJlck9mRnJhbWVzICUgMzApKQotICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYVN0
cmVhbSwgIlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6T25GcmFtZSAlenUgZnJhbWUiLCBt
X251bWJlck9mRnJhbWVzKTsKLSNlbmRpZgotCi0gICAgYXV0byBwaXhlbEJ1ZmZlciA9IHBpeGVs
QnVmZmVyRnJvbVZpZGVvRnJhbWUoZnJhbWUpOwotCi0gICAgLy8gRklYTUU6IENvbnZlcnQgdGlt
aW5nIGluZm9ybWF0aW9uIGZyb20gVmlkZW9GcmFtZSB0byBDTVNhbXBsZVRpbWluZ0luZm8uCi0g
ICAgLy8gRm9yIHRoZSBtb21lbnQsIHdlIHdpbGwgcHJldGVuZCB0aGF0IGZyYW1lcyBzaG91bGQg
YmUgcmVuZGVyZWQgYXNhcC4KLSAgICBDTVNhbXBsZVRpbWluZ0luZm8gdGltaW5nSW5mbzsKLSAg
ICB0aW1pbmdJbmZvLnByZXNlbnRhdGlvblRpbWVTdGFtcCA9IGtDTVRpbWVJbnZhbGlkOwotICAg
IHRpbWluZ0luZm8uZGVjb2RlVGltZVN0YW1wID0ga0NNVGltZUludmFsaWQ7Ci0gICAgdGltaW5n
SW5mby5kdXJhdGlvbiA9IGtDTVRpbWVJbnZhbGlkOwotCi0gICAgQ01WaWRlb0Zvcm1hdERlc2Ny
aXB0aW9uUmVmIGZvcm1hdERlc2NyaXB0aW9uOwotICAgIE9TU3RhdHVzIG9zdGF0dXMgPSBDTVZp
ZGVvRm9ybWF0RGVzY3JpcHRpb25DcmVhdGVGb3JJbWFnZUJ1ZmZlcihrQ0ZBbGxvY2F0b3JEZWZh
dWx0LCAoQ1ZJbWFnZUJ1ZmZlclJlZilwaXhlbEJ1ZmZlciwgJmZvcm1hdERlc2NyaXB0aW9uKTsK
LSAgICBpZiAob3N0YXR1cyAhPSBub0VycikgewotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0
byBpbml0aWFsaXplIENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbjogJWQiLCBzdGF0aWNfY2FzdDxp
bnQ+KG9zdGF0dXMpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIENNU2FtcGxlQnVm
ZmVyUmVmIHNhbXBsZUJ1ZmZlcjsKLSAgICBvc3RhdHVzID0gQ01TYW1wbGVCdWZmZXJDcmVhdGVS
ZWFkeVdpdGhJbWFnZUJ1ZmZlcihrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAoQ1ZJbWFnZUJ1ZmZlclJl
ZilwaXhlbEJ1ZmZlciwgZm9ybWF0RGVzY3JpcHRpb24sICZ0aW1pbmdJbmZvLCAmc2FtcGxlQnVm
ZmVyKTsKLSAgICBpZiAob3N0YXR1cyAhPSBub0VycikgewotICAgICAgICBMT0dfRVJST1IoIkZh
aWxlZCB0byBjcmVhdGUgdGhlIHNhbXBsZSBidWZmZXI6ICVkIiwgc3RhdGljX2Nhc3Q8aW50Pihv
c3RhdHVzKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgQ0ZSZWxlYXNlKGZvcm1hdERl
c2NyaXB0aW9uKTsKLQotICAgIGF1dG8gc2FtcGxlID0gYWRvcHRDRihzYW1wbGVCdWZmZXIpOwot
Ci0gICAgQ0ZBcnJheVJlZiBhdHRhY2htZW50c0FycmF5ID0gQ01TYW1wbGVCdWZmZXJHZXRTYW1w
bGVBdHRhY2htZW50c0FycmF5KHNhbXBsZUJ1ZmZlciwgdHJ1ZSk7Ci0gICAgZm9yIChDRkluZGV4
IGkgPSAwOyBpIDwgQ0ZBcnJheUdldENvdW50KGF0dGFjaG1lbnRzQXJyYXkpOyArK2kpIHsKLSAg
ICAgICAgQ0ZNdXRhYmxlRGljdGlvbmFyeVJlZiBhdHRhY2htZW50cyA9IChDRk11dGFibGVEaWN0
aW9uYXJ5UmVmKUNGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoYXR0YWNobWVudHNBcnJheSwgaSk7Ci0g
ICAgICAgIENGRGljdGlvbmFyeVNldFZhbHVlKGF0dGFjaG1lbnRzLCBrQ01TYW1wbGVBdHRhY2ht
ZW50S2V5X0Rpc3BsYXlJbW1lZGlhdGVseSwga0NGQm9vbGVhblRydWUpOwotICAgIH0KLQotICAg
IHVuc2lnbmVkIHdpZHRoID0gZnJhbWUud2lkdGgoKTsKLSAgICB1bnNpZ25lZCBoZWlnaHQgPSBm
cmFtZS5oZWlnaHQoKTsKLQotICAgIE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uIHJvdGF0aW9u
OwotICAgIHN3aXRjaCAoZnJhbWUucm90YXRpb24oKSkgewotICAgIGNhc2Ugd2VicnRjOjprVmlk
ZW9Sb3RhdGlvbl8wOgotICAgICAgICByb3RhdGlvbiA9IE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0
aW9uOjpOb25lOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIHdlYnJ0Yzo6a1ZpZGVvUm90YXRp
b25fMTgwOgotICAgICAgICByb3RhdGlvbiA9IE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpV
cHNpZGVEb3duOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIHdlYnJ0Yzo6a1ZpZGVvUm90YXRp
b25fOTA6Ci0gICAgICAgIHJvdGF0aW9uID0gTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246OlJp
Z2h0OwotICAgICAgICBzdGQ6OnN3YXAod2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2Ugd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8yNzA6Ci0gICAgICAgIHJvdGF0aW9uID0g
TWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246OkxlZnQ7Ci0gICAgICAgIHN0ZDo6c3dhcCh3aWR0
aCwgaGVpZ2h0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgUmVmUHRyPFJlYWx0aW1l
SW5jb21pbmdWaWRlb1NvdXJjZT4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKLSAgICBjYWxsT25NYWlu
VGhyZWFkKFtwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwgc2FtcGxlID0g
V1RGTW92ZShzYW1wbGUpLCB3aWR0aCwgaGVpZ2h0LCByb3RhdGlvbl0gewotICAgICAgICBwcm90
ZWN0ZWRUaGlzLT5wcm9jZXNzTmV3U2FtcGxlKHNhbXBsZS5nZXQoKSwgd2lkdGgsIGhlaWdodCwg
cm90YXRpb24pOwotICAgIH0pOwotfQotCi12b2lkIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJj
ZTo6cHJvY2Vzc05ld1NhbXBsZShDTVNhbXBsZUJ1ZmZlclJlZiBzYW1wbGUsIHVuc2lnbmVkIHdp
ZHRoLCB1bnNpZ25lZCBoZWlnaHQsIE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uIHJvdGF0aW9u
KQotewotICAgIG1fYnVmZmVyID0gc2FtcGxlOwotICAgIGlmICh3aWR0aCAhPSBtX2N1cnJlbnRT
ZXR0aW5ncy53aWR0aCgpIHx8IGhlaWdodCAhPSBtX2N1cnJlbnRTZXR0aW5ncy5oZWlnaHQoKSkg
ewotICAgICAgICBtX2N1cnJlbnRTZXR0aW5ncy5zZXRXaWR0aCh3aWR0aCk7Ci0gICAgICAgIG1f
Y3VycmVudFNldHRpbmdzLnNldEhlaWdodChoZWlnaHQpOwotICAgICAgICBzZXR0aW5nc0RpZENo
YW5nZSgpOwotICAgIH0KLQotICAgIHZpZGVvU2FtcGxlQXZhaWxhYmxlKE1lZGlhU2FtcGxlQVZG
T2JqQzo6Y3JlYXRlKHNhbXBsZSwgcm90YXRpb24pKTsKLX0KLQotY29uc3QgUmVhbHRpbWVNZWRp
YVNvdXJjZUNhcGFiaWxpdGllcyYgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlOjpjYXBhYmls
aXRpZXMoKSBjb25zdAotewotICAgIHJldHVybiBSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0
aWVzOjplbXB0eUNhcGFiaWxpdGllcygpOwotfQotCi1jb25zdCBSZWFsdGltZU1lZGlhU291cmNl
U2V0dGluZ3MmIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6c2V0dGluZ3MoKSBjb25zdAot
ewotICAgIHJldHVybiBtX2N1cnJlbnRTZXR0aW5nczsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gVVNFKExJQldFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2Uu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUluY29t
aW5nVmlkZW9Tb3VyY2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWViN2MzNjRm
ZTMyMzIyMjJlYWI0ZjI1YjdiNDEwMGNjOTEwMjgwOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9tYWMvUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4
NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgot
ICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBv
ZiBFcmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwot
ICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0g
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIFVTRShMSUJXRUJSVEMpCi0KLSNpbmNs
dWRlICJMaWJXZWJSVENNYWNyb3MuaCIKLSNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNlLmgi
Ci0jaW5jbHVkZSA8d2VicnRjL2FwaS9tZWRpYXN0cmVhbWludGVyZmFjZS5oPgotI2luY2x1ZGUg
PHd0Zi9SZXRhaW5QdHIuaD4KLQotdXNpbmcgQ01TYW1wbGVCdWZmZXJSZWYgPSBzdHJ1Y3Qgb3Bh
cXVlQ01TYW1wbGVCdWZmZXIqOwotdXNpbmcgQ1ZQaXhlbEJ1ZmZlclJlZiA9IHN0cnVjdCBfX0NW
QnVmZmVyKjsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBDYXB0dXJlRGV2aWNlOwot
Ci1jbGFzcyBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UgZmluYWwgOiBwdWJsaWMgUmVhbHRp
bWVNZWRpYVNvdXJjZSwgcHJpdmF0ZSBydGM6OlZpZGVvU2lua0ludGVyZmFjZTx3ZWJydGM6OlZp
ZGVvRnJhbWU+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFJlYWx0aW1lSW5jb21pbmdWaWRl
b1NvdXJjZT4gY3JlYXRlKHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvVHJhY2tJbnRl
cmZhY2U+JiYsIFN0cmluZyYmKTsKLSAgICB+UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlKCkg
eyBzdG9wUHJvZHVjaW5nRGF0YSgpOyB9Ci0KLSAgICB2b2lkIHNldFNvdXJjZVRyYWNrKHJ0Yzo6
c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvVHJhY2tJbnRlcmZhY2U+JiYpOwotCi1wcml2YXRl
OgotICAgIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZShydGM6OnNjb3BlZF9yZWZwdHI8d2Vi
cnRjOjpWaWRlb1RyYWNrSW50ZXJmYWNlPiYmLCBTdHJpbmcmJik7Ci0KLSAgICAvLyBSZWFsdGlt
ZU1lZGlhU291cmNlIEFQSQotICAgIHZvaWQgc3RhcnRQcm9kdWNpbmdEYXRhKCkgZmluYWw7Ci0g
ICAgdm9pZCBzdG9wUHJvZHVjaW5nRGF0YSgpICBmaW5hbDsKLQotICAgIGNvbnN0IFJlYWx0aW1l
TWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMmIGNhcGFiaWxpdGllcygpIGNvbnN0IGZpbmFsOwotICAg
IGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyYgc2V0dGluZ3MoKSBjb25zdCBmaW5h
bDsKLQotICAgIHZvaWQgcHJvY2Vzc05ld1NhbXBsZShDTVNhbXBsZUJ1ZmZlclJlZiwgdW5zaWdu
ZWQsIHVuc2lnbmVkLCBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbik7Ci0KLSAgICBib29sIGFw
cGx5U2l6ZShjb25zdCBJbnRTaXplJikgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgLy8g
cnRjOjpWaWRlb1NpbmtJbnRlcmZhY2UKLSAgICB2b2lkIE9uRnJhbWUoY29uc3Qgd2VicnRjOjpW
aWRlb0ZyYW1lJikgZmluYWw7Ci0KLSAgICBDVlBpeGVsQnVmZmVyUmVmIHBpeGVsQnVmZmVyRnJv
bVZpZGVvRnJhbWUoY29uc3Qgd2VicnRjOjpWaWRlb0ZyYW1lJik7Ci0KLSAgICBSZWFsdGltZU1l
ZGlhU291cmNlU2V0dGluZ3MgbV9jdXJyZW50U2V0dGluZ3M7Ci0gICAgcnRjOjpzY29wZWRfcmVm
cHRyPHdlYnJ0Yzo6VmlkZW9UcmFja0ludGVyZmFjZT4gbV92aWRlb1RyYWNrOwotICAgIFJldGFp
blB0cjxDTVNhbXBsZUJ1ZmZlclJlZj4gbV9idWZmZXI7Ci0gICAgUmV0YWluUHRyPENWUGl4ZWxC
dWZmZXJSZWY+IG1fYmxhY2tGcmFtZTsKLSAgICBpbnQgbV9ibGFja0ZyYW1lV2lkdGggeyAwIH07
Ci0gICAgaW50IG1fYmxhY2tGcmFtZUhlaWdodCB7IDAgfTsKLSNpZiAhUkVMRUFTRV9MT0dfRElT
QUJMRUQKLSAgICBzaXplX3QgbV9udW1iZXJPZkZyYW1lcyB7IDAgfTsKLSNlbmRpZgotfTsKLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKExJQldFQlJUQykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUlu
Y29taW5nVmlkZW9Tb3VyY2VNYWMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1hYy5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MTQxZGE5OWM5YWU5MmM2ZjllMDkyYWZiMmU5N2JiNjY5ZGE1ZGNhMgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUluY29t
aW5nVmlkZW9Tb3VyY2VNYWMuY3BwCkBAIC0wLDAgKzEsMTY4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0
aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICAgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTWFjLmgiCisK
KyNpZiBVU0UoTElCV0VCUlRDKQorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIk1l
ZGlhU2FtcGxlQVZGT2JqQy5oIgorI2luY2x1ZGUgPHdlYnJ0Yy9zZGsvb2JqYy9GcmFtZXdvcmsv
Q2xhc3Nlcy9WaWRlby9jb3JldmlkZW9fZnJhbWVfYnVmZmVyLmg+CisKKyNpbmNsdWRlICJDb3Jl
TWVkaWFTb2Z0TGluay5oIgorI2luY2x1ZGUgIkNvcmVWaWRlb1NvZnRMaW5rLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworUmVmPFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1hYz4gUmVh
bHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTWFjOjpjcmVhdGUocnRjOjpzY29wZWRfcmVmcHRyPHdl
YnJ0Yzo6VmlkZW9UcmFja0ludGVyZmFjZT4mJiB2aWRlb1RyYWNrLCBTdHJpbmcmJiB0cmFja0lk
KQoreworICAgIGF1dG8gc291cmNlID0gYWRvcHRSZWYoKm5ldyBSZWFsdGltZUluY29taW5nVmlk
ZW9Tb3VyY2VNYWMoV1RGTW92ZSh2aWRlb1RyYWNrKSwgV1RGTW92ZSh0cmFja0lkKSkpOworICAg
IHJldHVybiBzb3VyY2U7Cit9CisKK1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1hYzo6UmVh
bHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTWFjKHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZp
ZGVvVHJhY2tJbnRlcmZhY2U+JiYgdmlkZW9UcmFjaywgU3RyaW5nJiYgdmlkZW9UcmFja0lkKQor
ICAgIDogUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlKFdURk1vdmUodmlkZW9UcmFjayksIFdU
Rk1vdmUodmlkZW9UcmFja0lkKSkKK3sKK30KKworQ1ZQaXhlbEJ1ZmZlclJlZiBSZWFsdGltZUlu
Y29taW5nVmlkZW9Tb3VyY2VNYWM6OnBpeGVsQnVmZmVyRnJvbVZpZGVvRnJhbWUoY29uc3Qgd2Vi
cnRjOjpWaWRlb0ZyYW1lJiBmcmFtZSkKK3sKKyAgICBpZiAobXV0ZWQoKSkgeworICAgICAgICBp
ZiAoIW1fYmxhY2tGcmFtZSB8fCBtX2JsYWNrRnJhbWVXaWR0aCAhPSBmcmFtZS53aWR0aCgpIHx8
IG1fYmxhY2tGcmFtZUhlaWdodCAhPSBmcmFtZS5oZWlnaHQoKSkgeworICAgICAgICAgICAgQ1ZQ
aXhlbEJ1ZmZlclJlZiBwaXhlbEJ1ZmZlciA9IG51bGxwdHI7CisgICAgICAgICAgICBhdXRvIHN0
YXR1cyA9IENWUGl4ZWxCdWZmZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgZnJhbWUud2lk
dGgoKSwgZnJhbWUuaGVpZ2h0KCksIGtDVlBpeGVsRm9ybWF0VHlwZV80MjBZcENiQ3I4UGxhbmFy
LCBudWxscHRyLCAmcGl4ZWxCdWZmZXIpOworICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChzdGF0
dXMsIHN0YXR1cyA9PSBub0Vycik7CisKKyAgICAgICAgICAgIG1fYmxhY2tGcmFtZSA9IHBpeGVs
QnVmZmVyOworICAgICAgICAgICAgbV9ibGFja0ZyYW1lV2lkdGggPSBmcmFtZS53aWR0aCgpOwor
ICAgICAgICAgICAgbV9ibGFja0ZyYW1lSGVpZ2h0ID0gZnJhbWUuaGVpZ2h0KCk7CisKKyAgICAg
ICAgICAgIHN0YXR1cyA9IENWUGl4ZWxCdWZmZXJMb2NrQmFzZUFkZHJlc3MocGl4ZWxCdWZmZXIs
IDApOworICAgICAgICAgICAgQVNTRVJUKHN0YXR1cyA9PSBub0Vycik7CisgICAgICAgICAgICB2
b2lkKiBkYXRhID0gQ1ZQaXhlbEJ1ZmZlckdldEJhc2VBZGRyZXNzKHBpeGVsQnVmZmVyKTsKKyAg
ICAgICAgICAgIHNpemVfdCB5TGVuZ3RoID0gZnJhbWUud2lkdGgoKSAqIGZyYW1lLmhlaWdodCgp
OworICAgICAgICAgICAgbWVtc2V0KGRhdGEsIDAsIHlMZW5ndGgpOworICAgICAgICAgICAgbWVt
c2V0KHN0YXRpY19jYXN0PHVpbnQ4X3QqPihkYXRhKSArIHlMZW5ndGgsIDEyOCwgeUxlbmd0aCAv
IDIpOworCisgICAgICAgICAgICBzdGF0dXMgPSBDVlBpeGVsQnVmZmVyVW5sb2NrQmFzZUFkZHJl
c3MocGl4ZWxCdWZmZXIsIDApOworICAgICAgICAgICAgQVNTRVJUKCFzdGF0dXMpOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBtX2JsYWNrRnJhbWUuZ2V0KCk7CisgICAgfQorICAgIGF1dG8g
YnVmZmVyID0gZnJhbWUudmlkZW9fZnJhbWVfYnVmZmVyKCk7CisgICAgQVNTRVJUKGJ1ZmZlci0+
dHlwZSgpID09IHdlYnJ0Yzo6VmlkZW9GcmFtZUJ1ZmZlcjo6VHlwZTo6a05hdGl2ZSk7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PHdlYnJ0Yzo6Q29yZVZpZGVvRnJhbWVCdWZmZXImPigqYnVmZmVy
KS5waXhlbF9idWZmZXIoKTsKK30KKwordm9pZCBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VN
YWM6Ok9uRnJhbWUoY29uc3Qgd2VicnRjOjpWaWRlb0ZyYW1lJiBmcmFtZSkKK3sKKyAgICBpZiAo
IWlzUHJvZHVjaW5nRGF0YSgpKQorICAgICAgICByZXR1cm47CisKKyNpZiAhUkVMRUFTRV9MT0df
RElTQUJMRUQKKyAgICBpZiAoISgrK21fbnVtYmVyT2ZGcmFtZXMgJSAzMCkpCisgICAgICAgIFJF
TEVBU0VfTE9HKE1lZGlhU3RyZWFtLCAiUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTWFjOjpP
bkZyYW1lICV6dSBmcmFtZSIsIG1fbnVtYmVyT2ZGcmFtZXMpOworI2VuZGlmCisKKyAgICBhdXRv
IHBpeGVsQnVmZmVyID0gcGl4ZWxCdWZmZXJGcm9tVmlkZW9GcmFtZShmcmFtZSk7CisKKyAgICAv
LyBGSVhNRTogQ29udmVydCB0aW1pbmcgaW5mb3JtYXRpb24gZnJvbSBWaWRlb0ZyYW1lIHRvIENN
U2FtcGxlVGltaW5nSW5mby4KKyAgICAvLyBGb3IgdGhlIG1vbWVudCwgd2Ugd2lsbCBwcmV0ZW5k
IHRoYXQgZnJhbWVzIHNob3VsZCBiZSByZW5kZXJlZCBhc2FwLgorICAgIENNU2FtcGxlVGltaW5n
SW5mbyB0aW1pbmdJbmZvOworICAgIHRpbWluZ0luZm8ucHJlc2VudGF0aW9uVGltZVN0YW1wID0g
a0NNVGltZUludmFsaWQ7CisgICAgdGltaW5nSW5mby5kZWNvZGVUaW1lU3RhbXAgPSBrQ01UaW1l
SW52YWxpZDsKKyAgICB0aW1pbmdJbmZvLmR1cmF0aW9uID0ga0NNVGltZUludmFsaWQ7CisKKyAg
ICBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25SZWYgZm9ybWF0RGVzY3JpcHRpb247CisgICAgT1NT
dGF0dXMgb3N0YXR1cyA9IENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbkNyZWF0ZUZvckltYWdlQnVm
ZmVyKGtDRkFsbG9jYXRvckRlZmF1bHQsIChDVkltYWdlQnVmZmVyUmVmKXBpeGVsQnVmZmVyLCAm
Zm9ybWF0RGVzY3JpcHRpb24pOworICAgIGlmIChvc3RhdHVzICE9IG5vRXJyKSB7CisgICAgICAg
IExPR19FUlJPUigiRmFpbGVkIHRvIGluaXRpYWxpemUgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9u
OiAlZCIsIHN0YXRpY19jYXN0PGludD4ob3N0YXR1cykpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgQ01TYW1wbGVCdWZmZXJSZWYgc2FtcGxlQnVmZmVyOworICAgIG9zdGF0dXMgPSBD
TVNhbXBsZUJ1ZmZlckNyZWF0ZVJlYWR5V2l0aEltYWdlQnVmZmVyKGtDRkFsbG9jYXRvckRlZmF1
bHQsIChDVkltYWdlQnVmZmVyUmVmKXBpeGVsQnVmZmVyLCBmb3JtYXREZXNjcmlwdGlvbiwgJnRp
bWluZ0luZm8sICZzYW1wbGVCdWZmZXIpOworICAgIGlmIChvc3RhdHVzICE9IG5vRXJyKSB7Cisg
ICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSB0aGUgc2FtcGxlIGJ1ZmZlcjogJWQi
LCBzdGF0aWNfY2FzdDxpbnQ+KG9zdGF0dXMpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBDRlJlbGVhc2UoZm9ybWF0RGVzY3JpcHRpb24pOworCisgICAgYXV0byBzYW1wbGUgPSBhZG9w
dENGKHNhbXBsZUJ1ZmZlcik7CisKKyAgICBDRkFycmF5UmVmIGF0dGFjaG1lbnRzQXJyYXkgPSBD
TVNhbXBsZUJ1ZmZlckdldFNhbXBsZUF0dGFjaG1lbnRzQXJyYXkoc2FtcGxlQnVmZmVyLCB0cnVl
KTsKKyAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCBDRkFycmF5R2V0Q291bnQoYXR0YWNobWVu
dHNBcnJheSk7ICsraSkgeworICAgICAgICBDRk11dGFibGVEaWN0aW9uYXJ5UmVmIGF0dGFjaG1l
bnRzID0gKENGTXV0YWJsZURpY3Rpb25hcnlSZWYpQ0ZBcnJheUdldFZhbHVlQXRJbmRleChhdHRh
Y2htZW50c0FycmF5LCBpKTsKKyAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUoYXR0YWNobWVu
dHMsIGtDTVNhbXBsZUF0dGFjaG1lbnRLZXlfRGlzcGxheUltbWVkaWF0ZWx5LCBrQ0ZCb29sZWFu
VHJ1ZSk7CisgICAgfQorCisgICAgdW5zaWduZWQgd2lkdGggPSBmcmFtZS53aWR0aCgpOworICAg
IHVuc2lnbmVkIGhlaWdodCA9IGZyYW1lLmhlaWdodCgpOworCisgICAgTWVkaWFTYW1wbGU6OlZp
ZGVvUm90YXRpb24gcm90YXRpb247CisgICAgc3dpdGNoIChmcmFtZS5yb3RhdGlvbigpKSB7Cisg
ICAgY2FzZSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzA6CisgICAgICAgIHJvdGF0aW9uID0gTWVk
aWFTYW1wbGU6OlZpZGVvUm90YXRpb246Ok5vbmU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
d2VicnRjOjprVmlkZW9Sb3RhdGlvbl8xODA6CisgICAgICAgIHJvdGF0aW9uID0gTWVkaWFTYW1w
bGU6OlZpZGVvUm90YXRpb246OlVwc2lkZURvd247CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
d2VicnRjOjprVmlkZW9Sb3RhdGlvbl85MDoKKyAgICAgICAgcm90YXRpb24gPSBNZWRpYVNhbXBs
ZTo6VmlkZW9Sb3RhdGlvbjo6UmlnaHQ7CisgICAgICAgIHN0ZDo6c3dhcCh3aWR0aCwgaGVpZ2h0
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzI3MDoK
KyAgICAgICAgcm90YXRpb24gPSBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6TGVmdDsKKyAg
ICAgICAgc3RkOjpzd2FwKHdpZHRoLCBoZWlnaHQpOworICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICBSZWZQdHI8UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTWFjPiBwcm90ZWN0ZWRUaGlz
KHRoaXMpOworICAgIGNhbGxPbk1haW5UaHJlYWQoW3Byb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHBy
b3RlY3RlZFRoaXMpLCBzYW1wbGUgPSBXVEZNb3ZlKHNhbXBsZSksIHdpZHRoLCBoZWlnaHQsIHJv
dGF0aW9uXSB7CisgICAgICAgIHByb3RlY3RlZFRoaXMtPnByb2Nlc3NOZXdTYW1wbGUoc2FtcGxl
LmdldCgpLCB3aWR0aCwgaGVpZ2h0LCByb3RhdGlvbik7CisgICAgfSk7Cit9CisKK3ZvaWQgUmVh
bHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTWFjOjpwcm9jZXNzTmV3U2FtcGxlKENNU2FtcGxlQnVm
ZmVyUmVmIHNhbXBsZSwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgTWVkaWFTYW1w
bGU6OlZpZGVvUm90YXRpb24gcm90YXRpb24pCit7CisgICAgbV9idWZmZXIgPSBzYW1wbGU7Cisg
ICAgaWYgKHdpZHRoICE9IG1fY3VycmVudFNldHRpbmdzLndpZHRoKCkgfHwgaGVpZ2h0ICE9IG1f
Y3VycmVudFNldHRpbmdzLmhlaWdodCgpKSB7CisgICAgICAgIG1fY3VycmVudFNldHRpbmdzLnNl
dFdpZHRoKHdpZHRoKTsKKyAgICAgICAgbV9jdXJyZW50U2V0dGluZ3Muc2V0SGVpZ2h0KGhlaWdo
dCk7CisgICAgICAgIHNldHRpbmdzRGlkQ2hhbmdlKCk7CisgICAgfQorCisgICAgdmlkZW9TYW1w
bGVBdmFpbGFibGUoTWVkaWFTYW1wbGVBVkZPYmpDOjpjcmVhdGUoc2FtcGxlLCByb3RhdGlvbikp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoTElCV0VCUlRD
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1Jl
YWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1hYy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1hYy5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmU4ODdhNjU1YjE0NjViZGY5ZjQ2MzA0ZDg2MDcwODZhNjU1ZTkwNjUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVJ
bmNvbWluZ1ZpZGVvU291cmNlTWFjLmgKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1
dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpZiBVU0UoTElCV0VCUlRDKQorCisjaW5jbHVkZSAiUmVhbHRpbWVJbmNvbWluZ1ZpZGVv
U291cmNlLmgiCisKK3VzaW5nIENNU2FtcGxlQnVmZmVyUmVmID0gc3RydWN0IG9wYXF1ZUNNU2Ft
cGxlQnVmZmVyKjsKK3VzaW5nIENWUGl4ZWxCdWZmZXJSZWYgPSBzdHJ1Y3QgX19DVkJ1ZmZlcio7
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291
cmNlTWFjIGZpbmFsIDogcHVibGljIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZSB7CitwdWJs
aWM6CisgICAgc3RhdGljIFJlZjxSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWM+IGNyZWF0
ZShydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb1RyYWNrSW50ZXJmYWNlPiYmLCBTdHJp
bmcmJik7CisKK3ByaXZhdGU6CisgICAgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTWFjKHJ0
Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvVHJhY2tJbnRlcmZhY2U+JiYsIFN0cmluZyYm
KTsKKworICAgIHZvaWQgcHJvY2Vzc05ld1NhbXBsZShDTVNhbXBsZUJ1ZmZlclJlZiwgdW5zaWdu
ZWQsIHVuc2lnbmVkLCBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbik7CisgICAgQ1ZQaXhlbEJ1
ZmZlclJlZiBwaXhlbEJ1ZmZlckZyb21WaWRlb0ZyYW1lKGNvbnN0IHdlYnJ0Yzo6VmlkZW9GcmFt
ZSYpOworCisgICAgLy8gcnRjOjpWaWRlb1NpbmtJbnRlcmZhY2UKKyAgICB2b2lkIE9uRnJhbWUo
Y29uc3Qgd2VicnRjOjpWaWRlb0ZyYW1lJikgZmluYWw7CisKKyAgICBSZXRhaW5QdHI8Q01TYW1w
bGVCdWZmZXJSZWY+IG1fYnVmZmVyOworICAgIFJldGFpblB0cjxDVlBpeGVsQnVmZmVyUmVmPiBt
X2JsYWNrRnJhbWU7CisgICAgaW50IG1fYmxhY2tGcmFtZVdpZHRoIHsgMCB9OworICAgIGludCBt
X2JsYWNrRnJhbWVIZWlnaHQgeyAwIH07CisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAg
c2l6ZV90IG1fbnVtYmVyT2ZGcmFtZXMgeyAwIH07CisjZW5kaWYKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShMSUJXRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1ZpZGVv
U291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFs
dGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAzZjQ1MGRmMzNjNmY2YTI1ODdkYTM5YjVlYzgyY2NmY2Q2MGEwZTdkLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsMjY2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkLCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIHJlcXVpcmVkIHRv
IGJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEFwcGxlIEluYy4gbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
LSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCi0gKiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKLSAqIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVhbHRpbWVPdXRnb2lu
Z1ZpZGVvU291cmNlLmgiCi0KLSNpZiBVU0UoTElCV0VCUlRDKQotCi0jaW5jbHVkZSAiTG9nZ2lu
Zy5oIgotI2luY2x1ZGUgPHdlYnJ0Yy9hcGkvdmlkZW8vaTQyMF9idWZmZXIuaD4KLSNpbmNsdWRl
IDx3ZWJydGMvY29tbW9uX3ZpZGVvL2xpYnl1di9pbmNsdWRlL3dlYnJ0Y19saWJ5dXYuaD4KLSNp
bmNsdWRlIDx3ZWJydGMvc2RrL29iamMvRnJhbWV3b3JrL0NsYXNzZXMvVmlkZW8vY29yZXZpZGVv
X2ZyYW1lX2J1ZmZlci5oPgotI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgotI2luY2x1ZGUg
PHd0Zi9NYWluVGhyZWFkLmg+Ci0KLSNpbmNsdWRlICJDb3JlTWVkaWFTb2Z0TGluay5oIgotI2lu
Y2x1ZGUgIkNvcmVWaWRlb1NvZnRMaW5rLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUmVh
bHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UoUmVm
PE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiYmIHZpZGVvU291cmNlKQotICAgIDogbV92aWRlb1Nv
dXJjZShXVEZNb3ZlKHZpZGVvU291cmNlKSkKLSAgICAsIG1fYmxhY2tGcmFtZVRpbWVyKCp0aGlz
LCAmUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpzZW5kT25lQmxhY2tGcmFtZSkKLXsKLSAg
ICBtX3ZpZGVvU291cmNlLT5hZGRPYnNlcnZlcigqdGhpcyk7Ci0gICAgaW5pdGlhbGl6ZUZyb21T
b3VyY2UoKTsKLX0KLQotYm9vbCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnNldFNvdXJj
ZShSZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYgbmV3U291cmNlKQotewotICAgIGlmICgh
bV9pbml0aWFsU2V0dGluZ3MpCi0gICAgICAgIG1faW5pdGlhbFNldHRpbmdzID0gbV92aWRlb1Nv
dXJjZS0+c291cmNlKCkuc2V0dGluZ3MoKTsKLQotICAgIG1fdmlkZW9Tb3VyY2UtPnJlbW92ZU9i
c2VydmVyKCp0aGlzKTsKLSAgICBtX3ZpZGVvU291cmNlID0gV1RGTW92ZShuZXdTb3VyY2UpOwot
ICAgIG1fdmlkZW9Tb3VyY2UtPmFkZE9ic2VydmVyKCp0aGlzKTsKLQotICAgIGluaXRpYWxpemVG
cm9tU291cmNlKCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBSZWFsdGltZU91dGdv
aW5nVmlkZW9Tb3VyY2U6OnN0b3AoKQotewotICAgIG1fdmlkZW9Tb3VyY2UtPnJlbW92ZU9ic2Vy
dmVyKCp0aGlzKTsKLSAgICBtX2JsYWNrRnJhbWVUaW1lci5zdG9wKCk7Ci0gICAgbV9pc1N0b3Bw
ZWQgPSB0cnVlOwotfQotCi12b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6dXBkYXRl
QmxhY2tGcmFtZXNTZW5kaW5nKCkKLXsKLSAgICBpZiAoIW1fbXV0ZWQgJiYgbV9lbmFibGVkKSB7
Ci0gICAgICAgIGlmIChtX2JsYWNrRnJhbWVUaW1lci5pc0FjdGl2ZSgpKQotICAgICAgICAgICAg
bV9ibGFja0ZyYW1lVGltZXIuc3RvcCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
c2VuZEJsYWNrRnJhbWVzSWZOZWVkZWQoKTsKLX0KLQotdm9pZCBSZWFsdGltZU91dGdvaW5nVmlk
ZW9Tb3VyY2U6OnNvdXJjZU11dGVkQ2hhbmdlZCgpCi17Ci0gICAgQVNTRVJUKG1fbXV0ZWQgIT0g
bV92aWRlb1NvdXJjZS0+bXV0ZWQoKSk7Ci0KLSAgICBtX211dGVkID0gbV92aWRlb1NvdXJjZS0+
bXV0ZWQoKTsKLQotICAgIHVwZGF0ZUJsYWNrRnJhbWVzU2VuZGluZygpOwotfQotCi12b2lkIFJl
YWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6c291cmNlRW5hYmxlZENoYW5nZWQoKQotewotICAg
IEFTU0VSVChtX2VuYWJsZWQgIT0gbV92aWRlb1NvdXJjZS0+ZW5hYmxlZCgpKTsKLQotICAgIG1f
ZW5hYmxlZCA9IG1fdmlkZW9Tb3VyY2UtPmVuYWJsZWQoKTsKLQotICAgIHVwZGF0ZUJsYWNrRnJh
bWVzU2VuZGluZygpOwotfQotCi12b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6aW5p
dGlhbGl6ZUZyb21Tb3VyY2UoKQotewotICAgIGNvbnN0IGF1dG8mIHNldHRpbmdzID0gbV92aWRl
b1NvdXJjZS0+c291cmNlKCkuc2V0dGluZ3MoKTsKLSAgICBtX3dpZHRoID0gc2V0dGluZ3Mud2lk
dGgoKTsKLSAgICBtX2hlaWdodCA9IHNldHRpbmdzLmhlaWdodCgpOwotCi0gICAgbV9tdXRlZCA9
IG1fdmlkZW9Tb3VyY2UtPm11dGVkKCk7Ci0gICAgbV9lbmFibGVkID0gbV92aWRlb1NvdXJjZS0+
ZW5hYmxlZCgpOwotCi0gICAgdXBkYXRlQmxhY2tGcmFtZXNTZW5kaW5nKCk7Ci19Ci0KLWJvb2wg
UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpHZXRTdGF0cyhTdGF0cyopCi17Ci0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi12b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6QWRkT3JV
cGRhdGVTaW5rKHJ0Yzo6VmlkZW9TaW5rSW50ZXJmYWNlPHdlYnJ0Yzo6VmlkZW9GcmFtZT4qIHNp
bmssIGNvbnN0IHJ0Yzo6VmlkZW9TaW5rV2FudHMmIHNpbmtXYW50cykKLXsKLSAgICBBU1NFUlQo
IXNpbmtXYW50cy5ibGFja19mcmFtZXMpOwotCi0gICAgaWYgKHNpbmtXYW50cy5yb3RhdGlvbl9h
cHBsaWVkKQotICAgICAgICBtX3Nob3VsZEFwcGx5Um90YXRpb24gPSB0cnVlOwotCi0gICAgaWYg
KCFtX3NpbmtzLmNvbnRhaW5zKHNpbmspKQotICAgICAgICBtX3NpbmtzLmFwcGVuZChzaW5rKTsK
LQotICAgIGNhbGxPbk1haW5UaHJlYWQoW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0o
KSB7Ci0gICAgICAgIHByb3RlY3RlZFRoaXMtPnNlbmRCbGFja0ZyYW1lc0lmTmVlZGVkKCk7Ci0g
ICAgfSk7Ci19Ci0KLXZvaWQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpSZW1vdmVTaW5r
KHJ0Yzo6VmlkZW9TaW5rSW50ZXJmYWNlPHdlYnJ0Yzo6VmlkZW9GcmFtZT4qIHNpbmspCi17Ci0g
ICAgbV9zaW5rcy5yZW1vdmVGaXJzdChzaW5rKTsKLQotICAgIGlmIChtX3NpbmtzLnNpemUoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9
IG1ha2VSZWYoKnRoaXMpXSgpIHsKLSAgICAgICAgaWYgKHByb3RlY3RlZFRoaXMtPm1fYmxhY2tG
cmFtZVRpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5tX2JsYWNr
RnJhbWVUaW1lci5zdG9wKCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgUmVhbHRpbWVPdXRnb2luZ1Zp
ZGVvU291cmNlOjpzZW5kQmxhY2tGcmFtZXNJZk5lZWRlZCgpCi17Ci0gICAgaWYgKG1fYmxhY2tG
cmFtZVRpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9zaW5r
cy5zaXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9tdXRlZCAmJiBtX2VuYWJs
ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV93aWR0aCB8fCAhbV9oZWlnaHQpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9ibGFja0ZyYW1lKSB7Ci0gICAgICAgIGF1dG8g
d2lkdGggPSBtX3dpZHRoOwotICAgICAgICBhdXRvIGhlaWdodCA9IG1faGVpZ2h0OwotICAgICAg
ICBpZiAobV9zaG91bGRBcHBseVJvdGF0aW9uICYmIChtX2N1cnJlbnRSb3RhdGlvbiA9PSB3ZWJy
dGM6OmtWaWRlb1JvdGF0aW9uXzAgfHwgbV9jdXJyZW50Um90YXRpb24gPT0gd2VicnRjOjprVmlk
ZW9Sb3RhdGlvbl85MCkpCi0gICAgICAgICAgICBzdGQ6OnN3YXAod2lkdGgsIGhlaWdodCk7Ci0g
ICAgICAgIGF1dG8gZnJhbWUgPSBtX2J1ZmZlclBvb2wuQ3JlYXRlQnVmZmVyKHdpZHRoLCBoZWln
aHQpOwotICAgICAgICBBU1NFUlQoZnJhbWUpOwotICAgICAgICBpZiAoIWZyYW1lKSB7Ci0gICAg
ICAgICAgICBSRUxFQVNFX0xPRyhXZWJSVEMsICJSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6
OnNlbmRCbGFja0ZyYW1lc0lmTmVlZGVkIHVuYWJsZSB0byBzZW5kIGJsYWNrIGZyYW1lcyIpOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHdlYnJ0Yzo6STQyMEJ1ZmZl
cjo6U2V0QmxhY2soZnJhbWUuZ2V0KCkpOwotICAgICAgICBtX2JsYWNrRnJhbWUgPSBXVEZNb3Zl
KGZyYW1lKTsKLSAgICB9Ci0gICAgc2VuZE9uZUJsYWNrRnJhbWUoKTsKLSAgICBtX2JsYWNrRnJh
bWVUaW1lci5zdGFydFJlcGVhdGluZygxX3MpOwotfQotCi12b2lkIFJlYWx0aW1lT3V0Z29pbmdW
aWRlb1NvdXJjZTo6c2VuZE9uZUJsYWNrRnJhbWUoKQotewotICAgIFJFTEVBU0VfTE9HKE1lZGlh
U3RyZWFtLCAiUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpzZW5kT25lQmxhY2tGcmFtZSIp
OwotICAgIHNlbmRGcmFtZShydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb0ZyYW1lQnVm
ZmVyPihtX2JsYWNrRnJhbWUpKTsKLX0KLQotdm9pZCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3Vy
Y2U6OnNlbmRGcmFtZShydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb0ZyYW1lQnVmZmVy
PiYmIGJ1ZmZlcikKLXsKLSAgICBpbnQ2NF90IHRpbWVzdGFtcE1pY3JvU2Vjb25kcyA9IG1vbm90
b25pY2FsbHlJbmNyZWFzaW5nVGltZU1TKCkgKiAxMDAwOwotICAgIHdlYnJ0Yzo6VmlkZW9GcmFt
ZSBmcmFtZShidWZmZXIsIG1fc2hvdWxkQXBwbHlSb3RhdGlvbiA/IHdlYnJ0Yzo6a1ZpZGVvUm90
YXRpb25fMCA6IG1fY3VycmVudFJvdGF0aW9uLCB0aW1lc3RhbXBNaWNyb1NlY29uZHMpOwotICAg
IGZvciAoYXV0byogc2luayA6IG1fc2lua3MpCi0gICAgICAgIHNpbmstPk9uRnJhbWUoZnJhbWUp
OwotfQotCi12b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6dmlkZW9TYW1wbGVBdmFp
bGFibGUoTWVkaWFTYW1wbGUmIHNhbXBsZSkKLXsKLSAgICBpZiAoIW1fc2lua3Muc2l6ZSgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9tdXRlZCB8fCAhbV9lbmFibGVkKQotICAgICAg
ICByZXR1cm47Ci0KLSNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKLSAgICBpZiAoISgrK21fbnVt
YmVyT2ZGcmFtZXMgJSAzMCkpCi0gICAgICAgIFJFTEVBU0VfTE9HKE1lZGlhU3RyZWFtLCAiUmVh
bHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpzZW5kRnJhbWUgJXp1IGZyYW1lIiwgbV9udW1iZXJP
ZkZyYW1lcyk7Ci0jZW5kaWYKLQotICAgIHN3aXRjaCAoc2FtcGxlLnZpZGVvUm90YXRpb24oKSkg
ewotICAgIGNhc2UgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246Ok5vbmU6Ci0gICAgICAgIG1f
Y3VycmVudFJvdGF0aW9uID0gd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8wOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpVcHNpZGVEb3duOgotICAg
ICAgICBtX2N1cnJlbnRSb3RhdGlvbiA9IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMTgwOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpSaWdodDoK
LSAgICAgICAgbV9jdXJyZW50Um90YXRpb24gPSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzkwOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpMZWZ0
OgotICAgICAgICBtX2N1cnJlbnRSb3RhdGlvbiA9IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMjcw
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBBU1NFUlQoc2FtcGxlLnBsYXRmb3JtU2Ft
cGxlKCkudHlwZSA9PSBQbGF0Zm9ybVNhbXBsZTo6Q01TYW1wbGVCdWZmZXJUeXBlKTsKLSAgICBh
dXRvIHBpeGVsQnVmZmVyID0gc3RhdGljX2Nhc3Q8Q1ZQaXhlbEJ1ZmZlclJlZj4oQ01TYW1wbGVC
dWZmZXJHZXRJbWFnZUJ1ZmZlcihzYW1wbGUucGxhdGZvcm1TYW1wbGUoKS5zYW1wbGUuY21TYW1w
bGVCdWZmZXIpKTsKLSAgICBhdXRvIHBpeGVsRm9ybWF0VHlwZSA9IENWUGl4ZWxCdWZmZXJHZXRQ
aXhlbEZvcm1hdFR5cGUocGl4ZWxCdWZmZXIpOwotCi0gICAgaWYgKHBpeGVsRm9ybWF0VHlwZSA9
PSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyOFBsYW5hciB8fCBwaXhlbEZvcm1hdFR5cGUg
PT0ga0NWUGl4ZWxGb3JtYXRUeXBlXzQyMFlwQ2JDcjhCaVBsYW5hckZ1bGxSYW5nZSkgewotICAg
ICAgICBydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb0ZyYW1lQnVmZmVyPiBidWZmZXIg
PSBuZXcgcnRjOjpSZWZDb3VudGVkT2JqZWN0PHdlYnJ0Yzo6Q29yZVZpZGVvRnJhbWVCdWZmZXI+
KHBpeGVsQnVmZmVyKTsKLSAgICAgICAgaWYgKG1fc2hvdWxkQXBwbHlSb3RhdGlvbiAmJiBtX2N1
cnJlbnRSb3RhdGlvbiAhPSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzApIHsKLSAgICAgICAgICAg
IC8vIEZJWE1FOiBXZSBzaG91bGQgbWFrZSBBVlZpZGVvQ2FwdHVyZVNvdXJjZSBoYW5kbGUgdGhl
IHJvdGF0aW9uIHdoZW5ldmVyIHBvc3NpYmxlLgotICAgICAgICAgICAgLy8gVGhpcyBpbXBsZW1l
bnRhdGlvbiBpcyBpbmVmZmljaWVudCwgd2Ugc2hvdWxkIHJvdGF0ZSBvbiB0aGUgQ01TYW1wbGVC
dWZmZXIgZGlyZWN0bHkgaW5zdGVhZCBvZiBkb2luZyB0aGlzIGRvdWJsZSBhbGxvY2F0aW9uLgot
ICAgICAgICAgICAgYXV0byByb3RhdGVkQnVmZmVyID0gYnVmZmVyLT5Ub0k0MjAoKTsKLSAgICAg
ICAgICAgIEFTU0VSVChyb3RhdGVkQnVmZmVyKTsKLSAgICAgICAgICAgIGJ1ZmZlciA9IHdlYnJ0
Yzo6STQyMEJ1ZmZlcjo6Um90YXRlKCpyb3RhdGVkQnVmZmVyLCBtX2N1cnJlbnRSb3RhdGlvbik7
Ci0gICAgICAgIH0KLSAgICAgICAgc2VuZEZyYW1lKFdURk1vdmUoYnVmZmVyKSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBDVlBpeGVsQnVmZmVyTG9ja0Jhc2VBZGRyZXNzKHBpeGVs
QnVmZmVyLCAwKTsKLSAgICBhdXRvKiBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3Qq
PihDVlBpeGVsQnVmZmVyR2V0QmFzZUFkZHJlc3NPZlBsYW5lKHBpeGVsQnVmZmVyLCAwKSk7Ci0K
LSAgICBBU1NFUlQobV93aWR0aCk7Ci0gICAgQVNTRVJUKG1faGVpZ2h0KTsKLQotICAgIGF1dG8g
bmV3QnVmZmVyID0gbV9idWZmZXJQb29sLkNyZWF0ZUJ1ZmZlcihtX3dpZHRoLCBtX2hlaWdodCk7
Ci0gICAgQVNTRVJUKG5ld0J1ZmZlcik7Ci0gICAgaWYgKCFuZXdCdWZmZXIpIHsKLSAgICAgICAg
UkVMRUFTRV9MT0coV2ViUlRDLCAiUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjp2aWRlb1Nh
bXBsZUF2YWlsYWJsZSB1bmFibGUgdG8gYWxsb2NhdGUgYnVmZmVyIGZvciBjb252ZXJzaW9uIHRv
IFlVViIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChwaXhlbEZvcm1hdFR5cGUg
PT0ga0NWUGl4ZWxGb3JtYXRUeXBlXzMyQkdSQSkKLSAgICAgICAgd2VicnRjOjpDb252ZXJ0VG9J
NDIwKHdlYnJ0Yzo6VmlkZW9UeXBlOjprQVJHQiwgc291cmNlLCAwLCAwLCBtX3dpZHRoLCBtX2hl
aWdodCwgMCwgd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8wLCBuZXdCdWZmZXIpOwotICAgIGVsc2Ug
ewotICAgICAgICBBU1NFUlQocGl4ZWxGb3JtYXRUeXBlID09IGtDVlBpeGVsRm9ybWF0VHlwZV8z
MkFSR0IpOwotICAgICAgICB3ZWJydGM6OkNvbnZlcnRUb0k0MjAod2VicnRjOjpWaWRlb1R5cGU6
OmtCR1JBLCBzb3VyY2UsIDAsIDAsIG1fd2lkdGgsIG1faGVpZ2h0LCAwLCB3ZWJydGM6OmtWaWRl
b1JvdGF0aW9uXzAsIG5ld0J1ZmZlcik7Ci0gICAgfQotICAgIENWUGl4ZWxCdWZmZXJVbmxvY2tC
YXNlQWRkcmVzcyhwaXhlbEJ1ZmZlciwgMCk7Ci0gICAgaWYgKG1fc2hvdWxkQXBwbHlSb3RhdGlv
biAmJiBtX2N1cnJlbnRSb3RhdGlvbiAhPSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzApCi0gICAg
ICAgIG5ld0J1ZmZlciA9IHdlYnJ0Yzo6STQyMEJ1ZmZlcjo6Um90YXRlKCpuZXdCdWZmZXIsIG1f
Y3VycmVudFJvdGF0aW9uKTsKLSAgICBzZW5kRnJhbWUoV1RGTW92ZShuZXdCdWZmZXIpKTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKExJQldFQlJUQykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGlt
ZU91dGdvaW5nVmlkZW9Tb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL21hYy9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMjdlNzhiNTE2NWQwNTY5NWZlMWE0NTg0MDg1OWJiMTFjMTJlNDg4Ni4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmgK
KysrIC9kZXYvbnVsbApAQCAtMSwxMTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NyBBcHBsZSBJbmMuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgcmVx
dWlyZWQgdG8gYmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5l
aXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRz
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKLSAq
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0gKiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UgotICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgVVNFKExJQldFQlJUQykKLQot
I2luY2x1ZGUgIkxpYldlYlJUQ01hY3Jvcy5oIgotI2luY2x1ZGUgIk1lZGlhU3RyZWFtVHJhY2tQ
cml2YXRlLmgiCi0jaW5jbHVkZSA8VGltZXIuaD4KLSNpbmNsdWRlIDx3ZWJydGMvYXBpL21lZGlh
c3RyZWFtaW50ZXJmYWNlLmg+Ci0jaW5jbHVkZSA8d2VicnRjL2Jhc2Uvb3B0aW9uYWwuaD4KLSNp
bmNsdWRlIDx3ZWJydGMvY29tbW9uX3ZpZGVvL2luY2x1ZGUvaTQyMF9idWZmZXJfcG9vbC5oPgot
I2luY2x1ZGUgPHdlYnJ0Yy9tZWRpYS9iYXNlL3ZpZGVvc2lua2ludGVyZmFjZS5oPgotI2luY2x1
ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5o
PgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1Nv
dXJjZSBmaW5hbCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxSZWFsdGltZU91dGdvaW5n
VmlkZW9Tb3VyY2U+LCBwdWJsaWMgd2VicnRjOjpWaWRlb1RyYWNrU291cmNlSW50ZXJmYWNlLCBw
cml2YXRlIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpPYnNlcnZlciB7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIFJlZjxSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U+IGNyZWF0ZShSZWY8TWVkaWFT
dHJlYW1UcmFja1ByaXZhdGU+JiYgdmlkZW9Tb3VyY2UpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlKFdURk1vdmUodmlkZW9Tb3VyY2UpKSk7IH0KLSAg
ICB+UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlKCkgeyBzdG9wKCk7IH0KLQotICAgIHZvaWQg
c3RvcCgpOwotICAgIGJvb2wgc2V0U291cmNlKFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4m
Jik7Ci0gICAgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdmlkZW9Tb3VyY2UuZ2V0KCk7IH0KLQotICAgIGludCBBZGRSZWYoKSBjb25zdCBmaW5hbCB7
IHJlZigpOyByZXR1cm4gcmVmQ291bnQoKTsgfQotICAgIGludCBSZWxlYXNlKCkgY29uc3QgZmlu
YWwgeyBkZXJlZigpOyByZXR1cm4gcmVmQ291bnQoKTsgfQotCi0gICAgdm9pZCBzZXRBcHBseVJv
dGF0aW9uKGJvb2wgc2hvdWxkQXBwbHlSb3RhdGlvbikgeyBtX3Nob3VsZEFwcGx5Um90YXRpb24g
PSBzaG91bGRBcHBseVJvdGF0aW9uOyB9Ci0KLXByaXZhdGU6Ci0gICAgUmVhbHRpbWVPdXRnb2lu
Z1ZpZGVvU291cmNlKFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4mJik7Ci0KLSAgICB2b2lk
IHNlbmRGcmFtZShydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb0ZyYW1lQnVmZmVyPiYm
KTsKLSAgICB2b2lkIHNlbmRCbGFja0ZyYW1lc0lmTmVlZGVkKCk7Ci0gICAgdm9pZCBzZW5kT25l
QmxhY2tGcmFtZSgpOwotICAgIHZvaWQgaW5pdGlhbGl6ZUZyb21Tb3VyY2UoKTsKLSAgICB2b2lk
IHVwZGF0ZUJsYWNrRnJhbWVzU2VuZGluZygpOwotCi0gICAgLy8gTm90aWZpZXIgQVBJCi0gICAg
dm9pZCBSZWdpc3Rlck9ic2VydmVyKHdlYnJ0Yzo6T2JzZXJ2ZXJJbnRlcmZhY2UqKSBmaW5hbCB7
IH0KLSAgICB2b2lkIFVucmVnaXN0ZXJPYnNlcnZlcih3ZWJydGM6Ok9ic2VydmVySW50ZXJmYWNl
KikgZmluYWwgeyB9Ci0KLSAgICAvLyBWaWRlb1RyYWNrU291cmNlSW50ZXJmYWNlIEFQSQotICAg
IGJvb2wgaXNfc2NyZWVuY2FzdCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAg
cnRjOjpPcHRpb25hbDxib29sPiBuZWVkc19kZW5vaXNpbmcoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBydGM6Ok9wdGlvbmFsPGJvb2w+KCk7IH0KLSAgICBib29sIEdldFN0YXRzKFN0YXRzKikgZmlu
YWw7Ci0KLSAgICAvLyBNZWRpYVNvdXJjZUludGVyZmFjZSBBUEkKLSAgICBTb3VyY2VTdGF0ZSBz
dGF0ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIFNvdXJjZVN0YXRlKCk7IH0KLSAgICBib29sIHJl
bW90ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KLQotICAgIC8vIHJ0Yzo6VmlkZW9T
b3VyY2VJbnRlcmZhY2U8d2VicnRjOjpWaWRlb0ZyYW1lPiBBUEkKLSAgICB2b2lkIEFkZE9yVXBk
YXRlU2luayhydGM6OlZpZGVvU2lua0ludGVyZmFjZTx3ZWJydGM6OlZpZGVvRnJhbWU+KiwgY29u
c3QgcnRjOjpWaWRlb1NpbmtXYW50cyYpIGZpbmFsOwotICAgIHZvaWQgUmVtb3ZlU2luayhydGM6
OlZpZGVvU2lua0ludGVyZmFjZTx3ZWJydGM6OlZpZGVvRnJhbWU+KikgZmluYWw7Ci0KLSAgICB2
b2lkIHNvdXJjZU11dGVkQ2hhbmdlZCgpOwotICAgIHZvaWQgc291cmNlRW5hYmxlZENoYW5nZWQo
KTsKLSAgICB2b2lkIHZpZGVvU2FtcGxlQXZhaWxhYmxlKE1lZGlhU2FtcGxlJik7Ci0KLSAgICAv
LyBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6T2JzZXJ2ZXIgQVBJCi0gICAgdm9pZCB0cmFja011
dGVkQ2hhbmdlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYpIGZpbmFsIHsgc291cmNlTXV0ZWRD
aGFuZ2VkKCk7IH0KLSAgICB2b2lkIHRyYWNrRW5hYmxlZENoYW5nZWQoTWVkaWFTdHJlYW1UcmFj
a1ByaXZhdGUmKSBmaW5hbCB7IHNvdXJjZUVuYWJsZWRDaGFuZ2VkKCk7IH0KLSAgICB2b2lkIHRy
YWNrU2V0dGluZ3NDaGFuZ2VkKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJikgZmluYWwgeyBpbml0
aWFsaXplRnJvbVNvdXJjZSgpOyB9Ci0gICAgdm9pZCBzYW1wbGVCdWZmZXJVcGRhdGVkKE1lZGlh
U3RyZWFtVHJhY2tQcml2YXRlJiwgTWVkaWFTYW1wbGUmIHNhbXBsZSkgZmluYWwgeyB2aWRlb1Nh
bXBsZUF2YWlsYWJsZShzYW1wbGUpOyB9Ci0gICAgdm9pZCB0cmFja0VuZGVkKE1lZGlhU3RyZWFt
VHJhY2tQcml2YXRlJikgZmluYWwgeyB9Ci0KLSAgICBWZWN0b3I8cnRjOjpWaWRlb1NpbmtJbnRl
cmZhY2U8d2VicnRjOjpWaWRlb0ZyYW1lPio+IG1fc2lua3M7Ci0gICAgd2VicnRjOjpJNDIwQnVm
ZmVyUG9vbCBtX2J1ZmZlclBvb2w7Ci0gICAgUmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiBt
X3ZpZGVvU291cmNlOwotICAgIGJvb2wgbV9lbmFibGVkIHsgdHJ1ZSB9OwotICAgIGJvb2wgbV9t
dXRlZCB7IGZhbHNlIH07Ci0gICAgc3RkOjpvcHRpb25hbDxSZWFsdGltZU1lZGlhU291cmNlU2V0
dGluZ3M+IG1faW5pdGlhbFNldHRpbmdzOwotICAgIHdlYnJ0Yzo6VmlkZW9Sb3RhdGlvbiBtX2N1
cnJlbnRSb3RhdGlvbiB7IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMCB9OwotICAgIHVpbnQzMl90
IG1fd2lkdGggeyAwIH07Ci0gICAgdWludDMyX3QgbV9oZWlnaHQgeyAwIH07Ci0gICAgYm9vbCBt
X2lzU3RvcHBlZCB7IGZhbHNlIH07Ci0gICAgVGltZXIgbV9ibGFja0ZyYW1lVGltZXI7Ci0gICAg
cnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9GcmFtZUJ1ZmZlcj4gbV9ibGFja0ZyYW1l
OwotICAgIGJvb2wgbV9zaG91bGRBcHBseVJvdGF0aW9uIHsgZmFsc2UgfTsKLSNpZiAhUkVMRUFT
RV9MT0dfRElTQUJMRUQKLSAgICBzaXplX3QgbV9udW1iZXJPZkZyYW1lcyB7IDAgfTsKLSNlbmRp
ZgotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKExJQldFQlJU
QykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9S
ZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VNYWMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZU1hYy5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uN2VjZjU1OTU0MzkzYzNiZDg3N2ZjYzdlZDQ5OTNmZDBhOTUxZTYyNQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFs
dGltZU91dGdvaW5nVmlkZW9Tb3VyY2VNYWMuY3BwCkBAIC0wLDAgKzEsMTIxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSByZXF1aXJlZCB0byBiZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAq
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZU1hYy5oIgorCisjaWYgVVNFKExJ
QldFQlJUQykKKworI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlIDx3ZWJydGMvYXBpL3Zp
ZGVvL2k0MjBfYnVmZmVyLmg+CisjaW5jbHVkZSA8d2VicnRjL2NvbW1vbl92aWRlby9saWJ5dXYv
aW5jbHVkZS93ZWJydGNfbGlieXV2Lmg+CisjaW5jbHVkZSA8d2VicnRjL3Nkay9vYmpjL0ZyYW1l
d29yay9DbGFzc2VzL1ZpZGVvL2NvcmV2aWRlb19mcmFtZV9idWZmZXIuaD4KKworI2luY2x1ZGUg
IkNvcmVNZWRpYVNvZnRMaW5rLmgiCisjaW5jbHVkZSAiQ29yZVZpZGVvU29mdExpbmsuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VNYWM6OlJl
YWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZU1hYyhSZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+
JiYgdmlkZW9Tb3VyY2UpCisgICAgOiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UoV1RGTW92
ZSh2aWRlb1NvdXJjZSkpCit7Cit9CisKK3ZvaWQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNl
TWFjOjp2aWRlb1NhbXBsZUF2YWlsYWJsZShNZWRpYVNhbXBsZSYgc2FtcGxlKQoreworICAgIGlm
ICghbV9zaW5rcy5zaXplKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX211dGVkIHx8
ICFtX2VuYWJsZWQpCisgICAgICAgIHJldHVybjsKKworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxF
RAorICAgIGlmICghKCsrbV9udW1iZXJPZkZyYW1lcyAlIDMwKSkKKyAgICAgICAgUkVMRUFTRV9M
T0coTWVkaWFTdHJlYW0sICJSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VNYWM6OnNlbmRGcmFt
ZSAlenUgZnJhbWUiLCBtX251bWJlck9mRnJhbWVzKTsKKyNlbmRpZgorCisgICAgc3dpdGNoIChz
YW1wbGUudmlkZW9Sb3RhdGlvbigpKSB7CisgICAgY2FzZSBNZWRpYVNhbXBsZTo6VmlkZW9Sb3Rh
dGlvbjo6Tm9uZToKKyAgICAgICAgbV9jdXJyZW50Um90YXRpb24gPSB3ZWJydGM6OmtWaWRlb1Jv
dGF0aW9uXzA7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTWVkaWFTYW1wbGU6OlZpZGVvUm90
YXRpb246OlVwc2lkZURvd246CisgICAgICAgIG1fY3VycmVudFJvdGF0aW9uID0gd2VicnRjOjpr
VmlkZW9Sb3RhdGlvbl8xODA7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTWVkaWFTYW1wbGU6
OlZpZGVvUm90YXRpb246OlJpZ2h0OgorICAgICAgICBtX2N1cnJlbnRSb3RhdGlvbiA9IHdlYnJ0
Yzo6a1ZpZGVvUm90YXRpb25fOTA7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTWVkaWFTYW1w
bGU6OlZpZGVvUm90YXRpb246OkxlZnQ6CisgICAgICAgIG1fY3VycmVudFJvdGF0aW9uID0gd2Vi
cnRjOjprVmlkZW9Sb3RhdGlvbl8yNzA7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIEFT
U0VSVChzYW1wbGUucGxhdGZvcm1TYW1wbGUoKS50eXBlID09IFBsYXRmb3JtU2FtcGxlOjpDTVNh
bXBsZUJ1ZmZlclR5cGUpOworICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBzdGF0aWNfY2FzdDxDVlBp
eGVsQnVmZmVyUmVmPihDTVNhbXBsZUJ1ZmZlckdldEltYWdlQnVmZmVyKHNhbXBsZS5wbGF0Zm9y
bVNhbXBsZSgpLnNhbXBsZS5jbVNhbXBsZUJ1ZmZlcikpOworICAgIGF1dG8gcGl4ZWxGb3JtYXRU
eXBlID0gQ1ZQaXhlbEJ1ZmZlckdldFBpeGVsRm9ybWF0VHlwZShwaXhlbEJ1ZmZlcik7CisKKyAg
ICBpZiAocGl4ZWxGb3JtYXRUeXBlID09IGtDVlBpeGVsRm9ybWF0VHlwZV80MjBZcENiQ3I4UGxh
bmFyIHx8IHBpeGVsRm9ybWF0VHlwZSA9PSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyOEJp
UGxhbmFyRnVsbFJhbmdlKSB7CisgICAgICAgIHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZp
ZGVvRnJhbWVCdWZmZXI+IGJ1ZmZlciA9IG5ldyBydGM6OlJlZkNvdW50ZWRPYmplY3Q8d2VicnRj
OjpDb3JlVmlkZW9GcmFtZUJ1ZmZlcj4ocGl4ZWxCdWZmZXIpOworICAgICAgICBpZiAobV9zaG91
bGRBcHBseVJvdGF0aW9uICYmIG1fY3VycmVudFJvdGF0aW9uICE9IHdlYnJ0Yzo6a1ZpZGVvUm90
YXRpb25fMCkgeworICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBtYWtlIEFWVmlkZW9D
YXB0dXJlU291cmNlIGhhbmRsZSB0aGUgcm90YXRpb24gd2hlbmV2ZXIgcG9zc2libGUuCisgICAg
ICAgICAgICAvLyBUaGlzIGltcGxlbWVudGF0aW9uIGlzIGluZWZmaWNpZW50LCB3ZSBzaG91bGQg
cm90YXRlIG9uIHRoZSBDTVNhbXBsZUJ1ZmZlciBkaXJlY3RseSBpbnN0ZWFkIG9mIGRvaW5nIHRo
aXMgZG91YmxlIGFsbG9jYXRpb24uCisgICAgICAgICAgICBhdXRvIHJvdGF0ZWRCdWZmZXIgPSBi
dWZmZXItPlRvSTQyMCgpOworICAgICAgICAgICAgQVNTRVJUKHJvdGF0ZWRCdWZmZXIpOworICAg
ICAgICAgICAgYnVmZmVyID0gd2VicnRjOjpJNDIwQnVmZmVyOjpSb3RhdGUoKnJvdGF0ZWRCdWZm
ZXIsIG1fY3VycmVudFJvdGF0aW9uKTsKKyAgICAgICAgfQorICAgICAgICBzZW5kRnJhbWUoV1RG
TW92ZShidWZmZXIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIENWUGl4ZWxCdWZm
ZXJMb2NrQmFzZUFkZHJlc3MocGl4ZWxCdWZmZXIsIDApOworICAgIGF1dG8qIHNvdXJjZSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KENWUGl4ZWxCdWZmZXJHZXRCYXNlQWRkcmVzc09mUGxh
bmUocGl4ZWxCdWZmZXIsIDApKTsKKworICAgIEFTU0VSVChtX3dpZHRoKTsKKyAgICBBU1NFUlQo
bV9oZWlnaHQpOworCisgICAgYXV0byBuZXdCdWZmZXIgPSBtX2J1ZmZlclBvb2wuQ3JlYXRlQnVm
ZmVyKG1fd2lkdGgsIG1faGVpZ2h0KTsKKyAgICBBU1NFUlQobmV3QnVmZmVyKTsKKyAgICBpZiAo
IW5ld0J1ZmZlcikgeworICAgICAgICBSRUxFQVNFX0xPRyhXZWJSVEMsICJSZWFsdGltZU91dGdv
aW5nVmlkZW9Tb3VyY2VNYWM6OnZpZGVvU2FtcGxlQXZhaWxhYmxlIHVuYWJsZSB0byBhbGxvY2F0
ZSBidWZmZXIgZm9yIGNvbnZlcnNpb24gdG8gWVVWIik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgaWYgKHBpeGVsRm9ybWF0VHlwZSA9PSBrQ1ZQaXhlbEZvcm1hdFR5cGVfMzJCR1JBKQor
ICAgICAgICB3ZWJydGM6OkNvbnZlcnRUb0k0MjAod2VicnRjOjpWaWRlb1R5cGU6OmtBUkdCLCBz
b3VyY2UsIDAsIDAsIG1fd2lkdGgsIG1faGVpZ2h0LCAwLCB3ZWJydGM6OmtWaWRlb1JvdGF0aW9u
XzAsIG5ld0J1ZmZlcik7CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVChwaXhlbEZvcm1hdFR5
cGUgPT0ga0NWUGl4ZWxGb3JtYXRUeXBlXzMyQVJHQik7CisgICAgICAgIHdlYnJ0Yzo6Q29udmVy
dFRvSTQyMCh3ZWJydGM6OlZpZGVvVHlwZTo6a0JHUkEsIHNvdXJjZSwgMCwgMCwgbV93aWR0aCwg
bV9oZWlnaHQsIDAsIHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMCwgbmV3QnVmZmVyKTsKKyAgICB9
CisgICAgQ1ZQaXhlbEJ1ZmZlclVubG9ja0Jhc2VBZGRyZXNzKHBpeGVsQnVmZmVyLCAwKTsKKyAg
ICBpZiAobV9zaG91bGRBcHBseVJvdGF0aW9uICYmIG1fY3VycmVudFJvdGF0aW9uICE9IHdlYnJ0
Yzo6a1ZpZGVvUm90YXRpb25fMCkKKyAgICAgICAgbmV3QnVmZmVyID0gd2VicnRjOjpJNDIwQnVm
ZmVyOjpSb3RhdGUoKm5ld0J1ZmZlciwgbV9jdXJyZW50Um90YXRpb24pOworICAgIHNlbmRGcmFt
ZShXVEZNb3ZlKG5ld0J1ZmZlcikpOworfQorCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIFVTRShMSUJXRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTWFjLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1Zp
ZGVvU291cmNlTWFjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTk4MmFhZjQ0MmFkMzJhNjM2NGVlNzk5Y2IzY2Fh
MWUxNTYzMzIxMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL21hYy9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VNYWMuaApAQCAtMCwwICsx
LDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCwgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSByZXF1aXJlZCB0byBiZSBtZXQ6CisgKgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBVU0UoTElCV0VCUlRDKQorCisjaW5jbHVkZSAiUmVhbHRpbWVPdXRnb2lu
Z1ZpZGVvU291cmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVhbHRpbWVP
dXRnb2luZ1ZpZGVvU291cmNlTWFjIGZpbmFsIDogcHVibGljIFJlYWx0aW1lT3V0Z29pbmdWaWRl
b1NvdXJjZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxSZWFsdGltZU91dGdvaW5nVmlkZW9T
b3VyY2VNYWM+IGNyZWF0ZShSZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYgdmlkZW9Tb3Vy
Y2UpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTWFj
KFdURk1vdmUodmlkZW9Tb3VyY2UpKSk7IH0KKyAgICB+UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291
cmNlTWFjKCkgeyB9CisKK3Byb3RlY3RlZDoKKyAgICBleHBsaWNpdCBSZWFsdGltZU91dGdvaW5n
VmlkZW9Tb3VyY2VNYWMoUmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiYmKTsKKworcHJpdmF0
ZToKKyAgICB2b2lkIHZpZGVvU2FtcGxlQXZhaWxhYmxlKE1lZGlhU2FtcGxlJikgZmluYWw7CisK
KyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICBzaXplX3QgbV9udW1iZXJPZkZyYW1lcyB7
IDAgfTsKKyNlbmRpZgorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
VVNFKExJQldFQlJUQykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322810</attachid>
            <date>2017-10-05 02:47:21 -0700</date>
            <delta_ts>2017-10-05 05:18:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177869-20171005114719.patch</filename>
            <type>text/plain</type>
            <size>77566</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIyOTA0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzRhZGJjMmRmZDgxY2U2
MTNmOGZhZGU0MDNkOWZkYjBlYzYzNTEwYy4uMDA1ZjY5Yzc3ODQ0ZGEzMzQ3N2NmNWM2ZGI2ZThm
NWY2MjJmMTU0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDE3LTEwLTA1ICBBbGVq
YW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisgICAgICAgIE1ha2UgUmVhbHRp
bWVJbmNvbWluZ1ZpZGVvU291cmNlcyBhbmQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlcyBw
b3J0IGFnbm9zdGljCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzc4NjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBSZWZhY3RvciB0aGUgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlIGFuZCBSZWFsdGlt
ZU91dGdvaW5nVmlkZW9Tb3VyY2UgY2xhc3NlcywKKyAgICAgICAgbW92ZSB0aGUgbWFjIHNwZWNp
ZmljIGNvZGUgdG8gYSBkaWZmZXJlbnQgY2xhc3MuIFRoaXMgd2F5IHdlIGNhbiB1c2UgdGhlbSBm
cm9tCisgICAgICAgIG90aGVyIHBvcnRzLgorCisgICAgICAgIE5vIG5ldyBmdW5jdGlvbmFsaXR5
LCBqdXN0IGEgcmVmYWN0b3IuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAg
KiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0v
bWVkaWFzdHJlYW0vUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6OlJlYWx0aW1lSW5jb21p
bmdWaWRlb1NvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9T
b3VyY2U6OnN0YXJ0UHJvZHVjaW5nRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUlu
Y29taW5nVmlkZW9Tb3VyY2U6OnNldFNvdXJjZVRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
YWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6c3RvcFByb2R1Y2luZ0RhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlOjpjYXBhYmlsaXRpZXMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlOjpzZXR0aW5n
cyBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVJbmNvbWlu
Z1ZpZGVvU291cmNlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL21hYy9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuaC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuY3BwOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lT3V0
Z29pbmdWaWRlb1NvdXJjZS5jcHAuCisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5n
VmlkZW9Tb3VyY2U6OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVh
bHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmguCisg
ICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnZpZGVvU2FtcGxl
QXZhaWxhYmxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVJ
bmNvbWluZ1ZpZGVvU291cmNlTWFjLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuY3BwLgor
ICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTWFjOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTWFjOjpSZWFs
dGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWMpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJ
bmNvbWluZ1ZpZGVvU291cmNlTWFjOjpwaXhlbEJ1ZmZlckZyb21WaWRlb0ZyYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1hYzo6T25GcmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWM6OnByb2Nlc3NO
ZXdTYW1wbGUpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUlu
Y29taW5nVmlkZW9Tb3VyY2VNYWMuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuaC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNl
TWFjLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nVmlkZW9T
b3VyY2VNYWM6OlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZU1hYyk6CisgICAgICAgIChXZWJD
b3JlOjpSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VNYWM6OnZpZGVvU2FtcGxlQXZhaWxhYmxl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1Zp
ZGVvU291cmNlTWFjLmg6IEFkZGVkLgorCiAyMDE3LTEwLTA1ICBXZW5zb24gSHNpZWggIDx3ZW5z
b25faHNpZWhAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZHJlc3MgcG9zdC1yZXZpZXcgZmVlZGJh
Y2sgZm9sbG93aW5nIHIyMjI4ODUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA2Zjg2ODhiYzNkOWQ2ZTQxZTgyZGU2NjY4YjJiOWZj
NWJiMDhkMzdjLi4xY2VmZTVlYWM0YmFiNTI2MmQ2NWY1NzdhMzY3NjFkN2UyNjdmOWQwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
KysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC0yNzU2LDcgKzI3NTYsOSBAQAogCQk1Q0Q5RjU2NzFBQTBGNzQyMDBEQTQ1RkYgLyogREZBQnl0
ZWNvZGVDb21waWxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNUMzOTMwNUYxQUEwRjZBOTAwMjlDODE2IC8qIERGQUJ5dGVjb2RlQ29tcGlsZXIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1Q0Q5RjU2
ODFBQTBGNzQ2MDBEQTQ1RkYgLyogREZBQnl0ZWNvZGVJbnRlcnByZXRlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUMzOTMwNjExQUEwRjZBOTAwMjlD
ODE2IC8qIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1Q0REODMzRDFFNDMyNEQ5MDA2MjFFOTIgLyogUmVh
bHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDVDREQ4MzNCMUU0MzI0QkIwMDYyMUU5MiAvKiBSZWFsdGltZU91
dGdvaW5nVmlkZW9Tb3VyY2UuY3BwICovOyB9OworCQk1Q0REODMzRDFFNDMyNEQ5MDA2MjFCODMg
LyogUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTWFjLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDREQ4MzNCMUU0MzI0QkIwMDYyMUI4MyAvKiBS
ZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VNYWMuY3BwICovOyB9OwogCQk1Q0REODMzRTFFNDMy
NERDMDA2MjFFOTIgLyogUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDREQ4MzM5MUU0MzI0QkIwMDYy
MUU5MiAvKiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuY3BwICovOyB9OworCQk1Q0REODMz
RTFFNDMyNERDMDA2MjFFODMgLyogUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTWFjLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDREQ4MzM5MUU0
MzI0QkIwMDYyMUU4MyAvKiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWMuY3BwICovOyB9
OwogCQk1Q0REODM2NDFFNDMyNUEwMDA2MjFFOTIgLyogTGliV2ViUlRDRGF0YUNoYW5uZWxIYW5k
bGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVD
REQ4MzNGMUU0MzI1M0QwMDYyMUU5MiAvKiBMaWJXZWJSVENEYXRhQ2hhbm5lbEhhbmRsZXIuY3Bw
ICovOyB9OwogCQk1Q0RGQTZDODFBQTRGMkRBMDBFQTg3NDYgLyogQ29udGVudEV4dGVuc2lvbkFj
dGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVD
REZBNkM3MUFBNEYyREEwMEVBODc0NiAvKiBDb250ZW50RXh0ZW5zaW9uQWN0aW9ucy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTVDRTVEOUFCMURC
ODlBMDMwMENFN0E4RCAvKiBKU1RleHREZWNvZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDRTVEOUE3MURCODk5RkMwMENFN0E4RCAvKiBKU1Rl
eHREZWNvZGVyLmNwcCAqLzsgfTsKQEAgLTEwNjkxLDggKzEwNjkzLDEyIEBACiAJCTVDQkM4REFC
MUFBQTMwMjIwMEUxQzgwMyAvKiBNZWRpYUFjY2Vzc2liaWxpdHlTb2Z0TGluay5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYUFjY2Vzc2liaWxpdHlTb2Z0TGluay5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Q0REODMzOTFFNDMyNEJCMDA2MjFFOTIgLyog
UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTVDREQ4MzNBMUU0MzI0QkIwMDYyMUU5MiAvKiBSZWFsdGltZUlu
Y29taW5nVmlkZW9Tb3VyY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVh
bHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTVDREQ4MzM5MUU0MzI0QkIwMDYyMUU4MyAvKiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VN
YWMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVhbHRpbWVJbmNv
bWluZ1ZpZGVvU291cmNlTWFjLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNE
RDgzM0ExRTQzMjRCQjAwNjIxRTgzIC8qIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1hYy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWFsdGltZUluY29taW5nVmlkZW9T
b3VyY2VNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNERDgzM0IxRTQzMjRC
QjAwNjIxRTkyIC8qIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Q0REODMzQzFFNDMyNEJCMDA2MjFFOTIg
LyogUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk1Q0REODMzQjFFNDMyNEJCMDA2MjFCODMgLyogUmVhbHRpbWVPdXRnb2lu
Z1ZpZGVvU291cmNlTWFjLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZU1hYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTVDREQ4MzNDMUU0MzI0QkIwMDYyMUI4MyAvKiBSZWFsdGltZU91dGdvaW5nVmlk
ZW9Tb3VyY2VNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVhbHRpbWVP
dXRnb2luZ1ZpZGVvU291cmNlTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVD
REQ4MzNGMUU0MzI1M0QwMDYyMUU5MiAvKiBMaWJXZWJSVENEYXRhQ2hhbm5lbEhhbmRsZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTGliV2ViUlRDRGF0YUNoYW5u
ZWxIYW5kbGVyLmNwcDsgcGF0aCA9IGxpYndlYnJ0Yy9MaWJXZWJSVENEYXRhQ2hhbm5lbEhhbmRs
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Q0REODM0MDFFNDMyNTNEMDA2
MjFFOTIgLyogTGliV2ViUlRDRGF0YUNoYW5uZWxIYW5kbGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IExpYldlYlJUQ0RhdGFDaGFubmVsSGFuZGxlci5oOyBwYXRoID0gbGli
d2VicnRjL0xpYldlYlJUQ0RhdGFDaGFubmVsSGFuZGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1Q0RGQTZDNzFBQTRGMkRBMDBFQTg3NDYgLyogQ29udGVudEV4dGVuc2lvbkFj
dGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29udGVudEV4dGVuc2lv
bkFjdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2NDk3LDYgKzE2NTAz
LDggQEAKIAkJCQkwN0ZGREU2NjE4MUFFRDQyMDA3MkQ0MDkgLyogTWVkaWFTdHJlYW1UcmFja1By
aXZhdGUuY3BwICovLAogCQkJCTA3RkZERTY3MTgxQUVENDIwMDcyRDQwOSAvKiBNZWRpYVN0cmVh
bVRyYWNrUHJpdmF0ZS5oICovLAogCQkJCTVFQkI4OTM4MUM3N0JEQTQwMEM2NUQ0MSAvKiBQZWVy
TWVkaWFEZXNjcmlwdGlvbi5oICovLAorCQkJCTVDREQ4MzM5MUU0MzI0QkIwMDYyMUU5MiAvKiBS
ZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuY3BwICovLAorCQkJCTVDREQ4MzNBMUU0MzI0QkIw
MDYyMUU5MiAvKiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuaCAqLywKIAkJCQk0QTRGNjU2
QjFBQTk5N0YxMDBFMzhDREQgLyogUmVhbHRpbWVNZWRpYVNvdXJjZS5jcHAgKi8sCiAJCQkJNEE0
RjY1NkMxQUE5OTdGMTAwRTM4Q0REIC8qIFJlYWx0aW1lTWVkaWFTb3VyY2UuaCAqLywKIAkJCQk0
QTRGNjU2RDFBQTk5N0YxMDBFMzhDREQgLyogUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGll
cy5oICovLApAQCAtMTY1MDYsNiArMTY1MTQsOCBAQAogCQkJCTRBNEY2NTZGMUFBOTk3RjEwMEUz
OENERCAvKiBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MuaCAqLywKIAkJCQkyRUM0MURFMjFD
MDQxMEEzMDBEMjk0RkUgLyogUmVhbHRpbWVNZWRpYVNvdXJjZVN1cHBvcnRlZENvbnN0cmFpbnRz
LmNwcCAqLywKIAkJCQkwN0MxQzBFNDFCRkI2MEVEMDBCRDIyNTYgLyogUmVhbHRpbWVNZWRpYVNv
dXJjZVN1cHBvcnRlZENvbnN0cmFpbnRzLmggKi8sCisJCQkJNUNERDgzM0IxRTQzMjRCQjAwNjIx
RTkyIC8qIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5jcHAgKi8sCisJCQkJNUNERDgzM0Mx
RTQzMjRCQjAwNjIxRTkyIC8qIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5oICovLAogCQkJ
CTMxMzU5MTBDMUU3RERDQjYwMEYzMDYzMCAvKiBSVENCdW5kbGVQb2xpY3kuaCAqLywKIAkJCQkw
NzIyMUJBMjE3Q0YwQUQ0MDA4NDhFNTEgLyogUlRDRGF0YUNoYW5uZWxIYW5kbGVyLmggKi8sCiAJ
CQkJMDcyMjFCQTMxN0NGMEFENDAwODQ4RTUxIC8qIFJUQ0RhdGFDaGFubmVsSGFuZGxlckNsaWVu
dC5oICovLApAQCAtMTY1NTYsMTQgKzE2NTY2LDE0IEBACiAJCQkJMDdFRTc2RUUxQkVBNjE5ODAw
Rjg5MTMzIC8qIE1vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjLm1tICovLAogCQkJCTQxMTAzQUFB
MUUzOTc5MEEwMDc2OUYwMyAvKiBSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2UuY3BwICovLAog
CQkJCTQxMTAzQUE5MUUzOTc5MEEwMDc2OUYwMyAvKiBSZWFsdGltZUluY29taW5nQXVkaW9Tb3Vy
Y2UuaCAqLywKLQkJCQk1Q0REODMzOTFFNDMyNEJCMDA2MjFFOTIgLyogUmVhbHRpbWVJbmNvbWlu
Z1ZpZGVvU291cmNlLmNwcCAqLywKLQkJCQk1Q0REODMzQTFFNDMyNEJCMDA2MjFFOTIgLyogUmVh
bHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmggKi8sCisJCQkJNUNERDgzMzkxRTQzMjRCQjAwNjIx
RTgzIC8qIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1hYy5jcHAgKi8sCisJCQkJNUNERDgz
M0ExRTQzMjRCQjAwNjIxRTgzIC8qIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1hYy5oICov
LAogCQkJCTRBMEZGQUEzMUFBRjVFRjYwMDYyODAzQiAvKiBSZWFsdGltZU1lZGlhU291cmNlQ2Vu
dGVyTWFjLmNwcCAqLywKIAkJCQk0QTBGRkFBNDFBQUY1RUY2MDA2MjgwM0IgLyogUmVhbHRpbWVN
ZWRpYVNvdXJjZUNlbnRlck1hYy5oICovLAogCQkJCTQxMTAzQUE3MUUzOTc5MEEwMDc2OUYwMyAv
KiBSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2UuY3BwICovLAogCQkJCTQxMTAzQUE4MUUzOTc5
MEEwMDc2OUYwMyAvKiBSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2UuaCAqLywKLQkJCQk1Q0RE
ODMzQjFFNDMyNEJCMDA2MjFFOTIgLyogUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmNwcCAq
LywKLQkJCQk1Q0REODMzQzFFNDMyNEJCMDA2MjFFOTIgLyogUmVhbHRpbWVPdXRnb2luZ1ZpZGVv
U291cmNlLmggKi8sCisJCQkJNUNERDgzM0IxRTQzMjRCQjAwNjIxQjgzIC8qIFJlYWx0aW1lT3V0
Z29pbmdWaWRlb1NvdXJjZU1hYy5jcHAgKi8sCisJCQkJNUNERDgzM0MxRTQzMjRCQjAwNjIxQjgz
IC8qIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZU1hYy5oICovLAogCQkJCTA3RDYzNzNFMUJC
MEIxMTMwMDI1NkNFOSAvKiBXZWJBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5oICovLAogCQkJ
CTA3RDYzNzNGMUJCMEIxMTMwMDI1NkNFOSAvKiBXZWJBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2Jq
Qy5tbSAqLywKIAkJCSk7CkBAIC0zMzU4Myw2ICszMzU5Myw3IEBACiAJCQkJRkQzMTYwM0IxMkIw
MjY3NjAwQzFBMzU5IC8qIFJlYWx0aW1lQW5hbHlzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NDExMDNBQUUxRTM5NzkxMDAwNzY5RjAzIC8qIFJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk1Q0REODMzRTFFNDMyNERDMDA2MjFFOTIgLyogUmVhbHRp
bWVJbmNvbWluZ1ZpZGVvU291cmNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTVDREQ4MzNFMUU0
MzI0REMwMDYyMUU4MyAvKiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNEE0RjY1NzAxQUE5OTdGMTAwRTM4Q0REIC8qIFJlYWx0aW1lTWVkaWFT
b3VyY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNEEwRkZBQTExQUFGNUVBMjAwNjI4MDNCIC8q
IFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNEEwRkZB
QTUxQUFGNUVGNjAwNjI4MDNCIC8qIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJNYWMuY3BwIGlu
IFNvdXJjZXMgKi8sCkBAIC0zMzU5MCw2ICszMzYwMSw3IEBACiAJCQkJMkVDNDFERTQxQzA0MTBB
MzAwRDI5NEZFIC8qIFJlYWx0aW1lTWVkaWFTb3VyY2VTdXBwb3J0ZWRDb25zdHJhaW50cy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk0MTEwM0FBQjFFMzk3OTEwMDA3NjlGMDMgLyogUmVhbHRpbWVP
dXRnb2luZ0F1ZGlvU291cmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDREQ4MzNEMUU0MzI0
RDkwMDYyMUU5MiAvKiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJNUNERDgzM0QxRTQzMjREOTAwNjIxQjgzIC8qIFJlYWx0aW1lT3V0Z29pbmdWaWRl
b1NvdXJjZU1hYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRDQ1QTk1QTE3NUQ0MTcxMDBDMjFF
QzggLyogUmVjdGFuZ2xlU2hhcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNBQjQxODExM0Uz
NTZFODAwRDhBQUYzIC8qIFJlZ2lvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTc4RjQ0MDFE
RTBCNjM0MDAzREZDNkEgLyogUmVqZWN0ZWRQcm9taXNlVHJhY2tlci5jcHAgaW4gU291cmNlcyAq
LywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0
aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlmNjI5
NTIxY2ZhZDhlZjU3YmY0YTk2OTY0Mzk0YzJkNDhkY2FkMWEKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZUluY29taW5nVmlkZW9T
b3VyY2UuY3BwCkBAIC0wLDAgKzEsMTAwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICogMy4g
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250
cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20gdGhpcworICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmgiCisKKyNpZiBVU0UoTElCV0VC
UlRDKQorCisjaWYgUExBVEZPUk0oQ09DT0EpCisjaW5jbHVkZSAiUmVhbHRpbWVJbmNvbWluZ1Zp
ZGVvU291cmNlTWFjLmgiCisjZW5kaWYKKworI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitSZWY8UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlPiBSZWFsdGlt
ZUluY29taW5nVmlkZW9Tb3VyY2U6OmNyZWF0ZShydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpW
aWRlb1RyYWNrSW50ZXJmYWNlPiYmIHZpZGVvVHJhY2ssIFN0cmluZyYmIHRyYWNrSWQpCit7Cisj
aWYgUExBVEZPUk0oQ09DT0EpCisgICAgYXV0byBzb3VyY2UgPSBSZWFsdGltZUluY29taW5nVmlk
ZW9Tb3VyY2VNYWM6OmNyZWF0ZShXVEZNb3ZlKHZpZGVvVHJhY2spLCBXVEZNb3ZlKHRyYWNrSWQp
KTsKKyNlbHNlCisgICAgLy8gRklYTUU6IEltcGxlbWVudCBHVEsgc3BlY2lmaWMgb3V0Z29pbmcg
dmlkZW8gc291cmNlCisgICAgYXV0byBzb3VyY2UgPSBhZG9wdFJlZigqbmV3IFJlYWx0aW1lSW5j
b21pbmdWaWRlb1NvdXJjZShXVEZNb3ZlKHZpZGVvVHJhY2spLCBXVEZNb3ZlKHRyYWNrSWQpKSk7
CisjZW5kaWYKKyAgICBzb3VyY2UtPnN0YXJ0KCk7CisgICAgcmV0dXJuIHNvdXJjZTsKK30KKwor
UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2Uo
cnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9UcmFja0ludGVyZmFjZT4mJiB2aWRlb1Ry
YWNrLCBTdHJpbmcmJiB2aWRlb1RyYWNrSWQpCisgICAgOiBSZWFsdGltZU1lZGlhU291cmNlKFdU
Rk1vdmUodmlkZW9UcmFja0lkKSwgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6VmlkZW8sIFN0
cmluZygpKQorICAgICwgbV92aWRlb1RyYWNrKFdURk1vdmUodmlkZW9UcmFjaykpCit7CisgICAg
bV9jdXJyZW50U2V0dGluZ3Muc2V0V2lkdGgoNjQwKTsKKyAgICBtX2N1cnJlbnRTZXR0aW5ncy5z
ZXRIZWlnaHQoNDgwKTsKKyAgICBub3RpZnlNdXRlZENoYW5nZSghbV92aWRlb1RyYWNrKTsKK30K
Kwordm9pZCBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6OnN0YXJ0UHJvZHVjaW5nRGF0YSgp
Cit7CisgICAgaWYgKG1fdmlkZW9UcmFjaykKKyAgICAgICAgbV92aWRlb1RyYWNrLT5BZGRPclVw
ZGF0ZVNpbmsodGhpcywgcnRjOjpWaWRlb1NpbmtXYW50cygpKTsKK30KKwordm9pZCBSZWFsdGlt
ZUluY29taW5nVmlkZW9Tb3VyY2U6OnNldFNvdXJjZVRyYWNrKHJ0Yzo6c2NvcGVkX3JlZnB0cjx3
ZWJydGM6OlZpZGVvVHJhY2tJbnRlcmZhY2U+JiYgdHJhY2spCit7CisgICAgQVNTRVJUKCFtX3Zp
ZGVvVHJhY2spOworICAgIEFTU0VSVCh0cmFjayk7CisKKyAgICBtX3ZpZGVvVHJhY2sgPSBXVEZN
b3ZlKHRyYWNrKTsKKyAgICBub3RpZnlNdXRlZENoYW5nZSghbV92aWRlb1RyYWNrKTsKKyAgICBp
ZiAoaXNQcm9kdWNpbmdEYXRhKCkpCisgICAgICAgIG1fdmlkZW9UcmFjay0+QWRkT3JVcGRhdGVT
aW5rKHRoaXMsIHJ0Yzo6VmlkZW9TaW5rV2FudHMoKSk7Cit9CisKK3ZvaWQgUmVhbHRpbWVJbmNv
bWluZ1ZpZGVvU291cmNlOjpzdG9wUHJvZHVjaW5nRGF0YSgpCit7CisgICAgaWYgKG1fdmlkZW9U
cmFjaykKKyAgICAgICAgbV92aWRlb1RyYWNrLT5SZW1vdmVTaW5rKHRoaXMpOworfQorCitjb25z
dCBSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzJiBSZWFsdGltZUluY29taW5nVmlkZW9T
b3VyY2U6OmNhcGFiaWxpdGllcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIFJlYWx0aW1lTWVkaWFT
b3VyY2VDYXBhYmlsaXRpZXM6OmVtcHR5Q2FwYWJpbGl0aWVzKCk7Cit9CisKK2NvbnN0IFJlYWx0
aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyYgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlOjpzZXR0
aW5ncygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY3VycmVudFNldHRpbmdzOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoTElCV0VCUlRDKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVJbmNvbWluZ1Zp
ZGVvU291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGlt
ZUluY29taW5nVmlkZW9Tb3VyY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43Mzc4MTJmNjA1N2EzNTcxNDhhODZh
YjYzNTYxOTYwMmE4ZGQ1YWM2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmgKQEAgLTAsMCAr
MSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
ICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2Yg
RXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAq
ICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoTElCV0VCUlRDKQorCisjaW5jbHVk
ZSAiTGliV2ViUlRDTWFjcm9zLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZS5oIgor
I2luY2x1ZGUgPHdlYnJ0Yy9hcGkvbWVkaWFzdHJlYW1pbnRlcmZhY2UuaD4KKyNpbmNsdWRlIDx3
dGYvUmV0YWluUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ2FwdHVyZURl
dmljZTsKKworY2xhc3MgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlIDogcHVibGljIFJlYWx0
aW1lTWVkaWFTb3VyY2UsIHByaXZhdGUgcnRjOjpWaWRlb1NpbmtJbnRlcmZhY2U8d2VicnRjOjpW
aWRlb0ZyYW1lPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxSZWFsdGltZUluY29taW5nVmlk
ZW9Tb3VyY2U+IGNyZWF0ZShydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb1RyYWNrSW50
ZXJmYWNlPiYmLCBTdHJpbmcmJik7CisgICAgflJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZSgp
IHsgc3RvcFByb2R1Y2luZ0RhdGEoKTsgfQorCisgICAgdm9pZCBzZXRTb3VyY2VUcmFjayhydGM6
OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb1RyYWNrSW50ZXJmYWNlPiYmKTsKKworcHJvdGVj
dGVkOgorICAgIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZShydGM6OnNjb3BlZF9yZWZwdHI8
d2VicnRjOjpWaWRlb1RyYWNrSW50ZXJmYWNlPiYmLCBTdHJpbmcmJik7CisKKyAgICBSZWFsdGlt
ZU1lZGlhU291cmNlU2V0dGluZ3MgbV9jdXJyZW50U2V0dGluZ3M7CisKK3ByaXZhdGU6CisgICAg
Ly8gUmVhbHRpbWVNZWRpYVNvdXJjZSBBUEkKKyAgICB2b2lkIHN0YXJ0UHJvZHVjaW5nRGF0YSgp
IGZpbmFsOworICAgIHZvaWQgc3RvcFByb2R1Y2luZ0RhdGEoKSAgZmluYWw7CisKKyAgICBjb25z
dCBSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzJiBjYXBhYmlsaXRpZXMoKSBjb25zdCBm
aW5hbDsKKyAgICBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MmIHNldHRpbmdzKCkg
Y29uc3QgZmluYWw7CisKKyAgICBib29sIGFwcGx5U2l6ZShjb25zdCBJbnRTaXplJikgZmluYWwg
eyByZXR1cm4gdHJ1ZTsgfQorCisgICAgLy8gcnRjOjpWaWRlb1NpbmtJbnRlcmZhY2UKKyAgICB2
b2lkIE9uRnJhbWUoY29uc3Qgd2VicnRjOjpWaWRlb0ZyYW1lJikgb3ZlcnJpZGUgeyB9OworCisg
ICAgcnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9UcmFja0ludGVyZmFjZT4gbV92aWRl
b1RyYWNrOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKExJ
QldFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmZkZTViMTJhOGVmZTg0YjZiYTViZjI4ZWNjMzdhZWMxZDkxM2VhNTcKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU91dGdvaW5n
VmlkZW9Tb3VyY2UuY3BwCkBAIC0wLDAgKzEsMjA3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBy
ZXF1aXJlZCB0byBiZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAg
TmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBp
dHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgor
ICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlYWx0
aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5oIgorCisjaWYgVVNFKExJQldFQlJUQykKKworI2luY2x1
ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlIDx3ZWJydGMvYXBpL3ZpZGVvL2k0MjBfYnVmZmVyLmg+
CisjaW5jbHVkZSA8d2VicnRjL2NvbW1vbl92aWRlby9saWJ5dXYvaW5jbHVkZS93ZWJydGNfbGli
eXV2Lmg+CisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisjaW5jbHVkZSA8d3RmL01haW5U
aHJlYWQuaD4KKworI2lmIFBMQVRGT1JNKENPQ09BKQorI2luY2x1ZGUgIlJlYWx0aW1lT3V0Z29p
bmdWaWRlb1NvdXJjZU1hYy5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVm
PFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZT4gUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNl
OjpjcmVhdGUoUmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiYmIHZpZGVvU291cmNlKQorewor
I2lmIFBMQVRGT1JNKENPQ09BKQorICAgIHJldHVybiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3Vy
Y2VNYWM6OmNyZWF0ZShXVEZNb3ZlKHZpZGVvU291cmNlKSk7CisjZWxzZQorICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQgR1RLIHNwZWNpZmljIG91dGdvaW5nIHZpZGVvIHNvdXJjZS4KKyAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UoV1RGTW92ZSh2aWRl
b1NvdXJjZSkpKTsKKyNlbmRpZgorfQorCitSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OlJl
YWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZShSZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYg
dmlkZW9Tb3VyY2UpCisgICAgOiBtX3ZpZGVvU291cmNlKFdURk1vdmUodmlkZW9Tb3VyY2UpKQor
ICAgICwgbV9ibGFja0ZyYW1lVGltZXIoKnRoaXMsICZSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3Vy
Y2U6OnNlbmRPbmVCbGFja0ZyYW1lKQoreworICAgIG1fdmlkZW9Tb3VyY2UtPmFkZE9ic2VydmVy
KCp0aGlzKTsKKyAgICBpbml0aWFsaXplRnJvbVNvdXJjZSgpOworfQorCitib29sIFJlYWx0aW1l
T3V0Z29pbmdWaWRlb1NvdXJjZTo6c2V0U291cmNlKFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0
ZT4mJiBuZXdTb3VyY2UpCit7CisgICAgaWYgKCFtX2luaXRpYWxTZXR0aW5ncykKKyAgICAgICAg
bV9pbml0aWFsU2V0dGluZ3MgPSBtX3ZpZGVvU291cmNlLT5zb3VyY2UoKS5zZXR0aW5ncygpOwor
CisgICAgbV92aWRlb1NvdXJjZS0+cmVtb3ZlT2JzZXJ2ZXIoKnRoaXMpOworICAgIG1fdmlkZW9T
b3VyY2UgPSBXVEZNb3ZlKG5ld1NvdXJjZSk7CisgICAgbV92aWRlb1NvdXJjZS0+YWRkT2JzZXJ2
ZXIoKnRoaXMpOworCisgICAgaW5pdGlhbGl6ZUZyb21Tb3VyY2UoKTsKKworICAgIHJldHVybiB0
cnVlOworfQorCit2b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6c3RvcCgpCit7Cisg
ICAgbV92aWRlb1NvdXJjZS0+cmVtb3ZlT2JzZXJ2ZXIoKnRoaXMpOworICAgIG1fYmxhY2tGcmFt
ZVRpbWVyLnN0b3AoKTsKKyAgICBtX2lzU3RvcHBlZCA9IHRydWU7Cit9CisKK3ZvaWQgUmVhbHRp
bWVPdXRnb2luZ1ZpZGVvU291cmNlOjp1cGRhdGVCbGFja0ZyYW1lc1NlbmRpbmcoKQoreworICAg
IGlmICghbV9tdXRlZCAmJiBtX2VuYWJsZWQpIHsKKyAgICAgICAgaWYgKG1fYmxhY2tGcmFtZVRp
bWVyLmlzQWN0aXZlKCkpCisgICAgICAgICAgICBtX2JsYWNrRnJhbWVUaW1lci5zdG9wKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzZW5kQmxhY2tGcmFtZXNJZk5lZWRlZCgpOwor
fQorCit2b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6c291cmNlTXV0ZWRDaGFuZ2Vk
KCkKK3sKKyAgICBBU1NFUlQobV9tdXRlZCAhPSBtX3ZpZGVvU291cmNlLT5tdXRlZCgpKTsKKwor
ICAgIG1fbXV0ZWQgPSBtX3ZpZGVvU291cmNlLT5tdXRlZCgpOworCisgICAgdXBkYXRlQmxhY2tG
cmFtZXNTZW5kaW5nKCk7Cit9CisKK3ZvaWQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpz
b3VyY2VFbmFibGVkQ2hhbmdlZCgpCit7CisgICAgQVNTRVJUKG1fZW5hYmxlZCAhPSBtX3ZpZGVv
U291cmNlLT5lbmFibGVkKCkpOworCisgICAgbV9lbmFibGVkID0gbV92aWRlb1NvdXJjZS0+ZW5h
YmxlZCgpOworCisgICAgdXBkYXRlQmxhY2tGcmFtZXNTZW5kaW5nKCk7Cit9CisKK3ZvaWQgUmVh
bHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjppbml0aWFsaXplRnJvbVNvdXJjZSgpCit7CisgICAg
Y29uc3QgYXV0byYgc2V0dGluZ3MgPSBtX3ZpZGVvU291cmNlLT5zb3VyY2UoKS5zZXR0aW5ncygp
OworICAgIG1fd2lkdGggPSBzZXR0aW5ncy53aWR0aCgpOworICAgIG1faGVpZ2h0ID0gc2V0dGlu
Z3MuaGVpZ2h0KCk7CisKKyAgICBtX211dGVkID0gbV92aWRlb1NvdXJjZS0+bXV0ZWQoKTsKKyAg
ICBtX2VuYWJsZWQgPSBtX3ZpZGVvU291cmNlLT5lbmFibGVkKCk7CisKKyAgICB1cGRhdGVCbGFj
a0ZyYW1lc1NlbmRpbmcoKTsKK30KKworYm9vbCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6
OkdldFN0YXRzKFN0YXRzKikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVhbHRp
bWVPdXRnb2luZ1ZpZGVvU291cmNlOjpBZGRPclVwZGF0ZVNpbmsocnRjOjpWaWRlb1NpbmtJbnRl
cmZhY2U8d2VicnRjOjpWaWRlb0ZyYW1lPiogc2luaywgY29uc3QgcnRjOjpWaWRlb1NpbmtXYW50
cyYgc2lua1dhbnRzKQoreworICAgIEFTU0VSVCghc2lua1dhbnRzLmJsYWNrX2ZyYW1lcyk7CisK
KyAgICBpZiAoc2lua1dhbnRzLnJvdGF0aW9uX2FwcGxpZWQpCisgICAgICAgIG1fc2hvdWxkQXBw
bHlSb3RhdGlvbiA9IHRydWU7CisKKyAgICBpZiAoIW1fc2lua3MuY29udGFpbnMoc2luaykpCisg
ICAgICAgIG1fc2lua3MuYXBwZW5kKHNpbmspOworCisgICAgY2FsbE9uTWFpblRocmVhZChbcHJv
dGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSgpIHsKKyAgICAgICAgcHJvdGVjdGVkVGhpcy0+
c2VuZEJsYWNrRnJhbWVzSWZOZWVkZWQoKTsKKyAgICB9KTsKK30KKwordm9pZCBSZWFsdGltZU91
dGdvaW5nVmlkZW9Tb3VyY2U6OlJlbW92ZVNpbmsocnRjOjpWaWRlb1NpbmtJbnRlcmZhY2U8d2Vi
cnRjOjpWaWRlb0ZyYW1lPiogc2luaykKK3sKKyAgICBtX3NpbmtzLnJlbW92ZUZpcnN0KHNpbmsp
OworCisgICAgaWYgKG1fc2lua3Muc2l6ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBjYWxs
T25NYWluVGhyZWFkKFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldKCkgeworICAgICAg
ICBpZiAocHJvdGVjdGVkVGhpcy0+bV9ibGFja0ZyYW1lVGltZXIuaXNBY3RpdmUoKSkKKyAgICAg
ICAgICAgIHByb3RlY3RlZFRoaXMtPm1fYmxhY2tGcmFtZVRpbWVyLnN0b3AoKTsKKyAgICB9KTsK
K30KKwordm9pZCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnNlbmRCbGFja0ZyYW1lc0lm
TmVlZGVkKCkKK3sKKyAgICBpZiAobV9ibGFja0ZyYW1lVGltZXIuaXNBY3RpdmUoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKCFtX3NpbmtzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKCFtX211dGVkICYmIG1fZW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKCFtX3dpZHRoIHx8ICFtX2hlaWdodCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFt
X2JsYWNrRnJhbWUpIHsKKyAgICAgICAgYXV0byB3aWR0aCA9IG1fd2lkdGg7CisgICAgICAgIGF1
dG8gaGVpZ2h0ID0gbV9oZWlnaHQ7CisgICAgICAgIGlmIChtX3Nob3VsZEFwcGx5Um90YXRpb24g
JiYgKG1fY3VycmVudFJvdGF0aW9uID09IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMCB8fCBtX2N1
cnJlbnRSb3RhdGlvbiA9PSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzkwKSkKKyAgICAgICAgICAg
IHN0ZDo6c3dhcCh3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgYXV0byBmcmFtZSA9IG1fYnVmZmVy
UG9vbC5DcmVhdGVCdWZmZXIod2lkdGgsIGhlaWdodCk7CisgICAgICAgIEFTU0VSVChmcmFtZSk7
CisgICAgICAgIGlmICghZnJhbWUpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfTE9HKFdlYlJUQywg
IlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6c2VuZEJsYWNrRnJhbWVzSWZOZWVkZWQgdW5h
YmxlIHRvIHNlbmQgYmxhY2sgZnJhbWVzIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgd2VicnRjOjpJNDIwQnVmZmVyOjpTZXRCbGFjayhmcmFtZS5nZXQoKSk7Cisg
ICAgICAgIG1fYmxhY2tGcmFtZSA9IFdURk1vdmUoZnJhbWUpOworICAgIH0KKyAgICBzZW5kT25l
QmxhY2tGcmFtZSgpOworICAgIG1fYmxhY2tGcmFtZVRpbWVyLnN0YXJ0UmVwZWF0aW5nKDFfcyk7
Cit9CisKK3ZvaWQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpzZW5kT25lQmxhY2tGcmFt
ZSgpCit7CisgICAgUkVMRUFTRV9MT0coTWVkaWFTdHJlYW0sICJSZWFsdGltZU91dGdvaW5nVmlk
ZW9Tb3VyY2U6OnNlbmRPbmVCbGFja0ZyYW1lIik7CisgICAgc2VuZEZyYW1lKHJ0Yzo6c2NvcGVk
X3JlZnB0cjx3ZWJydGM6OlZpZGVvRnJhbWVCdWZmZXI+KG1fYmxhY2tGcmFtZSkpOworfQorCit2
b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6c2VuZEZyYW1lKHJ0Yzo6c2NvcGVkX3Jl
ZnB0cjx3ZWJydGM6OlZpZGVvRnJhbWVCdWZmZXI+JiYgYnVmZmVyKQoreworICAgIGludDY0X3Qg
dGltZXN0YW1wTWljcm9TZWNvbmRzID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lTVMoKSAq
IDEwMDA7CisgICAgd2VicnRjOjpWaWRlb0ZyYW1lIGZyYW1lKGJ1ZmZlciwgbV9zaG91bGRBcHBs
eVJvdGF0aW9uID8gd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8wIDogbV9jdXJyZW50Um90YXRpb24s
IHRpbWVzdGFtcE1pY3JvU2Vjb25kcyk7CisgICAgZm9yIChhdXRvKiBzaW5rIDogbV9zaW5rcykK
KyAgICAgICAgc2luay0+T25GcmFtZShmcmFtZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIFVTRShMSUJXRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1Nv
dXJjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmU5NTRhMjBlNTI2MGMzODc1ZjliNzFlMjU4OTE0MDNiOWVmZWM2
ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuaApAQCAtMCwwICsxLDExNyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgcmVxdWlyZWQgdG8gYmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisg
KiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYg
VVNFKExJQldFQlJUQykKKworI2luY2x1ZGUgIkxpYldlYlJUQ01hY3Jvcy5oIgorI2luY2x1ZGUg
Ik1lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmgiCisjaW5jbHVkZSA8VGltZXIuaD4KKyNpbmNsdWRl
IDx3ZWJydGMvYXBpL21lZGlhc3RyZWFtaW50ZXJmYWNlLmg+CisjaW5jbHVkZSA8d2VicnRjL2Jh
c2Uvb3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3ZWJydGMvY29tbW9uX3ZpZGVvL2luY2x1ZGUvaTQy
MF9idWZmZXJfcG9vbC5oPgorI2luY2x1ZGUgPHdlYnJ0Yy9tZWRpYS9iYXNlL3ZpZGVvc2lua2lu
dGVyZmFjZS5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJl
YWRTYWZlUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJlYWx0
aW1lT3V0Z29pbmdWaWRlb1NvdXJjZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxSZWFs
dGltZU91dGdvaW5nVmlkZW9Tb3VyY2U+LCBwdWJsaWMgd2VicnRjOjpWaWRlb1RyYWNrU291cmNl
SW50ZXJmYWNlLCBwcml2YXRlIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpPYnNlcnZlciB7Citw
dWJsaWM6CisgICAgc3RhdGljIFJlZjxSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U+IGNyZWF0
ZShSZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYgdmlkZW9Tb3VyY2UpOworICAgIH5SZWFs
dGltZU91dGdvaW5nVmlkZW9Tb3VyY2UoKSB7IHN0b3AoKTsgfQorCisgICAgdm9pZCBzdG9wKCk7
CisgICAgYm9vbCBzZXRTb3VyY2UoUmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiYmKTsKKyAg
ICBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYgc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV92aWRl
b1NvdXJjZS5nZXQoKTsgfQorCisgICAgaW50IEFkZFJlZigpIGNvbnN0IGZpbmFsIHsgcmVmKCk7
IHJldHVybiByZWZDb3VudCgpOyB9CisgICAgaW50IFJlbGVhc2UoKSBjb25zdCBmaW5hbCB7IGRl
cmVmKCk7IHJldHVybiByZWZDb3VudCgpOyB9CisKKyAgICB2b2lkIHNldEFwcGx5Um90YXRpb24o
Ym9vbCBzaG91bGRBcHBseVJvdGF0aW9uKSB7IG1fc2hvdWxkQXBwbHlSb3RhdGlvbiA9IHNob3Vs
ZEFwcGx5Um90YXRpb247IH0KKworcHJvdGVjdGVkOgorICAgIGV4cGxpY2l0IFJlYWx0aW1lT3V0
Z29pbmdWaWRlb1NvdXJjZShSZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYpOworCisgICAg
dm9pZCBzZW5kRnJhbWUocnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9GcmFtZUJ1ZmZl
cj4mJik7CisKKyAgICBWZWN0b3I8cnRjOjpWaWRlb1NpbmtJbnRlcmZhY2U8d2VicnRjOjpWaWRl
b0ZyYW1lPio+IG1fc2lua3M7CisgICAgd2VicnRjOjpJNDIwQnVmZmVyUG9vbCBtX2J1ZmZlclBv
b2w7CisKKyAgICBib29sIG1fZW5hYmxlZCB7IHRydWUgfTsKKyAgICBib29sIG1fbXV0ZWQgeyBm
YWxzZSB9OworICAgIHVpbnQzMl90IG1fd2lkdGggeyAwIH07CisgICAgdWludDMyX3QgbV9oZWln
aHQgeyAwIH07CisgICAgYm9vbCBtX3Nob3VsZEFwcGx5Um90YXRpb24geyBmYWxzZSB9OworICAg
IHdlYnJ0Yzo6VmlkZW9Sb3RhdGlvbiBtX2N1cnJlbnRSb3RhdGlvbiB7IHdlYnJ0Yzo6a1ZpZGVv
Um90YXRpb25fMCB9OworCitwcml2YXRlOgorICAgIHZvaWQgc2VuZEJsYWNrRnJhbWVzSWZOZWVk
ZWQoKTsKKyAgICB2b2lkIHNlbmRPbmVCbGFja0ZyYW1lKCk7CisgICAgdm9pZCBpbml0aWFsaXpl
RnJvbVNvdXJjZSgpOworICAgIHZvaWQgdXBkYXRlQmxhY2tGcmFtZXNTZW5kaW5nKCk7CisKKyAg
ICAvLyBOb3RpZmllciBBUEkKKyAgICB2b2lkIFJlZ2lzdGVyT2JzZXJ2ZXIod2VicnRjOjpPYnNl
cnZlckludGVyZmFjZSopIGZpbmFsIHsgfQorICAgIHZvaWQgVW5yZWdpc3Rlck9ic2VydmVyKHdl
YnJ0Yzo6T2JzZXJ2ZXJJbnRlcmZhY2UqKSBmaW5hbCB7IH0KKworICAgIC8vIFZpZGVvVHJhY2tT
b3VyY2VJbnRlcmZhY2UgQVBJCisgICAgYm9vbCBpc19zY3JlZW5jYXN0KCkgY29uc3QgZmluYWwg
eyByZXR1cm4gZmFsc2U7IH0KKyAgICBydGM6Ok9wdGlvbmFsPGJvb2w+IG5lZWRzX2Rlbm9pc2lu
ZygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHJ0Yzo6T3B0aW9uYWw8Ym9vbD4oKTsgfQorICAgIGJv
b2wgR2V0U3RhdHMoU3RhdHMqKSBmaW5hbDsKKworICAgIC8vIE1lZGlhU291cmNlSW50ZXJmYWNl
IEFQSQorICAgIFNvdXJjZVN0YXRlIHN0YXRlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gU291cmNl
U3RhdGUoKTsgfQorICAgIGJvb2wgcmVtb3RlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsg
fQorCisgICAgLy8gcnRjOjpWaWRlb1NvdXJjZUludGVyZmFjZTx3ZWJydGM6OlZpZGVvRnJhbWU+
IEFQSQorICAgIHZvaWQgQWRkT3JVcGRhdGVTaW5rKHJ0Yzo6VmlkZW9TaW5rSW50ZXJmYWNlPHdl
YnJ0Yzo6VmlkZW9GcmFtZT4qLCBjb25zdCBydGM6OlZpZGVvU2lua1dhbnRzJikgZmluYWw7Cisg
ICAgdm9pZCBSZW1vdmVTaW5rKHJ0Yzo6VmlkZW9TaW5rSW50ZXJmYWNlPHdlYnJ0Yzo6VmlkZW9G
cmFtZT4qKSBmaW5hbDsKKworICAgIHZvaWQgc291cmNlTXV0ZWRDaGFuZ2VkKCk7CisgICAgdm9p
ZCBzb3VyY2VFbmFibGVkQ2hhbmdlZCgpOworICAgIHZpcnR1YWwgdm9pZCB2aWRlb1NhbXBsZUF2
YWlsYWJsZShNZWRpYVNhbXBsZSYpIHsgfTsKKworICAgIC8vIE1lZGlhU3RyZWFtVHJhY2tQcml2
YXRlOjpPYnNlcnZlciBBUEkKKyAgICB2b2lkIHRyYWNrTXV0ZWRDaGFuZ2VkKE1lZGlhU3RyZWFt
VHJhY2tQcml2YXRlJikgZmluYWwgeyBzb3VyY2VNdXRlZENoYW5nZWQoKTsgfQorICAgIHZvaWQg
dHJhY2tFbmFibGVkQ2hhbmdlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYpIGZpbmFsIHsgc291
cmNlRW5hYmxlZENoYW5nZWQoKTsgfQorICAgIHZvaWQgdHJhY2tTZXR0aW5nc0NoYW5nZWQoTWVk
aWFTdHJlYW1UcmFja1ByaXZhdGUmKSBmaW5hbCB7IGluaXRpYWxpemVGcm9tU291cmNlKCk7IH0K
KyAgICB2b2lkIHNhbXBsZUJ1ZmZlclVwZGF0ZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmLCBN
ZWRpYVNhbXBsZSYgc2FtcGxlKSBmaW5hbCB7IHZpZGVvU2FtcGxlQXZhaWxhYmxlKHNhbXBsZSk7
IH0KKyAgICB2b2lkIHRyYWNrRW5kZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmKSBmaW5hbCB7
IH0KKworICAgIFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4gbV92aWRlb1NvdXJjZTsKKyAg
ICBzdGQ6Om9wdGlvbmFsPFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncz4gbV9pbml0aWFsU2V0
dGluZ3M7CisgICAgYm9vbCBtX2lzU3RvcHBlZCB7IGZhbHNlIH07CisgICAgVGltZXIgbV9ibGFj
a0ZyYW1lVGltZXI7CisgICAgcnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9GcmFtZUJ1
ZmZlcj4gbV9ibGFja0ZyYW1lOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gVVNFKExJQldFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lSW5jb21pbmdWaWRlb1Nv
dXJjZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyNjE4ZDY5NTI3NjNmZTdk
N2M0YjZiOGNlNGY5Y2RjMTgyN2EzNzEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1Jl
YWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMDYgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqICAg
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSAq
ICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlJlYWx0aW1lSW5jb21p
bmdWaWRlb1NvdXJjZS5oIgotCi0jaWYgVVNFKExJQldFQlJUQykKLQotI2luY2x1ZGUgIkxvZ2dp
bmcuaCIKLSNpbmNsdWRlICJNZWRpYVNhbXBsZUFWRk9iakMuaCIKLSNpbmNsdWRlIDx3ZWJydGMv
c2RrL29iamMvRnJhbWV3b3JrL0NsYXNzZXMvVmlkZW8vY29yZXZpZGVvX2ZyYW1lX2J1ZmZlci5o
PgotCi0jaW5jbHVkZSAiQ29yZU1lZGlhU29mdExpbmsuaCIKLSNpbmNsdWRlICJDb3JlVmlkZW9T
b2Z0TGluay5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVJlZjxSZWFsdGltZUluY29taW5n
VmlkZW9Tb3VyY2U+IFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6Y3JlYXRlKHJ0Yzo6c2Nv
cGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvVHJhY2tJbnRlcmZhY2U+JiYgdmlkZW9UcmFjaywgU3Ry
aW5nJiYgdHJhY2tJZCkKLXsKLSAgICBhdXRvIHNvdXJjZSA9IGFkb3B0UmVmKCpuZXcgUmVhbHRp
bWVJbmNvbWluZ1ZpZGVvU291cmNlKFdURk1vdmUodmlkZW9UcmFjayksIFdURk1vdmUodHJhY2tJ
ZCkpKTsKLSAgICBzb3VyY2UtPnN0YXJ0KCk7Ci0gICAgcmV0dXJuIHNvdXJjZTsKLX0KLQotUmVh
bHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UocnRj
OjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9UcmFja0ludGVyZmFjZT4mJiB2aWRlb1RyYWNr
LCBTdHJpbmcmJiB2aWRlb1RyYWNrSWQpCi0gICAgOiBSZWFsdGltZU1lZGlhU291cmNlKFdURk1v
dmUodmlkZW9UcmFja0lkKSwgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6VmlkZW8sIFN0cmlu
ZygpKQotICAgICwgbV92aWRlb1RyYWNrKFdURk1vdmUodmlkZW9UcmFjaykpCi17Ci0gICAgbV9j
dXJyZW50U2V0dGluZ3Muc2V0V2lkdGgoNjQwKTsKLSAgICBtX2N1cnJlbnRTZXR0aW5ncy5zZXRI
ZWlnaHQoNDgwKTsKLSAgICBub3RpZnlNdXRlZENoYW5nZSghbV92aWRlb1RyYWNrKTsKLX0KLQot
dm9pZCBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6OnN0YXJ0UHJvZHVjaW5nRGF0YSgpCi17
Ci0gICAgaWYgKG1fdmlkZW9UcmFjaykKLSAgICAgICAgbV92aWRlb1RyYWNrLT5BZGRPclVwZGF0
ZVNpbmsodGhpcywgcnRjOjpWaWRlb1NpbmtXYW50cygpKTsKLX0KLQotdm9pZCBSZWFsdGltZUlu
Y29taW5nVmlkZW9Tb3VyY2U6OnNldFNvdXJjZVRyYWNrKHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJy
dGM6OlZpZGVvVHJhY2tJbnRlcmZhY2U+JiYgdHJhY2spCi17Ci0gICAgQVNTRVJUKCFtX3ZpZGVv
VHJhY2spOwotICAgIEFTU0VSVCh0cmFjayk7Ci0KLSAgICBtX3ZpZGVvVHJhY2sgPSBXVEZNb3Zl
KHRyYWNrKTsKLSAgICBub3RpZnlNdXRlZENoYW5nZSghbV92aWRlb1RyYWNrKTsKLSAgICBpZiAo
aXNQcm9kdWNpbmdEYXRhKCkpCi0gICAgICAgIG1fdmlkZW9UcmFjay0+QWRkT3JVcGRhdGVTaW5r
KHRoaXMsIHJ0Yzo6VmlkZW9TaW5rV2FudHMoKSk7Ci19Ci0KLXZvaWQgUmVhbHRpbWVJbmNvbWlu
Z1ZpZGVvU291cmNlOjpzdG9wUHJvZHVjaW5nRGF0YSgpCi17Ci0gICAgaWYgKG1fdmlkZW9UcmFj
aykKLSAgICAgICAgbV92aWRlb1RyYWNrLT5SZW1vdmVTaW5rKHRoaXMpOwotfQotCi1DVlBpeGVs
QnVmZmVyUmVmIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6cGl4ZWxCdWZmZXJGcm9tVmlk
ZW9GcmFtZShjb25zdCB3ZWJydGM6OlZpZGVvRnJhbWUmIGZyYW1lKQotewotICAgIGlmIChtdXRl
ZCgpKSB7Ci0gICAgICAgIGlmICghbV9ibGFja0ZyYW1lIHx8IG1fYmxhY2tGcmFtZVdpZHRoICE9
IGZyYW1lLndpZHRoKCkgfHwgbV9ibGFja0ZyYW1lSGVpZ2h0ICE9IGZyYW1lLmhlaWdodCgpKSB7
Ci0gICAgICAgICAgICBDVlBpeGVsQnVmZmVyUmVmIHBpeGVsQnVmZmVyID0gbnVsbHB0cjsKLSAg
ICAgICAgICAgIGF1dG8gc3RhdHVzID0gQ1ZQaXhlbEJ1ZmZlckNyZWF0ZShrQ0ZBbGxvY2F0b3JE
ZWZhdWx0LCBmcmFtZS53aWR0aCgpLCBmcmFtZS5oZWlnaHQoKSwga0NWUGl4ZWxGb3JtYXRUeXBl
XzQyMFlwQ2JDcjhQbGFuYXIsIG51bGxwdHIsICZwaXhlbEJ1ZmZlcik7Ci0gICAgICAgICAgICBB
U1NFUlRfVU5VU0VEKHN0YXR1cywgc3RhdHVzID09IG5vRXJyKTsKLQotICAgICAgICAgICAgbV9i
bGFja0ZyYW1lID0gcGl4ZWxCdWZmZXI7Ci0gICAgICAgICAgICBtX2JsYWNrRnJhbWVXaWR0aCA9
IGZyYW1lLndpZHRoKCk7Ci0gICAgICAgICAgICBtX2JsYWNrRnJhbWVIZWlnaHQgPSBmcmFtZS5o
ZWlnaHQoKTsKLQotICAgICAgICAgICAgc3RhdHVzID0gQ1ZQaXhlbEJ1ZmZlckxvY2tCYXNlQWRk
cmVzcyhwaXhlbEJ1ZmZlciwgMCk7Ci0gICAgICAgICAgICBBU1NFUlQoc3RhdHVzID09IG5vRXJy
KTsKLSAgICAgICAgICAgIHZvaWQqIGRhdGEgPSBDVlBpeGVsQnVmZmVyR2V0QmFzZUFkZHJlc3Mo
cGl4ZWxCdWZmZXIpOwotICAgICAgICAgICAgc2l6ZV90IHlMZW5ndGggPSBmcmFtZS53aWR0aCgp
ICogZnJhbWUuaGVpZ2h0KCk7Ci0gICAgICAgICAgICBtZW1zZXQoZGF0YSwgMCwgeUxlbmd0aCk7
Ci0gICAgICAgICAgICBtZW1zZXQoc3RhdGljX2Nhc3Q8dWludDhfdCo+KGRhdGEpICsgeUxlbmd0
aCwgMTI4LCB5TGVuZ3RoIC8gMik7Ci0KLSAgICAgICAgICAgIHN0YXR1cyA9IENWUGl4ZWxCdWZm
ZXJVbmxvY2tCYXNlQWRkcmVzcyhwaXhlbEJ1ZmZlciwgMCk7Ci0gICAgICAgICAgICBBU1NFUlQo
IXN0YXR1cyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1fYmxhY2tGcmFtZS5nZXQoKTsK
LSAgICB9Ci0gICAgYXV0byBidWZmZXIgPSBmcmFtZS52aWRlb19mcmFtZV9idWZmZXIoKTsKLSAg
ICBBU1NFUlQoYnVmZmVyLT50eXBlKCkgPT0gd2VicnRjOjpWaWRlb0ZyYW1lQnVmZmVyOjpUeXBl
OjprTmF0aXZlKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8d2VicnRjOjpDb3JlVmlkZW9GcmFt
ZUJ1ZmZlciY+KCpidWZmZXIpLnBpeGVsX2J1ZmZlcigpOwotfQotCi12b2lkIFJlYWx0aW1lSW5j
b21pbmdWaWRlb1NvdXJjZTo6T25GcmFtZShjb25zdCB3ZWJydGM6OlZpZGVvRnJhbWUmIGZyYW1l
KQotewotICAgIGlmICghaXNQcm9kdWNpbmdEYXRhKCkpCi0gICAgICAgIHJldHVybjsKLQotI2lm
ICFSRUxFQVNFX0xPR19ESVNBQkxFRAotICAgIGlmICghKCsrbV9udW1iZXJPZkZyYW1lcyAlIDMw
KSkKLSAgICAgICAgUkVMRUFTRV9MT0coTWVkaWFTdHJlYW0sICJSZWFsdGltZUluY29taW5nVmlk
ZW9Tb3VyY2U6Ok9uRnJhbWUgJXp1IGZyYW1lIiwgbV9udW1iZXJPZkZyYW1lcyk7Ci0jZW5kaWYK
LQotICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBwaXhlbEJ1ZmZlckZyb21WaWRlb0ZyYW1lKGZyYW1l
KTsKLQotICAgIC8vIEZJWE1FOiBDb252ZXJ0IHRpbWluZyBpbmZvcm1hdGlvbiBmcm9tIFZpZGVv
RnJhbWUgdG8gQ01TYW1wbGVUaW1pbmdJbmZvLgotICAgIC8vIEZvciB0aGUgbW9tZW50LCB3ZSB3
aWxsIHByZXRlbmQgdGhhdCBmcmFtZXMgc2hvdWxkIGJlIHJlbmRlcmVkIGFzYXAuCi0gICAgQ01T
YW1wbGVUaW1pbmdJbmZvIHRpbWluZ0luZm87Ci0gICAgdGltaW5nSW5mby5wcmVzZW50YXRpb25U
aW1lU3RhbXAgPSBrQ01UaW1lSW52YWxpZDsKLSAgICB0aW1pbmdJbmZvLmRlY29kZVRpbWVTdGFt
cCA9IGtDTVRpbWVJbnZhbGlkOwotICAgIHRpbWluZ0luZm8uZHVyYXRpb24gPSBrQ01UaW1lSW52
YWxpZDsKLQotICAgIENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvblJlZiBmb3JtYXREZXNjcmlwdGlv
bjsKLSAgICBPU1N0YXR1cyBvc3RhdHVzID0gQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uQ3JlYXRl
Rm9ySW1hZ2VCdWZmZXIoa0NGQWxsb2NhdG9yRGVmYXVsdCwgKENWSW1hZ2VCdWZmZXJSZWYpcGl4
ZWxCdWZmZXIsICZmb3JtYXREZXNjcmlwdGlvbik7Ci0gICAgaWYgKG9zdGF0dXMgIT0gbm9FcnIp
IHsKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBDTVZpZGVvRm9ybWF0
RGVzY3JpcHRpb246ICVkIiwgc3RhdGljX2Nhc3Q8aW50Pihvc3RhdHVzKSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBDTVNhbXBsZUJ1ZmZlclJlZiBzYW1wbGVCdWZmZXI7Ci0gICAg
b3N0YXR1cyA9IENNU2FtcGxlQnVmZmVyQ3JlYXRlUmVhZHlXaXRoSW1hZ2VCdWZmZXIoa0NGQWxs
b2NhdG9yRGVmYXVsdCwgKENWSW1hZ2VCdWZmZXJSZWYpcGl4ZWxCdWZmZXIsIGZvcm1hdERlc2Ny
aXB0aW9uLCAmdGltaW5nSW5mbywgJnNhbXBsZUJ1ZmZlcik7Ci0gICAgaWYgKG9zdGF0dXMgIT0g
bm9FcnIpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIHRoZSBzYW1wbGUg
YnVmZmVyOiAlZCIsIHN0YXRpY19jYXN0PGludD4ob3N0YXR1cykpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIENGUmVsZWFzZShmb3JtYXREZXNjcmlwdGlvbik7Ci0KLSAgICBhdXRvIHNh
bXBsZSA9IGFkb3B0Q0Yoc2FtcGxlQnVmZmVyKTsKLQotICAgIENGQXJyYXlSZWYgYXR0YWNobWVu
dHNBcnJheSA9IENNU2FtcGxlQnVmZmVyR2V0U2FtcGxlQXR0YWNobWVudHNBcnJheShzYW1wbGVC
dWZmZXIsIHRydWUpOwotICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IENGQXJyYXlHZXRDb3Vu
dChhdHRhY2htZW50c0FycmF5KTsgKytpKSB7Ci0gICAgICAgIENGTXV0YWJsZURpY3Rpb25hcnlS
ZWYgYXR0YWNobWVudHMgPSAoQ0ZNdXRhYmxlRGljdGlvbmFyeVJlZilDRkFycmF5R2V0VmFsdWVB
dEluZGV4KGF0dGFjaG1lbnRzQXJyYXksIGkpOwotICAgICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1
ZShhdHRhY2htZW50cywga0NNU2FtcGxlQXR0YWNobWVudEtleV9EaXNwbGF5SW1tZWRpYXRlbHks
IGtDRkJvb2xlYW5UcnVlKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCB3aWR0aCA9IGZyYW1lLndp
ZHRoKCk7Ci0gICAgdW5zaWduZWQgaGVpZ2h0ID0gZnJhbWUuaGVpZ2h0KCk7Ci0KLSAgICBNZWRp
YVNhbXBsZTo6VmlkZW9Sb3RhdGlvbiByb3RhdGlvbjsKLSAgICBzd2l0Y2ggKGZyYW1lLnJvdGF0
aW9uKCkpIHsKLSAgICBjYXNlIHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMDoKLSAgICAgICAgcm90
YXRpb24gPSBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6Tm9uZTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzE4MDoKLSAgICAgICAgcm90YXRpb24g
PSBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6VXBzaWRlRG93bjsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzkwOgotICAgICAgICByb3RhdGlvbiA9
IE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpSaWdodDsKLSAgICAgICAgc3RkOjpzd2FwKHdp
ZHRoLCBoZWlnaHQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIHdlYnJ0Yzo6a1ZpZGVvUm90
YXRpb25fMjcwOgotICAgICAgICByb3RhdGlvbiA9IE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9u
OjpMZWZ0OwotICAgICAgICBzdGQ6OnN3YXAod2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLQotICAgIFJlZlB0cjxSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U+IHByb3Rl
Y3RlZFRoaXModGhpcyk7Ci0gICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IFdU
Rk1vdmUocHJvdGVjdGVkVGhpcyksIHNhbXBsZSA9IFdURk1vdmUoc2FtcGxlKSwgd2lkdGgsIGhl
aWdodCwgcm90YXRpb25dIHsKLSAgICAgICAgcHJvdGVjdGVkVGhpcy0+cHJvY2Vzc05ld1NhbXBs
ZShzYW1wbGUuZ2V0KCksIHdpZHRoLCBoZWlnaHQsIHJvdGF0aW9uKTsKLSAgICB9KTsKLX0KLQot
dm9pZCBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6OnByb2Nlc3NOZXdTYW1wbGUoQ01TYW1w
bGVCdWZmZXJSZWYgc2FtcGxlLCB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCBNZWRp
YVNhbXBsZTo6VmlkZW9Sb3RhdGlvbiByb3RhdGlvbikKLXsKLSAgICBtX2J1ZmZlciA9IHNhbXBs
ZTsKLSAgICBpZiAod2lkdGggIT0gbV9jdXJyZW50U2V0dGluZ3Mud2lkdGgoKSB8fCBoZWlnaHQg
IT0gbV9jdXJyZW50U2V0dGluZ3MuaGVpZ2h0KCkpIHsKLSAgICAgICAgbV9jdXJyZW50U2V0dGlu
Z3Muc2V0V2lkdGgod2lkdGgpOwotICAgICAgICBtX2N1cnJlbnRTZXR0aW5ncy5zZXRIZWlnaHQo
aGVpZ2h0KTsKLSAgICAgICAgc2V0dGluZ3NEaWRDaGFuZ2UoKTsKLSAgICB9Ci0KLSAgICB2aWRl
b1NhbXBsZUF2YWlsYWJsZShNZWRpYVNhbXBsZUFWRk9iakM6OmNyZWF0ZShzYW1wbGUsIHJvdGF0
aW9uKSk7Ci19Ci0KLWNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMmIFJlYWx0
aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6Y2FwYWJpbGl0aWVzKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllczo6ZW1wdHlDYXBhYmlsaXRpZXMoKTsK
LX0KLQotY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzJiBSZWFsdGltZUluY29taW5n
VmlkZW9Tb3VyY2U6OnNldHRpbmdzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9jdXJyZW50U2V0
dGluZ3M7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShMSUJX
RUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9t
YWMvUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlYjdjMzY0ZmUzMjMyMjIyZWFiNGYyNWI3YjQxMDBjYzkx
MDI4MDkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lSW5jb21pbmdWaWRl
b1NvdXJjZS5oCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1
dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
LSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNl
Ci0KLSNpZiBVU0UoTElCV0VCUlRDKQotCi0jaW5jbHVkZSAiTGliV2ViUlRDTWFjcm9zLmgiCi0j
aW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZS5oIgotI2luY2x1ZGUgPHdlYnJ0Yy9hcGkvbWVk
aWFzdHJlYW1pbnRlcmZhY2UuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLXVzaW5n
IENNU2FtcGxlQnVmZmVyUmVmID0gc3RydWN0IG9wYXF1ZUNNU2FtcGxlQnVmZmVyKjsKLXVzaW5n
IENWUGl4ZWxCdWZmZXJSZWYgPSBzdHJ1Y3QgX19DVkJ1ZmZlcio7Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotY2xhc3MgQ2FwdHVyZURldmljZTsKLQotY2xhc3MgUmVhbHRpbWVJbmNvbWluZ1Zp
ZGVvU291cmNlIGZpbmFsIDogcHVibGljIFJlYWx0aW1lTWVkaWFTb3VyY2UsIHByaXZhdGUgcnRj
OjpWaWRlb1NpbmtJbnRlcmZhY2U8d2VicnRjOjpWaWRlb0ZyYW1lPiB7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIFJlZjxSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U+IGNyZWF0ZShydGM6OnNjb3Bl
ZF9yZWZwdHI8d2VicnRjOjpWaWRlb1RyYWNrSW50ZXJmYWNlPiYmLCBTdHJpbmcmJik7Ci0gICAg
flJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZSgpIHsgc3RvcFByb2R1Y2luZ0RhdGEoKTsgfQot
Ci0gICAgdm9pZCBzZXRTb3VyY2VUcmFjayhydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRl
b1RyYWNrSW50ZXJmYWNlPiYmKTsKLQotcHJpdmF0ZToKLSAgICBSZWFsdGltZUluY29taW5nVmlk
ZW9Tb3VyY2UocnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9UcmFja0ludGVyZmFjZT4m
JiwgU3RyaW5nJiYpOwotCi0gICAgLy8gUmVhbHRpbWVNZWRpYVNvdXJjZSBBUEkKLSAgICB2b2lk
IHN0YXJ0UHJvZHVjaW5nRGF0YSgpIGZpbmFsOwotICAgIHZvaWQgc3RvcFByb2R1Y2luZ0RhdGEo
KSAgZmluYWw7Ci0KLSAgICBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzJiBj
YXBhYmlsaXRpZXMoKSBjb25zdCBmaW5hbDsKLSAgICBjb25zdCBSZWFsdGltZU1lZGlhU291cmNl
U2V0dGluZ3MmIHNldHRpbmdzKCkgY29uc3QgZmluYWw7Ci0KLSAgICB2b2lkIHByb2Nlc3NOZXdT
YW1wbGUoQ01TYW1wbGVCdWZmZXJSZWYsIHVuc2lnbmVkLCB1bnNpZ25lZCwgTWVkaWFTYW1wbGU6
OlZpZGVvUm90YXRpb24pOwotCi0gICAgYm9vbCBhcHBseVNpemUoY29uc3QgSW50U2l6ZSYpIGZp
bmFsIHsgcmV0dXJuIHRydWU7IH0KLQotICAgIC8vIHJ0Yzo6VmlkZW9TaW5rSW50ZXJmYWNlCi0g
ICAgdm9pZCBPbkZyYW1lKGNvbnN0IHdlYnJ0Yzo6VmlkZW9GcmFtZSYpIGZpbmFsOwotCi0gICAg
Q1ZQaXhlbEJ1ZmZlclJlZiBwaXhlbEJ1ZmZlckZyb21WaWRlb0ZyYW1lKGNvbnN0IHdlYnJ0Yzo6
VmlkZW9GcmFtZSYpOwotCi0gICAgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzIG1fY3VycmVu
dFNldHRpbmdzOwotICAgIHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvVHJhY2tJbnRl
cmZhY2U+IG1fdmlkZW9UcmFjazsKLSAgICBSZXRhaW5QdHI8Q01TYW1wbGVCdWZmZXJSZWY+IG1f
YnVmZmVyOwotICAgIFJldGFpblB0cjxDVlBpeGVsQnVmZmVyUmVmPiBtX2JsYWNrRnJhbWU7Ci0g
ICAgaW50IG1fYmxhY2tGcmFtZVdpZHRoIHsgMCB9OwotICAgIGludCBtX2JsYWNrRnJhbWVIZWln
aHQgeyAwIH07Ci0jaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECi0gICAgc2l6ZV90IG1fbnVtYmVy
T2ZGcmFtZXMgeyAwIH07Ci0jZW5kaWYKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmIC8vIFVTRShMSUJXRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTWFjLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUluY29taW5n
VmlkZW9Tb3VyY2VNYWMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE0MWRhOTljOWFlOTJjNmY5ZTA5MmFmYjJl
OTdiYjY2OWRhNWRjYTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTWFjLmNwcApAQCAt
MCwwICsxLDE2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAg
ICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
IHRoaXMKKyAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlYWx0
aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1hYy5oIgorCisjaWYgVVNFKExJQldFQlJUQykKKworI2lu
Y2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJNZWRpYVNhbXBsZUFWRk9iakMuaCIKKyNpbmNs
dWRlIDx3ZWJydGMvc2RrL29iamMvRnJhbWV3b3JrL0NsYXNzZXMvVmlkZW8vY29yZXZpZGVvX2Zy
YW1lX2J1ZmZlci5oPgorCisjaW5jbHVkZSAiQ29yZU1lZGlhU29mdExpbmsuaCIKKyNpbmNsdWRl
ICJDb3JlVmlkZW9Tb2Z0TGluay5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlZjxSZWFs
dGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWM+IFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1h
Yzo6Y3JlYXRlKHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvVHJhY2tJbnRlcmZhY2U+
JiYgdmlkZW9UcmFjaywgU3RyaW5nJiYgdHJhY2tJZCkKK3sKKyAgICBhdXRvIHNvdXJjZSA9IGFk
b3B0UmVmKCpuZXcgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTWFjKFdURk1vdmUodmlkZW9U
cmFjayksIFdURk1vdmUodHJhY2tJZCkpKTsKKyAgICByZXR1cm4gc291cmNlOworfQorCitSZWFs
dGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWM6OlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1h
YyhydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb1RyYWNrSW50ZXJmYWNlPiYmIHZpZGVv
VHJhY2ssIFN0cmluZyYmIHZpZGVvVHJhY2tJZCkKKyAgICA6IFJlYWx0aW1lSW5jb21pbmdWaWRl
b1NvdXJjZShXVEZNb3ZlKHZpZGVvVHJhY2spLCBXVEZNb3ZlKHZpZGVvVHJhY2tJZCkpCit7Cit9
CisKK0NWUGl4ZWxCdWZmZXJSZWYgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTWFjOjpwaXhl
bEJ1ZmZlckZyb21WaWRlb0ZyYW1lKGNvbnN0IHdlYnJ0Yzo6VmlkZW9GcmFtZSYgZnJhbWUpCit7
CisgICAgaWYgKG11dGVkKCkpIHsKKyAgICAgICAgaWYgKCFtX2JsYWNrRnJhbWUgfHwgbV9ibGFj
a0ZyYW1lV2lkdGggIT0gZnJhbWUud2lkdGgoKSB8fCBtX2JsYWNrRnJhbWVIZWlnaHQgIT0gZnJh
bWUuaGVpZ2h0KCkpIHsKKyAgICAgICAgICAgIENWUGl4ZWxCdWZmZXJSZWYgcGl4ZWxCdWZmZXIg
PSBudWxscHRyOworICAgICAgICAgICAgYXV0byBzdGF0dXMgPSBDVlBpeGVsQnVmZmVyQ3JlYXRl
KGtDRkFsbG9jYXRvckRlZmF1bHQsIGZyYW1lLndpZHRoKCksIGZyYW1lLmhlaWdodCgpLCBrQ1ZQ
aXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyOFBsYW5hciwgbnVsbHB0ciwgJnBpeGVsQnVmZmVyKTsK
KyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoc3RhdHVzLCBzdGF0dXMgPT0gbm9FcnIpOworCisg
ICAgICAgICAgICBtX2JsYWNrRnJhbWUgPSBwaXhlbEJ1ZmZlcjsKKyAgICAgICAgICAgIG1fYmxh
Y2tGcmFtZVdpZHRoID0gZnJhbWUud2lkdGgoKTsKKyAgICAgICAgICAgIG1fYmxhY2tGcmFtZUhl
aWdodCA9IGZyYW1lLmhlaWdodCgpOworCisgICAgICAgICAgICBzdGF0dXMgPSBDVlBpeGVsQnVm
ZmVyTG9ja0Jhc2VBZGRyZXNzKHBpeGVsQnVmZmVyLCAwKTsKKyAgICAgICAgICAgIEFTU0VSVChz
dGF0dXMgPT0gbm9FcnIpOworICAgICAgICAgICAgdm9pZCogZGF0YSA9IENWUGl4ZWxCdWZmZXJH
ZXRCYXNlQWRkcmVzcyhwaXhlbEJ1ZmZlcik7CisgICAgICAgICAgICBzaXplX3QgeUxlbmd0aCA9
IGZyYW1lLndpZHRoKCkgKiBmcmFtZS5oZWlnaHQoKTsKKyAgICAgICAgICAgIG1lbXNldChkYXRh
LCAwLCB5TGVuZ3RoKTsKKyAgICAgICAgICAgIG1lbXNldChzdGF0aWNfY2FzdDx1aW50OF90Kj4o
ZGF0YSkgKyB5TGVuZ3RoLCAxMjgsIHlMZW5ndGggLyAyKTsKKworICAgICAgICAgICAgc3RhdHVz
ID0gQ1ZQaXhlbEJ1ZmZlclVubG9ja0Jhc2VBZGRyZXNzKHBpeGVsQnVmZmVyLCAwKTsKKyAgICAg
ICAgICAgIEFTU0VSVCghc3RhdHVzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbV9ibGFj
a0ZyYW1lLmdldCgpOworICAgIH0KKyAgICBhdXRvIGJ1ZmZlciA9IGZyYW1lLnZpZGVvX2ZyYW1l
X2J1ZmZlcigpOworICAgIEFTU0VSVChidWZmZXItPnR5cGUoKSA9PSB3ZWJydGM6OlZpZGVvRnJh
bWVCdWZmZXI6OlR5cGU6OmtOYXRpdmUpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDx3ZWJydGM6
OkNvcmVWaWRlb0ZyYW1lQnVmZmVyJj4oKmJ1ZmZlcikucGl4ZWxfYnVmZmVyKCk7Cit9CisKK3Zv
aWQgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTWFjOjpPbkZyYW1lKGNvbnN0IHdlYnJ0Yzo6
VmlkZW9GcmFtZSYgZnJhbWUpCit7CisgICAgaWYgKCFpc1Byb2R1Y2luZ0RhdGEoKSkKKyAgICAg
ICAgcmV0dXJuOworCisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAgaWYgKCEoKyttX251
bWJlck9mRnJhbWVzICUgMzApKQorICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYVN0cmVhbSwgIlJl
YWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1hYzo6T25GcmFtZSAlenUgZnJhbWUiLCBtX251bWJl
ck9mRnJhbWVzKTsKKyNlbmRpZgorCisgICAgYXV0byBwaXhlbEJ1ZmZlciA9IHBpeGVsQnVmZmVy
RnJvbVZpZGVvRnJhbWUoZnJhbWUpOworCisgICAgLy8gRklYTUU6IENvbnZlcnQgdGltaW5nIGlu
Zm9ybWF0aW9uIGZyb20gVmlkZW9GcmFtZSB0byBDTVNhbXBsZVRpbWluZ0luZm8uCisgICAgLy8g
Rm9yIHRoZSBtb21lbnQsIHdlIHdpbGwgcHJldGVuZCB0aGF0IGZyYW1lcyBzaG91bGQgYmUgcmVu
ZGVyZWQgYXNhcC4KKyAgICBDTVNhbXBsZVRpbWluZ0luZm8gdGltaW5nSW5mbzsKKyAgICB0aW1p
bmdJbmZvLnByZXNlbnRhdGlvblRpbWVTdGFtcCA9IGtDTVRpbWVJbnZhbGlkOworICAgIHRpbWlu
Z0luZm8uZGVjb2RlVGltZVN0YW1wID0ga0NNVGltZUludmFsaWQ7CisgICAgdGltaW5nSW5mby5k
dXJhdGlvbiA9IGtDTVRpbWVJbnZhbGlkOworCisgICAgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9u
UmVmIGZvcm1hdERlc2NyaXB0aW9uOworICAgIE9TU3RhdHVzIG9zdGF0dXMgPSBDTVZpZGVvRm9y
bWF0RGVzY3JpcHRpb25DcmVhdGVGb3JJbWFnZUJ1ZmZlcihrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAo
Q1ZJbWFnZUJ1ZmZlclJlZilwaXhlbEJ1ZmZlciwgJmZvcm1hdERlc2NyaXB0aW9uKTsKKyAgICBp
ZiAob3N0YXR1cyAhPSBub0VycikgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBpbml0
aWFsaXplIENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbjogJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KG9z
dGF0dXMpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIENNU2FtcGxlQnVmZmVyUmVm
IHNhbXBsZUJ1ZmZlcjsKKyAgICBvc3RhdHVzID0gQ01TYW1wbGVCdWZmZXJDcmVhdGVSZWFkeVdp
dGhJbWFnZUJ1ZmZlcihrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAoQ1ZJbWFnZUJ1ZmZlclJlZilwaXhl
bEJ1ZmZlciwgZm9ybWF0RGVzY3JpcHRpb24sICZ0aW1pbmdJbmZvLCAmc2FtcGxlQnVmZmVyKTsK
KyAgICBpZiAob3N0YXR1cyAhPSBub0VycikgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0
byBjcmVhdGUgdGhlIHNhbXBsZSBidWZmZXI6ICVkIiwgc3RhdGljX2Nhc3Q8aW50Pihvc3RhdHVz
KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQ0ZSZWxlYXNlKGZvcm1hdERlc2NyaXB0
aW9uKTsKKworICAgIGF1dG8gc2FtcGxlID0gYWRvcHRDRihzYW1wbGVCdWZmZXIpOworCisgICAg
Q0ZBcnJheVJlZiBhdHRhY2htZW50c0FycmF5ID0gQ01TYW1wbGVCdWZmZXJHZXRTYW1wbGVBdHRh
Y2htZW50c0FycmF5KHNhbXBsZUJ1ZmZlciwgdHJ1ZSk7CisgICAgZm9yIChDRkluZGV4IGkgPSAw
OyBpIDwgQ0ZBcnJheUdldENvdW50KGF0dGFjaG1lbnRzQXJyYXkpOyArK2kpIHsKKyAgICAgICAg
Q0ZNdXRhYmxlRGljdGlvbmFyeVJlZiBhdHRhY2htZW50cyA9IChDRk11dGFibGVEaWN0aW9uYXJ5
UmVmKUNGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoYXR0YWNobWVudHNBcnJheSwgaSk7CisgICAgICAg
IENGRGljdGlvbmFyeVNldFZhbHVlKGF0dGFjaG1lbnRzLCBrQ01TYW1wbGVBdHRhY2htZW50S2V5
X0Rpc3BsYXlJbW1lZGlhdGVseSwga0NGQm9vbGVhblRydWUpOworICAgIH0KKworICAgIHVuc2ln
bmVkIHdpZHRoID0gZnJhbWUud2lkdGgoKTsKKyAgICB1bnNpZ25lZCBoZWlnaHQgPSBmcmFtZS5o
ZWlnaHQoKTsKKworICAgIE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uIHJvdGF0aW9uOworICAg
IHN3aXRjaCAoZnJhbWUucm90YXRpb24oKSkgeworICAgIGNhc2Ugd2VicnRjOjprVmlkZW9Sb3Rh
dGlvbl8wOgorICAgICAgICByb3RhdGlvbiA9IE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpO
b25lOworICAgICAgICBicmVhazsKKyAgICBjYXNlIHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMTgw
OgorICAgICAgICByb3RhdGlvbiA9IE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpVcHNpZGVE
b3duOworICAgICAgICBicmVhazsKKyAgICBjYXNlIHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fOTA6
CisgICAgICAgIHJvdGF0aW9uID0gTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246OlJpZ2h0Owor
ICAgICAgICBzdGQ6OnN3YXAod2lkdGgsIGhlaWdodCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8yNzA6CisgICAgICAgIHJvdGF0aW9uID0gTWVkaWFT
YW1wbGU6OlZpZGVvUm90YXRpb246OkxlZnQ7CisgICAgICAgIHN0ZDo6c3dhcCh3aWR0aCwgaGVp
Z2h0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgUmVmUHRyPFJlYWx0aW1lSW5jb21p
bmdWaWRlb1NvdXJjZU1hYz4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBjYWxsT25NYWluVGhy
ZWFkKFtwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwgc2FtcGxlID0gV1RG
TW92ZShzYW1wbGUpLCB3aWR0aCwgaGVpZ2h0LCByb3RhdGlvbl0geworICAgICAgICBwcm90ZWN0
ZWRUaGlzLT5wcm9jZXNzTmV3U2FtcGxlKHNhbXBsZS5nZXQoKSwgd2lkdGgsIGhlaWdodCwgcm90
YXRpb24pOworICAgIH0pOworfQorCit2b2lkIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1h
Yzo6cHJvY2Vzc05ld1NhbXBsZShDTVNhbXBsZUJ1ZmZlclJlZiBzYW1wbGUsIHVuc2lnbmVkIHdp
ZHRoLCB1bnNpZ25lZCBoZWlnaHQsIE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uIHJvdGF0aW9u
KQoreworICAgIG1fYnVmZmVyID0gc2FtcGxlOworICAgIGlmICh3aWR0aCAhPSBtX2N1cnJlbnRT
ZXR0aW5ncy53aWR0aCgpIHx8IGhlaWdodCAhPSBtX2N1cnJlbnRTZXR0aW5ncy5oZWlnaHQoKSkg
eworICAgICAgICBtX2N1cnJlbnRTZXR0aW5ncy5zZXRXaWR0aCh3aWR0aCk7CisgICAgICAgIG1f
Y3VycmVudFNldHRpbmdzLnNldEhlaWdodChoZWlnaHQpOworICAgICAgICBzZXR0aW5nc0RpZENo
YW5nZSgpOworICAgIH0KKworICAgIHZpZGVvU2FtcGxlQXZhaWxhYmxlKE1lZGlhU2FtcGxlQVZG
T2JqQzo6Y3JlYXRlKHNhbXBsZSwgcm90YXRpb24pKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gVVNFKExJQldFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VN
YWMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUlu
Y29taW5nVmlkZW9Tb3VyY2VNYWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lODg3YTY1NWIxNDY1YmRmOWY0NjMw
NGQ4NjA3MDg2YTY1NWU5MDY1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1hYy5oCkBA
IC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisgKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0
aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKExJQldFQlJUQykKKwor
I2luY2x1ZGUgIlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5oIgorCit1c2luZyBDTVNhbXBs
ZUJ1ZmZlclJlZiA9IHN0cnVjdCBvcGFxdWVDTVNhbXBsZUJ1ZmZlcio7Cit1c2luZyBDVlBpeGVs
QnVmZmVyUmVmID0gc3RydWN0IF9fQ1ZCdWZmZXIqOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1hYyBmaW5hbCA6IHB1YmxpYyBSZWFs
dGltZUluY29taW5nVmlkZW9Tb3VyY2UgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8UmVhbHRp
bWVJbmNvbWluZ1ZpZGVvU291cmNlTWFjPiBjcmVhdGUocnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0
Yzo6VmlkZW9UcmFja0ludGVyZmFjZT4mJiwgU3RyaW5nJiYpOworCitwcml2YXRlOgorICAgIFJl
YWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1hYyhydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpW
aWRlb1RyYWNrSW50ZXJmYWNlPiYmLCBTdHJpbmcmJik7CisKKyAgICB2b2lkIHByb2Nlc3NOZXdT
YW1wbGUoQ01TYW1wbGVCdWZmZXJSZWYsIHVuc2lnbmVkLCB1bnNpZ25lZCwgTWVkaWFTYW1wbGU6
OlZpZGVvUm90YXRpb24pOworICAgIENWUGl4ZWxCdWZmZXJSZWYgcGl4ZWxCdWZmZXJGcm9tVmlk
ZW9GcmFtZShjb25zdCB3ZWJydGM6OlZpZGVvRnJhbWUmKTsKKworICAgIC8vIHJ0Yzo6VmlkZW9T
aW5rSW50ZXJmYWNlCisgICAgdm9pZCBPbkZyYW1lKGNvbnN0IHdlYnJ0Yzo6VmlkZW9GcmFtZSYp
IGZpbmFsOworCisgICAgUmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiBtX2J1ZmZlcjsKKyAg
ICBSZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gbV9ibGFja0ZyYW1lOworICAgIGludCBtX2Js
YWNrRnJhbWVXaWR0aCB7IDAgfTsKKyAgICBpbnQgbV9ibGFja0ZyYW1lSGVpZ2h0IHsgMCB9Owor
I2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgIHNpemVfdCBtX251bWJlck9mRnJhbWVzIHsg
MCB9OworI2VuZGlmCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBV
U0UoTElCV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Y0NTBkZjMzYzZmNmEyNTg3ZGEzOWI1
ZWM4MmNjZmNkNjBhMGU3ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVP
dXRnb2luZ1ZpZGVvU291cmNlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI2NiArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSByZXF1aXJlZCB0byBiZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUgotICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IKLSAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCi0gKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5oIgotCi0jaWYgVVNF
KExJQldFQlJUQykKLQotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlIDx3ZWJydGMvYXBp
L3ZpZGVvL2k0MjBfYnVmZmVyLmg+Ci0jaW5jbHVkZSA8d2VicnRjL2NvbW1vbl92aWRlby9saWJ5
dXYvaW5jbHVkZS93ZWJydGNfbGlieXV2Lmg+Ci0jaW5jbHVkZSA8d2VicnRjL3Nkay9vYmpjL0Zy
YW1ld29yay9DbGFzc2VzL1ZpZGVvL2NvcmV2aWRlb19mcmFtZV9idWZmZXIuaD4KLSNpbmNsdWRl
IDx3dGYvQ3VycmVudFRpbWUuaD4KLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotCi0jaW5j
bHVkZSAiQ29yZU1lZGlhU29mdExpbmsuaCIKLSNpbmNsdWRlICJDb3JlVmlkZW9Tb2Z0TGluay5o
IgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6
UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlKFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4m
JiB2aWRlb1NvdXJjZSkKLSAgICA6IG1fdmlkZW9Tb3VyY2UoV1RGTW92ZSh2aWRlb1NvdXJjZSkp
Ci0gICAgLCBtX2JsYWNrRnJhbWVUaW1lcigqdGhpcywgJlJlYWx0aW1lT3V0Z29pbmdWaWRlb1Nv
dXJjZTo6c2VuZE9uZUJsYWNrRnJhbWUpCi17Ci0gICAgbV92aWRlb1NvdXJjZS0+YWRkT2JzZXJ2
ZXIoKnRoaXMpOwotICAgIGluaXRpYWxpemVGcm9tU291cmNlKCk7Ci19Ci0KLWJvb2wgUmVhbHRp
bWVPdXRnb2luZ1ZpZGVvU291cmNlOjpzZXRTb3VyY2UoUmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2
YXRlPiYmIG5ld1NvdXJjZSkKLXsKLSAgICBpZiAoIW1faW5pdGlhbFNldHRpbmdzKQotICAgICAg
ICBtX2luaXRpYWxTZXR0aW5ncyA9IG1fdmlkZW9Tb3VyY2UtPnNvdXJjZSgpLnNldHRpbmdzKCk7
Ci0KLSAgICBtX3ZpZGVvU291cmNlLT5yZW1vdmVPYnNlcnZlcigqdGhpcyk7Ci0gICAgbV92aWRl
b1NvdXJjZSA9IFdURk1vdmUobmV3U291cmNlKTsKLSAgICBtX3ZpZGVvU291cmNlLT5hZGRPYnNl
cnZlcigqdGhpcyk7Ci0KLSAgICBpbml0aWFsaXplRnJvbVNvdXJjZSgpOwotCi0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLXZvaWQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpzdG9wKCkKLXsK
LSAgICBtX3ZpZGVvU291cmNlLT5yZW1vdmVPYnNlcnZlcigqdGhpcyk7Ci0gICAgbV9ibGFja0Zy
YW1lVGltZXIuc3RvcCgpOwotICAgIG1faXNTdG9wcGVkID0gdHJ1ZTsKLX0KLQotdm9pZCBSZWFs
dGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnVwZGF0ZUJsYWNrRnJhbWVzU2VuZGluZygpCi17Ci0g
ICAgaWYgKCFtX211dGVkICYmIG1fZW5hYmxlZCkgewotICAgICAgICBpZiAobV9ibGFja0ZyYW1l
VGltZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgICAgIG1fYmxhY2tGcmFtZVRpbWVyLnN0b3AoKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHNlbmRCbGFja0ZyYW1lc0lmTmVlZGVkKCk7
Ci19Ci0KLXZvaWQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpzb3VyY2VNdXRlZENoYW5n
ZWQoKQotewotICAgIEFTU0VSVChtX211dGVkICE9IG1fdmlkZW9Tb3VyY2UtPm11dGVkKCkpOwot
Ci0gICAgbV9tdXRlZCA9IG1fdmlkZW9Tb3VyY2UtPm11dGVkKCk7Ci0KLSAgICB1cGRhdGVCbGFj
a0ZyYW1lc1NlbmRpbmcoKTsKLX0KLQotdm9pZCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6
OnNvdXJjZUVuYWJsZWRDaGFuZ2VkKCkKLXsKLSAgICBBU1NFUlQobV9lbmFibGVkICE9IG1fdmlk
ZW9Tb3VyY2UtPmVuYWJsZWQoKSk7Ci0KLSAgICBtX2VuYWJsZWQgPSBtX3ZpZGVvU291cmNlLT5l
bmFibGVkKCk7Ci0KLSAgICB1cGRhdGVCbGFja0ZyYW1lc1NlbmRpbmcoKTsKLX0KLQotdm9pZCBS
ZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OmluaXRpYWxpemVGcm9tU291cmNlKCkKLXsKLSAg
ICBjb25zdCBhdXRvJiBzZXR0aW5ncyA9IG1fdmlkZW9Tb3VyY2UtPnNvdXJjZSgpLnNldHRpbmdz
KCk7Ci0gICAgbV93aWR0aCA9IHNldHRpbmdzLndpZHRoKCk7Ci0gICAgbV9oZWlnaHQgPSBzZXR0
aW5ncy5oZWlnaHQoKTsKLQotICAgIG1fbXV0ZWQgPSBtX3ZpZGVvU291cmNlLT5tdXRlZCgpOwot
ICAgIG1fZW5hYmxlZCA9IG1fdmlkZW9Tb3VyY2UtPmVuYWJsZWQoKTsKLQotICAgIHVwZGF0ZUJs
YWNrRnJhbWVzU2VuZGluZygpOwotfQotCi1ib29sIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJj
ZTo6R2V0U3RhdHMoU3RhdHMqKQotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBSZWFs
dGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OkFkZE9yVXBkYXRlU2luayhydGM6OlZpZGVvU2lua0lu
dGVyZmFjZTx3ZWJydGM6OlZpZGVvRnJhbWU+KiBzaW5rLCBjb25zdCBydGM6OlZpZGVvU2lua1dh
bnRzJiBzaW5rV2FudHMpCi17Ci0gICAgQVNTRVJUKCFzaW5rV2FudHMuYmxhY2tfZnJhbWVzKTsK
LQotICAgIGlmIChzaW5rV2FudHMucm90YXRpb25fYXBwbGllZCkKLSAgICAgICAgbV9zaG91bGRB
cHBseVJvdGF0aW9uID0gdHJ1ZTsKLQotICAgIGlmICghbV9zaW5rcy5jb250YWlucyhzaW5rKSkK
LSAgICAgICAgbV9zaW5rcy5hcHBlbmQoc2luayk7Ci0KLSAgICBjYWxsT25NYWluVGhyZWFkKFtw
cm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldKCkgewotICAgICAgICBwcm90ZWN0ZWRUaGlz
LT5zZW5kQmxhY2tGcmFtZXNJZk5lZWRlZCgpOwotICAgIH0pOwotfQotCi12b2lkIFJlYWx0aW1l
T3V0Z29pbmdWaWRlb1NvdXJjZTo6UmVtb3ZlU2luayhydGM6OlZpZGVvU2lua0ludGVyZmFjZTx3
ZWJydGM6OlZpZGVvRnJhbWU+KiBzaW5rKQotewotICAgIG1fc2lua3MucmVtb3ZlRmlyc3Qoc2lu
ayk7Ci0KLSAgICBpZiAobV9zaW5rcy5zaXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNh
bGxPbk1haW5UaHJlYWQoW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0oKSB7Ci0gICAg
ICAgIGlmIChwcm90ZWN0ZWRUaGlzLT5tX2JsYWNrRnJhbWVUaW1lci5pc0FjdGl2ZSgpKQotICAg
ICAgICAgICAgcHJvdGVjdGVkVGhpcy0+bV9ibGFja0ZyYW1lVGltZXIuc3RvcCgpOwotICAgIH0p
OwotfQotCi12b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6c2VuZEJsYWNrRnJhbWVz
SWZOZWVkZWQoKQotewotICAgIGlmIChtX2JsYWNrRnJhbWVUaW1lci5pc0FjdGl2ZSgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fc2lua3Muc2l6ZSgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAoIW1fbXV0ZWQgJiYgbV9lbmFibGVkKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAoIW1fd2lkdGggfHwgIW1faGVpZ2h0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
IW1fYmxhY2tGcmFtZSkgewotICAgICAgICBhdXRvIHdpZHRoID0gbV93aWR0aDsKLSAgICAgICAg
YXV0byBoZWlnaHQgPSBtX2hlaWdodDsKLSAgICAgICAgaWYgKG1fc2hvdWxkQXBwbHlSb3RhdGlv
biAmJiAobV9jdXJyZW50Um90YXRpb24gPT0gd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8wIHx8IG1f
Y3VycmVudFJvdGF0aW9uID09IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fOTApKQotICAgICAgICAg
ICAgc3RkOjpzd2FwKHdpZHRoLCBoZWlnaHQpOwotICAgICAgICBhdXRvIGZyYW1lID0gbV9idWZm
ZXJQb29sLkNyZWF0ZUJ1ZmZlcih3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgQVNTRVJUKGZyYW1l
KTsKLSAgICAgICAgaWYgKCFmcmFtZSkgewotICAgICAgICAgICAgUkVMRUFTRV9MT0coV2ViUlRD
LCAiUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpzZW5kQmxhY2tGcmFtZXNJZk5lZWRlZCB1
bmFibGUgdG8gc2VuZCBibGFjayBmcmFtZXMiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgICAgICB3ZWJydGM6Okk0MjBCdWZmZXI6OlNldEJsYWNrKGZyYW1lLmdldCgpKTsK
LSAgICAgICAgbV9ibGFja0ZyYW1lID0gV1RGTW92ZShmcmFtZSk7Ci0gICAgfQotICAgIHNlbmRP
bmVCbGFja0ZyYW1lKCk7Ci0gICAgbV9ibGFja0ZyYW1lVGltZXIuc3RhcnRSZXBlYXRpbmcoMV9z
KTsKLX0KLQotdm9pZCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnNlbmRPbmVCbGFja0Zy
YW1lKCkKLXsKLSAgICBSRUxFQVNFX0xPRyhNZWRpYVN0cmVhbSwgIlJlYWx0aW1lT3V0Z29pbmdW
aWRlb1NvdXJjZTo6c2VuZE9uZUJsYWNrRnJhbWUiKTsKLSAgICBzZW5kRnJhbWUocnRjOjpzY29w
ZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9GcmFtZUJ1ZmZlcj4obV9ibGFja0ZyYW1lKSk7Ci19Ci0K
LXZvaWQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpzZW5kRnJhbWUocnRjOjpzY29wZWRf
cmVmcHRyPHdlYnJ0Yzo6VmlkZW9GcmFtZUJ1ZmZlcj4mJiBidWZmZXIpCi17Ci0gICAgaW50NjRf
dCB0aW1lc3RhbXBNaWNyb1NlY29uZHMgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWVNUygp
ICogMTAwMDsKLSAgICB3ZWJydGM6OlZpZGVvRnJhbWUgZnJhbWUoYnVmZmVyLCBtX3Nob3VsZEFw
cGx5Um90YXRpb24gPyB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzAgOiBtX2N1cnJlbnRSb3RhdGlv
biwgdGltZXN0YW1wTWljcm9TZWNvbmRzKTsKLSAgICBmb3IgKGF1dG8qIHNpbmsgOiBtX3Npbmtz
KQotICAgICAgICBzaW5rLT5PbkZyYW1lKGZyYW1lKTsKLX0KLQotdm9pZCBSZWFsdGltZU91dGdv
aW5nVmlkZW9Tb3VyY2U6OnZpZGVvU2FtcGxlQXZhaWxhYmxlKE1lZGlhU2FtcGxlJiBzYW1wbGUp
Ci17Ci0gICAgaWYgKCFtX3NpbmtzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KG1fbXV0ZWQgfHwgIW1fZW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgIVJFTEVBU0Vf
TE9HX0RJU0FCTEVECi0gICAgaWYgKCEoKyttX251bWJlck9mRnJhbWVzICUgMzApKQotICAgICAg
ICBSRUxFQVNFX0xPRyhNZWRpYVN0cmVhbSwgIlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6
c2VuZEZyYW1lICV6dSBmcmFtZSIsIG1fbnVtYmVyT2ZGcmFtZXMpOwotI2VuZGlmCi0KLSAgICBz
d2l0Y2ggKHNhbXBsZS52aWRlb1JvdGF0aW9uKCkpIHsKLSAgICBjYXNlIE1lZGlhU2FtcGxlOjpW
aWRlb1JvdGF0aW9uOjpOb25lOgotICAgICAgICBtX2N1cnJlbnRSb3RhdGlvbiA9IHdlYnJ0Yzo6
a1ZpZGVvUm90YXRpb25fMDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBNZWRpYVNhbXBsZTo6
VmlkZW9Sb3RhdGlvbjo6VXBzaWRlRG93bjoKLSAgICAgICAgbV9jdXJyZW50Um90YXRpb24gPSB3
ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzE4MDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBNZWRp
YVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6UmlnaHQ6Ci0gICAgICAgIG1fY3VycmVudFJvdGF0aW9u
ID0gd2VicnRjOjprVmlkZW9Sb3RhdGlvbl85MDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBN
ZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6TGVmdDoKLSAgICAgICAgbV9jdXJyZW50Um90YXRp
b24gPSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzI3MDsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
Ci0gICAgQVNTRVJUKHNhbXBsZS5wbGF0Zm9ybVNhbXBsZSgpLnR5cGUgPT0gUGxhdGZvcm1TYW1w
bGU6OkNNU2FtcGxlQnVmZmVyVHlwZSk7Ci0gICAgYXV0byBwaXhlbEJ1ZmZlciA9IHN0YXRpY19j
YXN0PENWUGl4ZWxCdWZmZXJSZWY+KENNU2FtcGxlQnVmZmVyR2V0SW1hZ2VCdWZmZXIoc2FtcGxl
LnBsYXRmb3JtU2FtcGxlKCkuc2FtcGxlLmNtU2FtcGxlQnVmZmVyKSk7Ci0gICAgYXV0byBwaXhl
bEZvcm1hdFR5cGUgPSBDVlBpeGVsQnVmZmVyR2V0UGl4ZWxGb3JtYXRUeXBlKHBpeGVsQnVmZmVy
KTsKLQotICAgIGlmIChwaXhlbEZvcm1hdFR5cGUgPT0ga0NWUGl4ZWxGb3JtYXRUeXBlXzQyMFlw
Q2JDcjhQbGFuYXIgfHwgcGl4ZWxGb3JtYXRUeXBlID09IGtDVlBpeGVsRm9ybWF0VHlwZV80MjBZ
cENiQ3I4QmlQbGFuYXJGdWxsUmFuZ2UpIHsKLSAgICAgICAgcnRjOjpzY29wZWRfcmVmcHRyPHdl
YnJ0Yzo6VmlkZW9GcmFtZUJ1ZmZlcj4gYnVmZmVyID0gbmV3IHJ0Yzo6UmVmQ291bnRlZE9iamVj
dDx3ZWJydGM6OkNvcmVWaWRlb0ZyYW1lQnVmZmVyPihwaXhlbEJ1ZmZlcik7Ci0gICAgICAgIGlm
IChtX3Nob3VsZEFwcGx5Um90YXRpb24gJiYgbV9jdXJyZW50Um90YXRpb24gIT0gd2VicnRjOjpr
VmlkZW9Sb3RhdGlvbl8wKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG1ha2Ug
QVZWaWRlb0NhcHR1cmVTb3VyY2UgaGFuZGxlIHRoZSByb3RhdGlvbiB3aGVuZXZlciBwb3NzaWJs
ZS4KLSAgICAgICAgICAgIC8vIFRoaXMgaW1wbGVtZW50YXRpb24gaXMgaW5lZmZpY2llbnQsIHdl
IHNob3VsZCByb3RhdGUgb24gdGhlIENNU2FtcGxlQnVmZmVyIGRpcmVjdGx5IGluc3RlYWQgb2Yg
ZG9pbmcgdGhpcyBkb3VibGUgYWxsb2NhdGlvbi4KLSAgICAgICAgICAgIGF1dG8gcm90YXRlZEJ1
ZmZlciA9IGJ1ZmZlci0+VG9JNDIwKCk7Ci0gICAgICAgICAgICBBU1NFUlQocm90YXRlZEJ1ZmZl
cik7Ci0gICAgICAgICAgICBidWZmZXIgPSB3ZWJydGM6Okk0MjBCdWZmZXI6OlJvdGF0ZSgqcm90
YXRlZEJ1ZmZlciwgbV9jdXJyZW50Um90YXRpb24pOwotICAgICAgICB9Ci0gICAgICAgIHNlbmRG
cmFtZShXVEZNb3ZlKGJ1ZmZlcikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQ1ZQ
aXhlbEJ1ZmZlckxvY2tCYXNlQWRkcmVzcyhwaXhlbEJ1ZmZlciwgMCk7Ci0gICAgYXV0byogc291
cmNlID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oQ1ZQaXhlbEJ1ZmZlckdldEJhc2VBZGRy
ZXNzT2ZQbGFuZShwaXhlbEJ1ZmZlciwgMCkpOwotCi0gICAgQVNTRVJUKG1fd2lkdGgpOwotICAg
IEFTU0VSVChtX2hlaWdodCk7Ci0KLSAgICBhdXRvIG5ld0J1ZmZlciA9IG1fYnVmZmVyUG9vbC5D
cmVhdGVCdWZmZXIobV93aWR0aCwgbV9oZWlnaHQpOwotICAgIEFTU0VSVChuZXdCdWZmZXIpOwot
ICAgIGlmICghbmV3QnVmZmVyKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HKFdlYlJUQywgIlJlYWx0
aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6dmlkZW9TYW1wbGVBdmFpbGFibGUgdW5hYmxlIHRvIGFs
bG9jYXRlIGJ1ZmZlciBmb3IgY29udmVyc2lvbiB0byBZVVYiKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBpZiAocGl4ZWxGb3JtYXRUeXBlID09IGtDVlBpeGVsRm9ybWF0VHlwZV8zMkJH
UkEpCi0gICAgICAgIHdlYnJ0Yzo6Q29udmVydFRvSTQyMCh3ZWJydGM6OlZpZGVvVHlwZTo6a0FS
R0IsIHNvdXJjZSwgMCwgMCwgbV93aWR0aCwgbV9oZWlnaHQsIDAsIHdlYnJ0Yzo6a1ZpZGVvUm90
YXRpb25fMCwgbmV3QnVmZmVyKTsKLSAgICBlbHNlIHsKLSAgICAgICAgQVNTRVJUKHBpeGVsRm9y
bWF0VHlwZSA9PSBrQ1ZQaXhlbEZvcm1hdFR5cGVfMzJBUkdCKTsKLSAgICAgICAgd2VicnRjOjpD
b252ZXJ0VG9JNDIwKHdlYnJ0Yzo6VmlkZW9UeXBlOjprQkdSQSwgc291cmNlLCAwLCAwLCBtX3dp
ZHRoLCBtX2hlaWdodCwgMCwgd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8wLCBuZXdCdWZmZXIpOwot
ICAgIH0KLSAgICBDVlBpeGVsQnVmZmVyVW5sb2NrQmFzZUFkZHJlc3MocGl4ZWxCdWZmZXIsIDAp
OwotICAgIGlmIChtX3Nob3VsZEFwcGx5Um90YXRpb24gJiYgbV9jdXJyZW50Um90YXRpb24gIT0g
d2VicnRjOjprVmlkZW9Sb3RhdGlvbl8wKQotICAgICAgICBuZXdCdWZmZXIgPSB3ZWJydGM6Okk0
MjBCdWZmZXI6OlJvdGF0ZSgqbmV3QnVmZmVyLCBtX2N1cnJlbnRSb3RhdGlvbik7Ci0gICAgc2Vu
ZEZyYW1lKFdURk1vdmUobmV3QnVmZmVyKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LQotI2VuZGlmIC8vIFVTRShMSUJXRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1Zp
ZGVvU291cmNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3ZTc4YjUxNjVkMDU2
OTVmZTFhNDU4NDA4NTliYjExYzEyZTQ4ODYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFj
L1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE2ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkLCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIHJlcXVpcmVkIHRvIGJlIG1ldDoKLSAqCi0gKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCi0gKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUgotICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKLSAqIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
Ci0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21h
IG9uY2UKLQotI2lmIFVTRShMSUJXRUJSVEMpCi0KLSNpbmNsdWRlICJMaWJXZWJSVENNYWNyb3Mu
aCIKLSNpbmNsdWRlICJNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5oIgotI2luY2x1ZGUgPFRpbWVy
Lmg+Ci0jaW5jbHVkZSA8d2VicnRjL2FwaS9tZWRpYXN0cmVhbWludGVyZmFjZS5oPgotI2luY2x1
ZGUgPHdlYnJ0Yy9iYXNlL29wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d2VicnRjL2NvbW1vbl92aWRl
by9pbmNsdWRlL2k0MjBfYnVmZmVyX3Bvb2wuaD4KLSNpbmNsdWRlIDx3ZWJydGMvbWVkaWEvYmFz
ZS92aWRlb3NpbmtpbnRlcmZhY2UuaD4KLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNs
dWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1jbGFzcyBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UgZmluYWwgOiBwdWJsaWMgVGhyZWFk
U2FmZVJlZkNvdW50ZWQ8UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlPiwgcHVibGljIHdlYnJ0
Yzo6VmlkZW9UcmFja1NvdXJjZUludGVyZmFjZSwgcHJpdmF0ZSBNZWRpYVN0cmVhbVRyYWNrUHJp
dmF0ZTo6T2JzZXJ2ZXIgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8UmVhbHRpbWVPdXRnb2lu
Z1ZpZGVvU291cmNlPiBjcmVhdGUoUmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiYmIHZpZGVv
U291cmNlKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJj
ZShXVEZNb3ZlKHZpZGVvU291cmNlKSkpOyB9Ci0gICAgflJlYWx0aW1lT3V0Z29pbmdWaWRlb1Nv
dXJjZSgpIHsgc3RvcCgpOyB9Ci0KLSAgICB2b2lkIHN0b3AoKTsKLSAgICBib29sIHNldFNvdXJj
ZShSZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYpOwotICAgIE1lZGlhU3RyZWFtVHJhY2tQ
cml2YXRlJiBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3ZpZGVvU291cmNlLmdldCgpOyB9Ci0K
LSAgICBpbnQgQWRkUmVmKCkgY29uc3QgZmluYWwgeyByZWYoKTsgcmV0dXJuIHJlZkNvdW50KCk7
IH0KLSAgICBpbnQgUmVsZWFzZSgpIGNvbnN0IGZpbmFsIHsgZGVyZWYoKTsgcmV0dXJuIHJlZkNv
dW50KCk7IH0KLQotICAgIHZvaWQgc2V0QXBwbHlSb3RhdGlvbihib29sIHNob3VsZEFwcGx5Um90
YXRpb24pIHsgbV9zaG91bGRBcHBseVJvdGF0aW9uID0gc2hvdWxkQXBwbHlSb3RhdGlvbjsgfQot
Ci1wcml2YXRlOgotICAgIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZShSZWY8TWVkaWFTdHJl
YW1UcmFja1ByaXZhdGU+JiYpOwotCi0gICAgdm9pZCBzZW5kRnJhbWUocnRjOjpzY29wZWRfcmVm
cHRyPHdlYnJ0Yzo6VmlkZW9GcmFtZUJ1ZmZlcj4mJik7Ci0gICAgdm9pZCBzZW5kQmxhY2tGcmFt
ZXNJZk5lZWRlZCgpOwotICAgIHZvaWQgc2VuZE9uZUJsYWNrRnJhbWUoKTsKLSAgICB2b2lkIGlu
aXRpYWxpemVGcm9tU291cmNlKCk7Ci0gICAgdm9pZCB1cGRhdGVCbGFja0ZyYW1lc1NlbmRpbmco
KTsKLQotICAgIC8vIE5vdGlmaWVyIEFQSQotICAgIHZvaWQgUmVnaXN0ZXJPYnNlcnZlcih3ZWJy
dGM6Ok9ic2VydmVySW50ZXJmYWNlKikgZmluYWwgeyB9Ci0gICAgdm9pZCBVbnJlZ2lzdGVyT2Jz
ZXJ2ZXIod2VicnRjOjpPYnNlcnZlckludGVyZmFjZSopIGZpbmFsIHsgfQotCi0gICAgLy8gVmlk
ZW9UcmFja1NvdXJjZUludGVyZmFjZSBBUEkKLSAgICBib29sIGlzX3NjcmVlbmNhc3QoKSBjb25z
dCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQotICAgIHJ0Yzo6T3B0aW9uYWw8Ym9vbD4gbmVlZHNf
ZGVub2lzaW5nKCkgY29uc3QgZmluYWwgeyByZXR1cm4gcnRjOjpPcHRpb25hbDxib29sPigpOyB9
Ci0gICAgYm9vbCBHZXRTdGF0cyhTdGF0cyopIGZpbmFsOwotCi0gICAgLy8gTWVkaWFTb3VyY2VJ
bnRlcmZhY2UgQVBJCi0gICAgU291cmNlU3RhdGUgc3RhdGUoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBTb3VyY2VTdGF0ZSgpOyB9Ci0gICAgYm9vbCByZW1vdGUoKSBjb25zdCBmaW5hbCB7IHJldHVy
biB0cnVlOyB9Ci0KLSAgICAvLyBydGM6OlZpZGVvU291cmNlSW50ZXJmYWNlPHdlYnJ0Yzo6Vmlk
ZW9GcmFtZT4gQVBJCi0gICAgdm9pZCBBZGRPclVwZGF0ZVNpbmsocnRjOjpWaWRlb1NpbmtJbnRl
cmZhY2U8d2VicnRjOjpWaWRlb0ZyYW1lPiosIGNvbnN0IHJ0Yzo6VmlkZW9TaW5rV2FudHMmKSBm
aW5hbDsKLSAgICB2b2lkIFJlbW92ZVNpbmsocnRjOjpWaWRlb1NpbmtJbnRlcmZhY2U8d2VicnRj
OjpWaWRlb0ZyYW1lPiopIGZpbmFsOwotCi0gICAgdm9pZCBzb3VyY2VNdXRlZENoYW5nZWQoKTsK
LSAgICB2b2lkIHNvdXJjZUVuYWJsZWRDaGFuZ2VkKCk7Ci0gICAgdm9pZCB2aWRlb1NhbXBsZUF2
YWlsYWJsZShNZWRpYVNhbXBsZSYpOwotCi0gICAgLy8gTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6
Ok9ic2VydmVyIEFQSQotICAgIHZvaWQgdHJhY2tNdXRlZENoYW5nZWQoTWVkaWFTdHJlYW1UcmFj
a1ByaXZhdGUmKSBmaW5hbCB7IHNvdXJjZU11dGVkQ2hhbmdlZCgpOyB9Ci0gICAgdm9pZCB0cmFj
a0VuYWJsZWRDaGFuZ2VkKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJikgZmluYWwgeyBzb3VyY2VF
bmFibGVkQ2hhbmdlZCgpOyB9Ci0gICAgdm9pZCB0cmFja1NldHRpbmdzQ2hhbmdlZChNZWRpYVN0
cmVhbVRyYWNrUHJpdmF0ZSYpIGZpbmFsIHsgaW5pdGlhbGl6ZUZyb21Tb3VyY2UoKTsgfQotICAg
IHZvaWQgc2FtcGxlQnVmZmVyVXBkYXRlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYsIE1lZGlh
U2FtcGxlJiBzYW1wbGUpIGZpbmFsIHsgdmlkZW9TYW1wbGVBdmFpbGFibGUoc2FtcGxlKTsgfQot
ICAgIHZvaWQgdHJhY2tFbmRlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYpIGZpbmFsIHsgfQot
Ci0gICAgVmVjdG9yPHJ0Yzo6VmlkZW9TaW5rSW50ZXJmYWNlPHdlYnJ0Yzo6VmlkZW9GcmFtZT4q
PiBtX3NpbmtzOwotICAgIHdlYnJ0Yzo6STQyMEJ1ZmZlclBvb2wgbV9idWZmZXJQb29sOwotICAg
IFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4gbV92aWRlb1NvdXJjZTsKLSAgICBib29sIG1f
ZW5hYmxlZCB7IHRydWUgfTsKLSAgICBib29sIG1fbXV0ZWQgeyBmYWxzZSB9OwotICAgIHN0ZDo6
b3B0aW9uYWw8UmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzPiBtX2luaXRpYWxTZXR0aW5nczsK
LSAgICB3ZWJydGM6OlZpZGVvUm90YXRpb24gbV9jdXJyZW50Um90YXRpb24geyB3ZWJydGM6OmtW
aWRlb1JvdGF0aW9uXzAgfTsKLSAgICB1aW50MzJfdCBtX3dpZHRoIHsgMCB9OwotICAgIHVpbnQz
Ml90IG1faGVpZ2h0IHsgMCB9OwotICAgIGJvb2wgbV9pc1N0b3BwZWQgeyBmYWxzZSB9OwotICAg
IFRpbWVyIG1fYmxhY2tGcmFtZVRpbWVyOwotICAgIHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6
OlZpZGVvRnJhbWVCdWZmZXI+IG1fYmxhY2tGcmFtZTsKLSAgICBib29sIG1fc2hvdWxkQXBwbHlS
b3RhdGlvbiB7IGZhbHNlIH07Ci0jaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECi0gICAgc2l6ZV90
IG1fbnVtYmVyT2ZGcmFtZXMgeyAwIH07Ci0jZW5kaWYKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmIC8vIFVTRShMSUJXRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNl
TWFjLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGlt
ZU91dGdvaW5nVmlkZW9Tb3VyY2VNYWMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdlY2Y1NTk1NDM5M2MzYmQ4
NzdmY2M3ZWQ0OTkzZmQwYTk1MWU2MjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTWFj
LmNwcApAQCAtMCwwICsxLDEyMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJ
bmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQsIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgcmVxdWlyZWQgdG8g
YmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhl
IG5hbWUgb2YgQXBwbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAor
ICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZWFsdGltZU91dGdvaW5n
VmlkZW9Tb3VyY2VNYWMuaCIKKworI2lmIFVTRShMSUJXRUJSVEMpCisKKyNpbmNsdWRlICJMb2dn
aW5nLmgiCisjaW5jbHVkZSA8d2VicnRjL2FwaS92aWRlby9pNDIwX2J1ZmZlci5oPgorI2luY2x1
ZGUgPHdlYnJ0Yy9jb21tb25fdmlkZW8vbGlieXV2L2luY2x1ZGUvd2VicnRjX2xpYnl1di5oPgor
I2luY2x1ZGUgPHdlYnJ0Yy9zZGsvb2JqYy9GcmFtZXdvcmsvQ2xhc3Nlcy9WaWRlby9jb3Jldmlk
ZW9fZnJhbWVfYnVmZmVyLmg+CisKKyNpbmNsdWRlICJDb3JlTWVkaWFTb2Z0TGluay5oIgorI2lu
Y2x1ZGUgIkNvcmVWaWRlb1NvZnRMaW5rLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVh
bHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTWFjOjpSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VN
YWMoUmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiYmIHZpZGVvU291cmNlKQorICAgIDogUmVh
bHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlKFdURk1vdmUodmlkZW9Tb3VyY2UpKQoreworfQorCit2
b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZU1hYzo6dmlkZW9TYW1wbGVBdmFpbGFibGUo
TWVkaWFTYW1wbGUmIHNhbXBsZSkKK3sKKyAgICBpZiAoIW1fc2lua3Muc2l6ZSgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAobV9tdXRlZCB8fCAhbV9lbmFibGVkKQorICAgICAgICByZXR1
cm47CisKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICBpZiAoISgrK21fbnVtYmVyT2ZG
cmFtZXMgJSAzMCkpCisgICAgICAgIFJFTEVBU0VfTE9HKE1lZGlhU3RyZWFtLCAiUmVhbHRpbWVP
dXRnb2luZ1ZpZGVvU291cmNlTWFjOjpzZW5kRnJhbWUgJXp1IGZyYW1lIiwgbV9udW1iZXJPZkZy
YW1lcyk7CisjZW5kaWYKKworICAgIHN3aXRjaCAoc2FtcGxlLnZpZGVvUm90YXRpb24oKSkgewor
ICAgIGNhc2UgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246Ok5vbmU6CisgICAgICAgIG1fY3Vy
cmVudFJvdGF0aW9uID0gd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8wOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpVcHNpZGVEb3duOgorICAgICAg
ICBtX2N1cnJlbnRSb3RhdGlvbiA9IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMTgwOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpSaWdodDoKKyAg
ICAgICAgbV9jdXJyZW50Um90YXRpb24gPSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzkwOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpMZWZ0Ogor
ICAgICAgICBtX2N1cnJlbnRSb3RhdGlvbiA9IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMjcwOwor
ICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBBU1NFUlQoc2FtcGxlLnBsYXRmb3JtU2FtcGxl
KCkudHlwZSA9PSBQbGF0Zm9ybVNhbXBsZTo6Q01TYW1wbGVCdWZmZXJUeXBlKTsKKyAgICBhdXRv
IHBpeGVsQnVmZmVyID0gc3RhdGljX2Nhc3Q8Q1ZQaXhlbEJ1ZmZlclJlZj4oQ01TYW1wbGVCdWZm
ZXJHZXRJbWFnZUJ1ZmZlcihzYW1wbGUucGxhdGZvcm1TYW1wbGUoKS5zYW1wbGUuY21TYW1wbGVC
dWZmZXIpKTsKKyAgICBhdXRvIHBpeGVsRm9ybWF0VHlwZSA9IENWUGl4ZWxCdWZmZXJHZXRQaXhl
bEZvcm1hdFR5cGUocGl4ZWxCdWZmZXIpOworCisgICAgaWYgKHBpeGVsRm9ybWF0VHlwZSA9PSBr
Q1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyOFBsYW5hciB8fCBwaXhlbEZvcm1hdFR5cGUgPT0g
a0NWUGl4ZWxGb3JtYXRUeXBlXzQyMFlwQ2JDcjhCaVBsYW5hckZ1bGxSYW5nZSkgeworICAgICAg
ICBydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb0ZyYW1lQnVmZmVyPiBidWZmZXIgPSBu
ZXcgcnRjOjpSZWZDb3VudGVkT2JqZWN0PHdlYnJ0Yzo6Q29yZVZpZGVvRnJhbWVCdWZmZXI+KHBp
eGVsQnVmZmVyKTsKKyAgICAgICAgaWYgKG1fc2hvdWxkQXBwbHlSb3RhdGlvbiAmJiBtX2N1cnJl
bnRSb3RhdGlvbiAhPSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzApIHsKKyAgICAgICAgICAgIC8v
IEZJWE1FOiBXZSBzaG91bGQgbWFrZSBBVlZpZGVvQ2FwdHVyZVNvdXJjZSBoYW5kbGUgdGhlIHJv
dGF0aW9uIHdoZW5ldmVyIHBvc3NpYmxlLgorICAgICAgICAgICAgLy8gVGhpcyBpbXBsZW1lbnRh
dGlvbiBpcyBpbmVmZmljaWVudCwgd2Ugc2hvdWxkIHJvdGF0ZSBvbiB0aGUgQ01TYW1wbGVCdWZm
ZXIgZGlyZWN0bHkgaW5zdGVhZCBvZiBkb2luZyB0aGlzIGRvdWJsZSBhbGxvY2F0aW9uLgorICAg
ICAgICAgICAgYXV0byByb3RhdGVkQnVmZmVyID0gYnVmZmVyLT5Ub0k0MjAoKTsKKyAgICAgICAg
ICAgIEFTU0VSVChyb3RhdGVkQnVmZmVyKTsKKyAgICAgICAgICAgIGJ1ZmZlciA9IHdlYnJ0Yzo6
STQyMEJ1ZmZlcjo6Um90YXRlKCpyb3RhdGVkQnVmZmVyLCBtX2N1cnJlbnRSb3RhdGlvbik7Cisg
ICAgICAgIH0KKyAgICAgICAgc2VuZEZyYW1lKFdURk1vdmUoYnVmZmVyKSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBDVlBpeGVsQnVmZmVyTG9ja0Jhc2VBZGRyZXNzKHBpeGVsQnVm
ZmVyLCAwKTsKKyAgICBhdXRvKiBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihD
VlBpeGVsQnVmZmVyR2V0QmFzZUFkZHJlc3NPZlBsYW5lKHBpeGVsQnVmZmVyLCAwKSk7CisKKyAg
ICBBU1NFUlQobV93aWR0aCk7CisgICAgQVNTRVJUKG1faGVpZ2h0KTsKKworICAgIGF1dG8gbmV3
QnVmZmVyID0gbV9idWZmZXJQb29sLkNyZWF0ZUJ1ZmZlcihtX3dpZHRoLCBtX2hlaWdodCk7Cisg
ICAgQVNTRVJUKG5ld0J1ZmZlcik7CisgICAgaWYgKCFuZXdCdWZmZXIpIHsKKyAgICAgICAgUkVM
RUFTRV9MT0coV2ViUlRDLCAiUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTWFjOjp2aWRlb1Nh
bXBsZUF2YWlsYWJsZSB1bmFibGUgdG8gYWxsb2NhdGUgYnVmZmVyIGZvciBjb252ZXJzaW9uIHRv
IFlVViIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChwaXhlbEZvcm1hdFR5cGUg
PT0ga0NWUGl4ZWxGb3JtYXRUeXBlXzMyQkdSQSkKKyAgICAgICAgd2VicnRjOjpDb252ZXJ0VG9J
NDIwKHdlYnJ0Yzo6VmlkZW9UeXBlOjprQVJHQiwgc291cmNlLCAwLCAwLCBtX3dpZHRoLCBtX2hl
aWdodCwgMCwgd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8wLCBuZXdCdWZmZXIpOworICAgIGVsc2Ug
eworICAgICAgICBBU1NFUlQocGl4ZWxGb3JtYXRUeXBlID09IGtDVlBpeGVsRm9ybWF0VHlwZV8z
MkFSR0IpOworICAgICAgICB3ZWJydGM6OkNvbnZlcnRUb0k0MjAod2VicnRjOjpWaWRlb1R5cGU6
OmtCR1JBLCBzb3VyY2UsIDAsIDAsIG1fd2lkdGgsIG1faGVpZ2h0LCAwLCB3ZWJydGM6OmtWaWRl
b1JvdGF0aW9uXzAsIG5ld0J1ZmZlcik7CisgICAgfQorICAgIENWUGl4ZWxCdWZmZXJVbmxvY2tC
YXNlQWRkcmVzcyhwaXhlbEJ1ZmZlciwgMCk7CisgICAgaWYgKG1fc2hvdWxkQXBwbHlSb3RhdGlv
biAmJiBtX2N1cnJlbnRSb3RhdGlvbiAhPSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzApCisgICAg
ICAgIG5ld0J1ZmZlciA9IHdlYnJ0Yzo6STQyMEJ1ZmZlcjo6Um90YXRlKCpuZXdCdWZmZXIsIG1f
Y3VycmVudFJvdGF0aW9uKTsKKyAgICBzZW5kRnJhbWUoV1RGTW92ZShuZXdCdWZmZXIpKTsKK30K
KworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoTElCV0VCUlRDKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0
aW1lT3V0Z29pbmdWaWRlb1NvdXJjZU1hYy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vbWFjL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZU1hYy5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmU5ODJhYWY0NDJhZDMyYTYzNjRlZTc5OWNiM2NhYTFlMTU2MzMyMTEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRn
b2luZ1ZpZGVvU291cmNlTWFjLmgKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNyBBcHBsZSBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgcmVxdWlyZWQgdG8gYmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICog
My4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mCisgKiAg
ICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKExJQldFQlJU
QykKKworI2luY2x1ZGUgIlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZU1hYyBmaW5h
bCA6IHB1YmxpYyBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UgeworcHVibGljOgorICAgIHN0
YXRpYyBSZWY8UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTWFjPiBjcmVhdGUoUmVmPE1lZGlh
U3RyZWFtVHJhY2tQcml2YXRlPiYmIHZpZGVvU291cmNlKSB7IHJldHVybiBhZG9wdFJlZigqbmV3
IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZU1hYyhXVEZNb3ZlKHZpZGVvU291cmNlKSkpOyB9
CisgICAgflJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZU1hYygpIHsgfQorCitwcm90ZWN0ZWQ6
CisgICAgZXhwbGljaXQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTWFjKFJlZjxNZWRpYVN0
cmVhbVRyYWNrUHJpdmF0ZT4mJik7CisKK3ByaXZhdGU6CisgICAgdm9pZCB2aWRlb1NhbXBsZUF2
YWlsYWJsZShNZWRpYVNhbXBsZSYpIGZpbmFsOworCisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVE
CisgICAgc2l6ZV90IG1fbnVtYmVyT2ZGcmFtZXMgeyAwIH07CisjZW5kaWYKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShMSUJXRUJSVEMpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322825</attachid>
            <date>2017-10-05 05:18:54 -0700</date>
            <delta_ts>2017-10-05 05:32:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177869-20171005141852.patch</filename>
            <type>text/plain</type>
            <size>75642</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIyOTA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjkzODIyMzA3YzA4MTkz
ODNhYjVjNDliNDQxNTFlNWFkODFkNWFmMy4uNWIxNDNjMzFkYzkyNDk1ZGRmNTViMTA2ODg5ZWI0
ZThkZjkzOTkyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDE3LTEwLTA1ICBBbGVq
YW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisgICAgICAgIE1ha2UgUmVhbHRp
bWVJbmNvbWluZ1ZpZGVvU291cmNlcyBhbmQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlcyBw
b3J0IGFnbm9zdGljCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzc4NjkKKworICAgICAgICBSZXZpZXdlZCBieSBZb3Vlbm4gRmFibGV0LgorCisgICAg
ICAgIFJlZmFjdG9yIHRoZSBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UgYW5kIFJlYWx0aW1l
T3V0Z29pbmdWaWRlb1NvdXJjZSBjbGFzc2VzLAorICAgICAgICBtb3ZlIHRoZSBtYWMgc3BlY2lm
aWMgY29kZSB0byBhIGRpZmZlcmVudCBjbGFzcy4gVGhpcyB3YXkgd2UgY2FuIHVzZSB0aGVtIGZy
b20KKyAgICAgICAgb3RoZXIgcG9ydHMuCisKKyAgICAgICAgTm8gbmV3IGZ1bmN0aW9uYWxpdHks
IGp1c3QgYSByZWZhY3Rvci4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAq
IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6UmVhbHRpbWVJbmNvbWlu
Z1ZpZGVvU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdWaWRlb1Nv
dXJjZTo6c3RhcnRQcm9kdWNpbmdEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5j
b21pbmdWaWRlb1NvdXJjZTo6c2V0U291cmNlVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVh
bHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlOjpzdG9wUHJvZHVjaW5nRGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6OmNhcGFiaWxpdGllcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6OnNldHRpbmdz
IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZUluY29taW5n
VmlkZW9Tb3VyY2UuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5oLgorICAgICAgICAqIHBsYXRm
b3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5jcHA6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRn
b2luZ1ZpZGVvU291cmNlLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdW
aWRlb1NvdXJjZTo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFs
dGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuaC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6dmlkZW9TYW1wbGVB
dmFpbGFibGUpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUlu
Y29taW5nVmlkZW9Tb3VyY2VNYWMuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5jcHAuCisg
ICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWM6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWM6OlJlYWx0
aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1hYyk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUlu
Y29taW5nVmlkZW9Tb3VyY2VNYWM6OnBpeGVsQnVmZmVyRnJvbVZpZGVvRnJhbWUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTWFjOjpPbkZyYW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1hYzo6cHJvY2Vzc05l
d1NhbXBsZSk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lSW5j
b21pbmdWaWRlb1NvdXJjZU1hYy5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5oLgorICAgICAg
ICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VN
YWMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdWaWRlb1Nv
dXJjZU1hYzo6UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTWFjKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZU1hYzo6dmlkZW9TYW1wbGVBdmFpbGFibGUp
OgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU91dGdvaW5nVmlk
ZW9Tb3VyY2VNYWMuaDogQWRkZWQuCisKIDIwMTctMTAtMDUgIEZ1amlpIEhpcm9ub3JpICA8SGly
b25vcmkuRnVqaWlAc29ueS5jb20+CiAKICAgICAgICAgW1dpbkNhaXJvXSBGaXggYnVpbGQgYWZ0
ZXIgQnVnIDE2Nzk1NgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IDZmODY4OGJjM2Q5ZDZlNDFlODJkZTY2NjhiMmI5ZmM1YmIwOGQz
N2MuLjM4OTY5MGYzZGQzNmE2OTQ2YzYxZmMzMjVkOTRmNmE5YzMxMDM4MDUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTI3NTYs
NyArMjc1Niw5IEBACiAJCTVDRDlGNTY3MUFBMEY3NDIwMERBNDVGRiAvKiBERkFCeXRlY29kZUNv
bXBpbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
QzM5MzA1RjFBQTBGNkE5MDAyOUM4MTYgLyogREZBQnl0ZWNvZGVDb21waWxlci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTVDRDlGNTY4MUFBMEY3
NDYwMERBNDVGRiAvKiBERkFCeXRlY29kZUludGVycHJldGVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzM5MzA2MTFBQTBGNkE5MDAyOUM4MTYgLyog
REZBQnl0ZWNvZGVJbnRlcnByZXRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTVDREQ4MzNEMUU0MzI0RDkwMDYyMUU5MiAvKiBSZWFsdGltZU91
dGdvaW5nVmlkZW9Tb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNUNERDgzM0IxRTQzMjRCQjAwNjIxRTkyIC8qIFJlYWx0aW1lT3V0Z29pbmdW
aWRlb1NvdXJjZS5jcHAgKi87IH07CisJCTVDREQ4MzNEMUU0MzI0RDkwMDYyMUI4MyAvKiBSZWFs
dGltZU91dGdvaW5nVmlkZW9Tb3VyY2VDb2NvYS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0REODMzQjFFNDMyNEJCMDA2MjFCODMgLyogUmVhbHRp
bWVPdXRnb2luZ1ZpZGVvU291cmNlQ29jb2EuY3BwICovOyB9OwogCQk1Q0REODMzRTFFNDMyNERD
MDA2MjFFOTIgLyogUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDREQ4MzM5MUU0MzI0QkIwMDYyMUU5
MiAvKiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuY3BwICovOyB9OworCQk1Q0REODMzRTFF
NDMyNERDMDA2MjFFODMgLyogUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlQ29jb2EuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNERDgzMzkxRTQz
MjRCQjAwNjIxRTgzIC8qIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUNvY29hLmNwcCAqLzsg
fTsKIAkJNUNERDgzNjQxRTQzMjVBMDAwNjIxRTkyIC8qIExpYldlYlJUQ0RhdGFDaGFubmVsSGFu
ZGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
Q0REODMzRjFFNDMyNTNEMDA2MjFFOTIgLyogTGliV2ViUlRDRGF0YUNoYW5uZWxIYW5kbGVyLmNw
cCAqLzsgfTsKIAkJNUNERkE2QzgxQUE0RjJEQTAwRUE4NzQ2IC8qIENvbnRlbnRFeHRlbnNpb25B
Y3Rpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
Q0RGQTZDNzFBQTRGMkRBMDBFQTg3NDYgLyogQ29udGVudEV4dGVuc2lvbkFjdGlvbnMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1Q0U1RDlBQjFE
Qjg5QTAzMDBDRTdBOEQgLyogSlNUZXh0RGVjb2Rlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0U1RDlBNzFEQjg5OUZDMDBDRTdBOEQgLyogSlNU
ZXh0RGVjb2Rlci5jcHAgKi87IH07CkBAIC0xMDY5MSw4ICsxMDY5MywxMiBAQAogCQk1Q0JDOERB
QjFBQUEzMDIyMDBFMUM4MDMgLyogTWVkaWFBY2Nlc3NpYmlsaXR5U29mdExpbmsuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFBY2Nlc3NpYmlsaXR5U29mdExpbmsuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNERDgzMzkxRTQzMjRCQjAwNjIxRTkyIC8q
IFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1Q0REODMzQTFFNDMyNEJCMDA2MjFFOTIgLyogUmVhbHRpbWVJ
bmNvbWluZ1ZpZGVvU291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJl
YWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk1Q0REODMzOTFFNDMyNEJCMDA2MjFFODMgLyogUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNl
Q29jb2EuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVhbHRpbWVJ
bmNvbWluZ1ZpZGVvU291cmNlQ29jb2EuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk1Q0REODMzQTFFNDMyNEJCMDA2MjFFODMgLyogUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNl
Q29jb2EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVhbHRpbWVJbmNvbWlu
Z1ZpZGVvU291cmNlQ29jb2EuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNERDgz
M0IxRTQzMjRCQjAwNjIxRTkyIC8qIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZWFsdGltZU91dGdvaW5nVmlkZW9T
b3VyY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Q0REODMzQzFFNDMyNEJC
MDA2MjFFOTIgLyogUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk1Q0REODMzQjFFNDMyNEJCMDA2MjFCODMgLyogUmVhbHRp
bWVPdXRnb2luZ1ZpZGVvU291cmNlQ29jb2EuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlQ29jb2EuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk1Q0REODMzQzFFNDMyNEJCMDA2MjFCODMgLyogUmVhbHRp
bWVPdXRnb2luZ1ZpZGVvU291cmNlQ29jb2EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlQ29jb2EuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNUNERDgzM0YxRTQzMjUzRDAwNjIxRTkyIC8qIExpYldlYlJUQ0RhdGFD
aGFubmVsSGFuZGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBM
aWJXZWJSVENEYXRhQ2hhbm5lbEhhbmRsZXIuY3BwOyBwYXRoID0gbGlid2VicnRjL0xpYldlYlJU
Q0RhdGFDaGFubmVsSGFuZGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVD
REQ4MzQwMUU0MzI1M0QwMDYyMUU5MiAvKiBMaWJXZWJSVENEYXRhQ2hhbm5lbEhhbmRsZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTGliV2ViUlRDRGF0YUNoYW5uZWxIYW5k
bGVyLmg7IHBhdGggPSBsaWJ3ZWJydGMvTGliV2ViUlRDRGF0YUNoYW5uZWxIYW5kbGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDREZBNkM3MUFBNEYyREEwMEVBODc0NiAvKiBD
b250ZW50RXh0ZW5zaW9uQWN0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBDb250ZW50RXh0ZW5zaW9uQWN0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMTY0OTcsNiArMTY1MDMsOCBAQAogCQkJCTA3RkZERTY2MTgxQUVENDIwMDcyRDQwOSAvKiBN
ZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5jcHAgKi8sCiAJCQkJMDdGRkRFNjcxODFBRUQ0MjAwNzJE
NDA5IC8qIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmggKi8sCiAJCQkJNUVCQjg5MzgxQzc3QkRB
NDAwQzY1RDQxIC8qIFBlZXJNZWRpYURlc2NyaXB0aW9uLmggKi8sCisJCQkJNUNERDgzMzkxRTQz
MjRCQjAwNjIxRTkyIC8qIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5jcHAgKi8sCisJCQkJ
NUNERDgzM0ExRTQzMjRCQjAwNjIxRTkyIC8qIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5o
ICovLAogCQkJCTRBNEY2NTZCMUFBOTk3RjEwMEUzOENERCAvKiBSZWFsdGltZU1lZGlhU291cmNl
LmNwcCAqLywKIAkJCQk0QTRGNjU2QzFBQTk5N0YxMDBFMzhDREQgLyogUmVhbHRpbWVNZWRpYVNv
dXJjZS5oICovLAogCQkJCTRBNEY2NTZEMUFBOTk3RjEwMEUzOENERCAvKiBSZWFsdGltZU1lZGlh
U291cmNlQ2FwYWJpbGl0aWVzLmggKi8sCkBAIC0xNjUwNiw2ICsxNjUxNCw4IEBACiAJCQkJNEE0
RjY1NkYxQUE5OTdGMTAwRTM4Q0REIC8qIFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncy5oICov
LAogCQkJCTJFQzQxREUyMUMwNDEwQTMwMEQyOTRGRSAvKiBSZWFsdGltZU1lZGlhU291cmNlU3Vw
cG9ydGVkQ29uc3RyYWludHMuY3BwICovLAogCQkJCTA3QzFDMEU0MUJGQjYwRUQwMEJEMjI1NiAv
KiBSZWFsdGltZU1lZGlhU291cmNlU3VwcG9ydGVkQ29uc3RyYWludHMuaCAqLywKKwkJCQk1Q0RE
ODMzQjFFNDMyNEJCMDA2MjFFOTIgLyogUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmNwcCAq
LywKKwkJCQk1Q0REODMzQzFFNDMyNEJCMDA2MjFFOTIgLyogUmVhbHRpbWVPdXRnb2luZ1ZpZGVv
U291cmNlLmggKi8sCiAJCQkJMzEzNTkxMEMxRTdERENCNjAwRjMwNjMwIC8qIFJUQ0J1bmRsZVBv
bGljeS5oICovLAogCQkJCTA3MjIxQkEyMTdDRjBBRDQwMDg0OEU1MSAvKiBSVENEYXRhQ2hhbm5l
bEhhbmRsZXIuaCAqLywKIAkJCQkwNzIyMUJBMzE3Q0YwQUQ0MDA4NDhFNTEgLyogUlRDRGF0YUNo
YW5uZWxIYW5kbGVyQ2xpZW50LmggKi8sCkBAIC0xNjU1NiwxNCArMTY1NjYsMTQgQEAKIAkJCQkw
N0VFNzZFRTFCRUE2MTk4MDBGODkxMzMgLyogTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMubW0g
Ki8sCiAJCQkJNDExMDNBQUExRTM5NzkwQTAwNzY5RjAzIC8qIFJlYWx0aW1lSW5jb21pbmdBdWRp
b1NvdXJjZS5jcHAgKi8sCiAJCQkJNDExMDNBQTkxRTM5NzkwQTAwNzY5RjAzIC8qIFJlYWx0aW1l
SW5jb21pbmdBdWRpb1NvdXJjZS5oICovLAotCQkJCTVDREQ4MzM5MUU0MzI0QkIwMDYyMUU5MiAv
KiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuY3BwICovLAotCQkJCTVDREQ4MzNBMUU0MzI0
QkIwMDYyMUU5MiAvKiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuaCAqLywKKwkJCQk1Q0RE
ODMzOTFFNDMyNEJCMDA2MjFFODMgLyogUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlQ29jb2Eu
Y3BwICovLAorCQkJCTVDREQ4MzNBMUU0MzI0QkIwMDYyMUU4MyAvKiBSZWFsdGltZUluY29taW5n
VmlkZW9Tb3VyY2VDb2NvYS5oICovLAogCQkJCTRBMEZGQUEzMUFBRjVFRjYwMDYyODAzQiAvKiBS
ZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTWFjLmNwcCAqLywKIAkJCQk0QTBGRkFBNDFBQUY1RUY2
MDA2MjgwM0IgLyogUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck1hYy5oICovLAogCQkJCTQxMTAz
QUE3MUUzOTc5MEEwMDc2OUYwMyAvKiBSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2UuY3BwICov
LAogCQkJCTQxMTAzQUE4MUUzOTc5MEEwMDc2OUYwMyAvKiBSZWFsdGltZU91dGdvaW5nQXVkaW9T
b3VyY2UuaCAqLywKLQkJCQk1Q0REODMzQjFFNDMyNEJCMDA2MjFFOTIgLyogUmVhbHRpbWVPdXRn
b2luZ1ZpZGVvU291cmNlLmNwcCAqLywKLQkJCQk1Q0REODMzQzFFNDMyNEJCMDA2MjFFOTIgLyog
UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmggKi8sCisJCQkJNUNERDgzM0IxRTQzMjRCQjAw
NjIxQjgzIC8qIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUNvY29hLmNwcCAqLywKKwkJCQk1
Q0REODMzQzFFNDMyNEJCMDA2MjFCODMgLyogUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlQ29j
b2EuaCAqLywKIAkJCQkwN0Q2MzczRTFCQjBCMTEzMDAyNTZDRTkgLyogV2ViQXVkaW9Tb3VyY2VQ
cm92aWRlckFWRk9iakMuaCAqLywKIAkJCQkwN0Q2MzczRjFCQjBCMTEzMDAyNTZDRTkgLyogV2Vi
QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMubW0gKi8sCiAJCQkpOwpAQCAtMzM1ODMsNiArMzM1
OTMsNyBAQAogCQkJCUZEMzE2MDNCMTJCMDI2NzYwMEMxQTM1OSAvKiBSZWFsdGltZUFuYWx5c2Vy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQxMTAzQUFFMUUzOTc5MTAwMDc2OUYwMyAvKiBSZWFs
dGltZUluY29taW5nQXVkaW9Tb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUNERDgzM0Ux
RTQzMjREQzAwNjIxRTkyIC8qIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQk1Q0REODMzRTFFNDMyNERDMDA2MjFFODMgLyogUmVhbHRpbWVJbmNvbWlu
Z1ZpZGVvU291cmNlQ29jb2EuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNEE0RjY1NzAxQUE5OTdG
MTAwRTM4Q0REIC8qIFJlYWx0aW1lTWVkaWFTb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NEEwRkZBQTExQUFGNUVBMjAwNjI4MDNCIC8qIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJNEEwRkZBQTUxQUFGNUVGNjAwNjI4MDNCIC8qIFJlYWx0aW1l
TWVkaWFTb3VyY2VDZW50ZXJNYWMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0zMzU5MCw2ICszMzYw
MSw3IEBACiAJCQkJMkVDNDFERTQxQzA0MTBBMzAwRDI5NEZFIC8qIFJlYWx0aW1lTWVkaWFTb3Vy
Y2VTdXBwb3J0ZWRDb25zdHJhaW50cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MTEwM0FBQjFF
Mzk3OTEwMDA3NjlGMDMgLyogUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTVDREQ4MzNEMUU0MzI0RDkwMDYyMUU5MiAvKiBSZWFsdGltZU91dGdvaW5n
VmlkZW9Tb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNUNERDgzM0QxRTQzMjREOTAwNjIx
QjgzIC8qIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUNvY29hLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUZENDVBOTVBMTc1RDQxNzEwMEMyMUVDOCAvKiBSZWN0YW5nbGVTaGFwZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlCQ0FCNDE4MTEzRTM1NkU4MDBEOEFBRjMgLyogUmVnaW9uLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE1NzhGNDQwMURFMEI2MzQwMDNERkM2QSAvKiBSZWplY3RlZFBy
b21pc2VUcmFja2VyLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lSW5jb21pbmdWaWRl
b1NvdXJjZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjU5YjQ2YmJmNDVkOGU2YzE0Njg0MDQ5YWNhYWRjN2Zi
MGJiN2E0YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5jcHAKQEAgLTAsMCArMSw4NCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqICAgIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlYWx0aW1lSW5jb21pbmdWaWRl
b1NvdXJjZS5oIgorCisjaWYgVVNFKExJQldFQlJUQykKKworI2luY2x1ZGUgIkxvZ2dpbmcuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6OlJl
YWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZShydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRl
b1RyYWNrSW50ZXJmYWNlPiYmIHZpZGVvVHJhY2ssIFN0cmluZyYmIHZpZGVvVHJhY2tJZCkKKyAg
ICA6IFJlYWx0aW1lTWVkaWFTb3VyY2UoV1RGTW92ZSh2aWRlb1RyYWNrSWQpLCBSZWFsdGltZU1l
ZGlhU291cmNlOjpUeXBlOjpWaWRlbywgU3RyaW5nKCkpCisgICAgLCBtX3ZpZGVvVHJhY2soV1RG
TW92ZSh2aWRlb1RyYWNrKSkKK3sKKyAgICBtX2N1cnJlbnRTZXR0aW5ncy5zZXRXaWR0aCg2NDAp
OworICAgIG1fY3VycmVudFNldHRpbmdzLnNldEhlaWdodCg0ODApOworICAgIG5vdGlmeU11dGVk
Q2hhbmdlKCFtX3ZpZGVvVHJhY2spOworfQorCit2b2lkIFJlYWx0aW1lSW5jb21pbmdWaWRlb1Nv
dXJjZTo6c3RhcnRQcm9kdWNpbmdEYXRhKCkKK3sKKyAgICBpZiAobV92aWRlb1RyYWNrKQorICAg
ICAgICBtX3ZpZGVvVHJhY2stPkFkZE9yVXBkYXRlU2luayh0aGlzLCBydGM6OlZpZGVvU2lua1dh
bnRzKCkpOworfQorCit2b2lkIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6c2V0U291cmNl
VHJhY2socnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9UcmFja0ludGVyZmFjZT4mJiB0
cmFjaykKK3sKKyAgICBBU1NFUlQoIW1fdmlkZW9UcmFjayk7CisgICAgQVNTRVJUKHRyYWNrKTsK
KworICAgIG1fdmlkZW9UcmFjayA9IFdURk1vdmUodHJhY2spOworICAgIG5vdGlmeU11dGVkQ2hh
bmdlKCFtX3ZpZGVvVHJhY2spOworICAgIGlmIChpc1Byb2R1Y2luZ0RhdGEoKSkKKyAgICAgICAg
bV92aWRlb1RyYWNrLT5BZGRPclVwZGF0ZVNpbmsodGhpcywgcnRjOjpWaWRlb1NpbmtXYW50cygp
KTsKK30KKwordm9pZCBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6OnN0b3BQcm9kdWNpbmdE
YXRhKCkKK3sKKyAgICBpZiAobV92aWRlb1RyYWNrKQorICAgICAgICBtX3ZpZGVvVHJhY2stPlJl
bW92ZVNpbmsodGhpcyk7Cit9CisKK2NvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRp
ZXMmIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6Y2FwYWJpbGl0aWVzKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllczo6ZW1wdHlDYXBhYmls
aXRpZXMoKTsKK30KKworY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzJiBSZWFsdGlt
ZUluY29taW5nVmlkZW9Tb3VyY2U6OnNldHRpbmdzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9j
dXJyZW50U2V0dGluZ3M7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IFVTRShMSUJXRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjczNzgxMmY2MDU3YTM1NzE0OGE4NmFiNjM1NjE5NjAyYThkZDVhYzYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZUluY29t
aW5nVmlkZW9Tb3VyY2UuaApAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgor
ICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBFcmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBj
b250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IFVTRShMSUJXRUJSVEMpCisKKyNpbmNsdWRlICJMaWJXZWJSVENNYWNyb3MuaCIKKyNpbmNsdWRl
ICJSZWFsdGltZU1lZGlhU291cmNlLmgiCisjaW5jbHVkZSA8d2VicnRjL2FwaS9tZWRpYXN0cmVh
bWludGVyZmFjZS5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBDYXB0dXJlRGV2aWNlOworCitjbGFzcyBSZWFsdGltZUluY29taW5n
VmlkZW9Tb3VyY2UgOiBwdWJsaWMgUmVhbHRpbWVNZWRpYVNvdXJjZSwgcHJpdmF0ZSBydGM6OlZp
ZGVvU2lua0ludGVyZmFjZTx3ZWJydGM6OlZpZGVvRnJhbWU+IHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUmVmPFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZT4gY3JlYXRlKHJ0Yzo6c2NvcGVkX3Jl
ZnB0cjx3ZWJydGM6OlZpZGVvVHJhY2tJbnRlcmZhY2U+JiYsIFN0cmluZyYmKTsKKyAgICB+UmVh
bHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlKCkgeyBzdG9wUHJvZHVjaW5nRGF0YSgpOyB9CisKKyAg
ICB2b2lkIHNldFNvdXJjZVRyYWNrKHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvVHJh
Y2tJbnRlcmZhY2U+JiYpOworCitwcm90ZWN0ZWQ6CisgICAgUmVhbHRpbWVJbmNvbWluZ1ZpZGVv
U291cmNlKHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvVHJhY2tJbnRlcmZhY2U+JiYs
IFN0cmluZyYmKTsKKworICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyBtX2N1cnJlbnRT
ZXR0aW5nczsKKworcHJpdmF0ZToKKyAgICAvLyBSZWFsdGltZU1lZGlhU291cmNlIEFQSQorICAg
IHZvaWQgc3RhcnRQcm9kdWNpbmdEYXRhKCkgZmluYWw7CisgICAgdm9pZCBzdG9wUHJvZHVjaW5n
RGF0YSgpICBmaW5hbDsKKworICAgIGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRp
ZXMmIGNhcGFiaWxpdGllcygpIGNvbnN0IGZpbmFsOworICAgIGNvbnN0IFJlYWx0aW1lTWVkaWFT
b3VyY2VTZXR0aW5ncyYgc2V0dGluZ3MoKSBjb25zdCBmaW5hbDsKKworICAgIGJvb2wgYXBwbHlT
aXplKGNvbnN0IEludFNpemUmKSBmaW5hbCB7IHJldHVybiB0cnVlOyB9CisKKyAgICAvLyBydGM6
OlZpZGVvU2lua0ludGVyZmFjZQorICAgIHZvaWQgT25GcmFtZShjb25zdCB3ZWJydGM6OlZpZGVv
RnJhbWUmKSBvdmVycmlkZSB7IH07CisKKyAgICBydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpW
aWRlb1RyYWNrSW50ZXJmYWNlPiBtX3ZpZGVvVHJhY2s7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoTElCV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lT3V0Z29pbmdW
aWRlb1NvdXJjZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzU5ZGMxMTRhNTVlZjQ5MzQwOTA0M2E2ZmZkNjMx
MjFlMWRhMmRiNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5jcHAKQEAgLTAsMCArMSwxODgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkLCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIHJlcXVpcmVkIHRvIGJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisg
KiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmgiCisKKyNp
ZiBVU0UoTElCV0VCUlRDKQorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgPHdlYnJ0
Yy9hcGkvdmlkZW8vaTQyMF9idWZmZXIuaD4KKyNpbmNsdWRlIDx3ZWJydGMvY29tbW9uX3ZpZGVv
L2xpYnl1di9pbmNsdWRlL3dlYnJ0Y19saWJ5dXYuaD4KKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRp
bWUuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291
cmNlKFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4mJiB2aWRlb1NvdXJjZSkKKyAgICA6IG1f
dmlkZW9Tb3VyY2UoV1RGTW92ZSh2aWRlb1NvdXJjZSkpCisgICAgLCBtX2JsYWNrRnJhbWVUaW1l
cigqdGhpcywgJlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6c2VuZE9uZUJsYWNrRnJhbWUp
Cit7CisgICAgbV92aWRlb1NvdXJjZS0+YWRkT2JzZXJ2ZXIoKnRoaXMpOworICAgIGluaXRpYWxp
emVGcm9tU291cmNlKCk7Cit9CisKK2Jvb2wgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpz
ZXRTb3VyY2UoUmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiYmIG5ld1NvdXJjZSkKK3sKKyAg
ICBpZiAoIW1faW5pdGlhbFNldHRpbmdzKQorICAgICAgICBtX2luaXRpYWxTZXR0aW5ncyA9IG1f
dmlkZW9Tb3VyY2UtPnNvdXJjZSgpLnNldHRpbmdzKCk7CisKKyAgICBtX3ZpZGVvU291cmNlLT5y
ZW1vdmVPYnNlcnZlcigqdGhpcyk7CisgICAgbV92aWRlb1NvdXJjZSA9IFdURk1vdmUobmV3U291
cmNlKTsKKyAgICBtX3ZpZGVvU291cmNlLT5hZGRPYnNlcnZlcigqdGhpcyk7CisKKyAgICBpbml0
aWFsaXplRnJvbVNvdXJjZSgpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUmVhbHRp
bWVPdXRnb2luZ1ZpZGVvU291cmNlOjpzdG9wKCkKK3sKKyAgICBtX3ZpZGVvU291cmNlLT5yZW1v
dmVPYnNlcnZlcigqdGhpcyk7CisgICAgbV9ibGFja0ZyYW1lVGltZXIuc3RvcCgpOworICAgIG1f
aXNTdG9wcGVkID0gdHJ1ZTsKK30KKwordm9pZCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6
OnVwZGF0ZUJsYWNrRnJhbWVzU2VuZGluZygpCit7CisgICAgaWYgKCFtX211dGVkICYmIG1fZW5h
YmxlZCkgeworICAgICAgICBpZiAobV9ibGFja0ZyYW1lVGltZXIuaXNBY3RpdmUoKSkKKyAgICAg
ICAgICAgIG1fYmxhY2tGcmFtZVRpbWVyLnN0b3AoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIHNlbmRCbGFja0ZyYW1lc0lmTmVlZGVkKCk7Cit9CisKK3ZvaWQgUmVhbHRpbWVPdXRn
b2luZ1ZpZGVvU291cmNlOjpzb3VyY2VNdXRlZENoYW5nZWQoKQoreworICAgIEFTU0VSVChtX211
dGVkICE9IG1fdmlkZW9Tb3VyY2UtPm11dGVkKCkpOworCisgICAgbV9tdXRlZCA9IG1fdmlkZW9T
b3VyY2UtPm11dGVkKCk7CisKKyAgICB1cGRhdGVCbGFja0ZyYW1lc1NlbmRpbmcoKTsKK30KKwor
dm9pZCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnNvdXJjZUVuYWJsZWRDaGFuZ2VkKCkK
K3sKKyAgICBBU1NFUlQobV9lbmFibGVkICE9IG1fdmlkZW9Tb3VyY2UtPmVuYWJsZWQoKSk7CisK
KyAgICBtX2VuYWJsZWQgPSBtX3ZpZGVvU291cmNlLT5lbmFibGVkKCk7CisKKyAgICB1cGRhdGVC
bGFja0ZyYW1lc1NlbmRpbmcoKTsKK30KKwordm9pZCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3Vy
Y2U6OmluaXRpYWxpemVGcm9tU291cmNlKCkKK3sKKyAgICBjb25zdCBhdXRvJiBzZXR0aW5ncyA9
IG1fdmlkZW9Tb3VyY2UtPnNvdXJjZSgpLnNldHRpbmdzKCk7CisgICAgbV93aWR0aCA9IHNldHRp
bmdzLndpZHRoKCk7CisgICAgbV9oZWlnaHQgPSBzZXR0aW5ncy5oZWlnaHQoKTsKKworICAgIG1f
bXV0ZWQgPSBtX3ZpZGVvU291cmNlLT5tdXRlZCgpOworICAgIG1fZW5hYmxlZCA9IG1fdmlkZW9T
b3VyY2UtPmVuYWJsZWQoKTsKKworICAgIHVwZGF0ZUJsYWNrRnJhbWVzU2VuZGluZygpOworfQor
Cit2b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6QWRkT3JVcGRhdGVTaW5rKHJ0Yzo6
VmlkZW9TaW5rSW50ZXJmYWNlPHdlYnJ0Yzo6VmlkZW9GcmFtZT4qIHNpbmssIGNvbnN0IHJ0Yzo6
VmlkZW9TaW5rV2FudHMmIHNpbmtXYW50cykKK3sKKyAgICBBU1NFUlQoIXNpbmtXYW50cy5ibGFj
a19mcmFtZXMpOworCisgICAgaWYgKHNpbmtXYW50cy5yb3RhdGlvbl9hcHBsaWVkKQorICAgICAg
ICBtX3Nob3VsZEFwcGx5Um90YXRpb24gPSB0cnVlOworCisgICAgaWYgKCFtX3NpbmtzLmNvbnRh
aW5zKHNpbmspKQorICAgICAgICBtX3NpbmtzLmFwcGVuZChzaW5rKTsKKworICAgIGNhbGxPbk1h
aW5UaHJlYWQoW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0oKSB7CisgICAgICAgIHBy
b3RlY3RlZFRoaXMtPnNlbmRCbGFja0ZyYW1lc0lmTmVlZGVkKCk7CisgICAgfSk7Cit9CisKK3Zv
aWQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpSZW1vdmVTaW5rKHJ0Yzo6VmlkZW9TaW5r
SW50ZXJmYWNlPHdlYnJ0Yzo6VmlkZW9GcmFtZT4qIHNpbmspCit7CisgICAgbV9zaW5rcy5yZW1v
dmVGaXJzdChzaW5rKTsKKworICAgIGlmIChtX3NpbmtzLnNpemUoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMp
XSgpIHsKKyAgICAgICAgaWYgKHByb3RlY3RlZFRoaXMtPm1fYmxhY2tGcmFtZVRpbWVyLmlzQWN0
aXZlKCkpCisgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5tX2JsYWNrRnJhbWVUaW1lci5zdG9w
KCk7CisgICAgfSk7Cit9CisKK3ZvaWQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpzZW5k
QmxhY2tGcmFtZXNJZk5lZWRlZCgpCit7CisgICAgaWYgKG1fYmxhY2tGcmFtZVRpbWVyLmlzQWN0
aXZlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9zaW5rcy5zaXplKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmICghbV9tdXRlZCAmJiBtX2VuYWJsZWQpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmICghbV93aWR0aCB8fCAhbV9oZWlnaHQpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmICghbV9ibGFja0ZyYW1lKSB7CisgICAgICAgIGF1dG8gd2lkdGggPSBtX3dpZHRo
OworICAgICAgICBhdXRvIGhlaWdodCA9IG1faGVpZ2h0OworICAgICAgICBpZiAobV9zaG91bGRB
cHBseVJvdGF0aW9uICYmIChtX2N1cnJlbnRSb3RhdGlvbiA9PSB3ZWJydGM6OmtWaWRlb1JvdGF0
aW9uXzAgfHwgbV9jdXJyZW50Um90YXRpb24gPT0gd2VicnRjOjprVmlkZW9Sb3RhdGlvbl85MCkp
CisgICAgICAgICAgICBzdGQ6OnN3YXAod2lkdGgsIGhlaWdodCk7CisgICAgICAgIGF1dG8gZnJh
bWUgPSBtX2J1ZmZlclBvb2wuQ3JlYXRlQnVmZmVyKHdpZHRoLCBoZWlnaHQpOworICAgICAgICBB
U1NFUlQoZnJhbWUpOworICAgICAgICBpZiAoIWZyYW1lKSB7CisgICAgICAgICAgICBSRUxFQVNF
X0xPRyhXZWJSVEMsICJSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnNlbmRCbGFja0ZyYW1l
c0lmTmVlZGVkIHVuYWJsZSB0byBzZW5kIGJsYWNrIGZyYW1lcyIpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIHdlYnJ0Yzo6STQyMEJ1ZmZlcjo6U2V0QmxhY2soZnJh
bWUuZ2V0KCkpOworICAgICAgICBtX2JsYWNrRnJhbWUgPSBXVEZNb3ZlKGZyYW1lKTsKKyAgICB9
CisgICAgc2VuZE9uZUJsYWNrRnJhbWUoKTsKKyAgICBtX2JsYWNrRnJhbWVUaW1lci5zdGFydFJl
cGVhdGluZygxX3MpOworfQorCit2b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6c2Vu
ZE9uZUJsYWNrRnJhbWUoKQoreworICAgIFJFTEVBU0VfTE9HKE1lZGlhU3RyZWFtLCAiUmVhbHRp
bWVPdXRnb2luZ1ZpZGVvU291cmNlOjpzZW5kT25lQmxhY2tGcmFtZSIpOworICAgIHNlbmRGcmFt
ZShydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb0ZyYW1lQnVmZmVyPihtX2JsYWNrRnJh
bWUpKTsKK30KKwordm9pZCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnNlbmRGcmFtZShy
dGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb0ZyYW1lQnVmZmVyPiYmIGJ1ZmZlcikKK3sK
KyAgICBpbnQ2NF90IHRpbWVzdGFtcE1pY3JvU2Vjb25kcyA9IG1vbm90b25pY2FsbHlJbmNyZWFz
aW5nVGltZU1TKCkgKiAxMDAwOworICAgIHdlYnJ0Yzo6VmlkZW9GcmFtZSBmcmFtZShidWZmZXIs
IG1fc2hvdWxkQXBwbHlSb3RhdGlvbiA/IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMCA6IG1fY3Vy
cmVudFJvdGF0aW9uLCB0aW1lc3RhbXBNaWNyb1NlY29uZHMpOworICAgIGZvciAoYXV0byogc2lu
ayA6IG1fc2lua3MpCisgICAgICAgIHNpbmstPk9uRnJhbWUoZnJhbWUpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoTElCV0VCUlRDKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVPdXRnb2luZ1ZpZGVv
U291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU91
dGdvaW5nVmlkZW9Tb3VyY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43Y2Q0ZTc3NWU2Njg3YWQ1ZTVlMTliZjJm
ZTQxOTJlODBjYmY3MWY2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmgKQEAgLTAsMCArMSwx
MTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkLCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIHJlcXVpcmVkIHRvIGJlIG1ldDoKKyAqCisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
CisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2lmIFVTRShMSUJXRUJSVEMpCisKKyNpbmNsdWRlICJMaWJXZWJSVENNYWNyb3Mu
aCIKKyNpbmNsdWRlICJNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5oIgorI2luY2x1ZGUgPFRpbWVy
Lmg+CisjaW5jbHVkZSA8d2VicnRjL2FwaS9tZWRpYXN0cmVhbWludGVyZmFjZS5oPgorI2luY2x1
ZGUgPHdlYnJ0Yy9iYXNlL29wdGlvbmFsLmg+CisjaW5jbHVkZSA8d2VicnRjL2NvbW1vbl92aWRl
by9pbmNsdWRlL2k0MjBfYnVmZmVyX3Bvb2wuaD4KKyNpbmNsdWRlIDx3ZWJydGMvbWVkaWEvYmFz
ZS92aWRlb3NpbmtpbnRlcmZhY2UuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNs
dWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJl
ZkNvdW50ZWQ8UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlPiwgcHVibGljIHdlYnJ0Yzo6Vmlk
ZW9UcmFja1NvdXJjZUludGVyZmFjZSwgcHJpdmF0ZSBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6
T2JzZXJ2ZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8UmVhbHRpbWVPdXRnb2luZ1ZpZGVv
U291cmNlPiBjcmVhdGUoUmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiYmIHZpZGVvU291cmNl
KTsKKyAgICB+UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlKCkgeyBzdG9wKCk7IH0KKworICAg
IHZvaWQgc3RvcCgpOworICAgIGJvb2wgc2V0U291cmNlKFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJp
dmF0ZT4mJik7CisgICAgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmIHNvdXJjZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdmlkZW9Tb3VyY2UuZ2V0KCk7IH0KKworICAgIGludCBBZGRSZWYoKSBjb25zdCBm
aW5hbCB7IHJlZigpOyByZXR1cm4gcmVmQ291bnQoKTsgfQorICAgIGludCBSZWxlYXNlKCkgY29u
c3QgZmluYWwgeyBkZXJlZigpOyByZXR1cm4gcmVmQ291bnQoKTsgfQorCisgICAgdm9pZCBzZXRB
cHBseVJvdGF0aW9uKGJvb2wgc2hvdWxkQXBwbHlSb3RhdGlvbikgeyBtX3Nob3VsZEFwcGx5Um90
YXRpb24gPSBzaG91bGRBcHBseVJvdGF0aW9uOyB9CisKK3Byb3RlY3RlZDoKKyAgICBleHBsaWNp
dCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UoUmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRl
PiYmKTsKKworICAgIHZvaWQgc2VuZEZyYW1lKHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZp
ZGVvRnJhbWVCdWZmZXI+JiYpOworCisgICAgVmVjdG9yPHJ0Yzo6VmlkZW9TaW5rSW50ZXJmYWNl
PHdlYnJ0Yzo6VmlkZW9GcmFtZT4qPiBtX3NpbmtzOworICAgIHdlYnJ0Yzo6STQyMEJ1ZmZlclBv
b2wgbV9idWZmZXJQb29sOworCisgICAgYm9vbCBtX2VuYWJsZWQgeyB0cnVlIH07CisgICAgYm9v
bCBtX211dGVkIHsgZmFsc2UgfTsKKyAgICB1aW50MzJfdCBtX3dpZHRoIHsgMCB9OworICAgIHVp
bnQzMl90IG1faGVpZ2h0IHsgMCB9OworICAgIGJvb2wgbV9zaG91bGRBcHBseVJvdGF0aW9uIHsg
ZmFsc2UgfTsKKyAgICB3ZWJydGM6OlZpZGVvUm90YXRpb24gbV9jdXJyZW50Um90YXRpb24geyB3
ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzAgfTsKKworcHJpdmF0ZToKKyAgICB2b2lkIHNlbmRCbGFj
a0ZyYW1lc0lmTmVlZGVkKCk7CisgICAgdm9pZCBzZW5kT25lQmxhY2tGcmFtZSgpOworICAgIHZv
aWQgaW5pdGlhbGl6ZUZyb21Tb3VyY2UoKTsKKyAgICB2b2lkIHVwZGF0ZUJsYWNrRnJhbWVzU2Vu
ZGluZygpOworCisgICAgLy8gTm90aWZpZXIgQVBJCisgICAgdm9pZCBSZWdpc3Rlck9ic2VydmVy
KHdlYnJ0Yzo6T2JzZXJ2ZXJJbnRlcmZhY2UqKSBmaW5hbCB7IH0KKyAgICB2b2lkIFVucmVnaXN0
ZXJPYnNlcnZlcih3ZWJydGM6Ok9ic2VydmVySW50ZXJmYWNlKikgZmluYWwgeyB9CisKKyAgICAv
LyBWaWRlb1RyYWNrU291cmNlSW50ZXJmYWNlIEFQSQorICAgIGJvb2wgaXNfc2NyZWVuY2FzdCgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgcnRjOjpPcHRpb25hbDxib29sPiBu
ZWVkc19kZW5vaXNpbmcoKSBjb25zdCBmaW5hbCB7IHJldHVybiBydGM6Ok9wdGlvbmFsPGJvb2w+
KCk7IH0KKyAgICBib29sIEdldFN0YXRzKFN0YXRzKikgZmluYWwgeyByZXR1cm4gZmFsc2U7IH07
CisKKyAgICAvLyBNZWRpYVNvdXJjZUludGVyZmFjZSBBUEkKKyAgICBTb3VyY2VTdGF0ZSBzdGF0
ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIFNvdXJjZVN0YXRlKCk7IH0KKyAgICBib29sIHJlbW90
ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KKworICAgIC8vIHJ0Yzo6VmlkZW9Tb3Vy
Y2VJbnRlcmZhY2U8d2VicnRjOjpWaWRlb0ZyYW1lPiBBUEkKKyAgICB2b2lkIEFkZE9yVXBkYXRl
U2luayhydGM6OlZpZGVvU2lua0ludGVyZmFjZTx3ZWJydGM6OlZpZGVvRnJhbWU+KiwgY29uc3Qg
cnRjOjpWaWRlb1NpbmtXYW50cyYpIGZpbmFsOworICAgIHZvaWQgUmVtb3ZlU2luayhydGM6OlZp
ZGVvU2lua0ludGVyZmFjZTx3ZWJydGM6OlZpZGVvRnJhbWU+KikgZmluYWw7CisKKyAgICB2b2lk
IHNvdXJjZU11dGVkQ2hhbmdlZCgpOworICAgIHZvaWQgc291cmNlRW5hYmxlZENoYW5nZWQoKTsK
KworICAgIC8vIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpPYnNlcnZlciBBUEkKKyAgICB2b2lk
IHRyYWNrTXV0ZWRDaGFuZ2VkKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJikgZmluYWwgeyBzb3Vy
Y2VNdXRlZENoYW5nZWQoKTsgfQorICAgIHZvaWQgdHJhY2tFbmFibGVkQ2hhbmdlZChNZWRpYVN0
cmVhbVRyYWNrUHJpdmF0ZSYpIGZpbmFsIHsgc291cmNlRW5hYmxlZENoYW5nZWQoKTsgfQorICAg
IHZvaWQgdHJhY2tTZXR0aW5nc0NoYW5nZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmKSBmaW5h
bCB7IGluaXRpYWxpemVGcm9tU291cmNlKCk7IH0KKyAgICB2b2lkIHNhbXBsZUJ1ZmZlclVwZGF0
ZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmLCBNZWRpYVNhbXBsZSYgc2FtcGxlKSBvdmVycmlk
ZSB7IH0KKyAgICB2b2lkIHRyYWNrRW5kZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmKSBmaW5h
bCB7IH0KKworICAgIFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4gbV92aWRlb1NvdXJjZTsK
KyAgICBzdGQ6Om9wdGlvbmFsPFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncz4gbV9pbml0aWFs
U2V0dGluZ3M7CisgICAgYm9vbCBtX2lzU3RvcHBlZCB7IGZhbHNlIH07CisgICAgVGltZXIgbV9i
bGFja0ZyYW1lVGltZXI7CisgICAgcnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9GcmFt
ZUJ1ZmZlcj4gbV9ibGFja0ZyYW1lOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gVVNFKExJQldFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lSW5jb21pbmdWaWRl
b1NvdXJjZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyNjE4ZDY5NTI3NjNm
ZTdkN2M0YjZiOGNlNGY5Y2RjMTgyN2EzNzEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFj
L1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMDYg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAq
ICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMK
LSAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAot
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlJlYWx0aW1lSW5j
b21pbmdWaWRlb1NvdXJjZS5oIgotCi0jaWYgVVNFKExJQldFQlJUQykKLQotI2luY2x1ZGUgIkxv
Z2dpbmcuaCIKLSNpbmNsdWRlICJNZWRpYVNhbXBsZUFWRk9iakMuaCIKLSNpbmNsdWRlIDx3ZWJy
dGMvc2RrL29iamMvRnJhbWV3b3JrL0NsYXNzZXMvVmlkZW8vY29yZXZpZGVvX2ZyYW1lX2J1ZmZl
ci5oPgotCi0jaW5jbHVkZSAiQ29yZU1lZGlhU29mdExpbmsuaCIKLSNpbmNsdWRlICJDb3JlVmlk
ZW9Tb2Z0TGluay5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVJlZjxSZWFsdGltZUluY29t
aW5nVmlkZW9Tb3VyY2U+IFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6Y3JlYXRlKHJ0Yzo6
c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvVHJhY2tJbnRlcmZhY2U+JiYgdmlkZW9UcmFjaywg
U3RyaW5nJiYgdHJhY2tJZCkKLXsKLSAgICBhdXRvIHNvdXJjZSA9IGFkb3B0UmVmKCpuZXcgUmVh
bHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlKFdURk1vdmUodmlkZW9UcmFjayksIFdURk1vdmUodHJh
Y2tJZCkpKTsKLSAgICBzb3VyY2UtPnN0YXJ0KCk7Ci0gICAgcmV0dXJuIHNvdXJjZTsKLX0KLQot
UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2Uo
cnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9UcmFja0ludGVyZmFjZT4mJiB2aWRlb1Ry
YWNrLCBTdHJpbmcmJiB2aWRlb1RyYWNrSWQpCi0gICAgOiBSZWFsdGltZU1lZGlhU291cmNlKFdU
Rk1vdmUodmlkZW9UcmFja0lkKSwgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6VmlkZW8sIFN0
cmluZygpKQotICAgICwgbV92aWRlb1RyYWNrKFdURk1vdmUodmlkZW9UcmFjaykpCi17Ci0gICAg
bV9jdXJyZW50U2V0dGluZ3Muc2V0V2lkdGgoNjQwKTsKLSAgICBtX2N1cnJlbnRTZXR0aW5ncy5z
ZXRIZWlnaHQoNDgwKTsKLSAgICBub3RpZnlNdXRlZENoYW5nZSghbV92aWRlb1RyYWNrKTsKLX0K
LQotdm9pZCBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6OnN0YXJ0UHJvZHVjaW5nRGF0YSgp
Ci17Ci0gICAgaWYgKG1fdmlkZW9UcmFjaykKLSAgICAgICAgbV92aWRlb1RyYWNrLT5BZGRPclVw
ZGF0ZVNpbmsodGhpcywgcnRjOjpWaWRlb1NpbmtXYW50cygpKTsKLX0KLQotdm9pZCBSZWFsdGlt
ZUluY29taW5nVmlkZW9Tb3VyY2U6OnNldFNvdXJjZVRyYWNrKHJ0Yzo6c2NvcGVkX3JlZnB0cjx3
ZWJydGM6OlZpZGVvVHJhY2tJbnRlcmZhY2U+JiYgdHJhY2spCi17Ci0gICAgQVNTRVJUKCFtX3Zp
ZGVvVHJhY2spOwotICAgIEFTU0VSVCh0cmFjayk7Ci0KLSAgICBtX3ZpZGVvVHJhY2sgPSBXVEZN
b3ZlKHRyYWNrKTsKLSAgICBub3RpZnlNdXRlZENoYW5nZSghbV92aWRlb1RyYWNrKTsKLSAgICBp
ZiAoaXNQcm9kdWNpbmdEYXRhKCkpCi0gICAgICAgIG1fdmlkZW9UcmFjay0+QWRkT3JVcGRhdGVT
aW5rKHRoaXMsIHJ0Yzo6VmlkZW9TaW5rV2FudHMoKSk7Ci19Ci0KLXZvaWQgUmVhbHRpbWVJbmNv
bWluZ1ZpZGVvU291cmNlOjpzdG9wUHJvZHVjaW5nRGF0YSgpCi17Ci0gICAgaWYgKG1fdmlkZW9U
cmFjaykKLSAgICAgICAgbV92aWRlb1RyYWNrLT5SZW1vdmVTaW5rKHRoaXMpOwotfQotCi1DVlBp
eGVsQnVmZmVyUmVmIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6cGl4ZWxCdWZmZXJGcm9t
VmlkZW9GcmFtZShjb25zdCB3ZWJydGM6OlZpZGVvRnJhbWUmIGZyYW1lKQotewotICAgIGlmICht
dXRlZCgpKSB7Ci0gICAgICAgIGlmICghbV9ibGFja0ZyYW1lIHx8IG1fYmxhY2tGcmFtZVdpZHRo
ICE9IGZyYW1lLndpZHRoKCkgfHwgbV9ibGFja0ZyYW1lSGVpZ2h0ICE9IGZyYW1lLmhlaWdodCgp
KSB7Ci0gICAgICAgICAgICBDVlBpeGVsQnVmZmVyUmVmIHBpeGVsQnVmZmVyID0gbnVsbHB0cjsK
LSAgICAgICAgICAgIGF1dG8gc3RhdHVzID0gQ1ZQaXhlbEJ1ZmZlckNyZWF0ZShrQ0ZBbGxvY2F0
b3JEZWZhdWx0LCBmcmFtZS53aWR0aCgpLCBmcmFtZS5oZWlnaHQoKSwga0NWUGl4ZWxGb3JtYXRU
eXBlXzQyMFlwQ2JDcjhQbGFuYXIsIG51bGxwdHIsICZwaXhlbEJ1ZmZlcik7Ci0gICAgICAgICAg
ICBBU1NFUlRfVU5VU0VEKHN0YXR1cywgc3RhdHVzID09IG5vRXJyKTsKLQotICAgICAgICAgICAg
bV9ibGFja0ZyYW1lID0gcGl4ZWxCdWZmZXI7Ci0gICAgICAgICAgICBtX2JsYWNrRnJhbWVXaWR0
aCA9IGZyYW1lLndpZHRoKCk7Ci0gICAgICAgICAgICBtX2JsYWNrRnJhbWVIZWlnaHQgPSBmcmFt
ZS5oZWlnaHQoKTsKLQotICAgICAgICAgICAgc3RhdHVzID0gQ1ZQaXhlbEJ1ZmZlckxvY2tCYXNl
QWRkcmVzcyhwaXhlbEJ1ZmZlciwgMCk7Ci0gICAgICAgICAgICBBU1NFUlQoc3RhdHVzID09IG5v
RXJyKTsKLSAgICAgICAgICAgIHZvaWQqIGRhdGEgPSBDVlBpeGVsQnVmZmVyR2V0QmFzZUFkZHJl
c3MocGl4ZWxCdWZmZXIpOwotICAgICAgICAgICAgc2l6ZV90IHlMZW5ndGggPSBmcmFtZS53aWR0
aCgpICogZnJhbWUuaGVpZ2h0KCk7Ci0gICAgICAgICAgICBtZW1zZXQoZGF0YSwgMCwgeUxlbmd0
aCk7Ci0gICAgICAgICAgICBtZW1zZXQoc3RhdGljX2Nhc3Q8dWludDhfdCo+KGRhdGEpICsgeUxl
bmd0aCwgMTI4LCB5TGVuZ3RoIC8gMik7Ci0KLSAgICAgICAgICAgIHN0YXR1cyA9IENWUGl4ZWxC
dWZmZXJVbmxvY2tCYXNlQWRkcmVzcyhwaXhlbEJ1ZmZlciwgMCk7Ci0gICAgICAgICAgICBBU1NF
UlQoIXN0YXR1cyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1fYmxhY2tGcmFtZS5nZXQo
KTsKLSAgICB9Ci0gICAgYXV0byBidWZmZXIgPSBmcmFtZS52aWRlb19mcmFtZV9idWZmZXIoKTsK
LSAgICBBU1NFUlQoYnVmZmVyLT50eXBlKCkgPT0gd2VicnRjOjpWaWRlb0ZyYW1lQnVmZmVyOjpU
eXBlOjprTmF0aXZlKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8d2VicnRjOjpDb3JlVmlkZW9G
cmFtZUJ1ZmZlciY+KCpidWZmZXIpLnBpeGVsX2J1ZmZlcigpOwotfQotCi12b2lkIFJlYWx0aW1l
SW5jb21pbmdWaWRlb1NvdXJjZTo6T25GcmFtZShjb25zdCB3ZWJydGM6OlZpZGVvRnJhbWUmIGZy
YW1lKQotewotICAgIGlmICghaXNQcm9kdWNpbmdEYXRhKCkpCi0gICAgICAgIHJldHVybjsKLQot
I2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAotICAgIGlmICghKCsrbV9udW1iZXJPZkZyYW1lcyAl
IDMwKSkKLSAgICAgICAgUkVMRUFTRV9MT0coTWVkaWFTdHJlYW0sICJSZWFsdGltZUluY29taW5n
VmlkZW9Tb3VyY2U6Ok9uRnJhbWUgJXp1IGZyYW1lIiwgbV9udW1iZXJPZkZyYW1lcyk7Ci0jZW5k
aWYKLQotICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBwaXhlbEJ1ZmZlckZyb21WaWRlb0ZyYW1lKGZy
YW1lKTsKLQotICAgIC8vIEZJWE1FOiBDb252ZXJ0IHRpbWluZyBpbmZvcm1hdGlvbiBmcm9tIFZp
ZGVvRnJhbWUgdG8gQ01TYW1wbGVUaW1pbmdJbmZvLgotICAgIC8vIEZvciB0aGUgbW9tZW50LCB3
ZSB3aWxsIHByZXRlbmQgdGhhdCBmcmFtZXMgc2hvdWxkIGJlIHJlbmRlcmVkIGFzYXAuCi0gICAg
Q01TYW1wbGVUaW1pbmdJbmZvIHRpbWluZ0luZm87Ci0gICAgdGltaW5nSW5mby5wcmVzZW50YXRp
b25UaW1lU3RhbXAgPSBrQ01UaW1lSW52YWxpZDsKLSAgICB0aW1pbmdJbmZvLmRlY29kZVRpbWVT
dGFtcCA9IGtDTVRpbWVJbnZhbGlkOwotICAgIHRpbWluZ0luZm8uZHVyYXRpb24gPSBrQ01UaW1l
SW52YWxpZDsKLQotICAgIENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvblJlZiBmb3JtYXREZXNjcmlw
dGlvbjsKLSAgICBPU1N0YXR1cyBvc3RhdHVzID0gQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uQ3Jl
YXRlRm9ySW1hZ2VCdWZmZXIoa0NGQWxsb2NhdG9yRGVmYXVsdCwgKENWSW1hZ2VCdWZmZXJSZWYp
cGl4ZWxCdWZmZXIsICZmb3JtYXREZXNjcmlwdGlvbik7Ci0gICAgaWYgKG9zdGF0dXMgIT0gbm9F
cnIpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBDTVZpZGVvRm9y
bWF0RGVzY3JpcHRpb246ICVkIiwgc3RhdGljX2Nhc3Q8aW50Pihvc3RhdHVzKSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBDTVNhbXBsZUJ1ZmZlclJlZiBzYW1wbGVCdWZmZXI7Ci0g
ICAgb3N0YXR1cyA9IENNU2FtcGxlQnVmZmVyQ3JlYXRlUmVhZHlXaXRoSW1hZ2VCdWZmZXIoa0NG
QWxsb2NhdG9yRGVmYXVsdCwgKENWSW1hZ2VCdWZmZXJSZWYpcGl4ZWxCdWZmZXIsIGZvcm1hdERl
c2NyaXB0aW9uLCAmdGltaW5nSW5mbywgJnNhbXBsZUJ1ZmZlcik7Ci0gICAgaWYgKG9zdGF0dXMg
IT0gbm9FcnIpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIHRoZSBzYW1w
bGUgYnVmZmVyOiAlZCIsIHN0YXRpY19jYXN0PGludD4ob3N0YXR1cykpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIENGUmVsZWFzZShmb3JtYXREZXNjcmlwdGlvbik7Ci0KLSAgICBhdXRv
IHNhbXBsZSA9IGFkb3B0Q0Yoc2FtcGxlQnVmZmVyKTsKLQotICAgIENGQXJyYXlSZWYgYXR0YWNo
bWVudHNBcnJheSA9IENNU2FtcGxlQnVmZmVyR2V0U2FtcGxlQXR0YWNobWVudHNBcnJheShzYW1w
bGVCdWZmZXIsIHRydWUpOwotICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IENGQXJyYXlHZXRD
b3VudChhdHRhY2htZW50c0FycmF5KTsgKytpKSB7Ci0gICAgICAgIENGTXV0YWJsZURpY3Rpb25h
cnlSZWYgYXR0YWNobWVudHMgPSAoQ0ZNdXRhYmxlRGljdGlvbmFyeVJlZilDRkFycmF5R2V0VmFs
dWVBdEluZGV4KGF0dGFjaG1lbnRzQXJyYXksIGkpOwotICAgICAgICBDRkRpY3Rpb25hcnlTZXRW
YWx1ZShhdHRhY2htZW50cywga0NNU2FtcGxlQXR0YWNobWVudEtleV9EaXNwbGF5SW1tZWRpYXRl
bHksIGtDRkJvb2xlYW5UcnVlKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCB3aWR0aCA9IGZyYW1l
LndpZHRoKCk7Ci0gICAgdW5zaWduZWQgaGVpZ2h0ID0gZnJhbWUuaGVpZ2h0KCk7Ci0KLSAgICBN
ZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbiByb3RhdGlvbjsKLSAgICBzd2l0Y2ggKGZyYW1lLnJv
dGF0aW9uKCkpIHsKLSAgICBjYXNlIHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMDoKLSAgICAgICAg
cm90YXRpb24gPSBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6Tm9uZTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzE4MDoKLSAgICAgICAgcm90YXRp
b24gPSBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6VXBzaWRlRG93bjsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzkwOgotICAgICAgICByb3RhdGlv
biA9IE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpSaWdodDsKLSAgICAgICAgc3RkOjpzd2Fw
KHdpZHRoLCBoZWlnaHQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIHdlYnJ0Yzo6a1ZpZGVv
Um90YXRpb25fMjcwOgotICAgICAgICByb3RhdGlvbiA9IE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0
aW9uOjpMZWZ0OwotICAgICAgICBzdGQ6OnN3YXAod2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLQotICAgIFJlZlB0cjxSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U+IHBy
b3RlY3RlZFRoaXModGhpcyk7Ci0gICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9
IFdURk1vdmUocHJvdGVjdGVkVGhpcyksIHNhbXBsZSA9IFdURk1vdmUoc2FtcGxlKSwgd2lkdGgs
IGhlaWdodCwgcm90YXRpb25dIHsKLSAgICAgICAgcHJvdGVjdGVkVGhpcy0+cHJvY2Vzc05ld1Nh
bXBsZShzYW1wbGUuZ2V0KCksIHdpZHRoLCBoZWlnaHQsIHJvdGF0aW9uKTsKLSAgICB9KTsKLX0K
LQotdm9pZCBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6OnByb2Nlc3NOZXdTYW1wbGUoQ01T
YW1wbGVCdWZmZXJSZWYgc2FtcGxlLCB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCBN
ZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbiByb3RhdGlvbikKLXsKLSAgICBtX2J1ZmZlciA9IHNh
bXBsZTsKLSAgICBpZiAod2lkdGggIT0gbV9jdXJyZW50U2V0dGluZ3Mud2lkdGgoKSB8fCBoZWln
aHQgIT0gbV9jdXJyZW50U2V0dGluZ3MuaGVpZ2h0KCkpIHsKLSAgICAgICAgbV9jdXJyZW50U2V0
dGluZ3Muc2V0V2lkdGgod2lkdGgpOwotICAgICAgICBtX2N1cnJlbnRTZXR0aW5ncy5zZXRIZWln
aHQoaGVpZ2h0KTsKLSAgICAgICAgc2V0dGluZ3NEaWRDaGFuZ2UoKTsKLSAgICB9Ci0KLSAgICB2
aWRlb1NhbXBsZUF2YWlsYWJsZShNZWRpYVNhbXBsZUFWRk9iakM6OmNyZWF0ZShzYW1wbGUsIHJv
dGF0aW9uKSk7Ci19Ci0KLWNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMmIFJl
YWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6Y2FwYWJpbGl0aWVzKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllczo6ZW1wdHlDYXBhYmlsaXRpZXMo
KTsKLX0KLQotY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzJiBSZWFsdGltZUluY29t
aW5nVmlkZW9Tb3VyY2U6OnNldHRpbmdzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9jdXJyZW50
U2V0dGluZ3M7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShM
SUJXRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9tYWMvUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlYjdjMzY0ZmUzMjMyMjIyZWFiNGYyNWI3YjQxMDBj
YzkxMDI4MDkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lSW5jb21pbmdW
aWRlb1NvdXJjZS5oCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqICAgIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3Ry
aWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1l
cyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSAqICAgIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBv
bmNlCi0KLSNpZiBVU0UoTElCV0VCUlRDKQotCi0jaW5jbHVkZSAiTGliV2ViUlRDTWFjcm9zLmgi
Ci0jaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZS5oIgotI2luY2x1ZGUgPHdlYnJ0Yy9hcGkv
bWVkaWFzdHJlYW1pbnRlcmZhY2UuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLXVz
aW5nIENNU2FtcGxlQnVmZmVyUmVmID0gc3RydWN0IG9wYXF1ZUNNU2FtcGxlQnVmZmVyKjsKLXVz
aW5nIENWUGl4ZWxCdWZmZXJSZWYgPSBzdHJ1Y3QgX19DVkJ1ZmZlcio7Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotY2xhc3MgQ2FwdHVyZURldmljZTsKLQotY2xhc3MgUmVhbHRpbWVJbmNvbWlu
Z1ZpZGVvU291cmNlIGZpbmFsIDogcHVibGljIFJlYWx0aW1lTWVkaWFTb3VyY2UsIHByaXZhdGUg
cnRjOjpWaWRlb1NpbmtJbnRlcmZhY2U8d2VicnRjOjpWaWRlb0ZyYW1lPiB7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIFJlZjxSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U+IGNyZWF0ZShydGM6OnNj
b3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb1RyYWNrSW50ZXJmYWNlPiYmLCBTdHJpbmcmJik7Ci0g
ICAgflJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZSgpIHsgc3RvcFByb2R1Y2luZ0RhdGEoKTsg
fQotCi0gICAgdm9pZCBzZXRTb3VyY2VUcmFjayhydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpW
aWRlb1RyYWNrSW50ZXJmYWNlPiYmKTsKLQotcHJpdmF0ZToKLSAgICBSZWFsdGltZUluY29taW5n
VmlkZW9Tb3VyY2UocnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9UcmFja0ludGVyZmFj
ZT4mJiwgU3RyaW5nJiYpOwotCi0gICAgLy8gUmVhbHRpbWVNZWRpYVNvdXJjZSBBUEkKLSAgICB2
b2lkIHN0YXJ0UHJvZHVjaW5nRGF0YSgpIGZpbmFsOwotICAgIHZvaWQgc3RvcFByb2R1Y2luZ0Rh
dGEoKSAgZmluYWw7Ci0KLSAgICBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVz
JiBjYXBhYmlsaXRpZXMoKSBjb25zdCBmaW5hbDsKLSAgICBjb25zdCBSZWFsdGltZU1lZGlhU291
cmNlU2V0dGluZ3MmIHNldHRpbmdzKCkgY29uc3QgZmluYWw7Ci0KLSAgICB2b2lkIHByb2Nlc3NO
ZXdTYW1wbGUoQ01TYW1wbGVCdWZmZXJSZWYsIHVuc2lnbmVkLCB1bnNpZ25lZCwgTWVkaWFTYW1w
bGU6OlZpZGVvUm90YXRpb24pOwotCi0gICAgYm9vbCBhcHBseVNpemUoY29uc3QgSW50U2l6ZSYp
IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KLQotICAgIC8vIHJ0Yzo6VmlkZW9TaW5rSW50ZXJmYWNl
Ci0gICAgdm9pZCBPbkZyYW1lKGNvbnN0IHdlYnJ0Yzo6VmlkZW9GcmFtZSYpIGZpbmFsOwotCi0g
ICAgQ1ZQaXhlbEJ1ZmZlclJlZiBwaXhlbEJ1ZmZlckZyb21WaWRlb0ZyYW1lKGNvbnN0IHdlYnJ0
Yzo6VmlkZW9GcmFtZSYpOwotCi0gICAgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzIG1fY3Vy
cmVudFNldHRpbmdzOwotICAgIHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvVHJhY2tJ
bnRlcmZhY2U+IG1fdmlkZW9UcmFjazsKLSAgICBSZXRhaW5QdHI8Q01TYW1wbGVCdWZmZXJSZWY+
IG1fYnVmZmVyOwotICAgIFJldGFpblB0cjxDVlBpeGVsQnVmZmVyUmVmPiBtX2JsYWNrRnJhbWU7
Ci0gICAgaW50IG1fYmxhY2tGcmFtZVdpZHRoIHsgMCB9OwotICAgIGludCBtX2JsYWNrRnJhbWVI
ZWlnaHQgeyAwIH07Ci0jaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECi0gICAgc2l6ZV90IG1fbnVt
YmVyT2ZGcmFtZXMgeyAwIH07Ci0jZW5kaWYKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LQotI2VuZGlmIC8vIFVTRShMSUJXRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlQ29jb2Eu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lSW5j
b21pbmdWaWRlb1NvdXJjZUNvY29hLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZTRhMDcxNDRmZGY4ZjljMDYz
NzlmZDEzODA1MjBiMzAxM2Y5YjZjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUNvY29h
LmNwcApAQCAtMCwwICsxLDE2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZWFsdGltZUluY29taW5nVmlkZW9Tb3Vy
Y2VDb2NvYS5oIgorCisjaWYgVVNFKExJQldFQlJUQykKKworI2luY2x1ZGUgIkxvZ2dpbmcuaCIK
KyNpbmNsdWRlICJNZWRpYVNhbXBsZUFWRk9iakMuaCIKKyNpbmNsdWRlIDx3ZWJydGMvc2RrL29i
amMvRnJhbWV3b3JrL0NsYXNzZXMvVmlkZW8vY29yZXZpZGVvX2ZyYW1lX2J1ZmZlci5oPgorCisj
aW5jbHVkZSAiQ29yZU1lZGlhU29mdExpbmsuaCIKKyNpbmNsdWRlICJDb3JlVmlkZW9Tb2Z0TGlu
ay5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlZjxSZWFsdGltZUluY29taW5nVmlkZW9T
b3VyY2U+IFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6Y3JlYXRlKHJ0Yzo6c2NvcGVkX3Jl
ZnB0cjx3ZWJydGM6OlZpZGVvVHJhY2tJbnRlcmZhY2U+JiYgdmlkZW9UcmFjaywgU3RyaW5nJiYg
dHJhY2tJZCkKK3sKKyAgICBhdXRvIHNvdXJjZSA9IGFkb3B0UmVmKCpuZXcgUmVhbHRpbWVJbmNv
bWluZ1ZpZGVvU291cmNlQ29jb2EoV1RGTW92ZSh2aWRlb1RyYWNrKSwgV1RGTW92ZSh0cmFja0lk
KSkpOworICAgIHNvdXJjZS0+c3RhcnQoKTsKKyAgICByZXR1cm4gV1RGTW92ZShzb3VyY2UpOwor
fQorCitSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VDb2NvYTo6UmVhbHRpbWVJbmNvbWluZ1Zp
ZGVvU291cmNlQ29jb2EocnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9UcmFja0ludGVy
ZmFjZT4mJiB2aWRlb1RyYWNrLCBTdHJpbmcmJiB2aWRlb1RyYWNrSWQpCisgICAgOiBSZWFsdGlt
ZUluY29taW5nVmlkZW9Tb3VyY2UoV1RGTW92ZSh2aWRlb1RyYWNrKSwgV1RGTW92ZSh2aWRlb1Ry
YWNrSWQpKQoreworfQorCitDVlBpeGVsQnVmZmVyUmVmIFJlYWx0aW1lSW5jb21pbmdWaWRlb1Nv
dXJjZUNvY29hOjpwaXhlbEJ1ZmZlckZyb21WaWRlb0ZyYW1lKGNvbnN0IHdlYnJ0Yzo6VmlkZW9G
cmFtZSYgZnJhbWUpCit7CisgICAgaWYgKG11dGVkKCkpIHsKKyAgICAgICAgaWYgKCFtX2JsYWNr
RnJhbWUgfHwgbV9ibGFja0ZyYW1lV2lkdGggIT0gZnJhbWUud2lkdGgoKSB8fCBtX2JsYWNrRnJh
bWVIZWlnaHQgIT0gZnJhbWUuaGVpZ2h0KCkpIHsKKyAgICAgICAgICAgIENWUGl4ZWxCdWZmZXJS
ZWYgcGl4ZWxCdWZmZXIgPSBudWxscHRyOworICAgICAgICAgICAgYXV0byBzdGF0dXMgPSBDVlBp
eGVsQnVmZmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGZyYW1lLndpZHRoKCksIGZyYW1l
LmhlaWdodCgpLCBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyOFBsYW5hciwgbnVsbHB0ciwg
JnBpeGVsQnVmZmVyKTsKKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoc3RhdHVzLCBzdGF0dXMg
PT0gbm9FcnIpOworCisgICAgICAgICAgICBtX2JsYWNrRnJhbWUgPSBwaXhlbEJ1ZmZlcjsKKyAg
ICAgICAgICAgIG1fYmxhY2tGcmFtZVdpZHRoID0gZnJhbWUud2lkdGgoKTsKKyAgICAgICAgICAg
IG1fYmxhY2tGcmFtZUhlaWdodCA9IGZyYW1lLmhlaWdodCgpOworCisgICAgICAgICAgICBzdGF0
dXMgPSBDVlBpeGVsQnVmZmVyTG9ja0Jhc2VBZGRyZXNzKHBpeGVsQnVmZmVyLCAwKTsKKyAgICAg
ICAgICAgIEFTU0VSVChzdGF0dXMgPT0gbm9FcnIpOworICAgICAgICAgICAgdm9pZCogZGF0YSA9
IENWUGl4ZWxCdWZmZXJHZXRCYXNlQWRkcmVzcyhwaXhlbEJ1ZmZlcik7CisgICAgICAgICAgICBz
aXplX3QgeUxlbmd0aCA9IGZyYW1lLndpZHRoKCkgKiBmcmFtZS5oZWlnaHQoKTsKKyAgICAgICAg
ICAgIG1lbXNldChkYXRhLCAwLCB5TGVuZ3RoKTsKKyAgICAgICAgICAgIG1lbXNldChzdGF0aWNf
Y2FzdDx1aW50OF90Kj4oZGF0YSkgKyB5TGVuZ3RoLCAxMjgsIHlMZW5ndGggLyAyKTsKKworICAg
ICAgICAgICAgc3RhdHVzID0gQ1ZQaXhlbEJ1ZmZlclVubG9ja0Jhc2VBZGRyZXNzKHBpeGVsQnVm
ZmVyLCAwKTsKKyAgICAgICAgICAgIEFTU0VSVCghc3RhdHVzKTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gbV9ibGFja0ZyYW1lLmdldCgpOworICAgIH0KKyAgICBhdXRvIGJ1ZmZlciA9IGZy
YW1lLnZpZGVvX2ZyYW1lX2J1ZmZlcigpOworICAgIEFTU0VSVChidWZmZXItPnR5cGUoKSA9PSB3
ZWJydGM6OlZpZGVvRnJhbWVCdWZmZXI6OlR5cGU6OmtOYXRpdmUpOworICAgIHJldHVybiBzdGF0
aWNfY2FzdDx3ZWJydGM6OkNvcmVWaWRlb0ZyYW1lQnVmZmVyJj4oKmJ1ZmZlcikucGl4ZWxfYnVm
ZmVyKCk7Cit9CisKK3ZvaWQgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlQ29jb2E6Ok9uRnJh
bWUoY29uc3Qgd2VicnRjOjpWaWRlb0ZyYW1lJiBmcmFtZSkKK3sKKyAgICBpZiAoIWlzUHJvZHVj
aW5nRGF0YSgpKQorICAgICAgICByZXR1cm47CisKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQK
KyAgICBpZiAoISgrK21fbnVtYmVyT2ZGcmFtZXMgJSAzMCkpCisgICAgICAgIFJFTEVBU0VfTE9H
KE1lZGlhU3RyZWFtLCAiUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlQ29jb2E6Ok9uRnJhbWUg
JXp1IGZyYW1lIiwgbV9udW1iZXJPZkZyYW1lcyk7CisjZW5kaWYKKworICAgIGF1dG8gcGl4ZWxC
dWZmZXIgPSBwaXhlbEJ1ZmZlckZyb21WaWRlb0ZyYW1lKGZyYW1lKTsKKworICAgIC8vIEZJWE1F
OiBDb252ZXJ0IHRpbWluZyBpbmZvcm1hdGlvbiBmcm9tIFZpZGVvRnJhbWUgdG8gQ01TYW1wbGVU
aW1pbmdJbmZvLgorICAgIC8vIEZvciB0aGUgbW9tZW50LCB3ZSB3aWxsIHByZXRlbmQgdGhhdCBm
cmFtZXMgc2hvdWxkIGJlIHJlbmRlcmVkIGFzYXAuCisgICAgQ01TYW1wbGVUaW1pbmdJbmZvIHRp
bWluZ0luZm87CisgICAgdGltaW5nSW5mby5wcmVzZW50YXRpb25UaW1lU3RhbXAgPSBrQ01UaW1l
SW52YWxpZDsKKyAgICB0aW1pbmdJbmZvLmRlY29kZVRpbWVTdGFtcCA9IGtDTVRpbWVJbnZhbGlk
OworICAgIHRpbWluZ0luZm8uZHVyYXRpb24gPSBrQ01UaW1lSW52YWxpZDsKKworICAgIENNVmlk
ZW9Gb3JtYXREZXNjcmlwdGlvblJlZiBmb3JtYXREZXNjcmlwdGlvbjsKKyAgICBPU1N0YXR1cyBv
c3RhdHVzID0gQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uQ3JlYXRlRm9ySW1hZ2VCdWZmZXIoa0NG
QWxsb2NhdG9yRGVmYXVsdCwgKENWSW1hZ2VCdWZmZXJSZWYpcGl4ZWxCdWZmZXIsICZmb3JtYXRE
ZXNjcmlwdGlvbik7CisgICAgaWYgKG9zdGF0dXMgIT0gbm9FcnIpIHsKKyAgICAgICAgTE9HX0VS
Uk9SKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb246ICVkIiwg
c3RhdGljX2Nhc3Q8aW50Pihvc3RhdHVzKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBDTVNhbXBsZUJ1ZmZlclJlZiBzYW1wbGVCdWZmZXI7CisgICAgb3N0YXR1cyA9IENNU2FtcGxl
QnVmZmVyQ3JlYXRlUmVhZHlXaXRoSW1hZ2VCdWZmZXIoa0NGQWxsb2NhdG9yRGVmYXVsdCwgKENW
SW1hZ2VCdWZmZXJSZWYpcGl4ZWxCdWZmZXIsIGZvcm1hdERlc2NyaXB0aW9uLCAmdGltaW5nSW5m
bywgJnNhbXBsZUJ1ZmZlcik7CisgICAgaWYgKG9zdGF0dXMgIT0gbm9FcnIpIHsKKyAgICAgICAg
TE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIHRoZSBzYW1wbGUgYnVmZmVyOiAlZCIsIHN0YXRp
Y19jYXN0PGludD4ob3N0YXR1cykpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIENGUmVs
ZWFzZShmb3JtYXREZXNjcmlwdGlvbik7CisKKyAgICBhdXRvIHNhbXBsZSA9IGFkb3B0Q0Yoc2Ft
cGxlQnVmZmVyKTsKKworICAgIENGQXJyYXlSZWYgYXR0YWNobWVudHNBcnJheSA9IENNU2FtcGxl
QnVmZmVyR2V0U2FtcGxlQXR0YWNobWVudHNBcnJheShzYW1wbGVCdWZmZXIsIHRydWUpOworICAg
IGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IENGQXJyYXlHZXRDb3VudChhdHRhY2htZW50c0FycmF5
KTsgKytpKSB7CisgICAgICAgIENGTXV0YWJsZURpY3Rpb25hcnlSZWYgYXR0YWNobWVudHMgPSAo
Q0ZNdXRhYmxlRGljdGlvbmFyeVJlZilDRkFycmF5R2V0VmFsdWVBdEluZGV4KGF0dGFjaG1lbnRz
QXJyYXksIGkpOworICAgICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShhdHRhY2htZW50cywga0NN
U2FtcGxlQXR0YWNobWVudEtleV9EaXNwbGF5SW1tZWRpYXRlbHksIGtDRkJvb2xlYW5UcnVlKTsK
KyAgICB9CisKKyAgICB1bnNpZ25lZCB3aWR0aCA9IGZyYW1lLndpZHRoKCk7CisgICAgdW5zaWdu
ZWQgaGVpZ2h0ID0gZnJhbWUuaGVpZ2h0KCk7CisKKyAgICBNZWRpYVNhbXBsZTo6VmlkZW9Sb3Rh
dGlvbiByb3RhdGlvbjsKKyAgICBzd2l0Y2ggKGZyYW1lLnJvdGF0aW9uKCkpIHsKKyAgICBjYXNl
IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMDoKKyAgICAgICAgcm90YXRpb24gPSBNZWRpYVNhbXBs
ZTo6VmlkZW9Sb3RhdGlvbjo6Tm9uZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSB3ZWJydGM6
OmtWaWRlb1JvdGF0aW9uXzE4MDoKKyAgICAgICAgcm90YXRpb24gPSBNZWRpYVNhbXBsZTo6Vmlk
ZW9Sb3RhdGlvbjo6VXBzaWRlRG93bjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSB3ZWJydGM6
OmtWaWRlb1JvdGF0aW9uXzkwOgorICAgICAgICByb3RhdGlvbiA9IE1lZGlhU2FtcGxlOjpWaWRl
b1JvdGF0aW9uOjpSaWdodDsKKyAgICAgICAgc3RkOjpzd2FwKHdpZHRoLCBoZWlnaHQpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMjcwOgorICAgICAg
ICByb3RhdGlvbiA9IE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpMZWZ0OworICAgICAgICBz
dGQ6OnN3YXAod2lkdGgsIGhlaWdodCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIFJl
ZlB0cjxSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VDb2NvYT4gcHJvdGVjdGVkVGhpcyh0aGlz
KTsKKyAgICBjYWxsT25NYWluVGhyZWFkKFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyks
IHNhbXBsZSA9IFdURk1vdmUoc2FtcGxlKSwgd2lkdGgsIGhlaWdodCwgcm90YXRpb25dIHsKKyAg
ICAgICAgcHJvdGVjdGVkVGhpcy0+cHJvY2Vzc05ld1NhbXBsZShzYW1wbGUuZ2V0KCksIHdpZHRo
LCBoZWlnaHQsIHJvdGF0aW9uKTsKKyAgICB9KTsKK30KKwordm9pZCBSZWFsdGltZUluY29taW5n
VmlkZW9Tb3VyY2VDb2NvYTo6cHJvY2Vzc05ld1NhbXBsZShDTVNhbXBsZUJ1ZmZlclJlZiBzYW1w
bGUsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIE1lZGlhU2FtcGxlOjpWaWRlb1Jv
dGF0aW9uIHJvdGF0aW9uKQoreworICAgIG1fYnVmZmVyID0gc2FtcGxlOworICAgIGlmICh3aWR0
aCAhPSBtX2N1cnJlbnRTZXR0aW5ncy53aWR0aCgpIHx8IGhlaWdodCAhPSBtX2N1cnJlbnRTZXR0
aW5ncy5oZWlnaHQoKSkgeworICAgICAgICBtX2N1cnJlbnRTZXR0aW5ncy5zZXRXaWR0aCh3aWR0
aCk7CisgICAgICAgIG1fY3VycmVudFNldHRpbmdzLnNldEhlaWdodChoZWlnaHQpOworICAgICAg
ICBzZXR0aW5nc0RpZENoYW5nZSgpOworICAgIH0KKworICAgIHZpZGVvU2FtcGxlQXZhaWxhYmxl
KE1lZGlhU2FtcGxlQVZGT2JqQzo6Y3JlYXRlKHNhbXBsZSwgcm90YXRpb24pKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKExJQldFQlJUQykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUluY29t
aW5nVmlkZW9Tb3VyY2VDb2NvYS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vbWFjL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUNvY29hLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTBj
N2EwYmM5ODc3Nzg4NzM5NzQwYzJjZWVmMmNmNDI1OTUyOTkxNQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUluY29taW5n
VmlkZW9Tb3VyY2VDb2NvYS5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShMSUJXRUJSVEMpCisKKyNpbmNs
dWRlICJSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuaCIKKwordXNpbmcgQ01TYW1wbGVCdWZm
ZXJSZWYgPSBzdHJ1Y3Qgb3BhcXVlQ01TYW1wbGVCdWZmZXIqOwordXNpbmcgQ1ZQaXhlbEJ1ZmZl
clJlZiA9IHN0cnVjdCBfX0NWQnVmZmVyKjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VDb2NvYSBmaW5hbCA6IHB1YmxpYyBSZWFsdGlt
ZUluY29taW5nVmlkZW9Tb3VyY2UgeworcHJpdmF0ZToKKyAgICBSZWFsdGltZUluY29taW5nVmlk
ZW9Tb3VyY2VDb2NvYShydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb1RyYWNrSW50ZXJm
YWNlPiYmLCBTdHJpbmcmJik7CisKKyAgICB2b2lkIHByb2Nlc3NOZXdTYW1wbGUoQ01TYW1wbGVC
dWZmZXJSZWYsIHVuc2lnbmVkLCB1bnNpZ25lZCwgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb24p
OworICAgIENWUGl4ZWxCdWZmZXJSZWYgcGl4ZWxCdWZmZXJGcm9tVmlkZW9GcmFtZShjb25zdCB3
ZWJydGM6OlZpZGVvRnJhbWUmKTsKKworICAgIC8vIHJ0Yzo6VmlkZW9TaW5rSW50ZXJmYWNlCisg
ICAgdm9pZCBPbkZyYW1lKGNvbnN0IHdlYnJ0Yzo6VmlkZW9GcmFtZSYpIGZpbmFsOworCisgICAg
UmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiBtX2J1ZmZlcjsKKyAgICBSZXRhaW5QdHI8Q1ZQ
aXhlbEJ1ZmZlclJlZj4gbV9ibGFja0ZyYW1lOworICAgIGludCBtX2JsYWNrRnJhbWVXaWR0aCB7
IDAgfTsKKyAgICBpbnQgbV9ibGFja0ZyYW1lSGVpZ2h0IHsgMCB9OworI2lmICFSRUxFQVNFX0xP
R19ESVNBQkxFRAorICAgIHNpemVfdCBtX251bWJlck9mRnJhbWVzIHsgMCB9OworI2VuZGlmCit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoTElCV0VCUlRDKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0
aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggM2Y0NTBkZjMzYzZmNmEyNTg3ZGEzOWI1ZWM4MmNjZmNkNjBhMGU3
ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291
cmNlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI2NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE3IEFwcGxlIEluYy4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSByZXF1aXJlZCB0byBiZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YKLSAq
ICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUgotICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLSAqIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSCi0gKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5oIgotCi0jaWYgVVNFKExJQldFQlJUQykKLQot
I2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlIDx3ZWJydGMvYXBpL3ZpZGVvL2k0MjBfYnVm
ZmVyLmg+Ci0jaW5jbHVkZSA8d2VicnRjL2NvbW1vbl92aWRlby9saWJ5dXYvaW5jbHVkZS93ZWJy
dGNfbGlieXV2Lmg+Ci0jaW5jbHVkZSA8d2VicnRjL3Nkay9vYmpjL0ZyYW1ld29yay9DbGFzc2Vz
L1ZpZGVvL2NvcmV2aWRlb19mcmFtZV9idWZmZXIuaD4KLSNpbmNsdWRlIDx3dGYvQ3VycmVudFRp
bWUuaD4KLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotCi0jaW5jbHVkZSAiQ29yZU1lZGlh
U29mdExpbmsuaCIKLSNpbmNsdWRlICJDb3JlVmlkZW9Tb2Z0TGluay5oIgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLVJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6UmVhbHRpbWVPdXRnb2lu
Z1ZpZGVvU291cmNlKFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4mJiB2aWRlb1NvdXJjZSkK
LSAgICA6IG1fdmlkZW9Tb3VyY2UoV1RGTW92ZSh2aWRlb1NvdXJjZSkpCi0gICAgLCBtX2JsYWNr
RnJhbWVUaW1lcigqdGhpcywgJlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6c2VuZE9uZUJs
YWNrRnJhbWUpCi17Ci0gICAgbV92aWRlb1NvdXJjZS0+YWRkT2JzZXJ2ZXIoKnRoaXMpOwotICAg
IGluaXRpYWxpemVGcm9tU291cmNlKCk7Ci19Ci0KLWJvb2wgUmVhbHRpbWVPdXRnb2luZ1ZpZGVv
U291cmNlOjpzZXRTb3VyY2UoUmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiYmIG5ld1NvdXJj
ZSkKLXsKLSAgICBpZiAoIW1faW5pdGlhbFNldHRpbmdzKQotICAgICAgICBtX2luaXRpYWxTZXR0
aW5ncyA9IG1fdmlkZW9Tb3VyY2UtPnNvdXJjZSgpLnNldHRpbmdzKCk7Ci0KLSAgICBtX3ZpZGVv
U291cmNlLT5yZW1vdmVPYnNlcnZlcigqdGhpcyk7Ci0gICAgbV92aWRlb1NvdXJjZSA9IFdURk1v
dmUobmV3U291cmNlKTsKLSAgICBtX3ZpZGVvU291cmNlLT5hZGRPYnNlcnZlcigqdGhpcyk7Ci0K
LSAgICBpbml0aWFsaXplRnJvbVNvdXJjZSgpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZv
aWQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpzdG9wKCkKLXsKLSAgICBtX3ZpZGVvU291
cmNlLT5yZW1vdmVPYnNlcnZlcigqdGhpcyk7Ci0gICAgbV9ibGFja0ZyYW1lVGltZXIuc3RvcCgp
OwotICAgIG1faXNTdG9wcGVkID0gdHJ1ZTsKLX0KLQotdm9pZCBSZWFsdGltZU91dGdvaW5nVmlk
ZW9Tb3VyY2U6OnVwZGF0ZUJsYWNrRnJhbWVzU2VuZGluZygpCi17Ci0gICAgaWYgKCFtX211dGVk
ICYmIG1fZW5hYmxlZCkgewotICAgICAgICBpZiAobV9ibGFja0ZyYW1lVGltZXIuaXNBY3RpdmUo
KSkKLSAgICAgICAgICAgIG1fYmxhY2tGcmFtZVRpbWVyLnN0b3AoKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIHNlbmRCbGFja0ZyYW1lc0lmTmVlZGVkKCk7Ci19Ci0KLXZvaWQgUmVh
bHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpzb3VyY2VNdXRlZENoYW5nZWQoKQotewotICAgIEFT
U0VSVChtX211dGVkICE9IG1fdmlkZW9Tb3VyY2UtPm11dGVkKCkpOwotCi0gICAgbV9tdXRlZCA9
IG1fdmlkZW9Tb3VyY2UtPm11dGVkKCk7Ci0KLSAgICB1cGRhdGVCbGFja0ZyYW1lc1NlbmRpbmco
KTsKLX0KLQotdm9pZCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnNvdXJjZUVuYWJsZWRD
aGFuZ2VkKCkKLXsKLSAgICBBU1NFUlQobV9lbmFibGVkICE9IG1fdmlkZW9Tb3VyY2UtPmVuYWJs
ZWQoKSk7Ci0KLSAgICBtX2VuYWJsZWQgPSBtX3ZpZGVvU291cmNlLT5lbmFibGVkKCk7Ci0KLSAg
ICB1cGRhdGVCbGFja0ZyYW1lc1NlbmRpbmcoKTsKLX0KLQotdm9pZCBSZWFsdGltZU91dGdvaW5n
VmlkZW9Tb3VyY2U6OmluaXRpYWxpemVGcm9tU291cmNlKCkKLXsKLSAgICBjb25zdCBhdXRvJiBz
ZXR0aW5ncyA9IG1fdmlkZW9Tb3VyY2UtPnNvdXJjZSgpLnNldHRpbmdzKCk7Ci0gICAgbV93aWR0
aCA9IHNldHRpbmdzLndpZHRoKCk7Ci0gICAgbV9oZWlnaHQgPSBzZXR0aW5ncy5oZWlnaHQoKTsK
LQotICAgIG1fbXV0ZWQgPSBtX3ZpZGVvU291cmNlLT5tdXRlZCgpOwotICAgIG1fZW5hYmxlZCA9
IG1fdmlkZW9Tb3VyY2UtPmVuYWJsZWQoKTsKLQotICAgIHVwZGF0ZUJsYWNrRnJhbWVzU2VuZGlu
ZygpOwotfQotCi1ib29sIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6R2V0U3RhdHMoU3Rh
dHMqKQotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBSZWFsdGltZU91dGdvaW5nVmlk
ZW9Tb3VyY2U6OkFkZE9yVXBkYXRlU2luayhydGM6OlZpZGVvU2lua0ludGVyZmFjZTx3ZWJydGM6
OlZpZGVvRnJhbWU+KiBzaW5rLCBjb25zdCBydGM6OlZpZGVvU2lua1dhbnRzJiBzaW5rV2FudHMp
Ci17Ci0gICAgQVNTRVJUKCFzaW5rV2FudHMuYmxhY2tfZnJhbWVzKTsKLQotICAgIGlmIChzaW5r
V2FudHMucm90YXRpb25fYXBwbGllZCkKLSAgICAgICAgbV9zaG91bGRBcHBseVJvdGF0aW9uID0g
dHJ1ZTsKLQotICAgIGlmICghbV9zaW5rcy5jb250YWlucyhzaW5rKSkKLSAgICAgICAgbV9zaW5r
cy5hcHBlbmQoc2luayk7Ci0KLSAgICBjYWxsT25NYWluVGhyZWFkKFtwcm90ZWN0ZWRUaGlzID0g
bWFrZVJlZigqdGhpcyldKCkgewotICAgICAgICBwcm90ZWN0ZWRUaGlzLT5zZW5kQmxhY2tGcmFt
ZXNJZk5lZWRlZCgpOwotICAgIH0pOwotfQotCi12b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1Nv
dXJjZTo6UmVtb3ZlU2luayhydGM6OlZpZGVvU2lua0ludGVyZmFjZTx3ZWJydGM6OlZpZGVvRnJh
bWU+KiBzaW5rKQotewotICAgIG1fc2lua3MucmVtb3ZlRmlyc3Qoc2luayk7Ci0KLSAgICBpZiAo
bV9zaW5rcy5zaXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNhbGxPbk1haW5UaHJlYWQo
W3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0oKSB7Ci0gICAgICAgIGlmIChwcm90ZWN0
ZWRUaGlzLT5tX2JsYWNrRnJhbWVUaW1lci5pc0FjdGl2ZSgpKQotICAgICAgICAgICAgcHJvdGVj
dGVkVGhpcy0+bV9ibGFja0ZyYW1lVGltZXIuc3RvcCgpOwotICAgIH0pOwotfQotCi12b2lkIFJl
YWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6c2VuZEJsYWNrRnJhbWVzSWZOZWVkZWQoKQotewot
ICAgIGlmIChtX2JsYWNrRnJhbWVUaW1lci5pc0FjdGl2ZSgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAoIW1fc2lua3Muc2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1f
bXV0ZWQgJiYgbV9lbmFibGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fd2lkdGgg
fHwgIW1faGVpZ2h0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fYmxhY2tGcmFtZSkg
ewotICAgICAgICBhdXRvIHdpZHRoID0gbV93aWR0aDsKLSAgICAgICAgYXV0byBoZWlnaHQgPSBt
X2hlaWdodDsKLSAgICAgICAgaWYgKG1fc2hvdWxkQXBwbHlSb3RhdGlvbiAmJiAobV9jdXJyZW50
Um90YXRpb24gPT0gd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8wIHx8IG1fY3VycmVudFJvdGF0aW9u
ID09IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fOTApKQotICAgICAgICAgICAgc3RkOjpzd2FwKHdp
ZHRoLCBoZWlnaHQpOwotICAgICAgICBhdXRvIGZyYW1lID0gbV9idWZmZXJQb29sLkNyZWF0ZUJ1
ZmZlcih3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgQVNTRVJUKGZyYW1lKTsKLSAgICAgICAgaWYg
KCFmcmFtZSkgewotICAgICAgICAgICAgUkVMRUFTRV9MT0coV2ViUlRDLCAiUmVhbHRpbWVPdXRn
b2luZ1ZpZGVvU291cmNlOjpzZW5kQmxhY2tGcmFtZXNJZk5lZWRlZCB1bmFibGUgdG8gc2VuZCBi
bGFjayBmcmFtZXMiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB3
ZWJydGM6Okk0MjBCdWZmZXI6OlNldEJsYWNrKGZyYW1lLmdldCgpKTsKLSAgICAgICAgbV9ibGFj
a0ZyYW1lID0gV1RGTW92ZShmcmFtZSk7Ci0gICAgfQotICAgIHNlbmRPbmVCbGFja0ZyYW1lKCk7
Ci0gICAgbV9ibGFja0ZyYW1lVGltZXIuc3RhcnRSZXBlYXRpbmcoMV9zKTsKLX0KLQotdm9pZCBS
ZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnNlbmRPbmVCbGFja0ZyYW1lKCkKLXsKLSAgICBS
RUxFQVNFX0xPRyhNZWRpYVN0cmVhbSwgIlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6c2Vu
ZE9uZUJsYWNrRnJhbWUiKTsKLSAgICBzZW5kRnJhbWUocnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0
Yzo6VmlkZW9GcmFtZUJ1ZmZlcj4obV9ibGFja0ZyYW1lKSk7Ci19Ci0KLXZvaWQgUmVhbHRpbWVP
dXRnb2luZ1ZpZGVvU291cmNlOjpzZW5kRnJhbWUocnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6
VmlkZW9GcmFtZUJ1ZmZlcj4mJiBidWZmZXIpCi17Ci0gICAgaW50NjRfdCB0aW1lc3RhbXBNaWNy
b1NlY29uZHMgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWVNUygpICogMTAwMDsKLSAgICB3
ZWJydGM6OlZpZGVvRnJhbWUgZnJhbWUoYnVmZmVyLCBtX3Nob3VsZEFwcGx5Um90YXRpb24gPyB3
ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzAgOiBtX2N1cnJlbnRSb3RhdGlvbiwgdGltZXN0YW1wTWlj
cm9TZWNvbmRzKTsKLSAgICBmb3IgKGF1dG8qIHNpbmsgOiBtX3NpbmtzKQotICAgICAgICBzaW5r
LT5PbkZyYW1lKGZyYW1lKTsKLX0KLQotdm9pZCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6
OnZpZGVvU2FtcGxlQXZhaWxhYmxlKE1lZGlhU2FtcGxlJiBzYW1wbGUpCi17Ci0gICAgaWYgKCFt
X3NpbmtzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fbXV0ZWQgfHwgIW1f
ZW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECi0g
ICAgaWYgKCEoKyttX251bWJlck9mRnJhbWVzICUgMzApKQotICAgICAgICBSRUxFQVNFX0xPRyhN
ZWRpYVN0cmVhbSwgIlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6c2VuZEZyYW1lICV6dSBm
cmFtZSIsIG1fbnVtYmVyT2ZGcmFtZXMpOwotI2VuZGlmCi0KLSAgICBzd2l0Y2ggKHNhbXBsZS52
aWRlb1JvdGF0aW9uKCkpIHsKLSAgICBjYXNlIE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpO
b25lOgotICAgICAgICBtX2N1cnJlbnRSb3RhdGlvbiA9IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25f
MDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6
VXBzaWRlRG93bjoKLSAgICAgICAgbV9jdXJyZW50Um90YXRpb24gPSB3ZWJydGM6OmtWaWRlb1Jv
dGF0aW9uXzE4MDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBNZWRpYVNhbXBsZTo6VmlkZW9S
b3RhdGlvbjo6UmlnaHQ6Ci0gICAgICAgIG1fY3VycmVudFJvdGF0aW9uID0gd2VicnRjOjprVmlk
ZW9Sb3RhdGlvbl85MDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBNZWRpYVNhbXBsZTo6Vmlk
ZW9Sb3RhdGlvbjo6TGVmdDoKLSAgICAgICAgbV9jdXJyZW50Um90YXRpb24gPSB3ZWJydGM6OmtW
aWRlb1JvdGF0aW9uXzI3MDsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgQVNTRVJUKHNh
bXBsZS5wbGF0Zm9ybVNhbXBsZSgpLnR5cGUgPT0gUGxhdGZvcm1TYW1wbGU6OkNNU2FtcGxlQnVm
ZmVyVHlwZSk7Ci0gICAgYXV0byBwaXhlbEJ1ZmZlciA9IHN0YXRpY19jYXN0PENWUGl4ZWxCdWZm
ZXJSZWY+KENNU2FtcGxlQnVmZmVyR2V0SW1hZ2VCdWZmZXIoc2FtcGxlLnBsYXRmb3JtU2FtcGxl
KCkuc2FtcGxlLmNtU2FtcGxlQnVmZmVyKSk7Ci0gICAgYXV0byBwaXhlbEZvcm1hdFR5cGUgPSBD
VlBpeGVsQnVmZmVyR2V0UGl4ZWxGb3JtYXRUeXBlKHBpeGVsQnVmZmVyKTsKLQotICAgIGlmIChw
aXhlbEZvcm1hdFR5cGUgPT0ga0NWUGl4ZWxGb3JtYXRUeXBlXzQyMFlwQ2JDcjhQbGFuYXIgfHwg
cGl4ZWxGb3JtYXRUeXBlID09IGtDVlBpeGVsRm9ybWF0VHlwZV80MjBZcENiQ3I4QmlQbGFuYXJG
dWxsUmFuZ2UpIHsKLSAgICAgICAgcnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9GcmFt
ZUJ1ZmZlcj4gYnVmZmVyID0gbmV3IHJ0Yzo6UmVmQ291bnRlZE9iamVjdDx3ZWJydGM6OkNvcmVW
aWRlb0ZyYW1lQnVmZmVyPihwaXhlbEJ1ZmZlcik7Ci0gICAgICAgIGlmIChtX3Nob3VsZEFwcGx5
Um90YXRpb24gJiYgbV9jdXJyZW50Um90YXRpb24gIT0gd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8w
KSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG1ha2UgQVZWaWRlb0NhcHR1cmVT
b3VyY2UgaGFuZGxlIHRoZSByb3RhdGlvbiB3aGVuZXZlciBwb3NzaWJsZS4KLSAgICAgICAgICAg
IC8vIFRoaXMgaW1wbGVtZW50YXRpb24gaXMgaW5lZmZpY2llbnQsIHdlIHNob3VsZCByb3RhdGUg
b24gdGhlIENNU2FtcGxlQnVmZmVyIGRpcmVjdGx5IGluc3RlYWQgb2YgZG9pbmcgdGhpcyBkb3Vi
bGUgYWxsb2NhdGlvbi4KLSAgICAgICAgICAgIGF1dG8gcm90YXRlZEJ1ZmZlciA9IGJ1ZmZlci0+
VG9JNDIwKCk7Ci0gICAgICAgICAgICBBU1NFUlQocm90YXRlZEJ1ZmZlcik7Ci0gICAgICAgICAg
ICBidWZmZXIgPSB3ZWJydGM6Okk0MjBCdWZmZXI6OlJvdGF0ZSgqcm90YXRlZEJ1ZmZlciwgbV9j
dXJyZW50Um90YXRpb24pOwotICAgICAgICB9Ci0gICAgICAgIHNlbmRGcmFtZShXVEZNb3ZlKGJ1
ZmZlcikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQ1ZQaXhlbEJ1ZmZlckxvY2tC
YXNlQWRkcmVzcyhwaXhlbEJ1ZmZlciwgMCk7Ci0gICAgYXV0byogc291cmNlID0gcmVpbnRlcnBy
ZXRfY2FzdDx1aW50OF90Kj4oQ1ZQaXhlbEJ1ZmZlckdldEJhc2VBZGRyZXNzT2ZQbGFuZShwaXhl
bEJ1ZmZlciwgMCkpOwotCi0gICAgQVNTRVJUKG1fd2lkdGgpOwotICAgIEFTU0VSVChtX2hlaWdo
dCk7Ci0KLSAgICBhdXRvIG5ld0J1ZmZlciA9IG1fYnVmZmVyUG9vbC5DcmVhdGVCdWZmZXIobV93
aWR0aCwgbV9oZWlnaHQpOwotICAgIEFTU0VSVChuZXdCdWZmZXIpOwotICAgIGlmICghbmV3QnVm
ZmVyKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HKFdlYlJUQywgIlJlYWx0aW1lT3V0Z29pbmdWaWRl
b1NvdXJjZTo6dmlkZW9TYW1wbGVBdmFpbGFibGUgdW5hYmxlIHRvIGFsbG9jYXRlIGJ1ZmZlciBm
b3IgY29udmVyc2lvbiB0byBZVVYiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAo
cGl4ZWxGb3JtYXRUeXBlID09IGtDVlBpeGVsRm9ybWF0VHlwZV8zMkJHUkEpCi0gICAgICAgIHdl
YnJ0Yzo6Q29udmVydFRvSTQyMCh3ZWJydGM6OlZpZGVvVHlwZTo6a0FSR0IsIHNvdXJjZSwgMCwg
MCwgbV93aWR0aCwgbV9oZWlnaHQsIDAsIHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMCwgbmV3QnVm
ZmVyKTsKLSAgICBlbHNlIHsKLSAgICAgICAgQVNTRVJUKHBpeGVsRm9ybWF0VHlwZSA9PSBrQ1ZQ
aXhlbEZvcm1hdFR5cGVfMzJBUkdCKTsKLSAgICAgICAgd2VicnRjOjpDb252ZXJ0VG9JNDIwKHdl
YnJ0Yzo6VmlkZW9UeXBlOjprQkdSQSwgc291cmNlLCAwLCAwLCBtX3dpZHRoLCBtX2hlaWdodCwg
MCwgd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8wLCBuZXdCdWZmZXIpOwotICAgIH0KLSAgICBDVlBp
eGVsQnVmZmVyVW5sb2NrQmFzZUFkZHJlc3MocGl4ZWxCdWZmZXIsIDApOwotICAgIGlmIChtX3No
b3VsZEFwcGx5Um90YXRpb24gJiYgbV9jdXJyZW50Um90YXRpb24gIT0gd2VicnRjOjprVmlkZW9S
b3RhdGlvbl8wKQotICAgICAgICBuZXdCdWZmZXIgPSB3ZWJydGM6Okk0MjBCdWZmZXI6OlJvdGF0
ZSgqbmV3QnVmZmVyLCBtX2N1cnJlbnRSb3RhdGlvbik7Ci0gICAgc2VuZEZyYW1lKFdURk1vdmUo
bmV3QnVmZmVyKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVT
RShMSUJXRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3ZTc4YjUxNjVkMDU2OTVmZTFhNDU4NDA4NTli
YjExYzEyZTQ4ODYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lT3V0Z29p
bmdWaWRlb1NvdXJjZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE2ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkLCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIHJlcXVpcmVkIHRvIGJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SCi0gKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotICog
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIKLSAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIFVT
RShMSUJXRUJSVEMpCi0KLSNpbmNsdWRlICJMaWJXZWJSVENNYWNyb3MuaCIKLSNpbmNsdWRlICJN
ZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5oIgotI2luY2x1ZGUgPFRpbWVyLmg+Ci0jaW5jbHVkZSA8
d2VicnRjL2FwaS9tZWRpYXN0cmVhbWludGVyZmFjZS5oPgotI2luY2x1ZGUgPHdlYnJ0Yy9iYXNl
L29wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d2VicnRjL2NvbW1vbl92aWRlby9pbmNsdWRlL2k0MjBf
YnVmZmVyX3Bvb2wuaD4KLSNpbmNsdWRlIDx3ZWJydGMvbWVkaWEvYmFzZS92aWRlb3NpbmtpbnRl
cmZhY2UuaD4KLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFk
U2FmZVJlZkNvdW50ZWQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBSZWFsdGlt
ZU91dGdvaW5nVmlkZW9Tb3VyY2UgZmluYWwgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8
UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlPiwgcHVibGljIHdlYnJ0Yzo6VmlkZW9UcmFja1Nv
dXJjZUludGVyZmFjZSwgcHJpdmF0ZSBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6T2JzZXJ2ZXIg
ewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlPiBj
cmVhdGUoUmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiYmIHZpZGVvU291cmNlKSB7IHJldHVy
biBhZG9wdFJlZigqbmV3IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZShXVEZNb3ZlKHZpZGVv
U291cmNlKSkpOyB9Ci0gICAgflJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZSgpIHsgc3RvcCgp
OyB9Ci0KLSAgICB2b2lkIHN0b3AoKTsKLSAgICBib29sIHNldFNvdXJjZShSZWY8TWVkaWFTdHJl
YW1UcmFja1ByaXZhdGU+JiYpOwotICAgIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJiBzb3VyY2Uo
KSBjb25zdCB7IHJldHVybiBtX3ZpZGVvU291cmNlLmdldCgpOyB9Ci0KLSAgICBpbnQgQWRkUmVm
KCkgY29uc3QgZmluYWwgeyByZWYoKTsgcmV0dXJuIHJlZkNvdW50KCk7IH0KLSAgICBpbnQgUmVs
ZWFzZSgpIGNvbnN0IGZpbmFsIHsgZGVyZWYoKTsgcmV0dXJuIHJlZkNvdW50KCk7IH0KLQotICAg
IHZvaWQgc2V0QXBwbHlSb3RhdGlvbihib29sIHNob3VsZEFwcGx5Um90YXRpb24pIHsgbV9zaG91
bGRBcHBseVJvdGF0aW9uID0gc2hvdWxkQXBwbHlSb3RhdGlvbjsgfQotCi1wcml2YXRlOgotICAg
IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZShSZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+
JiYpOwotCi0gICAgdm9pZCBzZW5kRnJhbWUocnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6Vmlk
ZW9GcmFtZUJ1ZmZlcj4mJik7Ci0gICAgdm9pZCBzZW5kQmxhY2tGcmFtZXNJZk5lZWRlZCgpOwot
ICAgIHZvaWQgc2VuZE9uZUJsYWNrRnJhbWUoKTsKLSAgICB2b2lkIGluaXRpYWxpemVGcm9tU291
cmNlKCk7Ci0gICAgdm9pZCB1cGRhdGVCbGFja0ZyYW1lc1NlbmRpbmcoKTsKLQotICAgIC8vIE5v
dGlmaWVyIEFQSQotICAgIHZvaWQgUmVnaXN0ZXJPYnNlcnZlcih3ZWJydGM6Ok9ic2VydmVySW50
ZXJmYWNlKikgZmluYWwgeyB9Ci0gICAgdm9pZCBVbnJlZ2lzdGVyT2JzZXJ2ZXIod2VicnRjOjpP
YnNlcnZlckludGVyZmFjZSopIGZpbmFsIHsgfQotCi0gICAgLy8gVmlkZW9UcmFja1NvdXJjZUlu
dGVyZmFjZSBBUEkKLSAgICBib29sIGlzX3NjcmVlbmNhc3QoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBmYWxzZTsgfQotICAgIHJ0Yzo6T3B0aW9uYWw8Ym9vbD4gbmVlZHNfZGVub2lzaW5nKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gcnRjOjpPcHRpb25hbDxib29sPigpOyB9Ci0gICAgYm9vbCBHZXRT
dGF0cyhTdGF0cyopIGZpbmFsOwotCi0gICAgLy8gTWVkaWFTb3VyY2VJbnRlcmZhY2UgQVBJCi0g
ICAgU291cmNlU3RhdGUgc3RhdGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBTb3VyY2VTdGF0ZSgp
OyB9Ci0gICAgYm9vbCByZW1vdGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9Ci0KLSAg
ICAvLyBydGM6OlZpZGVvU291cmNlSW50ZXJmYWNlPHdlYnJ0Yzo6VmlkZW9GcmFtZT4gQVBJCi0g
ICAgdm9pZCBBZGRPclVwZGF0ZVNpbmsocnRjOjpWaWRlb1NpbmtJbnRlcmZhY2U8d2VicnRjOjpW
aWRlb0ZyYW1lPiosIGNvbnN0IHJ0Yzo6VmlkZW9TaW5rV2FudHMmKSBmaW5hbDsKLSAgICB2b2lk
IFJlbW92ZVNpbmsocnRjOjpWaWRlb1NpbmtJbnRlcmZhY2U8d2VicnRjOjpWaWRlb0ZyYW1lPiop
IGZpbmFsOwotCi0gICAgdm9pZCBzb3VyY2VNdXRlZENoYW5nZWQoKTsKLSAgICB2b2lkIHNvdXJj
ZUVuYWJsZWRDaGFuZ2VkKCk7Ci0gICAgdm9pZCB2aWRlb1NhbXBsZUF2YWlsYWJsZShNZWRpYVNh
bXBsZSYpOwotCi0gICAgLy8gTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6Ok9ic2VydmVyIEFQSQot
ICAgIHZvaWQgdHJhY2tNdXRlZENoYW5nZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmKSBmaW5h
bCB7IHNvdXJjZU11dGVkQ2hhbmdlZCgpOyB9Ci0gICAgdm9pZCB0cmFja0VuYWJsZWRDaGFuZ2Vk
KE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJikgZmluYWwgeyBzb3VyY2VFbmFibGVkQ2hhbmdlZCgp
OyB9Ci0gICAgdm9pZCB0cmFja1NldHRpbmdzQ2hhbmdlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0
ZSYpIGZpbmFsIHsgaW5pdGlhbGl6ZUZyb21Tb3VyY2UoKTsgfQotICAgIHZvaWQgc2FtcGxlQnVm
ZmVyVXBkYXRlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYsIE1lZGlhU2FtcGxlJiBzYW1wbGUp
IGZpbmFsIHsgdmlkZW9TYW1wbGVBdmFpbGFibGUoc2FtcGxlKTsgfQotICAgIHZvaWQgdHJhY2tF
bmRlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYpIGZpbmFsIHsgfQotCi0gICAgVmVjdG9yPHJ0
Yzo6VmlkZW9TaW5rSW50ZXJmYWNlPHdlYnJ0Yzo6VmlkZW9GcmFtZT4qPiBtX3NpbmtzOwotICAg
IHdlYnJ0Yzo6STQyMEJ1ZmZlclBvb2wgbV9idWZmZXJQb29sOwotICAgIFJlZjxNZWRpYVN0cmVh
bVRyYWNrUHJpdmF0ZT4gbV92aWRlb1NvdXJjZTsKLSAgICBib29sIG1fZW5hYmxlZCB7IHRydWUg
fTsKLSAgICBib29sIG1fbXV0ZWQgeyBmYWxzZSB9OwotICAgIHN0ZDo6b3B0aW9uYWw8UmVhbHRp
bWVNZWRpYVNvdXJjZVNldHRpbmdzPiBtX2luaXRpYWxTZXR0aW5nczsKLSAgICB3ZWJydGM6OlZp
ZGVvUm90YXRpb24gbV9jdXJyZW50Um90YXRpb24geyB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzAg
fTsKLSAgICB1aW50MzJfdCBtX3dpZHRoIHsgMCB9OwotICAgIHVpbnQzMl90IG1faGVpZ2h0IHsg
MCB9OwotICAgIGJvb2wgbV9pc1N0b3BwZWQgeyBmYWxzZSB9OwotICAgIFRpbWVyIG1fYmxhY2tG
cmFtZVRpbWVyOwotICAgIHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvRnJhbWVCdWZm
ZXI+IG1fYmxhY2tGcmFtZTsKLSAgICBib29sIG1fc2hvdWxkQXBwbHlSb3RhdGlvbiB7IGZhbHNl
IH07Ci0jaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECi0gICAgc2l6ZV90IG1fbnVtYmVyT2ZGcmFt
ZXMgeyAwIH07Ci0jZW5kaWYKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlm
IC8vIFVTRShMSUJXRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlQ29jb2EuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lT3V0Z29pbmdWaWRl
b1NvdXJjZUNvY29hLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44YWNmODYyZjE3ZmI4MmFhYmZjZjAwNDgyOGVk
NTgxNjIzNTJlM2U2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUNvY29hLmNwcApAQCAt
MCwwICsxLDEyMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQsIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgcmVxdWlyZWQgdG8gYmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUNvY29hLmgiCisKKyNpZiBVU0UoTElCV0VCUlRD
KQorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgPHdlYnJ0Yy9hcGkvdmlkZW8vaTQy
MF9idWZmZXIuaD4KKyNpbmNsdWRlIDx3ZWJydGMvY29tbW9uX3ZpZGVvL2xpYnl1di9pbmNsdWRl
L3dlYnJ0Y19saWJ5dXYuaD4KKyNpbmNsdWRlIDx3ZWJydGMvc2RrL29iamMvRnJhbWV3b3JrL0Ns
YXNzZXMvVmlkZW8vY29yZXZpZGVvX2ZyYW1lX2J1ZmZlci5oPgorCisjaW5jbHVkZSAiQ29yZU1l
ZGlhU29mdExpbmsuaCIKKyNpbmNsdWRlICJDb3JlVmlkZW9Tb2Z0TGluay5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK1JlZjxSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U+IFJlYWx0aW1l
T3V0Z29pbmdWaWRlb1NvdXJjZTo6Y3JlYXRlKFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4m
JiB2aWRlb1NvdXJjZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBSZWFsdGltZU91dGdv
aW5nVmlkZW9Tb3VyY2UoV1RGTW92ZSh2aWRlb1NvdXJjZSkpKTsKK30KKworUmVhbHRpbWVPdXRn
b2luZ1ZpZGVvU291cmNlQ29jb2E6OlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUNvY29hKFJl
ZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4mJiB2aWRlb1NvdXJjZSkKKyAgICA6IFJlYWx0aW1l
T3V0Z29pbmdWaWRlb1NvdXJjZShXVEZNb3ZlKHZpZGVvU291cmNlKSkKK3sKK30KKwordm9pZCBS
ZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VDb2NvYTo6c2FtcGxlQnVmZmVyVXBkYXRlZChNZWRp
YVN0cmVhbVRyYWNrUHJpdmF0ZSYsIE1lZGlhU2FtcGxlJiBzYW1wbGUpCit7CisgICAgaWYgKCFt
X3NpbmtzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fbXV0ZWQgfHwgIW1f
ZW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisg
ICAgaWYgKCEoKyttX251bWJlck9mRnJhbWVzICUgMzApKQorICAgICAgICBSRUxFQVNFX0xPRyhN
ZWRpYVN0cmVhbSwgIlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUNvY29hOjpzZW5kRnJhbWUg
JXp1IGZyYW1lIiwgbV9udW1iZXJPZkZyYW1lcyk7CisjZW5kaWYKKworICAgIHN3aXRjaCAoc2Ft
cGxlLnZpZGVvUm90YXRpb24oKSkgeworICAgIGNhc2UgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRp
b246Ok5vbmU6CisgICAgICAgIG1fY3VycmVudFJvdGF0aW9uID0gd2VicnRjOjprVmlkZW9Sb3Rh
dGlvbl8wOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0
aW9uOjpVcHNpZGVEb3duOgorICAgICAgICBtX2N1cnJlbnRSb3RhdGlvbiA9IHdlYnJ0Yzo6a1Zp
ZGVvUm90YXRpb25fMTgwOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE1lZGlhU2FtcGxlOjpW
aWRlb1JvdGF0aW9uOjpSaWdodDoKKyAgICAgICAgbV9jdXJyZW50Um90YXRpb24gPSB3ZWJydGM6
OmtWaWRlb1JvdGF0aW9uXzkwOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE1lZGlhU2FtcGxl
OjpWaWRlb1JvdGF0aW9uOjpMZWZ0OgorICAgICAgICBtX2N1cnJlbnRSb3RhdGlvbiA9IHdlYnJ0
Yzo6a1ZpZGVvUm90YXRpb25fMjcwOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBBU1NF
UlQoc2FtcGxlLnBsYXRmb3JtU2FtcGxlKCkudHlwZSA9PSBQbGF0Zm9ybVNhbXBsZTo6Q01TYW1w
bGVCdWZmZXJUeXBlKTsKKyAgICBhdXRvIHBpeGVsQnVmZmVyID0gc3RhdGljX2Nhc3Q8Q1ZQaXhl
bEJ1ZmZlclJlZj4oQ01TYW1wbGVCdWZmZXJHZXRJbWFnZUJ1ZmZlcihzYW1wbGUucGxhdGZvcm1T
YW1wbGUoKS5zYW1wbGUuY21TYW1wbGVCdWZmZXIpKTsKKyAgICBhdXRvIHBpeGVsRm9ybWF0VHlw
ZSA9IENWUGl4ZWxCdWZmZXJHZXRQaXhlbEZvcm1hdFR5cGUocGl4ZWxCdWZmZXIpOworCisgICAg
aWYgKHBpeGVsRm9ybWF0VHlwZSA9PSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyOFBsYW5h
ciB8fCBwaXhlbEZvcm1hdFR5cGUgPT0ga0NWUGl4ZWxGb3JtYXRUeXBlXzQyMFlwQ2JDcjhCaVBs
YW5hckZ1bGxSYW5nZSkgeworICAgICAgICBydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRl
b0ZyYW1lQnVmZmVyPiBidWZmZXIgPSBuZXcgcnRjOjpSZWZDb3VudGVkT2JqZWN0PHdlYnJ0Yzo6
Q29yZVZpZGVvRnJhbWVCdWZmZXI+KHBpeGVsQnVmZmVyKTsKKyAgICAgICAgaWYgKG1fc2hvdWxk
QXBwbHlSb3RhdGlvbiAmJiBtX2N1cnJlbnRSb3RhdGlvbiAhPSB3ZWJydGM6OmtWaWRlb1JvdGF0
aW9uXzApIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbWFrZSBBVlZpZGVvQ2Fw
dHVyZVNvdXJjZSBoYW5kbGUgdGhlIHJvdGF0aW9uIHdoZW5ldmVyIHBvc3NpYmxlLgorICAgICAg
ICAgICAgLy8gVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBpbmVmZmljaWVudCwgd2Ugc2hvdWxkIHJv
dGF0ZSBvbiB0aGUgQ01TYW1wbGVCdWZmZXIgZGlyZWN0bHkgaW5zdGVhZCBvZiBkb2luZyB0aGlz
IGRvdWJsZSBhbGxvY2F0aW9uLgorICAgICAgICAgICAgYXV0byByb3RhdGVkQnVmZmVyID0gYnVm
ZmVyLT5Ub0k0MjAoKTsKKyAgICAgICAgICAgIEFTU0VSVChyb3RhdGVkQnVmZmVyKTsKKyAgICAg
ICAgICAgIGJ1ZmZlciA9IHdlYnJ0Yzo6STQyMEJ1ZmZlcjo6Um90YXRlKCpyb3RhdGVkQnVmZmVy
LCBtX2N1cnJlbnRSb3RhdGlvbik7CisgICAgICAgIH0KKyAgICAgICAgc2VuZEZyYW1lKFdURk1v
dmUoYnVmZmVyKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBDVlBpeGVsQnVmZmVy
TG9ja0Jhc2VBZGRyZXNzKHBpeGVsQnVmZmVyLCAwKTsKKyAgICBhdXRvKiBzb3VyY2UgPSByZWlu
dGVycHJldF9jYXN0PHVpbnQ4X3QqPihDVlBpeGVsQnVmZmVyR2V0QmFzZUFkZHJlc3NPZlBsYW5l
KHBpeGVsQnVmZmVyLCAwKSk7CisKKyAgICBBU1NFUlQobV93aWR0aCk7CisgICAgQVNTRVJUKG1f
aGVpZ2h0KTsKKworICAgIGF1dG8gbmV3QnVmZmVyID0gbV9idWZmZXJQb29sLkNyZWF0ZUJ1ZmZl
cihtX3dpZHRoLCBtX2hlaWdodCk7CisgICAgQVNTRVJUKG5ld0J1ZmZlcik7CisgICAgaWYgKCFu
ZXdCdWZmZXIpIHsKKyAgICAgICAgUkVMRUFTRV9MT0coV2ViUlRDLCAiUmVhbHRpbWVPdXRnb2lu
Z1ZpZGVvU291cmNlQ29jb2E6OnZpZGVvU2FtcGxlQXZhaWxhYmxlIHVuYWJsZSB0byBhbGxvY2F0
ZSBidWZmZXIgZm9yIGNvbnZlcnNpb24gdG8gWVVWIik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgaWYgKHBpeGVsRm9ybWF0VHlwZSA9PSBrQ1ZQaXhlbEZvcm1hdFR5cGVfMzJCR1JBKQor
ICAgICAgICB3ZWJydGM6OkNvbnZlcnRUb0k0MjAod2VicnRjOjpWaWRlb1R5cGU6OmtBUkdCLCBz
b3VyY2UsIDAsIDAsIG1fd2lkdGgsIG1faGVpZ2h0LCAwLCB3ZWJydGM6OmtWaWRlb1JvdGF0aW9u
XzAsIG5ld0J1ZmZlcik7CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVChwaXhlbEZvcm1hdFR5
cGUgPT0ga0NWUGl4ZWxGb3JtYXRUeXBlXzMyQVJHQik7CisgICAgICAgIHdlYnJ0Yzo6Q29udmVy
dFRvSTQyMCh3ZWJydGM6OlZpZGVvVHlwZTo6a0JHUkEsIHNvdXJjZSwgMCwgMCwgbV93aWR0aCwg
bV9oZWlnaHQsIDAsIHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMCwgbmV3QnVmZmVyKTsKKyAgICB9
CisgICAgQ1ZQaXhlbEJ1ZmZlclVubG9ja0Jhc2VBZGRyZXNzKHBpeGVsQnVmZmVyLCAwKTsKKyAg
ICBpZiAobV9zaG91bGRBcHBseVJvdGF0aW9uICYmIG1fY3VycmVudFJvdGF0aW9uICE9IHdlYnJ0
Yzo6a1ZpZGVvUm90YXRpb25fMCkKKyAgICAgICAgbmV3QnVmZmVyID0gd2VicnRjOjpJNDIwQnVm
ZmVyOjpSb3RhdGUoKm5ld0J1ZmZlciwgbV9jdXJyZW50Um90YXRpb24pOworICAgIHNlbmRGcmFt
ZShXVEZNb3ZlKG5ld0J1ZmZlcikpOworfQorCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIFVTRShMSUJXRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlQ29jb2EuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU91dGdvaW5n
VmlkZW9Tb3VyY2VDb2NvYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZlY2VlZGM3ZTcwOTNkZTMyZjVhYjdlMzRh
ZjA4ZDA4MDczMzg2MWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlQ29jb2EuaApAQCAt
MCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCwgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSByZXF1aXJlZCB0byBiZSBtZXQ6Cisg
KgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShMSUJXRUJS
VEMpCisKKyNpbmNsdWRlICJSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VDb2NvYSBm
aW5hbCA6IHB1YmxpYyBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UgeworcHJvdGVjdGVkOgor
ICAgIGV4cGxpY2l0IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUNvY29hKFJlZjxNZWRpYVN0
cmVhbVRyYWNrUHJpdmF0ZT4mJik7CisKK3ByaXZhdGU6CisgICAgLy8gTWVkaWFTdHJlYW1UcmFj
a1ByaXZhdGU6Ok9ic2VydmVyIEFQSQorICAgIHZvaWQgc2FtcGxlQnVmZmVyVXBkYXRlZChNZWRp
YVN0cmVhbVRyYWNrUHJpdmF0ZSYsIE1lZGlhU2FtcGxlJikgZmluYWw7CisKKyNpZiAhUkVMRUFT
RV9MT0dfRElTQUJMRUQKKyAgICBzaXplX3QgbV9udW1iZXJPZkZyYW1lcyB7IDAgfTsKKyNlbmRp
ZgorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKExJQldFQlJU
QykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322829</attachid>
            <date>2017-10-05 05:32:40 -0700</date>
            <delta_ts>2017-10-05 05:43:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177869-20171005143238.patch</filename>
            <type>text/plain</type>
            <size>76358</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIyOTA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjkzODIyMzA3YzA4MTkz
ODNhYjVjNDliNDQxNTFlNWFkODFkNWFmMy4uNWIxNDNjMzFkYzkyNDk1ZGRmNTViMTA2ODg5ZWI0
ZThkZjkzOTkyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDE3LTEwLTA1ICBBbGVq
YW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisgICAgICAgIE1ha2UgUmVhbHRp
bWVJbmNvbWluZ1ZpZGVvU291cmNlcyBhbmQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlcyBw
b3J0IGFnbm9zdGljCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzc4NjkKKworICAgICAgICBSZXZpZXdlZCBieSBZb3Vlbm4gRmFibGV0LgorCisgICAg
ICAgIFJlZmFjdG9yIHRoZSBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UgYW5kIFJlYWx0aW1l
T3V0Z29pbmdWaWRlb1NvdXJjZSBjbGFzc2VzLAorICAgICAgICBtb3ZlIHRoZSBtYWMgc3BlY2lm
aWMgY29kZSB0byBhIGRpZmZlcmVudCBjbGFzcy4gVGhpcyB3YXkgd2UgY2FuIHVzZSB0aGVtIGZy
b20KKyAgICAgICAgb3RoZXIgcG9ydHMuCisKKyAgICAgICAgTm8gbmV3IGZ1bmN0aW9uYWxpdHks
IGp1c3QgYSByZWZhY3Rvci4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAq
IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6UmVhbHRpbWVJbmNvbWlu
Z1ZpZGVvU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdWaWRlb1Nv
dXJjZTo6c3RhcnRQcm9kdWNpbmdEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5j
b21pbmdWaWRlb1NvdXJjZTo6c2V0U291cmNlVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVh
bHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlOjpzdG9wUHJvZHVjaW5nRGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6OmNhcGFiaWxpdGllcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6OnNldHRpbmdz
IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZUluY29taW5n
VmlkZW9Tb3VyY2UuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5oLgorICAgICAgICAqIHBsYXRm
b3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5jcHA6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRn
b2luZ1ZpZGVvU291cmNlLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdW
aWRlb1NvdXJjZTo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFs
dGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuaC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6dmlkZW9TYW1wbGVB
dmFpbGFibGUpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUlu
Y29taW5nVmlkZW9Tb3VyY2VNYWMuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5jcHAuCisg
ICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWM6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWM6OlJlYWx0
aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1hYyk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUlu
Y29taW5nVmlkZW9Tb3VyY2VNYWM6OnBpeGVsQnVmZmVyRnJvbVZpZGVvRnJhbWUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTWFjOjpPbkZyYW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1hYzo6cHJvY2Vzc05l
d1NhbXBsZSk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lSW5j
b21pbmdWaWRlb1NvdXJjZU1hYy5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5oLgorICAgICAg
ICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VN
YWMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdWaWRlb1Nv
dXJjZU1hYzo6UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTWFjKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZU1hYzo6dmlkZW9TYW1wbGVBdmFpbGFibGUp
OgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU91dGdvaW5nVmlk
ZW9Tb3VyY2VNYWMuaDogQWRkZWQuCisKIDIwMTctMTAtMDUgIEZ1amlpIEhpcm9ub3JpICA8SGly
b25vcmkuRnVqaWlAc29ueS5jb20+CiAKICAgICAgICAgW1dpbkNhaXJvXSBGaXggYnVpbGQgYWZ0
ZXIgQnVnIDE2Nzk1NgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQg
Yi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCA3ZjIyZTUxNmY5N2EyOTdkZDU0
OGU3NWNlZTA4NzdhMWM1NjI1ZjFhLi5hMmMyZWE5ZjAwMzhkZDdlNDU4Y2MwMzBlYjBhZTEyY2Nj
MzQ5ZjljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9T
b3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMjU0OCw5ICsyNTQ4LDExIEBAIHNldChX
ZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291
cmNlU3VwcG9ydGVkQ29uc3RyYWludHMuY3BwCiAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vUlRD
SWNlQ2FuZGlkYXRlRGVzY3JpcHRvci5jcHAKICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SVENT
ZXNzaW9uRGVzY3JpcHRpb25EZXNjcmlwdG9yLmNwcAorICAgIHBsYXRmb3JtL21lZGlhc3RyZWFt
L1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5jcHAKICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVh
bS9SZWFsdGltZU1lZGlhU291cmNlLmNwcAogICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0
aW1lTWVkaWFTb3VyY2VDZW50ZXIuY3BwCiAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRp
bWVNZWRpYVNvdXJjZVNldHRpbmdzLmNwcAorICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0
aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5jcHAKIAogICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL2xp
YndlYnJ0Yy9MaWJXZWJSVENQcm92aWRlci5jcHAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDZmODY4OGJjM2Q5ZDZlNDFlODJk
ZTY2NjhiMmI5ZmM1YmIwOGQzN2MuLjM4OTY5MGYzZGQzNmE2OTQ2YzYxZmMzMjVkOTRmNmE5YzMx
MDM4MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKQEAgLTI3NTYsNyArMjc1Niw5IEBACiAJCTVDRDlGNTY3MUFBMEY3NDIwMERBNDVG
RiAvKiBERkFCeXRlY29kZUNvbXBpbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1QzM5MzA1RjFBQTBGNkE5MDAyOUM4MTYgLyogREZBQnl0ZWNvZGVD
b21waWxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTVDRDlGNTY4MUFBMEY3NDYwMERBNDVGRiAvKiBERkFCeXRlY29kZUludGVycHJldGVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzM5MzA2MTFB
QTBGNkE5MDAyOUM4MTYgLyogREZBQnl0ZWNvZGVJbnRlcnByZXRlci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTVDREQ4MzNEMUU0MzI0RDkwMDYy
MUU5MiAvKiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNERDgzM0IxRTQzMjRCQjAwNjIxRTkyIC8q
IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5jcHAgKi87IH07CisJCTVDREQ4MzNEMUU0MzI0
RDkwMDYyMUI4MyAvKiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VDb2NvYS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0REODMzQjFFNDMyNEJC
MDA2MjFCODMgLyogUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlQ29jb2EuY3BwICovOyB9Owog
CQk1Q0REODMzRTFFNDMyNERDMDA2MjFFOTIgLyogUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDREQ4
MzM5MUU0MzI0QkIwMDYyMUU5MiAvKiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuY3BwICov
OyB9OworCQk1Q0REODMzRTFFNDMyNERDMDA2MjFFODMgLyogUmVhbHRpbWVJbmNvbWluZ1ZpZGVv
U291cmNlQ29jb2EuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNUNERDgzMzkxRTQzMjRCQjAwNjIxRTgzIC8qIFJlYWx0aW1lSW5jb21pbmdWaWRlb1Nv
dXJjZUNvY29hLmNwcCAqLzsgfTsKIAkJNUNERDgzNjQxRTQzMjVBMDAwNjIxRTkyIC8qIExpYldl
YlJUQ0RhdGFDaGFubmVsSGFuZGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1Q0REODMzRjFFNDMyNTNEMDA2MjFFOTIgLyogTGliV2ViUlRDRGF0
YUNoYW5uZWxIYW5kbGVyLmNwcCAqLzsgfTsKIAkJNUNERkE2QzgxQUE0RjJEQTAwRUE4NzQ2IC8q
IENvbnRlbnRFeHRlbnNpb25BY3Rpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1Q0RGQTZDNzFBQTRGMkRBMDBFQTg3NDYgLyogQ29udGVudEV4dGVu
c2lvbkFjdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk1Q0U1RDlBQjFEQjg5QTAzMDBDRTdBOEQgLyogSlNUZXh0RGVjb2Rlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0U1RDlBNzFEQjg5
OUZDMDBDRTdBOEQgLyogSlNUZXh0RGVjb2Rlci5jcHAgKi87IH07CkBAIC0xMDY5MSw4ICsxMDY5
MywxMiBAQAogCQk1Q0JDOERBQjFBQUEzMDIyMDBFMUM4MDMgLyogTWVkaWFBY2Nlc3NpYmlsaXR5
U29mdExpbmsuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFBY2Nlc3Np
YmlsaXR5U29mdExpbmsuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNERDgzMzkx
RTQzMjRCQjAwNjIxRTkyIC8qIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZWFsdGltZUluY29taW5nVmlkZW9Tb3Vy
Y2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Q0REODMzQTFFNDMyNEJCMDA2
MjFFOTIgLyogUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk1Q0REODMzOTFFNDMyNEJCMDA2MjFFODMgLyogUmVhbHRpbWVJ
bmNvbWluZ1ZpZGVvU291cmNlQ29jb2EuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlQ29jb2EuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk1Q0REODMzQTFFNDMyNEJCMDA2MjFFODMgLyogUmVhbHRpbWVJ
bmNvbWluZ1ZpZGVvU291cmNlQ29jb2EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlQ29jb2EuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNUNERDgzM0IxRTQzMjRCQjAwNjIxRTkyIC8qIFJlYWx0aW1lT3V0Z29pbmdW
aWRlb1NvdXJjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZWFs
dGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1Q0REODMzQzFFNDMyNEJCMDA2MjFFOTIgLyogUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlYWx0aW1lT3V0Z29pbmdWaWRl
b1NvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Q0REODMzQjFFNDMyNEJC
MDA2MjFCODMgLyogUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlQ29jb2EuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNl
Q29jb2EuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Q0REODMzQzFFNDMyNEJC
MDA2MjFCODMgLyogUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlQ29jb2EuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlQ29jb2Eu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNERDgzM0YxRTQzMjUzRDAwNjIxRTky
IC8qIExpYldlYlJUQ0RhdGFDaGFubmVsSGFuZGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBMaWJXZWJSVENEYXRhQ2hhbm5lbEhhbmRsZXIuY3BwOyBwYXRoID0g
bGlid2VicnRjL0xpYldlYlJUQ0RhdGFDaGFubmVsSGFuZGxlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTVDREQ4MzQwMUU0MzI1M0QwMDYyMUU5MiAvKiBMaWJXZWJSVENEYXRh
Q2hhbm5lbEhhbmRsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTGliV2Vi
UlRDRGF0YUNoYW5uZWxIYW5kbGVyLmg7IHBhdGggPSBsaWJ3ZWJydGMvTGliV2ViUlRDRGF0YUNo
YW5uZWxIYW5kbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDREZBNkM3MUFB
NEYyREEwMEVBODc0NiAvKiBDb250ZW50RXh0ZW5zaW9uQWN0aW9ucy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDb250ZW50RXh0ZW5zaW9uQWN0aW9ucy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMTY0OTcsNiArMTY1MDMsOCBAQAogCQkJCTA3RkZERTY2MTgx
QUVENDIwMDcyRDQwOSAvKiBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5jcHAgKi8sCiAJCQkJMDdG
RkRFNjcxODFBRUQ0MjAwNzJENDA5IC8qIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmggKi8sCiAJ
CQkJNUVCQjg5MzgxQzc3QkRBNDAwQzY1RDQxIC8qIFBlZXJNZWRpYURlc2NyaXB0aW9uLmggKi8s
CisJCQkJNUNERDgzMzkxRTQzMjRCQjAwNjIxRTkyIC8qIFJlYWx0aW1lSW5jb21pbmdWaWRlb1Nv
dXJjZS5jcHAgKi8sCisJCQkJNUNERDgzM0ExRTQzMjRCQjAwNjIxRTkyIC8qIFJlYWx0aW1lSW5j
b21pbmdWaWRlb1NvdXJjZS5oICovLAogCQkJCTRBNEY2NTZCMUFBOTk3RjEwMEUzOENERCAvKiBS
ZWFsdGltZU1lZGlhU291cmNlLmNwcCAqLywKIAkJCQk0QTRGNjU2QzFBQTk5N0YxMDBFMzhDREQg
LyogUmVhbHRpbWVNZWRpYVNvdXJjZS5oICovLAogCQkJCTRBNEY2NTZEMUFBOTk3RjEwMEUzOENE
RCAvKiBSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzLmggKi8sCkBAIC0xNjUwNiw2ICsx
NjUxNCw4IEBACiAJCQkJNEE0RjY1NkYxQUE5OTdGMTAwRTM4Q0REIC8qIFJlYWx0aW1lTWVkaWFT
b3VyY2VTZXR0aW5ncy5oICovLAogCQkJCTJFQzQxREUyMUMwNDEwQTMwMEQyOTRGRSAvKiBSZWFs
dGltZU1lZGlhU291cmNlU3VwcG9ydGVkQ29uc3RyYWludHMuY3BwICovLAogCQkJCTA3QzFDMEU0
MUJGQjYwRUQwMEJEMjI1NiAvKiBSZWFsdGltZU1lZGlhU291cmNlU3VwcG9ydGVkQ29uc3RyYWlu
dHMuaCAqLywKKwkJCQk1Q0REODMzQjFFNDMyNEJCMDA2MjFFOTIgLyogUmVhbHRpbWVPdXRnb2lu
Z1ZpZGVvU291cmNlLmNwcCAqLywKKwkJCQk1Q0REODMzQzFFNDMyNEJCMDA2MjFFOTIgLyogUmVh
bHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmggKi8sCiAJCQkJMzEzNTkxMEMxRTdERENCNjAwRjMw
NjMwIC8qIFJUQ0J1bmRsZVBvbGljeS5oICovLAogCQkJCTA3MjIxQkEyMTdDRjBBRDQwMDg0OEU1
MSAvKiBSVENEYXRhQ2hhbm5lbEhhbmRsZXIuaCAqLywKIAkJCQkwNzIyMUJBMzE3Q0YwQUQ0MDA4
NDhFNTEgLyogUlRDRGF0YUNoYW5uZWxIYW5kbGVyQ2xpZW50LmggKi8sCkBAIC0xNjU1NiwxNCAr
MTY1NjYsMTQgQEAKIAkJCQkwN0VFNzZFRTFCRUE2MTk4MDBGODkxMzMgLyogTW9ja1JlYWx0aW1l
VmlkZW9Tb3VyY2VNYWMubW0gKi8sCiAJCQkJNDExMDNBQUExRTM5NzkwQTAwNzY5RjAzIC8qIFJl
YWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZS5jcHAgKi8sCiAJCQkJNDExMDNBQTkxRTM5NzkwQTAw
NzY5RjAzIC8qIFJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZS5oICovLAotCQkJCTVDREQ4MzM5
MUU0MzI0QkIwMDYyMUU5MiAvKiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuY3BwICovLAot
CQkJCTVDREQ4MzNBMUU0MzI0QkIwMDYyMUU5MiAvKiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3Vy
Y2UuaCAqLywKKwkJCQk1Q0REODMzOTFFNDMyNEJCMDA2MjFFODMgLyogUmVhbHRpbWVJbmNvbWlu
Z1ZpZGVvU291cmNlQ29jb2EuY3BwICovLAorCQkJCTVDREQ4MzNBMUU0MzI0QkIwMDYyMUU4MyAv
KiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VDb2NvYS5oICovLAogCQkJCTRBMEZGQUEzMUFB
RjVFRjYwMDYyODAzQiAvKiBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTWFjLmNwcCAqLywKIAkJ
CQk0QTBGRkFBNDFBQUY1RUY2MDA2MjgwM0IgLyogUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck1h
Yy5oICovLAogCQkJCTQxMTAzQUE3MUUzOTc5MEEwMDc2OUYwMyAvKiBSZWFsdGltZU91dGdvaW5n
QXVkaW9Tb3VyY2UuY3BwICovLAogCQkJCTQxMTAzQUE4MUUzOTc5MEEwMDc2OUYwMyAvKiBSZWFs
dGltZU91dGdvaW5nQXVkaW9Tb3VyY2UuaCAqLywKLQkJCQk1Q0REODMzQjFFNDMyNEJCMDA2MjFF
OTIgLyogUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmNwcCAqLywKLQkJCQk1Q0REODMzQzFF
NDMyNEJCMDA2MjFFOTIgLyogUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmggKi8sCisJCQkJ
NUNERDgzM0IxRTQzMjRCQjAwNjIxQjgzIC8qIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUNv
Y29hLmNwcCAqLywKKwkJCQk1Q0REODMzQzFFNDMyNEJCMDA2MjFCODMgLyogUmVhbHRpbWVPdXRn
b2luZ1ZpZGVvU291cmNlQ29jb2EuaCAqLywKIAkJCQkwN0Q2MzczRTFCQjBCMTEzMDAyNTZDRTkg
LyogV2ViQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMuaCAqLywKIAkJCQkwN0Q2MzczRjFCQjBC
MTEzMDAyNTZDRTkgLyogV2ViQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMubW0gKi8sCiAJCQkp
OwpAQCAtMzM1ODMsNiArMzM1OTMsNyBAQAogCQkJCUZEMzE2MDNCMTJCMDI2NzYwMEMxQTM1OSAv
KiBSZWFsdGltZUFuYWx5c2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQxMTAzQUFFMUUzOTc5
MTAwMDc2OUYwMyAvKiBSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2UuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNUNERDgzM0UxRTQzMjREQzAwNjIxRTkyIC8qIFJlYWx0aW1lSW5jb21pbmdWaWRl
b1NvdXJjZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1Q0REODMzRTFFNDMyNERDMDA2MjFFODMg
LyogUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlQ29jb2EuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNEE0RjY1NzAxQUE5OTdGMTAwRTM4Q0REIC8qIFJlYWx0aW1lTWVkaWFTb3VyY2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNEEwRkZBQTExQUFGNUVBMjAwNjI4MDNCIC8qIFJlYWx0aW1lTWVk
aWFTb3VyY2VDZW50ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNEEwRkZBQTUxQUFGNUVGNjAw
NjI4MDNCIC8qIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJNYWMuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC0zMzU5MCw2ICszMzYwMSw3IEBACiAJCQkJMkVDNDFERTQxQzA0MTBBMzAwRDI5NEZFIC8q
IFJlYWx0aW1lTWVkaWFTb3VyY2VTdXBwb3J0ZWRDb25zdHJhaW50cy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk0MTEwM0FBQjFFMzk3OTEwMDA3NjlGMDMgLyogUmVhbHRpbWVPdXRnb2luZ0F1ZGlv
U291cmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDREQ4MzNEMUU0MzI0RDkwMDYyMUU5MiAv
KiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNUNE
RDgzM0QxRTQzMjREOTAwNjIxQjgzIC8qIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUNvY29h
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZENDVBOTVBMTc1RDQxNzEwMEMyMUVDOCAvKiBSZWN0
YW5nbGVTaGFwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0FCNDE4MTEzRTM1NkU4MDBEOEFB
RjMgLyogUmVnaW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1NzhGNDQwMURFMEI2MzQwMDNE
RkM2QSAvKiBSZWplY3RlZFByb21pc2VUcmFja2VyLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVJbmNvbWlu
Z1ZpZGVvU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1Jl
YWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjU5YjQ2YmJmNDVkOGU2
YzE0Njg0MDQ5YWNhYWRjN2ZiMGJiN2E0YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5jcHAK
QEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisg
KiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tIHRoaXMKKyAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJl
YWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5oIgorCisjaWYgVVNFKExJQldFQlJUQykKKworI2lu
Y2x1ZGUgIkxvZ2dpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWFsdGltZUluY29t
aW5nVmlkZW9Tb3VyY2U6OlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZShydGM6OnNjb3BlZF9y
ZWZwdHI8d2VicnRjOjpWaWRlb1RyYWNrSW50ZXJmYWNlPiYmIHZpZGVvVHJhY2ssIFN0cmluZyYm
IHZpZGVvVHJhY2tJZCkKKyAgICA6IFJlYWx0aW1lTWVkaWFTb3VyY2UoV1RGTW92ZSh2aWRlb1Ry
YWNrSWQpLCBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpWaWRlbywgU3RyaW5nKCkpCisgICAg
LCBtX3ZpZGVvVHJhY2soV1RGTW92ZSh2aWRlb1RyYWNrKSkKK3sKKyAgICBtX2N1cnJlbnRTZXR0
aW5ncy5zZXRXaWR0aCg2NDApOworICAgIG1fY3VycmVudFNldHRpbmdzLnNldEhlaWdodCg0ODAp
OworICAgIG5vdGlmeU11dGVkQ2hhbmdlKCFtX3ZpZGVvVHJhY2spOworfQorCit2b2lkIFJlYWx0
aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6c3RhcnRQcm9kdWNpbmdEYXRhKCkKK3sKKyAgICBpZiAo
bV92aWRlb1RyYWNrKQorICAgICAgICBtX3ZpZGVvVHJhY2stPkFkZE9yVXBkYXRlU2luayh0aGlz
LCBydGM6OlZpZGVvU2lua1dhbnRzKCkpOworfQorCit2b2lkIFJlYWx0aW1lSW5jb21pbmdWaWRl
b1NvdXJjZTo6c2V0U291cmNlVHJhY2socnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9U
cmFja0ludGVyZmFjZT4mJiB0cmFjaykKK3sKKyAgICBBU1NFUlQoIW1fdmlkZW9UcmFjayk7Cisg
ICAgQVNTRVJUKHRyYWNrKTsKKworICAgIG1fdmlkZW9UcmFjayA9IFdURk1vdmUodHJhY2spOwor
ICAgIG5vdGlmeU11dGVkQ2hhbmdlKCFtX3ZpZGVvVHJhY2spOworICAgIGlmIChpc1Byb2R1Y2lu
Z0RhdGEoKSkKKyAgICAgICAgbV92aWRlb1RyYWNrLT5BZGRPclVwZGF0ZVNpbmsodGhpcywgcnRj
OjpWaWRlb1NpbmtXYW50cygpKTsKK30KKwordm9pZCBSZWFsdGltZUluY29taW5nVmlkZW9Tb3Vy
Y2U6OnN0b3BQcm9kdWNpbmdEYXRhKCkKK3sKKyAgICBpZiAobV92aWRlb1RyYWNrKQorICAgICAg
ICBtX3ZpZGVvVHJhY2stPlJlbW92ZVNpbmsodGhpcyk7Cit9CisKK2NvbnN0IFJlYWx0aW1lTWVk
aWFTb3VyY2VDYXBhYmlsaXRpZXMmIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6Y2FwYWJp
bGl0aWVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxp
dGllczo6ZW1wdHlDYXBhYmlsaXRpZXMoKTsKK30KKworY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJj
ZVNldHRpbmdzJiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6OnNldHRpbmdzKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9jdXJyZW50U2V0dGluZ3M7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIFVTRShMSUJXRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lSW5jb21pbmdWaWRl
b1NvdXJjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE1YmY1MDJmM2UyNWVhYjBjZDZhOTNlZjJiNGYwM2E0ZTBm
YTJkMTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuaApAQCAtMCwwICsxLDcxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogICAgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICog
ICAgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBFcmljc3NvbiBub3Ig
dGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICAgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2lmIFVTRShMSUJXRUJSVEMpCisKKyNpbmNsdWRlICJMaWJXZWJSVENN
YWNyb3MuaCIKKyNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNlLmgiCisjaW5jbHVkZSA8d2Vi
cnRjL2FwaS9tZWRpYXN0cmVhbWludGVyZmFjZS5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDYXB0dXJlRGV2aWNlOworCitjbGFz
cyBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UgOiBwdWJsaWMgUmVhbHRpbWVNZWRpYVNvdXJj
ZSwgcHJpdmF0ZSBydGM6OlZpZGVvU2lua0ludGVyZmFjZTx3ZWJydGM6OlZpZGVvRnJhbWU+IHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZT4gY3Jl
YXRlKHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvVHJhY2tJbnRlcmZhY2U+JiYsIFN0
cmluZyYmKTsKKyAgICB+UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlKCkgeyBzdG9wUHJvZHVj
aW5nRGF0YSgpOyB9CisKKyAgICB2b2lkIHNldFNvdXJjZVRyYWNrKHJ0Yzo6c2NvcGVkX3JlZnB0
cjx3ZWJydGM6OlZpZGVvVHJhY2tJbnRlcmZhY2U+JiYpOworCitwcm90ZWN0ZWQ6CisgICAgUmVh
bHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlKHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVv
VHJhY2tJbnRlcmZhY2U+JiYsIFN0cmluZyYmKTsKKworICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VT
ZXR0aW5ncyBtX2N1cnJlbnRTZXR0aW5nczsKKworcHJpdmF0ZToKKyAgICAvLyBSZWFsdGltZU1l
ZGlhU291cmNlIEFQSQorICAgIHZvaWQgc3RhcnRQcm9kdWNpbmdEYXRhKCkgZmluYWw7CisgICAg
dm9pZCBzdG9wUHJvZHVjaW5nRGF0YSgpICBmaW5hbDsKKworICAgIGNvbnN0IFJlYWx0aW1lTWVk
aWFTb3VyY2VDYXBhYmlsaXRpZXMmIGNhcGFiaWxpdGllcygpIGNvbnN0IGZpbmFsOworICAgIGNv
bnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyYgc2V0dGluZ3MoKSBjb25zdCBmaW5hbDsK
KworICAgIGJvb2wgYXBwbHlTaXplKGNvbnN0IEludFNpemUmKSBmaW5hbCB7IHJldHVybiB0cnVl
OyB9CisKKyAgICBydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb1RyYWNrSW50ZXJmYWNl
PiBtX3ZpZGVvVHJhY2s7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBVU0UoTElCV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMzU5ZGMxMTRhNTVlZjQ5MzQwOTA0M2E2ZmZkNjMxMjFlMWRhMmRiNwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1l
T3V0Z29pbmdWaWRlb1NvdXJjZS5jcHAKQEAgLTAsMCArMSwxODggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTcgQXBwbGUgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkLCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIHJlcXVpcmVkIHRvIGJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gbm9yIHRoZSBuYW1lcyBvZgor
ICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmgiCisKKyNpZiBVU0UoTElCV0VCUlRDKQor
CisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgPHdlYnJ0Yy9hcGkvdmlkZW8vaTQyMF9i
dWZmZXIuaD4KKyNpbmNsdWRlIDx3ZWJydGMvY29tbW9uX3ZpZGVvL2xpYnl1di9pbmNsdWRlL3dl
YnJ0Y19saWJ5dXYuaD4KKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKyNpbmNsdWRlIDx3
dGYvTWFpblRocmVhZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlYWx0aW1lT3V0Z29p
bmdWaWRlb1NvdXJjZTo6UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlKFJlZjxNZWRpYVN0cmVh
bVRyYWNrUHJpdmF0ZT4mJiB2aWRlb1NvdXJjZSkKKyAgICA6IG1fdmlkZW9Tb3VyY2UoV1RGTW92
ZSh2aWRlb1NvdXJjZSkpCisgICAgLCBtX2JsYWNrRnJhbWVUaW1lcigqdGhpcywgJlJlYWx0aW1l
T3V0Z29pbmdWaWRlb1NvdXJjZTo6c2VuZE9uZUJsYWNrRnJhbWUpCit7CisgICAgbV92aWRlb1Nv
dXJjZS0+YWRkT2JzZXJ2ZXIoKnRoaXMpOworICAgIGluaXRpYWxpemVGcm9tU291cmNlKCk7Cit9
CisKK2Jvb2wgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpzZXRTb3VyY2UoUmVmPE1lZGlh
U3RyZWFtVHJhY2tQcml2YXRlPiYmIG5ld1NvdXJjZSkKK3sKKyAgICBpZiAoIW1faW5pdGlhbFNl
dHRpbmdzKQorICAgICAgICBtX2luaXRpYWxTZXR0aW5ncyA9IG1fdmlkZW9Tb3VyY2UtPnNvdXJj
ZSgpLnNldHRpbmdzKCk7CisKKyAgICBtX3ZpZGVvU291cmNlLT5yZW1vdmVPYnNlcnZlcigqdGhp
cyk7CisgICAgbV92aWRlb1NvdXJjZSA9IFdURk1vdmUobmV3U291cmNlKTsKKyAgICBtX3ZpZGVv
U291cmNlLT5hZGRPYnNlcnZlcigqdGhpcyk7CisKKyAgICBpbml0aWFsaXplRnJvbVNvdXJjZSgp
OworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291
cmNlOjpzdG9wKCkKK3sKKyAgICBtX3ZpZGVvU291cmNlLT5yZW1vdmVPYnNlcnZlcigqdGhpcyk7
CisgICAgbV9ibGFja0ZyYW1lVGltZXIuc3RvcCgpOworICAgIG1faXNTdG9wcGVkID0gdHJ1ZTsK
K30KKwordm9pZCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnVwZGF0ZUJsYWNrRnJhbWVz
U2VuZGluZygpCit7CisgICAgaWYgKCFtX211dGVkICYmIG1fZW5hYmxlZCkgeworICAgICAgICBp
ZiAobV9ibGFja0ZyYW1lVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgICAgIG1fYmxhY2tGcmFt
ZVRpbWVyLnN0b3AoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNlbmRCbGFja0Zy
YW1lc0lmTmVlZGVkKCk7Cit9CisKK3ZvaWQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpz
b3VyY2VNdXRlZENoYW5nZWQoKQoreworICAgIEFTU0VSVChtX211dGVkICE9IG1fdmlkZW9Tb3Vy
Y2UtPm11dGVkKCkpOworCisgICAgbV9tdXRlZCA9IG1fdmlkZW9Tb3VyY2UtPm11dGVkKCk7CisK
KyAgICB1cGRhdGVCbGFja0ZyYW1lc1NlbmRpbmcoKTsKK30KKwordm9pZCBSZWFsdGltZU91dGdv
aW5nVmlkZW9Tb3VyY2U6OnNvdXJjZUVuYWJsZWRDaGFuZ2VkKCkKK3sKKyAgICBBU1NFUlQobV9l
bmFibGVkICE9IG1fdmlkZW9Tb3VyY2UtPmVuYWJsZWQoKSk7CisKKyAgICBtX2VuYWJsZWQgPSBt
X3ZpZGVvU291cmNlLT5lbmFibGVkKCk7CisKKyAgICB1cGRhdGVCbGFja0ZyYW1lc1NlbmRpbmco
KTsKK30KKwordm9pZCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OmluaXRpYWxpemVGcm9t
U291cmNlKCkKK3sKKyAgICBjb25zdCBhdXRvJiBzZXR0aW5ncyA9IG1fdmlkZW9Tb3VyY2UtPnNv
dXJjZSgpLnNldHRpbmdzKCk7CisgICAgbV93aWR0aCA9IHNldHRpbmdzLndpZHRoKCk7CisgICAg
bV9oZWlnaHQgPSBzZXR0aW5ncy5oZWlnaHQoKTsKKworICAgIG1fbXV0ZWQgPSBtX3ZpZGVvU291
cmNlLT5tdXRlZCgpOworICAgIG1fZW5hYmxlZCA9IG1fdmlkZW9Tb3VyY2UtPmVuYWJsZWQoKTsK
KworICAgIHVwZGF0ZUJsYWNrRnJhbWVzU2VuZGluZygpOworfQorCit2b2lkIFJlYWx0aW1lT3V0
Z29pbmdWaWRlb1NvdXJjZTo6QWRkT3JVcGRhdGVTaW5rKHJ0Yzo6VmlkZW9TaW5rSW50ZXJmYWNl
PHdlYnJ0Yzo6VmlkZW9GcmFtZT4qIHNpbmssIGNvbnN0IHJ0Yzo6VmlkZW9TaW5rV2FudHMmIHNp
bmtXYW50cykKK3sKKyAgICBBU1NFUlQoIXNpbmtXYW50cy5ibGFja19mcmFtZXMpOworCisgICAg
aWYgKHNpbmtXYW50cy5yb3RhdGlvbl9hcHBsaWVkKQorICAgICAgICBtX3Nob3VsZEFwcGx5Um90
YXRpb24gPSB0cnVlOworCisgICAgaWYgKCFtX3NpbmtzLmNvbnRhaW5zKHNpbmspKQorICAgICAg
ICBtX3NpbmtzLmFwcGVuZChzaW5rKTsKKworICAgIGNhbGxPbk1haW5UaHJlYWQoW3Byb3RlY3Rl
ZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0oKSB7CisgICAgICAgIHByb3RlY3RlZFRoaXMtPnNlbmRC
bGFja0ZyYW1lc0lmTmVlZGVkKCk7CisgICAgfSk7Cit9CisKK3ZvaWQgUmVhbHRpbWVPdXRnb2lu
Z1ZpZGVvU291cmNlOjpSZW1vdmVTaW5rKHJ0Yzo6VmlkZW9TaW5rSW50ZXJmYWNlPHdlYnJ0Yzo6
VmlkZW9GcmFtZT4qIHNpbmspCit7CisgICAgbV9zaW5rcy5yZW1vdmVGaXJzdChzaW5rKTsKKwor
ICAgIGlmIChtX3NpbmtzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FsbE9uTWFp
blRocmVhZChbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSgpIHsKKyAgICAgICAgaWYg
KHByb3RlY3RlZFRoaXMtPm1fYmxhY2tGcmFtZVRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgICAg
ICBwcm90ZWN0ZWRUaGlzLT5tX2JsYWNrRnJhbWVUaW1lci5zdG9wKCk7CisgICAgfSk7Cit9CisK
K3ZvaWQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpzZW5kQmxhY2tGcmFtZXNJZk5lZWRl
ZCgpCit7CisgICAgaWYgKG1fYmxhY2tGcmFtZVRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmICghbV9zaW5rcy5zaXplKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmICghbV9tdXRlZCAmJiBtX2VuYWJsZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICgh
bV93aWR0aCB8fCAhbV9oZWlnaHQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9ibGFj
a0ZyYW1lKSB7CisgICAgICAgIGF1dG8gd2lkdGggPSBtX3dpZHRoOworICAgICAgICBhdXRvIGhl
aWdodCA9IG1faGVpZ2h0OworICAgICAgICBpZiAobV9zaG91bGRBcHBseVJvdGF0aW9uICYmICht
X2N1cnJlbnRSb3RhdGlvbiA9PSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzAgfHwgbV9jdXJyZW50
Um90YXRpb24gPT0gd2VicnRjOjprVmlkZW9Sb3RhdGlvbl85MCkpCisgICAgICAgICAgICBzdGQ6
OnN3YXAod2lkdGgsIGhlaWdodCk7CisgICAgICAgIGF1dG8gZnJhbWUgPSBtX2J1ZmZlclBvb2wu
Q3JlYXRlQnVmZmVyKHdpZHRoLCBoZWlnaHQpOworICAgICAgICBBU1NFUlQoZnJhbWUpOworICAg
ICAgICBpZiAoIWZyYW1lKSB7CisgICAgICAgICAgICBSRUxFQVNFX0xPRyhXZWJSVEMsICJSZWFs
dGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnNlbmRCbGFja0ZyYW1lc0lmTmVlZGVkIHVuYWJsZSB0
byBzZW5kIGJsYWNrIGZyYW1lcyIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIHdlYnJ0Yzo6STQyMEJ1ZmZlcjo6U2V0QmxhY2soZnJhbWUuZ2V0KCkpOworICAgICAg
ICBtX2JsYWNrRnJhbWUgPSBXVEZNb3ZlKGZyYW1lKTsKKyAgICB9CisgICAgc2VuZE9uZUJsYWNr
RnJhbWUoKTsKKyAgICBtX2JsYWNrRnJhbWVUaW1lci5zdGFydFJlcGVhdGluZygxX3MpOworfQor
Cit2b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6c2VuZE9uZUJsYWNrRnJhbWUoKQor
eworICAgIFJFTEVBU0VfTE9HKE1lZGlhU3RyZWFtLCAiUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291
cmNlOjpzZW5kT25lQmxhY2tGcmFtZSIpOworICAgIHNlbmRGcmFtZShydGM6OnNjb3BlZF9yZWZw
dHI8d2VicnRjOjpWaWRlb0ZyYW1lQnVmZmVyPihtX2JsYWNrRnJhbWUpKTsKK30KKwordm9pZCBS
ZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnNlbmRGcmFtZShydGM6OnNjb3BlZF9yZWZwdHI8
d2VicnRjOjpWaWRlb0ZyYW1lQnVmZmVyPiYmIGJ1ZmZlcikKK3sKKyAgICBpbnQ2NF90IHRpbWVz
dGFtcE1pY3JvU2Vjb25kcyA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZU1TKCkgKiAxMDAw
OworICAgIHdlYnJ0Yzo6VmlkZW9GcmFtZSBmcmFtZShidWZmZXIsIG1fc2hvdWxkQXBwbHlSb3Rh
dGlvbiA/IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMCA6IG1fY3VycmVudFJvdGF0aW9uLCB0aW1l
c3RhbXBNaWNyb1NlY29uZHMpOworICAgIGZvciAoYXV0byogc2luayA6IG1fc2lua3MpCisgICAg
ICAgIHNpbmstPk9uRnJhbWUoZnJhbWUpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBVU0UoTElCV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2Uu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi45NjI2MWM0Yjc2NjAyMDkxN2NkMWU0OWUwOGRlZDI3MzhlM2VlMjM4Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVh
bHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmgKQEAgLTAsMCArMSwxMTYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkLCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIHJlcXVpcmVkIHRvIGJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShM
SUJXRUJSVEMpCisKKyNpbmNsdWRlICJMaWJXZWJSVENNYWNyb3MuaCIKKyNpbmNsdWRlICJNZWRp
YVN0cmVhbVRyYWNrUHJpdmF0ZS5oIgorI2luY2x1ZGUgPFRpbWVyLmg+CisjaW5jbHVkZSA8d2Vi
cnRjL2FwaS9tZWRpYXN0cmVhbWludGVyZmFjZS5oPgorI2luY2x1ZGUgPHdlYnJ0Yy9iYXNlL29w
dGlvbmFsLmg+CisjaW5jbHVkZSA8d2VicnRjL2NvbW1vbl92aWRlby9pbmNsdWRlL2k0MjBfYnVm
ZmVyX3Bvb2wuaD4KKyNpbmNsdWRlIDx3ZWJydGMvbWVkaWEvYmFzZS92aWRlb3NpbmtpbnRlcmZh
Y2UuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2Fm
ZVJlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSZWFsdGltZU91
dGdvaW5nVmlkZW9Tb3VyY2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8UmVhbHRpbWVP
dXRnb2luZ1ZpZGVvU291cmNlPiwgcHVibGljIHdlYnJ0Yzo6VmlkZW9UcmFja1NvdXJjZUludGVy
ZmFjZSwgcHJpdmF0ZSBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6T2JzZXJ2ZXIgeworcHVibGlj
OgorICAgIHN0YXRpYyBSZWY8UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlPiBjcmVhdGUoUmVm
PE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiYmIHZpZGVvU291cmNlKTsKKyAgICB+UmVhbHRpbWVP
dXRnb2luZ1ZpZGVvU291cmNlKCkgeyBzdG9wKCk7IH0KKworICAgIHZvaWQgc3RvcCgpOworICAg
IGJvb2wgc2V0U291cmNlKFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4mJik7CisgICAgTWVk
aWFTdHJlYW1UcmFja1ByaXZhdGUmIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmlkZW9Tb3Vy
Y2UuZ2V0KCk7IH0KKworICAgIGludCBBZGRSZWYoKSBjb25zdCBmaW5hbCB7IHJlZigpOyByZXR1
cm4gcmVmQ291bnQoKTsgfQorICAgIGludCBSZWxlYXNlKCkgY29uc3QgZmluYWwgeyBkZXJlZigp
OyByZXR1cm4gcmVmQ291bnQoKTsgfQorCisgICAgdm9pZCBzZXRBcHBseVJvdGF0aW9uKGJvb2wg
c2hvdWxkQXBwbHlSb3RhdGlvbikgeyBtX3Nob3VsZEFwcGx5Um90YXRpb24gPSBzaG91bGRBcHBs
eVJvdGF0aW9uOyB9CisKK3Byb3RlY3RlZDoKKyAgICBleHBsaWNpdCBSZWFsdGltZU91dGdvaW5n
VmlkZW9Tb3VyY2UoUmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiYmKTsKKworICAgIHZvaWQg
c2VuZEZyYW1lKHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvRnJhbWVCdWZmZXI+JiYp
OworCisgICAgVmVjdG9yPHJ0Yzo6VmlkZW9TaW5rSW50ZXJmYWNlPHdlYnJ0Yzo6VmlkZW9GcmFt
ZT4qPiBtX3NpbmtzOworICAgIHdlYnJ0Yzo6STQyMEJ1ZmZlclBvb2wgbV9idWZmZXJQb29sOwor
CisgICAgYm9vbCBtX2VuYWJsZWQgeyB0cnVlIH07CisgICAgYm9vbCBtX211dGVkIHsgZmFsc2Ug
fTsKKyAgICB1aW50MzJfdCBtX3dpZHRoIHsgMCB9OworICAgIHVpbnQzMl90IG1faGVpZ2h0IHsg
MCB9OworICAgIGJvb2wgbV9zaG91bGRBcHBseVJvdGF0aW9uIHsgZmFsc2UgfTsKKyAgICB3ZWJy
dGM6OlZpZGVvUm90YXRpb24gbV9jdXJyZW50Um90YXRpb24geyB3ZWJydGM6OmtWaWRlb1JvdGF0
aW9uXzAgfTsKKworcHJpdmF0ZToKKyAgICB2b2lkIHNlbmRCbGFja0ZyYW1lc0lmTmVlZGVkKCk7
CisgICAgdm9pZCBzZW5kT25lQmxhY2tGcmFtZSgpOworICAgIHZvaWQgaW5pdGlhbGl6ZUZyb21T
b3VyY2UoKTsKKyAgICB2b2lkIHVwZGF0ZUJsYWNrRnJhbWVzU2VuZGluZygpOworCisgICAgLy8g
Tm90aWZpZXIgQVBJCisgICAgdm9pZCBSZWdpc3Rlck9ic2VydmVyKHdlYnJ0Yzo6T2JzZXJ2ZXJJ
bnRlcmZhY2UqKSBmaW5hbCB7IH0KKyAgICB2b2lkIFVucmVnaXN0ZXJPYnNlcnZlcih3ZWJydGM6
Ok9ic2VydmVySW50ZXJmYWNlKikgZmluYWwgeyB9CisKKyAgICAvLyBWaWRlb1RyYWNrU291cmNl
SW50ZXJmYWNlIEFQSQorICAgIGJvb2wgaXNfc2NyZWVuY2FzdCgpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIGZhbHNlOyB9CisgICAgcnRjOjpPcHRpb25hbDxib29sPiBuZWVkc19kZW5vaXNpbmcoKSBj
b25zdCBmaW5hbCB7IHJldHVybiBydGM6Ok9wdGlvbmFsPGJvb2w+KCk7IH0KKyAgICBib29sIEdl
dFN0YXRzKFN0YXRzKikgZmluYWwgeyByZXR1cm4gZmFsc2U7IH07CisKKyAgICAvLyBNZWRpYVNv
dXJjZUludGVyZmFjZSBBUEkKKyAgICBTb3VyY2VTdGF0ZSBzdGF0ZSgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIFNvdXJjZVN0YXRlKCk7IH0KKyAgICBib29sIHJlbW90ZSgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIHRydWU7IH0KKworICAgIC8vIHJ0Yzo6VmlkZW9Tb3VyY2VJbnRlcmZhY2U8d2VicnRj
OjpWaWRlb0ZyYW1lPiBBUEkKKyAgICB2b2lkIEFkZE9yVXBkYXRlU2luayhydGM6OlZpZGVvU2lu
a0ludGVyZmFjZTx3ZWJydGM6OlZpZGVvRnJhbWU+KiwgY29uc3QgcnRjOjpWaWRlb1NpbmtXYW50
cyYpIGZpbmFsOworICAgIHZvaWQgUmVtb3ZlU2luayhydGM6OlZpZGVvU2lua0ludGVyZmFjZTx3
ZWJydGM6OlZpZGVvRnJhbWU+KikgZmluYWw7CisKKyAgICB2b2lkIHNvdXJjZU11dGVkQ2hhbmdl
ZCgpOworICAgIHZvaWQgc291cmNlRW5hYmxlZENoYW5nZWQoKTsKKworICAgIC8vIE1lZGlhU3Ry
ZWFtVHJhY2tQcml2YXRlOjpPYnNlcnZlciBBUEkKKyAgICB2b2lkIHRyYWNrTXV0ZWRDaGFuZ2Vk
KE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJikgZmluYWwgeyBzb3VyY2VNdXRlZENoYW5nZWQoKTsg
fQorICAgIHZvaWQgdHJhY2tFbmFibGVkQ2hhbmdlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYp
IGZpbmFsIHsgc291cmNlRW5hYmxlZENoYW5nZWQoKTsgfQorICAgIHZvaWQgdHJhY2tTZXR0aW5n
c0NoYW5nZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmKSBmaW5hbCB7IGluaXRpYWxpemVGcm9t
U291cmNlKCk7IH0KKyAgICB2b2lkIHNhbXBsZUJ1ZmZlclVwZGF0ZWQoTWVkaWFTdHJlYW1UcmFj
a1ByaXZhdGUmLCBNZWRpYVNhbXBsZSYpIG92ZXJyaWRlIHsgfQorICAgIHZvaWQgdHJhY2tFbmRl
ZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYpIGZpbmFsIHsgfQorCisgICAgUmVmPE1lZGlhU3Ry
ZWFtVHJhY2tQcml2YXRlPiBtX3ZpZGVvU291cmNlOworICAgIHN0ZDo6b3B0aW9uYWw8UmVhbHRp
bWVNZWRpYVNvdXJjZVNldHRpbmdzPiBtX2luaXRpYWxTZXR0aW5nczsKKyAgICBib29sIG1faXNT
dG9wcGVkIHsgZmFsc2UgfTsKKyAgICBUaW1lciBtX2JsYWNrRnJhbWVUaW1lcjsKKyAgICBydGM6
OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb0ZyYW1lQnVmZmVyPiBtX2JsYWNrRnJhbWU7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoTElCV0VCUlRDKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0
aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9tYWMvUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggYzI2MThkNjk1Mjc2M2ZlN2Q3YzRiNmI4Y2U0ZjljZGMxODI3YTM3
MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291
cmNlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIwNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0
aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotICogICAgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmgiCi0KLSNp
ZiBVU0UoTElCV0VCUlRDKQotCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIk1lZGlh
U2FtcGxlQVZGT2JqQy5oIgotI2luY2x1ZGUgPHdlYnJ0Yy9zZGsvb2JqYy9GcmFtZXdvcmsvQ2xh
c3Nlcy9WaWRlby9jb3JldmlkZW9fZnJhbWVfYnVmZmVyLmg+Ci0KLSNpbmNsdWRlICJDb3JlTWVk
aWFTb2Z0TGluay5oIgotI2luY2x1ZGUgIkNvcmVWaWRlb1NvZnRMaW5rLmgiCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotUmVmPFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZT4gUmVhbHRpbWVJ
bmNvbWluZ1ZpZGVvU291cmNlOjpjcmVhdGUocnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6Vmlk
ZW9UcmFja0ludGVyZmFjZT4mJiB2aWRlb1RyYWNrLCBTdHJpbmcmJiB0cmFja0lkKQotewotICAg
IGF1dG8gc291cmNlID0gYWRvcHRSZWYoKm5ldyBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2Uo
V1RGTW92ZSh2aWRlb1RyYWNrKSwgV1RGTW92ZSh0cmFja0lkKSkpOwotICAgIHNvdXJjZS0+c3Rh
cnQoKTsKLSAgICByZXR1cm4gc291cmNlOwotfQotCi1SZWFsdGltZUluY29taW5nVmlkZW9Tb3Vy
Y2U6OlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZShydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRj
OjpWaWRlb1RyYWNrSW50ZXJmYWNlPiYmIHZpZGVvVHJhY2ssIFN0cmluZyYmIHZpZGVvVHJhY2tJ
ZCkKLSAgICA6IFJlYWx0aW1lTWVkaWFTb3VyY2UoV1RGTW92ZSh2aWRlb1RyYWNrSWQpLCBSZWFs
dGltZU1lZGlhU291cmNlOjpUeXBlOjpWaWRlbywgU3RyaW5nKCkpCi0gICAgLCBtX3ZpZGVvVHJh
Y2soV1RGTW92ZSh2aWRlb1RyYWNrKSkKLXsKLSAgICBtX2N1cnJlbnRTZXR0aW5ncy5zZXRXaWR0
aCg2NDApOwotICAgIG1fY3VycmVudFNldHRpbmdzLnNldEhlaWdodCg0ODApOwotICAgIG5vdGlm
eU11dGVkQ2hhbmdlKCFtX3ZpZGVvVHJhY2spOwotfQotCi12b2lkIFJlYWx0aW1lSW5jb21pbmdW
aWRlb1NvdXJjZTo6c3RhcnRQcm9kdWNpbmdEYXRhKCkKLXsKLSAgICBpZiAobV92aWRlb1RyYWNr
KQotICAgICAgICBtX3ZpZGVvVHJhY2stPkFkZE9yVXBkYXRlU2luayh0aGlzLCBydGM6OlZpZGVv
U2lua1dhbnRzKCkpOwotfQotCi12b2lkIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6c2V0
U291cmNlVHJhY2socnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9UcmFja0ludGVyZmFj
ZT4mJiB0cmFjaykKLXsKLSAgICBBU1NFUlQoIW1fdmlkZW9UcmFjayk7Ci0gICAgQVNTRVJUKHRy
YWNrKTsKLQotICAgIG1fdmlkZW9UcmFjayA9IFdURk1vdmUodHJhY2spOwotICAgIG5vdGlmeU11
dGVkQ2hhbmdlKCFtX3ZpZGVvVHJhY2spOwotICAgIGlmIChpc1Byb2R1Y2luZ0RhdGEoKSkKLSAg
ICAgICAgbV92aWRlb1RyYWNrLT5BZGRPclVwZGF0ZVNpbmsodGhpcywgcnRjOjpWaWRlb1NpbmtX
YW50cygpKTsKLX0KLQotdm9pZCBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6OnN0b3BQcm9k
dWNpbmdEYXRhKCkKLXsKLSAgICBpZiAobV92aWRlb1RyYWNrKQotICAgICAgICBtX3ZpZGVvVHJh
Y2stPlJlbW92ZVNpbmsodGhpcyk7Ci19Ci0KLUNWUGl4ZWxCdWZmZXJSZWYgUmVhbHRpbWVJbmNv
bWluZ1ZpZGVvU291cmNlOjpwaXhlbEJ1ZmZlckZyb21WaWRlb0ZyYW1lKGNvbnN0IHdlYnJ0Yzo6
VmlkZW9GcmFtZSYgZnJhbWUpCi17Ci0gICAgaWYgKG11dGVkKCkpIHsKLSAgICAgICAgaWYgKCFt
X2JsYWNrRnJhbWUgfHwgbV9ibGFja0ZyYW1lV2lkdGggIT0gZnJhbWUud2lkdGgoKSB8fCBtX2Js
YWNrRnJhbWVIZWlnaHQgIT0gZnJhbWUuaGVpZ2h0KCkpIHsKLSAgICAgICAgICAgIENWUGl4ZWxC
dWZmZXJSZWYgcGl4ZWxCdWZmZXIgPSBudWxscHRyOwotICAgICAgICAgICAgYXV0byBzdGF0dXMg
PSBDVlBpeGVsQnVmZmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGZyYW1lLndpZHRoKCks
IGZyYW1lLmhlaWdodCgpLCBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyOFBsYW5hciwgbnVs
bHB0ciwgJnBpeGVsQnVmZmVyKTsKLSAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoc3RhdHVzLCBz
dGF0dXMgPT0gbm9FcnIpOwotCi0gICAgICAgICAgICBtX2JsYWNrRnJhbWUgPSBwaXhlbEJ1ZmZl
cjsKLSAgICAgICAgICAgIG1fYmxhY2tGcmFtZVdpZHRoID0gZnJhbWUud2lkdGgoKTsKLSAgICAg
ICAgICAgIG1fYmxhY2tGcmFtZUhlaWdodCA9IGZyYW1lLmhlaWdodCgpOwotCi0gICAgICAgICAg
ICBzdGF0dXMgPSBDVlBpeGVsQnVmZmVyTG9ja0Jhc2VBZGRyZXNzKHBpeGVsQnVmZmVyLCAwKTsK
LSAgICAgICAgICAgIEFTU0VSVChzdGF0dXMgPT0gbm9FcnIpOwotICAgICAgICAgICAgdm9pZCog
ZGF0YSA9IENWUGl4ZWxCdWZmZXJHZXRCYXNlQWRkcmVzcyhwaXhlbEJ1ZmZlcik7Ci0gICAgICAg
ICAgICBzaXplX3QgeUxlbmd0aCA9IGZyYW1lLndpZHRoKCkgKiBmcmFtZS5oZWlnaHQoKTsKLSAg
ICAgICAgICAgIG1lbXNldChkYXRhLCAwLCB5TGVuZ3RoKTsKLSAgICAgICAgICAgIG1lbXNldChz
dGF0aWNfY2FzdDx1aW50OF90Kj4oZGF0YSkgKyB5TGVuZ3RoLCAxMjgsIHlMZW5ndGggLyAyKTsK
LQotICAgICAgICAgICAgc3RhdHVzID0gQ1ZQaXhlbEJ1ZmZlclVubG9ja0Jhc2VBZGRyZXNzKHBp
eGVsQnVmZmVyLCAwKTsKLSAgICAgICAgICAgIEFTU0VSVCghc3RhdHVzKTsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gbV9ibGFja0ZyYW1lLmdldCgpOwotICAgIH0KLSAgICBhdXRvIGJ1ZmZl
ciA9IGZyYW1lLnZpZGVvX2ZyYW1lX2J1ZmZlcigpOwotICAgIEFTU0VSVChidWZmZXItPnR5cGUo
KSA9PSB3ZWJydGM6OlZpZGVvRnJhbWVCdWZmZXI6OlR5cGU6OmtOYXRpdmUpOwotICAgIHJldHVy
biBzdGF0aWNfY2FzdDx3ZWJydGM6OkNvcmVWaWRlb0ZyYW1lQnVmZmVyJj4oKmJ1ZmZlcikucGl4
ZWxfYnVmZmVyKCk7Ci19Ci0KLXZvaWQgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlOjpPbkZy
YW1lKGNvbnN0IHdlYnJ0Yzo6VmlkZW9GcmFtZSYgZnJhbWUpCi17Ci0gICAgaWYgKCFpc1Byb2R1
Y2luZ0RhdGEoKSkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVE
Ci0gICAgaWYgKCEoKyttX251bWJlck9mRnJhbWVzICUgMzApKQotICAgICAgICBSRUxFQVNFX0xP
RyhNZWRpYVN0cmVhbSwgIlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6T25GcmFtZSAlenUg
ZnJhbWUiLCBtX251bWJlck9mRnJhbWVzKTsKLSNlbmRpZgotCi0gICAgYXV0byBwaXhlbEJ1ZmZl
ciA9IHBpeGVsQnVmZmVyRnJvbVZpZGVvRnJhbWUoZnJhbWUpOwotCi0gICAgLy8gRklYTUU6IENv
bnZlcnQgdGltaW5nIGluZm9ybWF0aW9uIGZyb20gVmlkZW9GcmFtZSB0byBDTVNhbXBsZVRpbWlu
Z0luZm8uCi0gICAgLy8gRm9yIHRoZSBtb21lbnQsIHdlIHdpbGwgcHJldGVuZCB0aGF0IGZyYW1l
cyBzaG91bGQgYmUgcmVuZGVyZWQgYXNhcC4KLSAgICBDTVNhbXBsZVRpbWluZ0luZm8gdGltaW5n
SW5mbzsKLSAgICB0aW1pbmdJbmZvLnByZXNlbnRhdGlvblRpbWVTdGFtcCA9IGtDTVRpbWVJbnZh
bGlkOwotICAgIHRpbWluZ0luZm8uZGVjb2RlVGltZVN0YW1wID0ga0NNVGltZUludmFsaWQ7Ci0g
ICAgdGltaW5nSW5mby5kdXJhdGlvbiA9IGtDTVRpbWVJbnZhbGlkOwotCi0gICAgQ01WaWRlb0Zv
cm1hdERlc2NyaXB0aW9uUmVmIGZvcm1hdERlc2NyaXB0aW9uOwotICAgIE9TU3RhdHVzIG9zdGF0
dXMgPSBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25DcmVhdGVGb3JJbWFnZUJ1ZmZlcihrQ0ZBbGxv
Y2F0b3JEZWZhdWx0LCAoQ1ZJbWFnZUJ1ZmZlclJlZilwaXhlbEJ1ZmZlciwgJmZvcm1hdERlc2Ny
aXB0aW9uKTsKLSAgICBpZiAob3N0YXR1cyAhPSBub0VycikgewotICAgICAgICBMT0dfRVJST1Io
IkZhaWxlZCB0byBpbml0aWFsaXplIENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbjogJWQiLCBzdGF0
aWNfY2FzdDxpbnQ+KG9zdGF0dXMpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIENN
U2FtcGxlQnVmZmVyUmVmIHNhbXBsZUJ1ZmZlcjsKLSAgICBvc3RhdHVzID0gQ01TYW1wbGVCdWZm
ZXJDcmVhdGVSZWFkeVdpdGhJbWFnZUJ1ZmZlcihrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAoQ1ZJbWFn
ZUJ1ZmZlclJlZilwaXhlbEJ1ZmZlciwgZm9ybWF0RGVzY3JpcHRpb24sICZ0aW1pbmdJbmZvLCAm
c2FtcGxlQnVmZmVyKTsKLSAgICBpZiAob3N0YXR1cyAhPSBub0VycikgewotICAgICAgICBMT0df
RVJST1IoIkZhaWxlZCB0byBjcmVhdGUgdGhlIHNhbXBsZSBidWZmZXI6ICVkIiwgc3RhdGljX2Nh
c3Q8aW50Pihvc3RhdHVzKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgQ0ZSZWxlYXNl
KGZvcm1hdERlc2NyaXB0aW9uKTsKLQotICAgIGF1dG8gc2FtcGxlID0gYWRvcHRDRihzYW1wbGVC
dWZmZXIpOwotCi0gICAgQ0ZBcnJheVJlZiBhdHRhY2htZW50c0FycmF5ID0gQ01TYW1wbGVCdWZm
ZXJHZXRTYW1wbGVBdHRhY2htZW50c0FycmF5KHNhbXBsZUJ1ZmZlciwgdHJ1ZSk7Ci0gICAgZm9y
IChDRkluZGV4IGkgPSAwOyBpIDwgQ0ZBcnJheUdldENvdW50KGF0dGFjaG1lbnRzQXJyYXkpOyAr
K2kpIHsKLSAgICAgICAgQ0ZNdXRhYmxlRGljdGlvbmFyeVJlZiBhdHRhY2htZW50cyA9IChDRk11
dGFibGVEaWN0aW9uYXJ5UmVmKUNGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoYXR0YWNobWVudHNBcnJh
eSwgaSk7Ci0gICAgICAgIENGRGljdGlvbmFyeVNldFZhbHVlKGF0dGFjaG1lbnRzLCBrQ01TYW1w
bGVBdHRhY2htZW50S2V5X0Rpc3BsYXlJbW1lZGlhdGVseSwga0NGQm9vbGVhblRydWUpOwotICAg
IH0KLQotICAgIHVuc2lnbmVkIHdpZHRoID0gZnJhbWUud2lkdGgoKTsKLSAgICB1bnNpZ25lZCBo
ZWlnaHQgPSBmcmFtZS5oZWlnaHQoKTsKLQotICAgIE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9u
IHJvdGF0aW9uOwotICAgIHN3aXRjaCAoZnJhbWUucm90YXRpb24oKSkgewotICAgIGNhc2Ugd2Vi
cnRjOjprVmlkZW9Sb3RhdGlvbl8wOgotICAgICAgICByb3RhdGlvbiA9IE1lZGlhU2FtcGxlOjpW
aWRlb1JvdGF0aW9uOjpOb25lOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIHdlYnJ0Yzo6a1Zp
ZGVvUm90YXRpb25fMTgwOgotICAgICAgICByb3RhdGlvbiA9IE1lZGlhU2FtcGxlOjpWaWRlb1Jv
dGF0aW9uOjpVcHNpZGVEb3duOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIHdlYnJ0Yzo6a1Zp
ZGVvUm90YXRpb25fOTA6Ci0gICAgICAgIHJvdGF0aW9uID0gTWVkaWFTYW1wbGU6OlZpZGVvUm90
YXRpb246OlJpZ2h0OwotICAgICAgICBzdGQ6OnN3YXAod2lkdGgsIGhlaWdodCk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2Ugd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8yNzA6Ci0gICAgICAgIHJv
dGF0aW9uID0gTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246OkxlZnQ7Ci0gICAgICAgIHN0ZDo6
c3dhcCh3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgUmVmUHRy
PFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZT4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKLSAgICBj
YWxsT25NYWluVGhyZWFkKFtwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwg
c2FtcGxlID0gV1RGTW92ZShzYW1wbGUpLCB3aWR0aCwgaGVpZ2h0LCByb3RhdGlvbl0gewotICAg
ICAgICBwcm90ZWN0ZWRUaGlzLT5wcm9jZXNzTmV3U2FtcGxlKHNhbXBsZS5nZXQoKSwgd2lkdGgs
IGhlaWdodCwgcm90YXRpb24pOwotICAgIH0pOwotfQotCi12b2lkIFJlYWx0aW1lSW5jb21pbmdW
aWRlb1NvdXJjZTo6cHJvY2Vzc05ld1NhbXBsZShDTVNhbXBsZUJ1ZmZlclJlZiBzYW1wbGUsIHVu
c2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9u
IHJvdGF0aW9uKQotewotICAgIG1fYnVmZmVyID0gc2FtcGxlOwotICAgIGlmICh3aWR0aCAhPSBt
X2N1cnJlbnRTZXR0aW5ncy53aWR0aCgpIHx8IGhlaWdodCAhPSBtX2N1cnJlbnRTZXR0aW5ncy5o
ZWlnaHQoKSkgewotICAgICAgICBtX2N1cnJlbnRTZXR0aW5ncy5zZXRXaWR0aCh3aWR0aCk7Ci0g
ICAgICAgIG1fY3VycmVudFNldHRpbmdzLnNldEhlaWdodChoZWlnaHQpOwotICAgICAgICBzZXR0
aW5nc0RpZENoYW5nZSgpOwotICAgIH0KLQotICAgIHZpZGVvU2FtcGxlQXZhaWxhYmxlKE1lZGlh
U2FtcGxlQVZGT2JqQzo6Y3JlYXRlKHNhbXBsZSwgcm90YXRpb24pKTsKLX0KLQotY29uc3QgUmVh
bHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcyYgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNl
OjpjYXBhYmlsaXRpZXMoKSBjb25zdAotewotICAgIHJldHVybiBSZWFsdGltZU1lZGlhU291cmNl
Q2FwYWJpbGl0aWVzOjplbXB0eUNhcGFiaWxpdGllcygpOwotfQotCi1jb25zdCBSZWFsdGltZU1l
ZGlhU291cmNlU2V0dGluZ3MmIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6c2V0dGluZ3Mo
KSBjb25zdAotewotICAgIHJldHVybiBtX2N1cnJlbnRTZXR0aW5nczsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKExJQldFQlJUQykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUluY29taW5nVmlk
ZW9Tb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFs
dGltZUluY29taW5nVmlkZW9Tb3VyY2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MWViN2MzNjRmZTMyMzIyMjJlYWI0ZjI1YjdiNDEwMGNjOTEwMjgwOS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmgKKysrIC9kZXYvbnVs
bApAQCAtMSw4NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgotICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0
aGUgbmFtZSBvZiBFcmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAq
ICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20gdGhpcwotICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIFVTRShMSUJXRUJSVEMp
Ci0KLSNpbmNsdWRlICJMaWJXZWJSVENNYWNyb3MuaCIKLSNpbmNsdWRlICJSZWFsdGltZU1lZGlh
U291cmNlLmgiCi0jaW5jbHVkZSA8d2VicnRjL2FwaS9tZWRpYXN0cmVhbWludGVyZmFjZS5oPgot
I2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotdXNpbmcgQ01TYW1wbGVCdWZmZXJSZWYgPSBz
dHJ1Y3Qgb3BhcXVlQ01TYW1wbGVCdWZmZXIqOwotdXNpbmcgQ1ZQaXhlbEJ1ZmZlclJlZiA9IHN0
cnVjdCBfX0NWQnVmZmVyKjsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBDYXB0dXJl
RGV2aWNlOwotCi1jbGFzcyBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UgZmluYWwgOiBwdWJs
aWMgUmVhbHRpbWVNZWRpYVNvdXJjZSwgcHJpdmF0ZSBydGM6OlZpZGVvU2lua0ludGVyZmFjZTx3
ZWJydGM6OlZpZGVvRnJhbWU+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFJlYWx0aW1lSW5j
b21pbmdWaWRlb1NvdXJjZT4gY3JlYXRlKHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVv
VHJhY2tJbnRlcmZhY2U+JiYsIFN0cmluZyYmKTsKLSAgICB+UmVhbHRpbWVJbmNvbWluZ1ZpZGVv
U291cmNlKCkgeyBzdG9wUHJvZHVjaW5nRGF0YSgpOyB9Ci0KLSAgICB2b2lkIHNldFNvdXJjZVRy
YWNrKHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvVHJhY2tJbnRlcmZhY2U+JiYpOwot
Ci1wcml2YXRlOgotICAgIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZShydGM6OnNjb3BlZF9y
ZWZwdHI8d2VicnRjOjpWaWRlb1RyYWNrSW50ZXJmYWNlPiYmLCBTdHJpbmcmJik7Ci0KLSAgICAv
LyBSZWFsdGltZU1lZGlhU291cmNlIEFQSQotICAgIHZvaWQgc3RhcnRQcm9kdWNpbmdEYXRhKCkg
ZmluYWw7Ci0gICAgdm9pZCBzdG9wUHJvZHVjaW5nRGF0YSgpICBmaW5hbDsKLQotICAgIGNvbnN0
IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMmIGNhcGFiaWxpdGllcygpIGNvbnN0IGZp
bmFsOwotICAgIGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyYgc2V0dGluZ3MoKSBj
b25zdCBmaW5hbDsKLQotICAgIHZvaWQgcHJvY2Vzc05ld1NhbXBsZShDTVNhbXBsZUJ1ZmZlclJl
ZiwgdW5zaWduZWQsIHVuc2lnbmVkLCBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbik7Ci0KLSAg
ICBib29sIGFwcGx5U2l6ZShjb25zdCBJbnRTaXplJikgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQot
Ci0gICAgLy8gcnRjOjpWaWRlb1NpbmtJbnRlcmZhY2UKLSAgICB2b2lkIE9uRnJhbWUoY29uc3Qg
d2VicnRjOjpWaWRlb0ZyYW1lJikgZmluYWw7Ci0KLSAgICBDVlBpeGVsQnVmZmVyUmVmIHBpeGVs
QnVmZmVyRnJvbVZpZGVvRnJhbWUoY29uc3Qgd2VicnRjOjpWaWRlb0ZyYW1lJik7Ci0KLSAgICBS
ZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MgbV9jdXJyZW50U2V0dGluZ3M7Ci0gICAgcnRjOjpz
Y29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9UcmFja0ludGVyZmFjZT4gbV92aWRlb1RyYWNrOwot
ICAgIFJldGFpblB0cjxDTVNhbXBsZUJ1ZmZlclJlZj4gbV9idWZmZXI7Ci0gICAgUmV0YWluUHRy
PENWUGl4ZWxCdWZmZXJSZWY+IG1fYmxhY2tGcmFtZTsKLSAgICBpbnQgbV9ibGFja0ZyYW1lV2lk
dGggeyAwIH07Ci0gICAgaW50IG1fYmxhY2tGcmFtZUhlaWdodCB7IDAgfTsKLSNpZiAhUkVMRUFT
RV9MT0dfRElTQUJMRUQKLSAgICBzaXplX3QgbV9udW1iZXJPZkZyYW1lcyB7IDAgfTsKLSNlbmRp
ZgotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKExJQldFQlJU
QykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9S
ZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VDb2NvYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlQ29jb2EuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmVlNGEwNzE0NGZkZjhmOWMwNjM3OWZkMTM4MDUyMGIzMDEzZjliNmMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMv
UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlQ29jb2EuY3BwCkBAIC0wLDAgKzEsMTY2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogICAgaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUNvY29hLmgiCisKKyNpZiBVU0UoTElC
V0VCUlRDKQorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIk1lZGlhU2FtcGxlQVZG
T2JqQy5oIgorI2luY2x1ZGUgPHdlYnJ0Yy9zZGsvb2JqYy9GcmFtZXdvcmsvQ2xhc3Nlcy9WaWRl
by9jb3JldmlkZW9fZnJhbWVfYnVmZmVyLmg+CisKKyNpbmNsdWRlICJDb3JlTWVkaWFTb2Z0TGlu
ay5oIgorI2luY2x1ZGUgIkNvcmVWaWRlb1NvZnRMaW5rLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworUmVmPFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZT4gUmVhbHRpbWVJbmNvbWluZ1Zp
ZGVvU291cmNlOjpjcmVhdGUocnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9UcmFja0lu
dGVyZmFjZT4mJiB2aWRlb1RyYWNrLCBTdHJpbmcmJiB0cmFja0lkKQoreworICAgIGF1dG8gc291
cmNlID0gYWRvcHRSZWYoKm5ldyBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VDb2NvYShXVEZN
b3ZlKHZpZGVvVHJhY2spLCBXVEZNb3ZlKHRyYWNrSWQpKSk7CisgICAgc291cmNlLT5zdGFydCgp
OworICAgIHJldHVybiBXVEZNb3ZlKHNvdXJjZSk7Cit9CisKK1JlYWx0aW1lSW5jb21pbmdWaWRl
b1NvdXJjZUNvY29hOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VDb2NvYShydGM6OnNjb3Bl
ZF9yZWZwdHI8d2VicnRjOjpWaWRlb1RyYWNrSW50ZXJmYWNlPiYmIHZpZGVvVHJhY2ssIFN0cmlu
ZyYmIHZpZGVvVHJhY2tJZCkKKyAgICA6IFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZShXVEZN
b3ZlKHZpZGVvVHJhY2spLCBXVEZNb3ZlKHZpZGVvVHJhY2tJZCkpCit7Cit9CisKK0NWUGl4ZWxC
dWZmZXJSZWYgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlQ29jb2E6OnBpeGVsQnVmZmVyRnJv
bVZpZGVvRnJhbWUoY29uc3Qgd2VicnRjOjpWaWRlb0ZyYW1lJiBmcmFtZSkKK3sKKyAgICBpZiAo
bXV0ZWQoKSkgeworICAgICAgICBpZiAoIW1fYmxhY2tGcmFtZSB8fCBtX2JsYWNrRnJhbWVXaWR0
aCAhPSBmcmFtZS53aWR0aCgpIHx8IG1fYmxhY2tGcmFtZUhlaWdodCAhPSBmcmFtZS5oZWlnaHQo
KSkgeworICAgICAgICAgICAgQ1ZQaXhlbEJ1ZmZlclJlZiBwaXhlbEJ1ZmZlciA9IG51bGxwdHI7
CisgICAgICAgICAgICBhdXRvIHN0YXR1cyA9IENWUGl4ZWxCdWZmZXJDcmVhdGUoa0NGQWxsb2Nh
dG9yRGVmYXVsdCwgZnJhbWUud2lkdGgoKSwgZnJhbWUuaGVpZ2h0KCksIGtDVlBpeGVsRm9ybWF0
VHlwZV80MjBZcENiQ3I4UGxhbmFyLCBudWxscHRyLCAmcGl4ZWxCdWZmZXIpOworICAgICAgICAg
ICAgQVNTRVJUX1VOVVNFRChzdGF0dXMsIHN0YXR1cyA9PSBub0Vycik7CisKKyAgICAgICAgICAg
IG1fYmxhY2tGcmFtZSA9IHBpeGVsQnVmZmVyOworICAgICAgICAgICAgbV9ibGFja0ZyYW1lV2lk
dGggPSBmcmFtZS53aWR0aCgpOworICAgICAgICAgICAgbV9ibGFja0ZyYW1lSGVpZ2h0ID0gZnJh
bWUuaGVpZ2h0KCk7CisKKyAgICAgICAgICAgIHN0YXR1cyA9IENWUGl4ZWxCdWZmZXJMb2NrQmFz
ZUFkZHJlc3MocGl4ZWxCdWZmZXIsIDApOworICAgICAgICAgICAgQVNTRVJUKHN0YXR1cyA9PSBu
b0Vycik7CisgICAgICAgICAgICB2b2lkKiBkYXRhID0gQ1ZQaXhlbEJ1ZmZlckdldEJhc2VBZGRy
ZXNzKHBpeGVsQnVmZmVyKTsKKyAgICAgICAgICAgIHNpemVfdCB5TGVuZ3RoID0gZnJhbWUud2lk
dGgoKSAqIGZyYW1lLmhlaWdodCgpOworICAgICAgICAgICAgbWVtc2V0KGRhdGEsIDAsIHlMZW5n
dGgpOworICAgICAgICAgICAgbWVtc2V0KHN0YXRpY19jYXN0PHVpbnQ4X3QqPihkYXRhKSArIHlM
ZW5ndGgsIDEyOCwgeUxlbmd0aCAvIDIpOworCisgICAgICAgICAgICBzdGF0dXMgPSBDVlBpeGVs
QnVmZmVyVW5sb2NrQmFzZUFkZHJlc3MocGl4ZWxCdWZmZXIsIDApOworICAgICAgICAgICAgQVNT
RVJUKCFzdGF0dXMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtX2JsYWNrRnJhbWUuZ2V0
KCk7CisgICAgfQorICAgIGF1dG8gYnVmZmVyID0gZnJhbWUudmlkZW9fZnJhbWVfYnVmZmVyKCk7
CisgICAgQVNTRVJUKGJ1ZmZlci0+dHlwZSgpID09IHdlYnJ0Yzo6VmlkZW9GcmFtZUJ1ZmZlcjo6
VHlwZTo6a05hdGl2ZSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHdlYnJ0Yzo6Q29yZVZpZGVv
RnJhbWVCdWZmZXImPigqYnVmZmVyKS5waXhlbF9idWZmZXIoKTsKK30KKwordm9pZCBSZWFsdGlt
ZUluY29taW5nVmlkZW9Tb3VyY2VDb2NvYTo6T25GcmFtZShjb25zdCB3ZWJydGM6OlZpZGVvRnJh
bWUmIGZyYW1lKQoreworICAgIGlmICghaXNQcm9kdWNpbmdEYXRhKCkpCisgICAgICAgIHJldHVy
bjsKKworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgIGlmICghKCsrbV9udW1iZXJPZkZy
YW1lcyAlIDMwKSkKKyAgICAgICAgUkVMRUFTRV9MT0coTWVkaWFTdHJlYW0sICJSZWFsdGltZUlu
Y29taW5nVmlkZW9Tb3VyY2VDb2NvYTo6T25GcmFtZSAlenUgZnJhbWUiLCBtX251bWJlck9mRnJh
bWVzKTsKKyNlbmRpZgorCisgICAgYXV0byBwaXhlbEJ1ZmZlciA9IHBpeGVsQnVmZmVyRnJvbVZp
ZGVvRnJhbWUoZnJhbWUpOworCisgICAgLy8gRklYTUU6IENvbnZlcnQgdGltaW5nIGluZm9ybWF0
aW9uIGZyb20gVmlkZW9GcmFtZSB0byBDTVNhbXBsZVRpbWluZ0luZm8uCisgICAgLy8gRm9yIHRo
ZSBtb21lbnQsIHdlIHdpbGwgcHJldGVuZCB0aGF0IGZyYW1lcyBzaG91bGQgYmUgcmVuZGVyZWQg
YXNhcC4KKyAgICBDTVNhbXBsZVRpbWluZ0luZm8gdGltaW5nSW5mbzsKKyAgICB0aW1pbmdJbmZv
LnByZXNlbnRhdGlvblRpbWVTdGFtcCA9IGtDTVRpbWVJbnZhbGlkOworICAgIHRpbWluZ0luZm8u
ZGVjb2RlVGltZVN0YW1wID0ga0NNVGltZUludmFsaWQ7CisgICAgdGltaW5nSW5mby5kdXJhdGlv
biA9IGtDTVRpbWVJbnZhbGlkOworCisgICAgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uUmVmIGZv
cm1hdERlc2NyaXB0aW9uOworICAgIE9TU3RhdHVzIG9zdGF0dXMgPSBDTVZpZGVvRm9ybWF0RGVz
Y3JpcHRpb25DcmVhdGVGb3JJbWFnZUJ1ZmZlcihrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAoQ1ZJbWFn
ZUJ1ZmZlclJlZilwaXhlbEJ1ZmZlciwgJmZvcm1hdERlc2NyaXB0aW9uKTsKKyAgICBpZiAob3N0
YXR1cyAhPSBub0VycikgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBpbml0aWFsaXpl
IENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbjogJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KG9zdGF0dXMp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIENNU2FtcGxlQnVmZmVyUmVmIHNhbXBs
ZUJ1ZmZlcjsKKyAgICBvc3RhdHVzID0gQ01TYW1wbGVCdWZmZXJDcmVhdGVSZWFkeVdpdGhJbWFn
ZUJ1ZmZlcihrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAoQ1ZJbWFnZUJ1ZmZlclJlZilwaXhlbEJ1ZmZl
ciwgZm9ybWF0RGVzY3JpcHRpb24sICZ0aW1pbmdJbmZvLCAmc2FtcGxlQnVmZmVyKTsKKyAgICBp
ZiAob3N0YXR1cyAhPSBub0VycikgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVh
dGUgdGhlIHNhbXBsZSBidWZmZXI6ICVkIiwgc3RhdGljX2Nhc3Q8aW50Pihvc3RhdHVzKSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQ0ZSZWxlYXNlKGZvcm1hdERlc2NyaXB0aW9uKTsK
KworICAgIGF1dG8gc2FtcGxlID0gYWRvcHRDRihzYW1wbGVCdWZmZXIpOworCisgICAgQ0ZBcnJh
eVJlZiBhdHRhY2htZW50c0FycmF5ID0gQ01TYW1wbGVCdWZmZXJHZXRTYW1wbGVBdHRhY2htZW50
c0FycmF5KHNhbXBsZUJ1ZmZlciwgdHJ1ZSk7CisgICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwg
Q0ZBcnJheUdldENvdW50KGF0dGFjaG1lbnRzQXJyYXkpOyArK2kpIHsKKyAgICAgICAgQ0ZNdXRh
YmxlRGljdGlvbmFyeVJlZiBhdHRhY2htZW50cyA9IChDRk11dGFibGVEaWN0aW9uYXJ5UmVmKUNG
QXJyYXlHZXRWYWx1ZUF0SW5kZXgoYXR0YWNobWVudHNBcnJheSwgaSk7CisgICAgICAgIENGRGlj
dGlvbmFyeVNldFZhbHVlKGF0dGFjaG1lbnRzLCBrQ01TYW1wbGVBdHRhY2htZW50S2V5X0Rpc3Bs
YXlJbW1lZGlhdGVseSwga0NGQm9vbGVhblRydWUpOworICAgIH0KKworICAgIHVuc2lnbmVkIHdp
ZHRoID0gZnJhbWUud2lkdGgoKTsKKyAgICB1bnNpZ25lZCBoZWlnaHQgPSBmcmFtZS5oZWlnaHQo
KTsKKworICAgIE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uIHJvdGF0aW9uOworICAgIHN3aXRj
aCAoZnJhbWUucm90YXRpb24oKSkgeworICAgIGNhc2Ugd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8w
OgorICAgICAgICByb3RhdGlvbiA9IE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpOb25lOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMTgwOgorICAg
ICAgICByb3RhdGlvbiA9IE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpVcHNpZGVEb3duOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fOTA6CisgICAg
ICAgIHJvdGF0aW9uID0gTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246OlJpZ2h0OworICAgICAg
ICBzdGQ6OnN3YXAod2lkdGgsIGhlaWdodCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugd2Vi
cnRjOjprVmlkZW9Sb3RhdGlvbl8yNzA6CisgICAgICAgIHJvdGF0aW9uID0gTWVkaWFTYW1wbGU6
OlZpZGVvUm90YXRpb246OkxlZnQ7CisgICAgICAgIHN0ZDo6c3dhcCh3aWR0aCwgaGVpZ2h0KTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgUmVmUHRyPFJlYWx0aW1lSW5jb21pbmdWaWRl
b1NvdXJjZUNvY29hPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIGNhbGxPbk1haW5UaHJlYWQo
W3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgc2FtcGxlID0gV1RGTW92ZShzYW1wbGUp
LCB3aWR0aCwgaGVpZ2h0LCByb3RhdGlvbl0geworICAgICAgICBwcm90ZWN0ZWRUaGlzLT5wcm9j
ZXNzTmV3U2FtcGxlKHNhbXBsZS5nZXQoKSwgd2lkdGgsIGhlaWdodCwgcm90YXRpb24pOworICAg
IH0pOworfQorCit2b2lkIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUNvY29hOjpwcm9jZXNz
TmV3U2FtcGxlKENNU2FtcGxlQnVmZmVyUmVmIHNhbXBsZSwgdW5zaWduZWQgd2lkdGgsIHVuc2ln
bmVkIGhlaWdodCwgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb24gcm90YXRpb24pCit7CisgICAg
bV9idWZmZXIgPSBzYW1wbGU7CisgICAgaWYgKHdpZHRoICE9IG1fY3VycmVudFNldHRpbmdzLndp
ZHRoKCkgfHwgaGVpZ2h0ICE9IG1fY3VycmVudFNldHRpbmdzLmhlaWdodCgpKSB7CisgICAgICAg
IG1fY3VycmVudFNldHRpbmdzLnNldFdpZHRoKHdpZHRoKTsKKyAgICAgICAgbV9jdXJyZW50U2V0
dGluZ3Muc2V0SGVpZ2h0KGhlaWdodCk7CisgICAgICAgIHNldHRpbmdzRGlkQ2hhbmdlKCk7Cisg
ICAgfQorCisgICAgdmlkZW9TYW1wbGVBdmFpbGFibGUoTWVkaWFTYW1wbGVBVkZPYmpDOjpjcmVh
dGUoc2FtcGxlLCByb3RhdGlvbikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBVU0UoTElCV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUNvY29hLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVJbmNvbWluZ1Zp
ZGVvU291cmNlQ29jb2EuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MGM3YTBiYzk4Nzc3ODg3Mzk3NDBjMmNlZWYy
Y2Y0MjU5NTI5OTE1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUNvY29hLmgKQEAgLTAs
MCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaWYgVVNFKExJQldFQlJUQykKKworI2luY2x1ZGUgIlJlYWx0aW1lSW5jb21pbmdWaWRl
b1NvdXJjZS5oIgorCit1c2luZyBDTVNhbXBsZUJ1ZmZlclJlZiA9IHN0cnVjdCBvcGFxdWVDTVNh
bXBsZUJ1ZmZlcio7Cit1c2luZyBDVlBpeGVsQnVmZmVyUmVmID0gc3RydWN0IF9fQ1ZCdWZmZXIq
OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJlYWx0aW1lSW5jb21pbmdWaWRlb1Nv
dXJjZUNvY29hIGZpbmFsIDogcHVibGljIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZSB7Citw
cml2YXRlOgorICAgIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUNvY29hKHJ0Yzo6c2NvcGVk
X3JlZnB0cjx3ZWJydGM6OlZpZGVvVHJhY2tJbnRlcmZhY2U+JiYsIFN0cmluZyYmKTsKKworICAg
IHZvaWQgcHJvY2Vzc05ld1NhbXBsZShDTVNhbXBsZUJ1ZmZlclJlZiwgdW5zaWduZWQsIHVuc2ln
bmVkLCBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbik7CisgICAgQ1ZQaXhlbEJ1ZmZlclJlZiBw
aXhlbEJ1ZmZlckZyb21WaWRlb0ZyYW1lKGNvbnN0IHdlYnJ0Yzo6VmlkZW9GcmFtZSYpOworCisg
ICAgLy8gcnRjOjpWaWRlb1NpbmtJbnRlcmZhY2UKKyAgICB2b2lkIE9uRnJhbWUoY29uc3Qgd2Vi
cnRjOjpWaWRlb0ZyYW1lJikgZmluYWw7CisKKyAgICBSZXRhaW5QdHI8Q01TYW1wbGVCdWZmZXJS
ZWY+IG1fYnVmZmVyOworICAgIFJldGFpblB0cjxDVlBpeGVsQnVmZmVyUmVmPiBtX2JsYWNrRnJh
bWU7CisgICAgaW50IG1fYmxhY2tGcmFtZVdpZHRoIHsgMCB9OworICAgIGludCBtX2JsYWNrRnJh
bWVIZWlnaHQgeyAwIH07CisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAgc2l6ZV90IG1f
bnVtYmVyT2ZGcmFtZXMgeyAwIH07CisjZW5kaWYKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIFVTRShMSUJXRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU91dGdv
aW5nVmlkZW9Tb3VyY2UuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjQ1MGRm
MzNjNmY2YTI1ODdkYTM5YjVlYzgyY2NmY2Q2MGEwZTdkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL21hYy9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMjY2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkLCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIHJlcXVpcmVkIHRvIGJlIG1ldDoK
LSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9m
IEFwcGxlIEluYy4gbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCi0gKiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0g
KiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUgotICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKLSAqIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291
cmNlLmgiCi0KLSNpZiBVU0UoTElCV0VCUlRDKQotCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2lu
Y2x1ZGUgPHdlYnJ0Yy9hcGkvdmlkZW8vaTQyMF9idWZmZXIuaD4KLSNpbmNsdWRlIDx3ZWJydGMv
Y29tbW9uX3ZpZGVvL2xpYnl1di9pbmNsdWRlL3dlYnJ0Y19saWJ5dXYuaD4KLSNpbmNsdWRlIDx3
ZWJydGMvc2RrL29iamMvRnJhbWV3b3JrL0NsYXNzZXMvVmlkZW8vY29yZXZpZGVvX2ZyYW1lX2J1
ZmZlci5oPgotI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgotI2luY2x1ZGUgPHd0Zi9NYWlu
VGhyZWFkLmg+Ci0KLSNpbmNsdWRlICJDb3JlTWVkaWFTb2Z0TGluay5oIgotI2luY2x1ZGUgIkNv
cmVWaWRlb1NvZnRMaW5rLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUmVhbHRpbWVPdXRn
b2luZ1ZpZGVvU291cmNlOjpSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UoUmVmPE1lZGlhU3Ry
ZWFtVHJhY2tQcml2YXRlPiYmIHZpZGVvU291cmNlKQotICAgIDogbV92aWRlb1NvdXJjZShXVEZN
b3ZlKHZpZGVvU291cmNlKSkKLSAgICAsIG1fYmxhY2tGcmFtZVRpbWVyKCp0aGlzLCAmUmVhbHRp
bWVPdXRnb2luZ1ZpZGVvU291cmNlOjpzZW5kT25lQmxhY2tGcmFtZSkKLXsKLSAgICBtX3ZpZGVv
U291cmNlLT5hZGRPYnNlcnZlcigqdGhpcyk7Ci0gICAgaW5pdGlhbGl6ZUZyb21Tb3VyY2UoKTsK
LX0KLQotYm9vbCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnNldFNvdXJjZShSZWY8TWVk
aWFTdHJlYW1UcmFja1ByaXZhdGU+JiYgbmV3U291cmNlKQotewotICAgIGlmICghbV9pbml0aWFs
U2V0dGluZ3MpCi0gICAgICAgIG1faW5pdGlhbFNldHRpbmdzID0gbV92aWRlb1NvdXJjZS0+c291
cmNlKCkuc2V0dGluZ3MoKTsKLQotICAgIG1fdmlkZW9Tb3VyY2UtPnJlbW92ZU9ic2VydmVyKCp0
aGlzKTsKLSAgICBtX3ZpZGVvU291cmNlID0gV1RGTW92ZShuZXdTb3VyY2UpOwotICAgIG1fdmlk
ZW9Tb3VyY2UtPmFkZE9ic2VydmVyKCp0aGlzKTsKLQotICAgIGluaXRpYWxpemVGcm9tU291cmNl
KCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBSZWFsdGltZU91dGdvaW5nVmlkZW9T
b3VyY2U6OnN0b3AoKQotewotICAgIG1fdmlkZW9Tb3VyY2UtPnJlbW92ZU9ic2VydmVyKCp0aGlz
KTsKLSAgICBtX2JsYWNrRnJhbWVUaW1lci5zdG9wKCk7Ci0gICAgbV9pc1N0b3BwZWQgPSB0cnVl
OwotfQotCi12b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6dXBkYXRlQmxhY2tGcmFt
ZXNTZW5kaW5nKCkKLXsKLSAgICBpZiAoIW1fbXV0ZWQgJiYgbV9lbmFibGVkKSB7Ci0gICAgICAg
IGlmIChtX2JsYWNrRnJhbWVUaW1lci5pc0FjdGl2ZSgpKQotICAgICAgICAgICAgbV9ibGFja0Zy
YW1lVGltZXIuc3RvcCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc2VuZEJsYWNr
RnJhbWVzSWZOZWVkZWQoKTsKLX0KLQotdm9pZCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6
OnNvdXJjZU11dGVkQ2hhbmdlZCgpCi17Ci0gICAgQVNTRVJUKG1fbXV0ZWQgIT0gbV92aWRlb1Nv
dXJjZS0+bXV0ZWQoKSk7Ci0KLSAgICBtX211dGVkID0gbV92aWRlb1NvdXJjZS0+bXV0ZWQoKTsK
LQotICAgIHVwZGF0ZUJsYWNrRnJhbWVzU2VuZGluZygpOwotfQotCi12b2lkIFJlYWx0aW1lT3V0
Z29pbmdWaWRlb1NvdXJjZTo6c291cmNlRW5hYmxlZENoYW5nZWQoKQotewotICAgIEFTU0VSVCht
X2VuYWJsZWQgIT0gbV92aWRlb1NvdXJjZS0+ZW5hYmxlZCgpKTsKLQotICAgIG1fZW5hYmxlZCA9
IG1fdmlkZW9Tb3VyY2UtPmVuYWJsZWQoKTsKLQotICAgIHVwZGF0ZUJsYWNrRnJhbWVzU2VuZGlu
ZygpOwotfQotCi12b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6aW5pdGlhbGl6ZUZy
b21Tb3VyY2UoKQotewotICAgIGNvbnN0IGF1dG8mIHNldHRpbmdzID0gbV92aWRlb1NvdXJjZS0+
c291cmNlKCkuc2V0dGluZ3MoKTsKLSAgICBtX3dpZHRoID0gc2V0dGluZ3Mud2lkdGgoKTsKLSAg
ICBtX2hlaWdodCA9IHNldHRpbmdzLmhlaWdodCgpOwotCi0gICAgbV9tdXRlZCA9IG1fdmlkZW9T
b3VyY2UtPm11dGVkKCk7Ci0gICAgbV9lbmFibGVkID0gbV92aWRlb1NvdXJjZS0+ZW5hYmxlZCgp
OwotCi0gICAgdXBkYXRlQmxhY2tGcmFtZXNTZW5kaW5nKCk7Ci19Ci0KLWJvb2wgUmVhbHRpbWVP
dXRnb2luZ1ZpZGVvU291cmNlOjpHZXRTdGF0cyhTdGF0cyopCi17Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi12b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6QWRkT3JVcGRhdGVTaW5r
KHJ0Yzo6VmlkZW9TaW5rSW50ZXJmYWNlPHdlYnJ0Yzo6VmlkZW9GcmFtZT4qIHNpbmssIGNvbnN0
IHJ0Yzo6VmlkZW9TaW5rV2FudHMmIHNpbmtXYW50cykKLXsKLSAgICBBU1NFUlQoIXNpbmtXYW50
cy5ibGFja19mcmFtZXMpOwotCi0gICAgaWYgKHNpbmtXYW50cy5yb3RhdGlvbl9hcHBsaWVkKQot
ICAgICAgICBtX3Nob3VsZEFwcGx5Um90YXRpb24gPSB0cnVlOwotCi0gICAgaWYgKCFtX3Npbmtz
LmNvbnRhaW5zKHNpbmspKQotICAgICAgICBtX3NpbmtzLmFwcGVuZChzaW5rKTsKLQotICAgIGNh
bGxPbk1haW5UaHJlYWQoW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0oKSB7Ci0gICAg
ICAgIHByb3RlY3RlZFRoaXMtPnNlbmRCbGFja0ZyYW1lc0lmTmVlZGVkKCk7Ci0gICAgfSk7Ci19
Ci0KLXZvaWQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpSZW1vdmVTaW5rKHJ0Yzo6Vmlk
ZW9TaW5rSW50ZXJmYWNlPHdlYnJ0Yzo6VmlkZW9GcmFtZT4qIHNpbmspCi17Ci0gICAgbV9zaW5r
cy5yZW1vdmVGaXJzdChzaW5rKTsKLQotICAgIGlmIChtX3NpbmtzLnNpemUoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYo
KnRoaXMpXSgpIHsKLSAgICAgICAgaWYgKHByb3RlY3RlZFRoaXMtPm1fYmxhY2tGcmFtZVRpbWVy
LmlzQWN0aXZlKCkpCi0gICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5tX2JsYWNrRnJhbWVUaW1l
ci5zdG9wKCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNl
OjpzZW5kQmxhY2tGcmFtZXNJZk5lZWRlZCgpCi17Ci0gICAgaWYgKG1fYmxhY2tGcmFtZVRpbWVy
LmlzQWN0aXZlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9zaW5rcy5zaXplKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9tdXRlZCAmJiBtX2VuYWJsZWQpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmICghbV93aWR0aCB8fCAhbV9oZWlnaHQpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmICghbV9ibGFja0ZyYW1lKSB7Ci0gICAgICAgIGF1dG8gd2lkdGggPSBt
X3dpZHRoOwotICAgICAgICBhdXRvIGhlaWdodCA9IG1faGVpZ2h0OwotICAgICAgICBpZiAobV9z
aG91bGRBcHBseVJvdGF0aW9uICYmIChtX2N1cnJlbnRSb3RhdGlvbiA9PSB3ZWJydGM6OmtWaWRl
b1JvdGF0aW9uXzAgfHwgbV9jdXJyZW50Um90YXRpb24gPT0gd2VicnRjOjprVmlkZW9Sb3RhdGlv
bl85MCkpCi0gICAgICAgICAgICBzdGQ6OnN3YXAod2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIGF1
dG8gZnJhbWUgPSBtX2J1ZmZlclBvb2wuQ3JlYXRlQnVmZmVyKHdpZHRoLCBoZWlnaHQpOwotICAg
ICAgICBBU1NFUlQoZnJhbWUpOwotICAgICAgICBpZiAoIWZyYW1lKSB7Ci0gICAgICAgICAgICBS
RUxFQVNFX0xPRyhXZWJSVEMsICJSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnNlbmRCbGFj
a0ZyYW1lc0lmTmVlZGVkIHVuYWJsZSB0byBzZW5kIGJsYWNrIGZyYW1lcyIpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHdlYnJ0Yzo6STQyMEJ1ZmZlcjo6U2V0Qmxh
Y2soZnJhbWUuZ2V0KCkpOwotICAgICAgICBtX2JsYWNrRnJhbWUgPSBXVEZNb3ZlKGZyYW1lKTsK
LSAgICB9Ci0gICAgc2VuZE9uZUJsYWNrRnJhbWUoKTsKLSAgICBtX2JsYWNrRnJhbWVUaW1lci5z
dGFydFJlcGVhdGluZygxX3MpOwotfQotCi12b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJj
ZTo6c2VuZE9uZUJsYWNrRnJhbWUoKQotewotICAgIFJFTEVBU0VfTE9HKE1lZGlhU3RyZWFtLCAi
UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpzZW5kT25lQmxhY2tGcmFtZSIpOwotICAgIHNl
bmRGcmFtZShydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb0ZyYW1lQnVmZmVyPihtX2Js
YWNrRnJhbWUpKTsKLX0KLQotdm9pZCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnNlbmRG
cmFtZShydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb0ZyYW1lQnVmZmVyPiYmIGJ1ZmZl
cikKLXsKLSAgICBpbnQ2NF90IHRpbWVzdGFtcE1pY3JvU2Vjb25kcyA9IG1vbm90b25pY2FsbHlJ
bmNyZWFzaW5nVGltZU1TKCkgKiAxMDAwOwotICAgIHdlYnJ0Yzo6VmlkZW9GcmFtZSBmcmFtZShi
dWZmZXIsIG1fc2hvdWxkQXBwbHlSb3RhdGlvbiA/IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMCA6
IG1fY3VycmVudFJvdGF0aW9uLCB0aW1lc3RhbXBNaWNyb1NlY29uZHMpOwotICAgIGZvciAoYXV0
byogc2luayA6IG1fc2lua3MpCi0gICAgICAgIHNpbmstPk9uRnJhbWUoZnJhbWUpOwotfQotCi12
b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6dmlkZW9TYW1wbGVBdmFpbGFibGUoTWVk
aWFTYW1wbGUmIHNhbXBsZSkKLXsKLSAgICBpZiAoIW1fc2lua3Muc2l6ZSgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAobV9tdXRlZCB8fCAhbV9lbmFibGVkKQotICAgICAgICByZXR1cm47
Ci0KLSNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKLSAgICBpZiAoISgrK21fbnVtYmVyT2ZGcmFt
ZXMgJSAzMCkpCi0gICAgICAgIFJFTEVBU0VfTE9HKE1lZGlhU3RyZWFtLCAiUmVhbHRpbWVPdXRn
b2luZ1ZpZGVvU291cmNlOjpzZW5kRnJhbWUgJXp1IGZyYW1lIiwgbV9udW1iZXJPZkZyYW1lcyk7
Ci0jZW5kaWYKLQotICAgIHN3aXRjaCAoc2FtcGxlLnZpZGVvUm90YXRpb24oKSkgewotICAgIGNh
c2UgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246Ok5vbmU6Ci0gICAgICAgIG1fY3VycmVudFJv
dGF0aW9uID0gd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8wOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpVcHNpZGVEb3duOgotICAgICAgICBtX2N1
cnJlbnRSb3RhdGlvbiA9IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMTgwOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpSaWdodDoKLSAgICAgICAg
bV9jdXJyZW50Um90YXRpb24gPSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzkwOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpMZWZ0OgotICAgICAg
ICBtX2N1cnJlbnRSb3RhdGlvbiA9IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMjcwOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0KLSAgICBBU1NFUlQoc2FtcGxlLnBsYXRmb3JtU2FtcGxlKCkudHlw
ZSA9PSBQbGF0Zm9ybVNhbXBsZTo6Q01TYW1wbGVCdWZmZXJUeXBlKTsKLSAgICBhdXRvIHBpeGVs
QnVmZmVyID0gc3RhdGljX2Nhc3Q8Q1ZQaXhlbEJ1ZmZlclJlZj4oQ01TYW1wbGVCdWZmZXJHZXRJ
bWFnZUJ1ZmZlcihzYW1wbGUucGxhdGZvcm1TYW1wbGUoKS5zYW1wbGUuY21TYW1wbGVCdWZmZXIp
KTsKLSAgICBhdXRvIHBpeGVsRm9ybWF0VHlwZSA9IENWUGl4ZWxCdWZmZXJHZXRQaXhlbEZvcm1h
dFR5cGUocGl4ZWxCdWZmZXIpOwotCi0gICAgaWYgKHBpeGVsRm9ybWF0VHlwZSA9PSBrQ1ZQaXhl
bEZvcm1hdFR5cGVfNDIwWXBDYkNyOFBsYW5hciB8fCBwaXhlbEZvcm1hdFR5cGUgPT0ga0NWUGl4
ZWxGb3JtYXRUeXBlXzQyMFlwQ2JDcjhCaVBsYW5hckZ1bGxSYW5nZSkgewotICAgICAgICBydGM6
OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb0ZyYW1lQnVmZmVyPiBidWZmZXIgPSBuZXcgcnRj
OjpSZWZDb3VudGVkT2JqZWN0PHdlYnJ0Yzo6Q29yZVZpZGVvRnJhbWVCdWZmZXI+KHBpeGVsQnVm
ZmVyKTsKLSAgICAgICAgaWYgKG1fc2hvdWxkQXBwbHlSb3RhdGlvbiAmJiBtX2N1cnJlbnRSb3Rh
dGlvbiAhPSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzApIHsKLSAgICAgICAgICAgIC8vIEZJWE1F
OiBXZSBzaG91bGQgbWFrZSBBVlZpZGVvQ2FwdHVyZVNvdXJjZSBoYW5kbGUgdGhlIHJvdGF0aW9u
IHdoZW5ldmVyIHBvc3NpYmxlLgotICAgICAgICAgICAgLy8gVGhpcyBpbXBsZW1lbnRhdGlvbiBp
cyBpbmVmZmljaWVudCwgd2Ugc2hvdWxkIHJvdGF0ZSBvbiB0aGUgQ01TYW1wbGVCdWZmZXIgZGly
ZWN0bHkgaW5zdGVhZCBvZiBkb2luZyB0aGlzIGRvdWJsZSBhbGxvY2F0aW9uLgotICAgICAgICAg
ICAgYXV0byByb3RhdGVkQnVmZmVyID0gYnVmZmVyLT5Ub0k0MjAoKTsKLSAgICAgICAgICAgIEFT
U0VSVChyb3RhdGVkQnVmZmVyKTsKLSAgICAgICAgICAgIGJ1ZmZlciA9IHdlYnJ0Yzo6STQyMEJ1
ZmZlcjo6Um90YXRlKCpyb3RhdGVkQnVmZmVyLCBtX2N1cnJlbnRSb3RhdGlvbik7Ci0gICAgICAg
IH0KLSAgICAgICAgc2VuZEZyYW1lKFdURk1vdmUoYnVmZmVyKSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBDVlBpeGVsQnVmZmVyTG9ja0Jhc2VBZGRyZXNzKHBpeGVsQnVmZmVyLCAw
KTsKLSAgICBhdXRvKiBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihDVlBpeGVs
QnVmZmVyR2V0QmFzZUFkZHJlc3NPZlBsYW5lKHBpeGVsQnVmZmVyLCAwKSk7Ci0KLSAgICBBU1NF
UlQobV93aWR0aCk7Ci0gICAgQVNTRVJUKG1faGVpZ2h0KTsKLQotICAgIGF1dG8gbmV3QnVmZmVy
ID0gbV9idWZmZXJQb29sLkNyZWF0ZUJ1ZmZlcihtX3dpZHRoLCBtX2hlaWdodCk7Ci0gICAgQVNT
RVJUKG5ld0J1ZmZlcik7Ci0gICAgaWYgKCFuZXdCdWZmZXIpIHsKLSAgICAgICAgUkVMRUFTRV9M
T0coV2ViUlRDLCAiUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjp2aWRlb1NhbXBsZUF2YWls
YWJsZSB1bmFibGUgdG8gYWxsb2NhdGUgYnVmZmVyIGZvciBjb252ZXJzaW9uIHRvIFlVViIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChwaXhlbEZvcm1hdFR5cGUgPT0ga0NWUGl4
ZWxGb3JtYXRUeXBlXzMyQkdSQSkKLSAgICAgICAgd2VicnRjOjpDb252ZXJ0VG9JNDIwKHdlYnJ0
Yzo6VmlkZW9UeXBlOjprQVJHQiwgc291cmNlLCAwLCAwLCBtX3dpZHRoLCBtX2hlaWdodCwgMCwg
d2VicnRjOjprVmlkZW9Sb3RhdGlvbl8wLCBuZXdCdWZmZXIpOwotICAgIGVsc2UgewotICAgICAg
ICBBU1NFUlQocGl4ZWxGb3JtYXRUeXBlID09IGtDVlBpeGVsRm9ybWF0VHlwZV8zMkFSR0IpOwot
ICAgICAgICB3ZWJydGM6OkNvbnZlcnRUb0k0MjAod2VicnRjOjpWaWRlb1R5cGU6OmtCR1JBLCBz
b3VyY2UsIDAsIDAsIG1fd2lkdGgsIG1faGVpZ2h0LCAwLCB3ZWJydGM6OmtWaWRlb1JvdGF0aW9u
XzAsIG5ld0J1ZmZlcik7Ci0gICAgfQotICAgIENWUGl4ZWxCdWZmZXJVbmxvY2tCYXNlQWRkcmVz
cyhwaXhlbEJ1ZmZlciwgMCk7Ci0gICAgaWYgKG1fc2hvdWxkQXBwbHlSb3RhdGlvbiAmJiBtX2N1
cnJlbnRSb3RhdGlvbiAhPSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzApCi0gICAgICAgIG5ld0J1
ZmZlciA9IHdlYnJ0Yzo6STQyMEJ1ZmZlcjo6Um90YXRlKCpuZXdCdWZmZXIsIG1fY3VycmVudFJv
dGF0aW9uKTsKLSAgICBzZW5kRnJhbWUoV1RGTW92ZShuZXdCdWZmZXIpKTsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKExJQldFQlJUQykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU91dGdvaW5n
VmlkZW9Tb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9S
ZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMjdlNzhiNTE2NWQwNTY5NWZlMWE0NTg0MDg1OWJiMTFjMTJlNDg4Ni4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmgKKysrIC9kZXYv
bnVsbApAQCAtMSwxMTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJ
bmMuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQsIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgcmVxdWlyZWQgdG8g
YmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhl
IG5hbWUgb2YgQXBwbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAot
ICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKLSAqIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0gKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgotICogQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgVVNFKExJQldFQlJUQykKLQotI2luY2x1ZGUg
IkxpYldlYlJUQ01hY3Jvcy5oIgotI2luY2x1ZGUgIk1lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmgi
Ci0jaW5jbHVkZSA8VGltZXIuaD4KLSNpbmNsdWRlIDx3ZWJydGMvYXBpL21lZGlhc3RyZWFtaW50
ZXJmYWNlLmg+Ci0jaW5jbHVkZSA8d2VicnRjL2Jhc2Uvb3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3
ZWJydGMvY29tbW9uX3ZpZGVvL2luY2x1ZGUvaTQyMF9idWZmZXJfcG9vbC5oPgotI2luY2x1ZGUg
PHdlYnJ0Yy9tZWRpYS9iYXNlL3ZpZGVvc2lua2ludGVyZmFjZS5oPgotI2luY2x1ZGUgPHd0Zi9P
cHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZSBmaW5h
bCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3Vy
Y2U+LCBwdWJsaWMgd2VicnRjOjpWaWRlb1RyYWNrU291cmNlSW50ZXJmYWNlLCBwcml2YXRlIE1l
ZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpPYnNlcnZlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJl
ZjxSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U+IGNyZWF0ZShSZWY8TWVkaWFTdHJlYW1UcmFj
a1ByaXZhdGU+JiYgdmlkZW9Tb3VyY2UpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVhbHRpbWVP
dXRnb2luZ1ZpZGVvU291cmNlKFdURk1vdmUodmlkZW9Tb3VyY2UpKSk7IH0KLSAgICB+UmVhbHRp
bWVPdXRnb2luZ1ZpZGVvU291cmNlKCkgeyBzdG9wKCk7IH0KLQotICAgIHZvaWQgc3RvcCgpOwot
ICAgIGJvb2wgc2V0U291cmNlKFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4mJik7Ci0gICAg
TWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmlkZW9T
b3VyY2UuZ2V0KCk7IH0KLQotICAgIGludCBBZGRSZWYoKSBjb25zdCBmaW5hbCB7IHJlZigpOyBy
ZXR1cm4gcmVmQ291bnQoKTsgfQotICAgIGludCBSZWxlYXNlKCkgY29uc3QgZmluYWwgeyBkZXJl
ZigpOyByZXR1cm4gcmVmQ291bnQoKTsgfQotCi0gICAgdm9pZCBzZXRBcHBseVJvdGF0aW9uKGJv
b2wgc2hvdWxkQXBwbHlSb3RhdGlvbikgeyBtX3Nob3VsZEFwcGx5Um90YXRpb24gPSBzaG91bGRB
cHBseVJvdGF0aW9uOyB9Ci0KLXByaXZhdGU6Ci0gICAgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291
cmNlKFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4mJik7Ci0KLSAgICB2b2lkIHNlbmRGcmFt
ZShydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb0ZyYW1lQnVmZmVyPiYmKTsKLSAgICB2
b2lkIHNlbmRCbGFja0ZyYW1lc0lmTmVlZGVkKCk7Ci0gICAgdm9pZCBzZW5kT25lQmxhY2tGcmFt
ZSgpOwotICAgIHZvaWQgaW5pdGlhbGl6ZUZyb21Tb3VyY2UoKTsKLSAgICB2b2lkIHVwZGF0ZUJs
YWNrRnJhbWVzU2VuZGluZygpOwotCi0gICAgLy8gTm90aWZpZXIgQVBJCi0gICAgdm9pZCBSZWdp
c3Rlck9ic2VydmVyKHdlYnJ0Yzo6T2JzZXJ2ZXJJbnRlcmZhY2UqKSBmaW5hbCB7IH0KLSAgICB2
b2lkIFVucmVnaXN0ZXJPYnNlcnZlcih3ZWJydGM6Ok9ic2VydmVySW50ZXJmYWNlKikgZmluYWwg
eyB9Ci0KLSAgICAvLyBWaWRlb1RyYWNrU291cmNlSW50ZXJmYWNlIEFQSQotICAgIGJvb2wgaXNf
c2NyZWVuY2FzdCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgcnRjOjpPcHRp
b25hbDxib29sPiBuZWVkc19kZW5vaXNpbmcoKSBjb25zdCBmaW5hbCB7IHJldHVybiBydGM6Ok9w
dGlvbmFsPGJvb2w+KCk7IH0KLSAgICBib29sIEdldFN0YXRzKFN0YXRzKikgZmluYWw7Ci0KLSAg
ICAvLyBNZWRpYVNvdXJjZUludGVyZmFjZSBBUEkKLSAgICBTb3VyY2VTdGF0ZSBzdGF0ZSgpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIFNvdXJjZVN0YXRlKCk7IH0KLSAgICBib29sIHJlbW90ZSgpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KLQotICAgIC8vIHJ0Yzo6VmlkZW9Tb3VyY2VJbnRl
cmZhY2U8d2VicnRjOjpWaWRlb0ZyYW1lPiBBUEkKLSAgICB2b2lkIEFkZE9yVXBkYXRlU2luayhy
dGM6OlZpZGVvU2lua0ludGVyZmFjZTx3ZWJydGM6OlZpZGVvRnJhbWU+KiwgY29uc3QgcnRjOjpW
aWRlb1NpbmtXYW50cyYpIGZpbmFsOwotICAgIHZvaWQgUmVtb3ZlU2luayhydGM6OlZpZGVvU2lu
a0ludGVyZmFjZTx3ZWJydGM6OlZpZGVvRnJhbWU+KikgZmluYWw7Ci0KLSAgICB2b2lkIHNvdXJj
ZU11dGVkQ2hhbmdlZCgpOwotICAgIHZvaWQgc291cmNlRW5hYmxlZENoYW5nZWQoKTsKLSAgICB2
b2lkIHZpZGVvU2FtcGxlQXZhaWxhYmxlKE1lZGlhU2FtcGxlJik7Ci0KLSAgICAvLyBNZWRpYVN0
cmVhbVRyYWNrUHJpdmF0ZTo6T2JzZXJ2ZXIgQVBJCi0gICAgdm9pZCB0cmFja011dGVkQ2hhbmdl
ZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYpIGZpbmFsIHsgc291cmNlTXV0ZWRDaGFuZ2VkKCk7
IH0KLSAgICB2b2lkIHRyYWNrRW5hYmxlZENoYW5nZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUm
KSBmaW5hbCB7IHNvdXJjZUVuYWJsZWRDaGFuZ2VkKCk7IH0KLSAgICB2b2lkIHRyYWNrU2V0dGlu
Z3NDaGFuZ2VkKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJikgZmluYWwgeyBpbml0aWFsaXplRnJv
bVNvdXJjZSgpOyB9Ci0gICAgdm9pZCBzYW1wbGVCdWZmZXJVcGRhdGVkKE1lZGlhU3RyZWFtVHJh
Y2tQcml2YXRlJiwgTWVkaWFTYW1wbGUmIHNhbXBsZSkgZmluYWwgeyB2aWRlb1NhbXBsZUF2YWls
YWJsZShzYW1wbGUpOyB9Ci0gICAgdm9pZCB0cmFja0VuZGVkKE1lZGlhU3RyZWFtVHJhY2tQcml2
YXRlJikgZmluYWwgeyB9Ci0KLSAgICBWZWN0b3I8cnRjOjpWaWRlb1NpbmtJbnRlcmZhY2U8d2Vi
cnRjOjpWaWRlb0ZyYW1lPio+IG1fc2lua3M7Ci0gICAgd2VicnRjOjpJNDIwQnVmZmVyUG9vbCBt
X2J1ZmZlclBvb2w7Ci0gICAgUmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiBtX3ZpZGVvU291
cmNlOwotICAgIGJvb2wgbV9lbmFibGVkIHsgdHJ1ZSB9OwotICAgIGJvb2wgbV9tdXRlZCB7IGZh
bHNlIH07Ci0gICAgc3RkOjpvcHRpb25hbDxSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M+IG1f
aW5pdGlhbFNldHRpbmdzOwotICAgIHdlYnJ0Yzo6VmlkZW9Sb3RhdGlvbiBtX2N1cnJlbnRSb3Rh
dGlvbiB7IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMCB9OwotICAgIHVpbnQzMl90IG1fd2lkdGgg
eyAwIH07Ci0gICAgdWludDMyX3QgbV9oZWlnaHQgeyAwIH07Ci0gICAgYm9vbCBtX2lzU3RvcHBl
ZCB7IGZhbHNlIH07Ci0gICAgVGltZXIgbV9ibGFja0ZyYW1lVGltZXI7Ci0gICAgcnRjOjpzY29w
ZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9GcmFtZUJ1ZmZlcj4gbV9ibGFja0ZyYW1lOwotICAgIGJv
b2wgbV9zaG91bGRBcHBseVJvdGF0aW9uIHsgZmFsc2UgfTsKLSNpZiAhUkVMRUFTRV9MT0dfRElT
QUJMRUQKLSAgICBzaXplX3QgbV9udW1iZXJPZkZyYW1lcyB7IDAgfTsKLSNlbmRpZgotfTsKLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKExJQldFQlJUQykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU91
dGdvaW5nVmlkZW9Tb3VyY2VDb2NvYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlQ29jb2EuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjhhY2Y4NjJmMTdmYjgyYWFiZmNmMDA0ODI4ZWQ1ODE2MjM1MmUzZTYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVP
dXRnb2luZ1ZpZGVvU291cmNlQ29jb2EuY3BwCkBAIC0wLDAgKzEsMTIzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSByZXF1aXJlZCB0byBiZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisg
KiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291
cmNlQ29jb2EuaCIKKworI2lmIFVTRShMSUJXRUJSVEMpCisKKyNpbmNsdWRlICJMb2dnaW5nLmgi
CisjaW5jbHVkZSA8d2VicnRjL2FwaS92aWRlby9pNDIwX2J1ZmZlci5oPgorI2luY2x1ZGUgPHdl
YnJ0Yy9jb21tb25fdmlkZW8vbGlieXV2L2luY2x1ZGUvd2VicnRjX2xpYnl1di5oPgorI2luY2x1
ZGUgPHdlYnJ0Yy9zZGsvb2JqYy9GcmFtZXdvcmsvQ2xhc3Nlcy9WaWRlby9jb3JldmlkZW9fZnJh
bWVfYnVmZmVyLmg+CisKKyNpbmNsdWRlICJDb3JlTWVkaWFTb2Z0TGluay5oIgorI2luY2x1ZGUg
IkNvcmVWaWRlb1NvZnRMaW5rLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVmPFJlYWx0
aW1lT3V0Z29pbmdWaWRlb1NvdXJjZT4gUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpjcmVh
dGUoUmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiYmIHZpZGVvU291cmNlKQoreworICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZShXVEZNb3ZlKHZp
ZGVvU291cmNlKSkpOworfQorCitSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VDb2NvYTo6UmVh
bHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlQ29jb2EoUmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRl
PiYmIHZpZGVvU291cmNlKQorICAgIDogUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlKFdURk1v
dmUodmlkZW9Tb3VyY2UpKQoreworfQorCit2b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJj
ZUNvY29hOjpzYW1wbGVCdWZmZXJVcGRhdGVkKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJiwgTWVk
aWFTYW1wbGUmIHNhbXBsZSkKK3sKKyAgICBpZiAoIW1fc2lua3Muc2l6ZSgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAobV9tdXRlZCB8fCAhbV9lbmFibGVkKQorICAgICAgICByZXR1cm47
CisKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICBpZiAoISgrK21fbnVtYmVyT2ZGcmFt
ZXMgJSAzMCkpCisgICAgICAgIFJFTEVBU0VfTE9HKE1lZGlhU3RyZWFtLCAiUmVhbHRpbWVPdXRn
b2luZ1ZpZGVvU291cmNlQ29jb2E6OnNlbmRGcmFtZSAlenUgZnJhbWUiLCBtX251bWJlck9mRnJh
bWVzKTsKKyNlbmRpZgorCisgICAgc3dpdGNoIChzYW1wbGUudmlkZW9Sb3RhdGlvbigpKSB7Cisg
ICAgY2FzZSBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6Tm9uZToKKyAgICAgICAgbV9jdXJy
ZW50Um90YXRpb24gPSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzA7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246OlVwc2lkZURvd246CisgICAgICAg
IG1fY3VycmVudFJvdGF0aW9uID0gd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8xODA7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246OlJpZ2h0OgorICAg
ICAgICBtX2N1cnJlbnRSb3RhdGlvbiA9IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fOTA7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246OkxlZnQ6Cisg
ICAgICAgIG1fY3VycmVudFJvdGF0aW9uID0gd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8yNzA7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKworICAgIEFTU0VSVChzYW1wbGUucGxhdGZvcm1TYW1wbGUo
KS50eXBlID09IFBsYXRmb3JtU2FtcGxlOjpDTVNhbXBsZUJ1ZmZlclR5cGUpOworICAgIGF1dG8g
cGl4ZWxCdWZmZXIgPSBzdGF0aWNfY2FzdDxDVlBpeGVsQnVmZmVyUmVmPihDTVNhbXBsZUJ1ZmZl
ckdldEltYWdlQnVmZmVyKHNhbXBsZS5wbGF0Zm9ybVNhbXBsZSgpLnNhbXBsZS5jbVNhbXBsZUJ1
ZmZlcikpOworICAgIGF1dG8gcGl4ZWxGb3JtYXRUeXBlID0gQ1ZQaXhlbEJ1ZmZlckdldFBpeGVs
Rm9ybWF0VHlwZShwaXhlbEJ1ZmZlcik7CisKKyAgICBpZiAocGl4ZWxGb3JtYXRUeXBlID09IGtD
VlBpeGVsRm9ybWF0VHlwZV80MjBZcENiQ3I4UGxhbmFyIHx8IHBpeGVsRm9ybWF0VHlwZSA9PSBr
Q1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyOEJpUGxhbmFyRnVsbFJhbmdlKSB7CisgICAgICAg
IHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvRnJhbWVCdWZmZXI+IGJ1ZmZlciA9IG5l
dyBydGM6OlJlZkNvdW50ZWRPYmplY3Q8d2VicnRjOjpDb3JlVmlkZW9GcmFtZUJ1ZmZlcj4ocGl4
ZWxCdWZmZXIpOworICAgICAgICBpZiAobV9zaG91bGRBcHBseVJvdGF0aW9uICYmIG1fY3VycmVu
dFJvdGF0aW9uICE9IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMCkgeworICAgICAgICAgICAgLy8g
RklYTUU6IFdlIHNob3VsZCBtYWtlIEFWVmlkZW9DYXB0dXJlU291cmNlIGhhbmRsZSB0aGUgcm90
YXRpb24gd2hlbmV2ZXIgcG9zc2libGUuCisgICAgICAgICAgICAvLyBUaGlzIGltcGxlbWVudGF0
aW9uIGlzIGluZWZmaWNpZW50LCB3ZSBzaG91bGQgcm90YXRlIG9uIHRoZSBDTVNhbXBsZUJ1ZmZl
ciBkaXJlY3RseSBpbnN0ZWFkIG9mIGRvaW5nIHRoaXMgZG91YmxlIGFsbG9jYXRpb24uCisgICAg
ICAgICAgICBhdXRvIHJvdGF0ZWRCdWZmZXIgPSBidWZmZXItPlRvSTQyMCgpOworICAgICAgICAg
ICAgQVNTRVJUKHJvdGF0ZWRCdWZmZXIpOworICAgICAgICAgICAgYnVmZmVyID0gd2VicnRjOjpJ
NDIwQnVmZmVyOjpSb3RhdGUoKnJvdGF0ZWRCdWZmZXIsIG1fY3VycmVudFJvdGF0aW9uKTsKKyAg
ICAgICAgfQorICAgICAgICBzZW5kRnJhbWUoV1RGTW92ZShidWZmZXIpKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIENWUGl4ZWxCdWZmZXJMb2NrQmFzZUFkZHJlc3MocGl4ZWxCdWZm
ZXIsIDApOworICAgIGF1dG8qIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KENW
UGl4ZWxCdWZmZXJHZXRCYXNlQWRkcmVzc09mUGxhbmUocGl4ZWxCdWZmZXIsIDApKTsKKworICAg
IEFTU0VSVChtX3dpZHRoKTsKKyAgICBBU1NFUlQobV9oZWlnaHQpOworCisgICAgYXV0byBuZXdC
dWZmZXIgPSBtX2J1ZmZlclBvb2wuQ3JlYXRlQnVmZmVyKG1fd2lkdGgsIG1faGVpZ2h0KTsKKyAg
ICBBU1NFUlQobmV3QnVmZmVyKTsKKyAgICBpZiAoIW5ld0J1ZmZlcikgeworICAgICAgICBSRUxF
QVNFX0xPRyhXZWJSVEMsICJSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VDb2NvYTo6dmlkZW9T
YW1wbGVBdmFpbGFibGUgdW5hYmxlIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3IgY29udmVyc2lvbiB0
byBZVVYiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAocGl4ZWxGb3JtYXRUeXBl
ID09IGtDVlBpeGVsRm9ybWF0VHlwZV8zMkJHUkEpCisgICAgICAgIHdlYnJ0Yzo6Q29udmVydFRv
STQyMCh3ZWJydGM6OlZpZGVvVHlwZTo6a0FSR0IsIHNvdXJjZSwgMCwgMCwgbV93aWR0aCwgbV9o
ZWlnaHQsIDAsIHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMCwgbmV3QnVmZmVyKTsKKyAgICBlbHNl
IHsKKyAgICAgICAgQVNTRVJUKHBpeGVsRm9ybWF0VHlwZSA9PSBrQ1ZQaXhlbEZvcm1hdFR5cGVf
MzJBUkdCKTsKKyAgICAgICAgd2VicnRjOjpDb252ZXJ0VG9JNDIwKHdlYnJ0Yzo6VmlkZW9UeXBl
OjprQkdSQSwgc291cmNlLCAwLCAwLCBtX3dpZHRoLCBtX2hlaWdodCwgMCwgd2VicnRjOjprVmlk
ZW9Sb3RhdGlvbl8wLCBuZXdCdWZmZXIpOworICAgIH0KKyAgICBDVlBpeGVsQnVmZmVyVW5sb2Nr
QmFzZUFkZHJlc3MocGl4ZWxCdWZmZXIsIDApOworICAgIGlmIChtX3Nob3VsZEFwcGx5Um90YXRp
b24gJiYgbV9jdXJyZW50Um90YXRpb24gIT0gd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8wKQorICAg
ICAgICBuZXdCdWZmZXIgPSB3ZWJydGM6Okk0MjBCdWZmZXI6OlJvdGF0ZSgqbmV3QnVmZmVyLCBt
X2N1cnJlbnRSb3RhdGlvbik7CisgICAgc2VuZEZyYW1lKFdURk1vdmUobmV3QnVmZmVyKSk7Cit9
CisKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKExJQldFQlJUQykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFs
dGltZU91dGdvaW5nVmlkZW9Tb3VyY2VDb2NvYS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUNvY29hLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNmVjZWVkYzdlNzA5M2RlMzJmNWFiN2UzNGFmMDhkMDgwNzMzODYxYwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGlt
ZU91dGdvaW5nVmlkZW9Tb3VyY2VDb2NvYS5oCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkLCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIHJlcXVpcmVkIHRvIGJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAq
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaWYgVVNFKExJQldFQlJUQykKKworI2luY2x1ZGUgIlJlYWx0aW1l
T3V0Z29pbmdWaWRlb1NvdXJjZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJl
YWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUNvY29hIGZpbmFsIDogcHVibGljIFJlYWx0aW1lT3V0
Z29pbmdWaWRlb1NvdXJjZSB7Citwcm90ZWN0ZWQ6CisgICAgZXhwbGljaXQgUmVhbHRpbWVPdXRn
b2luZ1ZpZGVvU291cmNlQ29jb2EoUmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiYmKTsKKwor
cHJpdmF0ZToKKyAgICAvLyBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6T2JzZXJ2ZXIgQVBJCisg
ICAgdm9pZCBzYW1wbGVCdWZmZXJVcGRhdGVkKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJiwgTWVk
aWFTYW1wbGUmKSBmaW5hbDsKKworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgIHNpemVf
dCBtX251bWJlck9mRnJhbWVzIHsgMCB9OworI2VuZGlmCit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoTElCV0VCUlRDKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322830</attachid>
            <date>2017-10-05 05:44:01 -0700</date>
            <delta_ts>2017-10-11 03:48:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177869-20171005144359.patch</filename>
            <type>text/plain</type>
            <size>76370</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIyOTA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjkzODIyMzA3YzA4MTkz
ODNhYjVjNDliNDQxNTFlNWFkODFkNWFmMy4uNWIxNDNjMzFkYzkyNDk1ZGRmNTViMTA2ODg5ZWI0
ZThkZjkzOTkyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDE3LTEwLTA1ICBBbGVq
YW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisgICAgICAgIE1ha2UgUmVhbHRp
bWVJbmNvbWluZ1ZpZGVvU291cmNlcyBhbmQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlcyBw
b3J0IGFnbm9zdGljCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzc4NjkKKworICAgICAgICBSZXZpZXdlZCBieSBZb3Vlbm4gRmFibGV0LgorCisgICAg
ICAgIFJlZmFjdG9yIHRoZSBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UgYW5kIFJlYWx0aW1l
T3V0Z29pbmdWaWRlb1NvdXJjZSBjbGFzc2VzLAorICAgICAgICBtb3ZlIHRoZSBtYWMgc3BlY2lm
aWMgY29kZSB0byBhIGRpZmZlcmVudCBjbGFzcy4gVGhpcyB3YXkgd2UgY2FuIHVzZSB0aGVtIGZy
b20KKyAgICAgICAgb3RoZXIgcG9ydHMuCisKKyAgICAgICAgTm8gbmV3IGZ1bmN0aW9uYWxpdHks
IGp1c3QgYSByZWZhY3Rvci4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAq
IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6UmVhbHRpbWVJbmNvbWlu
Z1ZpZGVvU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdWaWRlb1Nv
dXJjZTo6c3RhcnRQcm9kdWNpbmdEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5j
b21pbmdWaWRlb1NvdXJjZTo6c2V0U291cmNlVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVh
bHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlOjpzdG9wUHJvZHVjaW5nRGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6OmNhcGFiaWxpdGllcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6OnNldHRpbmdz
IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZUluY29taW5n
VmlkZW9Tb3VyY2UuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5oLgorICAgICAgICAqIHBsYXRm
b3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5jcHA6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRn
b2luZ1ZpZGVvU291cmNlLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdW
aWRlb1NvdXJjZTo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFs
dGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuaC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6dmlkZW9TYW1wbGVB
dmFpbGFibGUpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUlu
Y29taW5nVmlkZW9Tb3VyY2VNYWMuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5jcHAuCisg
ICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWM6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWM6OlJlYWx0
aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1hYyk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUlu
Y29taW5nVmlkZW9Tb3VyY2VNYWM6OnBpeGVsQnVmZmVyRnJvbVZpZGVvRnJhbWUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTWFjOjpPbkZyYW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1hYzo6cHJvY2Vzc05l
d1NhbXBsZSk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lSW5j
b21pbmdWaWRlb1NvdXJjZU1hYy5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5oLgorICAgICAg
ICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VN
YWMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdWaWRlb1Nv
dXJjZU1hYzo6UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTWFjKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZU1hYzo6dmlkZW9TYW1wbGVBdmFpbGFibGUp
OgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU91dGdvaW5nVmlk
ZW9Tb3VyY2VNYWMuaDogQWRkZWQuCisKIDIwMTctMTAtMDUgIEZ1amlpIEhpcm9ub3JpICA8SGly
b25vcmkuRnVqaWlAc29ueS5jb20+CiAKICAgICAgICAgW1dpbkNhaXJvXSBGaXggYnVpbGQgYWZ0
ZXIgQnVnIDE2Nzk1NgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQg
Yi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCA3ZjIyZTUxNmY5N2EyOTdkZDU0
OGU3NWNlZTA4NzdhMWM1NjI1ZjFhLi5hMmMyZWE5ZjAwMzhkZDdlNDU4Y2MwMzBlYjBhZTEyY2Nj
MzQ5ZjljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9T
b3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMjU0OCw5ICsyNTQ4LDExIEBAIHNldChX
ZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291
cmNlU3VwcG9ydGVkQ29uc3RyYWludHMuY3BwCiAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vUlRD
SWNlQ2FuZGlkYXRlRGVzY3JpcHRvci5jcHAKICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SVENT
ZXNzaW9uRGVzY3JpcHRpb25EZXNjcmlwdG9yLmNwcAorICAgIHBsYXRmb3JtL21lZGlhc3RyZWFt
L1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5jcHAKICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVh
bS9SZWFsdGltZU1lZGlhU291cmNlLmNwcAogICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0
aW1lTWVkaWFTb3VyY2VDZW50ZXIuY3BwCiAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRp
bWVNZWRpYVNvdXJjZVNldHRpbmdzLmNwcAorICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0
aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5jcHAKIAogICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL2xp
YndlYnJ0Yy9MaWJXZWJSVENQcm92aWRlci5jcHAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDZmODY4OGJjM2Q5ZDZlNDFlODJk
ZTY2NjhiMmI5ZmM1YmIwOGQzN2MuLjM4OTY5MGYzZGQzNmE2OTQ2YzYxZmMzMjVkOTRmNmE5YzMx
MDM4MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKQEAgLTI3NTYsNyArMjc1Niw5IEBACiAJCTVDRDlGNTY3MUFBMEY3NDIwMERBNDVG
RiAvKiBERkFCeXRlY29kZUNvbXBpbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1QzM5MzA1RjFBQTBGNkE5MDAyOUM4MTYgLyogREZBQnl0ZWNvZGVD
b21waWxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTVDRDlGNTY4MUFBMEY3NDYwMERBNDVGRiAvKiBERkFCeXRlY29kZUludGVycHJldGVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzM5MzA2MTFB
QTBGNkE5MDAyOUM4MTYgLyogREZBQnl0ZWNvZGVJbnRlcnByZXRlci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTVDREQ4MzNEMUU0MzI0RDkwMDYy
MUU5MiAvKiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNERDgzM0IxRTQzMjRCQjAwNjIxRTkyIC8q
IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5jcHAgKi87IH07CisJCTVDREQ4MzNEMUU0MzI0
RDkwMDYyMUI4MyAvKiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VDb2NvYS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0REODMzQjFFNDMyNEJC
MDA2MjFCODMgLyogUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlQ29jb2EuY3BwICovOyB9Owog
CQk1Q0REODMzRTFFNDMyNERDMDA2MjFFOTIgLyogUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDREQ4
MzM5MUU0MzI0QkIwMDYyMUU5MiAvKiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuY3BwICov
OyB9OworCQk1Q0REODMzRTFFNDMyNERDMDA2MjFFODMgLyogUmVhbHRpbWVJbmNvbWluZ1ZpZGVv
U291cmNlQ29jb2EuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNUNERDgzMzkxRTQzMjRCQjAwNjIxRTgzIC8qIFJlYWx0aW1lSW5jb21pbmdWaWRlb1Nv
dXJjZUNvY29hLmNwcCAqLzsgfTsKIAkJNUNERDgzNjQxRTQzMjVBMDAwNjIxRTkyIC8qIExpYldl
YlJUQ0RhdGFDaGFubmVsSGFuZGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1Q0REODMzRjFFNDMyNTNEMDA2MjFFOTIgLyogTGliV2ViUlRDRGF0
YUNoYW5uZWxIYW5kbGVyLmNwcCAqLzsgfTsKIAkJNUNERkE2QzgxQUE0RjJEQTAwRUE4NzQ2IC8q
IENvbnRlbnRFeHRlbnNpb25BY3Rpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1Q0RGQTZDNzFBQTRGMkRBMDBFQTg3NDYgLyogQ29udGVudEV4dGVu
c2lvbkFjdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk1Q0U1RDlBQjFEQjg5QTAzMDBDRTdBOEQgLyogSlNUZXh0RGVjb2Rlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0U1RDlBNzFEQjg5
OUZDMDBDRTdBOEQgLyogSlNUZXh0RGVjb2Rlci5jcHAgKi87IH07CkBAIC0xMDY5MSw4ICsxMDY5
MywxMiBAQAogCQk1Q0JDOERBQjFBQUEzMDIyMDBFMUM4MDMgLyogTWVkaWFBY2Nlc3NpYmlsaXR5
U29mdExpbmsuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFBY2Nlc3Np
YmlsaXR5U29mdExpbmsuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNERDgzMzkx
RTQzMjRCQjAwNjIxRTkyIC8qIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZWFsdGltZUluY29taW5nVmlkZW9Tb3Vy
Y2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Q0REODMzQTFFNDMyNEJCMDA2
MjFFOTIgLyogUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk1Q0REODMzOTFFNDMyNEJCMDA2MjFFODMgLyogUmVhbHRpbWVJ
bmNvbWluZ1ZpZGVvU291cmNlQ29jb2EuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlQ29jb2EuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk1Q0REODMzQTFFNDMyNEJCMDA2MjFFODMgLyogUmVhbHRpbWVJ
bmNvbWluZ1ZpZGVvU291cmNlQ29jb2EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlQ29jb2EuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNUNERDgzM0IxRTQzMjRCQjAwNjIxRTkyIC8qIFJlYWx0aW1lT3V0Z29pbmdW
aWRlb1NvdXJjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZWFs
dGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1Q0REODMzQzFFNDMyNEJCMDA2MjFFOTIgLyogUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlYWx0aW1lT3V0Z29pbmdWaWRl
b1NvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Q0REODMzQjFFNDMyNEJC
MDA2MjFCODMgLyogUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlQ29jb2EuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNl
Q29jb2EuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Q0REODMzQzFFNDMyNEJC
MDA2MjFCODMgLyogUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlQ29jb2EuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlQ29jb2Eu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNERDgzM0YxRTQzMjUzRDAwNjIxRTky
IC8qIExpYldlYlJUQ0RhdGFDaGFubmVsSGFuZGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBMaWJXZWJSVENEYXRhQ2hhbm5lbEhhbmRsZXIuY3BwOyBwYXRoID0g
bGlid2VicnRjL0xpYldlYlJUQ0RhdGFDaGFubmVsSGFuZGxlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTVDREQ4MzQwMUU0MzI1M0QwMDYyMUU5MiAvKiBMaWJXZWJSVENEYXRh
Q2hhbm5lbEhhbmRsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTGliV2Vi
UlRDRGF0YUNoYW5uZWxIYW5kbGVyLmg7IHBhdGggPSBsaWJ3ZWJydGMvTGliV2ViUlRDRGF0YUNo
YW5uZWxIYW5kbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDREZBNkM3MUFB
NEYyREEwMEVBODc0NiAvKiBDb250ZW50RXh0ZW5zaW9uQWN0aW9ucy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDb250ZW50RXh0ZW5zaW9uQWN0aW9ucy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMTY0OTcsNiArMTY1MDMsOCBAQAogCQkJCTA3RkZERTY2MTgx
QUVENDIwMDcyRDQwOSAvKiBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5jcHAgKi8sCiAJCQkJMDdG
RkRFNjcxODFBRUQ0MjAwNzJENDA5IC8qIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmggKi8sCiAJ
CQkJNUVCQjg5MzgxQzc3QkRBNDAwQzY1RDQxIC8qIFBlZXJNZWRpYURlc2NyaXB0aW9uLmggKi8s
CisJCQkJNUNERDgzMzkxRTQzMjRCQjAwNjIxRTkyIC8qIFJlYWx0aW1lSW5jb21pbmdWaWRlb1Nv
dXJjZS5jcHAgKi8sCisJCQkJNUNERDgzM0ExRTQzMjRCQjAwNjIxRTkyIC8qIFJlYWx0aW1lSW5j
b21pbmdWaWRlb1NvdXJjZS5oICovLAogCQkJCTRBNEY2NTZCMUFBOTk3RjEwMEUzOENERCAvKiBS
ZWFsdGltZU1lZGlhU291cmNlLmNwcCAqLywKIAkJCQk0QTRGNjU2QzFBQTk5N0YxMDBFMzhDREQg
LyogUmVhbHRpbWVNZWRpYVNvdXJjZS5oICovLAogCQkJCTRBNEY2NTZEMUFBOTk3RjEwMEUzOENE
RCAvKiBSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzLmggKi8sCkBAIC0xNjUwNiw2ICsx
NjUxNCw4IEBACiAJCQkJNEE0RjY1NkYxQUE5OTdGMTAwRTM4Q0REIC8qIFJlYWx0aW1lTWVkaWFT
b3VyY2VTZXR0aW5ncy5oICovLAogCQkJCTJFQzQxREUyMUMwNDEwQTMwMEQyOTRGRSAvKiBSZWFs
dGltZU1lZGlhU291cmNlU3VwcG9ydGVkQ29uc3RyYWludHMuY3BwICovLAogCQkJCTA3QzFDMEU0
MUJGQjYwRUQwMEJEMjI1NiAvKiBSZWFsdGltZU1lZGlhU291cmNlU3VwcG9ydGVkQ29uc3RyYWlu
dHMuaCAqLywKKwkJCQk1Q0REODMzQjFFNDMyNEJCMDA2MjFFOTIgLyogUmVhbHRpbWVPdXRnb2lu
Z1ZpZGVvU291cmNlLmNwcCAqLywKKwkJCQk1Q0REODMzQzFFNDMyNEJCMDA2MjFFOTIgLyogUmVh
bHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmggKi8sCiAJCQkJMzEzNTkxMEMxRTdERENCNjAwRjMw
NjMwIC8qIFJUQ0J1bmRsZVBvbGljeS5oICovLAogCQkJCTA3MjIxQkEyMTdDRjBBRDQwMDg0OEU1
MSAvKiBSVENEYXRhQ2hhbm5lbEhhbmRsZXIuaCAqLywKIAkJCQkwNzIyMUJBMzE3Q0YwQUQ0MDA4
NDhFNTEgLyogUlRDRGF0YUNoYW5uZWxIYW5kbGVyQ2xpZW50LmggKi8sCkBAIC0xNjU1NiwxNCAr
MTY1NjYsMTQgQEAKIAkJCQkwN0VFNzZFRTFCRUE2MTk4MDBGODkxMzMgLyogTW9ja1JlYWx0aW1l
VmlkZW9Tb3VyY2VNYWMubW0gKi8sCiAJCQkJNDExMDNBQUExRTM5NzkwQTAwNzY5RjAzIC8qIFJl
YWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZS5jcHAgKi8sCiAJCQkJNDExMDNBQTkxRTM5NzkwQTAw
NzY5RjAzIC8qIFJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZS5oICovLAotCQkJCTVDREQ4MzM5
MUU0MzI0QkIwMDYyMUU5MiAvKiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuY3BwICovLAot
CQkJCTVDREQ4MzNBMUU0MzI0QkIwMDYyMUU5MiAvKiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3Vy
Y2UuaCAqLywKKwkJCQk1Q0REODMzOTFFNDMyNEJCMDA2MjFFODMgLyogUmVhbHRpbWVJbmNvbWlu
Z1ZpZGVvU291cmNlQ29jb2EuY3BwICovLAorCQkJCTVDREQ4MzNBMUU0MzI0QkIwMDYyMUU4MyAv
KiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VDb2NvYS5oICovLAogCQkJCTRBMEZGQUEzMUFB
RjVFRjYwMDYyODAzQiAvKiBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTWFjLmNwcCAqLywKIAkJ
CQk0QTBGRkFBNDFBQUY1RUY2MDA2MjgwM0IgLyogUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck1h
Yy5oICovLAogCQkJCTQxMTAzQUE3MUUzOTc5MEEwMDc2OUYwMyAvKiBSZWFsdGltZU91dGdvaW5n
QXVkaW9Tb3VyY2UuY3BwICovLAogCQkJCTQxMTAzQUE4MUUzOTc5MEEwMDc2OUYwMyAvKiBSZWFs
dGltZU91dGdvaW5nQXVkaW9Tb3VyY2UuaCAqLywKLQkJCQk1Q0REODMzQjFFNDMyNEJCMDA2MjFF
OTIgLyogUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmNwcCAqLywKLQkJCQk1Q0REODMzQzFF
NDMyNEJCMDA2MjFFOTIgLyogUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmggKi8sCisJCQkJ
NUNERDgzM0IxRTQzMjRCQjAwNjIxQjgzIC8qIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUNv
Y29hLmNwcCAqLywKKwkJCQk1Q0REODMzQzFFNDMyNEJCMDA2MjFCODMgLyogUmVhbHRpbWVPdXRn
b2luZ1ZpZGVvU291cmNlQ29jb2EuaCAqLywKIAkJCQkwN0Q2MzczRTFCQjBCMTEzMDAyNTZDRTkg
LyogV2ViQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMuaCAqLywKIAkJCQkwN0Q2MzczRjFCQjBC
MTEzMDAyNTZDRTkgLyogV2ViQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMubW0gKi8sCiAJCQkp
OwpAQCAtMzM1ODMsNiArMzM1OTMsNyBAQAogCQkJCUZEMzE2MDNCMTJCMDI2NzYwMEMxQTM1OSAv
KiBSZWFsdGltZUFuYWx5c2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQxMTAzQUFFMUUzOTc5
MTAwMDc2OUYwMyAvKiBSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2UuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNUNERDgzM0UxRTQzMjREQzAwNjIxRTkyIC8qIFJlYWx0aW1lSW5jb21pbmdWaWRl
b1NvdXJjZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1Q0REODMzRTFFNDMyNERDMDA2MjFFODMg
LyogUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlQ29jb2EuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNEE0RjY1NzAxQUE5OTdGMTAwRTM4Q0REIC8qIFJlYWx0aW1lTWVkaWFTb3VyY2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNEEwRkZBQTExQUFGNUVBMjAwNjI4MDNCIC8qIFJlYWx0aW1lTWVk
aWFTb3VyY2VDZW50ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNEEwRkZBQTUxQUFGNUVGNjAw
NjI4MDNCIC8qIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJNYWMuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC0zMzU5MCw2ICszMzYwMSw3IEBACiAJCQkJMkVDNDFERTQxQzA0MTBBMzAwRDI5NEZFIC8q
IFJlYWx0aW1lTWVkaWFTb3VyY2VTdXBwb3J0ZWRDb25zdHJhaW50cy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk0MTEwM0FBQjFFMzk3OTEwMDA3NjlGMDMgLyogUmVhbHRpbWVPdXRnb2luZ0F1ZGlv
U291cmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDREQ4MzNEMUU0MzI0RDkwMDYyMUU5MiAv
KiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNUNE
RDgzM0QxRTQzMjREOTAwNjIxQjgzIC8qIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUNvY29h
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZENDVBOTVBMTc1RDQxNzEwMEMyMUVDOCAvKiBSZWN0
YW5nbGVTaGFwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0FCNDE4MTEzRTM1NkU4MDBEOEFB
RjMgLyogUmVnaW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1NzhGNDQwMURFMEI2MzQwMDNE
RkM2QSAvKiBSZWplY3RlZFByb21pc2VUcmFja2VyLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVJbmNvbWlu
Z1ZpZGVvU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1Jl
YWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjU5YjQ2YmJmNDVkOGU2
YzE0Njg0MDQ5YWNhYWRjN2ZiMGJiN2E0YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5jcHAK
QEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisg
KiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tIHRoaXMKKyAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJl
YWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5oIgorCisjaWYgVVNFKExJQldFQlJUQykKKworI2lu
Y2x1ZGUgIkxvZ2dpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWFsdGltZUluY29t
aW5nVmlkZW9Tb3VyY2U6OlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZShydGM6OnNjb3BlZF9y
ZWZwdHI8d2VicnRjOjpWaWRlb1RyYWNrSW50ZXJmYWNlPiYmIHZpZGVvVHJhY2ssIFN0cmluZyYm
IHZpZGVvVHJhY2tJZCkKKyAgICA6IFJlYWx0aW1lTWVkaWFTb3VyY2UoV1RGTW92ZSh2aWRlb1Ry
YWNrSWQpLCBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpWaWRlbywgU3RyaW5nKCkpCisgICAg
LCBtX3ZpZGVvVHJhY2soV1RGTW92ZSh2aWRlb1RyYWNrKSkKK3sKKyAgICBtX2N1cnJlbnRTZXR0
aW5ncy5zZXRXaWR0aCg2NDApOworICAgIG1fY3VycmVudFNldHRpbmdzLnNldEhlaWdodCg0ODAp
OworICAgIG5vdGlmeU11dGVkQ2hhbmdlKCFtX3ZpZGVvVHJhY2spOworfQorCit2b2lkIFJlYWx0
aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6c3RhcnRQcm9kdWNpbmdEYXRhKCkKK3sKKyAgICBpZiAo
bV92aWRlb1RyYWNrKQorICAgICAgICBtX3ZpZGVvVHJhY2stPkFkZE9yVXBkYXRlU2luayh0aGlz
LCBydGM6OlZpZGVvU2lua1dhbnRzKCkpOworfQorCit2b2lkIFJlYWx0aW1lSW5jb21pbmdWaWRl
b1NvdXJjZTo6c2V0U291cmNlVHJhY2socnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9U
cmFja0ludGVyZmFjZT4mJiB0cmFjaykKK3sKKyAgICBBU1NFUlQoIW1fdmlkZW9UcmFjayk7Cisg
ICAgQVNTRVJUKHRyYWNrKTsKKworICAgIG1fdmlkZW9UcmFjayA9IFdURk1vdmUodHJhY2spOwor
ICAgIG5vdGlmeU11dGVkQ2hhbmdlKCFtX3ZpZGVvVHJhY2spOworICAgIGlmIChpc1Byb2R1Y2lu
Z0RhdGEoKSkKKyAgICAgICAgbV92aWRlb1RyYWNrLT5BZGRPclVwZGF0ZVNpbmsodGhpcywgcnRj
OjpWaWRlb1NpbmtXYW50cygpKTsKK30KKwordm9pZCBSZWFsdGltZUluY29taW5nVmlkZW9Tb3Vy
Y2U6OnN0b3BQcm9kdWNpbmdEYXRhKCkKK3sKKyAgICBpZiAobV92aWRlb1RyYWNrKQorICAgICAg
ICBtX3ZpZGVvVHJhY2stPlJlbW92ZVNpbmsodGhpcyk7Cit9CisKK2NvbnN0IFJlYWx0aW1lTWVk
aWFTb3VyY2VDYXBhYmlsaXRpZXMmIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6Y2FwYWJp
bGl0aWVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxp
dGllczo6ZW1wdHlDYXBhYmlsaXRpZXMoKTsKK30KKworY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJj
ZVNldHRpbmdzJiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6OnNldHRpbmdzKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9jdXJyZW50U2V0dGluZ3M7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIFVTRShMSUJXRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lSW5jb21pbmdWaWRl
b1NvdXJjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE1YmY1MDJmM2UyNWVhYjBjZDZhOTNlZjJiNGYwM2E0ZTBm
YTJkMTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuaApAQCAtMCwwICsxLDcxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogICAgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICog
ICAgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBFcmljc3NvbiBub3Ig
dGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICAgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2lmIFVTRShMSUJXRUJSVEMpCisKKyNpbmNsdWRlICJMaWJXZWJSVENN
YWNyb3MuaCIKKyNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNlLmgiCisjaW5jbHVkZSA8d2Vi
cnRjL2FwaS9tZWRpYXN0cmVhbWludGVyZmFjZS5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDYXB0dXJlRGV2aWNlOworCitjbGFz
cyBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UgOiBwdWJsaWMgUmVhbHRpbWVNZWRpYVNvdXJj
ZSwgcHJpdmF0ZSBydGM6OlZpZGVvU2lua0ludGVyZmFjZTx3ZWJydGM6OlZpZGVvRnJhbWU+IHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZT4gY3Jl
YXRlKHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvVHJhY2tJbnRlcmZhY2U+JiYsIFN0
cmluZyYmKTsKKyAgICB+UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlKCkgeyBzdG9wUHJvZHVj
aW5nRGF0YSgpOyB9CisKKyAgICB2b2lkIHNldFNvdXJjZVRyYWNrKHJ0Yzo6c2NvcGVkX3JlZnB0
cjx3ZWJydGM6OlZpZGVvVHJhY2tJbnRlcmZhY2U+JiYpOworCitwcm90ZWN0ZWQ6CisgICAgUmVh
bHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlKHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVv
VHJhY2tJbnRlcmZhY2U+JiYsIFN0cmluZyYmKTsKKworICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VT
ZXR0aW5ncyBtX2N1cnJlbnRTZXR0aW5nczsKKworcHJpdmF0ZToKKyAgICAvLyBSZWFsdGltZU1l
ZGlhU291cmNlIEFQSQorICAgIHZvaWQgc3RhcnRQcm9kdWNpbmdEYXRhKCkgZmluYWw7CisgICAg
dm9pZCBzdG9wUHJvZHVjaW5nRGF0YSgpICBmaW5hbDsKKworICAgIGNvbnN0IFJlYWx0aW1lTWVk
aWFTb3VyY2VDYXBhYmlsaXRpZXMmIGNhcGFiaWxpdGllcygpIGNvbnN0IGZpbmFsOworICAgIGNv
bnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyYgc2V0dGluZ3MoKSBjb25zdCBmaW5hbDsK
KworICAgIGJvb2wgYXBwbHlTaXplKGNvbnN0IEludFNpemUmKSBmaW5hbCB7IHJldHVybiB0cnVl
OyB9CisKKyAgICBydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb1RyYWNrSW50ZXJmYWNl
PiBtX3ZpZGVvVHJhY2s7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBVU0UoTElCV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMzU5ZGMxMTRhNTVlZjQ5MzQwOTA0M2E2ZmZkNjMxMjFlMWRhMmRiNwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1l
T3V0Z29pbmdWaWRlb1NvdXJjZS5jcHAKQEAgLTAsMCArMSwxODggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTcgQXBwbGUgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkLCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIHJlcXVpcmVkIHRvIGJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gbm9yIHRoZSBuYW1lcyBvZgor
ICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmgiCisKKyNpZiBVU0UoTElCV0VCUlRDKQor
CisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgPHdlYnJ0Yy9hcGkvdmlkZW8vaTQyMF9i
dWZmZXIuaD4KKyNpbmNsdWRlIDx3ZWJydGMvY29tbW9uX3ZpZGVvL2xpYnl1di9pbmNsdWRlL3dl
YnJ0Y19saWJ5dXYuaD4KKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKyNpbmNsdWRlIDx3
dGYvTWFpblRocmVhZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlYWx0aW1lT3V0Z29p
bmdWaWRlb1NvdXJjZTo6UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlKFJlZjxNZWRpYVN0cmVh
bVRyYWNrUHJpdmF0ZT4mJiB2aWRlb1NvdXJjZSkKKyAgICA6IG1fdmlkZW9Tb3VyY2UoV1RGTW92
ZSh2aWRlb1NvdXJjZSkpCisgICAgLCBtX2JsYWNrRnJhbWVUaW1lcigqdGhpcywgJlJlYWx0aW1l
T3V0Z29pbmdWaWRlb1NvdXJjZTo6c2VuZE9uZUJsYWNrRnJhbWUpCit7CisgICAgbV92aWRlb1Nv
dXJjZS0+YWRkT2JzZXJ2ZXIoKnRoaXMpOworICAgIGluaXRpYWxpemVGcm9tU291cmNlKCk7Cit9
CisKK2Jvb2wgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpzZXRTb3VyY2UoUmVmPE1lZGlh
U3RyZWFtVHJhY2tQcml2YXRlPiYmIG5ld1NvdXJjZSkKK3sKKyAgICBpZiAoIW1faW5pdGlhbFNl
dHRpbmdzKQorICAgICAgICBtX2luaXRpYWxTZXR0aW5ncyA9IG1fdmlkZW9Tb3VyY2UtPnNvdXJj
ZSgpLnNldHRpbmdzKCk7CisKKyAgICBtX3ZpZGVvU291cmNlLT5yZW1vdmVPYnNlcnZlcigqdGhp
cyk7CisgICAgbV92aWRlb1NvdXJjZSA9IFdURk1vdmUobmV3U291cmNlKTsKKyAgICBtX3ZpZGVv
U291cmNlLT5hZGRPYnNlcnZlcigqdGhpcyk7CisKKyAgICBpbml0aWFsaXplRnJvbVNvdXJjZSgp
OworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291
cmNlOjpzdG9wKCkKK3sKKyAgICBtX3ZpZGVvU291cmNlLT5yZW1vdmVPYnNlcnZlcigqdGhpcyk7
CisgICAgbV9ibGFja0ZyYW1lVGltZXIuc3RvcCgpOworICAgIG1faXNTdG9wcGVkID0gdHJ1ZTsK
K30KKwordm9pZCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnVwZGF0ZUJsYWNrRnJhbWVz
U2VuZGluZygpCit7CisgICAgaWYgKCFtX211dGVkICYmIG1fZW5hYmxlZCkgeworICAgICAgICBp
ZiAobV9ibGFja0ZyYW1lVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgICAgIG1fYmxhY2tGcmFt
ZVRpbWVyLnN0b3AoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNlbmRCbGFja0Zy
YW1lc0lmTmVlZGVkKCk7Cit9CisKK3ZvaWQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpz
b3VyY2VNdXRlZENoYW5nZWQoKQoreworICAgIEFTU0VSVChtX211dGVkICE9IG1fdmlkZW9Tb3Vy
Y2UtPm11dGVkKCkpOworCisgICAgbV9tdXRlZCA9IG1fdmlkZW9Tb3VyY2UtPm11dGVkKCk7CisK
KyAgICB1cGRhdGVCbGFja0ZyYW1lc1NlbmRpbmcoKTsKK30KKwordm9pZCBSZWFsdGltZU91dGdv
aW5nVmlkZW9Tb3VyY2U6OnNvdXJjZUVuYWJsZWRDaGFuZ2VkKCkKK3sKKyAgICBBU1NFUlQobV9l
bmFibGVkICE9IG1fdmlkZW9Tb3VyY2UtPmVuYWJsZWQoKSk7CisKKyAgICBtX2VuYWJsZWQgPSBt
X3ZpZGVvU291cmNlLT5lbmFibGVkKCk7CisKKyAgICB1cGRhdGVCbGFja0ZyYW1lc1NlbmRpbmco
KTsKK30KKwordm9pZCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OmluaXRpYWxpemVGcm9t
U291cmNlKCkKK3sKKyAgICBjb25zdCBhdXRvJiBzZXR0aW5ncyA9IG1fdmlkZW9Tb3VyY2UtPnNv
dXJjZSgpLnNldHRpbmdzKCk7CisgICAgbV93aWR0aCA9IHNldHRpbmdzLndpZHRoKCk7CisgICAg
bV9oZWlnaHQgPSBzZXR0aW5ncy5oZWlnaHQoKTsKKworICAgIG1fbXV0ZWQgPSBtX3ZpZGVvU291
cmNlLT5tdXRlZCgpOworICAgIG1fZW5hYmxlZCA9IG1fdmlkZW9Tb3VyY2UtPmVuYWJsZWQoKTsK
KworICAgIHVwZGF0ZUJsYWNrRnJhbWVzU2VuZGluZygpOworfQorCit2b2lkIFJlYWx0aW1lT3V0
Z29pbmdWaWRlb1NvdXJjZTo6QWRkT3JVcGRhdGVTaW5rKHJ0Yzo6VmlkZW9TaW5rSW50ZXJmYWNl
PHdlYnJ0Yzo6VmlkZW9GcmFtZT4qIHNpbmssIGNvbnN0IHJ0Yzo6VmlkZW9TaW5rV2FudHMmIHNp
bmtXYW50cykKK3sKKyAgICBBU1NFUlQoIXNpbmtXYW50cy5ibGFja19mcmFtZXMpOworCisgICAg
aWYgKHNpbmtXYW50cy5yb3RhdGlvbl9hcHBsaWVkKQorICAgICAgICBtX3Nob3VsZEFwcGx5Um90
YXRpb24gPSB0cnVlOworCisgICAgaWYgKCFtX3NpbmtzLmNvbnRhaW5zKHNpbmspKQorICAgICAg
ICBtX3NpbmtzLmFwcGVuZChzaW5rKTsKKworICAgIGNhbGxPbk1haW5UaHJlYWQoW3Byb3RlY3Rl
ZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0oKSB7CisgICAgICAgIHByb3RlY3RlZFRoaXMtPnNlbmRC
bGFja0ZyYW1lc0lmTmVlZGVkKCk7CisgICAgfSk7Cit9CisKK3ZvaWQgUmVhbHRpbWVPdXRnb2lu
Z1ZpZGVvU291cmNlOjpSZW1vdmVTaW5rKHJ0Yzo6VmlkZW9TaW5rSW50ZXJmYWNlPHdlYnJ0Yzo6
VmlkZW9GcmFtZT4qIHNpbmspCit7CisgICAgbV9zaW5rcy5yZW1vdmVGaXJzdChzaW5rKTsKKwor
ICAgIGlmIChtX3NpbmtzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FsbE9uTWFp
blRocmVhZChbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSgpIHsKKyAgICAgICAgaWYg
KHByb3RlY3RlZFRoaXMtPm1fYmxhY2tGcmFtZVRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgICAg
ICBwcm90ZWN0ZWRUaGlzLT5tX2JsYWNrRnJhbWVUaW1lci5zdG9wKCk7CisgICAgfSk7Cit9CisK
K3ZvaWQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpzZW5kQmxhY2tGcmFtZXNJZk5lZWRl
ZCgpCit7CisgICAgaWYgKG1fYmxhY2tGcmFtZVRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmICghbV9zaW5rcy5zaXplKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmICghbV9tdXRlZCAmJiBtX2VuYWJsZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICgh
bV93aWR0aCB8fCAhbV9oZWlnaHQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9ibGFj
a0ZyYW1lKSB7CisgICAgICAgIGF1dG8gd2lkdGggPSBtX3dpZHRoOworICAgICAgICBhdXRvIGhl
aWdodCA9IG1faGVpZ2h0OworICAgICAgICBpZiAobV9zaG91bGRBcHBseVJvdGF0aW9uICYmICht
X2N1cnJlbnRSb3RhdGlvbiA9PSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzAgfHwgbV9jdXJyZW50
Um90YXRpb24gPT0gd2VicnRjOjprVmlkZW9Sb3RhdGlvbl85MCkpCisgICAgICAgICAgICBzdGQ6
OnN3YXAod2lkdGgsIGhlaWdodCk7CisgICAgICAgIGF1dG8gZnJhbWUgPSBtX2J1ZmZlclBvb2wu
Q3JlYXRlQnVmZmVyKHdpZHRoLCBoZWlnaHQpOworICAgICAgICBBU1NFUlQoZnJhbWUpOworICAg
ICAgICBpZiAoIWZyYW1lKSB7CisgICAgICAgICAgICBSRUxFQVNFX0xPRyhXZWJSVEMsICJSZWFs
dGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnNlbmRCbGFja0ZyYW1lc0lmTmVlZGVkIHVuYWJsZSB0
byBzZW5kIGJsYWNrIGZyYW1lcyIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIHdlYnJ0Yzo6STQyMEJ1ZmZlcjo6U2V0QmxhY2soZnJhbWUuZ2V0KCkpOworICAgICAg
ICBtX2JsYWNrRnJhbWUgPSBXVEZNb3ZlKGZyYW1lKTsKKyAgICB9CisgICAgc2VuZE9uZUJsYWNr
RnJhbWUoKTsKKyAgICBtX2JsYWNrRnJhbWVUaW1lci5zdGFydFJlcGVhdGluZygxX3MpOworfQor
Cit2b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6c2VuZE9uZUJsYWNrRnJhbWUoKQor
eworICAgIFJFTEVBU0VfTE9HKE1lZGlhU3RyZWFtLCAiUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291
cmNlOjpzZW5kT25lQmxhY2tGcmFtZSIpOworICAgIHNlbmRGcmFtZShydGM6OnNjb3BlZF9yZWZw
dHI8d2VicnRjOjpWaWRlb0ZyYW1lQnVmZmVyPihtX2JsYWNrRnJhbWUpKTsKK30KKwordm9pZCBS
ZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnNlbmRGcmFtZShydGM6OnNjb3BlZF9yZWZwdHI8
d2VicnRjOjpWaWRlb0ZyYW1lQnVmZmVyPiYmIGJ1ZmZlcikKK3sKKyAgICBpbnQ2NF90IHRpbWVz
dGFtcE1pY3JvU2Vjb25kcyA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZU1TKCkgKiAxMDAw
OworICAgIHdlYnJ0Yzo6VmlkZW9GcmFtZSBmcmFtZShidWZmZXIsIG1fc2hvdWxkQXBwbHlSb3Rh
dGlvbiA/IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMCA6IG1fY3VycmVudFJvdGF0aW9uLCB0aW1l
c3RhbXBNaWNyb1NlY29uZHMpOworICAgIGZvciAoYXV0byogc2luayA6IG1fc2lua3MpCisgICAg
ICAgIHNpbmstPk9uRnJhbWUoZnJhbWUpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBVU0UoTElCV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2Uu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi45NjI2MWM0Yjc2NjAyMDkxN2NkMWU0OWUwOGRlZDI3MzhlM2VlMjM4Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVh
bHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmgKQEAgLTAsMCArMSwxMTYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkLCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIHJlcXVpcmVkIHRvIGJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShM
SUJXRUJSVEMpCisKKyNpbmNsdWRlICJMaWJXZWJSVENNYWNyb3MuaCIKKyNpbmNsdWRlICJNZWRp
YVN0cmVhbVRyYWNrUHJpdmF0ZS5oIgorI2luY2x1ZGUgPFRpbWVyLmg+CisjaW5jbHVkZSA8d2Vi
cnRjL2FwaS9tZWRpYXN0cmVhbWludGVyZmFjZS5oPgorI2luY2x1ZGUgPHdlYnJ0Yy9iYXNlL29w
dGlvbmFsLmg+CisjaW5jbHVkZSA8d2VicnRjL2NvbW1vbl92aWRlby9pbmNsdWRlL2k0MjBfYnVm
ZmVyX3Bvb2wuaD4KKyNpbmNsdWRlIDx3ZWJydGMvbWVkaWEvYmFzZS92aWRlb3NpbmtpbnRlcmZh
Y2UuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2Fm
ZVJlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSZWFsdGltZU91
dGdvaW5nVmlkZW9Tb3VyY2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8UmVhbHRpbWVP
dXRnb2luZ1ZpZGVvU291cmNlPiwgcHVibGljIHdlYnJ0Yzo6VmlkZW9UcmFja1NvdXJjZUludGVy
ZmFjZSwgcHJpdmF0ZSBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6T2JzZXJ2ZXIgeworcHVibGlj
OgorICAgIHN0YXRpYyBSZWY8UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlPiBjcmVhdGUoUmVm
PE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiYmIHZpZGVvU291cmNlKTsKKyAgICB+UmVhbHRpbWVP
dXRnb2luZ1ZpZGVvU291cmNlKCkgeyBzdG9wKCk7IH0KKworICAgIHZvaWQgc3RvcCgpOworICAg
IGJvb2wgc2V0U291cmNlKFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4mJik7CisgICAgTWVk
aWFTdHJlYW1UcmFja1ByaXZhdGUmIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmlkZW9Tb3Vy
Y2UuZ2V0KCk7IH0KKworICAgIGludCBBZGRSZWYoKSBjb25zdCBmaW5hbCB7IHJlZigpOyByZXR1
cm4gcmVmQ291bnQoKTsgfQorICAgIGludCBSZWxlYXNlKCkgY29uc3QgZmluYWwgeyBkZXJlZigp
OyByZXR1cm4gcmVmQ291bnQoKTsgfQorCisgICAgdm9pZCBzZXRBcHBseVJvdGF0aW9uKGJvb2wg
c2hvdWxkQXBwbHlSb3RhdGlvbikgeyBtX3Nob3VsZEFwcGx5Um90YXRpb24gPSBzaG91bGRBcHBs
eVJvdGF0aW9uOyB9CisKK3Byb3RlY3RlZDoKKyAgICBleHBsaWNpdCBSZWFsdGltZU91dGdvaW5n
VmlkZW9Tb3VyY2UoUmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiYmKTsKKworICAgIHZvaWQg
c2VuZEZyYW1lKHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvRnJhbWVCdWZmZXI+JiYp
OworCisgICAgVmVjdG9yPHJ0Yzo6VmlkZW9TaW5rSW50ZXJmYWNlPHdlYnJ0Yzo6VmlkZW9GcmFt
ZT4qPiBtX3NpbmtzOworICAgIHdlYnJ0Yzo6STQyMEJ1ZmZlclBvb2wgbV9idWZmZXJQb29sOwor
CisgICAgYm9vbCBtX2VuYWJsZWQgeyB0cnVlIH07CisgICAgYm9vbCBtX211dGVkIHsgZmFsc2Ug
fTsKKyAgICB1aW50MzJfdCBtX3dpZHRoIHsgMCB9OworICAgIHVpbnQzMl90IG1faGVpZ2h0IHsg
MCB9OworICAgIGJvb2wgbV9zaG91bGRBcHBseVJvdGF0aW9uIHsgZmFsc2UgfTsKKyAgICB3ZWJy
dGM6OlZpZGVvUm90YXRpb24gbV9jdXJyZW50Um90YXRpb24geyB3ZWJydGM6OmtWaWRlb1JvdGF0
aW9uXzAgfTsKKworcHJpdmF0ZToKKyAgICB2b2lkIHNlbmRCbGFja0ZyYW1lc0lmTmVlZGVkKCk7
CisgICAgdm9pZCBzZW5kT25lQmxhY2tGcmFtZSgpOworICAgIHZvaWQgaW5pdGlhbGl6ZUZyb21T
b3VyY2UoKTsKKyAgICB2b2lkIHVwZGF0ZUJsYWNrRnJhbWVzU2VuZGluZygpOworCisgICAgLy8g
Tm90aWZpZXIgQVBJCisgICAgdm9pZCBSZWdpc3Rlck9ic2VydmVyKHdlYnJ0Yzo6T2JzZXJ2ZXJJ
bnRlcmZhY2UqKSBmaW5hbCB7IH0KKyAgICB2b2lkIFVucmVnaXN0ZXJPYnNlcnZlcih3ZWJydGM6
Ok9ic2VydmVySW50ZXJmYWNlKikgZmluYWwgeyB9CisKKyAgICAvLyBWaWRlb1RyYWNrU291cmNl
SW50ZXJmYWNlIEFQSQorICAgIGJvb2wgaXNfc2NyZWVuY2FzdCgpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIGZhbHNlOyB9CisgICAgcnRjOjpPcHRpb25hbDxib29sPiBuZWVkc19kZW5vaXNpbmcoKSBj
b25zdCBmaW5hbCB7IHJldHVybiBydGM6Ok9wdGlvbmFsPGJvb2w+KCk7IH0KKyAgICBib29sIEdl
dFN0YXRzKFN0YXRzKikgZmluYWwgeyByZXR1cm4gZmFsc2U7IH07CisKKyAgICAvLyBNZWRpYVNv
dXJjZUludGVyZmFjZSBBUEkKKyAgICBTb3VyY2VTdGF0ZSBzdGF0ZSgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIFNvdXJjZVN0YXRlKCk7IH0KKyAgICBib29sIHJlbW90ZSgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIHRydWU7IH0KKworICAgIC8vIHJ0Yzo6VmlkZW9Tb3VyY2VJbnRlcmZhY2U8d2VicnRj
OjpWaWRlb0ZyYW1lPiBBUEkKKyAgICB2b2lkIEFkZE9yVXBkYXRlU2luayhydGM6OlZpZGVvU2lu
a0ludGVyZmFjZTx3ZWJydGM6OlZpZGVvRnJhbWU+KiwgY29uc3QgcnRjOjpWaWRlb1NpbmtXYW50
cyYpIGZpbmFsOworICAgIHZvaWQgUmVtb3ZlU2luayhydGM6OlZpZGVvU2lua0ludGVyZmFjZTx3
ZWJydGM6OlZpZGVvRnJhbWU+KikgZmluYWw7CisKKyAgICB2b2lkIHNvdXJjZU11dGVkQ2hhbmdl
ZCgpOworICAgIHZvaWQgc291cmNlRW5hYmxlZENoYW5nZWQoKTsKKworICAgIC8vIE1lZGlhU3Ry
ZWFtVHJhY2tQcml2YXRlOjpPYnNlcnZlciBBUEkKKyAgICB2b2lkIHRyYWNrTXV0ZWRDaGFuZ2Vk
KE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJikgZmluYWwgeyBzb3VyY2VNdXRlZENoYW5nZWQoKTsg
fQorICAgIHZvaWQgdHJhY2tFbmFibGVkQ2hhbmdlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYp
IGZpbmFsIHsgc291cmNlRW5hYmxlZENoYW5nZWQoKTsgfQorICAgIHZvaWQgdHJhY2tTZXR0aW5n
c0NoYW5nZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmKSBmaW5hbCB7IGluaXRpYWxpemVGcm9t
U291cmNlKCk7IH0KKyAgICB2b2lkIHNhbXBsZUJ1ZmZlclVwZGF0ZWQoTWVkaWFTdHJlYW1UcmFj
a1ByaXZhdGUmLCBNZWRpYVNhbXBsZSYpIG92ZXJyaWRlIHsgfQorICAgIHZvaWQgdHJhY2tFbmRl
ZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYpIGZpbmFsIHsgfQorCisgICAgUmVmPE1lZGlhU3Ry
ZWFtVHJhY2tQcml2YXRlPiBtX3ZpZGVvU291cmNlOworICAgIHN0ZDo6b3B0aW9uYWw8UmVhbHRp
bWVNZWRpYVNvdXJjZVNldHRpbmdzPiBtX2luaXRpYWxTZXR0aW5nczsKKyAgICBib29sIG1faXNT
dG9wcGVkIHsgZmFsc2UgfTsKKyAgICBUaW1lciBtX2JsYWNrRnJhbWVUaW1lcjsKKyAgICBydGM6
OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb0ZyYW1lQnVmZmVyPiBtX2JsYWNrRnJhbWU7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoTElCV0VCUlRDKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0
aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9tYWMvUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggYzI2MThkNjk1Mjc2M2ZlN2Q3YzRiNmI4Y2U0ZjljZGMxODI3YTM3
MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291
cmNlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIwNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0
aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotICogICAgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmgiCi0KLSNp
ZiBVU0UoTElCV0VCUlRDKQotCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIk1lZGlh
U2FtcGxlQVZGT2JqQy5oIgotI2luY2x1ZGUgPHdlYnJ0Yy9zZGsvb2JqYy9GcmFtZXdvcmsvQ2xh
c3Nlcy9WaWRlby9jb3JldmlkZW9fZnJhbWVfYnVmZmVyLmg+Ci0KLSNpbmNsdWRlICJDb3JlTWVk
aWFTb2Z0TGluay5oIgotI2luY2x1ZGUgIkNvcmVWaWRlb1NvZnRMaW5rLmgiCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotUmVmPFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZT4gUmVhbHRpbWVJ
bmNvbWluZ1ZpZGVvU291cmNlOjpjcmVhdGUocnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6Vmlk
ZW9UcmFja0ludGVyZmFjZT4mJiB2aWRlb1RyYWNrLCBTdHJpbmcmJiB0cmFja0lkKQotewotICAg
IGF1dG8gc291cmNlID0gYWRvcHRSZWYoKm5ldyBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2Uo
V1RGTW92ZSh2aWRlb1RyYWNrKSwgV1RGTW92ZSh0cmFja0lkKSkpOwotICAgIHNvdXJjZS0+c3Rh
cnQoKTsKLSAgICByZXR1cm4gc291cmNlOwotfQotCi1SZWFsdGltZUluY29taW5nVmlkZW9Tb3Vy
Y2U6OlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZShydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRj
OjpWaWRlb1RyYWNrSW50ZXJmYWNlPiYmIHZpZGVvVHJhY2ssIFN0cmluZyYmIHZpZGVvVHJhY2tJ
ZCkKLSAgICA6IFJlYWx0aW1lTWVkaWFTb3VyY2UoV1RGTW92ZSh2aWRlb1RyYWNrSWQpLCBSZWFs
dGltZU1lZGlhU291cmNlOjpUeXBlOjpWaWRlbywgU3RyaW5nKCkpCi0gICAgLCBtX3ZpZGVvVHJh
Y2soV1RGTW92ZSh2aWRlb1RyYWNrKSkKLXsKLSAgICBtX2N1cnJlbnRTZXR0aW5ncy5zZXRXaWR0
aCg2NDApOwotICAgIG1fY3VycmVudFNldHRpbmdzLnNldEhlaWdodCg0ODApOwotICAgIG5vdGlm
eU11dGVkQ2hhbmdlKCFtX3ZpZGVvVHJhY2spOwotfQotCi12b2lkIFJlYWx0aW1lSW5jb21pbmdW
aWRlb1NvdXJjZTo6c3RhcnRQcm9kdWNpbmdEYXRhKCkKLXsKLSAgICBpZiAobV92aWRlb1RyYWNr
KQotICAgICAgICBtX3ZpZGVvVHJhY2stPkFkZE9yVXBkYXRlU2luayh0aGlzLCBydGM6OlZpZGVv
U2lua1dhbnRzKCkpOwotfQotCi12b2lkIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6c2V0
U291cmNlVHJhY2socnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9UcmFja0ludGVyZmFj
ZT4mJiB0cmFjaykKLXsKLSAgICBBU1NFUlQoIW1fdmlkZW9UcmFjayk7Ci0gICAgQVNTRVJUKHRy
YWNrKTsKLQotICAgIG1fdmlkZW9UcmFjayA9IFdURk1vdmUodHJhY2spOwotICAgIG5vdGlmeU11
dGVkQ2hhbmdlKCFtX3ZpZGVvVHJhY2spOwotICAgIGlmIChpc1Byb2R1Y2luZ0RhdGEoKSkKLSAg
ICAgICAgbV92aWRlb1RyYWNrLT5BZGRPclVwZGF0ZVNpbmsodGhpcywgcnRjOjpWaWRlb1NpbmtX
YW50cygpKTsKLX0KLQotdm9pZCBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6OnN0b3BQcm9k
dWNpbmdEYXRhKCkKLXsKLSAgICBpZiAobV92aWRlb1RyYWNrKQotICAgICAgICBtX3ZpZGVvVHJh
Y2stPlJlbW92ZVNpbmsodGhpcyk7Ci19Ci0KLUNWUGl4ZWxCdWZmZXJSZWYgUmVhbHRpbWVJbmNv
bWluZ1ZpZGVvU291cmNlOjpwaXhlbEJ1ZmZlckZyb21WaWRlb0ZyYW1lKGNvbnN0IHdlYnJ0Yzo6
VmlkZW9GcmFtZSYgZnJhbWUpCi17Ci0gICAgaWYgKG11dGVkKCkpIHsKLSAgICAgICAgaWYgKCFt
X2JsYWNrRnJhbWUgfHwgbV9ibGFja0ZyYW1lV2lkdGggIT0gZnJhbWUud2lkdGgoKSB8fCBtX2Js
YWNrRnJhbWVIZWlnaHQgIT0gZnJhbWUuaGVpZ2h0KCkpIHsKLSAgICAgICAgICAgIENWUGl4ZWxC
dWZmZXJSZWYgcGl4ZWxCdWZmZXIgPSBudWxscHRyOwotICAgICAgICAgICAgYXV0byBzdGF0dXMg
PSBDVlBpeGVsQnVmZmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGZyYW1lLndpZHRoKCks
IGZyYW1lLmhlaWdodCgpLCBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyOFBsYW5hciwgbnVs
bHB0ciwgJnBpeGVsQnVmZmVyKTsKLSAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoc3RhdHVzLCBz
dGF0dXMgPT0gbm9FcnIpOwotCi0gICAgICAgICAgICBtX2JsYWNrRnJhbWUgPSBwaXhlbEJ1ZmZl
cjsKLSAgICAgICAgICAgIG1fYmxhY2tGcmFtZVdpZHRoID0gZnJhbWUud2lkdGgoKTsKLSAgICAg
ICAgICAgIG1fYmxhY2tGcmFtZUhlaWdodCA9IGZyYW1lLmhlaWdodCgpOwotCi0gICAgICAgICAg
ICBzdGF0dXMgPSBDVlBpeGVsQnVmZmVyTG9ja0Jhc2VBZGRyZXNzKHBpeGVsQnVmZmVyLCAwKTsK
LSAgICAgICAgICAgIEFTU0VSVChzdGF0dXMgPT0gbm9FcnIpOwotICAgICAgICAgICAgdm9pZCog
ZGF0YSA9IENWUGl4ZWxCdWZmZXJHZXRCYXNlQWRkcmVzcyhwaXhlbEJ1ZmZlcik7Ci0gICAgICAg
ICAgICBzaXplX3QgeUxlbmd0aCA9IGZyYW1lLndpZHRoKCkgKiBmcmFtZS5oZWlnaHQoKTsKLSAg
ICAgICAgICAgIG1lbXNldChkYXRhLCAwLCB5TGVuZ3RoKTsKLSAgICAgICAgICAgIG1lbXNldChz
dGF0aWNfY2FzdDx1aW50OF90Kj4oZGF0YSkgKyB5TGVuZ3RoLCAxMjgsIHlMZW5ndGggLyAyKTsK
LQotICAgICAgICAgICAgc3RhdHVzID0gQ1ZQaXhlbEJ1ZmZlclVubG9ja0Jhc2VBZGRyZXNzKHBp
eGVsQnVmZmVyLCAwKTsKLSAgICAgICAgICAgIEFTU0VSVCghc3RhdHVzKTsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gbV9ibGFja0ZyYW1lLmdldCgpOwotICAgIH0KLSAgICBhdXRvIGJ1ZmZl
ciA9IGZyYW1lLnZpZGVvX2ZyYW1lX2J1ZmZlcigpOwotICAgIEFTU0VSVChidWZmZXItPnR5cGUo
KSA9PSB3ZWJydGM6OlZpZGVvRnJhbWVCdWZmZXI6OlR5cGU6OmtOYXRpdmUpOwotICAgIHJldHVy
biBzdGF0aWNfY2FzdDx3ZWJydGM6OkNvcmVWaWRlb0ZyYW1lQnVmZmVyJj4oKmJ1ZmZlcikucGl4
ZWxfYnVmZmVyKCk7Ci19Ci0KLXZvaWQgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlOjpPbkZy
YW1lKGNvbnN0IHdlYnJ0Yzo6VmlkZW9GcmFtZSYgZnJhbWUpCi17Ci0gICAgaWYgKCFpc1Byb2R1
Y2luZ0RhdGEoKSkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVE
Ci0gICAgaWYgKCEoKyttX251bWJlck9mRnJhbWVzICUgMzApKQotICAgICAgICBSRUxFQVNFX0xP
RyhNZWRpYVN0cmVhbSwgIlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6T25GcmFtZSAlenUg
ZnJhbWUiLCBtX251bWJlck9mRnJhbWVzKTsKLSNlbmRpZgotCi0gICAgYXV0byBwaXhlbEJ1ZmZl
ciA9IHBpeGVsQnVmZmVyRnJvbVZpZGVvRnJhbWUoZnJhbWUpOwotCi0gICAgLy8gRklYTUU6IENv
bnZlcnQgdGltaW5nIGluZm9ybWF0aW9uIGZyb20gVmlkZW9GcmFtZSB0byBDTVNhbXBsZVRpbWlu
Z0luZm8uCi0gICAgLy8gRm9yIHRoZSBtb21lbnQsIHdlIHdpbGwgcHJldGVuZCB0aGF0IGZyYW1l
cyBzaG91bGQgYmUgcmVuZGVyZWQgYXNhcC4KLSAgICBDTVNhbXBsZVRpbWluZ0luZm8gdGltaW5n
SW5mbzsKLSAgICB0aW1pbmdJbmZvLnByZXNlbnRhdGlvblRpbWVTdGFtcCA9IGtDTVRpbWVJbnZh
bGlkOwotICAgIHRpbWluZ0luZm8uZGVjb2RlVGltZVN0YW1wID0ga0NNVGltZUludmFsaWQ7Ci0g
ICAgdGltaW5nSW5mby5kdXJhdGlvbiA9IGtDTVRpbWVJbnZhbGlkOwotCi0gICAgQ01WaWRlb0Zv
cm1hdERlc2NyaXB0aW9uUmVmIGZvcm1hdERlc2NyaXB0aW9uOwotICAgIE9TU3RhdHVzIG9zdGF0
dXMgPSBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25DcmVhdGVGb3JJbWFnZUJ1ZmZlcihrQ0ZBbGxv
Y2F0b3JEZWZhdWx0LCAoQ1ZJbWFnZUJ1ZmZlclJlZilwaXhlbEJ1ZmZlciwgJmZvcm1hdERlc2Ny
aXB0aW9uKTsKLSAgICBpZiAob3N0YXR1cyAhPSBub0VycikgewotICAgICAgICBMT0dfRVJST1Io
IkZhaWxlZCB0byBpbml0aWFsaXplIENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbjogJWQiLCBzdGF0
aWNfY2FzdDxpbnQ+KG9zdGF0dXMpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIENN
U2FtcGxlQnVmZmVyUmVmIHNhbXBsZUJ1ZmZlcjsKLSAgICBvc3RhdHVzID0gQ01TYW1wbGVCdWZm
ZXJDcmVhdGVSZWFkeVdpdGhJbWFnZUJ1ZmZlcihrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAoQ1ZJbWFn
ZUJ1ZmZlclJlZilwaXhlbEJ1ZmZlciwgZm9ybWF0RGVzY3JpcHRpb24sICZ0aW1pbmdJbmZvLCAm
c2FtcGxlQnVmZmVyKTsKLSAgICBpZiAob3N0YXR1cyAhPSBub0VycikgewotICAgICAgICBMT0df
RVJST1IoIkZhaWxlZCB0byBjcmVhdGUgdGhlIHNhbXBsZSBidWZmZXI6ICVkIiwgc3RhdGljX2Nh
c3Q8aW50Pihvc3RhdHVzKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgQ0ZSZWxlYXNl
KGZvcm1hdERlc2NyaXB0aW9uKTsKLQotICAgIGF1dG8gc2FtcGxlID0gYWRvcHRDRihzYW1wbGVC
dWZmZXIpOwotCi0gICAgQ0ZBcnJheVJlZiBhdHRhY2htZW50c0FycmF5ID0gQ01TYW1wbGVCdWZm
ZXJHZXRTYW1wbGVBdHRhY2htZW50c0FycmF5KHNhbXBsZUJ1ZmZlciwgdHJ1ZSk7Ci0gICAgZm9y
IChDRkluZGV4IGkgPSAwOyBpIDwgQ0ZBcnJheUdldENvdW50KGF0dGFjaG1lbnRzQXJyYXkpOyAr
K2kpIHsKLSAgICAgICAgQ0ZNdXRhYmxlRGljdGlvbmFyeVJlZiBhdHRhY2htZW50cyA9IChDRk11
dGFibGVEaWN0aW9uYXJ5UmVmKUNGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoYXR0YWNobWVudHNBcnJh
eSwgaSk7Ci0gICAgICAgIENGRGljdGlvbmFyeVNldFZhbHVlKGF0dGFjaG1lbnRzLCBrQ01TYW1w
bGVBdHRhY2htZW50S2V5X0Rpc3BsYXlJbW1lZGlhdGVseSwga0NGQm9vbGVhblRydWUpOwotICAg
IH0KLQotICAgIHVuc2lnbmVkIHdpZHRoID0gZnJhbWUud2lkdGgoKTsKLSAgICB1bnNpZ25lZCBo
ZWlnaHQgPSBmcmFtZS5oZWlnaHQoKTsKLQotICAgIE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9u
IHJvdGF0aW9uOwotICAgIHN3aXRjaCAoZnJhbWUucm90YXRpb24oKSkgewotICAgIGNhc2Ugd2Vi
cnRjOjprVmlkZW9Sb3RhdGlvbl8wOgotICAgICAgICByb3RhdGlvbiA9IE1lZGlhU2FtcGxlOjpW
aWRlb1JvdGF0aW9uOjpOb25lOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIHdlYnJ0Yzo6a1Zp
ZGVvUm90YXRpb25fMTgwOgotICAgICAgICByb3RhdGlvbiA9IE1lZGlhU2FtcGxlOjpWaWRlb1Jv
dGF0aW9uOjpVcHNpZGVEb3duOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIHdlYnJ0Yzo6a1Zp
ZGVvUm90YXRpb25fOTA6Ci0gICAgICAgIHJvdGF0aW9uID0gTWVkaWFTYW1wbGU6OlZpZGVvUm90
YXRpb246OlJpZ2h0OwotICAgICAgICBzdGQ6OnN3YXAod2lkdGgsIGhlaWdodCk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2Ugd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8yNzA6Ci0gICAgICAgIHJv
dGF0aW9uID0gTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246OkxlZnQ7Ci0gICAgICAgIHN0ZDo6
c3dhcCh3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgUmVmUHRy
PFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZT4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKLSAgICBj
YWxsT25NYWluVGhyZWFkKFtwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwg
c2FtcGxlID0gV1RGTW92ZShzYW1wbGUpLCB3aWR0aCwgaGVpZ2h0LCByb3RhdGlvbl0gewotICAg
ICAgICBwcm90ZWN0ZWRUaGlzLT5wcm9jZXNzTmV3U2FtcGxlKHNhbXBsZS5nZXQoKSwgd2lkdGgs
IGhlaWdodCwgcm90YXRpb24pOwotICAgIH0pOwotfQotCi12b2lkIFJlYWx0aW1lSW5jb21pbmdW
aWRlb1NvdXJjZTo6cHJvY2Vzc05ld1NhbXBsZShDTVNhbXBsZUJ1ZmZlclJlZiBzYW1wbGUsIHVu
c2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9u
IHJvdGF0aW9uKQotewotICAgIG1fYnVmZmVyID0gc2FtcGxlOwotICAgIGlmICh3aWR0aCAhPSBt
X2N1cnJlbnRTZXR0aW5ncy53aWR0aCgpIHx8IGhlaWdodCAhPSBtX2N1cnJlbnRTZXR0aW5ncy5o
ZWlnaHQoKSkgewotICAgICAgICBtX2N1cnJlbnRTZXR0aW5ncy5zZXRXaWR0aCh3aWR0aCk7Ci0g
ICAgICAgIG1fY3VycmVudFNldHRpbmdzLnNldEhlaWdodChoZWlnaHQpOwotICAgICAgICBzZXR0
aW5nc0RpZENoYW5nZSgpOwotICAgIH0KLQotICAgIHZpZGVvU2FtcGxlQXZhaWxhYmxlKE1lZGlh
U2FtcGxlQVZGT2JqQzo6Y3JlYXRlKHNhbXBsZSwgcm90YXRpb24pKTsKLX0KLQotY29uc3QgUmVh
bHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcyYgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNl
OjpjYXBhYmlsaXRpZXMoKSBjb25zdAotewotICAgIHJldHVybiBSZWFsdGltZU1lZGlhU291cmNl
Q2FwYWJpbGl0aWVzOjplbXB0eUNhcGFiaWxpdGllcygpOwotfQotCi1jb25zdCBSZWFsdGltZU1l
ZGlhU291cmNlU2V0dGluZ3MmIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6c2V0dGluZ3Mo
KSBjb25zdAotewotICAgIHJldHVybiBtX2N1cnJlbnRTZXR0aW5nczsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKExJQldFQlJUQykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUluY29taW5nVmlk
ZW9Tb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFs
dGltZUluY29taW5nVmlkZW9Tb3VyY2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MWViN2MzNjRmZTMyMzIyMjJlYWI0ZjI1YjdiNDEwMGNjOTEwMjgwOS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmgKKysrIC9kZXYvbnVs
bApAQCAtMSw4NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgotICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0
aGUgbmFtZSBvZiBFcmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAq
ICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20gdGhpcwotICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIFVTRShMSUJXRUJSVEMp
Ci0KLSNpbmNsdWRlICJMaWJXZWJSVENNYWNyb3MuaCIKLSNpbmNsdWRlICJSZWFsdGltZU1lZGlh
U291cmNlLmgiCi0jaW5jbHVkZSA8d2VicnRjL2FwaS9tZWRpYXN0cmVhbWludGVyZmFjZS5oPgot
I2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotdXNpbmcgQ01TYW1wbGVCdWZmZXJSZWYgPSBz
dHJ1Y3Qgb3BhcXVlQ01TYW1wbGVCdWZmZXIqOwotdXNpbmcgQ1ZQaXhlbEJ1ZmZlclJlZiA9IHN0
cnVjdCBfX0NWQnVmZmVyKjsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBDYXB0dXJl
RGV2aWNlOwotCi1jbGFzcyBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UgZmluYWwgOiBwdWJs
aWMgUmVhbHRpbWVNZWRpYVNvdXJjZSwgcHJpdmF0ZSBydGM6OlZpZGVvU2lua0ludGVyZmFjZTx3
ZWJydGM6OlZpZGVvRnJhbWU+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFJlYWx0aW1lSW5j
b21pbmdWaWRlb1NvdXJjZT4gY3JlYXRlKHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVv
VHJhY2tJbnRlcmZhY2U+JiYsIFN0cmluZyYmKTsKLSAgICB+UmVhbHRpbWVJbmNvbWluZ1ZpZGVv
U291cmNlKCkgeyBzdG9wUHJvZHVjaW5nRGF0YSgpOyB9Ci0KLSAgICB2b2lkIHNldFNvdXJjZVRy
YWNrKHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvVHJhY2tJbnRlcmZhY2U+JiYpOwot
Ci1wcml2YXRlOgotICAgIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZShydGM6OnNjb3BlZF9y
ZWZwdHI8d2VicnRjOjpWaWRlb1RyYWNrSW50ZXJmYWNlPiYmLCBTdHJpbmcmJik7Ci0KLSAgICAv
LyBSZWFsdGltZU1lZGlhU291cmNlIEFQSQotICAgIHZvaWQgc3RhcnRQcm9kdWNpbmdEYXRhKCkg
ZmluYWw7Ci0gICAgdm9pZCBzdG9wUHJvZHVjaW5nRGF0YSgpICBmaW5hbDsKLQotICAgIGNvbnN0
IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMmIGNhcGFiaWxpdGllcygpIGNvbnN0IGZp
bmFsOwotICAgIGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyYgc2V0dGluZ3MoKSBj
b25zdCBmaW5hbDsKLQotICAgIHZvaWQgcHJvY2Vzc05ld1NhbXBsZShDTVNhbXBsZUJ1ZmZlclJl
ZiwgdW5zaWduZWQsIHVuc2lnbmVkLCBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbik7Ci0KLSAg
ICBib29sIGFwcGx5U2l6ZShjb25zdCBJbnRTaXplJikgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQot
Ci0gICAgLy8gcnRjOjpWaWRlb1NpbmtJbnRlcmZhY2UKLSAgICB2b2lkIE9uRnJhbWUoY29uc3Qg
d2VicnRjOjpWaWRlb0ZyYW1lJikgZmluYWw7Ci0KLSAgICBDVlBpeGVsQnVmZmVyUmVmIHBpeGVs
QnVmZmVyRnJvbVZpZGVvRnJhbWUoY29uc3Qgd2VicnRjOjpWaWRlb0ZyYW1lJik7Ci0KLSAgICBS
ZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MgbV9jdXJyZW50U2V0dGluZ3M7Ci0gICAgcnRjOjpz
Y29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9UcmFja0ludGVyZmFjZT4gbV92aWRlb1RyYWNrOwot
ICAgIFJldGFpblB0cjxDTVNhbXBsZUJ1ZmZlclJlZj4gbV9idWZmZXI7Ci0gICAgUmV0YWluUHRy
PENWUGl4ZWxCdWZmZXJSZWY+IG1fYmxhY2tGcmFtZTsKLSAgICBpbnQgbV9ibGFja0ZyYW1lV2lk
dGggeyAwIH07Ci0gICAgaW50IG1fYmxhY2tGcmFtZUhlaWdodCB7IDAgfTsKLSNpZiAhUkVMRUFT
RV9MT0dfRElTQUJMRUQKLSAgICBzaXplX3QgbV9udW1iZXJPZkZyYW1lcyB7IDAgfTsKLSNlbmRp
ZgotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKExJQldFQlJU
QykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9S
ZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VDb2NvYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlQ29jb2EuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmVlNGEwNzE0NGZkZjhmOWMwNjM3OWZkMTM4MDUyMGIzMDEzZjliNmMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMv
UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlQ29jb2EuY3BwCkBAIC0wLDAgKzEsMTY2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogICAgaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUNvY29hLmgiCisKKyNpZiBVU0UoTElC
V0VCUlRDKQorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIk1lZGlhU2FtcGxlQVZG
T2JqQy5oIgorI2luY2x1ZGUgPHdlYnJ0Yy9zZGsvb2JqYy9GcmFtZXdvcmsvQ2xhc3Nlcy9WaWRl
by9jb3JldmlkZW9fZnJhbWVfYnVmZmVyLmg+CisKKyNpbmNsdWRlICJDb3JlTWVkaWFTb2Z0TGlu
ay5oIgorI2luY2x1ZGUgIkNvcmVWaWRlb1NvZnRMaW5rLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworUmVmPFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZT4gUmVhbHRpbWVJbmNvbWluZ1Zp
ZGVvU291cmNlOjpjcmVhdGUocnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9UcmFja0lu
dGVyZmFjZT4mJiB2aWRlb1RyYWNrLCBTdHJpbmcmJiB0cmFja0lkKQoreworICAgIGF1dG8gc291
cmNlID0gYWRvcHRSZWYoKm5ldyBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VDb2NvYShXVEZN
b3ZlKHZpZGVvVHJhY2spLCBXVEZNb3ZlKHRyYWNrSWQpKSk7CisgICAgc291cmNlLT5zdGFydCgp
OworICAgIHJldHVybiBXVEZNb3ZlKHNvdXJjZSk7Cit9CisKK1JlYWx0aW1lSW5jb21pbmdWaWRl
b1NvdXJjZUNvY29hOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VDb2NvYShydGM6OnNjb3Bl
ZF9yZWZwdHI8d2VicnRjOjpWaWRlb1RyYWNrSW50ZXJmYWNlPiYmIHZpZGVvVHJhY2ssIFN0cmlu
ZyYmIHZpZGVvVHJhY2tJZCkKKyAgICA6IFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZShXVEZN
b3ZlKHZpZGVvVHJhY2spLCBXVEZNb3ZlKHZpZGVvVHJhY2tJZCkpCit7Cit9CisKK0NWUGl4ZWxC
dWZmZXJSZWYgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlQ29jb2E6OnBpeGVsQnVmZmVyRnJv
bVZpZGVvRnJhbWUoY29uc3Qgd2VicnRjOjpWaWRlb0ZyYW1lJiBmcmFtZSkKK3sKKyAgICBpZiAo
bXV0ZWQoKSkgeworICAgICAgICBpZiAoIW1fYmxhY2tGcmFtZSB8fCBtX2JsYWNrRnJhbWVXaWR0
aCAhPSBmcmFtZS53aWR0aCgpIHx8IG1fYmxhY2tGcmFtZUhlaWdodCAhPSBmcmFtZS5oZWlnaHQo
KSkgeworICAgICAgICAgICAgQ1ZQaXhlbEJ1ZmZlclJlZiBwaXhlbEJ1ZmZlciA9IG51bGxwdHI7
CisgICAgICAgICAgICBhdXRvIHN0YXR1cyA9IENWUGl4ZWxCdWZmZXJDcmVhdGUoa0NGQWxsb2Nh
dG9yRGVmYXVsdCwgZnJhbWUud2lkdGgoKSwgZnJhbWUuaGVpZ2h0KCksIGtDVlBpeGVsRm9ybWF0
VHlwZV80MjBZcENiQ3I4UGxhbmFyLCBudWxscHRyLCAmcGl4ZWxCdWZmZXIpOworICAgICAgICAg
ICAgQVNTRVJUX1VOVVNFRChzdGF0dXMsIHN0YXR1cyA9PSBub0Vycik7CisKKyAgICAgICAgICAg
IG1fYmxhY2tGcmFtZSA9IHBpeGVsQnVmZmVyOworICAgICAgICAgICAgbV9ibGFja0ZyYW1lV2lk
dGggPSBmcmFtZS53aWR0aCgpOworICAgICAgICAgICAgbV9ibGFja0ZyYW1lSGVpZ2h0ID0gZnJh
bWUuaGVpZ2h0KCk7CisKKyAgICAgICAgICAgIHN0YXR1cyA9IENWUGl4ZWxCdWZmZXJMb2NrQmFz
ZUFkZHJlc3MocGl4ZWxCdWZmZXIsIDApOworICAgICAgICAgICAgQVNTRVJUKHN0YXR1cyA9PSBu
b0Vycik7CisgICAgICAgICAgICB2b2lkKiBkYXRhID0gQ1ZQaXhlbEJ1ZmZlckdldEJhc2VBZGRy
ZXNzKHBpeGVsQnVmZmVyKTsKKyAgICAgICAgICAgIHNpemVfdCB5TGVuZ3RoID0gZnJhbWUud2lk
dGgoKSAqIGZyYW1lLmhlaWdodCgpOworICAgICAgICAgICAgbWVtc2V0KGRhdGEsIDAsIHlMZW5n
dGgpOworICAgICAgICAgICAgbWVtc2V0KHN0YXRpY19jYXN0PHVpbnQ4X3QqPihkYXRhKSArIHlM
ZW5ndGgsIDEyOCwgeUxlbmd0aCAvIDIpOworCisgICAgICAgICAgICBzdGF0dXMgPSBDVlBpeGVs
QnVmZmVyVW5sb2NrQmFzZUFkZHJlc3MocGl4ZWxCdWZmZXIsIDApOworICAgICAgICAgICAgQVNT
RVJUKCFzdGF0dXMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtX2JsYWNrRnJhbWUuZ2V0
KCk7CisgICAgfQorICAgIGF1dG8gYnVmZmVyID0gZnJhbWUudmlkZW9fZnJhbWVfYnVmZmVyKCk7
CisgICAgQVNTRVJUKGJ1ZmZlci0+dHlwZSgpID09IHdlYnJ0Yzo6VmlkZW9GcmFtZUJ1ZmZlcjo6
VHlwZTo6a05hdGl2ZSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHdlYnJ0Yzo6Q29yZVZpZGVv
RnJhbWVCdWZmZXImPigqYnVmZmVyKS5waXhlbF9idWZmZXIoKTsKK30KKwordm9pZCBSZWFsdGlt
ZUluY29taW5nVmlkZW9Tb3VyY2VDb2NvYTo6T25GcmFtZShjb25zdCB3ZWJydGM6OlZpZGVvRnJh
bWUmIGZyYW1lKQoreworICAgIGlmICghaXNQcm9kdWNpbmdEYXRhKCkpCisgICAgICAgIHJldHVy
bjsKKworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgIGlmICghKCsrbV9udW1iZXJPZkZy
YW1lcyAlIDMwKSkKKyAgICAgICAgUkVMRUFTRV9MT0coTWVkaWFTdHJlYW0sICJSZWFsdGltZUlu
Y29taW5nVmlkZW9Tb3VyY2VDb2NvYTo6T25GcmFtZSAlenUgZnJhbWUiLCBtX251bWJlck9mRnJh
bWVzKTsKKyNlbmRpZgorCisgICAgYXV0byBwaXhlbEJ1ZmZlciA9IHBpeGVsQnVmZmVyRnJvbVZp
ZGVvRnJhbWUoZnJhbWUpOworCisgICAgLy8gRklYTUU6IENvbnZlcnQgdGltaW5nIGluZm9ybWF0
aW9uIGZyb20gVmlkZW9GcmFtZSB0byBDTVNhbXBsZVRpbWluZ0luZm8uCisgICAgLy8gRm9yIHRo
ZSBtb21lbnQsIHdlIHdpbGwgcHJldGVuZCB0aGF0IGZyYW1lcyBzaG91bGQgYmUgcmVuZGVyZWQg
YXNhcC4KKyAgICBDTVNhbXBsZVRpbWluZ0luZm8gdGltaW5nSW5mbzsKKyAgICB0aW1pbmdJbmZv
LnByZXNlbnRhdGlvblRpbWVTdGFtcCA9IGtDTVRpbWVJbnZhbGlkOworICAgIHRpbWluZ0luZm8u
ZGVjb2RlVGltZVN0YW1wID0ga0NNVGltZUludmFsaWQ7CisgICAgdGltaW5nSW5mby5kdXJhdGlv
biA9IGtDTVRpbWVJbnZhbGlkOworCisgICAgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uUmVmIGZv
cm1hdERlc2NyaXB0aW9uOworICAgIE9TU3RhdHVzIG9zdGF0dXMgPSBDTVZpZGVvRm9ybWF0RGVz
Y3JpcHRpb25DcmVhdGVGb3JJbWFnZUJ1ZmZlcihrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAoQ1ZJbWFn
ZUJ1ZmZlclJlZilwaXhlbEJ1ZmZlciwgJmZvcm1hdERlc2NyaXB0aW9uKTsKKyAgICBpZiAob3N0
YXR1cyAhPSBub0VycikgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBpbml0aWFsaXpl
IENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbjogJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KG9zdGF0dXMp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIENNU2FtcGxlQnVmZmVyUmVmIHNhbXBs
ZUJ1ZmZlcjsKKyAgICBvc3RhdHVzID0gQ01TYW1wbGVCdWZmZXJDcmVhdGVSZWFkeVdpdGhJbWFn
ZUJ1ZmZlcihrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAoQ1ZJbWFnZUJ1ZmZlclJlZilwaXhlbEJ1ZmZl
ciwgZm9ybWF0RGVzY3JpcHRpb24sICZ0aW1pbmdJbmZvLCAmc2FtcGxlQnVmZmVyKTsKKyAgICBp
ZiAob3N0YXR1cyAhPSBub0VycikgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVh
dGUgdGhlIHNhbXBsZSBidWZmZXI6ICVkIiwgc3RhdGljX2Nhc3Q8aW50Pihvc3RhdHVzKSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQ0ZSZWxlYXNlKGZvcm1hdERlc2NyaXB0aW9uKTsK
KworICAgIGF1dG8gc2FtcGxlID0gYWRvcHRDRihzYW1wbGVCdWZmZXIpOworCisgICAgQ0ZBcnJh
eVJlZiBhdHRhY2htZW50c0FycmF5ID0gQ01TYW1wbGVCdWZmZXJHZXRTYW1wbGVBdHRhY2htZW50
c0FycmF5KHNhbXBsZUJ1ZmZlciwgdHJ1ZSk7CisgICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwg
Q0ZBcnJheUdldENvdW50KGF0dGFjaG1lbnRzQXJyYXkpOyArK2kpIHsKKyAgICAgICAgQ0ZNdXRh
YmxlRGljdGlvbmFyeVJlZiBhdHRhY2htZW50cyA9IChDRk11dGFibGVEaWN0aW9uYXJ5UmVmKUNG
QXJyYXlHZXRWYWx1ZUF0SW5kZXgoYXR0YWNobWVudHNBcnJheSwgaSk7CisgICAgICAgIENGRGlj
dGlvbmFyeVNldFZhbHVlKGF0dGFjaG1lbnRzLCBrQ01TYW1wbGVBdHRhY2htZW50S2V5X0Rpc3Bs
YXlJbW1lZGlhdGVseSwga0NGQm9vbGVhblRydWUpOworICAgIH0KKworICAgIHVuc2lnbmVkIHdp
ZHRoID0gZnJhbWUud2lkdGgoKTsKKyAgICB1bnNpZ25lZCBoZWlnaHQgPSBmcmFtZS5oZWlnaHQo
KTsKKworICAgIE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uIHJvdGF0aW9uOworICAgIHN3aXRj
aCAoZnJhbWUucm90YXRpb24oKSkgeworICAgIGNhc2Ugd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8w
OgorICAgICAgICByb3RhdGlvbiA9IE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpOb25lOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMTgwOgorICAg
ICAgICByb3RhdGlvbiA9IE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpVcHNpZGVEb3duOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fOTA6CisgICAg
ICAgIHJvdGF0aW9uID0gTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246OlJpZ2h0OworICAgICAg
ICBzdGQ6OnN3YXAod2lkdGgsIGhlaWdodCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugd2Vi
cnRjOjprVmlkZW9Sb3RhdGlvbl8yNzA6CisgICAgICAgIHJvdGF0aW9uID0gTWVkaWFTYW1wbGU6
OlZpZGVvUm90YXRpb246OkxlZnQ7CisgICAgICAgIHN0ZDo6c3dhcCh3aWR0aCwgaGVpZ2h0KTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgUmVmUHRyPFJlYWx0aW1lSW5jb21pbmdWaWRl
b1NvdXJjZUNvY29hPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIGNhbGxPbk1haW5UaHJlYWQo
W3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgc2FtcGxlID0gV1RGTW92ZShzYW1wbGUp
LCB3aWR0aCwgaGVpZ2h0LCByb3RhdGlvbl0geworICAgICAgICBwcm90ZWN0ZWRUaGlzLT5wcm9j
ZXNzTmV3U2FtcGxlKHNhbXBsZS5nZXQoKSwgd2lkdGgsIGhlaWdodCwgcm90YXRpb24pOworICAg
IH0pOworfQorCit2b2lkIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUNvY29hOjpwcm9jZXNz
TmV3U2FtcGxlKENNU2FtcGxlQnVmZmVyUmVmIHNhbXBsZSwgdW5zaWduZWQgd2lkdGgsIHVuc2ln
bmVkIGhlaWdodCwgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb24gcm90YXRpb24pCit7CisgICAg
bV9idWZmZXIgPSBzYW1wbGU7CisgICAgaWYgKHdpZHRoICE9IG1fY3VycmVudFNldHRpbmdzLndp
ZHRoKCkgfHwgaGVpZ2h0ICE9IG1fY3VycmVudFNldHRpbmdzLmhlaWdodCgpKSB7CisgICAgICAg
IG1fY3VycmVudFNldHRpbmdzLnNldFdpZHRoKHdpZHRoKTsKKyAgICAgICAgbV9jdXJyZW50U2V0
dGluZ3Muc2V0SGVpZ2h0KGhlaWdodCk7CisgICAgICAgIHNldHRpbmdzRGlkQ2hhbmdlKCk7Cisg
ICAgfQorCisgICAgdmlkZW9TYW1wbGVBdmFpbGFibGUoTWVkaWFTYW1wbGVBVkZPYmpDOjpjcmVh
dGUoc2FtcGxlLCByb3RhdGlvbikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBVU0UoTElCV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUNvY29hLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVJbmNvbWluZ1Zp
ZGVvU291cmNlQ29jb2EuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ODY4ZTY5ODA1ZmNkNGQ4MWVlMWNjNzc4MjEy
NzI3YzEzM2MzMGY4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUNvY29hLmgKQEAgLTAs
MCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaWYgVVNFKExJQldFQlJUQykKKworI2luY2x1ZGUgIlJlYWx0aW1lSW5jb21pbmdWaWRl
b1NvdXJjZS5oIgorCit1c2luZyBDTVNhbXBsZUJ1ZmZlclJlZiA9IHN0cnVjdCBvcGFxdWVDTVNh
bXBsZUJ1ZmZlcio7Cit1c2luZyBDVlBpeGVsQnVmZmVyUmVmID0gc3RydWN0IF9fQ1ZCdWZmZXIq
OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJlYWx0aW1lSW5jb21pbmdWaWRlb1Nv
dXJjZUNvY29hIGZpbmFsIDogcHVibGljIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZSB7Citw
cm90ZWN0ZWQ6CisgICAgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlQ29jb2EocnRjOjpzY29w
ZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9UcmFja0ludGVyZmFjZT4mJiwgU3RyaW5nJiYpOworCitw
cml2YXRlOgorICAgIHZvaWQgcHJvY2Vzc05ld1NhbXBsZShDTVNhbXBsZUJ1ZmZlclJlZiwgdW5z
aWduZWQsIHVuc2lnbmVkLCBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbik7CisgICAgQ1ZQaXhl
bEJ1ZmZlclJlZiBwaXhlbEJ1ZmZlckZyb21WaWRlb0ZyYW1lKGNvbnN0IHdlYnJ0Yzo6VmlkZW9G
cmFtZSYpOworCisgICAgLy8gcnRjOjpWaWRlb1NpbmtJbnRlcmZhY2UKKyAgICB2b2lkIE9uRnJh
bWUoY29uc3Qgd2VicnRjOjpWaWRlb0ZyYW1lJikgZmluYWw7CisKKyAgICBSZXRhaW5QdHI8Q01T
YW1wbGVCdWZmZXJSZWY+IG1fYnVmZmVyOworICAgIFJldGFpblB0cjxDVlBpeGVsQnVmZmVyUmVm
PiBtX2JsYWNrRnJhbWU7CisgICAgaW50IG1fYmxhY2tGcmFtZVdpZHRoIHsgMCB9OworICAgIGlu
dCBtX2JsYWNrRnJhbWVIZWlnaHQgeyAwIH07CisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisg
ICAgc2l6ZV90IG1fbnVtYmVyT2ZGcmFtZXMgeyAwIH07CisjZW5kaWYKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShMSUJXRUJSVEMpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1Zp
ZGVvU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9S
ZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAzZjQ1MGRmMzNjNmY2YTI1ODdkYTM5YjVlYzgyY2NmY2Q2MGEwZTdkLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsMjY2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBw
bGUgSW5jLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
LCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIHJlcXVpcmVk
IHRvIGJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVy
IHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCi0gKiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotICogU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKLSAq
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVhbHRpbWVPdXRn
b2luZ1ZpZGVvU291cmNlLmgiCi0KLSNpZiBVU0UoTElCV0VCUlRDKQotCi0jaW5jbHVkZSAiTG9n
Z2luZy5oIgotI2luY2x1ZGUgPHdlYnJ0Yy9hcGkvdmlkZW8vaTQyMF9idWZmZXIuaD4KLSNpbmNs
dWRlIDx3ZWJydGMvY29tbW9uX3ZpZGVvL2xpYnl1di9pbmNsdWRlL3dlYnJ0Y19saWJ5dXYuaD4K
LSNpbmNsdWRlIDx3ZWJydGMvc2RrL29iamMvRnJhbWV3b3JrL0NsYXNzZXMvVmlkZW8vY29yZXZp
ZGVvX2ZyYW1lX2J1ZmZlci5oPgotI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgotI2luY2x1
ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0KLSNpbmNsdWRlICJDb3JlTWVkaWFTb2Z0TGluay5oIgot
I2luY2x1ZGUgIkNvcmVWaWRlb1NvZnRMaW5rLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2Uo
UmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiYmIHZpZGVvU291cmNlKQotICAgIDogbV92aWRl
b1NvdXJjZShXVEZNb3ZlKHZpZGVvU291cmNlKSkKLSAgICAsIG1fYmxhY2tGcmFtZVRpbWVyKCp0
aGlzLCAmUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpzZW5kT25lQmxhY2tGcmFtZSkKLXsK
LSAgICBtX3ZpZGVvU291cmNlLT5hZGRPYnNlcnZlcigqdGhpcyk7Ci0gICAgaW5pdGlhbGl6ZUZy
b21Tb3VyY2UoKTsKLX0KLQotYm9vbCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnNldFNv
dXJjZShSZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYgbmV3U291cmNlKQotewotICAgIGlm
ICghbV9pbml0aWFsU2V0dGluZ3MpCi0gICAgICAgIG1faW5pdGlhbFNldHRpbmdzID0gbV92aWRl
b1NvdXJjZS0+c291cmNlKCkuc2V0dGluZ3MoKTsKLQotICAgIG1fdmlkZW9Tb3VyY2UtPnJlbW92
ZU9ic2VydmVyKCp0aGlzKTsKLSAgICBtX3ZpZGVvU291cmNlID0gV1RGTW92ZShuZXdTb3VyY2Up
OwotICAgIG1fdmlkZW9Tb3VyY2UtPmFkZE9ic2VydmVyKCp0aGlzKTsKLQotICAgIGluaXRpYWxp
emVGcm9tU291cmNlKCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBSZWFsdGltZU91
dGdvaW5nVmlkZW9Tb3VyY2U6OnN0b3AoKQotewotICAgIG1fdmlkZW9Tb3VyY2UtPnJlbW92ZU9i
c2VydmVyKCp0aGlzKTsKLSAgICBtX2JsYWNrRnJhbWVUaW1lci5zdG9wKCk7Ci0gICAgbV9pc1N0
b3BwZWQgPSB0cnVlOwotfQotCi12b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6dXBk
YXRlQmxhY2tGcmFtZXNTZW5kaW5nKCkKLXsKLSAgICBpZiAoIW1fbXV0ZWQgJiYgbV9lbmFibGVk
KSB7Ci0gICAgICAgIGlmIChtX2JsYWNrRnJhbWVUaW1lci5pc0FjdGl2ZSgpKQotICAgICAgICAg
ICAgbV9ibGFja0ZyYW1lVGltZXIuc3RvcCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgc2VuZEJsYWNrRnJhbWVzSWZOZWVkZWQoKTsKLX0KLQotdm9pZCBSZWFsdGltZU91dGdvaW5n
VmlkZW9Tb3VyY2U6OnNvdXJjZU11dGVkQ2hhbmdlZCgpCi17Ci0gICAgQVNTRVJUKG1fbXV0ZWQg
IT0gbV92aWRlb1NvdXJjZS0+bXV0ZWQoKSk7Ci0KLSAgICBtX211dGVkID0gbV92aWRlb1NvdXJj
ZS0+bXV0ZWQoKTsKLQotICAgIHVwZGF0ZUJsYWNrRnJhbWVzU2VuZGluZygpOwotfQotCi12b2lk
IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6c291cmNlRW5hYmxlZENoYW5nZWQoKQotewot
ICAgIEFTU0VSVChtX2VuYWJsZWQgIT0gbV92aWRlb1NvdXJjZS0+ZW5hYmxlZCgpKTsKLQotICAg
IG1fZW5hYmxlZCA9IG1fdmlkZW9Tb3VyY2UtPmVuYWJsZWQoKTsKLQotICAgIHVwZGF0ZUJsYWNr
RnJhbWVzU2VuZGluZygpOwotfQotCi12b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6
aW5pdGlhbGl6ZUZyb21Tb3VyY2UoKQotewotICAgIGNvbnN0IGF1dG8mIHNldHRpbmdzID0gbV92
aWRlb1NvdXJjZS0+c291cmNlKCkuc2V0dGluZ3MoKTsKLSAgICBtX3dpZHRoID0gc2V0dGluZ3Mu
d2lkdGgoKTsKLSAgICBtX2hlaWdodCA9IHNldHRpbmdzLmhlaWdodCgpOwotCi0gICAgbV9tdXRl
ZCA9IG1fdmlkZW9Tb3VyY2UtPm11dGVkKCk7Ci0gICAgbV9lbmFibGVkID0gbV92aWRlb1NvdXJj
ZS0+ZW5hYmxlZCgpOwotCi0gICAgdXBkYXRlQmxhY2tGcmFtZXNTZW5kaW5nKCk7Ci19Ci0KLWJv
b2wgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpHZXRTdGF0cyhTdGF0cyopCi17Ci0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6QWRk
T3JVcGRhdGVTaW5rKHJ0Yzo6VmlkZW9TaW5rSW50ZXJmYWNlPHdlYnJ0Yzo6VmlkZW9GcmFtZT4q
IHNpbmssIGNvbnN0IHJ0Yzo6VmlkZW9TaW5rV2FudHMmIHNpbmtXYW50cykKLXsKLSAgICBBU1NF
UlQoIXNpbmtXYW50cy5ibGFja19mcmFtZXMpOwotCi0gICAgaWYgKHNpbmtXYW50cy5yb3RhdGlv
bl9hcHBsaWVkKQotICAgICAgICBtX3Nob3VsZEFwcGx5Um90YXRpb24gPSB0cnVlOwotCi0gICAg
aWYgKCFtX3NpbmtzLmNvbnRhaW5zKHNpbmspKQotICAgICAgICBtX3NpbmtzLmFwcGVuZChzaW5r
KTsKLQotICAgIGNhbGxPbk1haW5UaHJlYWQoW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlz
KV0oKSB7Ci0gICAgICAgIHByb3RlY3RlZFRoaXMtPnNlbmRCbGFja0ZyYW1lc0lmTmVlZGVkKCk7
Ci0gICAgfSk7Ci19Ci0KLXZvaWQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpSZW1vdmVT
aW5rKHJ0Yzo6VmlkZW9TaW5rSW50ZXJmYWNlPHdlYnJ0Yzo6VmlkZW9GcmFtZT4qIHNpbmspCi17
Ci0gICAgbV9zaW5rcy5yZW1vdmVGaXJzdChzaW5rKTsKLQotICAgIGlmIChtX3NpbmtzLnNpemUo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhp
cyA9IG1ha2VSZWYoKnRoaXMpXSgpIHsKLSAgICAgICAgaWYgKHByb3RlY3RlZFRoaXMtPm1fYmxh
Y2tGcmFtZVRpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5tX2Js
YWNrRnJhbWVUaW1lci5zdG9wKCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgUmVhbHRpbWVPdXRnb2lu
Z1ZpZGVvU291cmNlOjpzZW5kQmxhY2tGcmFtZXNJZk5lZWRlZCgpCi17Ci0gICAgaWYgKG1fYmxh
Y2tGcmFtZVRpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9z
aW5rcy5zaXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9tdXRlZCAmJiBtX2Vu
YWJsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV93aWR0aCB8fCAhbV9oZWlnaHQp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9ibGFja0ZyYW1lKSB7Ci0gICAgICAgIGF1
dG8gd2lkdGggPSBtX3dpZHRoOwotICAgICAgICBhdXRvIGhlaWdodCA9IG1faGVpZ2h0OwotICAg
ICAgICBpZiAobV9zaG91bGRBcHBseVJvdGF0aW9uICYmIChtX2N1cnJlbnRSb3RhdGlvbiA9PSB3
ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzAgfHwgbV9jdXJyZW50Um90YXRpb24gPT0gd2VicnRjOjpr
VmlkZW9Sb3RhdGlvbl85MCkpCi0gICAgICAgICAgICBzdGQ6OnN3YXAod2lkdGgsIGhlaWdodCk7
Ci0gICAgICAgIGF1dG8gZnJhbWUgPSBtX2J1ZmZlclBvb2wuQ3JlYXRlQnVmZmVyKHdpZHRoLCBo
ZWlnaHQpOwotICAgICAgICBBU1NFUlQoZnJhbWUpOwotICAgICAgICBpZiAoIWZyYW1lKSB7Ci0g
ICAgICAgICAgICBSRUxFQVNFX0xPRyhXZWJSVEMsICJSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3Vy
Y2U6OnNlbmRCbGFja0ZyYW1lc0lmTmVlZGVkIHVuYWJsZSB0byBzZW5kIGJsYWNrIGZyYW1lcyIp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHdlYnJ0Yzo6STQyMEJ1
ZmZlcjo6U2V0QmxhY2soZnJhbWUuZ2V0KCkpOwotICAgICAgICBtX2JsYWNrRnJhbWUgPSBXVEZN
b3ZlKGZyYW1lKTsKLSAgICB9Ci0gICAgc2VuZE9uZUJsYWNrRnJhbWUoKTsKLSAgICBtX2JsYWNr
RnJhbWVUaW1lci5zdGFydFJlcGVhdGluZygxX3MpOwotfQotCi12b2lkIFJlYWx0aW1lT3V0Z29p
bmdWaWRlb1NvdXJjZTo6c2VuZE9uZUJsYWNrRnJhbWUoKQotewotICAgIFJFTEVBU0VfTE9HKE1l
ZGlhU3RyZWFtLCAiUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpzZW5kT25lQmxhY2tGcmFt
ZSIpOwotICAgIHNlbmRGcmFtZShydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb0ZyYW1l
QnVmZmVyPihtX2JsYWNrRnJhbWUpKTsKLX0KLQotdm9pZCBSZWFsdGltZU91dGdvaW5nVmlkZW9T
b3VyY2U6OnNlbmRGcmFtZShydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb0ZyYW1lQnVm
ZmVyPiYmIGJ1ZmZlcikKLXsKLSAgICBpbnQ2NF90IHRpbWVzdGFtcE1pY3JvU2Vjb25kcyA9IG1v
bm90b25pY2FsbHlJbmNyZWFzaW5nVGltZU1TKCkgKiAxMDAwOwotICAgIHdlYnJ0Yzo6VmlkZW9G
cmFtZSBmcmFtZShidWZmZXIsIG1fc2hvdWxkQXBwbHlSb3RhdGlvbiA/IHdlYnJ0Yzo6a1ZpZGVv
Um90YXRpb25fMCA6IG1fY3VycmVudFJvdGF0aW9uLCB0aW1lc3RhbXBNaWNyb1NlY29uZHMpOwot
ICAgIGZvciAoYXV0byogc2luayA6IG1fc2lua3MpCi0gICAgICAgIHNpbmstPk9uRnJhbWUoZnJh
bWUpOwotfQotCi12b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6dmlkZW9TYW1wbGVB
dmFpbGFibGUoTWVkaWFTYW1wbGUmIHNhbXBsZSkKLXsKLSAgICBpZiAoIW1fc2lua3Muc2l6ZSgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9tdXRlZCB8fCAhbV9lbmFibGVkKQotICAg
ICAgICByZXR1cm47Ci0KLSNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKLSAgICBpZiAoISgrK21f
bnVtYmVyT2ZGcmFtZXMgJSAzMCkpCi0gICAgICAgIFJFTEVBU0VfTE9HKE1lZGlhU3RyZWFtLCAi
UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpzZW5kRnJhbWUgJXp1IGZyYW1lIiwgbV9udW1i
ZXJPZkZyYW1lcyk7Ci0jZW5kaWYKLQotICAgIHN3aXRjaCAoc2FtcGxlLnZpZGVvUm90YXRpb24o
KSkgewotICAgIGNhc2UgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246Ok5vbmU6Ci0gICAgICAg
IG1fY3VycmVudFJvdGF0aW9uID0gd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8wOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpVcHNpZGVEb3duOgot
ICAgICAgICBtX2N1cnJlbnRSb3RhdGlvbiA9IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMTgwOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpSaWdo
dDoKLSAgICAgICAgbV9jdXJyZW50Um90YXRpb24gPSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzkw
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpM
ZWZ0OgotICAgICAgICBtX2N1cnJlbnRSb3RhdGlvbiA9IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25f
MjcwOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBBU1NFUlQoc2FtcGxlLnBsYXRmb3Jt
U2FtcGxlKCkudHlwZSA9PSBQbGF0Zm9ybVNhbXBsZTo6Q01TYW1wbGVCdWZmZXJUeXBlKTsKLSAg
ICBhdXRvIHBpeGVsQnVmZmVyID0gc3RhdGljX2Nhc3Q8Q1ZQaXhlbEJ1ZmZlclJlZj4oQ01TYW1w
bGVCdWZmZXJHZXRJbWFnZUJ1ZmZlcihzYW1wbGUucGxhdGZvcm1TYW1wbGUoKS5zYW1wbGUuY21T
YW1wbGVCdWZmZXIpKTsKLSAgICBhdXRvIHBpeGVsRm9ybWF0VHlwZSA9IENWUGl4ZWxCdWZmZXJH
ZXRQaXhlbEZvcm1hdFR5cGUocGl4ZWxCdWZmZXIpOwotCi0gICAgaWYgKHBpeGVsRm9ybWF0VHlw
ZSA9PSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyOFBsYW5hciB8fCBwaXhlbEZvcm1hdFR5
cGUgPT0ga0NWUGl4ZWxGb3JtYXRUeXBlXzQyMFlwQ2JDcjhCaVBsYW5hckZ1bGxSYW5nZSkgewot
ICAgICAgICBydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb0ZyYW1lQnVmZmVyPiBidWZm
ZXIgPSBuZXcgcnRjOjpSZWZDb3VudGVkT2JqZWN0PHdlYnJ0Yzo6Q29yZVZpZGVvRnJhbWVCdWZm
ZXI+KHBpeGVsQnVmZmVyKTsKLSAgICAgICAgaWYgKG1fc2hvdWxkQXBwbHlSb3RhdGlvbiAmJiBt
X2N1cnJlbnRSb3RhdGlvbiAhPSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzApIHsKLSAgICAgICAg
ICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbWFrZSBBVlZpZGVvQ2FwdHVyZVNvdXJjZSBoYW5kbGUg
dGhlIHJvdGF0aW9uIHdoZW5ldmVyIHBvc3NpYmxlLgotICAgICAgICAgICAgLy8gVGhpcyBpbXBs
ZW1lbnRhdGlvbiBpcyBpbmVmZmljaWVudCwgd2Ugc2hvdWxkIHJvdGF0ZSBvbiB0aGUgQ01TYW1w
bGVCdWZmZXIgZGlyZWN0bHkgaW5zdGVhZCBvZiBkb2luZyB0aGlzIGRvdWJsZSBhbGxvY2F0aW9u
LgotICAgICAgICAgICAgYXV0byByb3RhdGVkQnVmZmVyID0gYnVmZmVyLT5Ub0k0MjAoKTsKLSAg
ICAgICAgICAgIEFTU0VSVChyb3RhdGVkQnVmZmVyKTsKLSAgICAgICAgICAgIGJ1ZmZlciA9IHdl
YnJ0Yzo6STQyMEJ1ZmZlcjo6Um90YXRlKCpyb3RhdGVkQnVmZmVyLCBtX2N1cnJlbnRSb3RhdGlv
bik7Ci0gICAgICAgIH0KLSAgICAgICAgc2VuZEZyYW1lKFdURk1vdmUoYnVmZmVyKSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBDVlBpeGVsQnVmZmVyTG9ja0Jhc2VBZGRyZXNzKHBp
eGVsQnVmZmVyLCAwKTsKLSAgICBhdXRvKiBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PHVpbnQ4
X3QqPihDVlBpeGVsQnVmZmVyR2V0QmFzZUFkZHJlc3NPZlBsYW5lKHBpeGVsQnVmZmVyLCAwKSk7
Ci0KLSAgICBBU1NFUlQobV93aWR0aCk7Ci0gICAgQVNTRVJUKG1faGVpZ2h0KTsKLQotICAgIGF1
dG8gbmV3QnVmZmVyID0gbV9idWZmZXJQb29sLkNyZWF0ZUJ1ZmZlcihtX3dpZHRoLCBtX2hlaWdo
dCk7Ci0gICAgQVNTRVJUKG5ld0J1ZmZlcik7Ci0gICAgaWYgKCFuZXdCdWZmZXIpIHsKLSAgICAg
ICAgUkVMRUFTRV9MT0coV2ViUlRDLCAiUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjp2aWRl
b1NhbXBsZUF2YWlsYWJsZSB1bmFibGUgdG8gYWxsb2NhdGUgYnVmZmVyIGZvciBjb252ZXJzaW9u
IHRvIFlVViIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChwaXhlbEZvcm1hdFR5
cGUgPT0ga0NWUGl4ZWxGb3JtYXRUeXBlXzMyQkdSQSkKLSAgICAgICAgd2VicnRjOjpDb252ZXJ0
VG9JNDIwKHdlYnJ0Yzo6VmlkZW9UeXBlOjprQVJHQiwgc291cmNlLCAwLCAwLCBtX3dpZHRoLCBt
X2hlaWdodCwgMCwgd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8wLCBuZXdCdWZmZXIpOwotICAgIGVs
c2UgewotICAgICAgICBBU1NFUlQocGl4ZWxGb3JtYXRUeXBlID09IGtDVlBpeGVsRm9ybWF0VHlw
ZV8zMkFSR0IpOwotICAgICAgICB3ZWJydGM6OkNvbnZlcnRUb0k0MjAod2VicnRjOjpWaWRlb1R5
cGU6OmtCR1JBLCBzb3VyY2UsIDAsIDAsIG1fd2lkdGgsIG1faGVpZ2h0LCAwLCB3ZWJydGM6OmtW
aWRlb1JvdGF0aW9uXzAsIG5ld0J1ZmZlcik7Ci0gICAgfQotICAgIENWUGl4ZWxCdWZmZXJVbmxv
Y2tCYXNlQWRkcmVzcyhwaXhlbEJ1ZmZlciwgMCk7Ci0gICAgaWYgKG1fc2hvdWxkQXBwbHlSb3Rh
dGlvbiAmJiBtX2N1cnJlbnRSb3RhdGlvbiAhPSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzApCi0g
ICAgICAgIG5ld0J1ZmZlciA9IHdlYnJ0Yzo6STQyMEJ1ZmZlcjo6Um90YXRlKCpuZXdCdWZmZXIs
IG1fY3VycmVudFJvdGF0aW9uKTsKLSAgICBzZW5kRnJhbWUoV1RGTW92ZShuZXdCdWZmZXIpKTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKExJQldFQlJUQykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFs
dGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL21hYy9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMjdlNzhiNTE2NWQwNTY5NWZlMWE0NTg0MDg1OWJiMTFjMTJlNDg4Ni4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNl
LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
cmVxdWlyZWQgdG8gYmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4g
IE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAg
aXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IK
LSAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0gKiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUgotICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgVVNFKExJQldFQlJUQykK
LQotI2luY2x1ZGUgIkxpYldlYlJUQ01hY3Jvcy5oIgotI2luY2x1ZGUgIk1lZGlhU3RyZWFtVHJh
Y2tQcml2YXRlLmgiCi0jaW5jbHVkZSA8VGltZXIuaD4KLSNpbmNsdWRlIDx3ZWJydGMvYXBpL21l
ZGlhc3RyZWFtaW50ZXJmYWNlLmg+Ci0jaW5jbHVkZSA8d2VicnRjL2Jhc2Uvb3B0aW9uYWwuaD4K
LSNpbmNsdWRlIDx3ZWJydGMvY29tbW9uX3ZpZGVvL2luY2x1ZGUvaTQyMF9idWZmZXJfcG9vbC5o
PgotI2luY2x1ZGUgPHdlYnJ0Yy9tZWRpYS9iYXNlL3ZpZGVvc2lua2ludGVyZmFjZS5oPgotI2lu
Y2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRl
ZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFJlYWx0aW1lT3V0Z29pbmdWaWRl
b1NvdXJjZSBmaW5hbCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxSZWFsdGltZU91dGdv
aW5nVmlkZW9Tb3VyY2U+LCBwdWJsaWMgd2VicnRjOjpWaWRlb1RyYWNrU291cmNlSW50ZXJmYWNl
LCBwcml2YXRlIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpPYnNlcnZlciB7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIFJlZjxSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U+IGNyZWF0ZShSZWY8TWVk
aWFTdHJlYW1UcmFja1ByaXZhdGU+JiYgdmlkZW9Tb3VyY2UpIHsgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlKFdURk1vdmUodmlkZW9Tb3VyY2UpKSk7IH0K
LSAgICB+UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlKCkgeyBzdG9wKCk7IH0KLQotICAgIHZv
aWQgc3RvcCgpOwotICAgIGJvb2wgc2V0U291cmNlKFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0
ZT4mJik7Ci0gICAgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmIHNvdXJjZSgpIGNvbnN0IHsgcmV0
dXJuIG1fdmlkZW9Tb3VyY2UuZ2V0KCk7IH0KLQotICAgIGludCBBZGRSZWYoKSBjb25zdCBmaW5h
bCB7IHJlZigpOyByZXR1cm4gcmVmQ291bnQoKTsgfQotICAgIGludCBSZWxlYXNlKCkgY29uc3Qg
ZmluYWwgeyBkZXJlZigpOyByZXR1cm4gcmVmQ291bnQoKTsgfQotCi0gICAgdm9pZCBzZXRBcHBs
eVJvdGF0aW9uKGJvb2wgc2hvdWxkQXBwbHlSb3RhdGlvbikgeyBtX3Nob3VsZEFwcGx5Um90YXRp
b24gPSBzaG91bGRBcHBseVJvdGF0aW9uOyB9Ci0KLXByaXZhdGU6Ci0gICAgUmVhbHRpbWVPdXRn
b2luZ1ZpZGVvU291cmNlKFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4mJik7Ci0KLSAgICB2
b2lkIHNlbmRGcmFtZShydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb0ZyYW1lQnVmZmVy
PiYmKTsKLSAgICB2b2lkIHNlbmRCbGFja0ZyYW1lc0lmTmVlZGVkKCk7Ci0gICAgdm9pZCBzZW5k
T25lQmxhY2tGcmFtZSgpOwotICAgIHZvaWQgaW5pdGlhbGl6ZUZyb21Tb3VyY2UoKTsKLSAgICB2
b2lkIHVwZGF0ZUJsYWNrRnJhbWVzU2VuZGluZygpOwotCi0gICAgLy8gTm90aWZpZXIgQVBJCi0g
ICAgdm9pZCBSZWdpc3Rlck9ic2VydmVyKHdlYnJ0Yzo6T2JzZXJ2ZXJJbnRlcmZhY2UqKSBmaW5h
bCB7IH0KLSAgICB2b2lkIFVucmVnaXN0ZXJPYnNlcnZlcih3ZWJydGM6Ok9ic2VydmVySW50ZXJm
YWNlKikgZmluYWwgeyB9Ci0KLSAgICAvLyBWaWRlb1RyYWNrU291cmNlSW50ZXJmYWNlIEFQSQot
ICAgIGJvb2wgaXNfc2NyZWVuY2FzdCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9Ci0g
ICAgcnRjOjpPcHRpb25hbDxib29sPiBuZWVkc19kZW5vaXNpbmcoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBydGM6Ok9wdGlvbmFsPGJvb2w+KCk7IH0KLSAgICBib29sIEdldFN0YXRzKFN0YXRzKikg
ZmluYWw7Ci0KLSAgICAvLyBNZWRpYVNvdXJjZUludGVyZmFjZSBBUEkKLSAgICBTb3VyY2VTdGF0
ZSBzdGF0ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIFNvdXJjZVN0YXRlKCk7IH0KLSAgICBib29s
IHJlbW90ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KLQotICAgIC8vIHJ0Yzo6Vmlk
ZW9Tb3VyY2VJbnRlcmZhY2U8d2VicnRjOjpWaWRlb0ZyYW1lPiBBUEkKLSAgICB2b2lkIEFkZE9y
VXBkYXRlU2luayhydGM6OlZpZGVvU2lua0ludGVyZmFjZTx3ZWJydGM6OlZpZGVvRnJhbWU+Kiwg
Y29uc3QgcnRjOjpWaWRlb1NpbmtXYW50cyYpIGZpbmFsOwotICAgIHZvaWQgUmVtb3ZlU2luayhy
dGM6OlZpZGVvU2lua0ludGVyZmFjZTx3ZWJydGM6OlZpZGVvRnJhbWU+KikgZmluYWw7Ci0KLSAg
ICB2b2lkIHNvdXJjZU11dGVkQ2hhbmdlZCgpOwotICAgIHZvaWQgc291cmNlRW5hYmxlZENoYW5n
ZWQoKTsKLSAgICB2b2lkIHZpZGVvU2FtcGxlQXZhaWxhYmxlKE1lZGlhU2FtcGxlJik7Ci0KLSAg
ICAvLyBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6T2JzZXJ2ZXIgQVBJCi0gICAgdm9pZCB0cmFj
a011dGVkQ2hhbmdlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYpIGZpbmFsIHsgc291cmNlTXV0
ZWRDaGFuZ2VkKCk7IH0KLSAgICB2b2lkIHRyYWNrRW5hYmxlZENoYW5nZWQoTWVkaWFTdHJlYW1U
cmFja1ByaXZhdGUmKSBmaW5hbCB7IHNvdXJjZUVuYWJsZWRDaGFuZ2VkKCk7IH0KLSAgICB2b2lk
IHRyYWNrU2V0dGluZ3NDaGFuZ2VkKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJikgZmluYWwgeyBp
bml0aWFsaXplRnJvbVNvdXJjZSgpOyB9Ci0gICAgdm9pZCBzYW1wbGVCdWZmZXJVcGRhdGVkKE1l
ZGlhU3RyZWFtVHJhY2tQcml2YXRlJiwgTWVkaWFTYW1wbGUmIHNhbXBsZSkgZmluYWwgeyB2aWRl
b1NhbXBsZUF2YWlsYWJsZShzYW1wbGUpOyB9Ci0gICAgdm9pZCB0cmFja0VuZGVkKE1lZGlhU3Ry
ZWFtVHJhY2tQcml2YXRlJikgZmluYWwgeyB9Ci0KLSAgICBWZWN0b3I8cnRjOjpWaWRlb1NpbmtJ
bnRlcmZhY2U8d2VicnRjOjpWaWRlb0ZyYW1lPio+IG1fc2lua3M7Ci0gICAgd2VicnRjOjpJNDIw
QnVmZmVyUG9vbCBtX2J1ZmZlclBvb2w7Ci0gICAgUmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRl
PiBtX3ZpZGVvU291cmNlOwotICAgIGJvb2wgbV9lbmFibGVkIHsgdHJ1ZSB9OwotICAgIGJvb2wg
bV9tdXRlZCB7IGZhbHNlIH07Ci0gICAgc3RkOjpvcHRpb25hbDxSZWFsdGltZU1lZGlhU291cmNl
U2V0dGluZ3M+IG1faW5pdGlhbFNldHRpbmdzOwotICAgIHdlYnJ0Yzo6VmlkZW9Sb3RhdGlvbiBt
X2N1cnJlbnRSb3RhdGlvbiB7IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMCB9OwotICAgIHVpbnQz
Ml90IG1fd2lkdGggeyAwIH07Ci0gICAgdWludDMyX3QgbV9oZWlnaHQgeyAwIH07Ci0gICAgYm9v
bCBtX2lzU3RvcHBlZCB7IGZhbHNlIH07Ci0gICAgVGltZXIgbV9ibGFja0ZyYW1lVGltZXI7Ci0g
ICAgcnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9GcmFtZUJ1ZmZlcj4gbV9ibGFja0Zy
YW1lOwotICAgIGJvb2wgbV9zaG91bGRBcHBseVJvdGF0aW9uIHsgZmFsc2UgfTsKLSNpZiAhUkVM
RUFTRV9MT0dfRElTQUJMRUQKLSAgICBzaXplX3QgbV9udW1iZXJPZkZyYW1lcyB7IDAgfTsKLSNl
bmRpZgotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKExJQldF
QlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21h
Yy9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VDb2NvYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlQ29jb2Eu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjhhY2Y4NjJmMTdmYjgyYWFiZmNmMDA0ODI4ZWQ1ODE2MjM1MmUzZTYK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9t
YWMvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlQ29jb2EuY3BwCkBAIC0wLDAgKzEsMTIzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSByZXF1aXJlZCB0byBiZSBtZXQ6CisgKgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAq
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVPdXRn
b2luZ1ZpZGVvU291cmNlQ29jb2EuaCIKKworI2lmIFVTRShMSUJXRUJSVEMpCisKKyNpbmNsdWRl
ICJMb2dnaW5nLmgiCisjaW5jbHVkZSA8d2VicnRjL2FwaS92aWRlby9pNDIwX2J1ZmZlci5oPgor
I2luY2x1ZGUgPHdlYnJ0Yy9jb21tb25fdmlkZW8vbGlieXV2L2luY2x1ZGUvd2VicnRjX2xpYnl1
di5oPgorI2luY2x1ZGUgPHdlYnJ0Yy9zZGsvb2JqYy9GcmFtZXdvcmsvQ2xhc3Nlcy9WaWRlby9j
b3JldmlkZW9fZnJhbWVfYnVmZmVyLmg+CisKKyNpbmNsdWRlICJDb3JlTWVkaWFTb2Z0TGluay5o
IgorI2luY2x1ZGUgIkNvcmVWaWRlb1NvZnRMaW5rLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworUmVmPFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZT4gUmVhbHRpbWVPdXRnb2luZ1ZpZGVv
U291cmNlOjpjcmVhdGUoUmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiYmIHZpZGVvU291cmNl
KQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJj
ZShXVEZNb3ZlKHZpZGVvU291cmNlKSkpOworfQorCitSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3Vy
Y2VDb2NvYTo6UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlQ29jb2EoUmVmPE1lZGlhU3RyZWFt
VHJhY2tQcml2YXRlPiYmIHZpZGVvU291cmNlKQorICAgIDogUmVhbHRpbWVPdXRnb2luZ1ZpZGVv
U291cmNlKFdURk1vdmUodmlkZW9Tb3VyY2UpKQoreworfQorCit2b2lkIFJlYWx0aW1lT3V0Z29p
bmdWaWRlb1NvdXJjZUNvY29hOjpzYW1wbGVCdWZmZXJVcGRhdGVkKE1lZGlhU3RyZWFtVHJhY2tQ
cml2YXRlJiwgTWVkaWFTYW1wbGUmIHNhbXBsZSkKK3sKKyAgICBpZiAoIW1fc2lua3Muc2l6ZSgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9tdXRlZCB8fCAhbV9lbmFibGVkKQorICAg
ICAgICByZXR1cm47CisKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICBpZiAoISgrK21f
bnVtYmVyT2ZGcmFtZXMgJSAzMCkpCisgICAgICAgIFJFTEVBU0VfTE9HKE1lZGlhU3RyZWFtLCAi
UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlQ29jb2E6OnNlbmRGcmFtZSAlenUgZnJhbWUiLCBt
X251bWJlck9mRnJhbWVzKTsKKyNlbmRpZgorCisgICAgc3dpdGNoIChzYW1wbGUudmlkZW9Sb3Rh
dGlvbigpKSB7CisgICAgY2FzZSBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6Tm9uZToKKyAg
ICAgICAgbV9jdXJyZW50Um90YXRpb24gPSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzA7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246OlVwc2lkZURv
d246CisgICAgICAgIG1fY3VycmVudFJvdGF0aW9uID0gd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8x
ODA7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246
OlJpZ2h0OgorICAgICAgICBtX2N1cnJlbnRSb3RhdGlvbiA9IHdlYnJ0Yzo6a1ZpZGVvUm90YXRp
b25fOTA7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRp
b246OkxlZnQ6CisgICAgICAgIG1fY3VycmVudFJvdGF0aW9uID0gd2VicnRjOjprVmlkZW9Sb3Rh
dGlvbl8yNzA7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIEFTU0VSVChzYW1wbGUucGxh
dGZvcm1TYW1wbGUoKS50eXBlID09IFBsYXRmb3JtU2FtcGxlOjpDTVNhbXBsZUJ1ZmZlclR5cGUp
OworICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBzdGF0aWNfY2FzdDxDVlBpeGVsQnVmZmVyUmVmPihD
TVNhbXBsZUJ1ZmZlckdldEltYWdlQnVmZmVyKHNhbXBsZS5wbGF0Zm9ybVNhbXBsZSgpLnNhbXBs
ZS5jbVNhbXBsZUJ1ZmZlcikpOworICAgIGF1dG8gcGl4ZWxGb3JtYXRUeXBlID0gQ1ZQaXhlbEJ1
ZmZlckdldFBpeGVsRm9ybWF0VHlwZShwaXhlbEJ1ZmZlcik7CisKKyAgICBpZiAocGl4ZWxGb3Jt
YXRUeXBlID09IGtDVlBpeGVsRm9ybWF0VHlwZV80MjBZcENiQ3I4UGxhbmFyIHx8IHBpeGVsRm9y
bWF0VHlwZSA9PSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyOEJpUGxhbmFyRnVsbFJhbmdl
KSB7CisgICAgICAgIHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvRnJhbWVCdWZmZXI+
IGJ1ZmZlciA9IG5ldyBydGM6OlJlZkNvdW50ZWRPYmplY3Q8d2VicnRjOjpDb3JlVmlkZW9GcmFt
ZUJ1ZmZlcj4ocGl4ZWxCdWZmZXIpOworICAgICAgICBpZiAobV9zaG91bGRBcHBseVJvdGF0aW9u
ICYmIG1fY3VycmVudFJvdGF0aW9uICE9IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMCkgeworICAg
ICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBtYWtlIEFWVmlkZW9DYXB0dXJlU291cmNlIGhh
bmRsZSB0aGUgcm90YXRpb24gd2hlbmV2ZXIgcG9zc2libGUuCisgICAgICAgICAgICAvLyBUaGlz
IGltcGxlbWVudGF0aW9uIGlzIGluZWZmaWNpZW50LCB3ZSBzaG91bGQgcm90YXRlIG9uIHRoZSBD
TVNhbXBsZUJ1ZmZlciBkaXJlY3RseSBpbnN0ZWFkIG9mIGRvaW5nIHRoaXMgZG91YmxlIGFsbG9j
YXRpb24uCisgICAgICAgICAgICBhdXRvIHJvdGF0ZWRCdWZmZXIgPSBidWZmZXItPlRvSTQyMCgp
OworICAgICAgICAgICAgQVNTRVJUKHJvdGF0ZWRCdWZmZXIpOworICAgICAgICAgICAgYnVmZmVy
ID0gd2VicnRjOjpJNDIwQnVmZmVyOjpSb3RhdGUoKnJvdGF0ZWRCdWZmZXIsIG1fY3VycmVudFJv
dGF0aW9uKTsKKyAgICAgICAgfQorICAgICAgICBzZW5kRnJhbWUoV1RGTW92ZShidWZmZXIpKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIENWUGl4ZWxCdWZmZXJMb2NrQmFzZUFkZHJl
c3MocGl4ZWxCdWZmZXIsIDApOworICAgIGF1dG8qIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDhfdCo+KENWUGl4ZWxCdWZmZXJHZXRCYXNlQWRkcmVzc09mUGxhbmUocGl4ZWxCdWZmZXIs
IDApKTsKKworICAgIEFTU0VSVChtX3dpZHRoKTsKKyAgICBBU1NFUlQobV9oZWlnaHQpOworCisg
ICAgYXV0byBuZXdCdWZmZXIgPSBtX2J1ZmZlclBvb2wuQ3JlYXRlQnVmZmVyKG1fd2lkdGgsIG1f
aGVpZ2h0KTsKKyAgICBBU1NFUlQobmV3QnVmZmVyKTsKKyAgICBpZiAoIW5ld0J1ZmZlcikgewor
ICAgICAgICBSRUxFQVNFX0xPRyhXZWJSVEMsICJSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VD
b2NvYTo6dmlkZW9TYW1wbGVBdmFpbGFibGUgdW5hYmxlIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3Ig
Y29udmVyc2lvbiB0byBZVVYiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAocGl4
ZWxGb3JtYXRUeXBlID09IGtDVlBpeGVsRm9ybWF0VHlwZV8zMkJHUkEpCisgICAgICAgIHdlYnJ0
Yzo6Q29udmVydFRvSTQyMCh3ZWJydGM6OlZpZGVvVHlwZTo6a0FSR0IsIHNvdXJjZSwgMCwgMCwg
bV93aWR0aCwgbV9oZWlnaHQsIDAsIHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMCwgbmV3QnVmZmVy
KTsKKyAgICBlbHNlIHsKKyAgICAgICAgQVNTRVJUKHBpeGVsRm9ybWF0VHlwZSA9PSBrQ1ZQaXhl
bEZvcm1hdFR5cGVfMzJBUkdCKTsKKyAgICAgICAgd2VicnRjOjpDb252ZXJ0VG9JNDIwKHdlYnJ0
Yzo6VmlkZW9UeXBlOjprQkdSQSwgc291cmNlLCAwLCAwLCBtX3dpZHRoLCBtX2hlaWdodCwgMCwg
d2VicnRjOjprVmlkZW9Sb3RhdGlvbl8wLCBuZXdCdWZmZXIpOworICAgIH0KKyAgICBDVlBpeGVs
QnVmZmVyVW5sb2NrQmFzZUFkZHJlc3MocGl4ZWxCdWZmZXIsIDApOworICAgIGlmIChtX3Nob3Vs
ZEFwcGx5Um90YXRpb24gJiYgbV9jdXJyZW50Um90YXRpb24gIT0gd2VicnRjOjprVmlkZW9Sb3Rh
dGlvbl8wKQorICAgICAgICBuZXdCdWZmZXIgPSB3ZWJydGM6Okk0MjBCdWZmZXI6OlJvdGF0ZSgq
bmV3QnVmZmVyLCBtX2N1cnJlbnRSb3RhdGlvbik7CisgICAgc2VuZEZyYW1lKFdURk1vdmUobmV3
QnVmZmVyKSk7Cit9CisKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNF
KExJQldFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL21hYy9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VDb2NvYS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUNv
Y29hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNmVjZWVkYzdlNzA5M2RlMzJmNWFiN2UzNGFmMDhkMDgwNzMzODYx
YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L21hYy9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VDb2NvYS5oCkBAIC0wLDAgKzEsNDkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkLCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIHJlcXVpcmVkIHRvIGJlIG1ldDoKKyAqCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICog
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKExJQldFQlJUQykKKworI2luY2x1
ZGUgIlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUNvY29hIGZpbmFsIDogcHVibGlj
IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZSB7Citwcm90ZWN0ZWQ6CisgICAgZXhwbGljaXQg
UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlQ29jb2EoUmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2
YXRlPiYmKTsKKworcHJpdmF0ZToKKyAgICAvLyBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6T2Jz
ZXJ2ZXIgQVBJCisgICAgdm9pZCBzYW1wbGVCdWZmZXJVcGRhdGVkKE1lZGlhU3RyZWFtVHJhY2tQ
cml2YXRlJiwgTWVkaWFTYW1wbGUmKSBmaW5hbDsKKworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxF
RAorICAgIHNpemVfdCBtX251bWJlck9mRnJhbWVzIHsgMCB9OworI2VuZGlmCit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoTElCV0VCUlRDKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>323403</attachid>
            <date>2017-10-11 03:49:03 -0700</date>
            <delta_ts>2017-10-11 03:58:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177869-20171011124900.patch</filename>
            <type>text/plain</type>
            <size>77063</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIzMTcyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjQ2ZDRjMWU3NWQxMzU4
MjY2YTNkNTViMGVmMWU5MWJjYWRmZTdhYS4uMjA2MGJkNDU4M2Q3NWQyMzQwNzMxYmJlMjU5Njc3
MGRiMjI2NDYzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDE3LTEwLTExICBBbGVq
YW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisgICAgICAgIE1ha2UgUmVhbHRp
bWVJbmNvbWluZ1ZpZGVvU291cmNlcyBhbmQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlcyBw
b3J0IGFnbm9zdGljCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzc4NjkKKworICAgICAgICBSZXZpZXdlZCBieSBZb3Vlbm4gRmFibGV0LgorCisgICAg
ICAgIFJlZmFjdG9yIHRoZSBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UgYW5kIFJlYWx0aW1l
T3V0Z29pbmdWaWRlb1NvdXJjZSBjbGFzc2VzLAorICAgICAgICBtb3ZlIHRoZSBtYWMgc3BlY2lm
aWMgY29kZSB0byBhIGRpZmZlcmVudCBjbGFzcy4gVGhpcyB3YXkgd2UgY2FuIHVzZSB0aGVtIGZy
b20KKyAgICAgICAgb3RoZXIgcG9ydHMuCisKKyAgICAgICAgTm8gbmV3IGZ1bmN0aW9uYWxpdHks
IGp1c3QgYSByZWZhY3Rvci4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAq
IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6UmVhbHRpbWVJbmNvbWlu
Z1ZpZGVvU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdWaWRlb1Nv
dXJjZTo6c3RhcnRQcm9kdWNpbmdEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5j
b21pbmdWaWRlb1NvdXJjZTo6c2V0U291cmNlVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVh
bHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlOjpzdG9wUHJvZHVjaW5nRGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6OmNhcGFiaWxpdGllcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6OnNldHRpbmdz
IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZUluY29taW5n
VmlkZW9Tb3VyY2UuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5oLgorICAgICAgICAqIHBsYXRm
b3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5jcHA6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRn
b2luZ1ZpZGVvU291cmNlLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdW
aWRlb1NvdXJjZTo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFs
dGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuaC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6dmlkZW9TYW1wbGVB
dmFpbGFibGUpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUlu
Y29taW5nVmlkZW9Tb3VyY2VNYWMuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5jcHAuCisg
ICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWM6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWM6OlJlYWx0
aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1hYyk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUlu
Y29taW5nVmlkZW9Tb3VyY2VNYWM6OnBpeGVsQnVmZmVyRnJvbVZpZGVvRnJhbWUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTWFjOjpPbkZyYW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1hYzo6cHJvY2Vzc05l
d1NhbXBsZSk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lSW5j
b21pbmdWaWRlb1NvdXJjZU1hYy5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5oLgorICAgICAg
ICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VN
YWMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdWaWRlb1Nv
dXJjZU1hYzo6UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTWFjKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZU1hYzo6dmlkZW9TYW1wbGVBdmFpbGFibGUp
OgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU91dGdvaW5nVmlk
ZW9Tb3VyY2VNYWMuaDogQWRkZWQuCisKIDIwMTctMTAtMTEgIEFsaWNpYSBCb3lhIEdhcmPDrWEg
IDxhYm95YUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtNU0VdW0dTdHJlYW1lcl0gQWRkIGR1bXAg
b2YgYXBwZW5kIHBpcGVsaW5lCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3Rz
LnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDg1Y2M3OTA1OTYzOWM5
NTc5NGU5NzMzMTcyZDY3MmRkNjMyZDU5OWIuLjQxZGNhOTA0ZWYwNDFjMmY4MTE0YjA5ODMwZDA0
MWVjMThkNzcyM2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cisr
KyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0yNTU2LDkgKzI1NTYsMTEgQEAg
c2V0KFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVk
aWFTb3VyY2VTdXBwb3J0ZWRDb25zdHJhaW50cy5jcHAKICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVh
bS9SVENJY2VDYW5kaWRhdGVEZXNjcmlwdG9yLmNwcAogICAgIHBsYXRmb3JtL21lZGlhc3RyZWFt
L1JUQ1Nlc3Npb25EZXNjcmlwdGlvbkRlc2NyaXB0b3IuY3BwCisgICAgcGxhdGZvcm0vbWVkaWFz
dHJlYW0vUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmNwcAogICAgIHBsYXRmb3JtL21lZGlh
c3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2UuY3BwCiAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0v
UmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlci5jcHAKICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9S
ZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MuY3BwCisgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0v
UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmNwcAogCiAgICAgcGxhdGZvcm0vbWVkaWFzdHJl
YW0vbGlid2VicnRjL0xpYldlYlJUQ1Byb3ZpZGVyLmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZGU5MmE4OWY3NmZlYjk4
ZjI1MGYzYWFjNmFmNjBlZDI2MmFjZDlkYS4uOWUyNTk1Yjc4MWQyMmE5OWQxY2RhZGUxNWVmMmMx
N2M4YjQ1MGUzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagpAQCAtMjc2Miw3ICsyNzYyLDkgQEAKIAkJNUNEOUY1NjcxQUEwRjc0MjAw
REE0NUZGIC8qIERGQUJ5dGVjb2RlQ29tcGlsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDMzkzMDVGMUFBMEY2QTkwMDI5QzgxNiAvKiBERkFCeXRl
Y29kZUNvbXBpbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJNUNEOUY1NjgxQUEwRjc0NjAwREE0NUZGIC8qIERGQUJ5dGVjb2RlSW50ZXJwcmV0
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDMzkz
MDYxMUFBMEY2QTkwMDI5QzgxNiAvKiBERkFCeXRlY29kZUludGVycHJldGVyLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNUNERDgzM0QxRTQzMjRE
OTAwNjIxRTkyIC8qIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0REODMzQjFFNDMyNEJCMDA2MjFF
OTIgLyogUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmNwcCAqLzsgfTsKKwkJNUNERDgzM0Qx
RTQzMjREOTAwNjIxQjgzIC8qIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUNvY29hLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDREQ4MzNCMUU0
MzI0QkIwMDYyMUI4MyAvKiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VDb2NvYS5jcHAgKi87
IH07CiAJCTVDREQ4MzNFMUU0MzI0REMwMDYyMUU5MiAvKiBSZWFsdGltZUluY29taW5nVmlkZW9T
b3VyY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NUNERDgzMzkxRTQzMjRCQjAwNjIxRTkyIC8qIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5j
cHAgKi87IH07CisJCTVDREQ4MzNFMUU0MzI0REMwMDYyMUU4MyAvKiBSZWFsdGltZUluY29taW5n
VmlkZW9Tb3VyY2VDb2NvYS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1Q0REODMzOTFFNDMyNEJCMDA2MjFFODMgLyogUmVhbHRpbWVJbmNvbWluZ1Zp
ZGVvU291cmNlQ29jb2EuY3BwICovOyB9OwogCQk1Q0REODM2NDFFNDMyNUEwMDA2MjFFOTIgLyog
TGliV2ViUlRDRGF0YUNoYW5uZWxIYW5kbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDREQ4MzNGMUU0MzI1M0QwMDYyMUU5MiAvKiBMaWJXZWJS
VENEYXRhQ2hhbm5lbEhhbmRsZXIuY3BwICovOyB9OwogCQk1Q0RGQTZDODFBQTRGMkRBMDBFQTg3
NDYgLyogQ29udGVudEV4dGVuc2lvbkFjdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDREZBNkM3MUFBNEYyREEwMEVBODc0NiAvKiBDb250ZW50
RXh0ZW5zaW9uQWN0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTVDRTVEOUFCMURCODlBMDMwMENFN0E4RCAvKiBKU1RleHREZWNvZGVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDRTVEOUE3
MURCODk5RkMwMENFN0E4RCAvKiBKU1RleHREZWNvZGVyLmNwcCAqLzsgfTsKQEAgLTEwNzM2LDgg
KzEwNzM4LDEyIEBACiAJCTVDQkM4REFCMUFBQTMwMjIwMEUxQzgwMyAvKiBNZWRpYUFjY2Vzc2li
aWxpdHlTb2Z0TGluay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYUFj
Y2Vzc2liaWxpdHlTb2Z0TGluay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Q0RE
ODMzOTFFNDMyNEJCMDA2MjFFOTIgLyogUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlYWx0aW1lSW5jb21pbmdWaWRl
b1NvdXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDREQ4MzNBMUU0MzI0
QkIwMDYyMUU5MiAvKiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDREQ4MzM5MUU0MzI0QkIwMDYyMUU4MyAvKiBSZWFs
dGltZUluY29taW5nVmlkZW9Tb3VyY2VDb2NvYS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VDb2NvYS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDREQ4MzNBMUU0MzI0QkIwMDYyMUU4MyAvKiBSZWFs
dGltZUluY29taW5nVmlkZW9Tb3VyY2VDb2NvYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VDb2NvYS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1Q0REODMzQjFFNDMyNEJCMDA2MjFFOTIgLyogUmVhbHRpbWVPdXRn
b2luZ1ZpZGVvU291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTVDREQ4MzNDMUU0MzI0QkIwMDYyMUU5MiAvKiBSZWFsdGltZU91dGdvaW5nVmlkZW9T
b3VyY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVhbHRpbWVPdXRnb2lu
Z1ZpZGVvU291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDREQ4MzNCMUU0
MzI0QkIwMDYyMUI4MyAvKiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VDb2NvYS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZWFsdGltZU91dGdvaW5nVmlkZW9T
b3VyY2VDb2NvYS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDREQ4MzNDMUU0
MzI0QkIwMDYyMUI4MyAvKiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VDb2NvYS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VD
b2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Q0REODMzRjFFNDMyNTNEMDA2
MjFFOTIgLyogTGliV2ViUlRDRGF0YUNoYW5uZWxIYW5kbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IExpYldlYlJUQ0RhdGFDaGFubmVsSGFuZGxlci5jcHA7IHBh
dGggPSBsaWJ3ZWJydGMvTGliV2ViUlRDRGF0YUNoYW5uZWxIYW5kbGVyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNERDgzNDAxRTQzMjUzRDAwNjIxRTkyIC8qIExpYldlYlJU
Q0RhdGFDaGFubmVsSGFuZGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBM
aWJXZWJSVENEYXRhQ2hhbm5lbEhhbmRsZXIuaDsgcGF0aCA9IGxpYndlYnJ0Yy9MaWJXZWJSVENE
YXRhQ2hhbm5lbEhhbmRsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNERkE2
QzcxQUE0RjJEQTAwRUE4NzQ2IC8qIENvbnRlbnRFeHRlbnNpb25BY3Rpb25zLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnRlbnRFeHRlbnNpb25BY3Rpb25zLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjU4OCw2ICsxNjU5NCw4IEBACiAJCQkJMDdGRkRF
NjYxODFBRUQ0MjAwNzJENDA5IC8qIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmNwcCAqLywKIAkJ
CQkwN0ZGREU2NzE4MUFFRDQyMDA3MkQ0MDkgLyogTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUuaCAq
LywKIAkJCQk1RUJCODkzODFDNzdCREE0MDBDNjVENDEgLyogUGVlck1lZGlhRGVzY3JpcHRpb24u
aCAqLywKKwkJCQk1Q0REODMzOTFFNDMyNEJCMDA2MjFFOTIgLyogUmVhbHRpbWVJbmNvbWluZ1Zp
ZGVvU291cmNlLmNwcCAqLywKKwkJCQk1Q0REODMzQTFFNDMyNEJCMDA2MjFFOTIgLyogUmVhbHRp
bWVJbmNvbWluZ1ZpZGVvU291cmNlLmggKi8sCiAJCQkJNEE0RjY1NkIxQUE5OTdGMTAwRTM4Q0RE
IC8qIFJlYWx0aW1lTWVkaWFTb3VyY2UuY3BwICovLAogCQkJCTRBNEY2NTZDMUFBOTk3RjEwMEUz
OENERCAvKiBSZWFsdGltZU1lZGlhU291cmNlLmggKi8sCiAJCQkJNEE0RjY1NkQxQUE5OTdGMTAw
RTM4Q0REIC8qIFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMuaCAqLywKQEAgLTE2NTk3
LDYgKzE2NjA1LDggQEAKIAkJCQk0QTRGNjU2RjFBQTk5N0YxMDBFMzhDREQgLyogUmVhbHRpbWVN
ZWRpYVNvdXJjZVNldHRpbmdzLmggKi8sCiAJCQkJMkVDNDFERTIxQzA0MTBBMzAwRDI5NEZFIC8q
IFJlYWx0aW1lTWVkaWFTb3VyY2VTdXBwb3J0ZWRDb25zdHJhaW50cy5jcHAgKi8sCiAJCQkJMDdD
MUMwRTQxQkZCNjBFRDAwQkQyMjU2IC8qIFJlYWx0aW1lTWVkaWFTb3VyY2VTdXBwb3J0ZWRDb25z
dHJhaW50cy5oICovLAorCQkJCTVDREQ4MzNCMUU0MzI0QkIwMDYyMUU5MiAvKiBSZWFsdGltZU91
dGdvaW5nVmlkZW9Tb3VyY2UuY3BwICovLAorCQkJCTVDREQ4MzNDMUU0MzI0QkIwMDYyMUU5MiAv
KiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuaCAqLywKIAkJCQkzMTM1OTEwQzFFN0REQ0I2
MDBGMzA2MzAgLyogUlRDQnVuZGxlUG9saWN5LmggKi8sCiAJCQkJMDcyMjFCQTIxN0NGMEFENDAw
ODQ4RTUxIC8qIFJUQ0RhdGFDaGFubmVsSGFuZGxlci5oICovLAogCQkJCTA3MjIxQkEzMTdDRjBB
RDQwMDg0OEU1MSAvKiBSVENEYXRhQ2hhbm5lbEhhbmRsZXJDbGllbnQuaCAqLywKQEAgLTE2NjQ3
LDE0ICsxNjY1NywxNCBAQAogCQkJCTA3RUU3NkVFMUJFQTYxOTgwMEY4OTEzMyAvKiBNb2NrUmVh
bHRpbWVWaWRlb1NvdXJjZU1hYy5tbSAqLywKIAkJCQk0MTEwM0FBQTFFMzk3OTBBMDA3NjlGMDMg
LyogUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlLmNwcCAqLywKIAkJCQk0MTEwM0FBOTFFMzk3
OTBBMDA3NjlGMDMgLyogUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlLmggKi8sCi0JCQkJNUNE
RDgzMzkxRTQzMjRCQjAwNjIxRTkyIC8qIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5jcHAg
Ki8sCi0JCQkJNUNERDgzM0ExRTQzMjRCQjAwNjIxRTkyIC8qIFJlYWx0aW1lSW5jb21pbmdWaWRl
b1NvdXJjZS5oICovLAorCQkJCTVDREQ4MzM5MUU0MzI0QkIwMDYyMUU4MyAvKiBSZWFsdGltZUlu
Y29taW5nVmlkZW9Tb3VyY2VDb2NvYS5jcHAgKi8sCisJCQkJNUNERDgzM0ExRTQzMjRCQjAwNjIx
RTgzIC8qIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUNvY29hLmggKi8sCiAJCQkJNEEwRkZB
QTMxQUFGNUVGNjAwNjI4MDNCIC8qIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJNYWMuY3BwICov
LAogCQkJCTRBMEZGQUE0MUFBRjVFRjYwMDYyODAzQiAvKiBSZWFsdGltZU1lZGlhU291cmNlQ2Vu
dGVyTWFjLmggKi8sCiAJCQkJNDExMDNBQTcxRTM5NzkwQTAwNzY5RjAzIC8qIFJlYWx0aW1lT3V0
Z29pbmdBdWRpb1NvdXJjZS5jcHAgKi8sCiAJCQkJNDExMDNBQTgxRTM5NzkwQTAwNzY5RjAzIC8q
IFJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZS5oICovLAotCQkJCTVDREQ4MzNCMUU0MzI0QkIw
MDYyMUU5MiAvKiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuY3BwICovLAotCQkJCTVDREQ4
MzNDMUU0MzI0QkIwMDYyMUU5MiAvKiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuaCAqLywK
KwkJCQk1Q0REODMzQjFFNDMyNEJCMDA2MjFCODMgLyogUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291
cmNlQ29jb2EuY3BwICovLAorCQkJCTVDREQ4MzNDMUU0MzI0QkIwMDYyMUI4MyAvKiBSZWFsdGlt
ZU91dGdvaW5nVmlkZW9Tb3VyY2VDb2NvYS5oICovLAogCQkJCTA3RDYzNzNFMUJCMEIxMTMwMDI1
NkNFOSAvKiBXZWJBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5oICovLAogCQkJCTA3RDYzNzNG
MUJCMEIxMTMwMDI1NkNFOSAvKiBXZWJBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5tbSAqLywK
IAkJCSk7CkBAIC0zMzc4OSw2ICszMzc5OSw3IEBACiAJCQkJRkQzMTYwM0IxMkIwMjY3NjAwQzFB
MzU5IC8qIFJlYWx0aW1lQW5hbHlzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDExMDNBQUUx
RTM5NzkxMDAwNzY5RjAzIC8qIFJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk1Q0REODMzRTFFNDMyNERDMDA2MjFFOTIgLyogUmVhbHRpbWVJbmNvbWlu
Z1ZpZGVvU291cmNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTVDREQ4MzNFMUU0MzI0REMwMDYy
MUU4MyAvKiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VDb2NvYS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk0QTRGNjU3MDFBQTk5N0YxMDBFMzhDREQgLyogUmVhbHRpbWVNZWRpYVNvdXJjZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk0QTBGRkFBMTFBQUY1RUEyMDA2MjgwM0IgLyogUmVhbHRp
bWVNZWRpYVNvdXJjZUNlbnRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0QTBGRkFBNTFBQUY1
RUY2MDA2MjgwM0IgLyogUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck1hYy5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTMzNzk2LDYgKzMzODA3LDcgQEAKIAkJCQkyRUM0MURFNDFDMDQxMEEzMDBEMjk0
RkUgLyogUmVhbHRpbWVNZWRpYVNvdXJjZVN1cHBvcnRlZENvbnN0cmFpbnRzLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTQxMTAzQUFCMUUzOTc5MTAwMDc2OUYwMyAvKiBSZWFsdGltZU91dGdvaW5n
QXVkaW9Tb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUNERDgzM0QxRTQzMjREOTAwNjIx
RTkyIC8qIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQk1Q0REODMzRDFFNDMyNEQ5MDA2MjFCODMgLyogUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNl
Q29jb2EuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQ0NUE5NUExNzVENDE3MTAwQzIxRUM4IC8q
IFJlY3RhbmdsZVNoYXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQUI0MTgxMTNFMzU2RTgw
MEQ4QUFGMyAvKiBSZWdpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU3OEY0NDAxREUwQjYz
NDAwM0RGQzZBIC8qIFJlamVjdGVkUHJvbWlzZVRyYWNrZXIuY3BwIGluIFNvdXJjZXMgKi8sCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZUlu
Y29taW5nVmlkZW9Tb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNTliNDZiYmY0
NWQ4ZTZjMTQ2ODQwNDlhY2FhZGM3ZmIwYmI3YTRjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNl
LmNwcApAQCAtMCwwICsxLDg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRv
cnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20gdGhpcworICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmgiCisKKyNpZiBVU0UoTElCV0VCUlRDKQor
CisjaW5jbHVkZSAiTG9nZ2luZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlYWx0aW1l
SW5jb21pbmdWaWRlb1NvdXJjZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlKHJ0Yzo6c2Nv
cGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvVHJhY2tJbnRlcmZhY2U+JiYgdmlkZW9UcmFjaywgU3Ry
aW5nJiYgdmlkZW9UcmFja0lkKQorICAgIDogUmVhbHRpbWVNZWRpYVNvdXJjZShXVEZNb3ZlKHZp
ZGVvVHJhY2tJZCksIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OlZpZGVvLCBTdHJpbmcoKSkK
KyAgICAsIG1fdmlkZW9UcmFjayhXVEZNb3ZlKHZpZGVvVHJhY2spKQoreworICAgIG1fY3VycmVu
dFNldHRpbmdzLnNldFdpZHRoKDY0MCk7CisgICAgbV9jdXJyZW50U2V0dGluZ3Muc2V0SGVpZ2h0
KDQ4MCk7CisgICAgbm90aWZ5TXV0ZWRDaGFuZ2UoIW1fdmlkZW9UcmFjayk7Cit9CisKK3ZvaWQg
UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlOjpzdGFydFByb2R1Y2luZ0RhdGEoKQoreworICAg
IGlmIChtX3ZpZGVvVHJhY2spCisgICAgICAgIG1fdmlkZW9UcmFjay0+QWRkT3JVcGRhdGVTaW5r
KHRoaXMsIHJ0Yzo6VmlkZW9TaW5rV2FudHMoKSk7Cit9CisKK3ZvaWQgUmVhbHRpbWVJbmNvbWlu
Z1ZpZGVvU291cmNlOjpzZXRTb3VyY2VUcmFjayhydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpW
aWRlb1RyYWNrSW50ZXJmYWNlPiYmIHRyYWNrKQoreworICAgIEFTU0VSVCghbV92aWRlb1RyYWNr
KTsKKyAgICBBU1NFUlQodHJhY2spOworCisgICAgbV92aWRlb1RyYWNrID0gV1RGTW92ZSh0cmFj
ayk7CisgICAgbm90aWZ5TXV0ZWRDaGFuZ2UoIW1fdmlkZW9UcmFjayk7CisgICAgaWYgKGlzUHJv
ZHVjaW5nRGF0YSgpKQorICAgICAgICBtX3ZpZGVvVHJhY2stPkFkZE9yVXBkYXRlU2luayh0aGlz
LCBydGM6OlZpZGVvU2lua1dhbnRzKCkpOworfQorCit2b2lkIFJlYWx0aW1lSW5jb21pbmdWaWRl
b1NvdXJjZTo6c3RvcFByb2R1Y2luZ0RhdGEoKQoreworICAgIGlmIChtX3ZpZGVvVHJhY2spCisg
ICAgICAgIG1fdmlkZW9UcmFjay0+UmVtb3ZlU2luayh0aGlzKTsKK30KKworY29uc3QgUmVhbHRp
bWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcyYgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlOjpj
YXBhYmlsaXRpZXMoKSBjb25zdAoreworICAgIHJldHVybiBSZWFsdGltZU1lZGlhU291cmNlQ2Fw
YWJpbGl0aWVzOjplbXB0eUNhcGFiaWxpdGllcygpOworfQorCitjb25zdCBSZWFsdGltZU1lZGlh
U291cmNlU2V0dGluZ3MmIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6c2V0dGluZ3MoKSBj
b25zdAoreworICAgIHJldHVybiBtX2N1cnJlbnRTZXR0aW5nczsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKExJQldFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJj
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVJbmNvbWlu
Z1ZpZGVvU291cmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTViZjUwMmYzZTI1ZWFiMGNkNmE5M2VmMmI0ZjAz
YTRlMGZhMmQxNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5oCkBAIC0wLDAgKzEsNzEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEVyaWNzc29u
IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKExJQldFQlJUQykKKworI2luY2x1ZGUgIkxpYldl
YlJUQ01hY3Jvcy5oIgorI2luY2x1ZGUgIlJlYWx0aW1lTWVkaWFTb3VyY2UuaCIKKyNpbmNsdWRl
IDx3ZWJydGMvYXBpL21lZGlhc3RyZWFtaW50ZXJmYWNlLmg+CisjaW5jbHVkZSA8d3RmL1JldGFp
blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENhcHR1cmVEZXZpY2U7CisK
K2NsYXNzIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZSA6IHB1YmxpYyBSZWFsdGltZU1lZGlh
U291cmNlLCBwcml2YXRlIHJ0Yzo6VmlkZW9TaW5rSW50ZXJmYWNlPHdlYnJ0Yzo6VmlkZW9GcmFt
ZT4geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNl
PiBjcmVhdGUocnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9UcmFja0ludGVyZmFjZT4m
JiwgU3RyaW5nJiYpOworICAgIH5SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UoKSB7IHN0b3BQ
cm9kdWNpbmdEYXRhKCk7IH0KKworICAgIHZvaWQgc2V0U291cmNlVHJhY2socnRjOjpzY29wZWRf
cmVmcHRyPHdlYnJ0Yzo6VmlkZW9UcmFja0ludGVyZmFjZT4mJik7CisKK3Byb3RlY3RlZDoKKyAg
ICBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UocnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6
VmlkZW9UcmFja0ludGVyZmFjZT4mJiwgU3RyaW5nJiYpOworCisgICAgUmVhbHRpbWVNZWRpYVNv
dXJjZVNldHRpbmdzIG1fY3VycmVudFNldHRpbmdzOworCitwcml2YXRlOgorICAgIC8vIFJlYWx0
aW1lTWVkaWFTb3VyY2UgQVBJCisgICAgdm9pZCBzdGFydFByb2R1Y2luZ0RhdGEoKSBmaW5hbDsK
KyAgICB2b2lkIHN0b3BQcm9kdWNpbmdEYXRhKCkgIGZpbmFsOworCisgICAgY29uc3QgUmVhbHRp
bWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcyYgY2FwYWJpbGl0aWVzKCkgY29uc3QgZmluYWw7Cisg
ICAgY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzJiBzZXR0aW5ncygpIGNvbnN0IGZp
bmFsOworCisgICAgYm9vbCBhcHBseVNpemUoY29uc3QgSW50U2l6ZSYpIGZpbmFsIHsgcmV0dXJu
IHRydWU7IH0KKworICAgIHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvVHJhY2tJbnRl
cmZhY2U+IG1fdmlkZW9UcmFjazsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIFVTRShMSUJXRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4zNTlkYzExNGE1NWVmNDkzNDA5MDQzYTZmZmQ2MzEyMWUxZGEyZGI3Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVh
bHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmNwcApAQCAtMCwwICsxLDE4OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgcmVxdWlyZWQgdG8gYmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuaCIKKworI2lmIFVTRShMSUJXRUJS
VEMpCisKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSA8d2VicnRjL2FwaS92aWRlby9p
NDIwX2J1ZmZlci5oPgorI2luY2x1ZGUgPHdlYnJ0Yy9jb21tb25fdmlkZW8vbGlieXV2L2luY2x1
ZGUvd2VicnRjX2xpYnl1di5oPgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorI2luY2x1
ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVhbHRpbWVP
dXRnb2luZ1ZpZGVvU291cmNlOjpSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UoUmVmPE1lZGlh
U3RyZWFtVHJhY2tQcml2YXRlPiYmIHZpZGVvU291cmNlKQorICAgIDogbV92aWRlb1NvdXJjZShX
VEZNb3ZlKHZpZGVvU291cmNlKSkKKyAgICAsIG1fYmxhY2tGcmFtZVRpbWVyKCp0aGlzLCAmUmVh
bHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpzZW5kT25lQmxhY2tGcmFtZSkKK3sKKyAgICBtX3Zp
ZGVvU291cmNlLT5hZGRPYnNlcnZlcigqdGhpcyk7CisgICAgaW5pdGlhbGl6ZUZyb21Tb3VyY2Uo
KTsKK30KKworYm9vbCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnNldFNvdXJjZShSZWY8
TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYgbmV3U291cmNlKQoreworICAgIGlmICghbV9pbml0
aWFsU2V0dGluZ3MpCisgICAgICAgIG1faW5pdGlhbFNldHRpbmdzID0gbV92aWRlb1NvdXJjZS0+
c291cmNlKCkuc2V0dGluZ3MoKTsKKworICAgIG1fdmlkZW9Tb3VyY2UtPnJlbW92ZU9ic2VydmVy
KCp0aGlzKTsKKyAgICBtX3ZpZGVvU291cmNlID0gV1RGTW92ZShuZXdTb3VyY2UpOworICAgIG1f
dmlkZW9Tb3VyY2UtPmFkZE9ic2VydmVyKCp0aGlzKTsKKworICAgIGluaXRpYWxpemVGcm9tU291
cmNlKCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBSZWFsdGltZU91dGdvaW5nVmlk
ZW9Tb3VyY2U6OnN0b3AoKQoreworICAgIG1fdmlkZW9Tb3VyY2UtPnJlbW92ZU9ic2VydmVyKCp0
aGlzKTsKKyAgICBtX2JsYWNrRnJhbWVUaW1lci5zdG9wKCk7CisgICAgbV9pc1N0b3BwZWQgPSB0
cnVlOworfQorCit2b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6dXBkYXRlQmxhY2tG
cmFtZXNTZW5kaW5nKCkKK3sKKyAgICBpZiAoIW1fbXV0ZWQgJiYgbV9lbmFibGVkKSB7CisgICAg
ICAgIGlmIChtX2JsYWNrRnJhbWVUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICAgICAgbV9ibGFj
a0ZyYW1lVGltZXIuc3RvcCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc2VuZEJs
YWNrRnJhbWVzSWZOZWVkZWQoKTsKK30KKwordm9pZCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3Vy
Y2U6OnNvdXJjZU11dGVkQ2hhbmdlZCgpCit7CisgICAgQVNTRVJUKG1fbXV0ZWQgIT0gbV92aWRl
b1NvdXJjZS0+bXV0ZWQoKSk7CisKKyAgICBtX211dGVkID0gbV92aWRlb1NvdXJjZS0+bXV0ZWQo
KTsKKworICAgIHVwZGF0ZUJsYWNrRnJhbWVzU2VuZGluZygpOworfQorCit2b2lkIFJlYWx0aW1l
T3V0Z29pbmdWaWRlb1NvdXJjZTo6c291cmNlRW5hYmxlZENoYW5nZWQoKQoreworICAgIEFTU0VS
VChtX2VuYWJsZWQgIT0gbV92aWRlb1NvdXJjZS0+ZW5hYmxlZCgpKTsKKworICAgIG1fZW5hYmxl
ZCA9IG1fdmlkZW9Tb3VyY2UtPmVuYWJsZWQoKTsKKworICAgIHVwZGF0ZUJsYWNrRnJhbWVzU2Vu
ZGluZygpOworfQorCit2b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6aW5pdGlhbGl6
ZUZyb21Tb3VyY2UoKQoreworICAgIGNvbnN0IGF1dG8mIHNldHRpbmdzID0gbV92aWRlb1NvdXJj
ZS0+c291cmNlKCkuc2V0dGluZ3MoKTsKKyAgICBtX3dpZHRoID0gc2V0dGluZ3Mud2lkdGgoKTsK
KyAgICBtX2hlaWdodCA9IHNldHRpbmdzLmhlaWdodCgpOworCisgICAgbV9tdXRlZCA9IG1fdmlk
ZW9Tb3VyY2UtPm11dGVkKCk7CisgICAgbV9lbmFibGVkID0gbV92aWRlb1NvdXJjZS0+ZW5hYmxl
ZCgpOworCisgICAgdXBkYXRlQmxhY2tGcmFtZXNTZW5kaW5nKCk7Cit9CisKK3ZvaWQgUmVhbHRp
bWVPdXRnb2luZ1ZpZGVvU291cmNlOjpBZGRPclVwZGF0ZVNpbmsocnRjOjpWaWRlb1NpbmtJbnRl
cmZhY2U8d2VicnRjOjpWaWRlb0ZyYW1lPiogc2luaywgY29uc3QgcnRjOjpWaWRlb1NpbmtXYW50
cyYgc2lua1dhbnRzKQoreworICAgIEFTU0VSVCghc2lua1dhbnRzLmJsYWNrX2ZyYW1lcyk7CisK
KyAgICBpZiAoc2lua1dhbnRzLnJvdGF0aW9uX2FwcGxpZWQpCisgICAgICAgIG1fc2hvdWxkQXBw
bHlSb3RhdGlvbiA9IHRydWU7CisKKyAgICBpZiAoIW1fc2lua3MuY29udGFpbnMoc2luaykpCisg
ICAgICAgIG1fc2lua3MuYXBwZW5kKHNpbmspOworCisgICAgY2FsbE9uTWFpblRocmVhZChbcHJv
dGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSgpIHsKKyAgICAgICAgcHJvdGVjdGVkVGhpcy0+
c2VuZEJsYWNrRnJhbWVzSWZOZWVkZWQoKTsKKyAgICB9KTsKK30KKwordm9pZCBSZWFsdGltZU91
dGdvaW5nVmlkZW9Tb3VyY2U6OlJlbW92ZVNpbmsocnRjOjpWaWRlb1NpbmtJbnRlcmZhY2U8d2Vi
cnRjOjpWaWRlb0ZyYW1lPiogc2luaykKK3sKKyAgICBtX3NpbmtzLnJlbW92ZUZpcnN0KHNpbmsp
OworCisgICAgaWYgKG1fc2lua3Muc2l6ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBjYWxs
T25NYWluVGhyZWFkKFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldKCkgeworICAgICAg
ICBpZiAocHJvdGVjdGVkVGhpcy0+bV9ibGFja0ZyYW1lVGltZXIuaXNBY3RpdmUoKSkKKyAgICAg
ICAgICAgIHByb3RlY3RlZFRoaXMtPm1fYmxhY2tGcmFtZVRpbWVyLnN0b3AoKTsKKyAgICB9KTsK
K30KKwordm9pZCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnNlbmRCbGFja0ZyYW1lc0lm
TmVlZGVkKCkKK3sKKyAgICBpZiAobV9ibGFja0ZyYW1lVGltZXIuaXNBY3RpdmUoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKCFtX3NpbmtzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKCFtX211dGVkICYmIG1fZW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKCFtX3dpZHRoIHx8ICFtX2hlaWdodCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFt
X2JsYWNrRnJhbWUpIHsKKyAgICAgICAgYXV0byB3aWR0aCA9IG1fd2lkdGg7CisgICAgICAgIGF1
dG8gaGVpZ2h0ID0gbV9oZWlnaHQ7CisgICAgICAgIGlmIChtX3Nob3VsZEFwcGx5Um90YXRpb24g
JiYgKG1fY3VycmVudFJvdGF0aW9uID09IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMCB8fCBtX2N1
cnJlbnRSb3RhdGlvbiA9PSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzkwKSkKKyAgICAgICAgICAg
IHN0ZDo6c3dhcCh3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgYXV0byBmcmFtZSA9IG1fYnVmZmVy
UG9vbC5DcmVhdGVCdWZmZXIod2lkdGgsIGhlaWdodCk7CisgICAgICAgIEFTU0VSVChmcmFtZSk7
CisgICAgICAgIGlmICghZnJhbWUpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfTE9HKFdlYlJUQywg
IlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6c2VuZEJsYWNrRnJhbWVzSWZOZWVkZWQgdW5h
YmxlIHRvIHNlbmQgYmxhY2sgZnJhbWVzIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgd2VicnRjOjpJNDIwQnVmZmVyOjpTZXRCbGFjayhmcmFtZS5nZXQoKSk7Cisg
ICAgICAgIG1fYmxhY2tGcmFtZSA9IFdURk1vdmUoZnJhbWUpOworICAgIH0KKyAgICBzZW5kT25l
QmxhY2tGcmFtZSgpOworICAgIG1fYmxhY2tGcmFtZVRpbWVyLnN0YXJ0UmVwZWF0aW5nKDFfcyk7
Cit9CisKK3ZvaWQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpzZW5kT25lQmxhY2tGcmFt
ZSgpCit7CisgICAgUkVMRUFTRV9MT0coTWVkaWFTdHJlYW0sICJSZWFsdGltZU91dGdvaW5nVmlk
ZW9Tb3VyY2U6OnNlbmRPbmVCbGFja0ZyYW1lIik7CisgICAgc2VuZEZyYW1lKHJ0Yzo6c2NvcGVk
X3JlZnB0cjx3ZWJydGM6OlZpZGVvRnJhbWVCdWZmZXI+KG1fYmxhY2tGcmFtZSkpOworfQorCit2
b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6c2VuZEZyYW1lKHJ0Yzo6c2NvcGVkX3Jl
ZnB0cjx3ZWJydGM6OlZpZGVvRnJhbWVCdWZmZXI+JiYgYnVmZmVyKQoreworICAgIGludDY0X3Qg
dGltZXN0YW1wTWljcm9TZWNvbmRzID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lTVMoKSAq
IDEwMDA7CisgICAgd2VicnRjOjpWaWRlb0ZyYW1lIGZyYW1lKGJ1ZmZlciwgbV9zaG91bGRBcHBs
eVJvdGF0aW9uID8gd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8wIDogbV9jdXJyZW50Um90YXRpb24s
IHRpbWVzdGFtcE1pY3JvU2Vjb25kcyk7CisgICAgZm9yIChhdXRvKiBzaW5rIDogbV9zaW5rcykK
KyAgICAgICAgc2luay0+T25GcmFtZShmcmFtZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIFVTRShMSUJXRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1Nv
dXJjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjk2MjYxYzRiNzY2MDIwOTE3Y2QxZTQ5ZTA4ZGVkMjczOGUzZWUy
MzgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuaApAQCAtMCwwICsxLDExNiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgcmVxdWlyZWQgdG8gYmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisg
KiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYg
VVNFKExJQldFQlJUQykKKworI2luY2x1ZGUgIkxpYldlYlJUQ01hY3Jvcy5oIgorI2luY2x1ZGUg
Ik1lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmgiCisjaW5jbHVkZSA8VGltZXIuaD4KKyNpbmNsdWRl
IDx3ZWJydGMvYXBpL21lZGlhc3RyZWFtaW50ZXJmYWNlLmg+CisjaW5jbHVkZSA8d2VicnRjL2Jh
c2Uvb3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3ZWJydGMvY29tbW9uX3ZpZGVvL2luY2x1ZGUvaTQy
MF9idWZmZXJfcG9vbC5oPgorI2luY2x1ZGUgPHdlYnJ0Yy9tZWRpYS9iYXNlL3ZpZGVvc2lua2lu
dGVyZmFjZS5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJl
YWRTYWZlUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJlYWx0
aW1lT3V0Z29pbmdWaWRlb1NvdXJjZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxSZWFs
dGltZU91dGdvaW5nVmlkZW9Tb3VyY2U+LCBwdWJsaWMgd2VicnRjOjpWaWRlb1RyYWNrU291cmNl
SW50ZXJmYWNlLCBwcml2YXRlIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpPYnNlcnZlciB7Citw
dWJsaWM6CisgICAgc3RhdGljIFJlZjxSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U+IGNyZWF0
ZShSZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYgdmlkZW9Tb3VyY2UpOworICAgIH5SZWFs
dGltZU91dGdvaW5nVmlkZW9Tb3VyY2UoKSB7IHN0b3AoKTsgfQorCisgICAgdm9pZCBzdG9wKCk7
CisgICAgYm9vbCBzZXRTb3VyY2UoUmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiYmKTsKKyAg
ICBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYgc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV92aWRl
b1NvdXJjZS5nZXQoKTsgfQorCisgICAgaW50IEFkZFJlZigpIGNvbnN0IGZpbmFsIHsgcmVmKCk7
IHJldHVybiByZWZDb3VudCgpOyB9CisgICAgaW50IFJlbGVhc2UoKSBjb25zdCBmaW5hbCB7IGRl
cmVmKCk7IHJldHVybiByZWZDb3VudCgpOyB9CisKKyAgICB2b2lkIHNldEFwcGx5Um90YXRpb24o
Ym9vbCBzaG91bGRBcHBseVJvdGF0aW9uKSB7IG1fc2hvdWxkQXBwbHlSb3RhdGlvbiA9IHNob3Vs
ZEFwcGx5Um90YXRpb247IH0KKworcHJvdGVjdGVkOgorICAgIGV4cGxpY2l0IFJlYWx0aW1lT3V0
Z29pbmdWaWRlb1NvdXJjZShSZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYpOworCisgICAg
dm9pZCBzZW5kRnJhbWUocnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9GcmFtZUJ1ZmZl
cj4mJik7CisKKyAgICBWZWN0b3I8cnRjOjpWaWRlb1NpbmtJbnRlcmZhY2U8d2VicnRjOjpWaWRl
b0ZyYW1lPio+IG1fc2lua3M7CisgICAgd2VicnRjOjpJNDIwQnVmZmVyUG9vbCBtX2J1ZmZlclBv
b2w7CisKKyAgICBib29sIG1fZW5hYmxlZCB7IHRydWUgfTsKKyAgICBib29sIG1fbXV0ZWQgeyBm
YWxzZSB9OworICAgIHVpbnQzMl90IG1fd2lkdGggeyAwIH07CisgICAgdWludDMyX3QgbV9oZWln
aHQgeyAwIH07CisgICAgYm9vbCBtX3Nob3VsZEFwcGx5Um90YXRpb24geyBmYWxzZSB9OworICAg
IHdlYnJ0Yzo6VmlkZW9Sb3RhdGlvbiBtX2N1cnJlbnRSb3RhdGlvbiB7IHdlYnJ0Yzo6a1ZpZGVv
Um90YXRpb25fMCB9OworCitwcml2YXRlOgorICAgIHZvaWQgc2VuZEJsYWNrRnJhbWVzSWZOZWVk
ZWQoKTsKKyAgICB2b2lkIHNlbmRPbmVCbGFja0ZyYW1lKCk7CisgICAgdm9pZCBpbml0aWFsaXpl
RnJvbVNvdXJjZSgpOworICAgIHZvaWQgdXBkYXRlQmxhY2tGcmFtZXNTZW5kaW5nKCk7CisKKyAg
ICAvLyBOb3RpZmllciBBUEkKKyAgICB2b2lkIFJlZ2lzdGVyT2JzZXJ2ZXIod2VicnRjOjpPYnNl
cnZlckludGVyZmFjZSopIGZpbmFsIHsgfQorICAgIHZvaWQgVW5yZWdpc3Rlck9ic2VydmVyKHdl
YnJ0Yzo6T2JzZXJ2ZXJJbnRlcmZhY2UqKSBmaW5hbCB7IH0KKworICAgIC8vIFZpZGVvVHJhY2tT
b3VyY2VJbnRlcmZhY2UgQVBJCisgICAgYm9vbCBpc19zY3JlZW5jYXN0KCkgY29uc3QgZmluYWwg
eyByZXR1cm4gZmFsc2U7IH0KKyAgICBydGM6Ok9wdGlvbmFsPGJvb2w+IG5lZWRzX2Rlbm9pc2lu
ZygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHJ0Yzo6T3B0aW9uYWw8Ym9vbD4oKTsgfQorICAgIGJv
b2wgR2V0U3RhdHMoU3RhdHMqKSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfTsKKworICAgIC8vIE1l
ZGlhU291cmNlSW50ZXJmYWNlIEFQSQorICAgIFNvdXJjZVN0YXRlIHN0YXRlKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gU291cmNlU3RhdGUoKTsgfQorICAgIGJvb2wgcmVtb3RlKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgLy8gcnRjOjpWaWRlb1NvdXJjZUludGVyZmFjZTx3
ZWJydGM6OlZpZGVvRnJhbWU+IEFQSQorICAgIHZvaWQgQWRkT3JVcGRhdGVTaW5rKHJ0Yzo6Vmlk
ZW9TaW5rSW50ZXJmYWNlPHdlYnJ0Yzo6VmlkZW9GcmFtZT4qLCBjb25zdCBydGM6OlZpZGVvU2lu
a1dhbnRzJikgZmluYWw7CisgICAgdm9pZCBSZW1vdmVTaW5rKHJ0Yzo6VmlkZW9TaW5rSW50ZXJm
YWNlPHdlYnJ0Yzo6VmlkZW9GcmFtZT4qKSBmaW5hbDsKKworICAgIHZvaWQgc291cmNlTXV0ZWRD
aGFuZ2VkKCk7CisgICAgdm9pZCBzb3VyY2VFbmFibGVkQ2hhbmdlZCgpOworCisgICAgLy8gTWVk
aWFTdHJlYW1UcmFja1ByaXZhdGU6Ok9ic2VydmVyIEFQSQorICAgIHZvaWQgdHJhY2tNdXRlZENo
YW5nZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmKSBmaW5hbCB7IHNvdXJjZU11dGVkQ2hhbmdl
ZCgpOyB9CisgICAgdm9pZCB0cmFja0VuYWJsZWRDaGFuZ2VkKE1lZGlhU3RyZWFtVHJhY2tQcml2
YXRlJikgZmluYWwgeyBzb3VyY2VFbmFibGVkQ2hhbmdlZCgpOyB9CisgICAgdm9pZCB0cmFja1Nl
dHRpbmdzQ2hhbmdlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYpIGZpbmFsIHsgaW5pdGlhbGl6
ZUZyb21Tb3VyY2UoKTsgfQorICAgIHZvaWQgc2FtcGxlQnVmZmVyVXBkYXRlZChNZWRpYVN0cmVh
bVRyYWNrUHJpdmF0ZSYsIE1lZGlhU2FtcGxlJikgb3ZlcnJpZGUgeyB9CisgICAgdm9pZCB0cmFj
a0VuZGVkKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJikgZmluYWwgeyB9CisKKyAgICBSZWY8TWVk
aWFTdHJlYW1UcmFja1ByaXZhdGU+IG1fdmlkZW9Tb3VyY2U7CisgICAgc3RkOjpvcHRpb25hbDxS
ZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M+IG1faW5pdGlhbFNldHRpbmdzOworICAgIGJvb2wg
bV9pc1N0b3BwZWQgeyBmYWxzZSB9OworICAgIFRpbWVyIG1fYmxhY2tGcmFtZVRpbWVyOworICAg
IHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvRnJhbWVCdWZmZXI+IG1fYmxhY2tGcmFt
ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShMSUJXRUJS
VEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMv
UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjYxOGQ2OTUyNzYzZmU3ZDdjNGI2YjhjZTRmOWNkYzE4
MjdhMzcxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUluY29taW5nVmlk
ZW9Tb3VyY2UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjA2ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiAgICBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0
cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0gKiAgICBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuaCIK
LQotI2lmIFVTRShMSUJXRUJSVEMpCi0KLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAi
TWVkaWFTYW1wbGVBVkZPYmpDLmgiCi0jaW5jbHVkZSA8d2VicnRjL3Nkay9vYmpjL0ZyYW1ld29y
ay9DbGFzc2VzL1ZpZGVvL2NvcmV2aWRlb19mcmFtZV9idWZmZXIuaD4KLQotI2luY2x1ZGUgIkNv
cmVNZWRpYVNvZnRMaW5rLmgiCi0jaW5jbHVkZSAiQ29yZVZpZGVvU29mdExpbmsuaCIKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1SZWY8UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlPiBSZWFs
dGltZUluY29taW5nVmlkZW9Tb3VyY2U6OmNyZWF0ZShydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRj
OjpWaWRlb1RyYWNrSW50ZXJmYWNlPiYmIHZpZGVvVHJhY2ssIFN0cmluZyYmIHRyYWNrSWQpCi17
Ci0gICAgYXV0byBzb3VyY2UgPSBhZG9wdFJlZigqbmV3IFJlYWx0aW1lSW5jb21pbmdWaWRlb1Nv
dXJjZShXVEZNb3ZlKHZpZGVvVHJhY2spLCBXVEZNb3ZlKHRyYWNrSWQpKSk7Ci0gICAgc291cmNl
LT5zdGFydCgpOwotICAgIHJldHVybiBzb3VyY2U7Ci19Ci0KLVJlYWx0aW1lSW5jb21pbmdWaWRl
b1NvdXJjZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlKHJ0Yzo6c2NvcGVkX3JlZnB0cjx3
ZWJydGM6OlZpZGVvVHJhY2tJbnRlcmZhY2U+JiYgdmlkZW9UcmFjaywgU3RyaW5nJiYgdmlkZW9U
cmFja0lkKQotICAgIDogUmVhbHRpbWVNZWRpYVNvdXJjZShXVEZNb3ZlKHZpZGVvVHJhY2tJZCks
IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OlZpZGVvLCBTdHJpbmcoKSkKLSAgICAsIG1fdmlk
ZW9UcmFjayhXVEZNb3ZlKHZpZGVvVHJhY2spKQotewotICAgIG1fY3VycmVudFNldHRpbmdzLnNl
dFdpZHRoKDY0MCk7Ci0gICAgbV9jdXJyZW50U2V0dGluZ3Muc2V0SGVpZ2h0KDQ4MCk7Ci0gICAg
bm90aWZ5TXV0ZWRDaGFuZ2UoIW1fdmlkZW9UcmFjayk7Ci19Ci0KLXZvaWQgUmVhbHRpbWVJbmNv
bWluZ1ZpZGVvU291cmNlOjpzdGFydFByb2R1Y2luZ0RhdGEoKQotewotICAgIGlmIChtX3ZpZGVv
VHJhY2spCi0gICAgICAgIG1fdmlkZW9UcmFjay0+QWRkT3JVcGRhdGVTaW5rKHRoaXMsIHJ0Yzo6
VmlkZW9TaW5rV2FudHMoKSk7Ci19Ci0KLXZvaWQgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNl
OjpzZXRTb3VyY2VUcmFjayhydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb1RyYWNrSW50
ZXJmYWNlPiYmIHRyYWNrKQotewotICAgIEFTU0VSVCghbV92aWRlb1RyYWNrKTsKLSAgICBBU1NF
UlQodHJhY2spOwotCi0gICAgbV92aWRlb1RyYWNrID0gV1RGTW92ZSh0cmFjayk7Ci0gICAgbm90
aWZ5TXV0ZWRDaGFuZ2UoIW1fdmlkZW9UcmFjayk7Ci0gICAgaWYgKGlzUHJvZHVjaW5nRGF0YSgp
KQotICAgICAgICBtX3ZpZGVvVHJhY2stPkFkZE9yVXBkYXRlU2luayh0aGlzLCBydGM6OlZpZGVv
U2lua1dhbnRzKCkpOwotfQotCi12b2lkIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6c3Rv
cFByb2R1Y2luZ0RhdGEoKQotewotICAgIGlmIChtX3ZpZGVvVHJhY2spCi0gICAgICAgIG1fdmlk
ZW9UcmFjay0+UmVtb3ZlU2luayh0aGlzKTsKLX0KLQotQ1ZQaXhlbEJ1ZmZlclJlZiBSZWFsdGlt
ZUluY29taW5nVmlkZW9Tb3VyY2U6OnBpeGVsQnVmZmVyRnJvbVZpZGVvRnJhbWUoY29uc3Qgd2Vi
cnRjOjpWaWRlb0ZyYW1lJiBmcmFtZSkKLXsKLSAgICBpZiAobXV0ZWQoKSkgewotICAgICAgICBp
ZiAoIW1fYmxhY2tGcmFtZSB8fCBtX2JsYWNrRnJhbWVXaWR0aCAhPSBmcmFtZS53aWR0aCgpIHx8
IG1fYmxhY2tGcmFtZUhlaWdodCAhPSBmcmFtZS5oZWlnaHQoKSkgewotICAgICAgICAgICAgQ1ZQ
aXhlbEJ1ZmZlclJlZiBwaXhlbEJ1ZmZlciA9IG51bGxwdHI7Ci0gICAgICAgICAgICBhdXRvIHN0
YXR1cyA9IENWUGl4ZWxCdWZmZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgZnJhbWUud2lk
dGgoKSwgZnJhbWUuaGVpZ2h0KCksIGtDVlBpeGVsRm9ybWF0VHlwZV80MjBZcENiQ3I4UGxhbmFy
LCBudWxscHRyLCAmcGl4ZWxCdWZmZXIpOwotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChzdGF0
dXMsIHN0YXR1cyA9PSBub0Vycik7Ci0KLSAgICAgICAgICAgIG1fYmxhY2tGcmFtZSA9IHBpeGVs
QnVmZmVyOwotICAgICAgICAgICAgbV9ibGFja0ZyYW1lV2lkdGggPSBmcmFtZS53aWR0aCgpOwot
ICAgICAgICAgICAgbV9ibGFja0ZyYW1lSGVpZ2h0ID0gZnJhbWUuaGVpZ2h0KCk7Ci0KLSAgICAg
ICAgICAgIHN0YXR1cyA9IENWUGl4ZWxCdWZmZXJMb2NrQmFzZUFkZHJlc3MocGl4ZWxCdWZmZXIs
IDApOwotICAgICAgICAgICAgQVNTRVJUKHN0YXR1cyA9PSBub0Vycik7Ci0gICAgICAgICAgICB2
b2lkKiBkYXRhID0gQ1ZQaXhlbEJ1ZmZlckdldEJhc2VBZGRyZXNzKHBpeGVsQnVmZmVyKTsKLSAg
ICAgICAgICAgIHNpemVfdCB5TGVuZ3RoID0gZnJhbWUud2lkdGgoKSAqIGZyYW1lLmhlaWdodCgp
OwotICAgICAgICAgICAgbWVtc2V0KGRhdGEsIDAsIHlMZW5ndGgpOwotICAgICAgICAgICAgbWVt
c2V0KHN0YXRpY19jYXN0PHVpbnQ4X3QqPihkYXRhKSArIHlMZW5ndGgsIDEyOCwgeUxlbmd0aCAv
IDIpOwotCi0gICAgICAgICAgICBzdGF0dXMgPSBDVlBpeGVsQnVmZmVyVW5sb2NrQmFzZUFkZHJl
c3MocGl4ZWxCdWZmZXIsIDApOwotICAgICAgICAgICAgQVNTRVJUKCFzdGF0dXMpOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiBtX2JsYWNrRnJhbWUuZ2V0KCk7Ci0gICAgfQotICAgIGF1dG8g
YnVmZmVyID0gZnJhbWUudmlkZW9fZnJhbWVfYnVmZmVyKCk7Ci0gICAgQVNTRVJUKGJ1ZmZlci0+
dHlwZSgpID09IHdlYnJ0Yzo6VmlkZW9GcmFtZUJ1ZmZlcjo6VHlwZTo6a05hdGl2ZSk7Ci0gICAg
cmV0dXJuIHN0YXRpY19jYXN0PHdlYnJ0Yzo6Q29yZVZpZGVvRnJhbWVCdWZmZXImPigqYnVmZmVy
KS5waXhlbF9idWZmZXIoKTsKLX0KLQotdm9pZCBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6
Ok9uRnJhbWUoY29uc3Qgd2VicnRjOjpWaWRlb0ZyYW1lJiBmcmFtZSkKLXsKLSAgICBpZiAoIWlz
UHJvZHVjaW5nRGF0YSgpKQotICAgICAgICByZXR1cm47Ci0KLSNpZiAhUkVMRUFTRV9MT0dfRElT
QUJMRUQKLSAgICBpZiAoISgrK21fbnVtYmVyT2ZGcmFtZXMgJSAzMCkpCi0gICAgICAgIFJFTEVB
U0VfTE9HKE1lZGlhU3RyZWFtLCAiUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlOjpPbkZyYW1l
ICV6dSBmcmFtZSIsIG1fbnVtYmVyT2ZGcmFtZXMpOwotI2VuZGlmCi0KLSAgICBhdXRvIHBpeGVs
QnVmZmVyID0gcGl4ZWxCdWZmZXJGcm9tVmlkZW9GcmFtZShmcmFtZSk7Ci0KLSAgICAvLyBGSVhN
RTogQ29udmVydCB0aW1pbmcgaW5mb3JtYXRpb24gZnJvbSBWaWRlb0ZyYW1lIHRvIENNU2FtcGxl
VGltaW5nSW5mby4KLSAgICAvLyBGb3IgdGhlIG1vbWVudCwgd2Ugd2lsbCBwcmV0ZW5kIHRoYXQg
ZnJhbWVzIHNob3VsZCBiZSByZW5kZXJlZCBhc2FwLgotICAgIENNU2FtcGxlVGltaW5nSW5mbyB0
aW1pbmdJbmZvOwotICAgIHRpbWluZ0luZm8ucHJlc2VudGF0aW9uVGltZVN0YW1wID0ga0NNVGlt
ZUludmFsaWQ7Ci0gICAgdGltaW5nSW5mby5kZWNvZGVUaW1lU3RhbXAgPSBrQ01UaW1lSW52YWxp
ZDsKLSAgICB0aW1pbmdJbmZvLmR1cmF0aW9uID0ga0NNVGltZUludmFsaWQ7Ci0KLSAgICBDTVZp
ZGVvRm9ybWF0RGVzY3JpcHRpb25SZWYgZm9ybWF0RGVzY3JpcHRpb247Ci0gICAgT1NTdGF0dXMg
b3N0YXR1cyA9IENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbkNyZWF0ZUZvckltYWdlQnVmZmVyKGtD
RkFsbG9jYXRvckRlZmF1bHQsIChDVkltYWdlQnVmZmVyUmVmKXBpeGVsQnVmZmVyLCAmZm9ybWF0
RGVzY3JpcHRpb24pOwotICAgIGlmIChvc3RhdHVzICE9IG5vRXJyKSB7Ci0gICAgICAgIExPR19F
UlJPUigiRmFpbGVkIHRvIGluaXRpYWxpemUgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uOiAlZCIs
IHN0YXRpY19jYXN0PGludD4ob3N0YXR1cykpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgQ01TYW1wbGVCdWZmZXJSZWYgc2FtcGxlQnVmZmVyOwotICAgIG9zdGF0dXMgPSBDTVNhbXBs
ZUJ1ZmZlckNyZWF0ZVJlYWR5V2l0aEltYWdlQnVmZmVyKGtDRkFsbG9jYXRvckRlZmF1bHQsIChD
VkltYWdlQnVmZmVyUmVmKXBpeGVsQnVmZmVyLCBmb3JtYXREZXNjcmlwdGlvbiwgJnRpbWluZ0lu
Zm8sICZzYW1wbGVCdWZmZXIpOwotICAgIGlmIChvc3RhdHVzICE9IG5vRXJyKSB7Ci0gICAgICAg
IExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSB0aGUgc2FtcGxlIGJ1ZmZlcjogJWQiLCBzdGF0
aWNfY2FzdDxpbnQ+KG9zdGF0dXMpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBDRlJl
bGVhc2UoZm9ybWF0RGVzY3JpcHRpb24pOwotCi0gICAgYXV0byBzYW1wbGUgPSBhZG9wdENGKHNh
bXBsZUJ1ZmZlcik7Ci0KLSAgICBDRkFycmF5UmVmIGF0dGFjaG1lbnRzQXJyYXkgPSBDTVNhbXBs
ZUJ1ZmZlckdldFNhbXBsZUF0dGFjaG1lbnRzQXJyYXkoc2FtcGxlQnVmZmVyLCB0cnVlKTsKLSAg
ICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCBDRkFycmF5R2V0Q291bnQoYXR0YWNobWVudHNBcnJh
eSk7ICsraSkgewotICAgICAgICBDRk11dGFibGVEaWN0aW9uYXJ5UmVmIGF0dGFjaG1lbnRzID0g
KENGTXV0YWJsZURpY3Rpb25hcnlSZWYpQ0ZBcnJheUdldFZhbHVlQXRJbmRleChhdHRhY2htZW50
c0FycmF5LCBpKTsKLSAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUoYXR0YWNobWVudHMsIGtD
TVNhbXBsZUF0dGFjaG1lbnRLZXlfRGlzcGxheUltbWVkaWF0ZWx5LCBrQ0ZCb29sZWFuVHJ1ZSk7
Ci0gICAgfQotCi0gICAgdW5zaWduZWQgd2lkdGggPSBmcmFtZS53aWR0aCgpOwotICAgIHVuc2ln
bmVkIGhlaWdodCA9IGZyYW1lLmhlaWdodCgpOwotCi0gICAgTWVkaWFTYW1wbGU6OlZpZGVvUm90
YXRpb24gcm90YXRpb247Ci0gICAgc3dpdGNoIChmcmFtZS5yb3RhdGlvbigpKSB7Ci0gICAgY2Fz
ZSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzA6Ci0gICAgICAgIHJvdGF0aW9uID0gTWVkaWFTYW1w
bGU6OlZpZGVvUm90YXRpb246Ok5vbmU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ugd2VicnRj
OjprVmlkZW9Sb3RhdGlvbl8xODA6Ci0gICAgICAgIHJvdGF0aW9uID0gTWVkaWFTYW1wbGU6OlZp
ZGVvUm90YXRpb246OlVwc2lkZURvd247Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ugd2VicnRj
OjprVmlkZW9Sb3RhdGlvbl85MDoKLSAgICAgICAgcm90YXRpb24gPSBNZWRpYVNhbXBsZTo6Vmlk
ZW9Sb3RhdGlvbjo6UmlnaHQ7Ci0gICAgICAgIHN0ZDo6c3dhcCh3aWR0aCwgaGVpZ2h0KTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzI3MDoKLSAgICAg
ICAgcm90YXRpb24gPSBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6TGVmdDsKLSAgICAgICAg
c3RkOjpzd2FwKHdpZHRoLCBoZWlnaHQpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBS
ZWZQdHI8UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwot
ICAgIGNhbGxPbk1haW5UaHJlYWQoW3Byb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRo
aXMpLCBzYW1wbGUgPSBXVEZNb3ZlKHNhbXBsZSksIHdpZHRoLCBoZWlnaHQsIHJvdGF0aW9uXSB7
Ci0gICAgICAgIHByb3RlY3RlZFRoaXMtPnByb2Nlc3NOZXdTYW1wbGUoc2FtcGxlLmdldCgpLCB3
aWR0aCwgaGVpZ2h0LCByb3RhdGlvbik7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgUmVhbHRpbWVJbmNv
bWluZ1ZpZGVvU291cmNlOjpwcm9jZXNzTmV3U2FtcGxlKENNU2FtcGxlQnVmZmVyUmVmIHNhbXBs
ZSwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgTWVkaWFTYW1wbGU6OlZpZGVvUm90
YXRpb24gcm90YXRpb24pCi17Ci0gICAgbV9idWZmZXIgPSBzYW1wbGU7Ci0gICAgaWYgKHdpZHRo
ICE9IG1fY3VycmVudFNldHRpbmdzLndpZHRoKCkgfHwgaGVpZ2h0ICE9IG1fY3VycmVudFNldHRp
bmdzLmhlaWdodCgpKSB7Ci0gICAgICAgIG1fY3VycmVudFNldHRpbmdzLnNldFdpZHRoKHdpZHRo
KTsKLSAgICAgICAgbV9jdXJyZW50U2V0dGluZ3Muc2V0SGVpZ2h0KGhlaWdodCk7Ci0gICAgICAg
IHNldHRpbmdzRGlkQ2hhbmdlKCk7Ci0gICAgfQotCi0gICAgdmlkZW9TYW1wbGVBdmFpbGFibGUo
TWVkaWFTYW1wbGVBVkZPYmpDOjpjcmVhdGUoc2FtcGxlLCByb3RhdGlvbikpOwotfQotCi1jb25z
dCBSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzJiBSZWFsdGltZUluY29taW5nVmlkZW9T
b3VyY2U6OmNhcGFiaWxpdGllcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFJlYWx0aW1lTWVkaWFT
b3VyY2VDYXBhYmlsaXRpZXM6OmVtcHR5Q2FwYWJpbGl0aWVzKCk7Ci19Ci0KLWNvbnN0IFJlYWx0
aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyYgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlOjpzZXR0
aW5ncygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fY3VycmVudFNldHRpbmdzOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoTElCV0VCUlRDKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lSW5jb21p
bmdWaWRlb1NvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFj
L1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAxZWI3YzM2NGZlMzIzMjIyMmVhYjRmMjViN2I0MTAwY2M5MTAyODA5Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuaAorKysgL2Rl
di9udWxsCkBAIC0xLDg2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCi0gKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9y
cwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbSB0aGlzCi0gKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgVVNFKExJQldF
QlJUQykKLQotI2luY2x1ZGUgIkxpYldlYlJUQ01hY3Jvcy5oIgotI2luY2x1ZGUgIlJlYWx0aW1l
TWVkaWFTb3VyY2UuaCIKLSNpbmNsdWRlIDx3ZWJydGMvYXBpL21lZGlhc3RyZWFtaW50ZXJmYWNl
Lmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi11c2luZyBDTVNhbXBsZUJ1ZmZlclJl
ZiA9IHN0cnVjdCBvcGFxdWVDTVNhbXBsZUJ1ZmZlcio7Ci11c2luZyBDVlBpeGVsQnVmZmVyUmVm
ID0gc3RydWN0IF9fQ1ZCdWZmZXIqOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENh
cHR1cmVEZXZpY2U7Ci0KLWNsYXNzIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZSBmaW5hbCA6
IHB1YmxpYyBSZWFsdGltZU1lZGlhU291cmNlLCBwcml2YXRlIHJ0Yzo6VmlkZW9TaW5rSW50ZXJm
YWNlPHdlYnJ0Yzo6VmlkZW9GcmFtZT4gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8UmVhbHRp
bWVJbmNvbWluZ1ZpZGVvU291cmNlPiBjcmVhdGUocnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6
VmlkZW9UcmFja0ludGVyZmFjZT4mJiwgU3RyaW5nJiYpOwotICAgIH5SZWFsdGltZUluY29taW5n
VmlkZW9Tb3VyY2UoKSB7IHN0b3BQcm9kdWNpbmdEYXRhKCk7IH0KLQotICAgIHZvaWQgc2V0U291
cmNlVHJhY2socnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9UcmFja0ludGVyZmFjZT4m
Jik7Ci0KLXByaXZhdGU6Ci0gICAgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlKHJ0Yzo6c2Nv
cGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvVHJhY2tJbnRlcmZhY2U+JiYsIFN0cmluZyYmKTsKLQot
ICAgIC8vIFJlYWx0aW1lTWVkaWFTb3VyY2UgQVBJCi0gICAgdm9pZCBzdGFydFByb2R1Y2luZ0Rh
dGEoKSBmaW5hbDsKLSAgICB2b2lkIHN0b3BQcm9kdWNpbmdEYXRhKCkgIGZpbmFsOwotCi0gICAg
Y29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcyYgY2FwYWJpbGl0aWVzKCkgY29u
c3QgZmluYWw7Ci0gICAgY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzJiBzZXR0aW5n
cygpIGNvbnN0IGZpbmFsOwotCi0gICAgdm9pZCBwcm9jZXNzTmV3U2FtcGxlKENNU2FtcGxlQnVm
ZmVyUmVmLCB1bnNpZ25lZCwgdW5zaWduZWQsIE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uKTsK
LQotICAgIGJvb2wgYXBwbHlTaXplKGNvbnN0IEludFNpemUmKSBmaW5hbCB7IHJldHVybiB0cnVl
OyB9Ci0KLSAgICAvLyBydGM6OlZpZGVvU2lua0ludGVyZmFjZQotICAgIHZvaWQgT25GcmFtZShj
b25zdCB3ZWJydGM6OlZpZGVvRnJhbWUmKSBmaW5hbDsKLQotICAgIENWUGl4ZWxCdWZmZXJSZWYg
cGl4ZWxCdWZmZXJGcm9tVmlkZW9GcmFtZShjb25zdCB3ZWJydGM6OlZpZGVvRnJhbWUmKTsKLQot
ICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyBtX2N1cnJlbnRTZXR0aW5nczsKLSAgICBy
dGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb1RyYWNrSW50ZXJmYWNlPiBtX3ZpZGVvVHJh
Y2s7Ci0gICAgUmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiBtX2J1ZmZlcjsKLSAgICBSZXRh
aW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gbV9ibGFja0ZyYW1lOwotICAgIGludCBtX2JsYWNrRnJh
bWVXaWR0aCB7IDAgfTsKLSAgICBpbnQgbV9ibGFja0ZyYW1lSGVpZ2h0IHsgMCB9OwotI2lmICFS
RUxFQVNFX0xPR19ESVNBQkxFRAotICAgIHNpemVfdCBtX251bWJlck9mRnJhbWVzIHsgMCB9Owot
I2VuZGlmCi19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoTElC
V0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
bWFjL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUNvY29hLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VDb2Nv
YS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYjVmMGVmZTk3ZDg5YmEwMTZjZWZhZDM1OGQzOTAzMjQ3ZDIyZDdk
ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L21hYy9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VDb2NvYS5jcHAKQEAgLTAsMCArMSwxNzEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlQ29jb2EuaCIKKworI2lmIFVT
RShMSUJXRUJSVEMpCisKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiTWVkaWFTYW1w
bGVBVkZPYmpDLmgiCisjaW5jbHVkZSA8d2VicnRjL3Nkay9vYmpjL0ZyYW1ld29yay9DbGFzc2Vz
L1ZpZGVvL2NvcmV2aWRlb19mcmFtZV9idWZmZXIuaD4KKworI2luY2x1ZGUgIkNvcmVNZWRpYVNv
ZnRMaW5rLmgiCisjaW5jbHVkZSAiQ29yZVZpZGVvU29mdExpbmsuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitSZWY8UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlPiBSZWFsdGltZUluY29t
aW5nVmlkZW9Tb3VyY2U6OmNyZWF0ZShydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb1Ry
YWNrSW50ZXJmYWNlPiYmIHZpZGVvVHJhY2ssIFN0cmluZyYmIHRyYWNrSWQpCit7CisgICAgYXV0
byBzb3VyY2UgPSBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VDb2NvYTo6Y3JlYXRlKFdURk1v
dmUodmlkZW9UcmFjayksIFdURk1vdmUodHJhY2tJZCkpOworICAgIHNvdXJjZS0+c3RhcnQoKTsK
KyAgICByZXR1cm4gV1RGTW92ZShzb3VyY2UpOworfQorCitSZWY8UmVhbHRpbWVJbmNvbWluZ1Zp
ZGVvU291cmNlQ29jb2E+IFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUNvY29hOjpjcmVhdGUo
cnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9UcmFja0ludGVyZmFjZT4mJiB2aWRlb1Ry
YWNrLCBTdHJpbmcmJiB0cmFja0lkKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFJlYWx0
aW1lSW5jb21pbmdWaWRlb1NvdXJjZUNvY29hKFdURk1vdmUodmlkZW9UcmFjayksIFdURk1vdmUo
dHJhY2tJZCkpKTsKK30KKworUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlQ29jb2E6OlJlYWx0
aW1lSW5jb21pbmdWaWRlb1NvdXJjZUNvY29hKHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZp
ZGVvVHJhY2tJbnRlcmZhY2U+JiYgdmlkZW9UcmFjaywgU3RyaW5nJiYgdmlkZW9UcmFja0lkKQor
ICAgIDogUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlKFdURk1vdmUodmlkZW9UcmFjayksIFdU
Rk1vdmUodmlkZW9UcmFja0lkKSkKK3sKK30KKworQ1ZQaXhlbEJ1ZmZlclJlZiBSZWFsdGltZUlu
Y29taW5nVmlkZW9Tb3VyY2VDb2NvYTo6cGl4ZWxCdWZmZXJGcm9tVmlkZW9GcmFtZShjb25zdCB3
ZWJydGM6OlZpZGVvRnJhbWUmIGZyYW1lKQoreworICAgIGlmIChtdXRlZCgpKSB7CisgICAgICAg
IGlmICghbV9ibGFja0ZyYW1lIHx8IG1fYmxhY2tGcmFtZVdpZHRoICE9IGZyYW1lLndpZHRoKCkg
fHwgbV9ibGFja0ZyYW1lSGVpZ2h0ICE9IGZyYW1lLmhlaWdodCgpKSB7CisgICAgICAgICAgICBD
VlBpeGVsQnVmZmVyUmVmIHBpeGVsQnVmZmVyID0gbnVsbHB0cjsKKyAgICAgICAgICAgIGF1dG8g
c3RhdHVzID0gQ1ZQaXhlbEJ1ZmZlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBmcmFtZS53
aWR0aCgpLCBmcmFtZS5oZWlnaHQoKSwga0NWUGl4ZWxGb3JtYXRUeXBlXzQyMFlwQ2JDcjhQbGFu
YXIsIG51bGxwdHIsICZwaXhlbEJ1ZmZlcik7CisgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHN0
YXR1cywgc3RhdHVzID09IG5vRXJyKTsKKworICAgICAgICAgICAgbV9ibGFja0ZyYW1lID0gcGl4
ZWxCdWZmZXI7CisgICAgICAgICAgICBtX2JsYWNrRnJhbWVXaWR0aCA9IGZyYW1lLndpZHRoKCk7
CisgICAgICAgICAgICBtX2JsYWNrRnJhbWVIZWlnaHQgPSBmcmFtZS5oZWlnaHQoKTsKKworICAg
ICAgICAgICAgc3RhdHVzID0gQ1ZQaXhlbEJ1ZmZlckxvY2tCYXNlQWRkcmVzcyhwaXhlbEJ1ZmZl
ciwgMCk7CisgICAgICAgICAgICBBU1NFUlQoc3RhdHVzID09IG5vRXJyKTsKKyAgICAgICAgICAg
IHZvaWQqIGRhdGEgPSBDVlBpeGVsQnVmZmVyR2V0QmFzZUFkZHJlc3MocGl4ZWxCdWZmZXIpOwor
ICAgICAgICAgICAgc2l6ZV90IHlMZW5ndGggPSBmcmFtZS53aWR0aCgpICogZnJhbWUuaGVpZ2h0
KCk7CisgICAgICAgICAgICBtZW1zZXQoZGF0YSwgMCwgeUxlbmd0aCk7CisgICAgICAgICAgICBt
ZW1zZXQoc3RhdGljX2Nhc3Q8dWludDhfdCo+KGRhdGEpICsgeUxlbmd0aCwgMTI4LCB5TGVuZ3Ro
IC8gMik7CisKKyAgICAgICAgICAgIHN0YXR1cyA9IENWUGl4ZWxCdWZmZXJVbmxvY2tCYXNlQWRk
cmVzcyhwaXhlbEJ1ZmZlciwgMCk7CisgICAgICAgICAgICBBU1NFUlQoIXN0YXR1cyk7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIG1fYmxhY2tGcmFtZS5nZXQoKTsKKyAgICB9CisgICAgYXV0
byBidWZmZXIgPSBmcmFtZS52aWRlb19mcmFtZV9idWZmZXIoKTsKKyAgICBBU1NFUlQoYnVmZmVy
LT50eXBlKCkgPT0gd2VicnRjOjpWaWRlb0ZyYW1lQnVmZmVyOjpUeXBlOjprTmF0aXZlKTsKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8d2VicnRjOjpDb3JlVmlkZW9GcmFtZUJ1ZmZlciY+KCpidWZm
ZXIpLnBpeGVsX2J1ZmZlcigpOworfQorCit2b2lkIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJj
ZUNvY29hOjpPbkZyYW1lKGNvbnN0IHdlYnJ0Yzo6VmlkZW9GcmFtZSYgZnJhbWUpCit7CisgICAg
aWYgKCFpc1Byb2R1Y2luZ0RhdGEoKSkKKyAgICAgICAgcmV0dXJuOworCisjaWYgIVJFTEVBU0Vf
TE9HX0RJU0FCTEVECisgICAgaWYgKCEoKyttX251bWJlck9mRnJhbWVzICUgMzApKQorICAgICAg
ICBSRUxFQVNFX0xPRyhNZWRpYVN0cmVhbSwgIlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUNv
Y29hOjpPbkZyYW1lICV6dSBmcmFtZSIsIG1fbnVtYmVyT2ZGcmFtZXMpOworI2VuZGlmCisKKyAg
ICBhdXRvIHBpeGVsQnVmZmVyID0gcGl4ZWxCdWZmZXJGcm9tVmlkZW9GcmFtZShmcmFtZSk7CisK
KyAgICAvLyBGSVhNRTogQ29udmVydCB0aW1pbmcgaW5mb3JtYXRpb24gZnJvbSBWaWRlb0ZyYW1l
IHRvIENNU2FtcGxlVGltaW5nSW5mby4KKyAgICAvLyBGb3IgdGhlIG1vbWVudCwgd2Ugd2lsbCBw
cmV0ZW5kIHRoYXQgZnJhbWVzIHNob3VsZCBiZSByZW5kZXJlZCBhc2FwLgorICAgIENNU2FtcGxl
VGltaW5nSW5mbyB0aW1pbmdJbmZvOworICAgIHRpbWluZ0luZm8ucHJlc2VudGF0aW9uVGltZVN0
YW1wID0ga0NNVGltZUludmFsaWQ7CisgICAgdGltaW5nSW5mby5kZWNvZGVUaW1lU3RhbXAgPSBr
Q01UaW1lSW52YWxpZDsKKyAgICB0aW1pbmdJbmZvLmR1cmF0aW9uID0ga0NNVGltZUludmFsaWQ7
CisKKyAgICBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25SZWYgZm9ybWF0RGVzY3JpcHRpb247Cisg
ICAgT1NTdGF0dXMgb3N0YXR1cyA9IENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbkNyZWF0ZUZvcklt
YWdlQnVmZmVyKGtDRkFsbG9jYXRvckRlZmF1bHQsIChDVkltYWdlQnVmZmVyUmVmKXBpeGVsQnVm
ZmVyLCAmZm9ybWF0RGVzY3JpcHRpb24pOworICAgIGlmIChvc3RhdHVzICE9IG5vRXJyKSB7Cisg
ICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGluaXRpYWxpemUgQ01WaWRlb0Zvcm1hdERlc2Ny
aXB0aW9uOiAlZCIsIHN0YXRpY19jYXN0PGludD4ob3N0YXR1cykpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgQ01TYW1wbGVCdWZmZXJSZWYgc2FtcGxlQnVmZmVyOworICAgIG9zdGF0
dXMgPSBDTVNhbXBsZUJ1ZmZlckNyZWF0ZVJlYWR5V2l0aEltYWdlQnVmZmVyKGtDRkFsbG9jYXRv
ckRlZmF1bHQsIChDVkltYWdlQnVmZmVyUmVmKXBpeGVsQnVmZmVyLCBmb3JtYXREZXNjcmlwdGlv
biwgJnRpbWluZ0luZm8sICZzYW1wbGVCdWZmZXIpOworICAgIGlmIChvc3RhdHVzICE9IG5vRXJy
KSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSB0aGUgc2FtcGxlIGJ1ZmZl
cjogJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KG9zdGF0dXMpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBDRlJlbGVhc2UoZm9ybWF0RGVzY3JpcHRpb24pOworCisgICAgYXV0byBzYW1wbGUg
PSBhZG9wdENGKHNhbXBsZUJ1ZmZlcik7CisKKyAgICBDRkFycmF5UmVmIGF0dGFjaG1lbnRzQXJy
YXkgPSBDTVNhbXBsZUJ1ZmZlckdldFNhbXBsZUF0dGFjaG1lbnRzQXJyYXkoc2FtcGxlQnVmZmVy
LCB0cnVlKTsKKyAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCBDRkFycmF5R2V0Q291bnQoYXR0
YWNobWVudHNBcnJheSk7ICsraSkgeworICAgICAgICBDRk11dGFibGVEaWN0aW9uYXJ5UmVmIGF0
dGFjaG1lbnRzID0gKENGTXV0YWJsZURpY3Rpb25hcnlSZWYpQ0ZBcnJheUdldFZhbHVlQXRJbmRl
eChhdHRhY2htZW50c0FycmF5LCBpKTsKKyAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUoYXR0
YWNobWVudHMsIGtDTVNhbXBsZUF0dGFjaG1lbnRLZXlfRGlzcGxheUltbWVkaWF0ZWx5LCBrQ0ZC
b29sZWFuVHJ1ZSk7CisgICAgfQorCisgICAgdW5zaWduZWQgd2lkdGggPSBmcmFtZS53aWR0aCgp
OworICAgIHVuc2lnbmVkIGhlaWdodCA9IGZyYW1lLmhlaWdodCgpOworCisgICAgTWVkaWFTYW1w
bGU6OlZpZGVvUm90YXRpb24gcm90YXRpb247CisgICAgc3dpdGNoIChmcmFtZS5yb3RhdGlvbigp
KSB7CisgICAgY2FzZSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzA6CisgICAgICAgIHJvdGF0aW9u
ID0gTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246Ok5vbmU7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8xODA6CisgICAgICAgIHJvdGF0aW9uID0gTWVk
aWFTYW1wbGU6OlZpZGVvUm90YXRpb246OlVwc2lkZURvd247CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugd2VicnRjOjprVmlkZW9Sb3RhdGlvbl85MDoKKyAgICAgICAgcm90YXRpb24gPSBNZWRp
YVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6UmlnaHQ7CisgICAgICAgIHN0ZDo6c3dhcCh3aWR0aCwg
aGVpZ2h0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9u
XzI3MDoKKyAgICAgICAgcm90YXRpb24gPSBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6TGVm
dDsKKyAgICAgICAgc3RkOjpzd2FwKHdpZHRoLCBoZWlnaHQpOworICAgICAgICBicmVhazsKKyAg
ICB9CisKKyAgICBSZWZQdHI8UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlQ29jb2E+IHByb3Rl
Y3RlZFRoaXModGhpcyk7CisgICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IG1h
a2VSZWYoKnRoaXMpLCBzYW1wbGUgPSBXVEZNb3ZlKHNhbXBsZSksIHdpZHRoLCBoZWlnaHQsIHJv
dGF0aW9uXSB7CisgICAgICAgIHByb3RlY3RlZFRoaXMtPnByb2Nlc3NOZXdTYW1wbGUoc2FtcGxl
LmdldCgpLCB3aWR0aCwgaGVpZ2h0LCByb3RhdGlvbik7CisgICAgfSk7Cit9CisKK3ZvaWQgUmVh
bHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlQ29jb2E6OnByb2Nlc3NOZXdTYW1wbGUoQ01TYW1wbGVC
dWZmZXJSZWYgc2FtcGxlLCB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCBNZWRpYVNh
bXBsZTo6VmlkZW9Sb3RhdGlvbiByb3RhdGlvbikKK3sKKyAgICBtX2J1ZmZlciA9IHNhbXBsZTsK
KyAgICBpZiAod2lkdGggIT0gbV9jdXJyZW50U2V0dGluZ3Mud2lkdGgoKSB8fCBoZWlnaHQgIT0g
bV9jdXJyZW50U2V0dGluZ3MuaGVpZ2h0KCkpIHsKKyAgICAgICAgbV9jdXJyZW50U2V0dGluZ3Mu
c2V0V2lkdGgod2lkdGgpOworICAgICAgICBtX2N1cnJlbnRTZXR0aW5ncy5zZXRIZWlnaHQoaGVp
Z2h0KTsKKyAgICAgICAgc2V0dGluZ3NEaWRDaGFuZ2UoKTsKKyAgICB9CisKKyAgICB2aWRlb1Nh
bXBsZUF2YWlsYWJsZShNZWRpYVNhbXBsZUFWRk9iakM6OmNyZWF0ZShzYW1wbGUsIHJvdGF0aW9u
KSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShMSUJXRUJS
VEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMv
UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlQ29jb2EuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VDb2NvYS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmRlOTg5MmExYzgyN2Q0YmI5NjFjZjI2MWQ2NDc5MDZiM2EzMjQ5ZWMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVh
bHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlQ29jb2EuaApAQCAtMCwwICsxLDYyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogICAgaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoTElCV0VC
UlRDKQorCisjaW5jbHVkZSAiUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmgiCisKK3VzaW5n
IENNU2FtcGxlQnVmZmVyUmVmID0gc3RydWN0IG9wYXF1ZUNNU2FtcGxlQnVmZmVyKjsKK3VzaW5n
IENWUGl4ZWxCdWZmZXJSZWYgPSBzdHJ1Y3QgX19DVkJ1ZmZlcio7CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlQ29jb2EgZmluYWwgOiBw
dWJsaWMgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UmVmPFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUNvY29hPiBjcmVhdGUocnRjOjpzY29wZWRf
cmVmcHRyPHdlYnJ0Yzo6VmlkZW9UcmFja0ludGVyZmFjZT4mJiwgU3RyaW5nJiYpOworCitwcml2
YXRlOgorICAgIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUNvY29hKHJ0Yzo6c2NvcGVkX3Jl
ZnB0cjx3ZWJydGM6OlZpZGVvVHJhY2tJbnRlcmZhY2U+JiYsIFN0cmluZyYmKTsKKyAgICB2b2lk
IHByb2Nlc3NOZXdTYW1wbGUoQ01TYW1wbGVCdWZmZXJSZWYsIHVuc2lnbmVkLCB1bnNpZ25lZCwg
TWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb24pOworICAgIENWUGl4ZWxCdWZmZXJSZWYgcGl4ZWxC
dWZmZXJGcm9tVmlkZW9GcmFtZShjb25zdCB3ZWJydGM6OlZpZGVvRnJhbWUmKTsKKworICAgIC8v
IHJ0Yzo6VmlkZW9TaW5rSW50ZXJmYWNlCisgICAgdm9pZCBPbkZyYW1lKGNvbnN0IHdlYnJ0Yzo6
VmlkZW9GcmFtZSYpIGZpbmFsOworCisgICAgUmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiBt
X2J1ZmZlcjsKKyAgICBSZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gbV9ibGFja0ZyYW1lOwor
ICAgIGludCBtX2JsYWNrRnJhbWVXaWR0aCB7IDAgfTsKKyAgICBpbnQgbV9ibGFja0ZyYW1lSGVp
Z2h0IHsgMCB9OworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgIHNpemVfdCBtX251bWJl
ck9mRnJhbWVzIHsgMCB9OworI2VuZGlmCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBVU0UoTElCV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1Zp
ZGVvU291cmNlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Y0NTBkZjMzYzZm
NmEyNTg3ZGEzOWI1ZWM4MmNjZmNkNjBhMGU3ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9t
YWMvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI2
NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCwgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSByZXF1aXJlZCB0byBiZSBtZXQ6Ci0gKgot
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBs
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgotICogQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IKLSAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCi0gKiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5o
IgotCi0jaWYgVVNFKExJQldFQlJUQykKLQotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRl
IDx3ZWJydGMvYXBpL3ZpZGVvL2k0MjBfYnVmZmVyLmg+Ci0jaW5jbHVkZSA8d2VicnRjL2NvbW1v
bl92aWRlby9saWJ5dXYvaW5jbHVkZS93ZWJydGNfbGlieXV2Lmg+Ci0jaW5jbHVkZSA8d2VicnRj
L3Nkay9vYmpjL0ZyYW1ld29yay9DbGFzc2VzL1ZpZGVvL2NvcmV2aWRlb19mcmFtZV9idWZmZXIu
aD4KLSNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KLSNpbmNsdWRlIDx3dGYvTWFpblRocmVh
ZC5oPgotCi0jaW5jbHVkZSAiQ29yZU1lZGlhU29mdExpbmsuaCIKLSNpbmNsdWRlICJDb3JlVmlk
ZW9Tb2Z0TGluay5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVJlYWx0aW1lT3V0Z29pbmdW
aWRlb1NvdXJjZTo6UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlKFJlZjxNZWRpYVN0cmVhbVRy
YWNrUHJpdmF0ZT4mJiB2aWRlb1NvdXJjZSkKLSAgICA6IG1fdmlkZW9Tb3VyY2UoV1RGTW92ZSh2
aWRlb1NvdXJjZSkpCi0gICAgLCBtX2JsYWNrRnJhbWVUaW1lcigqdGhpcywgJlJlYWx0aW1lT3V0
Z29pbmdWaWRlb1NvdXJjZTo6c2VuZE9uZUJsYWNrRnJhbWUpCi17Ci0gICAgbV92aWRlb1NvdXJj
ZS0+YWRkT2JzZXJ2ZXIoKnRoaXMpOwotICAgIGluaXRpYWxpemVGcm9tU291cmNlKCk7Ci19Ci0K
LWJvb2wgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpzZXRTb3VyY2UoUmVmPE1lZGlhU3Ry
ZWFtVHJhY2tQcml2YXRlPiYmIG5ld1NvdXJjZSkKLXsKLSAgICBpZiAoIW1faW5pdGlhbFNldHRp
bmdzKQotICAgICAgICBtX2luaXRpYWxTZXR0aW5ncyA9IG1fdmlkZW9Tb3VyY2UtPnNvdXJjZSgp
LnNldHRpbmdzKCk7Ci0KLSAgICBtX3ZpZGVvU291cmNlLT5yZW1vdmVPYnNlcnZlcigqdGhpcyk7
Ci0gICAgbV92aWRlb1NvdXJjZSA9IFdURk1vdmUobmV3U291cmNlKTsKLSAgICBtX3ZpZGVvU291
cmNlLT5hZGRPYnNlcnZlcigqdGhpcyk7Ci0KLSAgICBpbml0aWFsaXplRnJvbVNvdXJjZSgpOwot
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNl
OjpzdG9wKCkKLXsKLSAgICBtX3ZpZGVvU291cmNlLT5yZW1vdmVPYnNlcnZlcigqdGhpcyk7Ci0g
ICAgbV9ibGFja0ZyYW1lVGltZXIuc3RvcCgpOwotICAgIG1faXNTdG9wcGVkID0gdHJ1ZTsKLX0K
LQotdm9pZCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnVwZGF0ZUJsYWNrRnJhbWVzU2Vu
ZGluZygpCi17Ci0gICAgaWYgKCFtX211dGVkICYmIG1fZW5hYmxlZCkgewotICAgICAgICBpZiAo
bV9ibGFja0ZyYW1lVGltZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgICAgIG1fYmxhY2tGcmFtZVRp
bWVyLnN0b3AoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHNlbmRCbGFja0ZyYW1l
c0lmTmVlZGVkKCk7Ci19Ci0KLXZvaWQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpzb3Vy
Y2VNdXRlZENoYW5nZWQoKQotewotICAgIEFTU0VSVChtX211dGVkICE9IG1fdmlkZW9Tb3VyY2Ut
Pm11dGVkKCkpOwotCi0gICAgbV9tdXRlZCA9IG1fdmlkZW9Tb3VyY2UtPm11dGVkKCk7Ci0KLSAg
ICB1cGRhdGVCbGFja0ZyYW1lc1NlbmRpbmcoKTsKLX0KLQotdm9pZCBSZWFsdGltZU91dGdvaW5n
VmlkZW9Tb3VyY2U6OnNvdXJjZUVuYWJsZWRDaGFuZ2VkKCkKLXsKLSAgICBBU1NFUlQobV9lbmFi
bGVkICE9IG1fdmlkZW9Tb3VyY2UtPmVuYWJsZWQoKSk7Ci0KLSAgICBtX2VuYWJsZWQgPSBtX3Zp
ZGVvU291cmNlLT5lbmFibGVkKCk7Ci0KLSAgICB1cGRhdGVCbGFja0ZyYW1lc1NlbmRpbmcoKTsK
LX0KLQotdm9pZCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OmluaXRpYWxpemVGcm9tU291
cmNlKCkKLXsKLSAgICBjb25zdCBhdXRvJiBzZXR0aW5ncyA9IG1fdmlkZW9Tb3VyY2UtPnNvdXJj
ZSgpLnNldHRpbmdzKCk7Ci0gICAgbV93aWR0aCA9IHNldHRpbmdzLndpZHRoKCk7Ci0gICAgbV9o
ZWlnaHQgPSBzZXR0aW5ncy5oZWlnaHQoKTsKLQotICAgIG1fbXV0ZWQgPSBtX3ZpZGVvU291cmNl
LT5tdXRlZCgpOwotICAgIG1fZW5hYmxlZCA9IG1fdmlkZW9Tb3VyY2UtPmVuYWJsZWQoKTsKLQot
ICAgIHVwZGF0ZUJsYWNrRnJhbWVzU2VuZGluZygpOwotfQotCi1ib29sIFJlYWx0aW1lT3V0Z29p
bmdWaWRlb1NvdXJjZTo6R2V0U3RhdHMoU3RhdHMqKQotewotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotdm9pZCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OkFkZE9yVXBkYXRlU2luayhydGM6
OlZpZGVvU2lua0ludGVyZmFjZTx3ZWJydGM6OlZpZGVvRnJhbWU+KiBzaW5rLCBjb25zdCBydGM6
OlZpZGVvU2lua1dhbnRzJiBzaW5rV2FudHMpCi17Ci0gICAgQVNTRVJUKCFzaW5rV2FudHMuYmxh
Y2tfZnJhbWVzKTsKLQotICAgIGlmIChzaW5rV2FudHMucm90YXRpb25fYXBwbGllZCkKLSAgICAg
ICAgbV9zaG91bGRBcHBseVJvdGF0aW9uID0gdHJ1ZTsKLQotICAgIGlmICghbV9zaW5rcy5jb250
YWlucyhzaW5rKSkKLSAgICAgICAgbV9zaW5rcy5hcHBlbmQoc2luayk7Ci0KLSAgICBjYWxsT25N
YWluVGhyZWFkKFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldKCkgewotICAgICAgICBw
cm90ZWN0ZWRUaGlzLT5zZW5kQmxhY2tGcmFtZXNJZk5lZWRlZCgpOwotICAgIH0pOwotfQotCi12
b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6UmVtb3ZlU2luayhydGM6OlZpZGVvU2lu
a0ludGVyZmFjZTx3ZWJydGM6OlZpZGVvRnJhbWU+KiBzaW5rKQotewotICAgIG1fc2lua3MucmVt
b3ZlRmlyc3Qoc2luayk7Ci0KLSAgICBpZiAobV9zaW5rcy5zaXplKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGNhbGxPbk1haW5UaHJlYWQoW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlz
KV0oKSB7Ci0gICAgICAgIGlmIChwcm90ZWN0ZWRUaGlzLT5tX2JsYWNrRnJhbWVUaW1lci5pc0Fj
dGl2ZSgpKQotICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+bV9ibGFja0ZyYW1lVGltZXIuc3Rv
cCgpOwotICAgIH0pOwotfQotCi12b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6c2Vu
ZEJsYWNrRnJhbWVzSWZOZWVkZWQoKQotewotICAgIGlmIChtX2JsYWNrRnJhbWVUaW1lci5pc0Fj
dGl2ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fc2lua3Muc2l6ZSgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fbXV0ZWQgJiYgbV9lbmFibGVkKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAoIW1fd2lkdGggfHwgIW1faGVpZ2h0KQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAoIW1fYmxhY2tGcmFtZSkgewotICAgICAgICBhdXRvIHdpZHRoID0gbV93aWR0
aDsKLSAgICAgICAgYXV0byBoZWlnaHQgPSBtX2hlaWdodDsKLSAgICAgICAgaWYgKG1fc2hvdWxk
QXBwbHlSb3RhdGlvbiAmJiAobV9jdXJyZW50Um90YXRpb24gPT0gd2VicnRjOjprVmlkZW9Sb3Rh
dGlvbl8wIHx8IG1fY3VycmVudFJvdGF0aW9uID09IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fOTAp
KQotICAgICAgICAgICAgc3RkOjpzd2FwKHdpZHRoLCBoZWlnaHQpOwotICAgICAgICBhdXRvIGZy
YW1lID0gbV9idWZmZXJQb29sLkNyZWF0ZUJ1ZmZlcih3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAg
QVNTRVJUKGZyYW1lKTsKLSAgICAgICAgaWYgKCFmcmFtZSkgewotICAgICAgICAgICAgUkVMRUFT
RV9MT0coV2ViUlRDLCAiUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpzZW5kQmxhY2tGcmFt
ZXNJZk5lZWRlZCB1bmFibGUgdG8gc2VuZCBibGFjayBmcmFtZXMiKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICB3ZWJydGM6Okk0MjBCdWZmZXI6OlNldEJsYWNrKGZy
YW1lLmdldCgpKTsKLSAgICAgICAgbV9ibGFja0ZyYW1lID0gV1RGTW92ZShmcmFtZSk7Ci0gICAg
fQotICAgIHNlbmRPbmVCbGFja0ZyYW1lKCk7Ci0gICAgbV9ibGFja0ZyYW1lVGltZXIuc3RhcnRS
ZXBlYXRpbmcoMV9zKTsKLX0KLQotdm9pZCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnNl
bmRPbmVCbGFja0ZyYW1lKCkKLXsKLSAgICBSRUxFQVNFX0xPRyhNZWRpYVN0cmVhbSwgIlJlYWx0
aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6c2VuZE9uZUJsYWNrRnJhbWUiKTsKLSAgICBzZW5kRnJh
bWUocnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9GcmFtZUJ1ZmZlcj4obV9ibGFja0Zy
YW1lKSk7Ci19Ci0KLXZvaWQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpzZW5kRnJhbWUo
cnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9GcmFtZUJ1ZmZlcj4mJiBidWZmZXIpCi17
Ci0gICAgaW50NjRfdCB0aW1lc3RhbXBNaWNyb1NlY29uZHMgPSBtb25vdG9uaWNhbGx5SW5jcmVh
c2luZ1RpbWVNUygpICogMTAwMDsKLSAgICB3ZWJydGM6OlZpZGVvRnJhbWUgZnJhbWUoYnVmZmVy
LCBtX3Nob3VsZEFwcGx5Um90YXRpb24gPyB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzAgOiBtX2N1
cnJlbnRSb3RhdGlvbiwgdGltZXN0YW1wTWljcm9TZWNvbmRzKTsKLSAgICBmb3IgKGF1dG8qIHNp
bmsgOiBtX3NpbmtzKQotICAgICAgICBzaW5rLT5PbkZyYW1lKGZyYW1lKTsKLX0KLQotdm9pZCBS
ZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnZpZGVvU2FtcGxlQXZhaWxhYmxlKE1lZGlhU2Ft
cGxlJiBzYW1wbGUpCi17Ci0gICAgaWYgKCFtX3NpbmtzLnNpemUoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKG1fbXV0ZWQgfHwgIW1fZW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwotCi0j
aWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECi0gICAgaWYgKCEoKyttX251bWJlck9mRnJhbWVzICUg
MzApKQotICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYVN0cmVhbSwgIlJlYWx0aW1lT3V0Z29pbmdW
aWRlb1NvdXJjZTo6c2VuZEZyYW1lICV6dSBmcmFtZSIsIG1fbnVtYmVyT2ZGcmFtZXMpOwotI2Vu
ZGlmCi0KLSAgICBzd2l0Y2ggKHNhbXBsZS52aWRlb1JvdGF0aW9uKCkpIHsKLSAgICBjYXNlIE1l
ZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpOb25lOgotICAgICAgICBtX2N1cnJlbnRSb3RhdGlv
biA9IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBN
ZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6VXBzaWRlRG93bjoKLSAgICAgICAgbV9jdXJyZW50
Um90YXRpb24gPSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzE4MDsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6UmlnaHQ6Ci0gICAgICAgIG1fY3Vy
cmVudFJvdGF0aW9uID0gd2VicnRjOjprVmlkZW9Sb3RhdGlvbl85MDsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6TGVmdDoKLSAgICAgICAgbV9j
dXJyZW50Um90YXRpb24gPSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzI3MDsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotCi0gICAgQVNTRVJUKHNhbXBsZS5wbGF0Zm9ybVNhbXBsZSgpLnR5cGUgPT0g
UGxhdGZvcm1TYW1wbGU6OkNNU2FtcGxlQnVmZmVyVHlwZSk7Ci0gICAgYXV0byBwaXhlbEJ1ZmZl
ciA9IHN0YXRpY19jYXN0PENWUGl4ZWxCdWZmZXJSZWY+KENNU2FtcGxlQnVmZmVyR2V0SW1hZ2VC
dWZmZXIoc2FtcGxlLnBsYXRmb3JtU2FtcGxlKCkuc2FtcGxlLmNtU2FtcGxlQnVmZmVyKSk7Ci0g
ICAgYXV0byBwaXhlbEZvcm1hdFR5cGUgPSBDVlBpeGVsQnVmZmVyR2V0UGl4ZWxGb3JtYXRUeXBl
KHBpeGVsQnVmZmVyKTsKLQotICAgIGlmIChwaXhlbEZvcm1hdFR5cGUgPT0ga0NWUGl4ZWxGb3Jt
YXRUeXBlXzQyMFlwQ2JDcjhQbGFuYXIgfHwgcGl4ZWxGb3JtYXRUeXBlID09IGtDVlBpeGVsRm9y
bWF0VHlwZV80MjBZcENiQ3I4QmlQbGFuYXJGdWxsUmFuZ2UpIHsKLSAgICAgICAgcnRjOjpzY29w
ZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9GcmFtZUJ1ZmZlcj4gYnVmZmVyID0gbmV3IHJ0Yzo6UmVm
Q291bnRlZE9iamVjdDx3ZWJydGM6OkNvcmVWaWRlb0ZyYW1lQnVmZmVyPihwaXhlbEJ1ZmZlcik7
Ci0gICAgICAgIGlmIChtX3Nob3VsZEFwcGx5Um90YXRpb24gJiYgbV9jdXJyZW50Um90YXRpb24g
IT0gd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8wKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogV2Ug
c2hvdWxkIG1ha2UgQVZWaWRlb0NhcHR1cmVTb3VyY2UgaGFuZGxlIHRoZSByb3RhdGlvbiB3aGVu
ZXZlciBwb3NzaWJsZS4KLSAgICAgICAgICAgIC8vIFRoaXMgaW1wbGVtZW50YXRpb24gaXMgaW5l
ZmZpY2llbnQsIHdlIHNob3VsZCByb3RhdGUgb24gdGhlIENNU2FtcGxlQnVmZmVyIGRpcmVjdGx5
IGluc3RlYWQgb2YgZG9pbmcgdGhpcyBkb3VibGUgYWxsb2NhdGlvbi4KLSAgICAgICAgICAgIGF1
dG8gcm90YXRlZEJ1ZmZlciA9IGJ1ZmZlci0+VG9JNDIwKCk7Ci0gICAgICAgICAgICBBU1NFUlQo
cm90YXRlZEJ1ZmZlcik7Ci0gICAgICAgICAgICBidWZmZXIgPSB3ZWJydGM6Okk0MjBCdWZmZXI6
OlJvdGF0ZSgqcm90YXRlZEJ1ZmZlciwgbV9jdXJyZW50Um90YXRpb24pOwotICAgICAgICB9Ci0g
ICAgICAgIHNlbmRGcmFtZShXVEZNb3ZlKGJ1ZmZlcikpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgQ1ZQaXhlbEJ1ZmZlckxvY2tCYXNlQWRkcmVzcyhwaXhlbEJ1ZmZlciwgMCk7Ci0g
ICAgYXV0byogc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oQ1ZQaXhlbEJ1ZmZl
ckdldEJhc2VBZGRyZXNzT2ZQbGFuZShwaXhlbEJ1ZmZlciwgMCkpOwotCi0gICAgQVNTRVJUKG1f
d2lkdGgpOwotICAgIEFTU0VSVChtX2hlaWdodCk7Ci0KLSAgICBhdXRvIG5ld0J1ZmZlciA9IG1f
YnVmZmVyUG9vbC5DcmVhdGVCdWZmZXIobV93aWR0aCwgbV9oZWlnaHQpOwotICAgIEFTU0VSVChu
ZXdCdWZmZXIpOwotICAgIGlmICghbmV3QnVmZmVyKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HKFdl
YlJUQywgIlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6dmlkZW9TYW1wbGVBdmFpbGFibGUg
dW5hYmxlIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3IgY29udmVyc2lvbiB0byBZVVYiKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAocGl4ZWxGb3JtYXRUeXBlID09IGtDVlBpeGVsRm9y
bWF0VHlwZV8zMkJHUkEpCi0gICAgICAgIHdlYnJ0Yzo6Q29udmVydFRvSTQyMCh3ZWJydGM6OlZp
ZGVvVHlwZTo6a0FSR0IsIHNvdXJjZSwgMCwgMCwgbV93aWR0aCwgbV9oZWlnaHQsIDAsIHdlYnJ0
Yzo6a1ZpZGVvUm90YXRpb25fMCwgbmV3QnVmZmVyKTsKLSAgICBlbHNlIHsKLSAgICAgICAgQVNT
RVJUKHBpeGVsRm9ybWF0VHlwZSA9PSBrQ1ZQaXhlbEZvcm1hdFR5cGVfMzJBUkdCKTsKLSAgICAg
ICAgd2VicnRjOjpDb252ZXJ0VG9JNDIwKHdlYnJ0Yzo6VmlkZW9UeXBlOjprQkdSQSwgc291cmNl
LCAwLCAwLCBtX3dpZHRoLCBtX2hlaWdodCwgMCwgd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8wLCBu
ZXdCdWZmZXIpOwotICAgIH0KLSAgICBDVlBpeGVsQnVmZmVyVW5sb2NrQmFzZUFkZHJlc3MocGl4
ZWxCdWZmZXIsIDApOwotICAgIGlmIChtX3Nob3VsZEFwcGx5Um90YXRpb24gJiYgbV9jdXJyZW50
Um90YXRpb24gIT0gd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8wKQotICAgICAgICBuZXdCdWZmZXIg
PSB3ZWJydGM6Okk0MjBCdWZmZXI6OlJvdGF0ZSgqbmV3QnVmZmVyLCBtX2N1cnJlbnRSb3RhdGlv
bik7Ci0gICAgc2VuZEZyYW1lKFdURk1vdmUobmV3QnVmZmVyKSk7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShMSUJXRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1ZpZGVv
U291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRp
bWVPdXRnb2luZ1ZpZGVvU291cmNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3
ZTc4YjUxNjVkMDU2OTVmZTFhNDU4NDA4NTliYjExYzEyZTQ4ODYuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vbWFjL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5oCisrKyAvZGV2L251bGwK
QEAgLTEsMTE2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkLCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIHJlcXVpcmVkIHRvIGJlIG1l
dDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1l
IG9mIEFwcGxlIEluYy4gbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAg
ICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAot
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCi0gKiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
Ci0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUgotICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKLSAqIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIFVTRShMSUJXRUJSVEMpCi0KLSNpbmNsdWRlICJMaWJX
ZWJSVENNYWNyb3MuaCIKLSNpbmNsdWRlICJNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5oIgotI2lu
Y2x1ZGUgPFRpbWVyLmg+Ci0jaW5jbHVkZSA8d2VicnRjL2FwaS9tZWRpYXN0cmVhbWludGVyZmFj
ZS5oPgotI2luY2x1ZGUgPHdlYnJ0Yy9iYXNlL29wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d2VicnRj
L2NvbW1vbl92aWRlby9pbmNsdWRlL2k0MjBfYnVmZmVyX3Bvb2wuaD4KLSNpbmNsdWRlIDx3ZWJy
dGMvbWVkaWEvYmFzZS92aWRlb3NpbmtpbnRlcmZhY2UuaD4KLSNpbmNsdWRlIDx3dGYvT3B0aW9u
YWwuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1jbGFzcyBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UgZmluYWwgOiBw
dWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlPiwg
cHVibGljIHdlYnJ0Yzo6VmlkZW9UcmFja1NvdXJjZUludGVyZmFjZSwgcHJpdmF0ZSBNZWRpYVN0
cmVhbVRyYWNrUHJpdmF0ZTo6T2JzZXJ2ZXIgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8UmVh
bHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlPiBjcmVhdGUoUmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2
YXRlPiYmIHZpZGVvU291cmNlKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFJlYWx0aW1lT3V0Z29p
bmdWaWRlb1NvdXJjZShXVEZNb3ZlKHZpZGVvU291cmNlKSkpOyB9Ci0gICAgflJlYWx0aW1lT3V0
Z29pbmdWaWRlb1NvdXJjZSgpIHsgc3RvcCgpOyB9Ci0KLSAgICB2b2lkIHN0b3AoKTsKLSAgICBi
b29sIHNldFNvdXJjZShSZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYpOwotICAgIE1lZGlh
U3RyZWFtVHJhY2tQcml2YXRlJiBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3ZpZGVvU291cmNl
LmdldCgpOyB9Ci0KLSAgICBpbnQgQWRkUmVmKCkgY29uc3QgZmluYWwgeyByZWYoKTsgcmV0dXJu
IHJlZkNvdW50KCk7IH0KLSAgICBpbnQgUmVsZWFzZSgpIGNvbnN0IGZpbmFsIHsgZGVyZWYoKTsg
cmV0dXJuIHJlZkNvdW50KCk7IH0KLQotICAgIHZvaWQgc2V0QXBwbHlSb3RhdGlvbihib29sIHNo
b3VsZEFwcGx5Um90YXRpb24pIHsgbV9zaG91bGRBcHBseVJvdGF0aW9uID0gc2hvdWxkQXBwbHlS
b3RhdGlvbjsgfQotCi1wcml2YXRlOgotICAgIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZShS
ZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYpOwotCi0gICAgdm9pZCBzZW5kRnJhbWUocnRj
OjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9GcmFtZUJ1ZmZlcj4mJik7Ci0gICAgdm9pZCBz
ZW5kQmxhY2tGcmFtZXNJZk5lZWRlZCgpOwotICAgIHZvaWQgc2VuZE9uZUJsYWNrRnJhbWUoKTsK
LSAgICB2b2lkIGluaXRpYWxpemVGcm9tU291cmNlKCk7Ci0gICAgdm9pZCB1cGRhdGVCbGFja0Zy
YW1lc1NlbmRpbmcoKTsKLQotICAgIC8vIE5vdGlmaWVyIEFQSQotICAgIHZvaWQgUmVnaXN0ZXJP
YnNlcnZlcih3ZWJydGM6Ok9ic2VydmVySW50ZXJmYWNlKikgZmluYWwgeyB9Ci0gICAgdm9pZCBV
bnJlZ2lzdGVyT2JzZXJ2ZXIod2VicnRjOjpPYnNlcnZlckludGVyZmFjZSopIGZpbmFsIHsgfQot
Ci0gICAgLy8gVmlkZW9UcmFja1NvdXJjZUludGVyZmFjZSBBUEkKLSAgICBib29sIGlzX3NjcmVl
bmNhc3QoKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQotICAgIHJ0Yzo6T3B0aW9uYWw8
Ym9vbD4gbmVlZHNfZGVub2lzaW5nKCkgY29uc3QgZmluYWwgeyByZXR1cm4gcnRjOjpPcHRpb25h
bDxib29sPigpOyB9Ci0gICAgYm9vbCBHZXRTdGF0cyhTdGF0cyopIGZpbmFsOwotCi0gICAgLy8g
TWVkaWFTb3VyY2VJbnRlcmZhY2UgQVBJCi0gICAgU291cmNlU3RhdGUgc3RhdGUoKSBjb25zdCBm
aW5hbCB7IHJldHVybiBTb3VyY2VTdGF0ZSgpOyB9Ci0gICAgYm9vbCByZW1vdGUoKSBjb25zdCBm
aW5hbCB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICAvLyBydGM6OlZpZGVvU291cmNlSW50ZXJmYWNl
PHdlYnJ0Yzo6VmlkZW9GcmFtZT4gQVBJCi0gICAgdm9pZCBBZGRPclVwZGF0ZVNpbmsocnRjOjpW
aWRlb1NpbmtJbnRlcmZhY2U8d2VicnRjOjpWaWRlb0ZyYW1lPiosIGNvbnN0IHJ0Yzo6VmlkZW9T
aW5rV2FudHMmKSBmaW5hbDsKLSAgICB2b2lkIFJlbW92ZVNpbmsocnRjOjpWaWRlb1NpbmtJbnRl
cmZhY2U8d2VicnRjOjpWaWRlb0ZyYW1lPiopIGZpbmFsOwotCi0gICAgdm9pZCBzb3VyY2VNdXRl
ZENoYW5nZWQoKTsKLSAgICB2b2lkIHNvdXJjZUVuYWJsZWRDaGFuZ2VkKCk7Ci0gICAgdm9pZCB2
aWRlb1NhbXBsZUF2YWlsYWJsZShNZWRpYVNhbXBsZSYpOwotCi0gICAgLy8gTWVkaWFTdHJlYW1U
cmFja1ByaXZhdGU6Ok9ic2VydmVyIEFQSQotICAgIHZvaWQgdHJhY2tNdXRlZENoYW5nZWQoTWVk
aWFTdHJlYW1UcmFja1ByaXZhdGUmKSBmaW5hbCB7IHNvdXJjZU11dGVkQ2hhbmdlZCgpOyB9Ci0g
ICAgdm9pZCB0cmFja0VuYWJsZWRDaGFuZ2VkKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJikgZmlu
YWwgeyBzb3VyY2VFbmFibGVkQ2hhbmdlZCgpOyB9Ci0gICAgdm9pZCB0cmFja1NldHRpbmdzQ2hh
bmdlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYpIGZpbmFsIHsgaW5pdGlhbGl6ZUZyb21Tb3Vy
Y2UoKTsgfQotICAgIHZvaWQgc2FtcGxlQnVmZmVyVXBkYXRlZChNZWRpYVN0cmVhbVRyYWNrUHJp
dmF0ZSYsIE1lZGlhU2FtcGxlJiBzYW1wbGUpIGZpbmFsIHsgdmlkZW9TYW1wbGVBdmFpbGFibGUo
c2FtcGxlKTsgfQotICAgIHZvaWQgdHJhY2tFbmRlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYp
IGZpbmFsIHsgfQotCi0gICAgVmVjdG9yPHJ0Yzo6VmlkZW9TaW5rSW50ZXJmYWNlPHdlYnJ0Yzo6
VmlkZW9GcmFtZT4qPiBtX3NpbmtzOwotICAgIHdlYnJ0Yzo6STQyMEJ1ZmZlclBvb2wgbV9idWZm
ZXJQb29sOwotICAgIFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4gbV92aWRlb1NvdXJjZTsK
LSAgICBib29sIG1fZW5hYmxlZCB7IHRydWUgfTsKLSAgICBib29sIG1fbXV0ZWQgeyBmYWxzZSB9
OwotICAgIHN0ZDo6b3B0aW9uYWw8UmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzPiBtX2luaXRp
YWxTZXR0aW5nczsKLSAgICB3ZWJydGM6OlZpZGVvUm90YXRpb24gbV9jdXJyZW50Um90YXRpb24g
eyB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzAgfTsKLSAgICB1aW50MzJfdCBtX3dpZHRoIHsgMCB9
OwotICAgIHVpbnQzMl90IG1faGVpZ2h0IHsgMCB9OwotICAgIGJvb2wgbV9pc1N0b3BwZWQgeyBm
YWxzZSB9OwotICAgIFRpbWVyIG1fYmxhY2tGcmFtZVRpbWVyOwotICAgIHJ0Yzo6c2NvcGVkX3Jl
ZnB0cjx3ZWJydGM6OlZpZGVvRnJhbWVCdWZmZXI+IG1fYmxhY2tGcmFtZTsKLSAgICBib29sIG1f
c2hvdWxkQXBwbHlSb3RhdGlvbiB7IGZhbHNlIH07Ci0jaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVE
Ci0gICAgc2l6ZV90IG1fbnVtYmVyT2ZGcmFtZXMgeyAwIH07Ci0jZW5kaWYKLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShMSUJXRUJSVEMpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2lu
Z1ZpZGVvU291cmNlQ29jb2EuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vbWFjL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUNvY29hLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5k
OTgwM2YwNDg4ZjFlMGMwMjU4ODQ0MzAzZDQwMWJlNWRhOWVjOTc2Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lT3V0Z29p
bmdWaWRlb1NvdXJjZUNvY29hLmNwcApAQCAtMCwwICsxLDEyOCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgcmVxdWlyZWQgdG8gYmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUNv
Y29hLmgiCisKKyNpZiBVU0UoTElCV0VCUlRDKQorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2lu
Y2x1ZGUgPHdlYnJ0Yy9hcGkvdmlkZW8vaTQyMF9idWZmZXIuaD4KKyNpbmNsdWRlIDx3ZWJydGMv
Y29tbW9uX3ZpZGVvL2xpYnl1di9pbmNsdWRlL3dlYnJ0Y19saWJ5dXYuaD4KKyNpbmNsdWRlIDx3
ZWJydGMvc2RrL29iamMvRnJhbWV3b3JrL0NsYXNzZXMvVmlkZW8vY29yZXZpZGVvX2ZyYW1lX2J1
ZmZlci5oPgorCisjaW5jbHVkZSAiQ29yZU1lZGlhU29mdExpbmsuaCIKKyNpbmNsdWRlICJDb3Jl
VmlkZW9Tb2Z0TGluay5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlZjxSZWFsdGltZU91
dGdvaW5nVmlkZW9Tb3VyY2U+IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6Y3JlYXRlKFJl
ZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4mJiB2aWRlb1NvdXJjZSkKK3sKKyAgICByZXR1cm4g
V1RGTW92ZShSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VDb2NvYTo6Y3JlYXRlKFdURk1vdmUo
dmlkZW9Tb3VyY2UpKSk7Cit9CisKK1JlZjxSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VDb2Nv
YT4gUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlQ29jb2E6OmNyZWF0ZShSZWY8TWVkaWFTdHJl
YW1UcmFja1ByaXZhdGU+JiYgdmlkZW9Tb3VyY2UpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlQ29jb2EoV1RGTW92ZSh2aWRlb1NvdXJjZSkp
KTsKK30KKworUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlQ29jb2E6OlJlYWx0aW1lT3V0Z29p
bmdWaWRlb1NvdXJjZUNvY29hKFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4mJiB2aWRlb1Nv
dXJjZSkKKyAgICA6IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZShXVEZNb3ZlKHZpZGVvU291
cmNlKSkKK3sKK30KKwordm9pZCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VDb2NvYTo6c2Ft
cGxlQnVmZmVyVXBkYXRlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYsIE1lZGlhU2FtcGxlJiBz
YW1wbGUpCit7CisgICAgaWYgKCFtX3NpbmtzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKG1fbXV0ZWQgfHwgIW1fZW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisjaWYgIVJF
TEVBU0VfTE9HX0RJU0FCTEVECisgICAgaWYgKCEoKyttX251bWJlck9mRnJhbWVzICUgMzApKQor
ICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYVN0cmVhbSwgIlJlYWx0aW1lT3V0Z29pbmdWaWRlb1Nv
dXJjZUNvY29hOjpzZW5kRnJhbWUgJXp1IGZyYW1lIiwgbV9udW1iZXJPZkZyYW1lcyk7CisjZW5k
aWYKKworICAgIHN3aXRjaCAoc2FtcGxlLnZpZGVvUm90YXRpb24oKSkgeworICAgIGNhc2UgTWVk
aWFTYW1wbGU6OlZpZGVvUm90YXRpb246Ok5vbmU6CisgICAgICAgIG1fY3VycmVudFJvdGF0aW9u
ID0gd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8wOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE1l
ZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpVcHNpZGVEb3duOgorICAgICAgICBtX2N1cnJlbnRS
b3RhdGlvbiA9IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMTgwOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpSaWdodDoKKyAgICAgICAgbV9jdXJy
ZW50Um90YXRpb24gPSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzkwOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpMZWZ0OgorICAgICAgICBtX2N1
cnJlbnRSb3RhdGlvbiA9IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMjcwOworICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICBBU1NFUlQoc2FtcGxlLnBsYXRmb3JtU2FtcGxlKCkudHlwZSA9PSBQ
bGF0Zm9ybVNhbXBsZTo6Q01TYW1wbGVCdWZmZXJUeXBlKTsKKyAgICBhdXRvIHBpeGVsQnVmZmVy
ID0gc3RhdGljX2Nhc3Q8Q1ZQaXhlbEJ1ZmZlclJlZj4oQ01TYW1wbGVCdWZmZXJHZXRJbWFnZUJ1
ZmZlcihzYW1wbGUucGxhdGZvcm1TYW1wbGUoKS5zYW1wbGUuY21TYW1wbGVCdWZmZXIpKTsKKyAg
ICBhdXRvIHBpeGVsRm9ybWF0VHlwZSA9IENWUGl4ZWxCdWZmZXJHZXRQaXhlbEZvcm1hdFR5cGUo
cGl4ZWxCdWZmZXIpOworCisgICAgaWYgKHBpeGVsRm9ybWF0VHlwZSA9PSBrQ1ZQaXhlbEZvcm1h
dFR5cGVfNDIwWXBDYkNyOFBsYW5hciB8fCBwaXhlbEZvcm1hdFR5cGUgPT0ga0NWUGl4ZWxGb3Jt
YXRUeXBlXzQyMFlwQ2JDcjhCaVBsYW5hckZ1bGxSYW5nZSkgeworICAgICAgICBydGM6OnNjb3Bl
ZF9yZWZwdHI8d2VicnRjOjpWaWRlb0ZyYW1lQnVmZmVyPiBidWZmZXIgPSBuZXcgcnRjOjpSZWZD
b3VudGVkT2JqZWN0PHdlYnJ0Yzo6Q29yZVZpZGVvRnJhbWVCdWZmZXI+KHBpeGVsQnVmZmVyKTsK
KyAgICAgICAgaWYgKG1fc2hvdWxkQXBwbHlSb3RhdGlvbiAmJiBtX2N1cnJlbnRSb3RhdGlvbiAh
PSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzApIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBz
aG91bGQgbWFrZSBBVlZpZGVvQ2FwdHVyZVNvdXJjZSBoYW5kbGUgdGhlIHJvdGF0aW9uIHdoZW5l
dmVyIHBvc3NpYmxlLgorICAgICAgICAgICAgLy8gVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBpbmVm
ZmljaWVudCwgd2Ugc2hvdWxkIHJvdGF0ZSBvbiB0aGUgQ01TYW1wbGVCdWZmZXIgZGlyZWN0bHkg
aW5zdGVhZCBvZiBkb2luZyB0aGlzIGRvdWJsZSBhbGxvY2F0aW9uLgorICAgICAgICAgICAgYXV0
byByb3RhdGVkQnVmZmVyID0gYnVmZmVyLT5Ub0k0MjAoKTsKKyAgICAgICAgICAgIEFTU0VSVChy
b3RhdGVkQnVmZmVyKTsKKyAgICAgICAgICAgIGJ1ZmZlciA9IHdlYnJ0Yzo6STQyMEJ1ZmZlcjo6
Um90YXRlKCpyb3RhdGVkQnVmZmVyLCBtX2N1cnJlbnRSb3RhdGlvbik7CisgICAgICAgIH0KKyAg
ICAgICAgc2VuZEZyYW1lKFdURk1vdmUoYnVmZmVyKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBDVlBpeGVsQnVmZmVyTG9ja0Jhc2VBZGRyZXNzKHBpeGVsQnVmZmVyLCAwKTsKKyAg
ICBhdXRvKiBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihDVlBpeGVsQnVmZmVy
R2V0QmFzZUFkZHJlc3NPZlBsYW5lKHBpeGVsQnVmZmVyLCAwKSk7CisKKyAgICBBU1NFUlQobV93
aWR0aCk7CisgICAgQVNTRVJUKG1faGVpZ2h0KTsKKworICAgIGF1dG8gbmV3QnVmZmVyID0gbV9i
dWZmZXJQb29sLkNyZWF0ZUJ1ZmZlcihtX3dpZHRoLCBtX2hlaWdodCk7CisgICAgQVNTRVJUKG5l
d0J1ZmZlcik7CisgICAgaWYgKCFuZXdCdWZmZXIpIHsKKyAgICAgICAgUkVMRUFTRV9MT0coV2Vi
UlRDLCAiUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlQ29jb2E6OnZpZGVvU2FtcGxlQXZhaWxh
YmxlIHVuYWJsZSB0byBhbGxvY2F0ZSBidWZmZXIgZm9yIGNvbnZlcnNpb24gdG8gWVVWIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKHBpeGVsRm9ybWF0VHlwZSA9PSBrQ1ZQaXhl
bEZvcm1hdFR5cGVfMzJCR1JBKQorICAgICAgICB3ZWJydGM6OkNvbnZlcnRUb0k0MjAod2VicnRj
OjpWaWRlb1R5cGU6OmtBUkdCLCBzb3VyY2UsIDAsIDAsIG1fd2lkdGgsIG1faGVpZ2h0LCAwLCB3
ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzAsIG5ld0J1ZmZlcik7CisgICAgZWxzZSB7CisgICAgICAg
IEFTU0VSVChwaXhlbEZvcm1hdFR5cGUgPT0ga0NWUGl4ZWxGb3JtYXRUeXBlXzMyQVJHQik7Cisg
ICAgICAgIHdlYnJ0Yzo6Q29udmVydFRvSTQyMCh3ZWJydGM6OlZpZGVvVHlwZTo6a0JHUkEsIHNv
dXJjZSwgMCwgMCwgbV93aWR0aCwgbV9oZWlnaHQsIDAsIHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25f
MCwgbmV3QnVmZmVyKTsKKyAgICB9CisgICAgQ1ZQaXhlbEJ1ZmZlclVubG9ja0Jhc2VBZGRyZXNz
KHBpeGVsQnVmZmVyLCAwKTsKKyAgICBpZiAobV9zaG91bGRBcHBseVJvdGF0aW9uICYmIG1fY3Vy
cmVudFJvdGF0aW9uICE9IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMCkKKyAgICAgICAgbmV3QnVm
ZmVyID0gd2VicnRjOjpJNDIwQnVmZmVyOjpSb3RhdGUoKm5ld0J1ZmZlciwgbV9jdXJyZW50Um90
YXRpb24pOworICAgIHNlbmRGcmFtZShXVEZNb3ZlKG5ld0J1ZmZlcikpOworfQorCisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShMSUJXRUJSVEMpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2lu
Z1ZpZGVvU291cmNlQ29jb2EuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L21hYy9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VDb2NvYS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc3YmVm
NDYxNjYwZjI0M2ZjNGUxMjIyM2VjNTkwZTU1ODk1Zjg0MzgKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1Zp
ZGVvU291cmNlQ29jb2EuaApAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBy
ZXF1aXJlZCB0byBiZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisg
KiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIFVTRShMSUJXRUJSVEMpCisKKyNpbmNsdWRlICJSZWFsdGltZU91dGdvaW5nVmlk
ZW9Tb3VyY2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSZWFsdGltZU91dGdv
aW5nVmlkZW9Tb3VyY2VDb2NvYSBmaW5hbCA6IHB1YmxpYyBSZWFsdGltZU91dGdvaW5nVmlkZW9T
b3VyY2UgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291
cmNlQ29jb2E+IGNyZWF0ZShSZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYpOworCitwcml2
YXRlOgorICAgIGV4cGxpY2l0IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUNvY29hKFJlZjxN
ZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4mJik7CisKKyAgICAvLyBNZWRpYVN0cmVhbVRyYWNrUHJp
dmF0ZTo6T2JzZXJ2ZXIgQVBJCisgICAgdm9pZCBzYW1wbGVCdWZmZXJVcGRhdGVkKE1lZGlhU3Ry
ZWFtVHJhY2tQcml2YXRlJiwgTWVkaWFTYW1wbGUmKSBmaW5hbDsKKworI2lmICFSRUxFQVNFX0xP
R19ESVNBQkxFRAorICAgIHNpemVfdCBtX251bWJlck9mRnJhbWVzIHsgMCB9OworI2VuZGlmCit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoTElCV0VCUlRDKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>323405</attachid>
            <date>2017-10-11 03:58:40 -0700</date>
            <delta_ts>2017-10-12 22:18:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177869-20171011125839.patch</filename>
            <type>text/plain</type>
            <size>77054</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIzMTcyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjQ2ZDRjMWU3NWQxMzU4
MjY2YTNkNTViMGVmMWU5MWJjYWRmZTdhYS4uMjA2MGJkNDU4M2Q3NWQyMzQwNzMxYmJlMjU5Njc3
MGRiMjI2NDYzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDE3LTEwLTExICBBbGVq
YW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisgICAgICAgIE1ha2UgUmVhbHRp
bWVJbmNvbWluZ1ZpZGVvU291cmNlcyBhbmQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlcyBw
b3J0IGFnbm9zdGljCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzc4NjkKKworICAgICAgICBSZXZpZXdlZCBieSBZb3Vlbm4gRmFibGV0LgorCisgICAg
ICAgIFJlZmFjdG9yIHRoZSBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UgYW5kIFJlYWx0aW1l
T3V0Z29pbmdWaWRlb1NvdXJjZSBjbGFzc2VzLAorICAgICAgICBtb3ZlIHRoZSBtYWMgc3BlY2lm
aWMgY29kZSB0byBhIGRpZmZlcmVudCBjbGFzcy4gVGhpcyB3YXkgd2UgY2FuIHVzZSB0aGVtIGZy
b20KKyAgICAgICAgb3RoZXIgcG9ydHMuCisKKyAgICAgICAgTm8gbmV3IGZ1bmN0aW9uYWxpdHks
IGp1c3QgYSByZWZhY3Rvci4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAq
IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6UmVhbHRpbWVJbmNvbWlu
Z1ZpZGVvU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdWaWRlb1Nv
dXJjZTo6c3RhcnRQcm9kdWNpbmdEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5j
b21pbmdWaWRlb1NvdXJjZTo6c2V0U291cmNlVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVh
bHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlOjpzdG9wUHJvZHVjaW5nRGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6OmNhcGFiaWxpdGllcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6OnNldHRpbmdz
IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZUluY29taW5n
VmlkZW9Tb3VyY2UuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5oLgorICAgICAgICAqIHBsYXRm
b3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5jcHA6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRn
b2luZ1ZpZGVvU291cmNlLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdW
aWRlb1NvdXJjZTo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFs
dGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuaC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6dmlkZW9TYW1wbGVB
dmFpbGFibGUpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUlu
Y29taW5nVmlkZW9Tb3VyY2VNYWMuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5jcHAuCisg
ICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWM6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VNYWM6OlJlYWx0
aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1hYyk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUlu
Y29taW5nVmlkZW9Tb3VyY2VNYWM6OnBpeGVsQnVmZmVyRnJvbVZpZGVvRnJhbWUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTWFjOjpPbkZyYW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZU1hYzo6cHJvY2Vzc05l
d1NhbXBsZSk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lSW5j
b21pbmdWaWRlb1NvdXJjZU1hYy5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5oLgorICAgICAg
ICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VN
YWMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdWaWRlb1Nv
dXJjZU1hYzo6UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTWFjKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZU1hYzo6dmlkZW9TYW1wbGVBdmFpbGFibGUp
OgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU91dGdvaW5nVmlk
ZW9Tb3VyY2VNYWMuaDogQWRkZWQuCisKIDIwMTctMTAtMTEgIEFsaWNpYSBCb3lhIEdhcmPDrWEg
IDxhYm95YUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtNU0VdW0dTdHJlYW1lcl0gQWRkIGR1bXAg
b2YgYXBwZW5kIHBpcGVsaW5lCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3Rz
LnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDg1Y2M3OTA1OTYzOWM5
NTc5NGU5NzMzMTcyZDY3MmRkNjMyZDU5OWIuLjQxZGNhOTA0ZWYwNDFjMmY4MTE0YjA5ODMwZDA0
MWVjMThkNzcyM2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cisr
KyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0yNTU2LDkgKzI1NTYsMTEgQEAg
c2V0KFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVk
aWFTb3VyY2VTdXBwb3J0ZWRDb25zdHJhaW50cy5jcHAKICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVh
bS9SVENJY2VDYW5kaWRhdGVEZXNjcmlwdG9yLmNwcAogICAgIHBsYXRmb3JtL21lZGlhc3RyZWFt
L1JUQ1Nlc3Npb25EZXNjcmlwdGlvbkRlc2NyaXB0b3IuY3BwCisgICAgcGxhdGZvcm0vbWVkaWFz
dHJlYW0vUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmNwcAogICAgIHBsYXRmb3JtL21lZGlh
c3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2UuY3BwCiAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0v
UmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlci5jcHAKICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9S
ZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MuY3BwCisgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0v
UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmNwcAogCiAgICAgcGxhdGZvcm0vbWVkaWFzdHJl
YW0vbGlid2VicnRjL0xpYldlYlJUQ1Byb3ZpZGVyLmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZGU5MmE4OWY3NmZlYjk4
ZjI1MGYzYWFjNmFmNjBlZDI2MmFjZDlkYS4uOWUyNTk1Yjc4MWQyMmE5OWQxY2RhZGUxNWVmMmMx
N2M4YjQ1MGUzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagpAQCAtMjc2Miw3ICsyNzYyLDkgQEAKIAkJNUNEOUY1NjcxQUEwRjc0MjAw
REE0NUZGIC8qIERGQUJ5dGVjb2RlQ29tcGlsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDMzkzMDVGMUFBMEY2QTkwMDI5QzgxNiAvKiBERkFCeXRl
Y29kZUNvbXBpbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJNUNEOUY1NjgxQUEwRjc0NjAwREE0NUZGIC8qIERGQUJ5dGVjb2RlSW50ZXJwcmV0
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDMzkz
MDYxMUFBMEY2QTkwMDI5QzgxNiAvKiBERkFCeXRlY29kZUludGVycHJldGVyLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNUNERDgzM0QxRTQzMjRE
OTAwNjIxRTkyIC8qIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0REODMzQjFFNDMyNEJCMDA2MjFF
OTIgLyogUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmNwcCAqLzsgfTsKKwkJNUNERDgzM0Qx
RTQzMjREOTAwNjIxQjgzIC8qIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUNvY29hLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDREQ4MzNCMUU0
MzI0QkIwMDYyMUI4MyAvKiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VDb2NvYS5jcHAgKi87
IH07CiAJCTVDREQ4MzNFMUU0MzI0REMwMDYyMUU5MiAvKiBSZWFsdGltZUluY29taW5nVmlkZW9T
b3VyY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NUNERDgzMzkxRTQzMjRCQjAwNjIxRTkyIC8qIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5j
cHAgKi87IH07CisJCTVDREQ4MzNFMUU0MzI0REMwMDYyMUU4MyAvKiBSZWFsdGltZUluY29taW5n
VmlkZW9Tb3VyY2VDb2NvYS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1Q0REODMzOTFFNDMyNEJCMDA2MjFFODMgLyogUmVhbHRpbWVJbmNvbWluZ1Zp
ZGVvU291cmNlQ29jb2EuY3BwICovOyB9OwogCQk1Q0REODM2NDFFNDMyNUEwMDA2MjFFOTIgLyog
TGliV2ViUlRDRGF0YUNoYW5uZWxIYW5kbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDREQ4MzNGMUU0MzI1M0QwMDYyMUU5MiAvKiBMaWJXZWJS
VENEYXRhQ2hhbm5lbEhhbmRsZXIuY3BwICovOyB9OwogCQk1Q0RGQTZDODFBQTRGMkRBMDBFQTg3
NDYgLyogQ29udGVudEV4dGVuc2lvbkFjdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDREZBNkM3MUFBNEYyREEwMEVBODc0NiAvKiBDb250ZW50
RXh0ZW5zaW9uQWN0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTVDRTVEOUFCMURCODlBMDMwMENFN0E4RCAvKiBKU1RleHREZWNvZGVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDRTVEOUE3
MURCODk5RkMwMENFN0E4RCAvKiBKU1RleHREZWNvZGVyLmNwcCAqLzsgfTsKQEAgLTEwNzM2LDgg
KzEwNzM4LDEyIEBACiAJCTVDQkM4REFCMUFBQTMwMjIwMEUxQzgwMyAvKiBNZWRpYUFjY2Vzc2li
aWxpdHlTb2Z0TGluay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYUFj
Y2Vzc2liaWxpdHlTb2Z0TGluay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Q0RE
ODMzOTFFNDMyNEJCMDA2MjFFOTIgLyogUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlYWx0aW1lSW5jb21pbmdWaWRl
b1NvdXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDREQ4MzNBMUU0MzI0
QkIwMDYyMUU5MiAvKiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDREQ4MzM5MUU0MzI0QkIwMDYyMUU4MyAvKiBSZWFs
dGltZUluY29taW5nVmlkZW9Tb3VyY2VDb2NvYS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VDb2NvYS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDREQ4MzNBMUU0MzI0QkIwMDYyMUU4MyAvKiBSZWFs
dGltZUluY29taW5nVmlkZW9Tb3VyY2VDb2NvYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VDb2NvYS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1Q0REODMzQjFFNDMyNEJCMDA2MjFFOTIgLyogUmVhbHRpbWVPdXRn
b2luZ1ZpZGVvU291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTVDREQ4MzNDMUU0MzI0QkIwMDYyMUU5MiAvKiBSZWFsdGltZU91dGdvaW5nVmlkZW9T
b3VyY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVhbHRpbWVPdXRnb2lu
Z1ZpZGVvU291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDREQ4MzNCMUU0
MzI0QkIwMDYyMUI4MyAvKiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VDb2NvYS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZWFsdGltZU91dGdvaW5nVmlkZW9T
b3VyY2VDb2NvYS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDREQ4MzNDMUU0
MzI0QkIwMDYyMUI4MyAvKiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VDb2NvYS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VD
b2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Q0REODMzRjFFNDMyNTNEMDA2
MjFFOTIgLyogTGliV2ViUlRDRGF0YUNoYW5uZWxIYW5kbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IExpYldlYlJUQ0RhdGFDaGFubmVsSGFuZGxlci5jcHA7IHBh
dGggPSBsaWJ3ZWJydGMvTGliV2ViUlRDRGF0YUNoYW5uZWxIYW5kbGVyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNERDgzNDAxRTQzMjUzRDAwNjIxRTkyIC8qIExpYldlYlJU
Q0RhdGFDaGFubmVsSGFuZGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBM
aWJXZWJSVENEYXRhQ2hhbm5lbEhhbmRsZXIuaDsgcGF0aCA9IGxpYndlYnJ0Yy9MaWJXZWJSVENE
YXRhQ2hhbm5lbEhhbmRsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNERkE2
QzcxQUE0RjJEQTAwRUE4NzQ2IC8qIENvbnRlbnRFeHRlbnNpb25BY3Rpb25zLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnRlbnRFeHRlbnNpb25BY3Rpb25zLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjU4OCw2ICsxNjU5NCw4IEBACiAJCQkJMDdGRkRF
NjYxODFBRUQ0MjAwNzJENDA5IC8qIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmNwcCAqLywKIAkJ
CQkwN0ZGREU2NzE4MUFFRDQyMDA3MkQ0MDkgLyogTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUuaCAq
LywKIAkJCQk1RUJCODkzODFDNzdCREE0MDBDNjVENDEgLyogUGVlck1lZGlhRGVzY3JpcHRpb24u
aCAqLywKKwkJCQk1Q0REODMzOTFFNDMyNEJCMDA2MjFFOTIgLyogUmVhbHRpbWVJbmNvbWluZ1Zp
ZGVvU291cmNlLmNwcCAqLywKKwkJCQk1Q0REODMzQTFFNDMyNEJCMDA2MjFFOTIgLyogUmVhbHRp
bWVJbmNvbWluZ1ZpZGVvU291cmNlLmggKi8sCiAJCQkJNEE0RjY1NkIxQUE5OTdGMTAwRTM4Q0RE
IC8qIFJlYWx0aW1lTWVkaWFTb3VyY2UuY3BwICovLAogCQkJCTRBNEY2NTZDMUFBOTk3RjEwMEUz
OENERCAvKiBSZWFsdGltZU1lZGlhU291cmNlLmggKi8sCiAJCQkJNEE0RjY1NkQxQUE5OTdGMTAw
RTM4Q0REIC8qIFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMuaCAqLywKQEAgLTE2NTk3
LDYgKzE2NjA1LDggQEAKIAkJCQk0QTRGNjU2RjFBQTk5N0YxMDBFMzhDREQgLyogUmVhbHRpbWVN
ZWRpYVNvdXJjZVNldHRpbmdzLmggKi8sCiAJCQkJMkVDNDFERTIxQzA0MTBBMzAwRDI5NEZFIC8q
IFJlYWx0aW1lTWVkaWFTb3VyY2VTdXBwb3J0ZWRDb25zdHJhaW50cy5jcHAgKi8sCiAJCQkJMDdD
MUMwRTQxQkZCNjBFRDAwQkQyMjU2IC8qIFJlYWx0aW1lTWVkaWFTb3VyY2VTdXBwb3J0ZWRDb25z
dHJhaW50cy5oICovLAorCQkJCTVDREQ4MzNCMUU0MzI0QkIwMDYyMUU5MiAvKiBSZWFsdGltZU91
dGdvaW5nVmlkZW9Tb3VyY2UuY3BwICovLAorCQkJCTVDREQ4MzNDMUU0MzI0QkIwMDYyMUU5MiAv
KiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuaCAqLywKIAkJCQkzMTM1OTEwQzFFN0REQ0I2
MDBGMzA2MzAgLyogUlRDQnVuZGxlUG9saWN5LmggKi8sCiAJCQkJMDcyMjFCQTIxN0NGMEFENDAw
ODQ4RTUxIC8qIFJUQ0RhdGFDaGFubmVsSGFuZGxlci5oICovLAogCQkJCTA3MjIxQkEzMTdDRjBB
RDQwMDg0OEU1MSAvKiBSVENEYXRhQ2hhbm5lbEhhbmRsZXJDbGllbnQuaCAqLywKQEAgLTE2NjQ3
LDE0ICsxNjY1NywxNCBAQAogCQkJCTA3RUU3NkVFMUJFQTYxOTgwMEY4OTEzMyAvKiBNb2NrUmVh
bHRpbWVWaWRlb1NvdXJjZU1hYy5tbSAqLywKIAkJCQk0MTEwM0FBQTFFMzk3OTBBMDA3NjlGMDMg
LyogUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlLmNwcCAqLywKIAkJCQk0MTEwM0FBOTFFMzk3
OTBBMDA3NjlGMDMgLyogUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlLmggKi8sCi0JCQkJNUNE
RDgzMzkxRTQzMjRCQjAwNjIxRTkyIC8qIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5jcHAg
Ki8sCi0JCQkJNUNERDgzM0ExRTQzMjRCQjAwNjIxRTkyIC8qIFJlYWx0aW1lSW5jb21pbmdWaWRl
b1NvdXJjZS5oICovLAorCQkJCTVDREQ4MzM5MUU0MzI0QkIwMDYyMUU4MyAvKiBSZWFsdGltZUlu
Y29taW5nVmlkZW9Tb3VyY2VDb2NvYS5jcHAgKi8sCisJCQkJNUNERDgzM0ExRTQzMjRCQjAwNjIx
RTgzIC8qIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUNvY29hLmggKi8sCiAJCQkJNEEwRkZB
QTMxQUFGNUVGNjAwNjI4MDNCIC8qIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJNYWMuY3BwICov
LAogCQkJCTRBMEZGQUE0MUFBRjVFRjYwMDYyODAzQiAvKiBSZWFsdGltZU1lZGlhU291cmNlQ2Vu
dGVyTWFjLmggKi8sCiAJCQkJNDExMDNBQTcxRTM5NzkwQTAwNzY5RjAzIC8qIFJlYWx0aW1lT3V0
Z29pbmdBdWRpb1NvdXJjZS5jcHAgKi8sCiAJCQkJNDExMDNBQTgxRTM5NzkwQTAwNzY5RjAzIC8q
IFJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZS5oICovLAotCQkJCTVDREQ4MzNCMUU0MzI0QkIw
MDYyMUU5MiAvKiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuY3BwICovLAotCQkJCTVDREQ4
MzNDMUU0MzI0QkIwMDYyMUU5MiAvKiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuaCAqLywK
KwkJCQk1Q0REODMzQjFFNDMyNEJCMDA2MjFCODMgLyogUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291
cmNlQ29jb2EuY3BwICovLAorCQkJCTVDREQ4MzNDMUU0MzI0QkIwMDYyMUI4MyAvKiBSZWFsdGlt
ZU91dGdvaW5nVmlkZW9Tb3VyY2VDb2NvYS5oICovLAogCQkJCTA3RDYzNzNFMUJCMEIxMTMwMDI1
NkNFOSAvKiBXZWJBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5oICovLAogCQkJCTA3RDYzNzNG
MUJCMEIxMTMwMDI1NkNFOSAvKiBXZWJBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5tbSAqLywK
IAkJCSk7CkBAIC0zMzc4OSw2ICszMzc5OSw3IEBACiAJCQkJRkQzMTYwM0IxMkIwMjY3NjAwQzFB
MzU5IC8qIFJlYWx0aW1lQW5hbHlzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDExMDNBQUUx
RTM5NzkxMDAwNzY5RjAzIC8qIFJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk1Q0REODMzRTFFNDMyNERDMDA2MjFFOTIgLyogUmVhbHRpbWVJbmNvbWlu
Z1ZpZGVvU291cmNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTVDREQ4MzNFMUU0MzI0REMwMDYy
MUU4MyAvKiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VDb2NvYS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk0QTRGNjU3MDFBQTk5N0YxMDBFMzhDREQgLyogUmVhbHRpbWVNZWRpYVNvdXJjZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk0QTBGRkFBMTFBQUY1RUEyMDA2MjgwM0IgLyogUmVhbHRp
bWVNZWRpYVNvdXJjZUNlbnRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0QTBGRkFBNTFBQUY1
RUY2MDA2MjgwM0IgLyogUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck1hYy5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTMzNzk2LDYgKzMzODA3LDcgQEAKIAkJCQkyRUM0MURFNDFDMDQxMEEzMDBEMjk0
RkUgLyogUmVhbHRpbWVNZWRpYVNvdXJjZVN1cHBvcnRlZENvbnN0cmFpbnRzLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTQxMTAzQUFCMUUzOTc5MTAwMDc2OUYwMyAvKiBSZWFsdGltZU91dGdvaW5n
QXVkaW9Tb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUNERDgzM0QxRTQzMjREOTAwNjIx
RTkyIC8qIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQk1Q0REODMzRDFFNDMyNEQ5MDA2MjFCODMgLyogUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNl
Q29jb2EuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQ0NUE5NUExNzVENDE3MTAwQzIxRUM4IC8q
IFJlY3RhbmdsZVNoYXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQUI0MTgxMTNFMzU2RTgw
MEQ4QUFGMyAvKiBSZWdpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU3OEY0NDAxREUwQjYz
NDAwM0RGQzZBIC8qIFJlamVjdGVkUHJvbWlzZVRyYWNrZXIuY3BwIGluIFNvdXJjZXMgKi8sCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZUlu
Y29taW5nVmlkZW9Tb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNTliNDZiYmY0
NWQ4ZTZjMTQ2ODQwNDlhY2FhZGM3ZmIwYmI3YTRjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNl
LmNwcApAQCAtMCwwICsxLDg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRv
cnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20gdGhpcworICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmgiCisKKyNpZiBVU0UoTElCV0VCUlRDKQor
CisjaW5jbHVkZSAiTG9nZ2luZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlYWx0aW1l
SW5jb21pbmdWaWRlb1NvdXJjZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlKHJ0Yzo6c2Nv
cGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvVHJhY2tJbnRlcmZhY2U+JiYgdmlkZW9UcmFjaywgU3Ry
aW5nJiYgdmlkZW9UcmFja0lkKQorICAgIDogUmVhbHRpbWVNZWRpYVNvdXJjZShXVEZNb3ZlKHZp
ZGVvVHJhY2tJZCksIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OlZpZGVvLCBTdHJpbmcoKSkK
KyAgICAsIG1fdmlkZW9UcmFjayhXVEZNb3ZlKHZpZGVvVHJhY2spKQoreworICAgIG1fY3VycmVu
dFNldHRpbmdzLnNldFdpZHRoKDY0MCk7CisgICAgbV9jdXJyZW50U2V0dGluZ3Muc2V0SGVpZ2h0
KDQ4MCk7CisgICAgbm90aWZ5TXV0ZWRDaGFuZ2UoIW1fdmlkZW9UcmFjayk7Cit9CisKK3ZvaWQg
UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlOjpzdGFydFByb2R1Y2luZ0RhdGEoKQoreworICAg
IGlmIChtX3ZpZGVvVHJhY2spCisgICAgICAgIG1fdmlkZW9UcmFjay0+QWRkT3JVcGRhdGVTaW5r
KHRoaXMsIHJ0Yzo6VmlkZW9TaW5rV2FudHMoKSk7Cit9CisKK3ZvaWQgUmVhbHRpbWVJbmNvbWlu
Z1ZpZGVvU291cmNlOjpzZXRTb3VyY2VUcmFjayhydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpW
aWRlb1RyYWNrSW50ZXJmYWNlPiYmIHRyYWNrKQoreworICAgIEFTU0VSVCghbV92aWRlb1RyYWNr
KTsKKyAgICBBU1NFUlQodHJhY2spOworCisgICAgbV92aWRlb1RyYWNrID0gV1RGTW92ZSh0cmFj
ayk7CisgICAgbm90aWZ5TXV0ZWRDaGFuZ2UoIW1fdmlkZW9UcmFjayk7CisgICAgaWYgKGlzUHJv
ZHVjaW5nRGF0YSgpKQorICAgICAgICBtX3ZpZGVvVHJhY2stPkFkZE9yVXBkYXRlU2luayh0aGlz
LCBydGM6OlZpZGVvU2lua1dhbnRzKCkpOworfQorCit2b2lkIFJlYWx0aW1lSW5jb21pbmdWaWRl
b1NvdXJjZTo6c3RvcFByb2R1Y2luZ0RhdGEoKQoreworICAgIGlmIChtX3ZpZGVvVHJhY2spCisg
ICAgICAgIG1fdmlkZW9UcmFjay0+UmVtb3ZlU2luayh0aGlzKTsKK30KKworY29uc3QgUmVhbHRp
bWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcyYgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlOjpj
YXBhYmlsaXRpZXMoKSBjb25zdAoreworICAgIHJldHVybiBSZWFsdGltZU1lZGlhU291cmNlQ2Fw
YWJpbGl0aWVzOjplbXB0eUNhcGFiaWxpdGllcygpOworfQorCitjb25zdCBSZWFsdGltZU1lZGlh
U291cmNlU2V0dGluZ3MmIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6c2V0dGluZ3MoKSBj
b25zdAoreworICAgIHJldHVybiBtX2N1cnJlbnRTZXR0aW5nczsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKExJQldFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJj
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVJbmNvbWlu
Z1ZpZGVvU291cmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTViZjUwMmYzZTI1ZWFiMGNkNmE5M2VmMmI0ZjAz
YTRlMGZhMmQxNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5oCkBAIC0wLDAgKzEsNzEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEVyaWNzc29u
IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKExJQldFQlJUQykKKworI2luY2x1ZGUgIkxpYldl
YlJUQ01hY3Jvcy5oIgorI2luY2x1ZGUgIlJlYWx0aW1lTWVkaWFTb3VyY2UuaCIKKyNpbmNsdWRl
IDx3ZWJydGMvYXBpL21lZGlhc3RyZWFtaW50ZXJmYWNlLmg+CisjaW5jbHVkZSA8d3RmL1JldGFp
blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENhcHR1cmVEZXZpY2U7CisK
K2NsYXNzIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZSA6IHB1YmxpYyBSZWFsdGltZU1lZGlh
U291cmNlLCBwcml2YXRlIHJ0Yzo6VmlkZW9TaW5rSW50ZXJmYWNlPHdlYnJ0Yzo6VmlkZW9GcmFt
ZT4geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNl
PiBjcmVhdGUocnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9UcmFja0ludGVyZmFjZT4m
JiwgU3RyaW5nJiYpOworICAgIH5SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UoKSB7IHN0b3BQ
cm9kdWNpbmdEYXRhKCk7IH0KKworICAgIHZvaWQgc2V0U291cmNlVHJhY2socnRjOjpzY29wZWRf
cmVmcHRyPHdlYnJ0Yzo6VmlkZW9UcmFja0ludGVyZmFjZT4mJik7CisKK3Byb3RlY3RlZDoKKyAg
ICBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UocnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6
VmlkZW9UcmFja0ludGVyZmFjZT4mJiwgU3RyaW5nJiYpOworCisgICAgUmVhbHRpbWVNZWRpYVNv
dXJjZVNldHRpbmdzIG1fY3VycmVudFNldHRpbmdzOworCitwcml2YXRlOgorICAgIC8vIFJlYWx0
aW1lTWVkaWFTb3VyY2UgQVBJCisgICAgdm9pZCBzdGFydFByb2R1Y2luZ0RhdGEoKSBmaW5hbDsK
KyAgICB2b2lkIHN0b3BQcm9kdWNpbmdEYXRhKCkgIGZpbmFsOworCisgICAgY29uc3QgUmVhbHRp
bWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcyYgY2FwYWJpbGl0aWVzKCkgY29uc3QgZmluYWw7Cisg
ICAgY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzJiBzZXR0aW5ncygpIGNvbnN0IGZp
bmFsOworCisgICAgYm9vbCBhcHBseVNpemUoY29uc3QgSW50U2l6ZSYpIGZpbmFsIHsgcmV0dXJu
IHRydWU7IH0KKworICAgIHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvVHJhY2tJbnRl
cmZhY2U+IG1fdmlkZW9UcmFjazsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIFVTRShMSUJXRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4zNTlkYzExNGE1NWVmNDkzNDA5MDQzYTZmZmQ2MzEyMWUxZGEyZGI3Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVh
bHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmNwcApAQCAtMCwwICsxLDE4OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgcmVxdWlyZWQgdG8gYmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuaCIKKworI2lmIFVTRShMSUJXRUJS
VEMpCisKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSA8d2VicnRjL2FwaS92aWRlby9p
NDIwX2J1ZmZlci5oPgorI2luY2x1ZGUgPHdlYnJ0Yy9jb21tb25fdmlkZW8vbGlieXV2L2luY2x1
ZGUvd2VicnRjX2xpYnl1di5oPgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorI2luY2x1
ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVhbHRpbWVP
dXRnb2luZ1ZpZGVvU291cmNlOjpSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UoUmVmPE1lZGlh
U3RyZWFtVHJhY2tQcml2YXRlPiYmIHZpZGVvU291cmNlKQorICAgIDogbV92aWRlb1NvdXJjZShX
VEZNb3ZlKHZpZGVvU291cmNlKSkKKyAgICAsIG1fYmxhY2tGcmFtZVRpbWVyKCp0aGlzLCAmUmVh
bHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpzZW5kT25lQmxhY2tGcmFtZSkKK3sKKyAgICBtX3Zp
ZGVvU291cmNlLT5hZGRPYnNlcnZlcigqdGhpcyk7CisgICAgaW5pdGlhbGl6ZUZyb21Tb3VyY2Uo
KTsKK30KKworYm9vbCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnNldFNvdXJjZShSZWY8
TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYgbmV3U291cmNlKQoreworICAgIGlmICghbV9pbml0
aWFsU2V0dGluZ3MpCisgICAgICAgIG1faW5pdGlhbFNldHRpbmdzID0gbV92aWRlb1NvdXJjZS0+
c291cmNlKCkuc2V0dGluZ3MoKTsKKworICAgIG1fdmlkZW9Tb3VyY2UtPnJlbW92ZU9ic2VydmVy
KCp0aGlzKTsKKyAgICBtX3ZpZGVvU291cmNlID0gV1RGTW92ZShuZXdTb3VyY2UpOworICAgIG1f
dmlkZW9Tb3VyY2UtPmFkZE9ic2VydmVyKCp0aGlzKTsKKworICAgIGluaXRpYWxpemVGcm9tU291
cmNlKCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBSZWFsdGltZU91dGdvaW5nVmlk
ZW9Tb3VyY2U6OnN0b3AoKQoreworICAgIG1fdmlkZW9Tb3VyY2UtPnJlbW92ZU9ic2VydmVyKCp0
aGlzKTsKKyAgICBtX2JsYWNrRnJhbWVUaW1lci5zdG9wKCk7CisgICAgbV9pc1N0b3BwZWQgPSB0
cnVlOworfQorCit2b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6dXBkYXRlQmxhY2tG
cmFtZXNTZW5kaW5nKCkKK3sKKyAgICBpZiAoIW1fbXV0ZWQgJiYgbV9lbmFibGVkKSB7CisgICAg
ICAgIGlmIChtX2JsYWNrRnJhbWVUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICAgICAgbV9ibGFj
a0ZyYW1lVGltZXIuc3RvcCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc2VuZEJs
YWNrRnJhbWVzSWZOZWVkZWQoKTsKK30KKwordm9pZCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3Vy
Y2U6OnNvdXJjZU11dGVkQ2hhbmdlZCgpCit7CisgICAgQVNTRVJUKG1fbXV0ZWQgIT0gbV92aWRl
b1NvdXJjZS0+bXV0ZWQoKSk7CisKKyAgICBtX211dGVkID0gbV92aWRlb1NvdXJjZS0+bXV0ZWQo
KTsKKworICAgIHVwZGF0ZUJsYWNrRnJhbWVzU2VuZGluZygpOworfQorCit2b2lkIFJlYWx0aW1l
T3V0Z29pbmdWaWRlb1NvdXJjZTo6c291cmNlRW5hYmxlZENoYW5nZWQoKQoreworICAgIEFTU0VS
VChtX2VuYWJsZWQgIT0gbV92aWRlb1NvdXJjZS0+ZW5hYmxlZCgpKTsKKworICAgIG1fZW5hYmxl
ZCA9IG1fdmlkZW9Tb3VyY2UtPmVuYWJsZWQoKTsKKworICAgIHVwZGF0ZUJsYWNrRnJhbWVzU2Vu
ZGluZygpOworfQorCit2b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6aW5pdGlhbGl6
ZUZyb21Tb3VyY2UoKQoreworICAgIGNvbnN0IGF1dG8mIHNldHRpbmdzID0gbV92aWRlb1NvdXJj
ZS0+c291cmNlKCkuc2V0dGluZ3MoKTsKKyAgICBtX3dpZHRoID0gc2V0dGluZ3Mud2lkdGgoKTsK
KyAgICBtX2hlaWdodCA9IHNldHRpbmdzLmhlaWdodCgpOworCisgICAgbV9tdXRlZCA9IG1fdmlk
ZW9Tb3VyY2UtPm11dGVkKCk7CisgICAgbV9lbmFibGVkID0gbV92aWRlb1NvdXJjZS0+ZW5hYmxl
ZCgpOworCisgICAgdXBkYXRlQmxhY2tGcmFtZXNTZW5kaW5nKCk7Cit9CisKK3ZvaWQgUmVhbHRp
bWVPdXRnb2luZ1ZpZGVvU291cmNlOjpBZGRPclVwZGF0ZVNpbmsocnRjOjpWaWRlb1NpbmtJbnRl
cmZhY2U8d2VicnRjOjpWaWRlb0ZyYW1lPiogc2luaywgY29uc3QgcnRjOjpWaWRlb1NpbmtXYW50
cyYgc2lua1dhbnRzKQoreworICAgIEFTU0VSVCghc2lua1dhbnRzLmJsYWNrX2ZyYW1lcyk7CisK
KyAgICBpZiAoc2lua1dhbnRzLnJvdGF0aW9uX2FwcGxpZWQpCisgICAgICAgIG1fc2hvdWxkQXBw
bHlSb3RhdGlvbiA9IHRydWU7CisKKyAgICBpZiAoIW1fc2lua3MuY29udGFpbnMoc2luaykpCisg
ICAgICAgIG1fc2lua3MuYXBwZW5kKHNpbmspOworCisgICAgY2FsbE9uTWFpblRocmVhZChbcHJv
dGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSgpIHsKKyAgICAgICAgcHJvdGVjdGVkVGhpcy0+
c2VuZEJsYWNrRnJhbWVzSWZOZWVkZWQoKTsKKyAgICB9KTsKK30KKwordm9pZCBSZWFsdGltZU91
dGdvaW5nVmlkZW9Tb3VyY2U6OlJlbW92ZVNpbmsocnRjOjpWaWRlb1NpbmtJbnRlcmZhY2U8d2Vi
cnRjOjpWaWRlb0ZyYW1lPiogc2luaykKK3sKKyAgICBtX3NpbmtzLnJlbW92ZUZpcnN0KHNpbmsp
OworCisgICAgaWYgKG1fc2lua3Muc2l6ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBjYWxs
T25NYWluVGhyZWFkKFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldKCkgeworICAgICAg
ICBpZiAocHJvdGVjdGVkVGhpcy0+bV9ibGFja0ZyYW1lVGltZXIuaXNBY3RpdmUoKSkKKyAgICAg
ICAgICAgIHByb3RlY3RlZFRoaXMtPm1fYmxhY2tGcmFtZVRpbWVyLnN0b3AoKTsKKyAgICB9KTsK
K30KKwordm9pZCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnNlbmRCbGFja0ZyYW1lc0lm
TmVlZGVkKCkKK3sKKyAgICBpZiAobV9ibGFja0ZyYW1lVGltZXIuaXNBY3RpdmUoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKCFtX3NpbmtzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKCFtX211dGVkICYmIG1fZW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKCFtX3dpZHRoIHx8ICFtX2hlaWdodCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFt
X2JsYWNrRnJhbWUpIHsKKyAgICAgICAgYXV0byB3aWR0aCA9IG1fd2lkdGg7CisgICAgICAgIGF1
dG8gaGVpZ2h0ID0gbV9oZWlnaHQ7CisgICAgICAgIGlmIChtX3Nob3VsZEFwcGx5Um90YXRpb24g
JiYgKG1fY3VycmVudFJvdGF0aW9uID09IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMCB8fCBtX2N1
cnJlbnRSb3RhdGlvbiA9PSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzkwKSkKKyAgICAgICAgICAg
IHN0ZDo6c3dhcCh3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgYXV0byBmcmFtZSA9IG1fYnVmZmVy
UG9vbC5DcmVhdGVCdWZmZXIod2lkdGgsIGhlaWdodCk7CisgICAgICAgIEFTU0VSVChmcmFtZSk7
CisgICAgICAgIGlmICghZnJhbWUpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfTE9HKFdlYlJUQywg
IlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6c2VuZEJsYWNrRnJhbWVzSWZOZWVkZWQgdW5h
YmxlIHRvIHNlbmQgYmxhY2sgZnJhbWVzIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgd2VicnRjOjpJNDIwQnVmZmVyOjpTZXRCbGFjayhmcmFtZS5nZXQoKSk7Cisg
ICAgICAgIG1fYmxhY2tGcmFtZSA9IFdURk1vdmUoZnJhbWUpOworICAgIH0KKyAgICBzZW5kT25l
QmxhY2tGcmFtZSgpOworICAgIG1fYmxhY2tGcmFtZVRpbWVyLnN0YXJ0UmVwZWF0aW5nKDFfcyk7
Cit9CisKK3ZvaWQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpzZW5kT25lQmxhY2tGcmFt
ZSgpCit7CisgICAgUkVMRUFTRV9MT0coTWVkaWFTdHJlYW0sICJSZWFsdGltZU91dGdvaW5nVmlk
ZW9Tb3VyY2U6OnNlbmRPbmVCbGFja0ZyYW1lIik7CisgICAgc2VuZEZyYW1lKHJ0Yzo6c2NvcGVk
X3JlZnB0cjx3ZWJydGM6OlZpZGVvRnJhbWVCdWZmZXI+KG1fYmxhY2tGcmFtZSkpOworfQorCit2
b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6c2VuZEZyYW1lKHJ0Yzo6c2NvcGVkX3Jl
ZnB0cjx3ZWJydGM6OlZpZGVvRnJhbWVCdWZmZXI+JiYgYnVmZmVyKQoreworICAgIGludDY0X3Qg
dGltZXN0YW1wTWljcm9TZWNvbmRzID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lTVMoKSAq
IDEwMDA7CisgICAgd2VicnRjOjpWaWRlb0ZyYW1lIGZyYW1lKGJ1ZmZlciwgbV9zaG91bGRBcHBs
eVJvdGF0aW9uID8gd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8wIDogbV9jdXJyZW50Um90YXRpb24s
IHRpbWVzdGFtcE1pY3JvU2Vjb25kcyk7CisgICAgZm9yIChhdXRvKiBzaW5rIDogbV9zaW5rcykK
KyAgICAgICAgc2luay0+T25GcmFtZShmcmFtZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIFVTRShMSUJXRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1Nv
dXJjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjk2MjYxYzRiNzY2MDIwOTE3Y2QxZTQ5ZTA4ZGVkMjczOGUzZWUy
MzgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuaApAQCAtMCwwICsxLDExNiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgcmVxdWlyZWQgdG8gYmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisg
KiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYg
VVNFKExJQldFQlJUQykKKworI2luY2x1ZGUgIkxpYldlYlJUQ01hY3Jvcy5oIgorI2luY2x1ZGUg
Ik1lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmgiCisjaW5jbHVkZSA8VGltZXIuaD4KKyNpbmNsdWRl
IDx3ZWJydGMvYXBpL21lZGlhc3RyZWFtaW50ZXJmYWNlLmg+CisjaW5jbHVkZSA8d2VicnRjL2Jh
c2Uvb3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3ZWJydGMvY29tbW9uX3ZpZGVvL2luY2x1ZGUvaTQy
MF9idWZmZXJfcG9vbC5oPgorI2luY2x1ZGUgPHdlYnJ0Yy9tZWRpYS9iYXNlL3ZpZGVvc2lua2lu
dGVyZmFjZS5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJl
YWRTYWZlUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJlYWx0
aW1lT3V0Z29pbmdWaWRlb1NvdXJjZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxSZWFs
dGltZU91dGdvaW5nVmlkZW9Tb3VyY2U+LCBwdWJsaWMgd2VicnRjOjpWaWRlb1RyYWNrU291cmNl
SW50ZXJmYWNlLCBwcml2YXRlIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpPYnNlcnZlciB7Citw
dWJsaWM6CisgICAgc3RhdGljIFJlZjxSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U+IGNyZWF0
ZShSZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYgdmlkZW9Tb3VyY2UpOworICAgIH5SZWFs
dGltZU91dGdvaW5nVmlkZW9Tb3VyY2UoKSB7IHN0b3AoKTsgfQorCisgICAgdm9pZCBzdG9wKCk7
CisgICAgYm9vbCBzZXRTb3VyY2UoUmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiYmKTsKKyAg
ICBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYgc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV92aWRl
b1NvdXJjZS5nZXQoKTsgfQorCisgICAgaW50IEFkZFJlZigpIGNvbnN0IGZpbmFsIHsgcmVmKCk7
IHJldHVybiByZWZDb3VudCgpOyB9CisgICAgaW50IFJlbGVhc2UoKSBjb25zdCBmaW5hbCB7IGRl
cmVmKCk7IHJldHVybiByZWZDb3VudCgpOyB9CisKKyAgICB2b2lkIHNldEFwcGx5Um90YXRpb24o
Ym9vbCBzaG91bGRBcHBseVJvdGF0aW9uKSB7IG1fc2hvdWxkQXBwbHlSb3RhdGlvbiA9IHNob3Vs
ZEFwcGx5Um90YXRpb247IH0KKworcHJvdGVjdGVkOgorICAgIGV4cGxpY2l0IFJlYWx0aW1lT3V0
Z29pbmdWaWRlb1NvdXJjZShSZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYpOworCisgICAg
dm9pZCBzZW5kRnJhbWUocnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9GcmFtZUJ1ZmZl
cj4mJik7CisKKyAgICBWZWN0b3I8cnRjOjpWaWRlb1NpbmtJbnRlcmZhY2U8d2VicnRjOjpWaWRl
b0ZyYW1lPio+IG1fc2lua3M7CisgICAgd2VicnRjOjpJNDIwQnVmZmVyUG9vbCBtX2J1ZmZlclBv
b2w7CisKKyAgICBib29sIG1fZW5hYmxlZCB7IHRydWUgfTsKKyAgICBib29sIG1fbXV0ZWQgeyBm
YWxzZSB9OworICAgIHVpbnQzMl90IG1fd2lkdGggeyAwIH07CisgICAgdWludDMyX3QgbV9oZWln
aHQgeyAwIH07CisgICAgYm9vbCBtX3Nob3VsZEFwcGx5Um90YXRpb24geyBmYWxzZSB9OworICAg
IHdlYnJ0Yzo6VmlkZW9Sb3RhdGlvbiBtX2N1cnJlbnRSb3RhdGlvbiB7IHdlYnJ0Yzo6a1ZpZGVv
Um90YXRpb25fMCB9OworCitwcml2YXRlOgorICAgIHZvaWQgc2VuZEJsYWNrRnJhbWVzSWZOZWVk
ZWQoKTsKKyAgICB2b2lkIHNlbmRPbmVCbGFja0ZyYW1lKCk7CisgICAgdm9pZCBpbml0aWFsaXpl
RnJvbVNvdXJjZSgpOworICAgIHZvaWQgdXBkYXRlQmxhY2tGcmFtZXNTZW5kaW5nKCk7CisKKyAg
ICAvLyBOb3RpZmllciBBUEkKKyAgICB2b2lkIFJlZ2lzdGVyT2JzZXJ2ZXIod2VicnRjOjpPYnNl
cnZlckludGVyZmFjZSopIGZpbmFsIHsgfQorICAgIHZvaWQgVW5yZWdpc3Rlck9ic2VydmVyKHdl
YnJ0Yzo6T2JzZXJ2ZXJJbnRlcmZhY2UqKSBmaW5hbCB7IH0KKworICAgIC8vIFZpZGVvVHJhY2tT
b3VyY2VJbnRlcmZhY2UgQVBJCisgICAgYm9vbCBpc19zY3JlZW5jYXN0KCkgY29uc3QgZmluYWwg
eyByZXR1cm4gZmFsc2U7IH0KKyAgICBydGM6Ok9wdGlvbmFsPGJvb2w+IG5lZWRzX2Rlbm9pc2lu
ZygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHJ0Yzo6T3B0aW9uYWw8Ym9vbD4oKTsgfQorICAgIGJv
b2wgR2V0U3RhdHMoU3RhdHMqKSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfTsKKworICAgIC8vIE1l
ZGlhU291cmNlSW50ZXJmYWNlIEFQSQorICAgIFNvdXJjZVN0YXRlIHN0YXRlKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gU291cmNlU3RhdGUoKTsgfQorICAgIGJvb2wgcmVtb3RlKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgLy8gcnRjOjpWaWRlb1NvdXJjZUludGVyZmFjZTx3
ZWJydGM6OlZpZGVvRnJhbWU+IEFQSQorICAgIHZvaWQgQWRkT3JVcGRhdGVTaW5rKHJ0Yzo6Vmlk
ZW9TaW5rSW50ZXJmYWNlPHdlYnJ0Yzo6VmlkZW9GcmFtZT4qLCBjb25zdCBydGM6OlZpZGVvU2lu
a1dhbnRzJikgZmluYWw7CisgICAgdm9pZCBSZW1vdmVTaW5rKHJ0Yzo6VmlkZW9TaW5rSW50ZXJm
YWNlPHdlYnJ0Yzo6VmlkZW9GcmFtZT4qKSBmaW5hbDsKKworICAgIHZvaWQgc291cmNlTXV0ZWRD
aGFuZ2VkKCk7CisgICAgdm9pZCBzb3VyY2VFbmFibGVkQ2hhbmdlZCgpOworCisgICAgLy8gTWVk
aWFTdHJlYW1UcmFja1ByaXZhdGU6Ok9ic2VydmVyIEFQSQorICAgIHZvaWQgdHJhY2tNdXRlZENo
YW5nZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmKSBmaW5hbCB7IHNvdXJjZU11dGVkQ2hhbmdl
ZCgpOyB9CisgICAgdm9pZCB0cmFja0VuYWJsZWRDaGFuZ2VkKE1lZGlhU3RyZWFtVHJhY2tQcml2
YXRlJikgZmluYWwgeyBzb3VyY2VFbmFibGVkQ2hhbmdlZCgpOyB9CisgICAgdm9pZCB0cmFja1Nl
dHRpbmdzQ2hhbmdlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYpIGZpbmFsIHsgaW5pdGlhbGl6
ZUZyb21Tb3VyY2UoKTsgfQorICAgIHZvaWQgc2FtcGxlQnVmZmVyVXBkYXRlZChNZWRpYVN0cmVh
bVRyYWNrUHJpdmF0ZSYsIE1lZGlhU2FtcGxlJikgb3ZlcnJpZGUgeyB9CisgICAgdm9pZCB0cmFj
a0VuZGVkKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJikgZmluYWwgeyB9CisKKyAgICBSZWY8TWVk
aWFTdHJlYW1UcmFja1ByaXZhdGU+IG1fdmlkZW9Tb3VyY2U7CisgICAgc3RkOjpvcHRpb25hbDxS
ZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M+IG1faW5pdGlhbFNldHRpbmdzOworICAgIGJvb2wg
bV9pc1N0b3BwZWQgeyBmYWxzZSB9OworICAgIFRpbWVyIG1fYmxhY2tGcmFtZVRpbWVyOworICAg
IHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvRnJhbWVCdWZmZXI+IG1fYmxhY2tGcmFt
ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShMSUJXRUJS
VEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMv
UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjYxOGQ2OTUyNzYzZmU3ZDdjNGI2YjhjZTRmOWNkYzE4
MjdhMzcxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUluY29taW5nVmlk
ZW9Tb3VyY2UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjA2ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiAgICBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0
cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0gKiAgICBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuaCIK
LQotI2lmIFVTRShMSUJXRUJSVEMpCi0KLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAi
TWVkaWFTYW1wbGVBVkZPYmpDLmgiCi0jaW5jbHVkZSA8d2VicnRjL3Nkay9vYmpjL0ZyYW1ld29y
ay9DbGFzc2VzL1ZpZGVvL2NvcmV2aWRlb19mcmFtZV9idWZmZXIuaD4KLQotI2luY2x1ZGUgIkNv
cmVNZWRpYVNvZnRMaW5rLmgiCi0jaW5jbHVkZSAiQ29yZVZpZGVvU29mdExpbmsuaCIKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1SZWY8UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlPiBSZWFs
dGltZUluY29taW5nVmlkZW9Tb3VyY2U6OmNyZWF0ZShydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRj
OjpWaWRlb1RyYWNrSW50ZXJmYWNlPiYmIHZpZGVvVHJhY2ssIFN0cmluZyYmIHRyYWNrSWQpCi17
Ci0gICAgYXV0byBzb3VyY2UgPSBhZG9wdFJlZigqbmV3IFJlYWx0aW1lSW5jb21pbmdWaWRlb1Nv
dXJjZShXVEZNb3ZlKHZpZGVvVHJhY2spLCBXVEZNb3ZlKHRyYWNrSWQpKSk7Ci0gICAgc291cmNl
LT5zdGFydCgpOwotICAgIHJldHVybiBzb3VyY2U7Ci19Ci0KLVJlYWx0aW1lSW5jb21pbmdWaWRl
b1NvdXJjZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlKHJ0Yzo6c2NvcGVkX3JlZnB0cjx3
ZWJydGM6OlZpZGVvVHJhY2tJbnRlcmZhY2U+JiYgdmlkZW9UcmFjaywgU3RyaW5nJiYgdmlkZW9U
cmFja0lkKQotICAgIDogUmVhbHRpbWVNZWRpYVNvdXJjZShXVEZNb3ZlKHZpZGVvVHJhY2tJZCks
IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OlZpZGVvLCBTdHJpbmcoKSkKLSAgICAsIG1fdmlk
ZW9UcmFjayhXVEZNb3ZlKHZpZGVvVHJhY2spKQotewotICAgIG1fY3VycmVudFNldHRpbmdzLnNl
dFdpZHRoKDY0MCk7Ci0gICAgbV9jdXJyZW50U2V0dGluZ3Muc2V0SGVpZ2h0KDQ4MCk7Ci0gICAg
bm90aWZ5TXV0ZWRDaGFuZ2UoIW1fdmlkZW9UcmFjayk7Ci19Ci0KLXZvaWQgUmVhbHRpbWVJbmNv
bWluZ1ZpZGVvU291cmNlOjpzdGFydFByb2R1Y2luZ0RhdGEoKQotewotICAgIGlmIChtX3ZpZGVv
VHJhY2spCi0gICAgICAgIG1fdmlkZW9UcmFjay0+QWRkT3JVcGRhdGVTaW5rKHRoaXMsIHJ0Yzo6
VmlkZW9TaW5rV2FudHMoKSk7Ci19Ci0KLXZvaWQgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNl
OjpzZXRTb3VyY2VUcmFjayhydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb1RyYWNrSW50
ZXJmYWNlPiYmIHRyYWNrKQotewotICAgIEFTU0VSVCghbV92aWRlb1RyYWNrKTsKLSAgICBBU1NF
UlQodHJhY2spOwotCi0gICAgbV92aWRlb1RyYWNrID0gV1RGTW92ZSh0cmFjayk7Ci0gICAgbm90
aWZ5TXV0ZWRDaGFuZ2UoIW1fdmlkZW9UcmFjayk7Ci0gICAgaWYgKGlzUHJvZHVjaW5nRGF0YSgp
KQotICAgICAgICBtX3ZpZGVvVHJhY2stPkFkZE9yVXBkYXRlU2luayh0aGlzLCBydGM6OlZpZGVv
U2lua1dhbnRzKCkpOwotfQotCi12b2lkIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6c3Rv
cFByb2R1Y2luZ0RhdGEoKQotewotICAgIGlmIChtX3ZpZGVvVHJhY2spCi0gICAgICAgIG1fdmlk
ZW9UcmFjay0+UmVtb3ZlU2luayh0aGlzKTsKLX0KLQotQ1ZQaXhlbEJ1ZmZlclJlZiBSZWFsdGlt
ZUluY29taW5nVmlkZW9Tb3VyY2U6OnBpeGVsQnVmZmVyRnJvbVZpZGVvRnJhbWUoY29uc3Qgd2Vi
cnRjOjpWaWRlb0ZyYW1lJiBmcmFtZSkKLXsKLSAgICBpZiAobXV0ZWQoKSkgewotICAgICAgICBp
ZiAoIW1fYmxhY2tGcmFtZSB8fCBtX2JsYWNrRnJhbWVXaWR0aCAhPSBmcmFtZS53aWR0aCgpIHx8
IG1fYmxhY2tGcmFtZUhlaWdodCAhPSBmcmFtZS5oZWlnaHQoKSkgewotICAgICAgICAgICAgQ1ZQ
aXhlbEJ1ZmZlclJlZiBwaXhlbEJ1ZmZlciA9IG51bGxwdHI7Ci0gICAgICAgICAgICBhdXRvIHN0
YXR1cyA9IENWUGl4ZWxCdWZmZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgZnJhbWUud2lk
dGgoKSwgZnJhbWUuaGVpZ2h0KCksIGtDVlBpeGVsRm9ybWF0VHlwZV80MjBZcENiQ3I4UGxhbmFy
LCBudWxscHRyLCAmcGl4ZWxCdWZmZXIpOwotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChzdGF0
dXMsIHN0YXR1cyA9PSBub0Vycik7Ci0KLSAgICAgICAgICAgIG1fYmxhY2tGcmFtZSA9IHBpeGVs
QnVmZmVyOwotICAgICAgICAgICAgbV9ibGFja0ZyYW1lV2lkdGggPSBmcmFtZS53aWR0aCgpOwot
ICAgICAgICAgICAgbV9ibGFja0ZyYW1lSGVpZ2h0ID0gZnJhbWUuaGVpZ2h0KCk7Ci0KLSAgICAg
ICAgICAgIHN0YXR1cyA9IENWUGl4ZWxCdWZmZXJMb2NrQmFzZUFkZHJlc3MocGl4ZWxCdWZmZXIs
IDApOwotICAgICAgICAgICAgQVNTRVJUKHN0YXR1cyA9PSBub0Vycik7Ci0gICAgICAgICAgICB2
b2lkKiBkYXRhID0gQ1ZQaXhlbEJ1ZmZlckdldEJhc2VBZGRyZXNzKHBpeGVsQnVmZmVyKTsKLSAg
ICAgICAgICAgIHNpemVfdCB5TGVuZ3RoID0gZnJhbWUud2lkdGgoKSAqIGZyYW1lLmhlaWdodCgp
OwotICAgICAgICAgICAgbWVtc2V0KGRhdGEsIDAsIHlMZW5ndGgpOwotICAgICAgICAgICAgbWVt
c2V0KHN0YXRpY19jYXN0PHVpbnQ4X3QqPihkYXRhKSArIHlMZW5ndGgsIDEyOCwgeUxlbmd0aCAv
IDIpOwotCi0gICAgICAgICAgICBzdGF0dXMgPSBDVlBpeGVsQnVmZmVyVW5sb2NrQmFzZUFkZHJl
c3MocGl4ZWxCdWZmZXIsIDApOwotICAgICAgICAgICAgQVNTRVJUKCFzdGF0dXMpOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiBtX2JsYWNrRnJhbWUuZ2V0KCk7Ci0gICAgfQotICAgIGF1dG8g
YnVmZmVyID0gZnJhbWUudmlkZW9fZnJhbWVfYnVmZmVyKCk7Ci0gICAgQVNTRVJUKGJ1ZmZlci0+
dHlwZSgpID09IHdlYnJ0Yzo6VmlkZW9GcmFtZUJ1ZmZlcjo6VHlwZTo6a05hdGl2ZSk7Ci0gICAg
cmV0dXJuIHN0YXRpY19jYXN0PHdlYnJ0Yzo6Q29yZVZpZGVvRnJhbWVCdWZmZXImPigqYnVmZmVy
KS5waXhlbF9idWZmZXIoKTsKLX0KLQotdm9pZCBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6
Ok9uRnJhbWUoY29uc3Qgd2VicnRjOjpWaWRlb0ZyYW1lJiBmcmFtZSkKLXsKLSAgICBpZiAoIWlz
UHJvZHVjaW5nRGF0YSgpKQotICAgICAgICByZXR1cm47Ci0KLSNpZiAhUkVMRUFTRV9MT0dfRElT
QUJMRUQKLSAgICBpZiAoISgrK21fbnVtYmVyT2ZGcmFtZXMgJSAzMCkpCi0gICAgICAgIFJFTEVB
U0VfTE9HKE1lZGlhU3RyZWFtLCAiUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlOjpPbkZyYW1l
ICV6dSBmcmFtZSIsIG1fbnVtYmVyT2ZGcmFtZXMpOwotI2VuZGlmCi0KLSAgICBhdXRvIHBpeGVs
QnVmZmVyID0gcGl4ZWxCdWZmZXJGcm9tVmlkZW9GcmFtZShmcmFtZSk7Ci0KLSAgICAvLyBGSVhN
RTogQ29udmVydCB0aW1pbmcgaW5mb3JtYXRpb24gZnJvbSBWaWRlb0ZyYW1lIHRvIENNU2FtcGxl
VGltaW5nSW5mby4KLSAgICAvLyBGb3IgdGhlIG1vbWVudCwgd2Ugd2lsbCBwcmV0ZW5kIHRoYXQg
ZnJhbWVzIHNob3VsZCBiZSByZW5kZXJlZCBhc2FwLgotICAgIENNU2FtcGxlVGltaW5nSW5mbyB0
aW1pbmdJbmZvOwotICAgIHRpbWluZ0luZm8ucHJlc2VudGF0aW9uVGltZVN0YW1wID0ga0NNVGlt
ZUludmFsaWQ7Ci0gICAgdGltaW5nSW5mby5kZWNvZGVUaW1lU3RhbXAgPSBrQ01UaW1lSW52YWxp
ZDsKLSAgICB0aW1pbmdJbmZvLmR1cmF0aW9uID0ga0NNVGltZUludmFsaWQ7Ci0KLSAgICBDTVZp
ZGVvRm9ybWF0RGVzY3JpcHRpb25SZWYgZm9ybWF0RGVzY3JpcHRpb247Ci0gICAgT1NTdGF0dXMg
b3N0YXR1cyA9IENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbkNyZWF0ZUZvckltYWdlQnVmZmVyKGtD
RkFsbG9jYXRvckRlZmF1bHQsIChDVkltYWdlQnVmZmVyUmVmKXBpeGVsQnVmZmVyLCAmZm9ybWF0
RGVzY3JpcHRpb24pOwotICAgIGlmIChvc3RhdHVzICE9IG5vRXJyKSB7Ci0gICAgICAgIExPR19F
UlJPUigiRmFpbGVkIHRvIGluaXRpYWxpemUgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uOiAlZCIs
IHN0YXRpY19jYXN0PGludD4ob3N0YXR1cykpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgQ01TYW1wbGVCdWZmZXJSZWYgc2FtcGxlQnVmZmVyOwotICAgIG9zdGF0dXMgPSBDTVNhbXBs
ZUJ1ZmZlckNyZWF0ZVJlYWR5V2l0aEltYWdlQnVmZmVyKGtDRkFsbG9jYXRvckRlZmF1bHQsIChD
VkltYWdlQnVmZmVyUmVmKXBpeGVsQnVmZmVyLCBmb3JtYXREZXNjcmlwdGlvbiwgJnRpbWluZ0lu
Zm8sICZzYW1wbGVCdWZmZXIpOwotICAgIGlmIChvc3RhdHVzICE9IG5vRXJyKSB7Ci0gICAgICAg
IExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSB0aGUgc2FtcGxlIGJ1ZmZlcjogJWQiLCBzdGF0
aWNfY2FzdDxpbnQ+KG9zdGF0dXMpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBDRlJl
bGVhc2UoZm9ybWF0RGVzY3JpcHRpb24pOwotCi0gICAgYXV0byBzYW1wbGUgPSBhZG9wdENGKHNh
bXBsZUJ1ZmZlcik7Ci0KLSAgICBDRkFycmF5UmVmIGF0dGFjaG1lbnRzQXJyYXkgPSBDTVNhbXBs
ZUJ1ZmZlckdldFNhbXBsZUF0dGFjaG1lbnRzQXJyYXkoc2FtcGxlQnVmZmVyLCB0cnVlKTsKLSAg
ICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCBDRkFycmF5R2V0Q291bnQoYXR0YWNobWVudHNBcnJh
eSk7ICsraSkgewotICAgICAgICBDRk11dGFibGVEaWN0aW9uYXJ5UmVmIGF0dGFjaG1lbnRzID0g
KENGTXV0YWJsZURpY3Rpb25hcnlSZWYpQ0ZBcnJheUdldFZhbHVlQXRJbmRleChhdHRhY2htZW50
c0FycmF5LCBpKTsKLSAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUoYXR0YWNobWVudHMsIGtD
TVNhbXBsZUF0dGFjaG1lbnRLZXlfRGlzcGxheUltbWVkaWF0ZWx5LCBrQ0ZCb29sZWFuVHJ1ZSk7
Ci0gICAgfQotCi0gICAgdW5zaWduZWQgd2lkdGggPSBmcmFtZS53aWR0aCgpOwotICAgIHVuc2ln
bmVkIGhlaWdodCA9IGZyYW1lLmhlaWdodCgpOwotCi0gICAgTWVkaWFTYW1wbGU6OlZpZGVvUm90
YXRpb24gcm90YXRpb247Ci0gICAgc3dpdGNoIChmcmFtZS5yb3RhdGlvbigpKSB7Ci0gICAgY2Fz
ZSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzA6Ci0gICAgICAgIHJvdGF0aW9uID0gTWVkaWFTYW1w
bGU6OlZpZGVvUm90YXRpb246Ok5vbmU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ugd2VicnRj
OjprVmlkZW9Sb3RhdGlvbl8xODA6Ci0gICAgICAgIHJvdGF0aW9uID0gTWVkaWFTYW1wbGU6OlZp
ZGVvUm90YXRpb246OlVwc2lkZURvd247Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ugd2VicnRj
OjprVmlkZW9Sb3RhdGlvbl85MDoKLSAgICAgICAgcm90YXRpb24gPSBNZWRpYVNhbXBsZTo6Vmlk
ZW9Sb3RhdGlvbjo6UmlnaHQ7Ci0gICAgICAgIHN0ZDo6c3dhcCh3aWR0aCwgaGVpZ2h0KTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzI3MDoKLSAgICAg
ICAgcm90YXRpb24gPSBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6TGVmdDsKLSAgICAgICAg
c3RkOjpzd2FwKHdpZHRoLCBoZWlnaHQpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBS
ZWZQdHI8UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwot
ICAgIGNhbGxPbk1haW5UaHJlYWQoW3Byb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRo
aXMpLCBzYW1wbGUgPSBXVEZNb3ZlKHNhbXBsZSksIHdpZHRoLCBoZWlnaHQsIHJvdGF0aW9uXSB7
Ci0gICAgICAgIHByb3RlY3RlZFRoaXMtPnByb2Nlc3NOZXdTYW1wbGUoc2FtcGxlLmdldCgpLCB3
aWR0aCwgaGVpZ2h0LCByb3RhdGlvbik7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgUmVhbHRpbWVJbmNv
bWluZ1ZpZGVvU291cmNlOjpwcm9jZXNzTmV3U2FtcGxlKENNU2FtcGxlQnVmZmVyUmVmIHNhbXBs
ZSwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgTWVkaWFTYW1wbGU6OlZpZGVvUm90
YXRpb24gcm90YXRpb24pCi17Ci0gICAgbV9idWZmZXIgPSBzYW1wbGU7Ci0gICAgaWYgKHdpZHRo
ICE9IG1fY3VycmVudFNldHRpbmdzLndpZHRoKCkgfHwgaGVpZ2h0ICE9IG1fY3VycmVudFNldHRp
bmdzLmhlaWdodCgpKSB7Ci0gICAgICAgIG1fY3VycmVudFNldHRpbmdzLnNldFdpZHRoKHdpZHRo
KTsKLSAgICAgICAgbV9jdXJyZW50U2V0dGluZ3Muc2V0SGVpZ2h0KGhlaWdodCk7Ci0gICAgICAg
IHNldHRpbmdzRGlkQ2hhbmdlKCk7Ci0gICAgfQotCi0gICAgdmlkZW9TYW1wbGVBdmFpbGFibGUo
TWVkaWFTYW1wbGVBVkZPYmpDOjpjcmVhdGUoc2FtcGxlLCByb3RhdGlvbikpOwotfQotCi1jb25z
dCBSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzJiBSZWFsdGltZUluY29taW5nVmlkZW9T
b3VyY2U6OmNhcGFiaWxpdGllcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFJlYWx0aW1lTWVkaWFT
b3VyY2VDYXBhYmlsaXRpZXM6OmVtcHR5Q2FwYWJpbGl0aWVzKCk7Ci19Ci0KLWNvbnN0IFJlYWx0
aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyYgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlOjpzZXR0
aW5ncygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fY3VycmVudFNldHRpbmdzOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoTElCV0VCUlRDKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lSW5jb21p
bmdWaWRlb1NvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFj
L1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAxZWI3YzM2NGZlMzIzMjIyMmVhYjRmMjViN2I0MTAwY2M5MTAyODA5Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuaAorKysgL2Rl
di9udWxsCkBAIC0xLDg2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCi0gKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9y
cwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbSB0aGlzCi0gKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgVVNFKExJQldF
QlJUQykKLQotI2luY2x1ZGUgIkxpYldlYlJUQ01hY3Jvcy5oIgotI2luY2x1ZGUgIlJlYWx0aW1l
TWVkaWFTb3VyY2UuaCIKLSNpbmNsdWRlIDx3ZWJydGMvYXBpL21lZGlhc3RyZWFtaW50ZXJmYWNl
Lmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi11c2luZyBDTVNhbXBsZUJ1ZmZlclJl
ZiA9IHN0cnVjdCBvcGFxdWVDTVNhbXBsZUJ1ZmZlcio7Ci11c2luZyBDVlBpeGVsQnVmZmVyUmVm
ID0gc3RydWN0IF9fQ1ZCdWZmZXIqOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENh
cHR1cmVEZXZpY2U7Ci0KLWNsYXNzIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZSBmaW5hbCA6
IHB1YmxpYyBSZWFsdGltZU1lZGlhU291cmNlLCBwcml2YXRlIHJ0Yzo6VmlkZW9TaW5rSW50ZXJm
YWNlPHdlYnJ0Yzo6VmlkZW9GcmFtZT4gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8UmVhbHRp
bWVJbmNvbWluZ1ZpZGVvU291cmNlPiBjcmVhdGUocnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6
VmlkZW9UcmFja0ludGVyZmFjZT4mJiwgU3RyaW5nJiYpOwotICAgIH5SZWFsdGltZUluY29taW5n
VmlkZW9Tb3VyY2UoKSB7IHN0b3BQcm9kdWNpbmdEYXRhKCk7IH0KLQotICAgIHZvaWQgc2V0U291
cmNlVHJhY2socnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9UcmFja0ludGVyZmFjZT4m
Jik7Ci0KLXByaXZhdGU6Ci0gICAgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlKHJ0Yzo6c2Nv
cGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvVHJhY2tJbnRlcmZhY2U+JiYsIFN0cmluZyYmKTsKLQot
ICAgIC8vIFJlYWx0aW1lTWVkaWFTb3VyY2UgQVBJCi0gICAgdm9pZCBzdGFydFByb2R1Y2luZ0Rh
dGEoKSBmaW5hbDsKLSAgICB2b2lkIHN0b3BQcm9kdWNpbmdEYXRhKCkgIGZpbmFsOwotCi0gICAg
Y29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcyYgY2FwYWJpbGl0aWVzKCkgY29u
c3QgZmluYWw7Ci0gICAgY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzJiBzZXR0aW5n
cygpIGNvbnN0IGZpbmFsOwotCi0gICAgdm9pZCBwcm9jZXNzTmV3U2FtcGxlKENNU2FtcGxlQnVm
ZmVyUmVmLCB1bnNpZ25lZCwgdW5zaWduZWQsIE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uKTsK
LQotICAgIGJvb2wgYXBwbHlTaXplKGNvbnN0IEludFNpemUmKSBmaW5hbCB7IHJldHVybiB0cnVl
OyB9Ci0KLSAgICAvLyBydGM6OlZpZGVvU2lua0ludGVyZmFjZQotICAgIHZvaWQgT25GcmFtZShj
b25zdCB3ZWJydGM6OlZpZGVvRnJhbWUmKSBmaW5hbDsKLQotICAgIENWUGl4ZWxCdWZmZXJSZWYg
cGl4ZWxCdWZmZXJGcm9tVmlkZW9GcmFtZShjb25zdCB3ZWJydGM6OlZpZGVvRnJhbWUmKTsKLQot
ICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyBtX2N1cnJlbnRTZXR0aW5nczsKLSAgICBy
dGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb1RyYWNrSW50ZXJmYWNlPiBtX3ZpZGVvVHJh
Y2s7Ci0gICAgUmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiBtX2J1ZmZlcjsKLSAgICBSZXRh
aW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gbV9ibGFja0ZyYW1lOwotICAgIGludCBtX2JsYWNrRnJh
bWVXaWR0aCB7IDAgfTsKLSAgICBpbnQgbV9ibGFja0ZyYW1lSGVpZ2h0IHsgMCB9OwotI2lmICFS
RUxFQVNFX0xPR19ESVNBQkxFRAotICAgIHNpemVfdCBtX251bWJlck9mRnJhbWVzIHsgMCB9Owot
I2VuZGlmCi19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoTElC
V0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
bWFjL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUNvY29hLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VDb2Nv
YS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYjVmMGVmZTk3ZDg5YmEwMTZjZWZhZDM1OGQzOTAzMjQ3ZDIyZDdk
ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L21hYy9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VDb2NvYS5jcHAKQEAgLTAsMCArMSwxNzEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlQ29jb2EuaCIKKworI2lmIFVT
RShMSUJXRUJSVEMpCisKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiTWVkaWFTYW1w
bGVBVkZPYmpDLmgiCisjaW5jbHVkZSA8d2VicnRjL3Nkay9vYmpjL0ZyYW1ld29yay9DbGFzc2Vz
L1ZpZGVvL2NvcmV2aWRlb19mcmFtZV9idWZmZXIuaD4KKworI2luY2x1ZGUgIkNvcmVNZWRpYVNv
ZnRMaW5rLmgiCisjaW5jbHVkZSAiQ29yZVZpZGVvU29mdExpbmsuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitSZWY8UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlPiBSZWFsdGltZUluY29t
aW5nVmlkZW9Tb3VyY2U6OmNyZWF0ZShydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb1Ry
YWNrSW50ZXJmYWNlPiYmIHZpZGVvVHJhY2ssIFN0cmluZyYmIHRyYWNrSWQpCit7CisgICAgYXV0
byBzb3VyY2UgPSBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VDb2NvYTo6Y3JlYXRlKFdURk1v
dmUodmlkZW9UcmFjayksIFdURk1vdmUodHJhY2tJZCkpOworICAgIHNvdXJjZS0+c3RhcnQoKTsK
KyAgICByZXR1cm4gV1RGTW92ZShzb3VyY2UpOworfQorCitSZWY8UmVhbHRpbWVJbmNvbWluZ1Zp
ZGVvU291cmNlQ29jb2E+IFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUNvY29hOjpjcmVhdGUo
cnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9UcmFja0ludGVyZmFjZT4mJiB2aWRlb1Ry
YWNrLCBTdHJpbmcmJiB0cmFja0lkKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFJlYWx0
aW1lSW5jb21pbmdWaWRlb1NvdXJjZUNvY29hKFdURk1vdmUodmlkZW9UcmFjayksIFdURk1vdmUo
dHJhY2tJZCkpKTsKK30KKworUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlQ29jb2E6OlJlYWx0
aW1lSW5jb21pbmdWaWRlb1NvdXJjZUNvY29hKHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZp
ZGVvVHJhY2tJbnRlcmZhY2U+JiYgdmlkZW9UcmFjaywgU3RyaW5nJiYgdmlkZW9UcmFja0lkKQor
ICAgIDogUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlKFdURk1vdmUodmlkZW9UcmFjayksIFdU
Rk1vdmUodmlkZW9UcmFja0lkKSkKK3sKK30KKworQ1ZQaXhlbEJ1ZmZlclJlZiBSZWFsdGltZUlu
Y29taW5nVmlkZW9Tb3VyY2VDb2NvYTo6cGl4ZWxCdWZmZXJGcm9tVmlkZW9GcmFtZShjb25zdCB3
ZWJydGM6OlZpZGVvRnJhbWUmIGZyYW1lKQoreworICAgIGlmIChtdXRlZCgpKSB7CisgICAgICAg
IGlmICghbV9ibGFja0ZyYW1lIHx8IG1fYmxhY2tGcmFtZVdpZHRoICE9IGZyYW1lLndpZHRoKCkg
fHwgbV9ibGFja0ZyYW1lSGVpZ2h0ICE9IGZyYW1lLmhlaWdodCgpKSB7CisgICAgICAgICAgICBD
VlBpeGVsQnVmZmVyUmVmIHBpeGVsQnVmZmVyID0gbnVsbHB0cjsKKyAgICAgICAgICAgIGF1dG8g
c3RhdHVzID0gQ1ZQaXhlbEJ1ZmZlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBmcmFtZS53
aWR0aCgpLCBmcmFtZS5oZWlnaHQoKSwga0NWUGl4ZWxGb3JtYXRUeXBlXzQyMFlwQ2JDcjhQbGFu
YXIsIG51bGxwdHIsICZwaXhlbEJ1ZmZlcik7CisgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHN0
YXR1cywgc3RhdHVzID09IG5vRXJyKTsKKworICAgICAgICAgICAgbV9ibGFja0ZyYW1lID0gcGl4
ZWxCdWZmZXI7CisgICAgICAgICAgICBtX2JsYWNrRnJhbWVXaWR0aCA9IGZyYW1lLndpZHRoKCk7
CisgICAgICAgICAgICBtX2JsYWNrRnJhbWVIZWlnaHQgPSBmcmFtZS5oZWlnaHQoKTsKKworICAg
ICAgICAgICAgc3RhdHVzID0gQ1ZQaXhlbEJ1ZmZlckxvY2tCYXNlQWRkcmVzcyhwaXhlbEJ1ZmZl
ciwgMCk7CisgICAgICAgICAgICBBU1NFUlQoc3RhdHVzID09IG5vRXJyKTsKKyAgICAgICAgICAg
IHZvaWQqIGRhdGEgPSBDVlBpeGVsQnVmZmVyR2V0QmFzZUFkZHJlc3MocGl4ZWxCdWZmZXIpOwor
ICAgICAgICAgICAgc2l6ZV90IHlMZW5ndGggPSBmcmFtZS53aWR0aCgpICogZnJhbWUuaGVpZ2h0
KCk7CisgICAgICAgICAgICBtZW1zZXQoZGF0YSwgMCwgeUxlbmd0aCk7CisgICAgICAgICAgICBt
ZW1zZXQoc3RhdGljX2Nhc3Q8dWludDhfdCo+KGRhdGEpICsgeUxlbmd0aCwgMTI4LCB5TGVuZ3Ro
IC8gMik7CisKKyAgICAgICAgICAgIHN0YXR1cyA9IENWUGl4ZWxCdWZmZXJVbmxvY2tCYXNlQWRk
cmVzcyhwaXhlbEJ1ZmZlciwgMCk7CisgICAgICAgICAgICBBU1NFUlQoIXN0YXR1cyk7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIG1fYmxhY2tGcmFtZS5nZXQoKTsKKyAgICB9CisgICAgYXV0
byBidWZmZXIgPSBmcmFtZS52aWRlb19mcmFtZV9idWZmZXIoKTsKKyAgICBBU1NFUlQoYnVmZmVy
LT50eXBlKCkgPT0gd2VicnRjOjpWaWRlb0ZyYW1lQnVmZmVyOjpUeXBlOjprTmF0aXZlKTsKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8d2VicnRjOjpDb3JlVmlkZW9GcmFtZUJ1ZmZlciY+KCpidWZm
ZXIpLnBpeGVsX2J1ZmZlcigpOworfQorCit2b2lkIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJj
ZUNvY29hOjpPbkZyYW1lKGNvbnN0IHdlYnJ0Yzo6VmlkZW9GcmFtZSYgZnJhbWUpCit7CisgICAg
aWYgKCFpc1Byb2R1Y2luZ0RhdGEoKSkKKyAgICAgICAgcmV0dXJuOworCisjaWYgIVJFTEVBU0Vf
TE9HX0RJU0FCTEVECisgICAgaWYgKCEoKyttX251bWJlck9mRnJhbWVzICUgMzApKQorICAgICAg
ICBSRUxFQVNFX0xPRyhNZWRpYVN0cmVhbSwgIlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUNv
Y29hOjpPbkZyYW1lICV6dSBmcmFtZSIsIG1fbnVtYmVyT2ZGcmFtZXMpOworI2VuZGlmCisKKyAg
ICBhdXRvIHBpeGVsQnVmZmVyID0gcGl4ZWxCdWZmZXJGcm9tVmlkZW9GcmFtZShmcmFtZSk7CisK
KyAgICAvLyBGSVhNRTogQ29udmVydCB0aW1pbmcgaW5mb3JtYXRpb24gZnJvbSBWaWRlb0ZyYW1l
IHRvIENNU2FtcGxlVGltaW5nSW5mby4KKyAgICAvLyBGb3IgdGhlIG1vbWVudCwgd2Ugd2lsbCBw
cmV0ZW5kIHRoYXQgZnJhbWVzIHNob3VsZCBiZSByZW5kZXJlZCBhc2FwLgorICAgIENNU2FtcGxl
VGltaW5nSW5mbyB0aW1pbmdJbmZvOworICAgIHRpbWluZ0luZm8ucHJlc2VudGF0aW9uVGltZVN0
YW1wID0ga0NNVGltZUludmFsaWQ7CisgICAgdGltaW5nSW5mby5kZWNvZGVUaW1lU3RhbXAgPSBr
Q01UaW1lSW52YWxpZDsKKyAgICB0aW1pbmdJbmZvLmR1cmF0aW9uID0ga0NNVGltZUludmFsaWQ7
CisKKyAgICBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25SZWYgZm9ybWF0RGVzY3JpcHRpb247Cisg
ICAgT1NTdGF0dXMgb3N0YXR1cyA9IENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbkNyZWF0ZUZvcklt
YWdlQnVmZmVyKGtDRkFsbG9jYXRvckRlZmF1bHQsIChDVkltYWdlQnVmZmVyUmVmKXBpeGVsQnVm
ZmVyLCAmZm9ybWF0RGVzY3JpcHRpb24pOworICAgIGlmIChvc3RhdHVzICE9IG5vRXJyKSB7Cisg
ICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGluaXRpYWxpemUgQ01WaWRlb0Zvcm1hdERlc2Ny
aXB0aW9uOiAlZCIsIHN0YXRpY19jYXN0PGludD4ob3N0YXR1cykpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgQ01TYW1wbGVCdWZmZXJSZWYgc2FtcGxlQnVmZmVyOworICAgIG9zdGF0
dXMgPSBDTVNhbXBsZUJ1ZmZlckNyZWF0ZVJlYWR5V2l0aEltYWdlQnVmZmVyKGtDRkFsbG9jYXRv
ckRlZmF1bHQsIChDVkltYWdlQnVmZmVyUmVmKXBpeGVsQnVmZmVyLCBmb3JtYXREZXNjcmlwdGlv
biwgJnRpbWluZ0luZm8sICZzYW1wbGVCdWZmZXIpOworICAgIGlmIChvc3RhdHVzICE9IG5vRXJy
KSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSB0aGUgc2FtcGxlIGJ1ZmZl
cjogJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KG9zdGF0dXMpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBDRlJlbGVhc2UoZm9ybWF0RGVzY3JpcHRpb24pOworCisgICAgYXV0byBzYW1wbGUg
PSBhZG9wdENGKHNhbXBsZUJ1ZmZlcik7CisKKyAgICBDRkFycmF5UmVmIGF0dGFjaG1lbnRzQXJy
YXkgPSBDTVNhbXBsZUJ1ZmZlckdldFNhbXBsZUF0dGFjaG1lbnRzQXJyYXkoc2FtcGxlQnVmZmVy
LCB0cnVlKTsKKyAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCBDRkFycmF5R2V0Q291bnQoYXR0
YWNobWVudHNBcnJheSk7ICsraSkgeworICAgICAgICBDRk11dGFibGVEaWN0aW9uYXJ5UmVmIGF0
dGFjaG1lbnRzID0gKENGTXV0YWJsZURpY3Rpb25hcnlSZWYpQ0ZBcnJheUdldFZhbHVlQXRJbmRl
eChhdHRhY2htZW50c0FycmF5LCBpKTsKKyAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUoYXR0
YWNobWVudHMsIGtDTVNhbXBsZUF0dGFjaG1lbnRLZXlfRGlzcGxheUltbWVkaWF0ZWx5LCBrQ0ZC
b29sZWFuVHJ1ZSk7CisgICAgfQorCisgICAgdW5zaWduZWQgd2lkdGggPSBmcmFtZS53aWR0aCgp
OworICAgIHVuc2lnbmVkIGhlaWdodCA9IGZyYW1lLmhlaWdodCgpOworCisgICAgTWVkaWFTYW1w
bGU6OlZpZGVvUm90YXRpb24gcm90YXRpb247CisgICAgc3dpdGNoIChmcmFtZS5yb3RhdGlvbigp
KSB7CisgICAgY2FzZSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzA6CisgICAgICAgIHJvdGF0aW9u
ID0gTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246Ok5vbmU7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8xODA6CisgICAgICAgIHJvdGF0aW9uID0gTWVk
aWFTYW1wbGU6OlZpZGVvUm90YXRpb246OlVwc2lkZURvd247CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugd2VicnRjOjprVmlkZW9Sb3RhdGlvbl85MDoKKyAgICAgICAgcm90YXRpb24gPSBNZWRp
YVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6UmlnaHQ7CisgICAgICAgIHN0ZDo6c3dhcCh3aWR0aCwg
aGVpZ2h0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9u
XzI3MDoKKyAgICAgICAgcm90YXRpb24gPSBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6TGVm
dDsKKyAgICAgICAgc3RkOjpzd2FwKHdpZHRoLCBoZWlnaHQpOworICAgICAgICBicmVhazsKKyAg
ICB9CisKKyAgICBSZWZQdHI8UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlQ29jb2E+IHByb3Rl
Y3RlZFRoaXModGhpcyk7CisgICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IG1h
a2VSZWYoKnRoaXMpLCBzYW1wbGUgPSBXVEZNb3ZlKHNhbXBsZSksIHdpZHRoLCBoZWlnaHQsIHJv
dGF0aW9uXSB7CisgICAgICAgIHByb3RlY3RlZFRoaXMtPnByb2Nlc3NOZXdTYW1wbGUoc2FtcGxl
LmdldCgpLCB3aWR0aCwgaGVpZ2h0LCByb3RhdGlvbik7CisgICAgfSk7Cit9CisKK3ZvaWQgUmVh
bHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlQ29jb2E6OnByb2Nlc3NOZXdTYW1wbGUoQ01TYW1wbGVC
dWZmZXJSZWYgc2FtcGxlLCB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCBNZWRpYVNh
bXBsZTo6VmlkZW9Sb3RhdGlvbiByb3RhdGlvbikKK3sKKyAgICBtX2J1ZmZlciA9IHNhbXBsZTsK
KyAgICBpZiAod2lkdGggIT0gbV9jdXJyZW50U2V0dGluZ3Mud2lkdGgoKSB8fCBoZWlnaHQgIT0g
bV9jdXJyZW50U2V0dGluZ3MuaGVpZ2h0KCkpIHsKKyAgICAgICAgbV9jdXJyZW50U2V0dGluZ3Mu
c2V0V2lkdGgod2lkdGgpOworICAgICAgICBtX2N1cnJlbnRTZXR0aW5ncy5zZXRIZWlnaHQoaGVp
Z2h0KTsKKyAgICAgICAgc2V0dGluZ3NEaWRDaGFuZ2UoKTsKKyAgICB9CisKKyAgICB2aWRlb1Nh
bXBsZUF2YWlsYWJsZShNZWRpYVNhbXBsZUFWRk9iakM6OmNyZWF0ZShzYW1wbGUsIHJvdGF0aW9u
KSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShMSUJXRUJS
VEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMv
UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlQ29jb2EuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VDb2NvYS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmRlOTg5MmExYzgyN2Q0YmI5NjFjZjI2MWQ2NDc5MDZiM2EzMjQ5ZWMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVh
bHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlQ29jb2EuaApAQCAtMCwwICsxLDYyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogICAgaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoTElCV0VC
UlRDKQorCisjaW5jbHVkZSAiUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmgiCisKK3VzaW5n
IENNU2FtcGxlQnVmZmVyUmVmID0gc3RydWN0IG9wYXF1ZUNNU2FtcGxlQnVmZmVyKjsKK3VzaW5n
IENWUGl4ZWxCdWZmZXJSZWYgPSBzdHJ1Y3QgX19DVkJ1ZmZlcio7CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlQ29jb2EgZmluYWwgOiBw
dWJsaWMgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UmVmPFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUNvY29hPiBjcmVhdGUocnRjOjpzY29wZWRf
cmVmcHRyPHdlYnJ0Yzo6VmlkZW9UcmFja0ludGVyZmFjZT4mJiwgU3RyaW5nJiYpOworCitwcml2
YXRlOgorICAgIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUNvY29hKHJ0Yzo6c2NvcGVkX3Jl
ZnB0cjx3ZWJydGM6OlZpZGVvVHJhY2tJbnRlcmZhY2U+JiYsIFN0cmluZyYmKTsKKyAgICB2b2lk
IHByb2Nlc3NOZXdTYW1wbGUoQ01TYW1wbGVCdWZmZXJSZWYsIHVuc2lnbmVkLCB1bnNpZ25lZCwg
TWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb24pOworICAgIENWUGl4ZWxCdWZmZXJSZWYgcGl4ZWxC
dWZmZXJGcm9tVmlkZW9GcmFtZShjb25zdCB3ZWJydGM6OlZpZGVvRnJhbWUmKTsKKworICAgIC8v
IHJ0Yzo6VmlkZW9TaW5rSW50ZXJmYWNlCisgICAgdm9pZCBPbkZyYW1lKGNvbnN0IHdlYnJ0Yzo6
VmlkZW9GcmFtZSYpIGZpbmFsOworCisgICAgUmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiBt
X2J1ZmZlcjsKKyAgICBSZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gbV9ibGFja0ZyYW1lOwor
ICAgIGludCBtX2JsYWNrRnJhbWVXaWR0aCB7IDAgfTsKKyAgICBpbnQgbV9ibGFja0ZyYW1lSGVp
Z2h0IHsgMCB9OworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgIHNpemVfdCBtX251bWJl
ck9mRnJhbWVzIHsgMCB9OworI2VuZGlmCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBVU0UoTElCV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1Zp
ZGVvU291cmNlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Y0NTBkZjMzYzZm
NmEyNTg3ZGEzOWI1ZWM4MmNjZmNkNjBhMGU3ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9t
YWMvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI2
NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCwgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSByZXF1aXJlZCB0byBiZSBtZXQ6Ci0gKgot
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBs
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgotICogQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IKLSAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCi0gKiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5o
IgotCi0jaWYgVVNFKExJQldFQlJUQykKLQotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRl
IDx3ZWJydGMvYXBpL3ZpZGVvL2k0MjBfYnVmZmVyLmg+Ci0jaW5jbHVkZSA8d2VicnRjL2NvbW1v
bl92aWRlby9saWJ5dXYvaW5jbHVkZS93ZWJydGNfbGlieXV2Lmg+Ci0jaW5jbHVkZSA8d2VicnRj
L3Nkay9vYmpjL0ZyYW1ld29yay9DbGFzc2VzL1ZpZGVvL2NvcmV2aWRlb19mcmFtZV9idWZmZXIu
aD4KLSNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KLSNpbmNsdWRlIDx3dGYvTWFpblRocmVh
ZC5oPgotCi0jaW5jbHVkZSAiQ29yZU1lZGlhU29mdExpbmsuaCIKLSNpbmNsdWRlICJDb3JlVmlk
ZW9Tb2Z0TGluay5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVJlYWx0aW1lT3V0Z29pbmdW
aWRlb1NvdXJjZTo6UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlKFJlZjxNZWRpYVN0cmVhbVRy
YWNrUHJpdmF0ZT4mJiB2aWRlb1NvdXJjZSkKLSAgICA6IG1fdmlkZW9Tb3VyY2UoV1RGTW92ZSh2
aWRlb1NvdXJjZSkpCi0gICAgLCBtX2JsYWNrRnJhbWVUaW1lcigqdGhpcywgJlJlYWx0aW1lT3V0
Z29pbmdWaWRlb1NvdXJjZTo6c2VuZE9uZUJsYWNrRnJhbWUpCi17Ci0gICAgbV92aWRlb1NvdXJj
ZS0+YWRkT2JzZXJ2ZXIoKnRoaXMpOwotICAgIGluaXRpYWxpemVGcm9tU291cmNlKCk7Ci19Ci0K
LWJvb2wgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpzZXRTb3VyY2UoUmVmPE1lZGlhU3Ry
ZWFtVHJhY2tQcml2YXRlPiYmIG5ld1NvdXJjZSkKLXsKLSAgICBpZiAoIW1faW5pdGlhbFNldHRp
bmdzKQotICAgICAgICBtX2luaXRpYWxTZXR0aW5ncyA9IG1fdmlkZW9Tb3VyY2UtPnNvdXJjZSgp
LnNldHRpbmdzKCk7Ci0KLSAgICBtX3ZpZGVvU291cmNlLT5yZW1vdmVPYnNlcnZlcigqdGhpcyk7
Ci0gICAgbV92aWRlb1NvdXJjZSA9IFdURk1vdmUobmV3U291cmNlKTsKLSAgICBtX3ZpZGVvU291
cmNlLT5hZGRPYnNlcnZlcigqdGhpcyk7Ci0KLSAgICBpbml0aWFsaXplRnJvbVNvdXJjZSgpOwot
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNl
OjpzdG9wKCkKLXsKLSAgICBtX3ZpZGVvU291cmNlLT5yZW1vdmVPYnNlcnZlcigqdGhpcyk7Ci0g
ICAgbV9ibGFja0ZyYW1lVGltZXIuc3RvcCgpOwotICAgIG1faXNTdG9wcGVkID0gdHJ1ZTsKLX0K
LQotdm9pZCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnVwZGF0ZUJsYWNrRnJhbWVzU2Vu
ZGluZygpCi17Ci0gICAgaWYgKCFtX211dGVkICYmIG1fZW5hYmxlZCkgewotICAgICAgICBpZiAo
bV9ibGFja0ZyYW1lVGltZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgICAgIG1fYmxhY2tGcmFtZVRp
bWVyLnN0b3AoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHNlbmRCbGFja0ZyYW1l
c0lmTmVlZGVkKCk7Ci19Ci0KLXZvaWQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpzb3Vy
Y2VNdXRlZENoYW5nZWQoKQotewotICAgIEFTU0VSVChtX211dGVkICE9IG1fdmlkZW9Tb3VyY2Ut
Pm11dGVkKCkpOwotCi0gICAgbV9tdXRlZCA9IG1fdmlkZW9Tb3VyY2UtPm11dGVkKCk7Ci0KLSAg
ICB1cGRhdGVCbGFja0ZyYW1lc1NlbmRpbmcoKTsKLX0KLQotdm9pZCBSZWFsdGltZU91dGdvaW5n
VmlkZW9Tb3VyY2U6OnNvdXJjZUVuYWJsZWRDaGFuZ2VkKCkKLXsKLSAgICBBU1NFUlQobV9lbmFi
bGVkICE9IG1fdmlkZW9Tb3VyY2UtPmVuYWJsZWQoKSk7Ci0KLSAgICBtX2VuYWJsZWQgPSBtX3Zp
ZGVvU291cmNlLT5lbmFibGVkKCk7Ci0KLSAgICB1cGRhdGVCbGFja0ZyYW1lc1NlbmRpbmcoKTsK
LX0KLQotdm9pZCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OmluaXRpYWxpemVGcm9tU291
cmNlKCkKLXsKLSAgICBjb25zdCBhdXRvJiBzZXR0aW5ncyA9IG1fdmlkZW9Tb3VyY2UtPnNvdXJj
ZSgpLnNldHRpbmdzKCk7Ci0gICAgbV93aWR0aCA9IHNldHRpbmdzLndpZHRoKCk7Ci0gICAgbV9o
ZWlnaHQgPSBzZXR0aW5ncy5oZWlnaHQoKTsKLQotICAgIG1fbXV0ZWQgPSBtX3ZpZGVvU291cmNl
LT5tdXRlZCgpOwotICAgIG1fZW5hYmxlZCA9IG1fdmlkZW9Tb3VyY2UtPmVuYWJsZWQoKTsKLQot
ICAgIHVwZGF0ZUJsYWNrRnJhbWVzU2VuZGluZygpOwotfQotCi1ib29sIFJlYWx0aW1lT3V0Z29p
bmdWaWRlb1NvdXJjZTo6R2V0U3RhdHMoU3RhdHMqKQotewotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotdm9pZCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OkFkZE9yVXBkYXRlU2luayhydGM6
OlZpZGVvU2lua0ludGVyZmFjZTx3ZWJydGM6OlZpZGVvRnJhbWU+KiBzaW5rLCBjb25zdCBydGM6
OlZpZGVvU2lua1dhbnRzJiBzaW5rV2FudHMpCi17Ci0gICAgQVNTRVJUKCFzaW5rV2FudHMuYmxh
Y2tfZnJhbWVzKTsKLQotICAgIGlmIChzaW5rV2FudHMucm90YXRpb25fYXBwbGllZCkKLSAgICAg
ICAgbV9zaG91bGRBcHBseVJvdGF0aW9uID0gdHJ1ZTsKLQotICAgIGlmICghbV9zaW5rcy5jb250
YWlucyhzaW5rKSkKLSAgICAgICAgbV9zaW5rcy5hcHBlbmQoc2luayk7Ci0KLSAgICBjYWxsT25N
YWluVGhyZWFkKFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldKCkgewotICAgICAgICBw
cm90ZWN0ZWRUaGlzLT5zZW5kQmxhY2tGcmFtZXNJZk5lZWRlZCgpOwotICAgIH0pOwotfQotCi12
b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6UmVtb3ZlU2luayhydGM6OlZpZGVvU2lu
a0ludGVyZmFjZTx3ZWJydGM6OlZpZGVvRnJhbWU+KiBzaW5rKQotewotICAgIG1fc2lua3MucmVt
b3ZlRmlyc3Qoc2luayk7Ci0KLSAgICBpZiAobV9zaW5rcy5zaXplKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGNhbGxPbk1haW5UaHJlYWQoW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlz
KV0oKSB7Ci0gICAgICAgIGlmIChwcm90ZWN0ZWRUaGlzLT5tX2JsYWNrRnJhbWVUaW1lci5pc0Fj
dGl2ZSgpKQotICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+bV9ibGFja0ZyYW1lVGltZXIuc3Rv
cCgpOwotICAgIH0pOwotfQotCi12b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6c2Vu
ZEJsYWNrRnJhbWVzSWZOZWVkZWQoKQotewotICAgIGlmIChtX2JsYWNrRnJhbWVUaW1lci5pc0Fj
dGl2ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fc2lua3Muc2l6ZSgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fbXV0ZWQgJiYgbV9lbmFibGVkKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAoIW1fd2lkdGggfHwgIW1faGVpZ2h0KQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAoIW1fYmxhY2tGcmFtZSkgewotICAgICAgICBhdXRvIHdpZHRoID0gbV93aWR0
aDsKLSAgICAgICAgYXV0byBoZWlnaHQgPSBtX2hlaWdodDsKLSAgICAgICAgaWYgKG1fc2hvdWxk
QXBwbHlSb3RhdGlvbiAmJiAobV9jdXJyZW50Um90YXRpb24gPT0gd2VicnRjOjprVmlkZW9Sb3Rh
dGlvbl8wIHx8IG1fY3VycmVudFJvdGF0aW9uID09IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fOTAp
KQotICAgICAgICAgICAgc3RkOjpzd2FwKHdpZHRoLCBoZWlnaHQpOwotICAgICAgICBhdXRvIGZy
YW1lID0gbV9idWZmZXJQb29sLkNyZWF0ZUJ1ZmZlcih3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAg
QVNTRVJUKGZyYW1lKTsKLSAgICAgICAgaWYgKCFmcmFtZSkgewotICAgICAgICAgICAgUkVMRUFT
RV9MT0coV2ViUlRDLCAiUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpzZW5kQmxhY2tGcmFt
ZXNJZk5lZWRlZCB1bmFibGUgdG8gc2VuZCBibGFjayBmcmFtZXMiKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICB3ZWJydGM6Okk0MjBCdWZmZXI6OlNldEJsYWNrKGZy
YW1lLmdldCgpKTsKLSAgICAgICAgbV9ibGFja0ZyYW1lID0gV1RGTW92ZShmcmFtZSk7Ci0gICAg
fQotICAgIHNlbmRPbmVCbGFja0ZyYW1lKCk7Ci0gICAgbV9ibGFja0ZyYW1lVGltZXIuc3RhcnRS
ZXBlYXRpbmcoMV9zKTsKLX0KLQotdm9pZCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnNl
bmRPbmVCbGFja0ZyYW1lKCkKLXsKLSAgICBSRUxFQVNFX0xPRyhNZWRpYVN0cmVhbSwgIlJlYWx0
aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6c2VuZE9uZUJsYWNrRnJhbWUiKTsKLSAgICBzZW5kRnJh
bWUocnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9GcmFtZUJ1ZmZlcj4obV9ibGFja0Zy
YW1lKSk7Ci19Ci0KLXZvaWQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpzZW5kRnJhbWUo
cnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9GcmFtZUJ1ZmZlcj4mJiBidWZmZXIpCi17
Ci0gICAgaW50NjRfdCB0aW1lc3RhbXBNaWNyb1NlY29uZHMgPSBtb25vdG9uaWNhbGx5SW5jcmVh
c2luZ1RpbWVNUygpICogMTAwMDsKLSAgICB3ZWJydGM6OlZpZGVvRnJhbWUgZnJhbWUoYnVmZmVy
LCBtX3Nob3VsZEFwcGx5Um90YXRpb24gPyB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzAgOiBtX2N1
cnJlbnRSb3RhdGlvbiwgdGltZXN0YW1wTWljcm9TZWNvbmRzKTsKLSAgICBmb3IgKGF1dG8qIHNp
bmsgOiBtX3NpbmtzKQotICAgICAgICBzaW5rLT5PbkZyYW1lKGZyYW1lKTsKLX0KLQotdm9pZCBS
ZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnZpZGVvU2FtcGxlQXZhaWxhYmxlKE1lZGlhU2Ft
cGxlJiBzYW1wbGUpCi17Ci0gICAgaWYgKCFtX3NpbmtzLnNpemUoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKG1fbXV0ZWQgfHwgIW1fZW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwotCi0j
aWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECi0gICAgaWYgKCEoKyttX251bWJlck9mRnJhbWVzICUg
MzApKQotICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYVN0cmVhbSwgIlJlYWx0aW1lT3V0Z29pbmdW
aWRlb1NvdXJjZTo6c2VuZEZyYW1lICV6dSBmcmFtZSIsIG1fbnVtYmVyT2ZGcmFtZXMpOwotI2Vu
ZGlmCi0KLSAgICBzd2l0Y2ggKHNhbXBsZS52aWRlb1JvdGF0aW9uKCkpIHsKLSAgICBjYXNlIE1l
ZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpOb25lOgotICAgICAgICBtX2N1cnJlbnRSb3RhdGlv
biA9IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBN
ZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6VXBzaWRlRG93bjoKLSAgICAgICAgbV9jdXJyZW50
Um90YXRpb24gPSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzE4MDsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6UmlnaHQ6Ci0gICAgICAgIG1fY3Vy
cmVudFJvdGF0aW9uID0gd2VicnRjOjprVmlkZW9Sb3RhdGlvbl85MDsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6TGVmdDoKLSAgICAgICAgbV9j
dXJyZW50Um90YXRpb24gPSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzI3MDsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotCi0gICAgQVNTRVJUKHNhbXBsZS5wbGF0Zm9ybVNhbXBsZSgpLnR5cGUgPT0g
UGxhdGZvcm1TYW1wbGU6OkNNU2FtcGxlQnVmZmVyVHlwZSk7Ci0gICAgYXV0byBwaXhlbEJ1ZmZl
ciA9IHN0YXRpY19jYXN0PENWUGl4ZWxCdWZmZXJSZWY+KENNU2FtcGxlQnVmZmVyR2V0SW1hZ2VC
dWZmZXIoc2FtcGxlLnBsYXRmb3JtU2FtcGxlKCkuc2FtcGxlLmNtU2FtcGxlQnVmZmVyKSk7Ci0g
ICAgYXV0byBwaXhlbEZvcm1hdFR5cGUgPSBDVlBpeGVsQnVmZmVyR2V0UGl4ZWxGb3JtYXRUeXBl
KHBpeGVsQnVmZmVyKTsKLQotICAgIGlmIChwaXhlbEZvcm1hdFR5cGUgPT0ga0NWUGl4ZWxGb3Jt
YXRUeXBlXzQyMFlwQ2JDcjhQbGFuYXIgfHwgcGl4ZWxGb3JtYXRUeXBlID09IGtDVlBpeGVsRm9y
bWF0VHlwZV80MjBZcENiQ3I4QmlQbGFuYXJGdWxsUmFuZ2UpIHsKLSAgICAgICAgcnRjOjpzY29w
ZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9GcmFtZUJ1ZmZlcj4gYnVmZmVyID0gbmV3IHJ0Yzo6UmVm
Q291bnRlZE9iamVjdDx3ZWJydGM6OkNvcmVWaWRlb0ZyYW1lQnVmZmVyPihwaXhlbEJ1ZmZlcik7
Ci0gICAgICAgIGlmIChtX3Nob3VsZEFwcGx5Um90YXRpb24gJiYgbV9jdXJyZW50Um90YXRpb24g
IT0gd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8wKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogV2Ug
c2hvdWxkIG1ha2UgQVZWaWRlb0NhcHR1cmVTb3VyY2UgaGFuZGxlIHRoZSByb3RhdGlvbiB3aGVu
ZXZlciBwb3NzaWJsZS4KLSAgICAgICAgICAgIC8vIFRoaXMgaW1wbGVtZW50YXRpb24gaXMgaW5l
ZmZpY2llbnQsIHdlIHNob3VsZCByb3RhdGUgb24gdGhlIENNU2FtcGxlQnVmZmVyIGRpcmVjdGx5
IGluc3RlYWQgb2YgZG9pbmcgdGhpcyBkb3VibGUgYWxsb2NhdGlvbi4KLSAgICAgICAgICAgIGF1
dG8gcm90YXRlZEJ1ZmZlciA9IGJ1ZmZlci0+VG9JNDIwKCk7Ci0gICAgICAgICAgICBBU1NFUlQo
cm90YXRlZEJ1ZmZlcik7Ci0gICAgICAgICAgICBidWZmZXIgPSB3ZWJydGM6Okk0MjBCdWZmZXI6
OlJvdGF0ZSgqcm90YXRlZEJ1ZmZlciwgbV9jdXJyZW50Um90YXRpb24pOwotICAgICAgICB9Ci0g
ICAgICAgIHNlbmRGcmFtZShXVEZNb3ZlKGJ1ZmZlcikpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgQ1ZQaXhlbEJ1ZmZlckxvY2tCYXNlQWRkcmVzcyhwaXhlbEJ1ZmZlciwgMCk7Ci0g
ICAgYXV0byogc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oQ1ZQaXhlbEJ1ZmZl
ckdldEJhc2VBZGRyZXNzT2ZQbGFuZShwaXhlbEJ1ZmZlciwgMCkpOwotCi0gICAgQVNTRVJUKG1f
d2lkdGgpOwotICAgIEFTU0VSVChtX2hlaWdodCk7Ci0KLSAgICBhdXRvIG5ld0J1ZmZlciA9IG1f
YnVmZmVyUG9vbC5DcmVhdGVCdWZmZXIobV93aWR0aCwgbV9oZWlnaHQpOwotICAgIEFTU0VSVChu
ZXdCdWZmZXIpOwotICAgIGlmICghbmV3QnVmZmVyKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HKFdl
YlJUQywgIlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6dmlkZW9TYW1wbGVBdmFpbGFibGUg
dW5hYmxlIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3IgY29udmVyc2lvbiB0byBZVVYiKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAocGl4ZWxGb3JtYXRUeXBlID09IGtDVlBpeGVsRm9y
bWF0VHlwZV8zMkJHUkEpCi0gICAgICAgIHdlYnJ0Yzo6Q29udmVydFRvSTQyMCh3ZWJydGM6OlZp
ZGVvVHlwZTo6a0FSR0IsIHNvdXJjZSwgMCwgMCwgbV93aWR0aCwgbV9oZWlnaHQsIDAsIHdlYnJ0
Yzo6a1ZpZGVvUm90YXRpb25fMCwgbmV3QnVmZmVyKTsKLSAgICBlbHNlIHsKLSAgICAgICAgQVNT
RVJUKHBpeGVsRm9ybWF0VHlwZSA9PSBrQ1ZQaXhlbEZvcm1hdFR5cGVfMzJBUkdCKTsKLSAgICAg
ICAgd2VicnRjOjpDb252ZXJ0VG9JNDIwKHdlYnJ0Yzo6VmlkZW9UeXBlOjprQkdSQSwgc291cmNl
LCAwLCAwLCBtX3dpZHRoLCBtX2hlaWdodCwgMCwgd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8wLCBu
ZXdCdWZmZXIpOwotICAgIH0KLSAgICBDVlBpeGVsQnVmZmVyVW5sb2NrQmFzZUFkZHJlc3MocGl4
ZWxCdWZmZXIsIDApOwotICAgIGlmIChtX3Nob3VsZEFwcGx5Um90YXRpb24gJiYgbV9jdXJyZW50
Um90YXRpb24gIT0gd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8wKQotICAgICAgICBuZXdCdWZmZXIg
PSB3ZWJydGM6Okk0MjBCdWZmZXI6OlJvdGF0ZSgqbmV3QnVmZmVyLCBtX2N1cnJlbnRSb3RhdGlv
bik7Ci0gICAgc2VuZEZyYW1lKFdURk1vdmUobmV3QnVmZmVyKSk7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShMSUJXRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1ZpZGVv
U291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRp
bWVPdXRnb2luZ1ZpZGVvU291cmNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3
ZTc4YjUxNjVkMDU2OTVmZTFhNDU4NDA4NTliYjExYzEyZTQ4ODYuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vbWFjL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5oCisrKyAvZGV2L251bGwK
QEAgLTEsMTE2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkLCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIHJlcXVpcmVkIHRvIGJlIG1l
dDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1l
IG9mIEFwcGxlIEluYy4gbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAg
ICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAot
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCi0gKiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
Ci0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUgotICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKLSAqIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIFVTRShMSUJXRUJSVEMpCi0KLSNpbmNsdWRlICJMaWJX
ZWJSVENNYWNyb3MuaCIKLSNpbmNsdWRlICJNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5oIgotI2lu
Y2x1ZGUgPFRpbWVyLmg+Ci0jaW5jbHVkZSA8d2VicnRjL2FwaS9tZWRpYXN0cmVhbWludGVyZmFj
ZS5oPgotI2luY2x1ZGUgPHdlYnJ0Yy9iYXNlL29wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d2VicnRj
L2NvbW1vbl92aWRlby9pbmNsdWRlL2k0MjBfYnVmZmVyX3Bvb2wuaD4KLSNpbmNsdWRlIDx3ZWJy
dGMvbWVkaWEvYmFzZS92aWRlb3NpbmtpbnRlcmZhY2UuaD4KLSNpbmNsdWRlIDx3dGYvT3B0aW9u
YWwuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1jbGFzcyBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UgZmluYWwgOiBw
dWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlPiwg
cHVibGljIHdlYnJ0Yzo6VmlkZW9UcmFja1NvdXJjZUludGVyZmFjZSwgcHJpdmF0ZSBNZWRpYVN0
cmVhbVRyYWNrUHJpdmF0ZTo6T2JzZXJ2ZXIgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8UmVh
bHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlPiBjcmVhdGUoUmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2
YXRlPiYmIHZpZGVvU291cmNlKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFJlYWx0aW1lT3V0Z29p
bmdWaWRlb1NvdXJjZShXVEZNb3ZlKHZpZGVvU291cmNlKSkpOyB9Ci0gICAgflJlYWx0aW1lT3V0
Z29pbmdWaWRlb1NvdXJjZSgpIHsgc3RvcCgpOyB9Ci0KLSAgICB2b2lkIHN0b3AoKTsKLSAgICBi
b29sIHNldFNvdXJjZShSZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYpOwotICAgIE1lZGlh
U3RyZWFtVHJhY2tQcml2YXRlJiBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3ZpZGVvU291cmNl
LmdldCgpOyB9Ci0KLSAgICBpbnQgQWRkUmVmKCkgY29uc3QgZmluYWwgeyByZWYoKTsgcmV0dXJu
IHJlZkNvdW50KCk7IH0KLSAgICBpbnQgUmVsZWFzZSgpIGNvbnN0IGZpbmFsIHsgZGVyZWYoKTsg
cmV0dXJuIHJlZkNvdW50KCk7IH0KLQotICAgIHZvaWQgc2V0QXBwbHlSb3RhdGlvbihib29sIHNo
b3VsZEFwcGx5Um90YXRpb24pIHsgbV9zaG91bGRBcHBseVJvdGF0aW9uID0gc2hvdWxkQXBwbHlS
b3RhdGlvbjsgfQotCi1wcml2YXRlOgotICAgIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZShS
ZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYpOwotCi0gICAgdm9pZCBzZW5kRnJhbWUocnRj
OjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9GcmFtZUJ1ZmZlcj4mJik7Ci0gICAgdm9pZCBz
ZW5kQmxhY2tGcmFtZXNJZk5lZWRlZCgpOwotICAgIHZvaWQgc2VuZE9uZUJsYWNrRnJhbWUoKTsK
LSAgICB2b2lkIGluaXRpYWxpemVGcm9tU291cmNlKCk7Ci0gICAgdm9pZCB1cGRhdGVCbGFja0Zy
YW1lc1NlbmRpbmcoKTsKLQotICAgIC8vIE5vdGlmaWVyIEFQSQotICAgIHZvaWQgUmVnaXN0ZXJP
YnNlcnZlcih3ZWJydGM6Ok9ic2VydmVySW50ZXJmYWNlKikgZmluYWwgeyB9Ci0gICAgdm9pZCBV
bnJlZ2lzdGVyT2JzZXJ2ZXIod2VicnRjOjpPYnNlcnZlckludGVyZmFjZSopIGZpbmFsIHsgfQot
Ci0gICAgLy8gVmlkZW9UcmFja1NvdXJjZUludGVyZmFjZSBBUEkKLSAgICBib29sIGlzX3NjcmVl
bmNhc3QoKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQotICAgIHJ0Yzo6T3B0aW9uYWw8
Ym9vbD4gbmVlZHNfZGVub2lzaW5nKCkgY29uc3QgZmluYWwgeyByZXR1cm4gcnRjOjpPcHRpb25h
bDxib29sPigpOyB9Ci0gICAgYm9vbCBHZXRTdGF0cyhTdGF0cyopIGZpbmFsOwotCi0gICAgLy8g
TWVkaWFTb3VyY2VJbnRlcmZhY2UgQVBJCi0gICAgU291cmNlU3RhdGUgc3RhdGUoKSBjb25zdCBm
aW5hbCB7IHJldHVybiBTb3VyY2VTdGF0ZSgpOyB9Ci0gICAgYm9vbCByZW1vdGUoKSBjb25zdCBm
aW5hbCB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICAvLyBydGM6OlZpZGVvU291cmNlSW50ZXJmYWNl
PHdlYnJ0Yzo6VmlkZW9GcmFtZT4gQVBJCi0gICAgdm9pZCBBZGRPclVwZGF0ZVNpbmsocnRjOjpW
aWRlb1NpbmtJbnRlcmZhY2U8d2VicnRjOjpWaWRlb0ZyYW1lPiosIGNvbnN0IHJ0Yzo6VmlkZW9T
aW5rV2FudHMmKSBmaW5hbDsKLSAgICB2b2lkIFJlbW92ZVNpbmsocnRjOjpWaWRlb1NpbmtJbnRl
cmZhY2U8d2VicnRjOjpWaWRlb0ZyYW1lPiopIGZpbmFsOwotCi0gICAgdm9pZCBzb3VyY2VNdXRl
ZENoYW5nZWQoKTsKLSAgICB2b2lkIHNvdXJjZUVuYWJsZWRDaGFuZ2VkKCk7Ci0gICAgdm9pZCB2
aWRlb1NhbXBsZUF2YWlsYWJsZShNZWRpYVNhbXBsZSYpOwotCi0gICAgLy8gTWVkaWFTdHJlYW1U
cmFja1ByaXZhdGU6Ok9ic2VydmVyIEFQSQotICAgIHZvaWQgdHJhY2tNdXRlZENoYW5nZWQoTWVk
aWFTdHJlYW1UcmFja1ByaXZhdGUmKSBmaW5hbCB7IHNvdXJjZU11dGVkQ2hhbmdlZCgpOyB9Ci0g
ICAgdm9pZCB0cmFja0VuYWJsZWRDaGFuZ2VkKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJikgZmlu
YWwgeyBzb3VyY2VFbmFibGVkQ2hhbmdlZCgpOyB9Ci0gICAgdm9pZCB0cmFja1NldHRpbmdzQ2hh
bmdlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYpIGZpbmFsIHsgaW5pdGlhbGl6ZUZyb21Tb3Vy
Y2UoKTsgfQotICAgIHZvaWQgc2FtcGxlQnVmZmVyVXBkYXRlZChNZWRpYVN0cmVhbVRyYWNrUHJp
dmF0ZSYsIE1lZGlhU2FtcGxlJiBzYW1wbGUpIGZpbmFsIHsgdmlkZW9TYW1wbGVBdmFpbGFibGUo
c2FtcGxlKTsgfQotICAgIHZvaWQgdHJhY2tFbmRlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYp
IGZpbmFsIHsgfQotCi0gICAgVmVjdG9yPHJ0Yzo6VmlkZW9TaW5rSW50ZXJmYWNlPHdlYnJ0Yzo6
VmlkZW9GcmFtZT4qPiBtX3NpbmtzOwotICAgIHdlYnJ0Yzo6STQyMEJ1ZmZlclBvb2wgbV9idWZm
ZXJQb29sOwotICAgIFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4gbV92aWRlb1NvdXJjZTsK
LSAgICBib29sIG1fZW5hYmxlZCB7IHRydWUgfTsKLSAgICBib29sIG1fbXV0ZWQgeyBmYWxzZSB9
OwotICAgIHN0ZDo6b3B0aW9uYWw8UmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzPiBtX2luaXRp
YWxTZXR0aW5nczsKLSAgICB3ZWJydGM6OlZpZGVvUm90YXRpb24gbV9jdXJyZW50Um90YXRpb24g
eyB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzAgfTsKLSAgICB1aW50MzJfdCBtX3dpZHRoIHsgMCB9
OwotICAgIHVpbnQzMl90IG1faGVpZ2h0IHsgMCB9OwotICAgIGJvb2wgbV9pc1N0b3BwZWQgeyBm
YWxzZSB9OwotICAgIFRpbWVyIG1fYmxhY2tGcmFtZVRpbWVyOwotICAgIHJ0Yzo6c2NvcGVkX3Jl
ZnB0cjx3ZWJydGM6OlZpZGVvRnJhbWVCdWZmZXI+IG1fYmxhY2tGcmFtZTsKLSAgICBib29sIG1f
c2hvdWxkQXBwbHlSb3RhdGlvbiB7IGZhbHNlIH07Ci0jaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVE
Ci0gICAgc2l6ZV90IG1fbnVtYmVyT2ZGcmFtZXMgeyAwIH07Ci0jZW5kaWYKLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShMSUJXRUJSVEMpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2lu
Z1ZpZGVvU291cmNlQ29jb2EuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vbWFjL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUNvY29hLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44
ODgxNmI4YThiMTNlOGI0MjkwNTUzY2M4OGQ4OTIwZjRiOTY0NTU1Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lT3V0Z29p
bmdWaWRlb1NvdXJjZUNvY29hLmNwcApAQCAtMCwwICsxLDEyOCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgcmVxdWlyZWQgdG8gYmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUNv
Y29hLmgiCisKKyNpZiBVU0UoTElCV0VCUlRDKQorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2lu
Y2x1ZGUgPHdlYnJ0Yy9hcGkvdmlkZW8vaTQyMF9idWZmZXIuaD4KKyNpbmNsdWRlIDx3ZWJydGMv
Y29tbW9uX3ZpZGVvL2xpYnl1di9pbmNsdWRlL3dlYnJ0Y19saWJ5dXYuaD4KKyNpbmNsdWRlIDx3
ZWJydGMvc2RrL29iamMvRnJhbWV3b3JrL0NsYXNzZXMvVmlkZW8vY29yZXZpZGVvX2ZyYW1lX2J1
ZmZlci5oPgorCisjaW5jbHVkZSAiQ29yZU1lZGlhU29mdExpbmsuaCIKKyNpbmNsdWRlICJDb3Jl
VmlkZW9Tb2Z0TGluay5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlZjxSZWFsdGltZU91
dGdvaW5nVmlkZW9Tb3VyY2U+IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6Y3JlYXRlKFJl
ZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4mJiB2aWRlb1NvdXJjZSkKK3sKKyAgICByZXR1cm4g
UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlQ29jb2E6OmNyZWF0ZShXVEZNb3ZlKHZpZGVvU291
cmNlKSk7Cit9CisKK1JlZjxSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VDb2NvYT4gUmVhbHRp
bWVPdXRnb2luZ1ZpZGVvU291cmNlQ29jb2E6OmNyZWF0ZShSZWY8TWVkaWFTdHJlYW1UcmFja1By
aXZhdGU+JiYgdmlkZW9Tb3VyY2UpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVhbHRp
bWVPdXRnb2luZ1ZpZGVvU291cmNlQ29jb2EoV1RGTW92ZSh2aWRlb1NvdXJjZSkpKTsKK30KKwor
UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlQ29jb2E6OlJlYWx0aW1lT3V0Z29pbmdWaWRlb1Nv
dXJjZUNvY29hKFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4mJiB2aWRlb1NvdXJjZSkKKyAg
ICA6IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZShXVEZNb3ZlKHZpZGVvU291cmNlKSkKK3sK
K30KKwordm9pZCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VDb2NvYTo6c2FtcGxlQnVmZmVy
VXBkYXRlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYsIE1lZGlhU2FtcGxlJiBzYW1wbGUpCit7
CisgICAgaWYgKCFtX3NpbmtzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1f
bXV0ZWQgfHwgIW1fZW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisjaWYgIVJFTEVBU0VfTE9H
X0RJU0FCTEVECisgICAgaWYgKCEoKyttX251bWJlck9mRnJhbWVzICUgMzApKQorICAgICAgICBS
RUxFQVNFX0xPRyhNZWRpYVN0cmVhbSwgIlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUNvY29h
OjpzZW5kRnJhbWUgJXp1IGZyYW1lIiwgbV9udW1iZXJPZkZyYW1lcyk7CisjZW5kaWYKKworICAg
IHN3aXRjaCAoc2FtcGxlLnZpZGVvUm90YXRpb24oKSkgeworICAgIGNhc2UgTWVkaWFTYW1wbGU6
OlZpZGVvUm90YXRpb246Ok5vbmU6CisgICAgICAgIG1fY3VycmVudFJvdGF0aW9uID0gd2VicnRj
OjprVmlkZW9Sb3RhdGlvbl8wOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE1lZGlhU2FtcGxl
OjpWaWRlb1JvdGF0aW9uOjpVcHNpZGVEb3duOgorICAgICAgICBtX2N1cnJlbnRSb3RhdGlvbiA9
IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMTgwOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE1l
ZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpSaWdodDoKKyAgICAgICAgbV9jdXJyZW50Um90YXRp
b24gPSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzkwOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpMZWZ0OgorICAgICAgICBtX2N1cnJlbnRSb3Rh
dGlvbiA9IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMjcwOworICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICBBU1NFUlQoc2FtcGxlLnBsYXRmb3JtU2FtcGxlKCkudHlwZSA9PSBQbGF0Zm9ybVNh
bXBsZTo6Q01TYW1wbGVCdWZmZXJUeXBlKTsKKyAgICBhdXRvIHBpeGVsQnVmZmVyID0gc3RhdGlj
X2Nhc3Q8Q1ZQaXhlbEJ1ZmZlclJlZj4oQ01TYW1wbGVCdWZmZXJHZXRJbWFnZUJ1ZmZlcihzYW1w
bGUucGxhdGZvcm1TYW1wbGUoKS5zYW1wbGUuY21TYW1wbGVCdWZmZXIpKTsKKyAgICBhdXRvIHBp
eGVsRm9ybWF0VHlwZSA9IENWUGl4ZWxCdWZmZXJHZXRQaXhlbEZvcm1hdFR5cGUocGl4ZWxCdWZm
ZXIpOworCisgICAgaWYgKHBpeGVsRm9ybWF0VHlwZSA9PSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIw
WXBDYkNyOFBsYW5hciB8fCBwaXhlbEZvcm1hdFR5cGUgPT0ga0NWUGl4ZWxGb3JtYXRUeXBlXzQy
MFlwQ2JDcjhCaVBsYW5hckZ1bGxSYW5nZSkgeworICAgICAgICBydGM6OnNjb3BlZF9yZWZwdHI8
d2VicnRjOjpWaWRlb0ZyYW1lQnVmZmVyPiBidWZmZXIgPSBuZXcgcnRjOjpSZWZDb3VudGVkT2Jq
ZWN0PHdlYnJ0Yzo6Q29yZVZpZGVvRnJhbWVCdWZmZXI+KHBpeGVsQnVmZmVyKTsKKyAgICAgICAg
aWYgKG1fc2hvdWxkQXBwbHlSb3RhdGlvbiAmJiBtX2N1cnJlbnRSb3RhdGlvbiAhPSB3ZWJydGM6
OmtWaWRlb1JvdGF0aW9uXzApIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbWFr
ZSBBVlZpZGVvQ2FwdHVyZVNvdXJjZSBoYW5kbGUgdGhlIHJvdGF0aW9uIHdoZW5ldmVyIHBvc3Np
YmxlLgorICAgICAgICAgICAgLy8gVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBpbmVmZmljaWVudCwg
d2Ugc2hvdWxkIHJvdGF0ZSBvbiB0aGUgQ01TYW1wbGVCdWZmZXIgZGlyZWN0bHkgaW5zdGVhZCBv
ZiBkb2luZyB0aGlzIGRvdWJsZSBhbGxvY2F0aW9uLgorICAgICAgICAgICAgYXV0byByb3RhdGVk
QnVmZmVyID0gYnVmZmVyLT5Ub0k0MjAoKTsKKyAgICAgICAgICAgIEFTU0VSVChyb3RhdGVkQnVm
ZmVyKTsKKyAgICAgICAgICAgIGJ1ZmZlciA9IHdlYnJ0Yzo6STQyMEJ1ZmZlcjo6Um90YXRlKCpy
b3RhdGVkQnVmZmVyLCBtX2N1cnJlbnRSb3RhdGlvbik7CisgICAgICAgIH0KKyAgICAgICAgc2Vu
ZEZyYW1lKFdURk1vdmUoYnVmZmVyKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBD
VlBpeGVsQnVmZmVyTG9ja0Jhc2VBZGRyZXNzKHBpeGVsQnVmZmVyLCAwKTsKKyAgICBhdXRvKiBz
b3VyY2UgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihDVlBpeGVsQnVmZmVyR2V0QmFzZUFk
ZHJlc3NPZlBsYW5lKHBpeGVsQnVmZmVyLCAwKSk7CisKKyAgICBBU1NFUlQobV93aWR0aCk7Cisg
ICAgQVNTRVJUKG1faGVpZ2h0KTsKKworICAgIGF1dG8gbmV3QnVmZmVyID0gbV9idWZmZXJQb29s
LkNyZWF0ZUJ1ZmZlcihtX3dpZHRoLCBtX2hlaWdodCk7CisgICAgQVNTRVJUKG5ld0J1ZmZlcik7
CisgICAgaWYgKCFuZXdCdWZmZXIpIHsKKyAgICAgICAgUkVMRUFTRV9MT0coV2ViUlRDLCAiUmVh
bHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlQ29jb2E6OnZpZGVvU2FtcGxlQXZhaWxhYmxlIHVuYWJs
ZSB0byBhbGxvY2F0ZSBidWZmZXIgZm9yIGNvbnZlcnNpb24gdG8gWVVWIik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgaWYgKHBpeGVsRm9ybWF0VHlwZSA9PSBrQ1ZQaXhlbEZvcm1hdFR5
cGVfMzJCR1JBKQorICAgICAgICB3ZWJydGM6OkNvbnZlcnRUb0k0MjAod2VicnRjOjpWaWRlb1R5
cGU6OmtBUkdCLCBzb3VyY2UsIDAsIDAsIG1fd2lkdGgsIG1faGVpZ2h0LCAwLCB3ZWJydGM6OmtW
aWRlb1JvdGF0aW9uXzAsIG5ld0J1ZmZlcik7CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVChw
aXhlbEZvcm1hdFR5cGUgPT0ga0NWUGl4ZWxGb3JtYXRUeXBlXzMyQVJHQik7CisgICAgICAgIHdl
YnJ0Yzo6Q29udmVydFRvSTQyMCh3ZWJydGM6OlZpZGVvVHlwZTo6a0JHUkEsIHNvdXJjZSwgMCwg
MCwgbV93aWR0aCwgbV9oZWlnaHQsIDAsIHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMCwgbmV3QnVm
ZmVyKTsKKyAgICB9CisgICAgQ1ZQaXhlbEJ1ZmZlclVubG9ja0Jhc2VBZGRyZXNzKHBpeGVsQnVm
ZmVyLCAwKTsKKyAgICBpZiAobV9zaG91bGRBcHBseVJvdGF0aW9uICYmIG1fY3VycmVudFJvdGF0
aW9uICE9IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMCkKKyAgICAgICAgbmV3QnVmZmVyID0gd2Vi
cnRjOjpJNDIwQnVmZmVyOjpSb3RhdGUoKm5ld0J1ZmZlciwgbV9jdXJyZW50Um90YXRpb24pOwor
ICAgIHNlbmRGcmFtZShXVEZNb3ZlKG5ld0J1ZmZlcikpOworfQorCisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShMSUJXRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291
cmNlQ29jb2EuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFs
dGltZU91dGdvaW5nVmlkZW9Tb3VyY2VDb2NvYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc3YmVmNDYxNjYwZjI0
M2ZjNGUxMjIyM2VjNTkwZTU1ODk1Zjg0MzgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNl
Q29jb2EuaApAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCwg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSByZXF1aXJlZCB0
byBiZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgor
ICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IFVTRShMSUJXRUJSVEMpCisKKyNpbmNsdWRlICJSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2Uu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSZWFsdGltZU91dGdvaW5nVmlkZW9T
b3VyY2VDb2NvYSBmaW5hbCA6IHB1YmxpYyBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2Ugewor
cHVibGljOgorICAgIHN0YXRpYyBSZWY8UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlQ29jb2E+
IGNyZWF0ZShSZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYpOworCitwcml2YXRlOgorICAg
IGV4cGxpY2l0IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUNvY29hKFJlZjxNZWRpYVN0cmVh
bVRyYWNrUHJpdmF0ZT4mJik7CisKKyAgICAvLyBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6T2Jz
ZXJ2ZXIgQVBJCisgICAgdm9pZCBzYW1wbGVCdWZmZXJVcGRhdGVkKE1lZGlhU3RyZWFtVHJhY2tQ
cml2YXRlJiwgTWVkaWFTYW1wbGUmKSBmaW5hbDsKKworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxF
RAorICAgIHNpemVfdCBtX251bWJlck9mRnJhbWVzIHsgMCB9OworI2VuZGlmCit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoTElCV0VCUlRDKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>323636</attachid>
            <date>2017-10-12 22:18:08 -0700</date>
            <delta_ts>2017-10-16 07:44:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177869-20171013071806.patch</filename>
            <type>text/plain</type>
            <size>76459</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIyOTA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjkzODIyMzA3YzA4MTkz
ODNhYjVjNDliNDQxNTFlNWFkODFkNWFmMy4uYzNmYTZiYmU5OWYzM2FlNTFmYjVhNWJjMmM3YmQ2
M2RlNGI5YzYzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDE3LTEwLTEyICBBbGVq
YW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisgICAgICAgIE1ha2UgUmVhbHRp
bWVJbmNvbWluZ1ZpZGVvU291cmNlcyBhbmQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlcyBw
b3J0IGFnbm9zdGljCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzc4NjkKKworICAgICAgICBSZXZpZXdlZCBieSBZb3Vlbm4gRmFibGV0LgorCisgICAg
ICAgIFJlZmFjdG9yIHRoZSBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UgYW5kIFJlYWx0aW1l
T3V0Z29pbmdWaWRlb1NvdXJjZSBjbGFzc2VzLAorICAgICAgICBtb3ZlIHRoZSBjb2NvYSBzcGVj
aWZpYyBjb2RlIHRvIGEgZGlmZmVyZW50IGNsYXNzLiBUaGlzIHdheSB3ZSBjYW4gdXNlIHRoZW0g
ZnJvbQorICAgICAgICBvdGhlciBwb3J0cy4KKworICAgICAgICBObyBuZXcgZnVuY3Rpb25hbGl0
eSwganVzdCBhIHJlZmFjdG9yLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAg
ICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3Jt
L21lZGlhc3RyZWFtL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5jcHA6IE1vdmVkIGZyb20g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lSW5jb21pbmdW
aWRlb1NvdXJjZS5oLiBKdXN0IHRoZSBwb3J0IGFnbm9zdGljIHBhcnRzLgorICAgICAgICAqIHBs
YXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5oOiBNb3ZlZCBm
cm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUluY29t
aW5nVmlkZW9Tb3VyY2UuaC4gREl0dG8KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9S
ZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuY3BwOiBNb3ZlZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuY3Bw
LiBEaXR0bworICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lT3V0Z29pbmdW
aWRlb1NvdXJjZS5oOiBNb3ZlZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL21hYy9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuaC4gRGl0dG8KKyAgICAgICAgKiBw
bGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTWFjLmNw
cDogQWRkZWQsIGl0IGFkZHMgdGhlIENvY29hIHNwZWNpZmljIHBhcnRzIGZyb20gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJj
ZS5jcHAuCisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6OmNy
ZWF0ZSk6IE1vdmVkIHRoaXMgZnVuY3Rpb24gZnJvbSB0aGUgYmFzZSBjbGFzcywgaXQgYWxsb3dz
IGF2b2lkaW5nIHRoZSBpbmNsdWRlLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21h
Yy9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VDb2NvYS5oOiBBZGRlZCwgY29jb2EgZGVwZW5k
ZW50IGNvZGUgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVh
bHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmguCisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91
dGdvaW5nVmlkZW9Tb3VyY2U6OmNyZWF0ZSk6IE1vdmVkIHRoaXMgZnVudGlvbiBmcm9tIHRoZSBi
YXNlIGNsYXNzLCBub3cgd2UgY2FuIHVzZSB0aGUgQ29jb2EgY3JlYXRlIHdpdGhvdXQgaW5jbHVk
aW5nIGl0IGluIHRoZSBiYXNlIGNsYXNzLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFt
L21hYy9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VDb2NvYS5jcHA6IEFkZGVkLCBjb2NvYSBk
ZXBlbmRlbnQgY29kZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRp
bWVPdXRnb2luZ1ZpZGVvU291cmNlQ29jb2EuaDogQWRkZWQsIGNvY29hIGRlcGVuZGVudCBjb2Rl
LgorCiAyMDE3LTEwLTA1ICBGdWppaSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNvbnkuY29t
PgogCiAgICAgICAgIFtXaW5DYWlyb10gRml4IGJ1aWxkIGFmdGVyIEJ1ZyAxNjc5NTYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01h
a2VMaXN0cy50eHQKaW5kZXggN2YyMmU1MTZmOTdhMjk3ZGQ1NDhlNzVjZWUwODc3YTFjNTYyNWYx
YS4uYTJjMmVhOWYwMDM4ZGQ3ZTQ1OGNjMDMwZWIwYWUxMmNjYzM0OWY5YyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VM
aXN0cy50eHQKQEAgLTI1NDgsOSArMjU0OCwxMSBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAg
cGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZVN1cHBvcnRlZENvbnN0cmFp
bnRzLmNwcAogICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZURlc2NyaXB0
b3IuY3BwCiAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vUlRDU2Vzc2lvbkRlc2NyaXB0aW9uRGVz
Y3JpcHRvci5jcHAKKyAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZUluY29taW5nVmlk
ZW9Tb3VyY2UuY3BwCiAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJj
ZS5jcHAKICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVy
LmNwcAogICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5n
cy5jcHAKKyAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3Vy
Y2UuY3BwCiAKICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvTGliV2ViUlRDUHJv
dmlkZXIuY3BwCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCA2Zjg2ODhiYzNkOWQ2ZTQxZTgyZGU2NjY4YjJiOWZjNWJiMDhkMzdj
Li4zODk2OTBmM2RkMzZhNjk0NmM2MWZjMzI1ZDk0ZjZhOWMzMTAzODA1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yNzU2LDcg
KzI3NTYsOSBAQAogCQk1Q0Q5RjU2NzFBQTBGNzQyMDBEQTQ1RkYgLyogREZBQnl0ZWNvZGVDb21w
aWxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUMz
OTMwNUYxQUEwRjZBOTAwMjlDODE2IC8qIERGQUJ5dGVjb2RlQ29tcGlsZXIuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1Q0Q5RjU2ODFBQTBGNzQ2
MDBEQTQ1RkYgLyogREZBQnl0ZWNvZGVJbnRlcnByZXRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUMzOTMwNjExQUEwRjZBOTAwMjlDODE2IC8qIERG
QUJ5dGVjb2RlSW50ZXJwcmV0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk1Q0REODMzRDFFNDMyNEQ5MDA2MjFFOTIgLyogUmVhbHRpbWVPdXRn
b2luZ1ZpZGVvU291cmNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDVDREQ4MzNCMUU0MzI0QkIwMDYyMUU5MiAvKiBSZWFsdGltZU91dGdvaW5nVmlk
ZW9Tb3VyY2UuY3BwICovOyB9OworCQk1Q0REODMzRDFFNDMyNEQ5MDA2MjFCODMgLyogUmVhbHRp
bWVPdXRnb2luZ1ZpZGVvU291cmNlQ29jb2EuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNUNERDgzM0IxRTQzMjRCQjAwNjIxQjgzIC8qIFJlYWx0aW1l
T3V0Z29pbmdWaWRlb1NvdXJjZUNvY29hLmNwcCAqLzsgfTsKIAkJNUNERDgzM0UxRTQzMjREQzAw
NjIxRTkyIC8qIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0REODMzOTFFNDMyNEJCMDA2MjFFOTIg
LyogUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmNwcCAqLzsgfTsKKwkJNUNERDgzM0UxRTQz
MjREQzAwNjIxRTgzIC8qIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUNvY29hLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDREQ4MzM5MUU0MzI0
QkIwMDYyMUU4MyAvKiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VDb2NvYS5jcHAgKi87IH07
CiAJCTVDREQ4MzY0MUU0MzI1QTAwMDYyMUU5MiAvKiBMaWJXZWJSVENEYXRhQ2hhbm5lbEhhbmRs
ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNE
RDgzM0YxRTQzMjUzRDAwNjIxRTkyIC8qIExpYldlYlJUQ0RhdGFDaGFubmVsSGFuZGxlci5jcHAg
Ki87IH07CiAJCTVDREZBNkM4MUFBNEYyREEwMEVBODc0NiAvKiBDb250ZW50RXh0ZW5zaW9uQWN0
aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNE
RkE2QzcxQUE0RjJEQTAwRUE4NzQ2IC8qIENvbnRlbnRFeHRlbnNpb25BY3Rpb25zLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNUNFNUQ5QUIxREI4
OUEwMzAwQ0U3QThEIC8qIEpTVGV4dERlY29kZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNFNUQ5QTcxREI4OTlGQzAwQ0U3QThEIC8qIEpTVGV4
dERlY29kZXIuY3BwICovOyB9OwpAQCAtMTA2OTEsOCArMTA2OTMsMTIgQEAKIAkJNUNCQzhEQUIx
QUFBMzAyMjAwRTFDODAzIC8qIE1lZGlhQWNjZXNzaWJpbGl0eVNvZnRMaW5rLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhQWNjZXNzaWJpbGl0eVNvZnRMaW5rLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDREQ4MzM5MUU0MzI0QkIwMDYyMUU5MiAvKiBS
ZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNUNERDgzM0ExRTQzMjRCQjAwNjIxRTkyIC8qIFJlYWx0aW1lSW5j
b21pbmdWaWRlb1NvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWFs
dGltZUluY29taW5nVmlkZW9Tb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NUNERDgzMzkxRTQzMjRCQjAwNjIxRTgzIC8qIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUNv
Y29hLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlYWx0aW1lSW5j
b21pbmdWaWRlb1NvdXJjZUNvY29hLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NUNERDgzM0ExRTQzMjRCQjAwNjIxRTgzIC8qIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUNv
Y29hLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlYWx0aW1lSW5jb21pbmdW
aWRlb1NvdXJjZUNvY29hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDREQ4MzNC
MUU0MzI0QkIwMDYyMUU5MiAvKiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291
cmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNERDgzM0MxRTQzMjRCQjAw
NjIxRTkyIC8qIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNERDgzM0IxRTQzMjRCQjAwNjIxQjgzIC8qIFJlYWx0aW1l
T3V0Z29pbmdWaWRlb1NvdXJjZUNvY29hLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUNvY29hLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNERDgzM0MxRTQzMjRCQjAwNjIxQjgzIC8qIFJlYWx0aW1l
T3V0Z29pbmdWaWRlb1NvdXJjZUNvY29hLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUNvY29hLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTVDREQ4MzNGMUU0MzI1M0QwMDYyMUU5MiAvKiBMaWJXZWJSVENEYXRhQ2hh
bm5lbEhhbmRsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTGli
V2ViUlRDRGF0YUNoYW5uZWxIYW5kbGVyLmNwcDsgcGF0aCA9IGxpYndlYnJ0Yy9MaWJXZWJSVENE
YXRhQ2hhbm5lbEhhbmRsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Q0RE
ODM0MDFFNDMyNTNEMDA2MjFFOTIgLyogTGliV2ViUlRDRGF0YUNoYW5uZWxIYW5kbGVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IExpYldlYlJUQ0RhdGFDaGFubmVsSGFuZGxl
ci5oOyBwYXRoID0gbGlid2VicnRjL0xpYldlYlJUQ0RhdGFDaGFubmVsSGFuZGxlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Q0RGQTZDNzFBQTRGMkRBMDBFQTg3NDYgLyogQ29u
dGVudEV4dGVuc2lvbkFjdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Q29udGVudEV4dGVuc2lvbkFjdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTE2NDk3LDYgKzE2NTAzLDggQEAKIAkJCQkwN0ZGREU2NjE4MUFFRDQyMDA3MkQ0MDkgLyogTWVk
aWFTdHJlYW1UcmFja1ByaXZhdGUuY3BwICovLAogCQkJCTA3RkZERTY3MTgxQUVENDIwMDcyRDQw
OSAvKiBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5oICovLAogCQkJCTVFQkI4OTM4MUM3N0JEQTQw
MEM2NUQ0MSAvKiBQZWVyTWVkaWFEZXNjcmlwdGlvbi5oICovLAorCQkJCTVDREQ4MzM5MUU0MzI0
QkIwMDYyMUU5MiAvKiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuY3BwICovLAorCQkJCTVD
REQ4MzNBMUU0MzI0QkIwMDYyMUU5MiAvKiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuaCAq
LywKIAkJCQk0QTRGNjU2QjFBQTk5N0YxMDBFMzhDREQgLyogUmVhbHRpbWVNZWRpYVNvdXJjZS5j
cHAgKi8sCiAJCQkJNEE0RjY1NkMxQUE5OTdGMTAwRTM4Q0REIC8qIFJlYWx0aW1lTWVkaWFTb3Vy
Y2UuaCAqLywKIAkJCQk0QTRGNjU2RDFBQTk5N0YxMDBFMzhDREQgLyogUmVhbHRpbWVNZWRpYVNv
dXJjZUNhcGFiaWxpdGllcy5oICovLApAQCAtMTY1MDYsNiArMTY1MTQsOCBAQAogCQkJCTRBNEY2
NTZGMUFBOTk3RjEwMEUzOENERCAvKiBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MuaCAqLywK
IAkJCQkyRUM0MURFMjFDMDQxMEEzMDBEMjk0RkUgLyogUmVhbHRpbWVNZWRpYVNvdXJjZVN1cHBv
cnRlZENvbnN0cmFpbnRzLmNwcCAqLywKIAkJCQkwN0MxQzBFNDFCRkI2MEVEMDBCRDIyNTYgLyog
UmVhbHRpbWVNZWRpYVNvdXJjZVN1cHBvcnRlZENvbnN0cmFpbnRzLmggKi8sCisJCQkJNUNERDgz
M0IxRTQzMjRCQjAwNjIxRTkyIC8qIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5jcHAgKi8s
CisJCQkJNUNERDgzM0MxRTQzMjRCQjAwNjIxRTkyIC8qIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1Nv
dXJjZS5oICovLAogCQkJCTMxMzU5MTBDMUU3RERDQjYwMEYzMDYzMCAvKiBSVENCdW5kbGVQb2xp
Y3kuaCAqLywKIAkJCQkwNzIyMUJBMjE3Q0YwQUQ0MDA4NDhFNTEgLyogUlRDRGF0YUNoYW5uZWxI
YW5kbGVyLmggKi8sCiAJCQkJMDcyMjFCQTMxN0NGMEFENDAwODQ4RTUxIC8qIFJUQ0RhdGFDaGFu
bmVsSGFuZGxlckNsaWVudC5oICovLApAQCAtMTY1NTYsMTQgKzE2NTY2LDE0IEBACiAJCQkJMDdF
RTc2RUUxQkVBNjE5ODAwRjg5MTMzIC8qIE1vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjLm1tICov
LAogCQkJCTQxMTAzQUFBMUUzOTc5MEEwMDc2OUYwMyAvKiBSZWFsdGltZUluY29taW5nQXVkaW9T
b3VyY2UuY3BwICovLAogCQkJCTQxMTAzQUE5MUUzOTc5MEEwMDc2OUYwMyAvKiBSZWFsdGltZUlu
Y29taW5nQXVkaW9Tb3VyY2UuaCAqLywKLQkJCQk1Q0REODMzOTFFNDMyNEJCMDA2MjFFOTIgLyog
UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmNwcCAqLywKLQkJCQk1Q0REODMzQTFFNDMyNEJC
MDA2MjFFOTIgLyogUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmggKi8sCisJCQkJNUNERDgz
MzkxRTQzMjRCQjAwNjIxRTgzIC8qIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUNvY29hLmNw
cCAqLywKKwkJCQk1Q0REODMzQTFFNDMyNEJCMDA2MjFFODMgLyogUmVhbHRpbWVJbmNvbWluZ1Zp
ZGVvU291cmNlQ29jb2EuaCAqLywKIAkJCQk0QTBGRkFBMzFBQUY1RUY2MDA2MjgwM0IgLyogUmVh
bHRpbWVNZWRpYVNvdXJjZUNlbnRlck1hYy5jcHAgKi8sCiAJCQkJNEEwRkZBQTQxQUFGNUVGNjAw
NjI4MDNCIC8qIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJNYWMuaCAqLywKIAkJCQk0MTEwM0FB
NzFFMzk3OTBBMDA3NjlGMDMgLyogUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlLmNwcCAqLywK
IAkJCQk0MTEwM0FBODFFMzk3OTBBMDA3NjlGMDMgLyogUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291
cmNlLmggKi8sCi0JCQkJNUNERDgzM0IxRTQzMjRCQjAwNjIxRTkyIC8qIFJlYWx0aW1lT3V0Z29p
bmdWaWRlb1NvdXJjZS5jcHAgKi8sCi0JCQkJNUNERDgzM0MxRTQzMjRCQjAwNjIxRTkyIC8qIFJl
YWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5oICovLAorCQkJCTVDREQ4MzNCMUU0MzI0QkIwMDYy
MUI4MyAvKiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VDb2NvYS5jcHAgKi8sCisJCQkJNUNE
RDgzM0MxRTQzMjRCQjAwNjIxQjgzIC8qIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUNvY29h
LmggKi8sCiAJCQkJMDdENjM3M0UxQkIwQjExMzAwMjU2Q0U5IC8qIFdlYkF1ZGlvU291cmNlUHJv
dmlkZXJBVkZPYmpDLmggKi8sCiAJCQkJMDdENjM3M0YxQkIwQjExMzAwMjU2Q0U5IC8qIFdlYkF1
ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDLm1tICovLAogCQkJKTsKQEAgLTMzNTgzLDYgKzMzNTkz
LDcgQEAKIAkJCQlGRDMxNjAzQjEyQjAyNjc2MDBDMUEzNTkgLyogUmVhbHRpbWVBbmFseXNlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk0MTEwM0FBRTFFMzk3OTEwMDA3NjlGMDMgLyogUmVhbHRp
bWVJbmNvbWluZ0F1ZGlvU291cmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDREQ4MzNFMUU0
MzI0REMwMDYyMUU5MiAvKiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJNUNERDgzM0UxRTQzMjREQzAwNjIxRTgzIC8qIFJlYWx0aW1lSW5jb21pbmdW
aWRlb1NvdXJjZUNvY29hLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTRBNEY2NTcwMUFBOTk3RjEw
MEUzOENERCAvKiBSZWFsdGltZU1lZGlhU291cmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTRB
MEZGQUExMUFBRjVFQTIwMDYyODAzQiAvKiBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTRBMEZGQUE1MUFBRjVFRjYwMDYyODAzQiAvKiBSZWFsdGltZU1l
ZGlhU291cmNlQ2VudGVyTWFjLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMzM1OTAsNiArMzM2MDEs
NyBAQAogCQkJCTJFQzQxREU0MUMwNDEwQTMwMEQyOTRGRSAvKiBSZWFsdGltZU1lZGlhU291cmNl
U3VwcG9ydGVkQ29uc3RyYWludHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDExMDNBQUIxRTM5
NzkxMDAwNzY5RjAzIC8qIFJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk1Q0REODMzRDFFNDMyNEQ5MDA2MjFFOTIgLyogUmVhbHRpbWVPdXRnb2luZ1Zp
ZGVvU291cmNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTVDREQ4MzNEMUU0MzI0RDkwMDYyMUI4
MyAvKiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VDb2NvYS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlGRDQ1QTk1QTE3NUQ0MTcxMDBDMjFFQzggLyogUmVjdGFuZ2xlU2hhcGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQkNBQjQxODExM0UzNTZFODAwRDhBQUYzIC8qIFJlZ2lvbi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBNTc4RjQ0MDFERTBCNjM0MDAzREZDNkEgLyogUmVqZWN0ZWRQcm9t
aXNlVHJhY2tlci5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZUluY29taW5nVmlkZW9T
b3VyY2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI1OWI0NmJiZjQ1ZDhlNmMxNDY4NDA0OWFjYWFkYzdmYjBi
YjdhNGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuY3BwCkBAIC0wLDAgKzEsODQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisg
KiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZWFsdGltZUluY29taW5nVmlkZW9T
b3VyY2UuaCIKKworI2lmIFVTRShMSUJXRUJSVEMpCisKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlOjpSZWFs
dGltZUluY29taW5nVmlkZW9Tb3VyY2UocnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9U
cmFja0ludGVyZmFjZT4mJiB2aWRlb1RyYWNrLCBTdHJpbmcmJiB2aWRlb1RyYWNrSWQpCisgICAg
OiBSZWFsdGltZU1lZGlhU291cmNlKFdURk1vdmUodmlkZW9UcmFja0lkKSwgUmVhbHRpbWVNZWRp
YVNvdXJjZTo6VHlwZTo6VmlkZW8sIFN0cmluZygpKQorICAgICwgbV92aWRlb1RyYWNrKFdURk1v
dmUodmlkZW9UcmFjaykpCit7CisgICAgbV9jdXJyZW50U2V0dGluZ3Muc2V0V2lkdGgoNjQwKTsK
KyAgICBtX2N1cnJlbnRTZXR0aW5ncy5zZXRIZWlnaHQoNDgwKTsKKyAgICBub3RpZnlNdXRlZENo
YW5nZSghbV92aWRlb1RyYWNrKTsKK30KKwordm9pZCBSZWFsdGltZUluY29taW5nVmlkZW9Tb3Vy
Y2U6OnN0YXJ0UHJvZHVjaW5nRGF0YSgpCit7CisgICAgaWYgKG1fdmlkZW9UcmFjaykKKyAgICAg
ICAgbV92aWRlb1RyYWNrLT5BZGRPclVwZGF0ZVNpbmsodGhpcywgcnRjOjpWaWRlb1NpbmtXYW50
cygpKTsKK30KKwordm9pZCBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6OnNldFNvdXJjZVRy
YWNrKHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvVHJhY2tJbnRlcmZhY2U+JiYgdHJh
Y2spCit7CisgICAgQVNTRVJUKCFtX3ZpZGVvVHJhY2spOworICAgIEFTU0VSVCh0cmFjayk7CisK
KyAgICBtX3ZpZGVvVHJhY2sgPSBXVEZNb3ZlKHRyYWNrKTsKKyAgICBub3RpZnlNdXRlZENoYW5n
ZSghbV92aWRlb1RyYWNrKTsKKyAgICBpZiAoaXNQcm9kdWNpbmdEYXRhKCkpCisgICAgICAgIG1f
dmlkZW9UcmFjay0+QWRkT3JVcGRhdGVTaW5rKHRoaXMsIHJ0Yzo6VmlkZW9TaW5rV2FudHMoKSk7
Cit9CisKK3ZvaWQgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlOjpzdG9wUHJvZHVjaW5nRGF0
YSgpCit7CisgICAgaWYgKG1fdmlkZW9UcmFjaykKKyAgICAgICAgbV92aWRlb1RyYWNrLT5SZW1v
dmVTaW5rKHRoaXMpOworfQorCitjb25zdCBSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVz
JiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6OmNhcGFiaWxpdGllcygpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXM6OmVtcHR5Q2FwYWJpbGl0
aWVzKCk7Cit9CisKK2NvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyYgUmVhbHRpbWVJ
bmNvbWluZ1ZpZGVvU291cmNlOjpzZXR0aW5ncygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY3Vy
cmVudFNldHRpbmdzOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBV
U0UoTElCV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5hNWJmNTAyZjNlMjVlYWIwY2Q2YTkzZWYyYjRmMDNhNGUwZmEyZDE2Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVJbmNvbWlu
Z1ZpZGVvU291cmNlLmgKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAq
IDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29u
dHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBV
U0UoTElCV0VCUlRDKQorCisjaW5jbHVkZSAiTGliV2ViUlRDTWFjcm9zLmgiCisjaW5jbHVkZSAi
UmVhbHRpbWVNZWRpYVNvdXJjZS5oIgorI2luY2x1ZGUgPHdlYnJ0Yy9hcGkvbWVkaWFzdHJlYW1p
bnRlcmZhY2UuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgQ2FwdHVyZURldmljZTsKKworY2xhc3MgUmVhbHRpbWVJbmNvbWluZ1Zp
ZGVvU291cmNlIDogcHVibGljIFJlYWx0aW1lTWVkaWFTb3VyY2UsIHByaXZhdGUgcnRjOjpWaWRl
b1NpbmtJbnRlcmZhY2U8d2VicnRjOjpWaWRlb0ZyYW1lPiB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFJlZjxSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U+IGNyZWF0ZShydGM6OnNjb3BlZF9yZWZw
dHI8d2VicnRjOjpWaWRlb1RyYWNrSW50ZXJmYWNlPiYmLCBTdHJpbmcmJik7CisgICAgflJlYWx0
aW1lSW5jb21pbmdWaWRlb1NvdXJjZSgpIHsgc3RvcFByb2R1Y2luZ0RhdGEoKTsgfQorCisgICAg
dm9pZCBzZXRTb3VyY2VUcmFjayhydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb1RyYWNr
SW50ZXJmYWNlPiYmKTsKKworcHJvdGVjdGVkOgorICAgIFJlYWx0aW1lSW5jb21pbmdWaWRlb1Nv
dXJjZShydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb1RyYWNrSW50ZXJmYWNlPiYmLCBT
dHJpbmcmJik7CisKKyAgICBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MgbV9jdXJyZW50U2V0
dGluZ3M7CisKK3ByaXZhdGU6CisgICAgLy8gUmVhbHRpbWVNZWRpYVNvdXJjZSBBUEkKKyAgICB2
b2lkIHN0YXJ0UHJvZHVjaW5nRGF0YSgpIGZpbmFsOworICAgIHZvaWQgc3RvcFByb2R1Y2luZ0Rh
dGEoKSAgZmluYWw7CisKKyAgICBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVz
JiBjYXBhYmlsaXRpZXMoKSBjb25zdCBmaW5hbDsKKyAgICBjb25zdCBSZWFsdGltZU1lZGlhU291
cmNlU2V0dGluZ3MmIHNldHRpbmdzKCkgY29uc3QgZmluYWw7CisKKyAgICBib29sIGFwcGx5U2l6
ZShjb25zdCBJbnRTaXplJikgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgcnRjOjpzY29w
ZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9UcmFja0ludGVyZmFjZT4gbV92aWRlb1RyYWNrOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKExJQldFQlJUQykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lT3V0
Z29pbmdWaWRlb1NvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM1OWRjMTE0YTU1
ZWY0OTM0MDkwNDNhNmZmZDYzMTIxZTFkYTJkYjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2Uu
Y3BwCkBAIC0wLDAgKzEsMTg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCwgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSByZXF1aXJlZCB0byBi
ZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUg
bmFtZSBvZiBBcHBsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisg
KiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlYWx0aW1lT3V0Z29pbmdW
aWRlb1NvdXJjZS5oIgorCisjaWYgVVNFKExJQldFQlJUQykKKworI2luY2x1ZGUgIkxvZ2dpbmcu
aCIKKyNpbmNsdWRlIDx3ZWJydGMvYXBpL3ZpZGVvL2k0MjBfYnVmZmVyLmg+CisjaW5jbHVkZSA8
d2VicnRjL2NvbW1vbl92aWRlby9saWJ5dXYvaW5jbHVkZS93ZWJydGNfbGlieXV2Lmg+CisjaW5j
bHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OlJlYWx0
aW1lT3V0Z29pbmdWaWRlb1NvdXJjZShSZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYgdmlk
ZW9Tb3VyY2UpCisgICAgOiBtX3ZpZGVvU291cmNlKFdURk1vdmUodmlkZW9Tb3VyY2UpKQorICAg
ICwgbV9ibGFja0ZyYW1lVGltZXIoKnRoaXMsICZSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6
OnNlbmRPbmVCbGFja0ZyYW1lKQoreworICAgIG1fdmlkZW9Tb3VyY2UtPmFkZE9ic2VydmVyKCp0
aGlzKTsKKyAgICBpbml0aWFsaXplRnJvbVNvdXJjZSgpOworfQorCitib29sIFJlYWx0aW1lT3V0
Z29pbmdWaWRlb1NvdXJjZTo6c2V0U291cmNlKFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4m
JiBuZXdTb3VyY2UpCit7CisgICAgaWYgKCFtX2luaXRpYWxTZXR0aW5ncykKKyAgICAgICAgbV9p
bml0aWFsU2V0dGluZ3MgPSBtX3ZpZGVvU291cmNlLT5zb3VyY2UoKS5zZXR0aW5ncygpOworCisg
ICAgbV92aWRlb1NvdXJjZS0+cmVtb3ZlT2JzZXJ2ZXIoKnRoaXMpOworICAgIG1fdmlkZW9Tb3Vy
Y2UgPSBXVEZNb3ZlKG5ld1NvdXJjZSk7CisgICAgbV92aWRlb1NvdXJjZS0+YWRkT2JzZXJ2ZXIo
KnRoaXMpOworCisgICAgaW5pdGlhbGl6ZUZyb21Tb3VyY2UoKTsKKworICAgIHJldHVybiB0cnVl
OworfQorCit2b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6c3RvcCgpCit7CisgICAg
bV92aWRlb1NvdXJjZS0+cmVtb3ZlT2JzZXJ2ZXIoKnRoaXMpOworICAgIG1fYmxhY2tGcmFtZVRp
bWVyLnN0b3AoKTsKKyAgICBtX2lzU3RvcHBlZCA9IHRydWU7Cit9CisKK3ZvaWQgUmVhbHRpbWVP
dXRnb2luZ1ZpZGVvU291cmNlOjp1cGRhdGVCbGFja0ZyYW1lc1NlbmRpbmcoKQoreworICAgIGlm
ICghbV9tdXRlZCAmJiBtX2VuYWJsZWQpIHsKKyAgICAgICAgaWYgKG1fYmxhY2tGcmFtZVRpbWVy
LmlzQWN0aXZlKCkpCisgICAgICAgICAgICBtX2JsYWNrRnJhbWVUaW1lci5zdG9wKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzZW5kQmxhY2tGcmFtZXNJZk5lZWRlZCgpOworfQor
Cit2b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6c291cmNlTXV0ZWRDaGFuZ2VkKCkK
K3sKKyAgICBBU1NFUlQobV9tdXRlZCAhPSBtX3ZpZGVvU291cmNlLT5tdXRlZCgpKTsKKworICAg
IG1fbXV0ZWQgPSBtX3ZpZGVvU291cmNlLT5tdXRlZCgpOworCisgICAgdXBkYXRlQmxhY2tGcmFt
ZXNTZW5kaW5nKCk7Cit9CisKK3ZvaWQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpzb3Vy
Y2VFbmFibGVkQ2hhbmdlZCgpCit7CisgICAgQVNTRVJUKG1fZW5hYmxlZCAhPSBtX3ZpZGVvU291
cmNlLT5lbmFibGVkKCkpOworCisgICAgbV9lbmFibGVkID0gbV92aWRlb1NvdXJjZS0+ZW5hYmxl
ZCgpOworCisgICAgdXBkYXRlQmxhY2tGcmFtZXNTZW5kaW5nKCk7Cit9CisKK3ZvaWQgUmVhbHRp
bWVPdXRnb2luZ1ZpZGVvU291cmNlOjppbml0aWFsaXplRnJvbVNvdXJjZSgpCit7CisgICAgY29u
c3QgYXV0byYgc2V0dGluZ3MgPSBtX3ZpZGVvU291cmNlLT5zb3VyY2UoKS5zZXR0aW5ncygpOwor
ICAgIG1fd2lkdGggPSBzZXR0aW5ncy53aWR0aCgpOworICAgIG1faGVpZ2h0ID0gc2V0dGluZ3Mu
aGVpZ2h0KCk7CisKKyAgICBtX211dGVkID0gbV92aWRlb1NvdXJjZS0+bXV0ZWQoKTsKKyAgICBt
X2VuYWJsZWQgPSBtX3ZpZGVvU291cmNlLT5lbmFibGVkKCk7CisKKyAgICB1cGRhdGVCbGFja0Zy
YW1lc1NlbmRpbmcoKTsKK30KKwordm9pZCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OkFk
ZE9yVXBkYXRlU2luayhydGM6OlZpZGVvU2lua0ludGVyZmFjZTx3ZWJydGM6OlZpZGVvRnJhbWU+
KiBzaW5rLCBjb25zdCBydGM6OlZpZGVvU2lua1dhbnRzJiBzaW5rV2FudHMpCit7CisgICAgQVNT
RVJUKCFzaW5rV2FudHMuYmxhY2tfZnJhbWVzKTsKKworICAgIGlmIChzaW5rV2FudHMucm90YXRp
b25fYXBwbGllZCkKKyAgICAgICAgbV9zaG91bGRBcHBseVJvdGF0aW9uID0gdHJ1ZTsKKworICAg
IGlmICghbV9zaW5rcy5jb250YWlucyhzaW5rKSkKKyAgICAgICAgbV9zaW5rcy5hcHBlbmQoc2lu
ayk7CisKKyAgICBjYWxsT25NYWluVGhyZWFkKFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhp
cyldKCkgeworICAgICAgICBwcm90ZWN0ZWRUaGlzLT5zZW5kQmxhY2tGcmFtZXNJZk5lZWRlZCgp
OworICAgIH0pOworfQorCit2b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6UmVtb3Zl
U2luayhydGM6OlZpZGVvU2lua0ludGVyZmFjZTx3ZWJydGM6OlZpZGVvRnJhbWU+KiBzaW5rKQor
eworICAgIG1fc2lua3MucmVtb3ZlRmlyc3Qoc2luayk7CisKKyAgICBpZiAobV9zaW5rcy5zaXpl
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNhbGxPbk1haW5UaHJlYWQoW3Byb3RlY3RlZFRo
aXMgPSBtYWtlUmVmKCp0aGlzKV0oKSB7CisgICAgICAgIGlmIChwcm90ZWN0ZWRUaGlzLT5tX2Js
YWNrRnJhbWVUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+bV9i
bGFja0ZyYW1lVGltZXIuc3RvcCgpOworICAgIH0pOworfQorCit2b2lkIFJlYWx0aW1lT3V0Z29p
bmdWaWRlb1NvdXJjZTo6c2VuZEJsYWNrRnJhbWVzSWZOZWVkZWQoKQoreworICAgIGlmIChtX2Js
YWNrRnJhbWVUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1f
c2lua3Muc2l6ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fbXV0ZWQgJiYgbV9l
bmFibGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fd2lkdGggfHwgIW1faGVpZ2h0
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fYmxhY2tGcmFtZSkgeworICAgICAgICBh
dXRvIHdpZHRoID0gbV93aWR0aDsKKyAgICAgICAgYXV0byBoZWlnaHQgPSBtX2hlaWdodDsKKyAg
ICAgICAgaWYgKG1fc2hvdWxkQXBwbHlSb3RhdGlvbiAmJiAobV9jdXJyZW50Um90YXRpb24gPT0g
d2VicnRjOjprVmlkZW9Sb3RhdGlvbl8wIHx8IG1fY3VycmVudFJvdGF0aW9uID09IHdlYnJ0Yzo6
a1ZpZGVvUm90YXRpb25fOTApKQorICAgICAgICAgICAgc3RkOjpzd2FwKHdpZHRoLCBoZWlnaHQp
OworICAgICAgICBhdXRvIGZyYW1lID0gbV9idWZmZXJQb29sLkNyZWF0ZUJ1ZmZlcih3aWR0aCwg
aGVpZ2h0KTsKKyAgICAgICAgQVNTRVJUKGZyYW1lKTsKKyAgICAgICAgaWYgKCFmcmFtZSkgewor
ICAgICAgICAgICAgUkVMRUFTRV9MT0coV2ViUlRDLCAiUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291
cmNlOjpzZW5kQmxhY2tGcmFtZXNJZk5lZWRlZCB1bmFibGUgdG8gc2VuZCBibGFjayBmcmFtZXMi
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB3ZWJydGM6Okk0MjBC
dWZmZXI6OlNldEJsYWNrKGZyYW1lLmdldCgpKTsKKyAgICAgICAgbV9ibGFja0ZyYW1lID0gV1RG
TW92ZShmcmFtZSk7CisgICAgfQorICAgIHNlbmRPbmVCbGFja0ZyYW1lKCk7CisgICAgbV9ibGFj
a0ZyYW1lVGltZXIuc3RhcnRSZXBlYXRpbmcoMV9zKTsKK30KKwordm9pZCBSZWFsdGltZU91dGdv
aW5nVmlkZW9Tb3VyY2U6OnNlbmRPbmVCbGFja0ZyYW1lKCkKK3sKKyAgICBSRUxFQVNFX0xPRyhN
ZWRpYVN0cmVhbSwgIlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6c2VuZE9uZUJsYWNrRnJh
bWUiKTsKKyAgICBzZW5kRnJhbWUocnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9GcmFt
ZUJ1ZmZlcj4obV9ibGFja0ZyYW1lKSk7Cit9CisKK3ZvaWQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVv
U291cmNlOjpzZW5kRnJhbWUocnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9GcmFtZUJ1
ZmZlcj4mJiBidWZmZXIpCit7CisgICAgaW50NjRfdCB0aW1lc3RhbXBNaWNyb1NlY29uZHMgPSBt
b25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWVNUygpICogMTAwMDsKKyAgICB3ZWJydGM6OlZpZGVv
RnJhbWUgZnJhbWUoYnVmZmVyLCBtX3Nob3VsZEFwcGx5Um90YXRpb24gPyB3ZWJydGM6OmtWaWRl
b1JvdGF0aW9uXzAgOiBtX2N1cnJlbnRSb3RhdGlvbiwgdGltZXN0YW1wTWljcm9TZWNvbmRzKTsK
KyAgICBmb3IgKGF1dG8qIHNpbmsgOiBtX3NpbmtzKQorICAgICAgICBzaW5rLT5PbkZyYW1lKGZy
YW1lKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKExJQldF
QlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1Jl
YWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTYyNjFj
NGI3NjYwMjA5MTdjZDFlNDllMDhkZWQyNzM4ZTNlZTIzOAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1Nv
dXJjZS5oCkBAIC0wLDAgKzEsMTE2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCwg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSByZXF1aXJlZCB0
byBiZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0
aGUgbmFtZSBvZiBBcHBsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
CisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoTElCV0VCUlRDKQorCisjaW5jbHVk
ZSAiTGliV2ViUlRDTWFjcm9zLmgiCisjaW5jbHVkZSAiTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUu
aCIKKyNpbmNsdWRlIDxUaW1lci5oPgorI2luY2x1ZGUgPHdlYnJ0Yy9hcGkvbWVkaWFzdHJlYW1p
bnRlcmZhY2UuaD4KKyNpbmNsdWRlIDx3ZWJydGMvYmFzZS9vcHRpb25hbC5oPgorI2luY2x1ZGUg
PHdlYnJ0Yy9jb21tb25fdmlkZW8vaW5jbHVkZS9pNDIwX2J1ZmZlcl9wb29sLmg+CisjaW5jbHVk
ZSA8d2VicnRjL21lZGlhL2Jhc2UvdmlkZW9zaW5raW50ZXJmYWNlLmg+CisjaW5jbHVkZSA8d3Rm
L09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlIDog
cHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZT4s
IHB1YmxpYyB3ZWJydGM6OlZpZGVvVHJhY2tTb3VyY2VJbnRlcmZhY2UsIHByaXZhdGUgTWVkaWFT
dHJlYW1UcmFja1ByaXZhdGU6Ok9ic2VydmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFJl
YWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZT4gY3JlYXRlKFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJp
dmF0ZT4mJiB2aWRlb1NvdXJjZSk7CisgICAgflJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZSgp
IHsgc3RvcCgpOyB9CisKKyAgICB2b2lkIHN0b3AoKTsKKyAgICBib29sIHNldFNvdXJjZShSZWY8
TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYpOworICAgIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRl
JiBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3ZpZGVvU291cmNlLmdldCgpOyB9CisKKyAgICBp
bnQgQWRkUmVmKCkgY29uc3QgZmluYWwgeyByZWYoKTsgcmV0dXJuIHJlZkNvdW50KCk7IH0KKyAg
ICBpbnQgUmVsZWFzZSgpIGNvbnN0IGZpbmFsIHsgZGVyZWYoKTsgcmV0dXJuIHJlZkNvdW50KCk7
IH0KKworICAgIHZvaWQgc2V0QXBwbHlSb3RhdGlvbihib29sIHNob3VsZEFwcGx5Um90YXRpb24p
IHsgbV9zaG91bGRBcHBseVJvdGF0aW9uID0gc2hvdWxkQXBwbHlSb3RhdGlvbjsgfQorCitwcm90
ZWN0ZWQ6CisgICAgZXhwbGljaXQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlKFJlZjxNZWRp
YVN0cmVhbVRyYWNrUHJpdmF0ZT4mJik7CisKKyAgICB2b2lkIHNlbmRGcmFtZShydGM6OnNjb3Bl
ZF9yZWZwdHI8d2VicnRjOjpWaWRlb0ZyYW1lQnVmZmVyPiYmKTsKKworICAgIFZlY3RvcjxydGM6
OlZpZGVvU2lua0ludGVyZmFjZTx3ZWJydGM6OlZpZGVvRnJhbWU+Kj4gbV9zaW5rczsKKyAgICB3
ZWJydGM6Okk0MjBCdWZmZXJQb29sIG1fYnVmZmVyUG9vbDsKKworICAgIGJvb2wgbV9lbmFibGVk
IHsgdHJ1ZSB9OworICAgIGJvb2wgbV9tdXRlZCB7IGZhbHNlIH07CisgICAgdWludDMyX3QgbV93
aWR0aCB7IDAgfTsKKyAgICB1aW50MzJfdCBtX2hlaWdodCB7IDAgfTsKKyAgICBib29sIG1fc2hv
dWxkQXBwbHlSb3RhdGlvbiB7IGZhbHNlIH07CisgICAgd2VicnRjOjpWaWRlb1JvdGF0aW9uIG1f
Y3VycmVudFJvdGF0aW9uIHsgd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8wIH07CisKK3ByaXZhdGU6
CisgICAgdm9pZCBzZW5kQmxhY2tGcmFtZXNJZk5lZWRlZCgpOworICAgIHZvaWQgc2VuZE9uZUJs
YWNrRnJhbWUoKTsKKyAgICB2b2lkIGluaXRpYWxpemVGcm9tU291cmNlKCk7CisgICAgdm9pZCB1
cGRhdGVCbGFja0ZyYW1lc1NlbmRpbmcoKTsKKworICAgIC8vIE5vdGlmaWVyIEFQSQorICAgIHZv
aWQgUmVnaXN0ZXJPYnNlcnZlcih3ZWJydGM6Ok9ic2VydmVySW50ZXJmYWNlKikgZmluYWwgeyB9
CisgICAgdm9pZCBVbnJlZ2lzdGVyT2JzZXJ2ZXIod2VicnRjOjpPYnNlcnZlckludGVyZmFjZSop
IGZpbmFsIHsgfQorCisgICAgLy8gVmlkZW9UcmFja1NvdXJjZUludGVyZmFjZSBBUEkKKyAgICBi
b29sIGlzX3NjcmVlbmNhc3QoKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQorICAgIHJ0
Yzo6T3B0aW9uYWw8Ym9vbD4gbmVlZHNfZGVub2lzaW5nKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
cnRjOjpPcHRpb25hbDxib29sPigpOyB9CisgICAgYm9vbCBHZXRTdGF0cyhTdGF0cyopIGZpbmFs
IHsgcmV0dXJuIGZhbHNlOyB9OworCisgICAgLy8gTWVkaWFTb3VyY2VJbnRlcmZhY2UgQVBJCisg
ICAgU291cmNlU3RhdGUgc3RhdGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBTb3VyY2VTdGF0ZSgp
OyB9CisgICAgYm9vbCByZW1vdGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CisKKyAg
ICAvLyBydGM6OlZpZGVvU291cmNlSW50ZXJmYWNlPHdlYnJ0Yzo6VmlkZW9GcmFtZT4gQVBJCisg
ICAgdm9pZCBBZGRPclVwZGF0ZVNpbmsocnRjOjpWaWRlb1NpbmtJbnRlcmZhY2U8d2VicnRjOjpW
aWRlb0ZyYW1lPiosIGNvbnN0IHJ0Yzo6VmlkZW9TaW5rV2FudHMmKSBmaW5hbDsKKyAgICB2b2lk
IFJlbW92ZVNpbmsocnRjOjpWaWRlb1NpbmtJbnRlcmZhY2U8d2VicnRjOjpWaWRlb0ZyYW1lPiop
IGZpbmFsOworCisgICAgdm9pZCBzb3VyY2VNdXRlZENoYW5nZWQoKTsKKyAgICB2b2lkIHNvdXJj
ZUVuYWJsZWRDaGFuZ2VkKCk7CisKKyAgICAvLyBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6T2Jz
ZXJ2ZXIgQVBJCisgICAgdm9pZCB0cmFja011dGVkQ2hhbmdlZChNZWRpYVN0cmVhbVRyYWNrUHJp
dmF0ZSYpIGZpbmFsIHsgc291cmNlTXV0ZWRDaGFuZ2VkKCk7IH0KKyAgICB2b2lkIHRyYWNrRW5h
YmxlZENoYW5nZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmKSBmaW5hbCB7IHNvdXJjZUVuYWJs
ZWRDaGFuZ2VkKCk7IH0KKyAgICB2b2lkIHRyYWNrU2V0dGluZ3NDaGFuZ2VkKE1lZGlhU3RyZWFt
VHJhY2tQcml2YXRlJikgZmluYWwgeyBpbml0aWFsaXplRnJvbVNvdXJjZSgpOyB9CisgICAgdm9p
ZCBzYW1wbGVCdWZmZXJVcGRhdGVkKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJiwgTWVkaWFTYW1w
bGUmKSBvdmVycmlkZSB7IH0KKyAgICB2b2lkIHRyYWNrRW5kZWQoTWVkaWFTdHJlYW1UcmFja1By
aXZhdGUmKSBmaW5hbCB7IH0KKworICAgIFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4gbV92
aWRlb1NvdXJjZTsKKyAgICBzdGQ6Om9wdGlvbmFsPFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5n
cz4gbV9pbml0aWFsU2V0dGluZ3M7CisgICAgYm9vbCBtX2lzU3RvcHBlZCB7IGZhbHNlIH07Cisg
ICAgVGltZXIgbV9ibGFja0ZyYW1lVGltZXI7CisgICAgcnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0
Yzo6VmlkZW9GcmFtZUJ1ZmZlcj4gbV9ibGFja0ZyYW1lOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKExJQldFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUluY29taW5nVmlkZW9Tb3Vy
Y2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1l
SW5jb21pbmdWaWRlb1NvdXJjZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMy
NjE4ZDY5NTI3NjNmZTdkN2M0YjZiOGNlNGY5Y2RjMTgyN2EzNzEuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vbWFjL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwyMDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKLSAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3Jz
Ci0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tIHRoaXMKLSAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5oIgotCi0jaWYgVVNFKExJQldFQlJUQykKLQot
I2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJNZWRpYVNhbXBsZUFWRk9iakMuaCIKLSNp
bmNsdWRlIDx3ZWJydGMvc2RrL29iamMvRnJhbWV3b3JrL0NsYXNzZXMvVmlkZW8vY29yZXZpZGVv
X2ZyYW1lX2J1ZmZlci5oPgotCi0jaW5jbHVkZSAiQ29yZU1lZGlhU29mdExpbmsuaCIKLSNpbmNs
dWRlICJDb3JlVmlkZW9Tb2Z0TGluay5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVJlZjxS
ZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U+IFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6
Y3JlYXRlKHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvVHJhY2tJbnRlcmZhY2U+JiYg
dmlkZW9UcmFjaywgU3RyaW5nJiYgdHJhY2tJZCkKLXsKLSAgICBhdXRvIHNvdXJjZSA9IGFkb3B0
UmVmKCpuZXcgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlKFdURk1vdmUodmlkZW9UcmFjayks
IFdURk1vdmUodHJhY2tJZCkpKTsKLSAgICBzb3VyY2UtPnN0YXJ0KCk7Ci0gICAgcmV0dXJuIHNv
dXJjZTsKLX0KLQotUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlOjpSZWFsdGltZUluY29taW5n
VmlkZW9Tb3VyY2UocnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9UcmFja0ludGVyZmFj
ZT4mJiB2aWRlb1RyYWNrLCBTdHJpbmcmJiB2aWRlb1RyYWNrSWQpCi0gICAgOiBSZWFsdGltZU1l
ZGlhU291cmNlKFdURk1vdmUodmlkZW9UcmFja0lkKSwgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlw
ZTo6VmlkZW8sIFN0cmluZygpKQotICAgICwgbV92aWRlb1RyYWNrKFdURk1vdmUodmlkZW9UcmFj
aykpCi17Ci0gICAgbV9jdXJyZW50U2V0dGluZ3Muc2V0V2lkdGgoNjQwKTsKLSAgICBtX2N1cnJl
bnRTZXR0aW5ncy5zZXRIZWlnaHQoNDgwKTsKLSAgICBub3RpZnlNdXRlZENoYW5nZSghbV92aWRl
b1RyYWNrKTsKLX0KLQotdm9pZCBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6OnN0YXJ0UHJv
ZHVjaW5nRGF0YSgpCi17Ci0gICAgaWYgKG1fdmlkZW9UcmFjaykKLSAgICAgICAgbV92aWRlb1Ry
YWNrLT5BZGRPclVwZGF0ZVNpbmsodGhpcywgcnRjOjpWaWRlb1NpbmtXYW50cygpKTsKLX0KLQot
dm9pZCBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6OnNldFNvdXJjZVRyYWNrKHJ0Yzo6c2Nv
cGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvVHJhY2tJbnRlcmZhY2U+JiYgdHJhY2spCi17Ci0gICAg
QVNTRVJUKCFtX3ZpZGVvVHJhY2spOwotICAgIEFTU0VSVCh0cmFjayk7Ci0KLSAgICBtX3ZpZGVv
VHJhY2sgPSBXVEZNb3ZlKHRyYWNrKTsKLSAgICBub3RpZnlNdXRlZENoYW5nZSghbV92aWRlb1Ry
YWNrKTsKLSAgICBpZiAoaXNQcm9kdWNpbmdEYXRhKCkpCi0gICAgICAgIG1fdmlkZW9UcmFjay0+
QWRkT3JVcGRhdGVTaW5rKHRoaXMsIHJ0Yzo6VmlkZW9TaW5rV2FudHMoKSk7Ci19Ci0KLXZvaWQg
UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlOjpzdG9wUHJvZHVjaW5nRGF0YSgpCi17Ci0gICAg
aWYgKG1fdmlkZW9UcmFjaykKLSAgICAgICAgbV92aWRlb1RyYWNrLT5SZW1vdmVTaW5rKHRoaXMp
OwotfQotCi1DVlBpeGVsQnVmZmVyUmVmIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6cGl4
ZWxCdWZmZXJGcm9tVmlkZW9GcmFtZShjb25zdCB3ZWJydGM6OlZpZGVvRnJhbWUmIGZyYW1lKQot
ewotICAgIGlmIChtdXRlZCgpKSB7Ci0gICAgICAgIGlmICghbV9ibGFja0ZyYW1lIHx8IG1fYmxh
Y2tGcmFtZVdpZHRoICE9IGZyYW1lLndpZHRoKCkgfHwgbV9ibGFja0ZyYW1lSGVpZ2h0ICE9IGZy
YW1lLmhlaWdodCgpKSB7Ci0gICAgICAgICAgICBDVlBpeGVsQnVmZmVyUmVmIHBpeGVsQnVmZmVy
ID0gbnVsbHB0cjsKLSAgICAgICAgICAgIGF1dG8gc3RhdHVzID0gQ1ZQaXhlbEJ1ZmZlckNyZWF0
ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBmcmFtZS53aWR0aCgpLCBmcmFtZS5oZWlnaHQoKSwga0NW
UGl4ZWxGb3JtYXRUeXBlXzQyMFlwQ2JDcjhQbGFuYXIsIG51bGxwdHIsICZwaXhlbEJ1ZmZlcik7
Ci0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHN0YXR1cywgc3RhdHVzID09IG5vRXJyKTsKLQot
ICAgICAgICAgICAgbV9ibGFja0ZyYW1lID0gcGl4ZWxCdWZmZXI7Ci0gICAgICAgICAgICBtX2Js
YWNrRnJhbWVXaWR0aCA9IGZyYW1lLndpZHRoKCk7Ci0gICAgICAgICAgICBtX2JsYWNrRnJhbWVI
ZWlnaHQgPSBmcmFtZS5oZWlnaHQoKTsKLQotICAgICAgICAgICAgc3RhdHVzID0gQ1ZQaXhlbEJ1
ZmZlckxvY2tCYXNlQWRkcmVzcyhwaXhlbEJ1ZmZlciwgMCk7Ci0gICAgICAgICAgICBBU1NFUlQo
c3RhdHVzID09IG5vRXJyKTsKLSAgICAgICAgICAgIHZvaWQqIGRhdGEgPSBDVlBpeGVsQnVmZmVy
R2V0QmFzZUFkZHJlc3MocGl4ZWxCdWZmZXIpOwotICAgICAgICAgICAgc2l6ZV90IHlMZW5ndGgg
PSBmcmFtZS53aWR0aCgpICogZnJhbWUuaGVpZ2h0KCk7Ci0gICAgICAgICAgICBtZW1zZXQoZGF0
YSwgMCwgeUxlbmd0aCk7Ci0gICAgICAgICAgICBtZW1zZXQoc3RhdGljX2Nhc3Q8dWludDhfdCo+
KGRhdGEpICsgeUxlbmd0aCwgMTI4LCB5TGVuZ3RoIC8gMik7Ci0KLSAgICAgICAgICAgIHN0YXR1
cyA9IENWUGl4ZWxCdWZmZXJVbmxvY2tCYXNlQWRkcmVzcyhwaXhlbEJ1ZmZlciwgMCk7Ci0gICAg
ICAgICAgICBBU1NFUlQoIXN0YXR1cyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1fYmxh
Y2tGcmFtZS5nZXQoKTsKLSAgICB9Ci0gICAgYXV0byBidWZmZXIgPSBmcmFtZS52aWRlb19mcmFt
ZV9idWZmZXIoKTsKLSAgICBBU1NFUlQoYnVmZmVyLT50eXBlKCkgPT0gd2VicnRjOjpWaWRlb0Zy
YW1lQnVmZmVyOjpUeXBlOjprTmF0aXZlKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8d2VicnRj
OjpDb3JlVmlkZW9GcmFtZUJ1ZmZlciY+KCpidWZmZXIpLnBpeGVsX2J1ZmZlcigpOwotfQotCi12
b2lkIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6T25GcmFtZShjb25zdCB3ZWJydGM6OlZp
ZGVvRnJhbWUmIGZyYW1lKQotewotICAgIGlmICghaXNQcm9kdWNpbmdEYXRhKCkpCi0gICAgICAg
IHJldHVybjsKLQotI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAotICAgIGlmICghKCsrbV9udW1i
ZXJPZkZyYW1lcyAlIDMwKSkKLSAgICAgICAgUkVMRUFTRV9MT0coTWVkaWFTdHJlYW0sICJSZWFs
dGltZUluY29taW5nVmlkZW9Tb3VyY2U6Ok9uRnJhbWUgJXp1IGZyYW1lIiwgbV9udW1iZXJPZkZy
YW1lcyk7Ci0jZW5kaWYKLQotICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBwaXhlbEJ1ZmZlckZyb21W
aWRlb0ZyYW1lKGZyYW1lKTsKLQotICAgIC8vIEZJWE1FOiBDb252ZXJ0IHRpbWluZyBpbmZvcm1h
dGlvbiBmcm9tIFZpZGVvRnJhbWUgdG8gQ01TYW1wbGVUaW1pbmdJbmZvLgotICAgIC8vIEZvciB0
aGUgbW9tZW50LCB3ZSB3aWxsIHByZXRlbmQgdGhhdCBmcmFtZXMgc2hvdWxkIGJlIHJlbmRlcmVk
IGFzYXAuCi0gICAgQ01TYW1wbGVUaW1pbmdJbmZvIHRpbWluZ0luZm87Ci0gICAgdGltaW5nSW5m
by5wcmVzZW50YXRpb25UaW1lU3RhbXAgPSBrQ01UaW1lSW52YWxpZDsKLSAgICB0aW1pbmdJbmZv
LmRlY29kZVRpbWVTdGFtcCA9IGtDTVRpbWVJbnZhbGlkOwotICAgIHRpbWluZ0luZm8uZHVyYXRp
b24gPSBrQ01UaW1lSW52YWxpZDsKLQotICAgIENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvblJlZiBm
b3JtYXREZXNjcmlwdGlvbjsKLSAgICBPU1N0YXR1cyBvc3RhdHVzID0gQ01WaWRlb0Zvcm1hdERl
c2NyaXB0aW9uQ3JlYXRlRm9ySW1hZ2VCdWZmZXIoa0NGQWxsb2NhdG9yRGVmYXVsdCwgKENWSW1h
Z2VCdWZmZXJSZWYpcGl4ZWxCdWZmZXIsICZmb3JtYXREZXNjcmlwdGlvbik7Ci0gICAgaWYgKG9z
dGF0dXMgIT0gbm9FcnIpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gaW5pdGlhbGl6
ZSBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb246ICVkIiwgc3RhdGljX2Nhc3Q8aW50Pihvc3RhdHVz
KSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBDTVNhbXBsZUJ1ZmZlclJlZiBzYW1w
bGVCdWZmZXI7Ci0gICAgb3N0YXR1cyA9IENNU2FtcGxlQnVmZmVyQ3JlYXRlUmVhZHlXaXRoSW1h
Z2VCdWZmZXIoa0NGQWxsb2NhdG9yRGVmYXVsdCwgKENWSW1hZ2VCdWZmZXJSZWYpcGl4ZWxCdWZm
ZXIsIGZvcm1hdERlc2NyaXB0aW9uLCAmdGltaW5nSW5mbywgJnNhbXBsZUJ1ZmZlcik7Ci0gICAg
aWYgKG9zdGF0dXMgIT0gbm9FcnIpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3Jl
YXRlIHRoZSBzYW1wbGUgYnVmZmVyOiAlZCIsIHN0YXRpY19jYXN0PGludD4ob3N0YXR1cykpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIENGUmVsZWFzZShmb3JtYXREZXNjcmlwdGlvbik7
Ci0KLSAgICBhdXRvIHNhbXBsZSA9IGFkb3B0Q0Yoc2FtcGxlQnVmZmVyKTsKLQotICAgIENGQXJy
YXlSZWYgYXR0YWNobWVudHNBcnJheSA9IENNU2FtcGxlQnVmZmVyR2V0U2FtcGxlQXR0YWNobWVu
dHNBcnJheShzYW1wbGVCdWZmZXIsIHRydWUpOwotICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8
IENGQXJyYXlHZXRDb3VudChhdHRhY2htZW50c0FycmF5KTsgKytpKSB7Ci0gICAgICAgIENGTXV0
YWJsZURpY3Rpb25hcnlSZWYgYXR0YWNobWVudHMgPSAoQ0ZNdXRhYmxlRGljdGlvbmFyeVJlZilD
RkFycmF5R2V0VmFsdWVBdEluZGV4KGF0dGFjaG1lbnRzQXJyYXksIGkpOwotICAgICAgICBDRkRp
Y3Rpb25hcnlTZXRWYWx1ZShhdHRhY2htZW50cywga0NNU2FtcGxlQXR0YWNobWVudEtleV9EaXNw
bGF5SW1tZWRpYXRlbHksIGtDRkJvb2xlYW5UcnVlKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCB3
aWR0aCA9IGZyYW1lLndpZHRoKCk7Ci0gICAgdW5zaWduZWQgaGVpZ2h0ID0gZnJhbWUuaGVpZ2h0
KCk7Ci0KLSAgICBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbiByb3RhdGlvbjsKLSAgICBzd2l0
Y2ggKGZyYW1lLnJvdGF0aW9uKCkpIHsKLSAgICBjYXNlIHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25f
MDoKLSAgICAgICAgcm90YXRpb24gPSBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6Tm9uZTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzE4MDoKLSAg
ICAgICAgcm90YXRpb24gPSBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6VXBzaWRlRG93bjsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzkwOgotICAg
ICAgICByb3RhdGlvbiA9IE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpSaWdodDsKLSAgICAg
ICAgc3RkOjpzd2FwKHdpZHRoLCBoZWlnaHQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIHdl
YnJ0Yzo6a1ZpZGVvUm90YXRpb25fMjcwOgotICAgICAgICByb3RhdGlvbiA9IE1lZGlhU2FtcGxl
OjpWaWRlb1JvdGF0aW9uOjpMZWZ0OwotICAgICAgICBzdGQ6OnN3YXAod2lkdGgsIGhlaWdodCk7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIFJlZlB0cjxSZWFsdGltZUluY29taW5nVmlk
ZW9Tb3VyY2U+IHByb3RlY3RlZFRoaXModGhpcyk7Ci0gICAgY2FsbE9uTWFpblRocmVhZChbcHJv
dGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyksIHNhbXBsZSA9IFdURk1vdmUoc2Ft
cGxlKSwgd2lkdGgsIGhlaWdodCwgcm90YXRpb25dIHsKLSAgICAgICAgcHJvdGVjdGVkVGhpcy0+
cHJvY2Vzc05ld1NhbXBsZShzYW1wbGUuZ2V0KCksIHdpZHRoLCBoZWlnaHQsIHJvdGF0aW9uKTsK
LSAgICB9KTsKLX0KLQotdm9pZCBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6OnByb2Nlc3NO
ZXdTYW1wbGUoQ01TYW1wbGVCdWZmZXJSZWYgc2FtcGxlLCB1bnNpZ25lZCB3aWR0aCwgdW5zaWdu
ZWQgaGVpZ2h0LCBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbiByb3RhdGlvbikKLXsKLSAgICBt
X2J1ZmZlciA9IHNhbXBsZTsKLSAgICBpZiAod2lkdGggIT0gbV9jdXJyZW50U2V0dGluZ3Mud2lk
dGgoKSB8fCBoZWlnaHQgIT0gbV9jdXJyZW50U2V0dGluZ3MuaGVpZ2h0KCkpIHsKLSAgICAgICAg
bV9jdXJyZW50U2V0dGluZ3Muc2V0V2lkdGgod2lkdGgpOwotICAgICAgICBtX2N1cnJlbnRTZXR0
aW5ncy5zZXRIZWlnaHQoaGVpZ2h0KTsKLSAgICAgICAgc2V0dGluZ3NEaWRDaGFuZ2UoKTsKLSAg
ICB9Ci0KLSAgICB2aWRlb1NhbXBsZUF2YWlsYWJsZShNZWRpYVNhbXBsZUFWRk9iakM6OmNyZWF0
ZShzYW1wbGUsIHJvdGF0aW9uKSk7Ci19Ci0KLWNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBh
YmlsaXRpZXMmIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6Y2FwYWJpbGl0aWVzKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllczo6ZW1wdHlD
YXBhYmlsaXRpZXMoKTsKLX0KLQotY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzJiBS
ZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U6OnNldHRpbmdzKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbV9jdXJyZW50U2V0dGluZ3M7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmIC8vIFVTRShMSUJXRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291
cmNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlYjdjMzY0ZmUzMjMyMjIyZWFi
NGYyNWI3YjQxMDBjYzkxMDI4MDkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0
aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5oCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqICAgIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
LSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24g
bm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSAqICAgIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0g
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI3ByYWdtYSBvbmNlCi0KLSNpZiBVU0UoTElCV0VCUlRDKQotCi0jaW5jbHVkZSAiTGliV2Vi
UlRDTWFjcm9zLmgiCi0jaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZS5oIgotI2luY2x1ZGUg
PHdlYnJ0Yy9hcGkvbWVkaWFzdHJlYW1pbnRlcmZhY2UuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWlu
UHRyLmg+Ci0KLXVzaW5nIENNU2FtcGxlQnVmZmVyUmVmID0gc3RydWN0IG9wYXF1ZUNNU2FtcGxl
QnVmZmVyKjsKLXVzaW5nIENWUGl4ZWxCdWZmZXJSZWYgPSBzdHJ1Y3QgX19DVkJ1ZmZlcio7Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQ2FwdHVyZURldmljZTsKLQotY2xhc3MgUmVh
bHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlIGZpbmFsIDogcHVibGljIFJlYWx0aW1lTWVkaWFTb3Vy
Y2UsIHByaXZhdGUgcnRjOjpWaWRlb1NpbmtJbnRlcmZhY2U8d2VicnRjOjpWaWRlb0ZyYW1lPiB7
Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2U+IGNy
ZWF0ZShydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb1RyYWNrSW50ZXJmYWNlPiYmLCBT
dHJpbmcmJik7Ci0gICAgflJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZSgpIHsgc3RvcFByb2R1
Y2luZ0RhdGEoKTsgfQotCi0gICAgdm9pZCBzZXRTb3VyY2VUcmFjayhydGM6OnNjb3BlZF9yZWZw
dHI8d2VicnRjOjpWaWRlb1RyYWNrSW50ZXJmYWNlPiYmKTsKLQotcHJpdmF0ZToKLSAgICBSZWFs
dGltZUluY29taW5nVmlkZW9Tb3VyY2UocnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9U
cmFja0ludGVyZmFjZT4mJiwgU3RyaW5nJiYpOwotCi0gICAgLy8gUmVhbHRpbWVNZWRpYVNvdXJj
ZSBBUEkKLSAgICB2b2lkIHN0YXJ0UHJvZHVjaW5nRGF0YSgpIGZpbmFsOwotICAgIHZvaWQgc3Rv
cFByb2R1Y2luZ0RhdGEoKSAgZmluYWw7Ci0KLSAgICBjb25zdCBSZWFsdGltZU1lZGlhU291cmNl
Q2FwYWJpbGl0aWVzJiBjYXBhYmlsaXRpZXMoKSBjb25zdCBmaW5hbDsKLSAgICBjb25zdCBSZWFs
dGltZU1lZGlhU291cmNlU2V0dGluZ3MmIHNldHRpbmdzKCkgY29uc3QgZmluYWw7Ci0KLSAgICB2
b2lkIHByb2Nlc3NOZXdTYW1wbGUoQ01TYW1wbGVCdWZmZXJSZWYsIHVuc2lnbmVkLCB1bnNpZ25l
ZCwgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb24pOwotCi0gICAgYm9vbCBhcHBseVNpemUoY29u
c3QgSW50U2l6ZSYpIGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KLQotICAgIC8vIHJ0Yzo6VmlkZW9T
aW5rSW50ZXJmYWNlCi0gICAgdm9pZCBPbkZyYW1lKGNvbnN0IHdlYnJ0Yzo6VmlkZW9GcmFtZSYp
IGZpbmFsOwotCi0gICAgQ1ZQaXhlbEJ1ZmZlclJlZiBwaXhlbEJ1ZmZlckZyb21WaWRlb0ZyYW1l
KGNvbnN0IHdlYnJ0Yzo6VmlkZW9GcmFtZSYpOwotCi0gICAgUmVhbHRpbWVNZWRpYVNvdXJjZVNl
dHRpbmdzIG1fY3VycmVudFNldHRpbmdzOwotICAgIHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6
OlZpZGVvVHJhY2tJbnRlcmZhY2U+IG1fdmlkZW9UcmFjazsKLSAgICBSZXRhaW5QdHI8Q01TYW1w
bGVCdWZmZXJSZWY+IG1fYnVmZmVyOwotICAgIFJldGFpblB0cjxDVlBpeGVsQnVmZmVyUmVmPiBt
X2JsYWNrRnJhbWU7Ci0gICAgaW50IG1fYmxhY2tGcmFtZVdpZHRoIHsgMCB9OwotICAgIGludCBt
X2JsYWNrRnJhbWVIZWlnaHQgeyAwIH07Ci0jaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECi0gICAg
c2l6ZV90IG1fbnVtYmVyT2ZGcmFtZXMgeyAwIH07Ci0jZW5kaWYKLX07Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShMSUJXRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVJbmNvbWluZ1ZpZGVv
U291cmNlQ29jb2EuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFj
L1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUNvY29hLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNWYwZWZl
OTdkODliYTAxNmNlZmFkMzU4ZDM5MDMyNDdkMjJkN2RlCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lSW5jb21pbmdWaWRl
b1NvdXJjZUNvY29hLmNwcApAQCAtMCwwICsxLDE3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZWFsdGltZUluY29t
aW5nVmlkZW9Tb3VyY2VDb2NvYS5oIgorCisjaWYgVVNFKExJQldFQlJUQykKKworI2luY2x1ZGUg
IkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJNZWRpYVNhbXBsZUFWRk9iakMuaCIKKyNpbmNsdWRlIDx3
ZWJydGMvc2RrL29iamMvRnJhbWV3b3JrL0NsYXNzZXMvVmlkZW8vY29yZXZpZGVvX2ZyYW1lX2J1
ZmZlci5oPgorCisjaW5jbHVkZSAiQ29yZU1lZGlhU29mdExpbmsuaCIKKyNpbmNsdWRlICJDb3Jl
VmlkZW9Tb2Z0TGluay5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlZjxSZWFsdGltZUlu
Y29taW5nVmlkZW9Tb3VyY2U+IFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZTo6Y3JlYXRlKHJ0
Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvVHJhY2tJbnRlcmZhY2U+JiYgdmlkZW9UcmFj
aywgU3RyaW5nJiYgdHJhY2tJZCkKK3sKKyAgICBhdXRvIHNvdXJjZSA9IFJlYWx0aW1lSW5jb21p
bmdWaWRlb1NvdXJjZUNvY29hOjpjcmVhdGUoV1RGTW92ZSh2aWRlb1RyYWNrKSwgV1RGTW92ZSh0
cmFja0lkKSk7CisgICAgc291cmNlLT5zdGFydCgpOworICAgIHJldHVybiBXVEZNb3ZlKHNvdXJj
ZSk7Cit9CisKK1JlZjxSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VDb2NvYT4gUmVhbHRpbWVJ
bmNvbWluZ1ZpZGVvU291cmNlQ29jb2E6OmNyZWF0ZShydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRj
OjpWaWRlb1RyYWNrSW50ZXJmYWNlPiYmIHZpZGVvVHJhY2ssIFN0cmluZyYmIHRyYWNrSWQpCit7
CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlQ29j
b2EoV1RGTW92ZSh2aWRlb1RyYWNrKSwgV1RGTW92ZSh0cmFja0lkKSkpOworfQorCitSZWFsdGlt
ZUluY29taW5nVmlkZW9Tb3VyY2VDb2NvYTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlQ29j
b2EocnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9UcmFja0ludGVyZmFjZT4mJiB2aWRl
b1RyYWNrLCBTdHJpbmcmJiB2aWRlb1RyYWNrSWQpCisgICAgOiBSZWFsdGltZUluY29taW5nVmlk
ZW9Tb3VyY2UoV1RGTW92ZSh2aWRlb1RyYWNrKSwgV1RGTW92ZSh2aWRlb1RyYWNrSWQpKQorewor
fQorCitDVlBpeGVsQnVmZmVyUmVmIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUNvY29hOjpw
aXhlbEJ1ZmZlckZyb21WaWRlb0ZyYW1lKGNvbnN0IHdlYnJ0Yzo6VmlkZW9GcmFtZSYgZnJhbWUp
Cit7CisgICAgaWYgKG11dGVkKCkpIHsKKyAgICAgICAgaWYgKCFtX2JsYWNrRnJhbWUgfHwgbV9i
bGFja0ZyYW1lV2lkdGggIT0gZnJhbWUud2lkdGgoKSB8fCBtX2JsYWNrRnJhbWVIZWlnaHQgIT0g
ZnJhbWUuaGVpZ2h0KCkpIHsKKyAgICAgICAgICAgIENWUGl4ZWxCdWZmZXJSZWYgcGl4ZWxCdWZm
ZXIgPSBudWxscHRyOworICAgICAgICAgICAgYXV0byBzdGF0dXMgPSBDVlBpeGVsQnVmZmVyQ3Jl
YXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGZyYW1lLndpZHRoKCksIGZyYW1lLmhlaWdodCgpLCBr
Q1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyOFBsYW5hciwgbnVsbHB0ciwgJnBpeGVsQnVmZmVy
KTsKKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoc3RhdHVzLCBzdGF0dXMgPT0gbm9FcnIpOwor
CisgICAgICAgICAgICBtX2JsYWNrRnJhbWUgPSBwaXhlbEJ1ZmZlcjsKKyAgICAgICAgICAgIG1f
YmxhY2tGcmFtZVdpZHRoID0gZnJhbWUud2lkdGgoKTsKKyAgICAgICAgICAgIG1fYmxhY2tGcmFt
ZUhlaWdodCA9IGZyYW1lLmhlaWdodCgpOworCisgICAgICAgICAgICBzdGF0dXMgPSBDVlBpeGVs
QnVmZmVyTG9ja0Jhc2VBZGRyZXNzKHBpeGVsQnVmZmVyLCAwKTsKKyAgICAgICAgICAgIEFTU0VS
VChzdGF0dXMgPT0gbm9FcnIpOworICAgICAgICAgICAgdm9pZCogZGF0YSA9IENWUGl4ZWxCdWZm
ZXJHZXRCYXNlQWRkcmVzcyhwaXhlbEJ1ZmZlcik7CisgICAgICAgICAgICBzaXplX3QgeUxlbmd0
aCA9IGZyYW1lLndpZHRoKCkgKiBmcmFtZS5oZWlnaHQoKTsKKyAgICAgICAgICAgIG1lbXNldChk
YXRhLCAwLCB5TGVuZ3RoKTsKKyAgICAgICAgICAgIG1lbXNldChzdGF0aWNfY2FzdDx1aW50OF90
Kj4oZGF0YSkgKyB5TGVuZ3RoLCAxMjgsIHlMZW5ndGggLyAyKTsKKworICAgICAgICAgICAgc3Rh
dHVzID0gQ1ZQaXhlbEJ1ZmZlclVubG9ja0Jhc2VBZGRyZXNzKHBpeGVsQnVmZmVyLCAwKTsKKyAg
ICAgICAgICAgIEFTU0VSVCghc3RhdHVzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbV9i
bGFja0ZyYW1lLmdldCgpOworICAgIH0KKyAgICBhdXRvIGJ1ZmZlciA9IGZyYW1lLnZpZGVvX2Zy
YW1lX2J1ZmZlcigpOworICAgIEFTU0VSVChidWZmZXItPnR5cGUoKSA9PSB3ZWJydGM6OlZpZGVv
RnJhbWVCdWZmZXI6OlR5cGU6OmtOYXRpdmUpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDx3ZWJy
dGM6OkNvcmVWaWRlb0ZyYW1lQnVmZmVyJj4oKmJ1ZmZlcikucGl4ZWxfYnVmZmVyKCk7Cit9CisK
K3ZvaWQgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlQ29jb2E6Ok9uRnJhbWUoY29uc3Qgd2Vi
cnRjOjpWaWRlb0ZyYW1lJiBmcmFtZSkKK3sKKyAgICBpZiAoIWlzUHJvZHVjaW5nRGF0YSgpKQor
ICAgICAgICByZXR1cm47CisKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICBpZiAoISgr
K21fbnVtYmVyT2ZGcmFtZXMgJSAzMCkpCisgICAgICAgIFJFTEVBU0VfTE9HKE1lZGlhU3RyZWFt
LCAiUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlQ29jb2E6Ok9uRnJhbWUgJXp1IGZyYW1lIiwg
bV9udW1iZXJPZkZyYW1lcyk7CisjZW5kaWYKKworICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBwaXhl
bEJ1ZmZlckZyb21WaWRlb0ZyYW1lKGZyYW1lKTsKKworICAgIC8vIEZJWE1FOiBDb252ZXJ0IHRp
bWluZyBpbmZvcm1hdGlvbiBmcm9tIFZpZGVvRnJhbWUgdG8gQ01TYW1wbGVUaW1pbmdJbmZvLgor
ICAgIC8vIEZvciB0aGUgbW9tZW50LCB3ZSB3aWxsIHByZXRlbmQgdGhhdCBmcmFtZXMgc2hvdWxk
IGJlIHJlbmRlcmVkIGFzYXAuCisgICAgQ01TYW1wbGVUaW1pbmdJbmZvIHRpbWluZ0luZm87Cisg
ICAgdGltaW5nSW5mby5wcmVzZW50YXRpb25UaW1lU3RhbXAgPSBrQ01UaW1lSW52YWxpZDsKKyAg
ICB0aW1pbmdJbmZvLmRlY29kZVRpbWVTdGFtcCA9IGtDTVRpbWVJbnZhbGlkOworICAgIHRpbWlu
Z0luZm8uZHVyYXRpb24gPSBrQ01UaW1lSW52YWxpZDsKKworICAgIENNVmlkZW9Gb3JtYXREZXNj
cmlwdGlvblJlZiBmb3JtYXREZXNjcmlwdGlvbjsKKyAgICBPU1N0YXR1cyBvc3RhdHVzID0gQ01W
aWRlb0Zvcm1hdERlc2NyaXB0aW9uQ3JlYXRlRm9ySW1hZ2VCdWZmZXIoa0NGQWxsb2NhdG9yRGVm
YXVsdCwgKENWSW1hZ2VCdWZmZXJSZWYpcGl4ZWxCdWZmZXIsICZmb3JtYXREZXNjcmlwdGlvbik7
CisgICAgaWYgKG9zdGF0dXMgIT0gbm9FcnIpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQg
dG8gaW5pdGlhbGl6ZSBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb246ICVkIiwgc3RhdGljX2Nhc3Q8
aW50Pihvc3RhdHVzKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBDTVNhbXBsZUJ1
ZmZlclJlZiBzYW1wbGVCdWZmZXI7CisgICAgb3N0YXR1cyA9IENNU2FtcGxlQnVmZmVyQ3JlYXRl
UmVhZHlXaXRoSW1hZ2VCdWZmZXIoa0NGQWxsb2NhdG9yRGVmYXVsdCwgKENWSW1hZ2VCdWZmZXJS
ZWYpcGl4ZWxCdWZmZXIsIGZvcm1hdERlc2NyaXB0aW9uLCAmdGltaW5nSW5mbywgJnNhbXBsZUJ1
ZmZlcik7CisgICAgaWYgKG9zdGF0dXMgIT0gbm9FcnIpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJG
YWlsZWQgdG8gY3JlYXRlIHRoZSBzYW1wbGUgYnVmZmVyOiAlZCIsIHN0YXRpY19jYXN0PGludD4o
b3N0YXR1cykpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIENGUmVsZWFzZShmb3JtYXRE
ZXNjcmlwdGlvbik7CisKKyAgICBhdXRvIHNhbXBsZSA9IGFkb3B0Q0Yoc2FtcGxlQnVmZmVyKTsK
KworICAgIENGQXJyYXlSZWYgYXR0YWNobWVudHNBcnJheSA9IENNU2FtcGxlQnVmZmVyR2V0U2Ft
cGxlQXR0YWNobWVudHNBcnJheShzYW1wbGVCdWZmZXIsIHRydWUpOworICAgIGZvciAoQ0ZJbmRl
eCBpID0gMDsgaSA8IENGQXJyYXlHZXRDb3VudChhdHRhY2htZW50c0FycmF5KTsgKytpKSB7Cisg
ICAgICAgIENGTXV0YWJsZURpY3Rpb25hcnlSZWYgYXR0YWNobWVudHMgPSAoQ0ZNdXRhYmxlRGlj
dGlvbmFyeVJlZilDRkFycmF5R2V0VmFsdWVBdEluZGV4KGF0dGFjaG1lbnRzQXJyYXksIGkpOwor
ICAgICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShhdHRhY2htZW50cywga0NNU2FtcGxlQXR0YWNo
bWVudEtleV9EaXNwbGF5SW1tZWRpYXRlbHksIGtDRkJvb2xlYW5UcnVlKTsKKyAgICB9CisKKyAg
ICB1bnNpZ25lZCB3aWR0aCA9IGZyYW1lLndpZHRoKCk7CisgICAgdW5zaWduZWQgaGVpZ2h0ID0g
ZnJhbWUuaGVpZ2h0KCk7CisKKyAgICBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbiByb3RhdGlv
bjsKKyAgICBzd2l0Y2ggKGZyYW1lLnJvdGF0aW9uKCkpIHsKKyAgICBjYXNlIHdlYnJ0Yzo6a1Zp
ZGVvUm90YXRpb25fMDoKKyAgICAgICAgcm90YXRpb24gPSBNZWRpYVNhbXBsZTo6VmlkZW9Sb3Rh
dGlvbjo6Tm9uZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSB3ZWJydGM6OmtWaWRlb1JvdGF0
aW9uXzE4MDoKKyAgICAgICAgcm90YXRpb24gPSBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6
VXBzaWRlRG93bjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSB3ZWJydGM6OmtWaWRlb1JvdGF0
aW9uXzkwOgorICAgICAgICByb3RhdGlvbiA9IE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpS
aWdodDsKKyAgICAgICAgc3RkOjpzd2FwKHdpZHRoLCBoZWlnaHQpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMjcwOgorICAgICAgICByb3RhdGlvbiA9
IE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpMZWZ0OworICAgICAgICBzdGQ6OnN3YXAod2lk
dGgsIGhlaWdodCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIFJlZlB0cjxSZWFsdGlt
ZUluY29taW5nVmlkZW9Tb3VyY2VDb2NvYT4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBjYWxs
T25NYWluVGhyZWFkKFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIHNhbXBsZSA9IFdU
Rk1vdmUoc2FtcGxlKSwgd2lkdGgsIGhlaWdodCwgcm90YXRpb25dIHsKKyAgICAgICAgcHJvdGVj
dGVkVGhpcy0+cHJvY2Vzc05ld1NhbXBsZShzYW1wbGUuZ2V0KCksIHdpZHRoLCBoZWlnaHQsIHJv
dGF0aW9uKTsKKyAgICB9KTsKK30KKwordm9pZCBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VD
b2NvYTo6cHJvY2Vzc05ld1NhbXBsZShDTVNhbXBsZUJ1ZmZlclJlZiBzYW1wbGUsIHVuc2lnbmVk
IHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uIHJvdGF0
aW9uKQoreworICAgIG1fYnVmZmVyID0gc2FtcGxlOworICAgIGlmICh3aWR0aCAhPSBtX2N1cnJl
bnRTZXR0aW5ncy53aWR0aCgpIHx8IGhlaWdodCAhPSBtX2N1cnJlbnRTZXR0aW5ncy5oZWlnaHQo
KSkgeworICAgICAgICBtX2N1cnJlbnRTZXR0aW5ncy5zZXRXaWR0aCh3aWR0aCk7CisgICAgICAg
IG1fY3VycmVudFNldHRpbmdzLnNldEhlaWdodChoZWlnaHQpOworICAgICAgICBzZXR0aW5nc0Rp
ZENoYW5nZSgpOworICAgIH0KKworICAgIHZpZGVvU2FtcGxlQXZhaWxhYmxlKE1lZGlhU2FtcGxl
QVZGT2JqQzo6Y3JlYXRlKHNhbXBsZSwgcm90YXRpb24pKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKExJQldFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUluY29taW5nVmlkZW9Tb3Vy
Y2VDb2NvYS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0
aW1lSW5jb21pbmdWaWRlb1NvdXJjZUNvY29hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGU5ODkyYTFjODI3ZDRi
Yjk2MWNmMjYxZDY0NzkwNmIzYTMyNDllYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VD
b2NvYS5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShMSUJXRUJSVEMpCisKKyNpbmNsdWRlICJSZWFsdGlt
ZUluY29taW5nVmlkZW9Tb3VyY2UuaCIKKwordXNpbmcgQ01TYW1wbGVCdWZmZXJSZWYgPSBzdHJ1
Y3Qgb3BhcXVlQ01TYW1wbGVCdWZmZXIqOwordXNpbmcgQ1ZQaXhlbEJ1ZmZlclJlZiA9IHN0cnVj
dCBfX0NWQnVmZmVyKjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSZWFsdGltZUlu
Y29taW5nVmlkZW9Tb3VyY2VDb2NvYSBmaW5hbCA6IHB1YmxpYyBSZWFsdGltZUluY29taW5nVmlk
ZW9Tb3VyY2UgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8UmVhbHRpbWVJbmNvbWluZ1ZpZGVv
U291cmNlQ29jb2E+IGNyZWF0ZShydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb1RyYWNr
SW50ZXJmYWNlPiYmLCBTdHJpbmcmJik7CisKK3ByaXZhdGU6CisgICAgUmVhbHRpbWVJbmNvbWlu
Z1ZpZGVvU291cmNlQ29jb2EocnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9UcmFja0lu
dGVyZmFjZT4mJiwgU3RyaW5nJiYpOworICAgIHZvaWQgcHJvY2Vzc05ld1NhbXBsZShDTVNhbXBs
ZUJ1ZmZlclJlZiwgdW5zaWduZWQsIHVuc2lnbmVkLCBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlv
bik7CisgICAgQ1ZQaXhlbEJ1ZmZlclJlZiBwaXhlbEJ1ZmZlckZyb21WaWRlb0ZyYW1lKGNvbnN0
IHdlYnJ0Yzo6VmlkZW9GcmFtZSYpOworCisgICAgLy8gcnRjOjpWaWRlb1NpbmtJbnRlcmZhY2UK
KyAgICB2b2lkIE9uRnJhbWUoY29uc3Qgd2VicnRjOjpWaWRlb0ZyYW1lJikgZmluYWw7CisKKyAg
ICBSZXRhaW5QdHI8Q01TYW1wbGVCdWZmZXJSZWY+IG1fYnVmZmVyOworICAgIFJldGFpblB0cjxD
VlBpeGVsQnVmZmVyUmVmPiBtX2JsYWNrRnJhbWU7CisgICAgaW50IG1fYmxhY2tGcmFtZVdpZHRo
IHsgMCB9OworICAgIGludCBtX2JsYWNrRnJhbWVIZWlnaHQgeyAwIH07CisjaWYgIVJFTEVBU0Vf
TE9HX0RJU0FCTEVECisgICAgc2l6ZV90IG1fbnVtYmVyT2ZGcmFtZXMgeyAwIH07CisjZW5kaWYK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShMSUJXRUJSVEMp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVh
bHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL21hYy9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAzZjQ1MGRmMzNjNmY2YTI1ODdkYTM5YjVlYzgyY2NmY2Q2MGEw
ZTdkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU91dGdvaW5nVmlkZW9T
b3VyY2UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjY2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTcgQXBwbGUgSW5jLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkLCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIHJlcXVpcmVkIHRvIGJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gbm9yIHRoZSBuYW1lcyBvZgot
ICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SCi0gKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotICogU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIKLSAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmgiCi0KLSNpZiBVU0UoTElCV0VCUlRDKQot
Ci0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgPHdlYnJ0Yy9hcGkvdmlkZW8vaTQyMF9i
dWZmZXIuaD4KLSNpbmNsdWRlIDx3ZWJydGMvY29tbW9uX3ZpZGVvL2xpYnl1di9pbmNsdWRlL3dl
YnJ0Y19saWJ5dXYuaD4KLSNpbmNsdWRlIDx3ZWJydGMvc2RrL29iamMvRnJhbWV3b3JrL0NsYXNz
ZXMvVmlkZW8vY29yZXZpZGVvX2ZyYW1lX2J1ZmZlci5oPgotI2luY2x1ZGUgPHd0Zi9DdXJyZW50
VGltZS5oPgotI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0KLSNpbmNsdWRlICJDb3JlTWVk
aWFTb2Z0TGluay5oIgotI2luY2x1ZGUgIkNvcmVWaWRlb1NvZnRMaW5rLmgiCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpSZWFsdGltZU91dGdv
aW5nVmlkZW9Tb3VyY2UoUmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiYmIHZpZGVvU291cmNl
KQotICAgIDogbV92aWRlb1NvdXJjZShXVEZNb3ZlKHZpZGVvU291cmNlKSkKLSAgICAsIG1fYmxh
Y2tGcmFtZVRpbWVyKCp0aGlzLCAmUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpzZW5kT25l
QmxhY2tGcmFtZSkKLXsKLSAgICBtX3ZpZGVvU291cmNlLT5hZGRPYnNlcnZlcigqdGhpcyk7Ci0g
ICAgaW5pdGlhbGl6ZUZyb21Tb3VyY2UoKTsKLX0KLQotYm9vbCBSZWFsdGltZU91dGdvaW5nVmlk
ZW9Tb3VyY2U6OnNldFNvdXJjZShSZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYgbmV3U291
cmNlKQotewotICAgIGlmICghbV9pbml0aWFsU2V0dGluZ3MpCi0gICAgICAgIG1faW5pdGlhbFNl
dHRpbmdzID0gbV92aWRlb1NvdXJjZS0+c291cmNlKCkuc2V0dGluZ3MoKTsKLQotICAgIG1fdmlk
ZW9Tb3VyY2UtPnJlbW92ZU9ic2VydmVyKCp0aGlzKTsKLSAgICBtX3ZpZGVvU291cmNlID0gV1RG
TW92ZShuZXdTb3VyY2UpOwotICAgIG1fdmlkZW9Tb3VyY2UtPmFkZE9ic2VydmVyKCp0aGlzKTsK
LQotICAgIGluaXRpYWxpemVGcm9tU291cmNlKCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
dm9pZCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnN0b3AoKQotewotICAgIG1fdmlkZW9T
b3VyY2UtPnJlbW92ZU9ic2VydmVyKCp0aGlzKTsKLSAgICBtX2JsYWNrRnJhbWVUaW1lci5zdG9w
KCk7Ci0gICAgbV9pc1N0b3BwZWQgPSB0cnVlOwotfQotCi12b2lkIFJlYWx0aW1lT3V0Z29pbmdW
aWRlb1NvdXJjZTo6dXBkYXRlQmxhY2tGcmFtZXNTZW5kaW5nKCkKLXsKLSAgICBpZiAoIW1fbXV0
ZWQgJiYgbV9lbmFibGVkKSB7Ci0gICAgICAgIGlmIChtX2JsYWNrRnJhbWVUaW1lci5pc0FjdGl2
ZSgpKQotICAgICAgICAgICAgbV9ibGFja0ZyYW1lVGltZXIuc3RvcCgpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgc2VuZEJsYWNrRnJhbWVzSWZOZWVkZWQoKTsKLX0KLQotdm9pZCBS
ZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnNvdXJjZU11dGVkQ2hhbmdlZCgpCi17Ci0gICAg
QVNTRVJUKG1fbXV0ZWQgIT0gbV92aWRlb1NvdXJjZS0+bXV0ZWQoKSk7Ci0KLSAgICBtX211dGVk
ID0gbV92aWRlb1NvdXJjZS0+bXV0ZWQoKTsKLQotICAgIHVwZGF0ZUJsYWNrRnJhbWVzU2VuZGlu
ZygpOwotfQotCi12b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6c291cmNlRW5hYmxl
ZENoYW5nZWQoKQotewotICAgIEFTU0VSVChtX2VuYWJsZWQgIT0gbV92aWRlb1NvdXJjZS0+ZW5h
YmxlZCgpKTsKLQotICAgIG1fZW5hYmxlZCA9IG1fdmlkZW9Tb3VyY2UtPmVuYWJsZWQoKTsKLQot
ICAgIHVwZGF0ZUJsYWNrRnJhbWVzU2VuZGluZygpOwotfQotCi12b2lkIFJlYWx0aW1lT3V0Z29p
bmdWaWRlb1NvdXJjZTo6aW5pdGlhbGl6ZUZyb21Tb3VyY2UoKQotewotICAgIGNvbnN0IGF1dG8m
IHNldHRpbmdzID0gbV92aWRlb1NvdXJjZS0+c291cmNlKCkuc2V0dGluZ3MoKTsKLSAgICBtX3dp
ZHRoID0gc2V0dGluZ3Mud2lkdGgoKTsKLSAgICBtX2hlaWdodCA9IHNldHRpbmdzLmhlaWdodCgp
OwotCi0gICAgbV9tdXRlZCA9IG1fdmlkZW9Tb3VyY2UtPm11dGVkKCk7Ci0gICAgbV9lbmFibGVk
ID0gbV92aWRlb1NvdXJjZS0+ZW5hYmxlZCgpOwotCi0gICAgdXBkYXRlQmxhY2tGcmFtZXNTZW5k
aW5nKCk7Ci19Ci0KLWJvb2wgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpHZXRTdGF0cyhT
dGF0cyopCi17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJlYWx0aW1lT3V0Z29pbmdW
aWRlb1NvdXJjZTo6QWRkT3JVcGRhdGVTaW5rKHJ0Yzo6VmlkZW9TaW5rSW50ZXJmYWNlPHdlYnJ0
Yzo6VmlkZW9GcmFtZT4qIHNpbmssIGNvbnN0IHJ0Yzo6VmlkZW9TaW5rV2FudHMmIHNpbmtXYW50
cykKLXsKLSAgICBBU1NFUlQoIXNpbmtXYW50cy5ibGFja19mcmFtZXMpOwotCi0gICAgaWYgKHNp
bmtXYW50cy5yb3RhdGlvbl9hcHBsaWVkKQotICAgICAgICBtX3Nob3VsZEFwcGx5Um90YXRpb24g
PSB0cnVlOwotCi0gICAgaWYgKCFtX3NpbmtzLmNvbnRhaW5zKHNpbmspKQotICAgICAgICBtX3Np
bmtzLmFwcGVuZChzaW5rKTsKLQotICAgIGNhbGxPbk1haW5UaHJlYWQoW3Byb3RlY3RlZFRoaXMg
PSBtYWtlUmVmKCp0aGlzKV0oKSB7Ci0gICAgICAgIHByb3RlY3RlZFRoaXMtPnNlbmRCbGFja0Zy
YW1lc0lmTmVlZGVkKCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVv
U291cmNlOjpSZW1vdmVTaW5rKHJ0Yzo6VmlkZW9TaW5rSW50ZXJmYWNlPHdlYnJ0Yzo6VmlkZW9G
cmFtZT4qIHNpbmspCi17Ci0gICAgbV9zaW5rcy5yZW1vdmVGaXJzdChzaW5rKTsKLQotICAgIGlm
IChtX3NpbmtzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2FsbE9uTWFpblRocmVh
ZChbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSgpIHsKLSAgICAgICAgaWYgKHByb3Rl
Y3RlZFRoaXMtPm1fYmxhY2tGcmFtZVRpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgICAgICBwcm90
ZWN0ZWRUaGlzLT5tX2JsYWNrRnJhbWVUaW1lci5zdG9wKCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQg
UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpzZW5kQmxhY2tGcmFtZXNJZk5lZWRlZCgpCi17
Ci0gICAgaWYgKG1fYmxhY2tGcmFtZVRpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmICghbV9zaW5rcy5zaXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICgh
bV9tdXRlZCAmJiBtX2VuYWJsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV93aWR0
aCB8fCAhbV9oZWlnaHQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9ibGFja0ZyYW1l
KSB7Ci0gICAgICAgIGF1dG8gd2lkdGggPSBtX3dpZHRoOwotICAgICAgICBhdXRvIGhlaWdodCA9
IG1faGVpZ2h0OwotICAgICAgICBpZiAobV9zaG91bGRBcHBseVJvdGF0aW9uICYmIChtX2N1cnJl
bnRSb3RhdGlvbiA9PSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzAgfHwgbV9jdXJyZW50Um90YXRp
b24gPT0gd2VicnRjOjprVmlkZW9Sb3RhdGlvbl85MCkpCi0gICAgICAgICAgICBzdGQ6OnN3YXAo
d2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIGF1dG8gZnJhbWUgPSBtX2J1ZmZlclBvb2wuQ3JlYXRl
QnVmZmVyKHdpZHRoLCBoZWlnaHQpOwotICAgICAgICBBU1NFUlQoZnJhbWUpOwotICAgICAgICBp
ZiAoIWZyYW1lKSB7Ci0gICAgICAgICAgICBSRUxFQVNFX0xPRyhXZWJSVEMsICJSZWFsdGltZU91
dGdvaW5nVmlkZW9Tb3VyY2U6OnNlbmRCbGFja0ZyYW1lc0lmTmVlZGVkIHVuYWJsZSB0byBzZW5k
IGJsYWNrIGZyYW1lcyIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAg
IHdlYnJ0Yzo6STQyMEJ1ZmZlcjo6U2V0QmxhY2soZnJhbWUuZ2V0KCkpOwotICAgICAgICBtX2Js
YWNrRnJhbWUgPSBXVEZNb3ZlKGZyYW1lKTsKLSAgICB9Ci0gICAgc2VuZE9uZUJsYWNrRnJhbWUo
KTsKLSAgICBtX2JsYWNrRnJhbWVUaW1lci5zdGFydFJlcGVhdGluZygxX3MpOwotfQotCi12b2lk
IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZTo6c2VuZE9uZUJsYWNrRnJhbWUoKQotewotICAg
IFJFTEVBU0VfTE9HKE1lZGlhU3RyZWFtLCAiUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpz
ZW5kT25lQmxhY2tGcmFtZSIpOwotICAgIHNlbmRGcmFtZShydGM6OnNjb3BlZF9yZWZwdHI8d2Vi
cnRjOjpWaWRlb0ZyYW1lQnVmZmVyPihtX2JsYWNrRnJhbWUpKTsKLX0KLQotdm9pZCBSZWFsdGlt
ZU91dGdvaW5nVmlkZW9Tb3VyY2U6OnNlbmRGcmFtZShydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRj
OjpWaWRlb0ZyYW1lQnVmZmVyPiYmIGJ1ZmZlcikKLXsKLSAgICBpbnQ2NF90IHRpbWVzdGFtcE1p
Y3JvU2Vjb25kcyA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZU1TKCkgKiAxMDAwOwotICAg
IHdlYnJ0Yzo6VmlkZW9GcmFtZSBmcmFtZShidWZmZXIsIG1fc2hvdWxkQXBwbHlSb3RhdGlvbiA/
IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMCA6IG1fY3VycmVudFJvdGF0aW9uLCB0aW1lc3RhbXBN
aWNyb1NlY29uZHMpOwotICAgIGZvciAoYXV0byogc2luayA6IG1fc2lua3MpCi0gICAgICAgIHNp
bmstPk9uRnJhbWUoZnJhbWUpOwotfQotCi12b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJj
ZTo6dmlkZW9TYW1wbGVBdmFpbGFibGUoTWVkaWFTYW1wbGUmIHNhbXBsZSkKLXsKLSAgICBpZiAo
IW1fc2lua3Muc2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9tdXRlZCB8fCAh
bV9lbmFibGVkKQotICAgICAgICByZXR1cm47Ci0KLSNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQK
LSAgICBpZiAoISgrK21fbnVtYmVyT2ZGcmFtZXMgJSAzMCkpCi0gICAgICAgIFJFTEVBU0VfTE9H
KE1lZGlhU3RyZWFtLCAiUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlOjpzZW5kRnJhbWUgJXp1
IGZyYW1lIiwgbV9udW1iZXJPZkZyYW1lcyk7Ci0jZW5kaWYKLQotICAgIHN3aXRjaCAoc2FtcGxl
LnZpZGVvUm90YXRpb24oKSkgewotICAgIGNhc2UgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246
Ok5vbmU6Ci0gICAgICAgIG1fY3VycmVudFJvdGF0aW9uID0gd2VicnRjOjprVmlkZW9Sb3RhdGlv
bl8wOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9u
OjpVcHNpZGVEb3duOgotICAgICAgICBtX2N1cnJlbnRSb3RhdGlvbiA9IHdlYnJ0Yzo6a1ZpZGVv
Um90YXRpb25fMTgwOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE1lZGlhU2FtcGxlOjpWaWRl
b1JvdGF0aW9uOjpSaWdodDoKLSAgICAgICAgbV9jdXJyZW50Um90YXRpb24gPSB3ZWJydGM6OmtW
aWRlb1JvdGF0aW9uXzkwOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE1lZGlhU2FtcGxlOjpW
aWRlb1JvdGF0aW9uOjpMZWZ0OgotICAgICAgICBtX2N1cnJlbnRSb3RhdGlvbiA9IHdlYnJ0Yzo6
a1ZpZGVvUm90YXRpb25fMjcwOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBBU1NFUlQo
c2FtcGxlLnBsYXRmb3JtU2FtcGxlKCkudHlwZSA9PSBQbGF0Zm9ybVNhbXBsZTo6Q01TYW1wbGVC
dWZmZXJUeXBlKTsKLSAgICBhdXRvIHBpeGVsQnVmZmVyID0gc3RhdGljX2Nhc3Q8Q1ZQaXhlbEJ1
ZmZlclJlZj4oQ01TYW1wbGVCdWZmZXJHZXRJbWFnZUJ1ZmZlcihzYW1wbGUucGxhdGZvcm1TYW1w
bGUoKS5zYW1wbGUuY21TYW1wbGVCdWZmZXIpKTsKLSAgICBhdXRvIHBpeGVsRm9ybWF0VHlwZSA9
IENWUGl4ZWxCdWZmZXJHZXRQaXhlbEZvcm1hdFR5cGUocGl4ZWxCdWZmZXIpOwotCi0gICAgaWYg
KHBpeGVsRm9ybWF0VHlwZSA9PSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyOFBsYW5hciB8
fCBwaXhlbEZvcm1hdFR5cGUgPT0ga0NWUGl4ZWxGb3JtYXRUeXBlXzQyMFlwQ2JDcjhCaVBsYW5h
ckZ1bGxSYW5nZSkgewotICAgICAgICBydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb0Zy
YW1lQnVmZmVyPiBidWZmZXIgPSBuZXcgcnRjOjpSZWZDb3VudGVkT2JqZWN0PHdlYnJ0Yzo6Q29y
ZVZpZGVvRnJhbWVCdWZmZXI+KHBpeGVsQnVmZmVyKTsKLSAgICAgICAgaWYgKG1fc2hvdWxkQXBw
bHlSb3RhdGlvbiAmJiBtX2N1cnJlbnRSb3RhdGlvbiAhPSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9u
XzApIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbWFrZSBBVlZpZGVvQ2FwdHVy
ZVNvdXJjZSBoYW5kbGUgdGhlIHJvdGF0aW9uIHdoZW5ldmVyIHBvc3NpYmxlLgotICAgICAgICAg
ICAgLy8gVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBpbmVmZmljaWVudCwgd2Ugc2hvdWxkIHJvdGF0
ZSBvbiB0aGUgQ01TYW1wbGVCdWZmZXIgZGlyZWN0bHkgaW5zdGVhZCBvZiBkb2luZyB0aGlzIGRv
dWJsZSBhbGxvY2F0aW9uLgotICAgICAgICAgICAgYXV0byByb3RhdGVkQnVmZmVyID0gYnVmZmVy
LT5Ub0k0MjAoKTsKLSAgICAgICAgICAgIEFTU0VSVChyb3RhdGVkQnVmZmVyKTsKLSAgICAgICAg
ICAgIGJ1ZmZlciA9IHdlYnJ0Yzo6STQyMEJ1ZmZlcjo6Um90YXRlKCpyb3RhdGVkQnVmZmVyLCBt
X2N1cnJlbnRSb3RhdGlvbik7Ci0gICAgICAgIH0KLSAgICAgICAgc2VuZEZyYW1lKFdURk1vdmUo
YnVmZmVyKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBDVlBpeGVsQnVmZmVyTG9j
a0Jhc2VBZGRyZXNzKHBpeGVsQnVmZmVyLCAwKTsKLSAgICBhdXRvKiBzb3VyY2UgPSByZWludGVy
cHJldF9jYXN0PHVpbnQ4X3QqPihDVlBpeGVsQnVmZmVyR2V0QmFzZUFkZHJlc3NPZlBsYW5lKHBp
eGVsQnVmZmVyLCAwKSk7Ci0KLSAgICBBU1NFUlQobV93aWR0aCk7Ci0gICAgQVNTRVJUKG1faGVp
Z2h0KTsKLQotICAgIGF1dG8gbmV3QnVmZmVyID0gbV9idWZmZXJQb29sLkNyZWF0ZUJ1ZmZlciht
X3dpZHRoLCBtX2hlaWdodCk7Ci0gICAgQVNTRVJUKG5ld0J1ZmZlcik7Ci0gICAgaWYgKCFuZXdC
dWZmZXIpIHsKLSAgICAgICAgUkVMRUFTRV9MT0coV2ViUlRDLCAiUmVhbHRpbWVPdXRnb2luZ1Zp
ZGVvU291cmNlOjp2aWRlb1NhbXBsZUF2YWlsYWJsZSB1bmFibGUgdG8gYWxsb2NhdGUgYnVmZmVy
IGZvciBjb252ZXJzaW9uIHRvIFlVViIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlm
IChwaXhlbEZvcm1hdFR5cGUgPT0ga0NWUGl4ZWxGb3JtYXRUeXBlXzMyQkdSQSkKLSAgICAgICAg
d2VicnRjOjpDb252ZXJ0VG9JNDIwKHdlYnJ0Yzo6VmlkZW9UeXBlOjprQVJHQiwgc291cmNlLCAw
LCAwLCBtX3dpZHRoLCBtX2hlaWdodCwgMCwgd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8wLCBuZXdC
dWZmZXIpOwotICAgIGVsc2UgewotICAgICAgICBBU1NFUlQocGl4ZWxGb3JtYXRUeXBlID09IGtD
VlBpeGVsRm9ybWF0VHlwZV8zMkFSR0IpOwotICAgICAgICB3ZWJydGM6OkNvbnZlcnRUb0k0MjAo
d2VicnRjOjpWaWRlb1R5cGU6OmtCR1JBLCBzb3VyY2UsIDAsIDAsIG1fd2lkdGgsIG1faGVpZ2h0
LCAwLCB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzAsIG5ld0J1ZmZlcik7Ci0gICAgfQotICAgIENW
UGl4ZWxCdWZmZXJVbmxvY2tCYXNlQWRkcmVzcyhwaXhlbEJ1ZmZlciwgMCk7Ci0gICAgaWYgKG1f
c2hvdWxkQXBwbHlSb3RhdGlvbiAmJiBtX2N1cnJlbnRSb3RhdGlvbiAhPSB3ZWJydGM6OmtWaWRl
b1JvdGF0aW9uXzApCi0gICAgICAgIG5ld0J1ZmZlciA9IHdlYnJ0Yzo6STQyMEJ1ZmZlcjo6Um90
YXRlKCpuZXdCdWZmZXIsIG1fY3VycmVudFJvdGF0aW9uKTsKLSAgICBzZW5kRnJhbWUoV1RGTW92
ZShuZXdCdWZmZXIpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8g
VVNFKExJQldFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL21hYy9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjdlNzhiNTE2NWQwNTY5NWZlMWE0NTg0MDg1
OWJiMTFjMTJlNDg4Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRn
b2luZ1ZpZGVvU291cmNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTYgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgcmVxdWlyZWQgdG8gYmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IKLSAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0g
KiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUgotICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYg
VVNFKExJQldFQlJUQykKLQotI2luY2x1ZGUgIkxpYldlYlJUQ01hY3Jvcy5oIgotI2luY2x1ZGUg
Ik1lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmgiCi0jaW5jbHVkZSA8VGltZXIuaD4KLSNpbmNsdWRl
IDx3ZWJydGMvYXBpL21lZGlhc3RyZWFtaW50ZXJmYWNlLmg+Ci0jaW5jbHVkZSA8d2VicnRjL2Jh
c2Uvb3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3ZWJydGMvY29tbW9uX3ZpZGVvL2luY2x1ZGUvaTQy
MF9idWZmZXJfcG9vbC5oPgotI2luY2x1ZGUgPHdlYnJ0Yy9tZWRpYS9iYXNlL3ZpZGVvc2lua2lu
dGVyZmFjZS5oPgotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi9UaHJl
YWRTYWZlUmVmQ291bnRlZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFJlYWx0
aW1lT3V0Z29pbmdWaWRlb1NvdXJjZSBmaW5hbCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRl
ZDxSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U+LCBwdWJsaWMgd2VicnRjOjpWaWRlb1RyYWNr
U291cmNlSW50ZXJmYWNlLCBwcml2YXRlIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpPYnNlcnZl
ciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U+
IGNyZWF0ZShSZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYgdmlkZW9Tb3VyY2UpIHsgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlKFdURk1vdmUodmlk
ZW9Tb3VyY2UpKSk7IH0KLSAgICB+UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlKCkgeyBzdG9w
KCk7IH0KLQotICAgIHZvaWQgc3RvcCgpOwotICAgIGJvb2wgc2V0U291cmNlKFJlZjxNZWRpYVN0
cmVhbVRyYWNrUHJpdmF0ZT4mJik7Ci0gICAgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmIHNvdXJj
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmlkZW9Tb3VyY2UuZ2V0KCk7IH0KLQotICAgIGludCBBZGRS
ZWYoKSBjb25zdCBmaW5hbCB7IHJlZigpOyByZXR1cm4gcmVmQ291bnQoKTsgfQotICAgIGludCBS
ZWxlYXNlKCkgY29uc3QgZmluYWwgeyBkZXJlZigpOyByZXR1cm4gcmVmQ291bnQoKTsgfQotCi0g
ICAgdm9pZCBzZXRBcHBseVJvdGF0aW9uKGJvb2wgc2hvdWxkQXBwbHlSb3RhdGlvbikgeyBtX3No
b3VsZEFwcGx5Um90YXRpb24gPSBzaG91bGRBcHBseVJvdGF0aW9uOyB9Ci0KLXByaXZhdGU6Ci0g
ICAgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlKFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0
ZT4mJik7Ci0KLSAgICB2b2lkIHNlbmRGcmFtZShydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpW
aWRlb0ZyYW1lQnVmZmVyPiYmKTsKLSAgICB2b2lkIHNlbmRCbGFja0ZyYW1lc0lmTmVlZGVkKCk7
Ci0gICAgdm9pZCBzZW5kT25lQmxhY2tGcmFtZSgpOwotICAgIHZvaWQgaW5pdGlhbGl6ZUZyb21T
b3VyY2UoKTsKLSAgICB2b2lkIHVwZGF0ZUJsYWNrRnJhbWVzU2VuZGluZygpOwotCi0gICAgLy8g
Tm90aWZpZXIgQVBJCi0gICAgdm9pZCBSZWdpc3Rlck9ic2VydmVyKHdlYnJ0Yzo6T2JzZXJ2ZXJJ
bnRlcmZhY2UqKSBmaW5hbCB7IH0KLSAgICB2b2lkIFVucmVnaXN0ZXJPYnNlcnZlcih3ZWJydGM6
Ok9ic2VydmVySW50ZXJmYWNlKikgZmluYWwgeyB9Ci0KLSAgICAvLyBWaWRlb1RyYWNrU291cmNl
SW50ZXJmYWNlIEFQSQotICAgIGJvb2wgaXNfc2NyZWVuY2FzdCgpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIGZhbHNlOyB9Ci0gICAgcnRjOjpPcHRpb25hbDxib29sPiBuZWVkc19kZW5vaXNpbmcoKSBj
b25zdCBmaW5hbCB7IHJldHVybiBydGM6Ok9wdGlvbmFsPGJvb2w+KCk7IH0KLSAgICBib29sIEdl
dFN0YXRzKFN0YXRzKikgZmluYWw7Ci0KLSAgICAvLyBNZWRpYVNvdXJjZUludGVyZmFjZSBBUEkK
LSAgICBTb3VyY2VTdGF0ZSBzdGF0ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIFNvdXJjZVN0YXRl
KCk7IH0KLSAgICBib29sIHJlbW90ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KLQot
ICAgIC8vIHJ0Yzo6VmlkZW9Tb3VyY2VJbnRlcmZhY2U8d2VicnRjOjpWaWRlb0ZyYW1lPiBBUEkK
LSAgICB2b2lkIEFkZE9yVXBkYXRlU2luayhydGM6OlZpZGVvU2lua0ludGVyZmFjZTx3ZWJydGM6
OlZpZGVvRnJhbWU+KiwgY29uc3QgcnRjOjpWaWRlb1NpbmtXYW50cyYpIGZpbmFsOwotICAgIHZv
aWQgUmVtb3ZlU2luayhydGM6OlZpZGVvU2lua0ludGVyZmFjZTx3ZWJydGM6OlZpZGVvRnJhbWU+
KikgZmluYWw7Ci0KLSAgICB2b2lkIHNvdXJjZU11dGVkQ2hhbmdlZCgpOwotICAgIHZvaWQgc291
cmNlRW5hYmxlZENoYW5nZWQoKTsKLSAgICB2b2lkIHZpZGVvU2FtcGxlQXZhaWxhYmxlKE1lZGlh
U2FtcGxlJik7Ci0KLSAgICAvLyBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6T2JzZXJ2ZXIgQVBJ
Ci0gICAgdm9pZCB0cmFja011dGVkQ2hhbmdlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYpIGZp
bmFsIHsgc291cmNlTXV0ZWRDaGFuZ2VkKCk7IH0KLSAgICB2b2lkIHRyYWNrRW5hYmxlZENoYW5n
ZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmKSBmaW5hbCB7IHNvdXJjZUVuYWJsZWRDaGFuZ2Vk
KCk7IH0KLSAgICB2b2lkIHRyYWNrU2V0dGluZ3NDaGFuZ2VkKE1lZGlhU3RyZWFtVHJhY2tQcml2
YXRlJikgZmluYWwgeyBpbml0aWFsaXplRnJvbVNvdXJjZSgpOyB9Ci0gICAgdm9pZCBzYW1wbGVC
dWZmZXJVcGRhdGVkKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJiwgTWVkaWFTYW1wbGUmIHNhbXBs
ZSkgZmluYWwgeyB2aWRlb1NhbXBsZUF2YWlsYWJsZShzYW1wbGUpOyB9Ci0gICAgdm9pZCB0cmFj
a0VuZGVkKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJikgZmluYWwgeyB9Ci0KLSAgICBWZWN0b3I8
cnRjOjpWaWRlb1NpbmtJbnRlcmZhY2U8d2VicnRjOjpWaWRlb0ZyYW1lPio+IG1fc2lua3M7Ci0g
ICAgd2VicnRjOjpJNDIwQnVmZmVyUG9vbCBtX2J1ZmZlclBvb2w7Ci0gICAgUmVmPE1lZGlhU3Ry
ZWFtVHJhY2tQcml2YXRlPiBtX3ZpZGVvU291cmNlOwotICAgIGJvb2wgbV9lbmFibGVkIHsgdHJ1
ZSB9OwotICAgIGJvb2wgbV9tdXRlZCB7IGZhbHNlIH07Ci0gICAgc3RkOjpvcHRpb25hbDxSZWFs
dGltZU1lZGlhU291cmNlU2V0dGluZ3M+IG1faW5pdGlhbFNldHRpbmdzOwotICAgIHdlYnJ0Yzo6
VmlkZW9Sb3RhdGlvbiBtX2N1cnJlbnRSb3RhdGlvbiB7IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25f
MCB9OwotICAgIHVpbnQzMl90IG1fd2lkdGggeyAwIH07Ci0gICAgdWludDMyX3QgbV9oZWlnaHQg
eyAwIH07Ci0gICAgYm9vbCBtX2lzU3RvcHBlZCB7IGZhbHNlIH07Ci0gICAgVGltZXIgbV9ibGFj
a0ZyYW1lVGltZXI7Ci0gICAgcnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9GcmFtZUJ1
ZmZlcj4gbV9ibGFja0ZyYW1lOwotICAgIGJvb2wgbV9zaG91bGRBcHBseVJvdGF0aW9uIHsgZmFs
c2UgfTsKLSNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKLSAgICBzaXplX3QgbV9udW1iZXJPZkZy
YW1lcyB7IDAgfTsKLSNlbmRpZgotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5k
aWYgLy8gVVNFKExJQldFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VDb2NvYS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1Zp
ZGVvU291cmNlQ29jb2EuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg4ODE2YjhhOGIxM2U4YjQyOTA1NTNjYzg4
ZDg5MjBmNGI5NjQ1NTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlQ29jb2EuY3BwCkBA
IC0wLDAgKzEsMTI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCwgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSByZXF1aXJlZCB0byBiZSBtZXQ6
CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlQ29jb2EuaCIKKworI2lmIFVTRShMSUJXRUJS
VEMpCisKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSA8d2VicnRjL2FwaS92aWRlby9p
NDIwX2J1ZmZlci5oPgorI2luY2x1ZGUgPHdlYnJ0Yy9jb21tb25fdmlkZW8vbGlieXV2L2luY2x1
ZGUvd2VicnRjX2xpYnl1di5oPgorI2luY2x1ZGUgPHdlYnJ0Yy9zZGsvb2JqYy9GcmFtZXdvcmsv
Q2xhc3Nlcy9WaWRlby9jb3JldmlkZW9fZnJhbWVfYnVmZmVyLmg+CisKKyNpbmNsdWRlICJDb3Jl
TWVkaWFTb2Z0TGluay5oIgorI2luY2x1ZGUgIkNvcmVWaWRlb1NvZnRMaW5rLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworUmVmPFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZT4gUmVhbHRp
bWVPdXRnb2luZ1ZpZGVvU291cmNlOjpjcmVhdGUoUmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRl
PiYmIHZpZGVvU291cmNlKQoreworICAgIHJldHVybiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3Vy
Y2VDb2NvYTo6Y3JlYXRlKFdURk1vdmUodmlkZW9Tb3VyY2UpKTsKK30KKworUmVmPFJlYWx0aW1l
T3V0Z29pbmdWaWRlb1NvdXJjZUNvY29hPiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VDb2Nv
YTo6Y3JlYXRlKFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4mJiB2aWRlb1NvdXJjZSkKK3sK
KyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VDb2Nv
YShXVEZNb3ZlKHZpZGVvU291cmNlKSkpOworfQorCitSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3Vy
Y2VDb2NvYTo6UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlQ29jb2EoUmVmPE1lZGlhU3RyZWFt
VHJhY2tQcml2YXRlPiYmIHZpZGVvU291cmNlKQorICAgIDogUmVhbHRpbWVPdXRnb2luZ1ZpZGVv
U291cmNlKFdURk1vdmUodmlkZW9Tb3VyY2UpKQoreworfQorCit2b2lkIFJlYWx0aW1lT3V0Z29p
bmdWaWRlb1NvdXJjZUNvY29hOjpzYW1wbGVCdWZmZXJVcGRhdGVkKE1lZGlhU3RyZWFtVHJhY2tQ
cml2YXRlJiwgTWVkaWFTYW1wbGUmIHNhbXBsZSkKK3sKKyAgICBpZiAoIW1fc2lua3Muc2l6ZSgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9tdXRlZCB8fCAhbV9lbmFibGVkKQorICAg
ICAgICByZXR1cm47CisKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICBpZiAoISgrK21f
bnVtYmVyT2ZGcmFtZXMgJSAzMCkpCisgICAgICAgIFJFTEVBU0VfTE9HKE1lZGlhU3RyZWFtLCAi
UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlQ29jb2E6OnNlbmRGcmFtZSAlenUgZnJhbWUiLCBt
X251bWJlck9mRnJhbWVzKTsKKyNlbmRpZgorCisgICAgc3dpdGNoIChzYW1wbGUudmlkZW9Sb3Rh
dGlvbigpKSB7CisgICAgY2FzZSBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6Tm9uZToKKyAg
ICAgICAgbV9jdXJyZW50Um90YXRpb24gPSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzA7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246OlVwc2lkZURv
d246CisgICAgICAgIG1fY3VycmVudFJvdGF0aW9uID0gd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8x
ODA7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246
OlJpZ2h0OgorICAgICAgICBtX2N1cnJlbnRSb3RhdGlvbiA9IHdlYnJ0Yzo6a1ZpZGVvUm90YXRp
b25fOTA7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRp
b246OkxlZnQ6CisgICAgICAgIG1fY3VycmVudFJvdGF0aW9uID0gd2VicnRjOjprVmlkZW9Sb3Rh
dGlvbl8yNzA7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIEFTU0VSVChzYW1wbGUucGxh
dGZvcm1TYW1wbGUoKS50eXBlID09IFBsYXRmb3JtU2FtcGxlOjpDTVNhbXBsZUJ1ZmZlclR5cGUp
OworICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBzdGF0aWNfY2FzdDxDVlBpeGVsQnVmZmVyUmVmPihD
TVNhbXBsZUJ1ZmZlckdldEltYWdlQnVmZmVyKHNhbXBsZS5wbGF0Zm9ybVNhbXBsZSgpLnNhbXBs
ZS5jbVNhbXBsZUJ1ZmZlcikpOworICAgIGF1dG8gcGl4ZWxGb3JtYXRUeXBlID0gQ1ZQaXhlbEJ1
ZmZlckdldFBpeGVsRm9ybWF0VHlwZShwaXhlbEJ1ZmZlcik7CisKKyAgICBpZiAocGl4ZWxGb3Jt
YXRUeXBlID09IGtDVlBpeGVsRm9ybWF0VHlwZV80MjBZcENiQ3I4UGxhbmFyIHx8IHBpeGVsRm9y
bWF0VHlwZSA9PSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyOEJpUGxhbmFyRnVsbFJhbmdl
KSB7CisgICAgICAgIHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvRnJhbWVCdWZmZXI+
IGJ1ZmZlciA9IG5ldyBydGM6OlJlZkNvdW50ZWRPYmplY3Q8d2VicnRjOjpDb3JlVmlkZW9GcmFt
ZUJ1ZmZlcj4ocGl4ZWxCdWZmZXIpOworICAgICAgICBpZiAobV9zaG91bGRBcHBseVJvdGF0aW9u
ICYmIG1fY3VycmVudFJvdGF0aW9uICE9IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMCkgeworICAg
ICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBtYWtlIEFWVmlkZW9DYXB0dXJlU291cmNlIGhh
bmRsZSB0aGUgcm90YXRpb24gd2hlbmV2ZXIgcG9zc2libGUuCisgICAgICAgICAgICAvLyBUaGlz
IGltcGxlbWVudGF0aW9uIGlzIGluZWZmaWNpZW50LCB3ZSBzaG91bGQgcm90YXRlIG9uIHRoZSBD
TVNhbXBsZUJ1ZmZlciBkaXJlY3RseSBpbnN0ZWFkIG9mIGRvaW5nIHRoaXMgZG91YmxlIGFsbG9j
YXRpb24uCisgICAgICAgICAgICBhdXRvIHJvdGF0ZWRCdWZmZXIgPSBidWZmZXItPlRvSTQyMCgp
OworICAgICAgICAgICAgQVNTRVJUKHJvdGF0ZWRCdWZmZXIpOworICAgICAgICAgICAgYnVmZmVy
ID0gd2VicnRjOjpJNDIwQnVmZmVyOjpSb3RhdGUoKnJvdGF0ZWRCdWZmZXIsIG1fY3VycmVudFJv
dGF0aW9uKTsKKyAgICAgICAgfQorICAgICAgICBzZW5kRnJhbWUoV1RGTW92ZShidWZmZXIpKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIENWUGl4ZWxCdWZmZXJMb2NrQmFzZUFkZHJl
c3MocGl4ZWxCdWZmZXIsIDApOworICAgIGF1dG8qIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDhfdCo+KENWUGl4ZWxCdWZmZXJHZXRCYXNlQWRkcmVzc09mUGxhbmUocGl4ZWxCdWZmZXIs
IDApKTsKKworICAgIEFTU0VSVChtX3dpZHRoKTsKKyAgICBBU1NFUlQobV9oZWlnaHQpOworCisg
ICAgYXV0byBuZXdCdWZmZXIgPSBtX2J1ZmZlclBvb2wuQ3JlYXRlQnVmZmVyKG1fd2lkdGgsIG1f
aGVpZ2h0KTsKKyAgICBBU1NFUlQobmV3QnVmZmVyKTsKKyAgICBpZiAoIW5ld0J1ZmZlcikgewor
ICAgICAgICBSRUxFQVNFX0xPRyhXZWJSVEMsICJSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VD
b2NvYTo6dmlkZW9TYW1wbGVBdmFpbGFibGUgdW5hYmxlIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3Ig
Y29udmVyc2lvbiB0byBZVVYiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAocGl4
ZWxGb3JtYXRUeXBlID09IGtDVlBpeGVsRm9ybWF0VHlwZV8zMkJHUkEpCisgICAgICAgIHdlYnJ0
Yzo6Q29udmVydFRvSTQyMCh3ZWJydGM6OlZpZGVvVHlwZTo6a0FSR0IsIHNvdXJjZSwgMCwgMCwg
bV93aWR0aCwgbV9oZWlnaHQsIDAsIHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMCwgbmV3QnVmZmVy
KTsKKyAgICBlbHNlIHsKKyAgICAgICAgQVNTRVJUKHBpeGVsRm9ybWF0VHlwZSA9PSBrQ1ZQaXhl
bEZvcm1hdFR5cGVfMzJBUkdCKTsKKyAgICAgICAgd2VicnRjOjpDb252ZXJ0VG9JNDIwKHdlYnJ0
Yzo6VmlkZW9UeXBlOjprQkdSQSwgc291cmNlLCAwLCAwLCBtX3dpZHRoLCBtX2hlaWdodCwgMCwg
d2VicnRjOjprVmlkZW9Sb3RhdGlvbl8wLCBuZXdCdWZmZXIpOworICAgIH0KKyAgICBDVlBpeGVs
QnVmZmVyVW5sb2NrQmFzZUFkZHJlc3MocGl4ZWxCdWZmZXIsIDApOworICAgIGlmIChtX3Nob3Vs
ZEFwcGx5Um90YXRpb24gJiYgbV9jdXJyZW50Um90YXRpb24gIT0gd2VicnRjOjprVmlkZW9Sb3Rh
dGlvbl8wKQorICAgICAgICBuZXdCdWZmZXIgPSB3ZWJydGM6Okk0MjBCdWZmZXI6OlJvdGF0ZSgq
bmV3QnVmZmVyLCBtX2N1cnJlbnRSb3RhdGlvbik7CisgICAgc2VuZEZyYW1lKFdURk1vdmUobmV3
QnVmZmVyKSk7Cit9CisKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNF
KExJQldFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL21hYy9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VDb2NvYS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUNv
Y29hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNzdiZWY0NjE2NjBmMjQzZmM0ZTEyMjIzZWM1OTBlNTU4OTVmODQz
OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L21hYy9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VDb2NvYS5oCkBAIC0wLDAgKzEsNTEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkLCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIHJlcXVpcmVkIHRvIGJlIG1ldDoKKyAqCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICog
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKExJQldFQlJUQykKKworI2luY2x1
ZGUgIlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUNvY29hIGZpbmFsIDogcHVibGlj
IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxS
ZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VDb2NvYT4gY3JlYXRlKFJlZjxNZWRpYVN0cmVhbVRy
YWNrUHJpdmF0ZT4mJik7CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgUmVhbHRpbWVPdXRnb2lu
Z1ZpZGVvU291cmNlQ29jb2EoUmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiYmKTsKKworICAg
IC8vIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpPYnNlcnZlciBBUEkKKyAgICB2b2lkIHNhbXBs
ZUJ1ZmZlclVwZGF0ZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmLCBNZWRpYVNhbXBsZSYpIGZp
bmFsOworCisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAgc2l6ZV90IG1fbnVtYmVyT2ZG
cmFtZXMgeyAwIH07CisjZW5kaWYKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIFVTRShMSUJXRUJSVEMpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>