<?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>34005</bug_id>
          
          <creation_ts>2010-01-22 08:56:35 -0800</creation_ts>
          <short_desc>Safari pegs CPU and drops tons of frames using HTML5 Vimeo player</short_desc>
          <delta_ts>2010-05-08 00:00:12 -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>Media</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Windows XP</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://vimeo.com/7352118</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar, PlatformOnly</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>38689</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Roben (:aroben)">aroben</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>andersca</cc>
    
    <cc>cmarrin</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>eric</cc>
    
    <cc>jer.noble</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>183666</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2010-01-22 08:56:35 -0800</bug_when>
    <thetext>To reproduce:

1. Go to http://vimeo.com/7352118
2. Click &quot;Switch to HTML5 player&quot; in the bottom-right
3. When the page reloads, click the play button in the video player
4. Look in Task Manager

Safari is pegging the CPU and is dropping tons of video frames.

This does not happen on Mac.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183667</commentid>
    <comment_count>1</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2010-01-22 08:57:12 -0800</bug_when>
    <thetext>&lt;rdar://problem/7569713&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184000</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2010-01-23 09:41:14 -0800</bug_when>
    <thetext>https://bugs.webkit.org/show_bug.cgi?id=34007 makes the performance much better, though it still isn&apos;t great.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218134</commentid>
    <comment_count>3</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-04-27 19:05:04 -0700</bug_when>
    <thetext>I am about to attach a number of patches to address this bug.  Each are interdependent on the others, and the build will likely fail unless all are submitted at once.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218136</commentid>
    <comment_count>4</comment_count>
      <attachid>54499</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-04-27 19:06:09 -0700</bug_when>
    <thetext>Created attachment 54499
Patch which breaks up QTMovieWin into QTMovieWin and QTMovie</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218137</commentid>
    <comment_count>5</comment_count>
      <attachid>54500</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-04-27 19:07:46 -0700</bug_when>
    <thetext>Created attachment 54500
New classes in QTMovieWin</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218138</commentid>
    <comment_count>6</comment_count>
      <attachid>54501</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-04-27 19:08:32 -0700</bug_when>
    <thetext>Created attachment 54501
Changes to MediaPlayerPrivateQuickTimeWin</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218141</commentid>
    <comment_count>7</comment_count>
      <attachid>54502</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-04-27 19:09:32 -0700</bug_when>
    <thetext>Created attachment 54502
New class MediaPlayerPrivateQuickTimeVisualContext</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218145</commentid>
    <comment_count>8</comment_count>
      <attachid>54504</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-04-27 19:11:38 -0700</bug_when>
    <thetext>Created attachment 54504
New class MediaPlayerPrivateTaskTimer</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218147</commentid>
    <comment_count>9</comment_count>
      <attachid>54505</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-04-27 19:17:11 -0700</bug_when>
    <thetext>Created attachment 54505
Added MediaPlayerPrivateQuickTimeWin support to MediaPlayer</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218148</commentid>
    <comment_count>10</comment_count>
      <attachid>54506</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-04-27 19:17:48 -0700</bug_when>
    <thetext>Created attachment 54506
Added cancelCallOnMainThread</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218149</commentid>
    <comment_count>11</comment_count>
      <attachid>54507</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-04-27 19:18:31 -0700</bug_when>
    <thetext>Created attachment 54507
ChangeLog changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218151</commentid>
    <comment_count>12</comment_count>
      <attachid>54508</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-04-27 19:20:17 -0700</bug_when>
    <thetext>Created attachment 54508
VCProj project file changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218152</commentid>
    <comment_count>13</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-04-27 19:20:56 -0700</bug_when>
    <thetext>The proposed patches have now all been added.  The bug as a whole is ready for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218177</commentid>
    <comment_count>14</comment_count>
      <attachid>54512</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-04-27 20:46:38 -0700</bug_when>
    <thetext>Created attachment 54512
Patch which breaks up QTMovieWin into QTMovieWin and QTMovie

Corrected index prefix of patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218178</commentid>
    <comment_count>15</comment_count>
      <attachid>54513</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-04-27 20:47:35 -0700</bug_when>
    <thetext>Created attachment 54513
New classes in QTMovieWin

Corrected index prefix of patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218179</commentid>
    <comment_count>16</comment_count>
      <attachid>54514</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-04-27 20:48:33 -0700</bug_when>
    <thetext>Created attachment 54514
Changes to MediaPlayerPrivateQuickTimeWin

Corrected index prefix of patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218180</commentid>
    <comment_count>17</comment_count>
      <attachid>54515</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-04-27 20:49:00 -0700</bug_when>
    <thetext>Created attachment 54515
New class MediaPlayerPrivateQuickTimeVisualContext 

Corrected index prefix of patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218181</commentid>
    <comment_count>18</comment_count>
      <attachid>54516</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-04-27 20:49:32 -0700</bug_when>
    <thetext>Created attachment 54516
New class MediaPlayerPrivateTaskTimer 

Corrected index prefix of patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218182</commentid>
    <comment_count>19</comment_count>
      <attachid>54517</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-04-27 20:49:55 -0700</bug_when>
    <thetext>Created attachment 54517
Added MediaPlayerPrivateQuickTimeWin support to MediaPlayer 

Corrected index prefix of patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218183</commentid>
    <comment_count>20</comment_count>
      <attachid>54518</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-04-27 20:51:13 -0700</bug_when>
    <thetext>Created attachment 54518
Part 3: JavaScriptCore: Added cancelCallOnMainThread

Corrected index prefix of patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218184</commentid>
    <comment_count>21</comment_count>
      <attachid>54519</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-04-27 20:52:45 -0700</bug_when>
    <thetext>Created attachment 54519
ChangeLog changes. 

Corrected index prefix of patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218185</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-27 20:54:41 -0700</bug_when>
    <thetext>Attachment 54517 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebCore/platform/graphics/MediaPlayer.cpp:50:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 1 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>218186</commentid>
    <comment_count>23</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-04-27 21:06:58 -0700</bug_when>
    <thetext>It&apos;s going to be really hard to review this. Is it possible to make a set of incremental patches, each of which can stand on its own?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218346</commentid>
    <comment_count>24</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2010-04-28 05:50:08 -0700</bug_when>
    <thetext>It looks like these patches introduce dependencies on CoreVideo. But CoreVideo isn&apos;t included in WebKitSupportLibrary, so this won&apos;t work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218402</commentid>
    <comment_count>25</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-04-28 08:13:14 -0700</bug_when>
    <thetext>The calls to CVGetCurrentHostTime and CVGetHostClockFrequency could be moved into QTMovieWin, which links against CVClient.lib, included in the QuickTime SDK.  I&apos;ll update the patches, removing the dependency on CoreVideo in WebKit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218407</commentid>
    <comment_count>26</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2010-04-28 08:18:36 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; The calls to CVGetCurrentHostTime and CVGetHostClockFrequency could be moved
&gt; into QTMovieWin, which links against CVClient.lib, included in the QuickTime
&gt; SDK.  I&apos;ll update the patches, removing the dependency on CoreVideo in WebKit.

Oh, I didn&apos;t realize CoreVideo was part of the QuickTime SDK. I think the only reason we have a separate QTMovieWin.dll is to work around conflicts between QuickTime&apos;s CF and the one used by WebKit. If that isn&apos;t an issue here, then having WebKit link to CoreVideo seems fine. (But your solution sounds like it will work, too.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218424</commentid>
    <comment_count>27</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-04-28 09:20:14 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; Oh, I didn&apos;t realize CoreVideo was part of the QuickTime SDK. I think the only
&gt; reason we have a separate QTMovieWin.dll is to work around conflicts between
&gt; QuickTime&apos;s CF and the one used by WebKit. If that isn&apos;t an issue here, then
&gt; having WebKit link to CoreVideo seems fine. 

Unfortunately, QuickTime doesn&apos;t link against the same CoreVideo that we would, so there&apos;s a similar situation there to the CF one.

The only remaining issue is one of constants defined in CoreVideo headers.  Right now, we&apos;re doing things like: 
    if (buffer.pixelFormat() == kCVPixelFormat_32ARGB).  
We could convert those checks into things like: 
    if (buffer.pixelFormatIs32ARGB())
...and be in the clear there too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218470</commentid>
    <comment_count>28</comment_count>
      <attachid>54578</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-04-28 10:51:09 -0700</bug_when>
    <thetext>Created attachment 54578
Part 1.1: QTMovieWin: The breakup of QTMovieWin

In this patch, QTMovie.cpp/h are new files.  In the obseleted patch &lt;https://bugs.webkit.org/attachment.cgi?id=54512&amp;action=edit&gt; those files are diffed as modified copies of QTMovieWin.cpp/h.  The old patch may be easier to read while reviewing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218472</commentid>
    <comment_count>29</comment_count>
      <attachid>54580</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-04-28 10:52:04 -0700</bug_when>
    <thetext>Created attachment 54580
Part 2: QTMovieWin: New Classes QTPixelBuffer, QTCFDictionary, and QTMovieVisualContext</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218476</commentid>
    <comment_count>30</comment_count>
      <attachid>54581</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-04-28 10:53:41 -0700</bug_when>
    <thetext>Created attachment 54581
Part 1.2: WebCore: The breakup of MediaPlayerPrivateQuickTimeWin</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218478</commentid>
    <comment_count>31</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2010-04-28 10:54:27 -0700</bug_when>
    <thetext>(In reply to comment #28)
&gt; Created an attachment (id=54578) [details]
&gt; Part 1.1: QTMovieWin: The breakup of QTMovieWin
&gt; 
&gt; In this patch, QTMovie.cpp/h are new files.  In the obseleted patch
&gt; &lt;https://bugs.webkit.org/attachment.cgi?id=54512&amp;action=edit&gt; those files are
&gt; diffed as modified copies of QTMovieWin.cpp/h.  The old patch may be easier to
&gt; read while reviewing.

Why not do it that way in this patch, too? Not only does it ease reviewing, but it preserves the code&apos;s history in Subversion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218481</commentid>
    <comment_count>32</comment_count>
      <attachid>54582</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-04-28 10:55:05 -0700</bug_when>
    <thetext>Created attachment 54582
Part 4: WebCore: New class MediaPlayerPrivateQuickTimeVisualContext</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218482</commentid>
    <comment_count>33</comment_count>
      <attachid>54583</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-04-28 10:56:25 -0700</bug_when>
    <thetext>Created attachment 54583
Part 5: WebCore: MediaPlayer adds MediaPlayerQuickTimeVisualContext to its list of MediaPlayerPrivates</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218485</commentid>
    <comment_count>34</comment_count>
      <attachid>54584</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-04-28 10:57:41 -0700</bug_when>
    <thetext>Created attachment 54584
Part 6: VCProj project file changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218512</commentid>
    <comment_count>35</comment_count>
      <attachid>54594</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-04-28 11:29:18 -0700</bug_when>
    <thetext>Created attachment 54594
Part 1.1: QTMovieWin: The breakup of QTMovieWin

QTMovie.cpp/h are back to being modified copies of QTMovieWin.cpp/h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218513</commentid>
    <comment_count>36</comment_count>
      <attachid>54595</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-04-28 11:30:07 -0700</bug_when>
    <thetext>Created attachment 54595
Part 4: WebCore: New class MediaPlayerPrivateQuickTimeVisualContext

MediaPlayerPrivateQuickTimeVisualContext.cpp/h are back to being modified copies of MediaPlayerPrivateQuickTimeWin.cpp/h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218517</commentid>
    <comment_count>37</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-28 11:31:50 -0700</bug_when>
    <thetext>Attachment 54580 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebCore/platform/graphics/win/QTMovieVisualContext.cpp:252:  Could not find a newline character at the end of the file.  [whitespace/ending_newline] [5]
WebCore/platform/graphics/win/QTPixelBuffer.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 2 in 6 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>218519</commentid>
    <comment_count>38</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-28 11:33:42 -0700</bug_when>
    <thetext>Attachment 54594 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebCore/platform/graphics/win/QTMovie.cpp:32:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/platform/graphics/win/QTMovieWin.cpp:32:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 2 in 6 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>218520</commentid>
    <comment_count>39</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-28 11:34:16 -0700</bug_when>
    <thetext>Attachment 54595 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebCore/platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.h:26:  #ifndef header guard has wrong style, please use: MediaPlayerPrivateQuickTimeVisualContext_h  [build/header_guard] [5]
WebCore/platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:29:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebCore/platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:31:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 3 in 2 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>218525</commentid>
    <comment_count>40</comment_count>
      <attachid>54599</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-04-28 11:44:08 -0700</bug_when>
    <thetext>Created attachment 54599
Part 2: QTMovieWin: New Classes QTPixelBuffer, QTCFDictionary, and QTMovieVisualContext

Fixed style errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218526</commentid>
    <comment_count>41</comment_count>
      <attachid>54600</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-04-28 11:44:40 -0700</bug_when>
    <thetext>Created attachment 54600
Part 1.1: QTMovieWin: The breakup of QTMovieWin

Fixed style errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218527</commentid>
    <comment_count>42</comment_count>
      <attachid>54601</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-04-28 11:45:19 -0700</bug_when>
    <thetext>Created attachment 54601
Part 4: WebCore: New class MediaPlayerPrivateQuickTimeVisualContext

Fixed style errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218529</commentid>
    <comment_count>43</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-04-28 11:48:25 -0700</bug_when>
    <thetext>Okay, the patches should finally be back to review-ready.  Simon, I&apos;ve structured the patches so that each &quot;Part&quot; is intra-dependent and only depends on previous parts.  You should be able to review them in order.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218534</commentid>
    <comment_count>44</comment_count>
      <attachid>54602</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-04-28 11:56:43 -0700</bug_when>
    <thetext>Created attachment 54602
Part 3: JavaScriptCore: Added cancelCallOnMainThread

Updated the patch so that it will (hopefully) succeed against the latest revision of JavaScriptCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219273</commentid>
    <comment_count>45</comment_count>
      <attachid>54602</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2010-04-29 16:49:57 -0700</bug_when>
    <thetext>Comment on attachment 54602
Part 3: JavaScriptCore: Added cancelCallOnMainThread

It would be cleaner if callOnMainThread returned some kind of unique ID that you could pass to cancelCallOnMainThread, but perhaps that would be a more intrusive change. This seems like an ok approach though.

r=me (assuming there are appropriate ChangeLog entries with the other chunks; or it&apos;s ok to land this standalone w/ its own ChangeLog entry).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219276</commentid>
    <comment_count>46</comment_count>
      <attachid>54581</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2010-04-29 16:53:18 -0700</bug_when>
    <thetext>Comment on attachment 54581
Part 1.2: WebCore: The breakup of MediaPlayerPrivateQuickTimeWin

r=me assuming appropriate ChangeLog entry.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219277</commentid>
    <comment_count>47</comment_count>
      <attachid>54519</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2010-04-29 16:54:56 -0700</bug_when>
    <thetext>Comment on attachment 54519
ChangeLog changes. 

If you plan to land these separately, I suggest including them in the individual patches. Also, you should have the title of the bug above the bugzilla bug URL in our ChangeLog format.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219365</commentid>
    <comment_count>48</comment_count>
      <attachid>54584</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2010-04-29 22:14:22 -0700</bug_when>
    <thetext>Comment on attachment 54584
Part 6: VCProj project file changes

&gt; -&lt;?xml version=&quot;1.0&quot; encoding=&quot;Windows-1252&quot;?&gt;
&gt; +&lt;?xml version=&quot;1.0&quot; encoding=&quot;windows-1251&quot;?&gt;
&gt;
Please check with aroben or sfalken to see if the encoding change is significant.

rs=me assuming this change is OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219366</commentid>
    <comment_count>49</comment_count>
      <attachid>54601</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2010-04-29 22:30:47 -0700</bug_when>
    <thetext>Comment on attachment 54601
Part 4: WebCore: New class MediaPlayerPrivateQuickTimeVisualContext

It looks like in this patch you have both renamed the file and changed the code? If so it will be much easier to review if you svn mv it in one patch and changed the code in a follow up patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219472</commentid>
    <comment_count>50</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2010-04-30 06:53:01 -0700</bug_when>
    <thetext>(In reply to comment #48)
&gt; (From update of attachment 54584 [details])
&gt; &gt; -&lt;?xml version=&quot;1.0&quot; encoding=&quot;Windows-1252&quot;?&gt;
&gt; &gt; +&lt;?xml version=&quot;1.0&quot; encoding=&quot;windows-1251&quot;?&gt;
&gt; &gt;
&gt; Please check with aroben or sfalken to see if the encoding change is
&gt; significant.
&gt; 
&gt; rs=me assuming this change is OK.

Yes, this is fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219674</commentid>
    <comment_count>51</comment_count>
      <attachid>54599</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2010-04-30 17:58:29 -0700</bug_when>
    <thetext>Comment on attachment 54599
Part 2: QTMovieWin: New Classes QTPixelBuffer, QTCFDictionary, and QTMovieVisualContext

&gt; Index: WebCore/platform/graphics/win/QTCFDictionary.cpp
&gt; ===================================================================
&gt; --- WebCore/platform/graphics/win/QTCFDictionary.cpp	(revision 0)
&gt; +++ WebCore/platform/graphics/win/QTCFDictionary.cpp	(revision 0)
&gt; @@ -0,0 +1,60 @@
&gt; +/*
&gt; + * Copyright (C) 2007, 2008, 2009, 2010 Apple, Inc.  All rights reserved.
&gt; + *
&gt; + * Redistribution and use in source and binary forms, with or without
&gt; + * modification, are permitted provided that the following conditions
&gt; + * are met:
&gt; + * 1. Redistributions of source code must retain the above copyright
&gt; + *    notice, this list of conditions and the following disclaimer.
&gt; + * 2. Redistributions in binary form must reproduce the above copyright
&gt; + *    notice, this list of conditions and the following disclaimer in the
&gt; + *    documentation and/or other materials provided with the distribution.
&gt; + *
&gt; + * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS&apos;&apos; AND ANY
&gt; + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
&gt; + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
&gt; + * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
&gt; + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
&gt; + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
&gt; + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
&gt; + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
&gt; + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
&gt; + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
&gt; + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
&gt; + */
&gt; +
&gt; +#include &quot;config.h&quot;
&gt; +
&gt; +#include &quot;QTCFDictionary.h&quot;
&gt; +
&gt; +#include &lt;CFData.h&gt;
&gt; +#include &lt;windows.h&gt;
&gt; +
&gt; +CFDataRef QTCFPropertyListCreateXMLData(CFAllocatorRef allocator, CFPropertyListRef propertyList)
&gt; +{
&gt; +
&gt; +    typedef CFDataRef (* pfnCFPropertyListCreateXMLData)(CFAllocatorRef allocator, CFPropertyListRef propertyList);
&gt; +    static pfnCFPropertyListCreateXMLData pCFPropertyListCreateXMLData = 0;
&gt; +    if (!pCFPropertyListCreateXMLData) {
&gt; +        HMODULE qtcfDLL = LoadLibraryW(L&quot;QTCF.dll&quot;);
&gt; +        if (qtcfDLL)
&gt; +            pCFPropertyListCreateXMLData = reinterpret_cast&lt;pfnCFPropertyListCreateXMLData&gt;(GetProcAddress(qtcfDLL, &quot;QTCF_CFPropertyListCreateXMLData&quot;));
&gt; +    }
&gt; +
&gt; +    if (pCFPropertyListCreateXMLData)
&gt; +        return pCFPropertyListCreateXMLData(allocator, propertyList);
&gt; +    return 0;
&gt; +}
&gt; +
&gt; +CFDictionaryRef QTCFDictionaryCreateCopyWithDataCallback(CFAllocatorRef allocator, CFDictionaryRef dictionary, QTCFDictonaryCreateFromDataCallback callback) 
&gt; +{
&gt; +    ASSERT(dictionary);
&gt; +    ASSERT(callback);
&gt; +
&gt; +    CFDataRef data = QTCFPropertyListCreateXMLData(kCFAllocatorDefault, dictionary);
&gt; +    CFDictionaryRef outputDictionary = callback(allocator, CFDataGetBytePtr(data), CFDataGetLength(data));
&gt; +    if (data)
&gt; +        CFRelease(data);
&gt; +
&gt; +    return outputDictionary;
&gt; +}
&gt; Index: WebCore/platform/graphics/win/QTCFDictionary.h
&gt; ===================================================================
&gt; --- WebCore/platform/graphics/win/QTCFDictionary.h	(revision 0)
&gt; +++ WebCore/platform/graphics/win/QTCFDictionary.h	(revision 0)
&gt; @@ -0,0 +1,44 @@
&gt; +/*
&gt; + * Copyright (C) 2007, 2008, 2009, 2010 Apple, Inc.  All rights reserved.
&gt; + *
&gt; + * Redistribution and use in source and binary forms, with or without
&gt; + * modification, are permitted provided that the following conditions
&gt; + * are met:
&gt; + * 1. Redistributions of source code must retain the above copyright
&gt; + *    notice, this list of conditions and the following disclaimer.
&gt; + * 2. Redistributions in binary form must reproduce the above copyright
&gt; + *    notice, this list of conditions and the following disclaimer in the
&gt; + *    documentation and/or other materials provided with the distribution.
&gt; + *
&gt; + * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS&apos;&apos; AND ANY
&gt; + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
&gt; + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
&gt; + * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
&gt; + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
&gt; + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
&gt; + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
&gt; + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
&gt; + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
&gt; + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
&gt; + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
&gt; + */
&gt; +
&gt; +#ifndef QTCFDictionary_h
&gt; +#define QTCFDictionary_h
&gt; +
&gt; +#ifdef QTMOVIEWIN_EXPORTS
&gt; +#define QTMOVIEWIN_API __declspec(dllexport)
&gt; +#else
&gt; +#define QTMOVIEWIN_API __declspec(dllimport)
&gt; +#endif
&gt; +
&gt; +#include &lt;CoreFoundation/CFBase.h&gt;
&gt; +
&gt; +typedef const struct __CFDictionary * CFDictionaryRef;
&gt; +typedef const struct __CFAllocator * CFAllocatorRef;
&gt; +
&gt; +typedef CFDictionaryRef (* QTCFDictonaryCreateFromDataCallback)(CFAllocatorRef, const UInt8*, CFIndex);
&gt; +
&gt; +QTMOVIEWIN_API CFDictionaryRef QTCFDictionaryCreateCopyWithDataCallback(CFAllocatorRef, CFDictionaryRef, QTCFDictonaryCreateFromDataCallback);
&gt; +
&gt; +#endif
&gt; Index: WebCore/platform/graphics/win/QTMovieVisualContext.cpp
&gt; ===================================================================
&gt; --- WebCore/platform/graphics/win/QTMovieVisualContext.cpp	(revision 0)
&gt; +++ WebCore/platform/graphics/win/QTMovieVisualContext.cpp	(revision 0)
&gt; @@ -0,0 +1,252 @@
&gt; +/*
&gt; + * Copyright (C) 2007, 2008, 2009, 2010 Apple, Inc.  All rights reserved.
&gt; + *
&gt; + * Redistribution and use in source and binary forms, with or without
&gt; + * modification, are permitted provided that the following conditions
&gt; + * are met:
&gt; + * 1. Redistributions of source code must retain the above copyright
&gt; + *    notice, this list of conditions and the following disclaimer.
&gt; + * 2. Redistributions in binary form must reproduce the above copyright
&gt; + *    notice, this list of conditions and the following disclaimer in the
&gt; + *    documentation and/or other materials provided with the distribution.
&gt; + *
&gt; + * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS&apos;&apos; AND ANY
&gt; + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
&gt; + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
&gt; + * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
&gt; + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
&gt; + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
&gt; + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
&gt; + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
&gt; + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
&gt; + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
&gt; + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
&gt; + */
&gt; +#include &quot;config.h&quot;
&gt; +
&gt; +#include &quot;QTMovieVisualContext.h&quot;
&gt; +
&gt; +#include &quot;QTMovieTask.h&quot;
&gt; +#include &lt;CVBase.h&gt;
&gt; +#include &lt;CVHostTime.h&gt;
&gt; +#include &lt;ImageCompression.h&gt;
&gt; +#include &lt;Movies.h&gt;
&gt; +#include &lt;d3d9types.h&gt;
&gt; +#include &lt;windows.h&gt;
&gt; +
&gt; +struct QTCVTimeStamp {
&gt; +    CVTimeStamp t;
&gt; +};
&gt; +
&gt; +class QTMovieVisualContextPriv {
&gt; +public:
&gt; +    QTMovieVisualContextPriv(QTMovieVisualContext* parent, QTMovieVisualContextClient* client, CFDictionaryRef options);
&gt; +    ~QTMovieVisualContextPriv();
&gt; +
&gt; +    bool isImageAvailableForTime(const QTCVTimeStamp*);
&gt; +    QTPixelBuffer imageForTime(const QTCVTimeStamp*);
&gt; +    void task();
&gt; +
&gt; +    QTVisualContextRef get();
&gt; +
&gt; +    double getCurrentHostTime();
&gt; +    double getHostClockFrequency();
&gt; +
&gt; +    void setMovie(RefPtr&lt;QTMovie&gt;);
&gt; +    RefPtr&lt;QTMovie&gt; movie() const;
&gt; +    
&gt; +    static void imageAvailableCallback(QTVisualContextRef visualContext, const CVTimeStamp *timeStamp, void *refCon);
&gt; +
&gt; +private:
&gt; +    QTMovieVisualContext* m_parent;
&gt; +    QTMovieVisualContextClient* m_client;
&gt; +    QTVisualContextRef m_visualContext;
&gt; +    RefPtr&lt;QTMovie&gt; m_movie;
&gt; +
&gt; +};
&gt; +
&gt; +QTMovieVisualContextPriv::QTMovieVisualContextPriv(QTMovieVisualContext* parent, QTMovieVisualContextClient* client, CFDictionaryRef options) 
&gt; +        : m_parent(parent)
&gt; +        , m_client(client)
&gt; +        , m_visualContext(0)
&gt; +{
&gt; +    HMODULE qtmlDLL = ::LoadLibraryW(L&quot;QTMLClient.dll&quot;);
&gt; +    if (qtmlDLL) {
&gt; +        typedef OSStatus ( __cdecl *pfnQTPixelBufferContextCreate)(CFAllocatorRef, CFDictionaryRef, QTVisualContextRef*);
&gt; +        pfnQTPixelBufferContextCreate pPixelBufferContextCreate = reinterpret_cast&lt;pfnQTPixelBufferContextCreate&gt;(GetProcAddress(qtmlDLL, &quot;QTPixelBufferContextCreate&quot;));
&gt; +        if (pPixelBufferContextCreate) {
&gt; +            OSStatus status = pPixelBufferContextCreate(kCFAllocatorDefault, options, &amp;m_visualContext);
&gt; +            if (status == noErr &amp;&amp; m_visualContext)
&gt; +                QTVisualContextSetImageAvailableCallback(m_visualContext, &amp;QTMovieVisualContextPriv::imageAvailableCallback, static_cast&lt;void*&gt;(this));
&gt; +        }
&gt; +    }
&gt; +}
&gt; +
&gt; +QTMovieVisualContextPriv::~QTMovieVisualContextPriv()
&gt; +{
&gt; +}
&gt; +
&gt; +bool QTMovieVisualContextPriv::isImageAvailableForTime(const QTCVTimeStamp* timeStamp)
&gt; +{
&gt; +    if (!m_visualContext)
&gt; +        return false;
&gt; +
&gt; +    return QTVisualContextIsNewImageAvailable(m_visualContext, reinterpret_cast&lt;const CVTimeStamp*&gt;(timeStamp)); 
&gt; +}
&gt; +
&gt; +QTPixelBuffer QTMovieVisualContextPriv::imageForTime(const QTCVTimeStamp* timeStamp)
&gt; +{
&gt; +    QTPixelBuffer pixelBuffer;
&gt; +    if (m_visualContext) {
&gt; +        CVImageBufferRef newImage = 0;
&gt; +        OSStatus status = QTVisualContextCopyImageForTime(m_visualContext, kCFAllocatorDefault, reinterpret_cast&lt;const CVTimeStamp*&gt;(timeStamp), &amp;newImage);
&gt; +        if (status == noErr) {
&gt; +            pixelBuffer.set(newImage);
&gt; +            CVPixelBufferRelease(newImage);
&gt; +        }
&gt; +    }
&gt; +    return pixelBuffer;
&gt; +}
&gt; +
&gt; +void QTMovieVisualContextPriv::task()
&gt; +{
&gt; +    if (m_visualContext)
&gt; +        QTVisualContextTask(m_visualContext);
&gt; +}
&gt; +
&gt; +QTVisualContextRef QTMovieVisualContextPriv::get() 
&gt; +{
&gt; +    return m_visualContext;
&gt; +}
&gt; +
&gt; +void QTMovieVisualContextPriv::setMovie(RefPtr&lt;QTMovie&gt; movie)
&gt; +{
&gt; +    if (m_movie) {
&gt; +        SetMovieVisualContext(m_movie-&gt;getMovieHandle(), 0);
&gt; +        m_movie = 0;
&gt; +    }
&gt; +
&gt; +    if (movie)
&gt; +        OSStatus status = SetMovieVisualContext(movie-&gt;getMovieHandle(), m_visualContext);
&gt; +    
&gt; +    m_movie = movie;
&gt; +}
&gt; +
&gt; +RefPtr&lt;QTMovie&gt; QTMovieVisualContextPriv::movie() const
&gt; +{
&gt; +    return m_movie;
&gt; +}
&gt; +
&gt; +void QTMovieVisualContextPriv::imageAvailableCallback(QTVisualContextRef visualContext, const CVTimeStamp *timeStamp, void *refCon) 
&gt; +{
&gt; +    if (!refCon)
&gt; +        return;
&gt; +
&gt; +    QTMovieVisualContextPriv* vc = static_cast&lt;QTMovieVisualContextPriv*&gt;(refCon);
&gt; +    if (!vc-&gt;m_client)
&gt; +        return;
&gt; +
&gt; +    vc-&gt;m_client-&gt;imageAvailableForTime(reinterpret_cast&lt;const QTCVTimeStamp*&gt;(timeStamp));
&gt; +}
&gt; +
&gt; +static OSStatus SetNumberValue(CFMutableDictionaryRef inDict, CFStringRef inKey, SInt32 inValue)
&gt; +{
&gt; +    CFNumberRef number;
&gt; + 
&gt; +    number = CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &amp;inValue);
&gt; +    if (!number) 
&gt; +        return coreFoundationUnknownErr;
&gt; + 
&gt; +    CFDictionarySetValue(inDict, inKey, number);
&gt; + 
&gt; +    CFRelease(number);
&gt; + 
&gt; +    return noErr;
&gt; +}
&gt; +
&gt; +CFDictionaryRef QTMovieVisualContext::getCGImageOptions()
&gt; +{
&gt; +    static CFDictionaryRef options = 0;
&gt; +
&gt; +    if (!options) {
&gt; +        CFMutableDictionaryRef  pixelBufferOptions = 0;
&gt; +        CFMutableDictionaryRef  visualContextOptions = 0;
&gt; +        OSStatus                status = noErr;
&gt; +        
&gt; +        // Pixel Buffer attributes
&gt; +        pixelBufferOptions = CFDictionaryCreateMutable(kCFAllocatorDefault, 0,
&gt; +                                                       &amp;kCFTypeDictionaryKeyCallBacks,
&gt; +                                                       &amp;kCFTypeDictionaryValueCallBacks);
&gt; +
&gt; +        // Use the k32BGRAPixelFormat, as QuartzCore will be able to use the pixels directly,
&gt; +        // without needing an aditional copy or rendering pass:s
&gt; +        SetNumberValue(pixelBufferOptions, kCVPixelBufferPixelFormatTypeKey, k32BGRAPixelFormat);
&gt; +            
&gt; +        // alignment
&gt; +        SetNumberValue(pixelBufferOptions, kCVPixelBufferBytesPerRowAlignmentKey, 16);
&gt; +
&gt; +        // compatability
&gt; +        SetNumberValue(pixelBufferOptions, kCVPixelBufferCGImageCompatibilityKey, 1);
&gt; +     
&gt; +        // QT Visual Context attributes
&gt; +        visualContextOptions = CFDictionaryCreateMutable(kCFAllocatorDefault, 0,
&gt; +                                                         &amp;kCFTypeDictionaryKeyCallBacks,
&gt; +                                                         &amp;kCFTypeDictionaryValueCallBacks);
&gt; +     
&gt; +        // set the pixel buffer attributes for the visual context
&gt; +        CFDictionarySetValue(visualContextOptions,
&gt; +                             kQTVisualContextPixelBufferAttributesKey,
&gt; +                             pixelBufferOptions);
&gt; +
&gt; +        if (pixelBufferOptions)
&gt; +            CFRelease(pixelBufferOptions);
&gt; +    
&gt; +        options = visualContextOptions;
&gt; +    }
&gt; +
&gt; +    return options;
&gt; +}
&gt; +
&gt; +QTMovieVisualContext::QTMovieVisualContext(QTMovieVisualContextClient* client, CFDictionaryRef options) 
&gt; +    : m_private(new QTMovieVisualContextPriv(this, client, options))
&gt; +{
&gt; +}
&gt; +
&gt; +QTMovieVisualContext::~QTMovieVisualContext()
&gt; +{
&gt; +}
&gt; +
&gt; +bool QTMovieVisualContext::isImageAvailableForTime(const QTCVTimeStamp* timeStamp)
&gt; +{
&gt; +    return m_private-&gt;isImageAvailableForTime(timeStamp);
&gt; +}
&gt; +
&gt; +QTPixelBuffer QTMovieVisualContext::imageForTime(const QTCVTimeStamp* timeStamp)
&gt; +{
&gt; +    return m_private-&gt;imageForTime(timeStamp);
&gt; +}
&gt; +
&gt; +void QTMovieVisualContext::task()
&gt; +{
&gt; +    m_private-&gt;task();
&gt; +}
&gt; +
&gt; +QTVisualContextRef QTMovieVisualContext::get() 
&gt; +{
&gt; +    return m_private-&gt;get();
&gt; +}
&gt; +
&gt; +void QTMovieVisualContext::setMovie(RefPtr&lt;QTMovie&gt; movie)
&gt; +{
&gt; +    m_private-&gt;setMovie(movie);
&gt; +}
&gt; +
&gt; +RefPtr&lt;QTMovie&gt; QTMovieVisualContext::movie() const
&gt; +{
&gt; +    return m_private-&gt;movie();
&gt; +}
&gt; +
&gt; +double QTMovieVisualContext::currentHostTime()
&gt; +{
&gt; +    return CVGetCurrentHostTime() / CVGetHostClockFrequency();
&gt; +}
&gt; Index: WebCore/platform/graphics/win/QTMovieVisualContext.h
&gt; ===================================================================
&gt; --- WebCore/platform/graphics/win/QTMovieVisualContext.h	(revision 0)
&gt; +++ WebCore/platform/graphics/win/QTMovieVisualContext.h	(revision 0)
&gt; @@ -0,0 +1,81 @@
&gt; +/*
&gt; + * Copyright (C) 2007, 2008, 2009, 2010 Apple, Inc.  All rights reserved.
&gt; + *
&gt; + * Redistribution and use in source and binary forms, with or without
&gt; + * modification, are permitted provided that the following conditions
&gt; + * are met:
&gt; + * 1. Redistributions of source code must retain the above copyright
&gt; + *    notice, this list of conditions and the following disclaimer.
&gt; + * 2. Redistributions in binary form must reproduce the above copyright
&gt; + *    notice, this list of conditions and the following disclaimer in the
&gt; + *    documentation and/or other materials provided with the distribution.
&gt; + *
&gt; + * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS&apos;&apos; AND ANY
&gt; + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
&gt; + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
&gt; + * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
&gt; + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
&gt; + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
&gt; + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
&gt; + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
&gt; + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
&gt; + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
&gt; + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
&gt; + */
&gt; +
&gt; +#ifndef QTMovieVisualContext_h
&gt; +#define QTMovieVisualContext_h
&gt; +
&gt; +#ifdef QTMOVIEWIN_EXPORTS
&gt; +#define QTMOVIEWIN_API __declspec(dllexport)
&gt; +#else
&gt; +#define QTMOVIEWIN_API __declspec(dllimport)
&gt; +#endif
&gt; +
&gt; +#include &quot;QTMovie.h&quot;
&gt; +#include &quot;QTMovieTask.h&quot;
&gt; +#include &quot;QTPixelBuffer.h&quot;
&gt; +#include &lt;WTF/OwnPtr.h&gt;
&gt; +#include &lt;WTF/RefCounted.h&gt;
&gt; +
&gt; +typedef struct OpaqueQTVisualContext*   QTVisualContextRef;
&gt; +
&gt; +// QTCVTimeStamp is a struct containing only a CVTimeStamp.  This is to 
&gt; +// work around the inability of CVTimeStamp to be forward declared, in 
&gt; +// addition to it being declared in different header files when building
&gt; +// the QTMovieWin and WebCore projects.
&gt; +struct QTCVTimeStamp;
&gt; +
&gt; +class QTMovieVisualContextClient {
&gt; +public:
&gt; +    virtual void imageAvailableForTime(const QTCVTimeStamp*) = 0;
&gt; +};
&gt; +
&gt; +class QTMOVIEWIN_API QTMovieVisualContext : public RefCounted&lt;QTMovieVisualContext&gt; {
&gt; +public:
&gt; +    QTMovieVisualContext(QTMovieVisualContextClient*, CFDictionaryRef options = 0);
&gt; +    ~QTMovieVisualContext();
&gt; +
&gt; +    bool isImageAvailableForTime(const QTCVTimeStamp*);
&gt; +    QTPixelBuffer imageForTime(const QTCVTimeStamp*);
&gt; +    void task();
&gt; +
&gt; +    QTVisualContextRef get();
&gt; +
&gt; +    double getCurrentHostTime();
&gt; +    double getHostClockFrequency();
&gt; +
&gt; +    void setMovie(RefPtr&lt;QTMovie&gt;);
&gt; +    RefPtr&lt;QTMovie&gt; movie() const;
&gt; +
&gt; +    static CFDictionaryRef getCGImageOptions();
&gt; +    static double currentHostTime();
&gt; +
&gt; +protected:
&gt; +    void setupVisualContext();
&gt; +
&gt; +    friend class QTMovieVisualContextPriv;
&gt; +    OwnPtr&lt;QTMovieVisualContextPriv&gt; m_private;
&gt; +};
&gt; +
&gt; +#endif
&gt; Index: WebCore/platform/graphics/win/QTPixelBuffer.cpp
&gt; ===================================================================
&gt; --- WebCore/platform/graphics/win/QTPixelBuffer.cpp	(revision 0)
&gt; +++ WebCore/platform/graphics/win/QTPixelBuffer.cpp	(revision 0)
&gt; @@ -0,0 +1,209 @@
&gt; +/*
&gt; + * Copyright (C) 2007, 2008, 2009, 2010 Apple, Inc.  All rights reserved.
&gt; + *
&gt; + * Redistribution and use in source and binary forms, with or without
&gt; + * modification, are permitted provided that the following conditions
&gt; + * are met:
&gt; + * 1. Redistributions of source code must retain the above copyright
&gt; + *    notice, this list of conditions and the following disclaimer.
&gt; + * 2. Redistributions in binary form must reproduce the above copyright
&gt; + *    notice, this list of conditions and the following disclaimer in the
&gt; + *    documentation and/or other materials provided with the distribution.
&gt; + *
&gt; + * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS&apos;&apos; AND ANY
&gt; + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
&gt; + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
&gt; + * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
&gt; + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
&gt; + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
&gt; + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
&gt; + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
&gt; + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
&gt; + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
&gt; + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
&gt; + */
&gt; +#include &quot;config.h&quot;
&gt; +
&gt; +#include &quot;QTPixelBuffer.h&quot;
&gt; +
&gt; +#include &lt;CFString.h&gt;
&gt; +#include &lt;CGColorSpace.h&gt;
&gt; +#include &lt;CGImage.h&gt;
&gt; +#include &lt;CVPixelBuffer.h&gt;
&gt; +#include &lt;QuickDraw.h&gt;
&gt; +
&gt; +QTPixelBuffer::QTPixelBuffer() : m_pixelBuffer(0) {}
&gt; +
&gt; +QTPixelBuffer::QTPixelBuffer(const QTPixelBuffer&amp; p) : m_pixelBuffer(p.m_pixelBuffer) 
&gt; +{
&gt; +    CVPixelBufferRetain(m_pixelBuffer);
&gt; +}
&gt; +
&gt; +QTPixelBuffer::QTPixelBuffer(CVPixelBufferRef ref) : m_pixelBuffer(ref)
&gt; +{
&gt; +    CVPixelBufferRetain(m_pixelBuffer);
&gt; +}
&gt; +
&gt; +QTPixelBuffer::~QTPixelBuffer() 
&gt; +{
&gt; +    clear();
&gt; +}
&gt; +
&gt; +QTPixelBuffer&amp; QTPixelBuffer::operator=(const QTPixelBuffer&amp; p) 
&gt; +{
&gt; +    set(p.m_pixelBuffer);
&gt; +    return *this;
&gt; +}
&gt; +
&gt; +void QTPixelBuffer::set(CVPixelBufferRef ref)
&gt; +{
&gt; +    CVPixelBufferRetain(ref);
&gt; +    CVPixelBufferRelease(m_pixelBuffer);
&gt; +    m_pixelBuffer = ref;
&gt; +}
&gt; +
&gt; +CVPixelBufferRef QTPixelBuffer::get()
&gt; +{
&gt; +    return m_pixelBuffer;
&gt; +}
&gt; +
&gt; +void QTPixelBuffer::clear()
&gt; +{
&gt; +    CVPixelBufferRelease(m_pixelBuffer);
&gt; +    m_pixelBuffer = 0;
&gt; +}
&gt; +
&gt; +CVReturn QTPixelBuffer::lockBaseAddress()
&gt; +{
&gt; +    return CVPixelBufferLockBaseAddress(m_pixelBuffer, 0);
&gt; +}
&gt; +
&gt; +CVReturn QTPixelBuffer::unlockBaseAddress()
&gt; +{
&gt; +    return CVPixelBufferUnlockBaseAddress(m_pixelBuffer, 0);
&gt; +}
&gt; +
&gt; +size_t QTPixelBuffer::width()
&gt; +{
&gt; +    return CVPixelBufferGetWidth(m_pixelBuffer);
&gt; +}
&gt; +
&gt; +size_t QTPixelBuffer::height()
&gt; +{
&gt; +    return CVPixelBufferGetHeight(m_pixelBuffer);
&gt; +}
&gt; +
&gt; +unsigned long QTPixelBuffer::pixelFormatType()
&gt; +{
&gt; +    OSType pixelFormatType = CVPixelBufferGetPixelFormatType(m_pixelBuffer);
&gt; +    return pixelFormatType;
&gt; +}
&gt; +
&gt; +bool QTPixelBuffer::pixelFormatIs32ARGB()
&gt; +{
&gt; +    return CVPixelBufferGetPixelFormatType(m_pixelBuffer) == k32ARGBPixelFormat;
&gt; +}
&gt; +
&gt; +bool QTPixelBuffer::pixelFormatIs32BGRA()
&gt; +{
&gt; +    return CVPixelBufferGetPixelFormatType(m_pixelBuffer) == k32BGRAPixelFormat;
&gt; +}
&gt; +
&gt; +void* QTPixelBuffer::baseAddress()
&gt; +{
&gt; +    return CVPixelBufferGetBaseAddress(m_pixelBuffer);
&gt; +}
&gt; +
&gt; +size_t QTPixelBuffer::bytesPerRow()
&gt; +{
&gt; +    return CVPixelBufferGetBytesPerRow(m_pixelBuffer);
&gt; +}
&gt; +
&gt; +size_t QTPixelBuffer::dataSize()
&gt; +{
&gt; +    return CVPixelBufferGetDataSize(m_pixelBuffer);
&gt; +}
&gt; +
&gt; +
&gt; +bool QTPixelBuffer::isPlanar()
&gt; +{
&gt; +    return CVPixelBufferIsPlanar(m_pixelBuffer);
&gt; +}
&gt; +
&gt; +size_t QTPixelBuffer::planeCount()
&gt; +{
&gt; +    return CVPixelBufferGetPlaneCount(m_pixelBuffer);
&gt; +}
&gt; +
&gt; +size_t QTPixelBuffer::widthOfPlane(size_t plane)
&gt; +{
&gt; +    return CVPixelBufferGetWidthOfPlane(m_pixelBuffer, plane);
&gt; +}
&gt; +
&gt; +size_t QTPixelBuffer::heightOfPlane(size_t plane)
&gt; +{
&gt; +    return CVPixelBufferGetHeightOfPlane(m_pixelBuffer, plane);
&gt; +}
&gt; +
&gt; +void* QTPixelBuffer::baseAddressOfPlane(size_t plane)
&gt; +{
&gt; +    return CVPixelBufferGetBaseAddressOfPlane(m_pixelBuffer, plane);
&gt; +}
&gt; +
&gt; +size_t QTPixelBuffer::bytesPerRowOfPlane(size_t plane)
&gt; +{
&gt; +    return CVPixelBufferGetBytesPerRowOfPlane(m_pixelBuffer, plane);
&gt; +}
&gt; +
&gt; +void QTPixelBuffer::getExtendedPixels(size_t* left, size_t* right, size_t* top, size_t* bottom)
&gt; +{
&gt; +    return CVPixelBufferGetExtendedPixels(m_pixelBuffer, left, right, top, bottom);
&gt; +}
&gt; +
&gt; +CFDictionaryRef QTPixelBuffer::attachments()
&gt; +{
&gt; +    CFDictionaryRef propogated = CVBufferGetAttachments(m_pixelBuffer, kCVAttachmentMode_ShouldPropagate);
&gt; +    return propogated;
&gt; +}
&gt; +
&gt; +void QTPixelBuffer::retainCallback(void* refcon)
&gt; +{
&gt; +    CVPixelBufferRetain(static_cast&lt;CVPixelBufferRef&gt;(refcon));
&gt; +}
&gt; +
&gt; +void QTPixelBuffer::releaseCallback(void* refcon)
&gt; +{
&gt; +    CVPixelBufferRelease(static_cast&lt;CVPixelBufferRef&gt;(refcon));
&gt; +}
&gt; +
&gt; +void QTPixelBuffer::imageQueueReleaseCallback(unsigned int type, uint64_t id, void* refcon)
&gt; +{
&gt; +    CVPixelBufferRelease(static_cast&lt;CVPixelBufferRef&gt;(refcon));
&gt; +}
&gt; +
&gt; +void QTPixelBuffer::dataProviderReleaseBytePointerCallback(void* refcon, const void* pointer)
&gt; +{
&gt; +    CVPixelBufferUnlockBaseAddress(static_cast&lt;CVPixelBufferRef&gt;(refcon), 0);
&gt; +}
&gt; +
&gt; +const void* QTPixelBuffer::dataProviderGetBytePointerCallback(void* refcon)
&gt; +{
&gt; +    CVPixelBufferLockBaseAddress(static_cast&lt;CVPixelBufferRef&gt;(refcon), 0);
&gt; +    return CVPixelBufferGetBaseAddress(static_cast&lt;CVPixelBufferRef&gt;(refcon));
&gt; +}
&gt; +
&gt; +size_t QTPixelBuffer::dataProviderGetBytesAtPositionCallback(void* refcon, void* buffer, size_t position, size_t count)
&gt; +{
&gt; +    char* data = (char*)CVPixelBufferGetBaseAddress(static_cast&lt;CVPixelBufferRef&gt;(refcon));
&gt; +    size_t size = CVPixelBufferGetDataSize(static_cast&lt;CVPixelBufferRef&gt;(refcon));
&gt; +    if (size - position &lt; count)
&gt; +        count = size - position;
&gt; +
&gt; +    memcpy(buffer, data+position, count);
&gt; +    return count;
&gt; +}
&gt; +
&gt; +void QTPixelBuffer::dataProviderReleaseInfoCallback(void* refcon)
&gt; +{
&gt; +    CVPixelBufferRelease(static_cast&lt;CVPixelBufferRef&gt;(refcon));
&gt; +}
&gt; Index: WebCore/platform/graphics/win/QTPixelBuffer.h
&gt; ===================================================================
&gt; --- WebCore/platform/graphics/win/QTPixelBuffer.h	(revision 0)
&gt; +++ WebCore/platform/graphics/win/QTPixelBuffer.h	(revision 0)
&gt; @@ -0,0 +1,97 @@
&gt; +/*
&gt; + * Copyright (C) 2007, 2008, 2009, 2010 Apple, Inc.  All rights reserved.
&gt; + *
&gt; + * Redistribution and use in source and binary forms, with or without
&gt; + * modification, are permitted provided that the following conditions
&gt; + * are met:
&gt; + * 1. Redistributions of source code must retain the above copyright
&gt; + *    notice, this list of conditions and the following disclaimer.
&gt; + * 2. Redistributions in binary form must reproduce the above copyright
&gt; + *    notice, this list of conditions and the following disclaimer in the
&gt; + *    documentation and/or other materials provided with the distribution.
&gt; + *
&gt; + * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS&apos;&apos; AND ANY
&gt; + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
&gt; + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
&gt; + * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
&gt; + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
&gt; + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
&gt; + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
&gt; + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
&gt; + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
&gt; + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
&gt; + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
&gt; + */
&gt; +
&gt; +#ifndef QTPixelBuffer_h
&gt; +#define QTPixelBuffer_h
&gt; +
&gt; +#ifdef QTMOVIEWIN_EXPORTS
&gt; +#define QTMOVIEWIN_API __declspec(dllexport)
&gt; +#else
&gt; +#define QTMOVIEWIN_API __declspec(dllimport)
&gt; +#endif
&gt; +
&gt; +#include &lt;stdint.h&gt;
&gt; +#include &lt;wtf/RefCounted.h&gt;
&gt; +
&gt; +typedef struct __CVBuffer *CVBufferRef;
&gt; +typedef CVBufferRef CVPixelBufferRef;
&gt; +typedef struct CGImage* CGImageRef;
&gt; +typedef int32_t CVReturn;
&gt; +typedef const struct __CFDictionary * CFDictionaryRef;
&gt; +
&gt; +// QTPixelBuffer wraps QuickTime&apos;s implementation of CVPixelBuffer, so its functions are
&gt; +// safe to call within WebKit.
&gt; +class QTMOVIEWIN_API QTPixelBuffer : RefCounted&lt;QTPixelBuffer&gt; {
&gt; +public:
&gt; +    QTPixelBuffer();
&gt; +    QTPixelBuffer(const QTPixelBuffer&amp;);
&gt; +    QTPixelBuffer(CVPixelBufferRef);
&gt; +    QTPixelBuffer&amp; operator=(const QTPixelBuffer&amp;);
&gt; +    ~QTPixelBuffer();
&gt; +
&gt; +    void set(CVPixelBufferRef);
&gt; +    CVPixelBufferRef get();
&gt; +    void clear();
&gt; +
&gt; +    CVReturn lockBaseAddress();
&gt; +    CVReturn unlockBaseAddress();
&gt; +    size_t width();
&gt; +    size_t height();
&gt; +
&gt; +    unsigned long pixelFormatType();
&gt; +    bool pixelFormatIs32ARGB();
&gt; +    bool pixelFormatIs32BGRA();
&gt; +    void* baseAddress();
&gt; +    size_t bytesPerRow();
&gt; +    size_t dataSize();
&gt; +
&gt; +    bool isPlanar();
&gt; +    size_t planeCount();
&gt; +    size_t widthOfPlane(size_t);
&gt; +    size_t heightOfPlane(size_t);
&gt; +    void* baseAddressOfPlane(size_t);
&gt; +    size_t bytesPerRowOfPlane(size_t);
&gt; +
&gt; +    void getExtendedPixels(size_t* left, size_t* right, size_t* top, size_t* bottom);
&gt; +    CFDictionaryRef attachments();
&gt; +
&gt; +    // Generic CFRetain/CFRelease callbacks
&gt; +    static void releaseCallback(void* refcon);
&gt; +    static void retainCallback(void* refcon);
&gt; +
&gt; +    // CAImageQueue callbacks
&gt; +    static void imageQueueReleaseCallback(unsigned int type, uint64_t id, void* refcon);
&gt; +
&gt; +    // CGDataProvider callbacks
&gt; +    static void dataProviderReleaseBytePointerCallback(void* refcon, const void* pointer);
&gt; +    static const void* dataProviderGetBytePointerCallback(void* refcon);
&gt; +    static size_t dataProviderGetBytesAtPositionCallback(void* refcon, void* buffer, size_t position, size_t count);
&gt; +    static void dataProviderReleaseInfoCallback(void* refcon);
&gt; +
&gt; +private:
&gt; +    CVPixelBufferRef m_pixelBuffer;
&gt; +};
&gt; +
&gt; +#endif
WebCore/platform/graphics/win/QTMovieVisualContext.cpp:50
 +      QTVisualContextRef get();
I think this should be renamed to visualContext() or something other than get().


WebCore/platform/graphics/win/QTMovieVisualContext.cpp:54
 +  
We mostly use get for functions that have out parameters. This should be currentHostTime() and hostClockFrequency(). Can these be const?

WebCore/platform/graphics/win/QTMovieVisualContext.cpp:56
 +      RefPtr&lt;QTMovie&gt; movie() const;
No need for this to return a RefPtr.

WebCore/platform/graphics/win/QTMovieVisualContext.cpp:55
 +      void setMovie(RefPtr&lt;QTMovie&gt;);
This should take a PassRefPtr to reduce ref churn.

WebCore/platform/graphics/win/QTMovieVisualContext.cpp:73
 +      HMODULE qtmlDLL = ::LoadLibraryW(L&quot;QTMLClient.dll&quot;);
Should this be a static variable? Is it OK to load the library everytime a QTMovieVisualContextPriv object is created?

WebCore/platform/graphics/win/QTMovieVisualContext.cpp:74
 +      if (qtmlDLL) {
An early return here would reduce indentation.

WebCore/platform/graphics/win/QTMovieVisualContext.cpp:105
 +              CVPixelBufferRelease(newImage);
Could QTPixelBuffer have an &quot;adopt&quot; member function that would take a reference? If so the CVPixelBufferRelease call could be omitted.

WebCore/platform/graphics/win/QTMovieVisualContext.cpp:134
 +  
Yup, looks like this could take a PassRefPtr.

WebCore/platform/graphics/win/QTMovieVisualContext.cpp:138
 +  }
And this could return a QTMovie * instead of a RefPtr.

WebCore/platform/graphics/win/QTMovieVisualContext.cpp:47
 +      QTPixelBuffer imageForTime(const QTCVTimeStamp*);
Can these be const?

WebCore/platform/graphics/win/QTMovieVisualContext.cpp:123
 +  {
You could return early here if (movie == m_movie). (Especially when movie is a PassRefPtr).

WebCore/platform/graphics/win/QTMovieVisualContext.h:63
 +      QTVisualContextRef get();
Again, a better name for this would be visualContext().

WebCore/platform/graphics/win/QTMovieVisualContext.h:66
 +      double getHostClockFrequency();
Same comments here as in QTMovieVisualContextPrivate.

WebCore/platform/graphics/win/QTMovieVisualContext.h:70
 +  
Same comments here as in QTMovieVisualContextPrivate.

WebCore/platform/graphics/win/QTPixelBuffer.cpp:35
 +  QTPixelBuffer::QTPixelBuffer() : m_pixelBuffer(0) {}
member initializers should go on a separate row.

WebCore/platform/graphics/win/QTPixelBuffer.cpp:37
 +  QTPixelBuffer::QTPixelBuffer(const QTPixelBuffer&amp; p) : m_pixelBuffer(p.m_pixelBuffer) 
Ditto.

WebCore/platform/graphics/win/QTPixelBuffer.cpp:42
 +  QTPixelBuffer::QTPixelBuffer(CVPixelBufferRef ref) : m_pixelBuffer(ref)
Ditto.

WebCore/platform/graphics/win/QTPixelBuffer.cpp:68
 +  }
Should be called &quot;pixelBuffer&quot; or something other than get.

WebCore/platform/graphics/win/QTPixelBuffer.cpp:74
 +  }
Does CVPixelBufferRelease work if m_pixelBuffer is 0?

WebCore/platform/graphics/win/QTPixelBuffer.h:62
 +  
Can width and height be const?

WebCore/platform/graphics/win/QTPixelBuffer.h:69
 +  
Can these be const? (Or at least some of them).

WebCore/platform/graphics/win/QTPixelBuffer.h:76
 +  
Const?

WebCore/platform/graphics/win/QTPixelBuffer.h:77
 +      void getExtendedPixels(size_t* left, size_t* right, size_t* top, size_t* bottom);
Maybe references would be better than pointers here?

WebCore/platform/graphics/win/QTPixelBuffer.cpp:166
 +      return propogated;
Can just merge these into a single line.

WebCore/platform/graphics/win/QTPixelBuffer.h:51
 +      QTPixelBuffer&amp; operator=(const QTPixelBuffer&amp;);
Come to think of it, I don&apos;t think ref counted objects should be copyable. Are the copy constructor and copy-assignment operators really needed?

WebCore/platform/graphics/win/QTPixelBuffer.h:82
 +      static void retainCallback(void* refcon);
What are these used for?

Patch looks good overall, but I&apos;d like to see my comments addressed in a new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219676</commentid>
    <comment_count>52</comment_count>
      <attachid>54600</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-04-30 18:03:25 -0700</bug_when>
    <thetext>Comment on attachment 54600
Part 1.1: QTMovieWin: The breakup of QTMovieWin

WebCore/platform/graphics/win/QTMovie.cpp:266
 +          m_private-&gt;m_clients.remove(indexOfClient);
Is this correct?  Do you really never want to remove the first client?

WebCore/platform/graphics/win/QTMovie.h:60
 +  class QTMOVIEWIN_API QTMovie : public RefCounted&lt;QTMovie&gt; {
It seems like this class should be renamed something like QTMovieView or QTMovieGWorld.  If you don&apos;t want to rename it in this round, please add a comment.

WebCore/platform/graphics/win/QTMovieTask.cpp:46
 +      static QTMovieTask* s_sharedTask = new QTMovieTask();
This should use the DEFINE_GLOBAL macro.

r=me but please consider those changes.WebCore/platform/graphics/win/QTMovieWin.h:75
 +      RefPtr&lt;QTMovie&gt; movie() const;
We don&apos;t ever pass or return RefPtr&apos;s.  Please see http://webkit.org/coding/RefPtr.html for more on that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219681</commentid>
    <comment_count>53</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-04-30 18:49:09 -0700</bug_when>
    <thetext>(In reply to comment #52)
&gt; (From update of attachment 54600 [details])
&gt; WebCore/platform/graphics/win/QTMovie.cpp:266
&gt;  +          m_private-&gt;m_clients.remove(indexOfClient);
&gt; Is this correct?  Do you really never want to remove the first client?

You&apos;re right, that should be a &quot;&gt;=&quot;

&gt; WebCore/platform/graphics/win/QTMovie.h:60
&gt;  +  class QTMOVIEWIN_API QTMovie : public RefCounted&lt;QTMovie&gt; {
&gt; It seems like this class should be renamed something like QTMovieView or
&gt; QTMovieGWorld.  If you don&apos;t want to rename it in this round, please add a
&gt; comment.

I agree that QTMovieWin isn&apos;t the correct name, and that QTMovieGWorld would be better.  I don&apos;t mind doing the re-naming this pass.

&gt; 
&gt; WebCore/platform/graphics/win/QTMovieTask.cpp:46
&gt;  +      static QTMovieTask* s_sharedTask = new QTMovieTask();
&gt; This should use the DEFINE_GLOBAL macro.
&gt; 
&gt; r=me but please consider those
&gt; changes.WebCore/platform/graphics/win/QTMovieWin.h:75
&gt;  +      RefPtr&lt;QTMovie&gt; movie() const;
&gt; We don&apos;t ever pass or return RefPtr&apos;s.  Please see
&gt; http://webkit.org/coding/RefPtr.html for more on that.

It seems like the convention is to move the default constructor into protected: and add a static constructor method which returns a PassRefPtr.  Should I do that as well to QTMovie, QTMovieGWorld, and QTMovieVisualContext?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219690</commentid>
    <comment_count>54</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-04-30 20:37:45 -0700</bug_when>
    <thetext>(In reply to comment #51)
&gt; WebCore/platform/graphics/win/QTMovieVisualContext.cpp:50
&gt;  +      QTVisualContextRef get();
&gt; I think this should be renamed to visualContext() or something other than
&gt; get().

Originally, I didn&apos;t like the looks of foo-&gt;visualContext()-&gt;visualContext().  (If the class &quot;Foo&quot; had an accessor which returned a QTVisualContext*.)  I considered &quot;platformVisualContext()&quot; or &quot;rawVisualContext()&quot; but didn&apos;t like any of those either.  &quot;get()&quot; was a cop-out.

How about &quot;visualContextRef()&quot;?

&gt; 
&gt; WebCore/platform/graphics/win/QTMovieVisualContext.cpp:54
&gt;  +  
&gt; We mostly use get for functions that have out parameters. This should be
&gt; currentHostTime() and hostClockFrequency(). Can these be const?

Better, they can be static.  Also, I&apos;ll just combine those two calls into one which does the division and returns a CFTimeInterval.

&gt; WebCore/platform/graphics/win/QTMovieVisualContext.cpp:56
&gt;  +      RefPtr&lt;QTMovie&gt; movie() const;
&gt; No need for this to return a RefPtr.

PassRefPtr instead.

&gt; WebCore/platform/graphics/win/QTMovieVisualContext.cpp:55
&gt;  +      void setMovie(RefPtr&lt;QTMovie&gt;);
&gt; This should take a PassRefPtr to reduce ref churn.

Yup.

&gt; WebCore/platform/graphics/win/QTMovieVisualContext.cpp:73
&gt;  +      HMODULE qtmlDLL = ::LoadLibraryW(L&quot;QTMLClient.dll&quot;);
&gt; Should this be a static variable? Is it OK to load the library everytime a
&gt; QTMovieVisualContextPriv object is created?

It absolutely can be.  LoadLibrary won&apos;t do any extra work if the DLL is already loaded, but it should be static anyway.

&gt; WebCore/platform/graphics/win/QTMovieVisualContext.cpp:74
&gt;  +      if (qtmlDLL) {
&gt; An early return here would reduce indentation.
&gt; 
&gt; WebCore/platform/graphics/win/QTMovieVisualContext.cpp:105
&gt;  +              CVPixelBufferRelease(newImage);
&gt; Could QTPixelBuffer have an &quot;adopt&quot; member function that would take a
&gt; reference? If so the CVPixelBufferRelease call could be omitted.

Yep.

&gt; WebCore/platform/graphics/win/QTMovieVisualContext.cpp:134
&gt;  +  
&gt; Yup, looks like this could take a PassRefPtr.

Ok.

&gt; WebCore/platform/graphics/win/QTMovieVisualContext.cpp:138
&gt;  +  }
&gt; And this could return a QTMovie * instead of a RefPtr.

Why not a return PassRefPtr?

&gt; WebCore/platform/graphics/win/QTMovieVisualContext.cpp:47
&gt;  +      QTPixelBuffer imageForTime(const QTCVTimeStamp*);
&gt; Can these be const?

Originally, I had thought that if they were, this-&gt;m_visualContext would be a &quot;const CVPixelBufferRef&quot;, and I&apos;d have to const_cast away the constness before passing it on to QTVisualContextIsImageAvailableForTime.  Apparently, (I just tried) this compiles just fine without the const_cast.   So, yes. :)

However, calling QTVisualContextCopyImageForTime may change the internal state of the QTVisualContext, so it&apos;s not necessarily a &quot;const&quot; operation.

&gt; WebCore/platform/graphics/win/QTMovieVisualContext.cpp:123
&gt;  +  {
&gt; You could return early here if (movie == m_movie). (Especially when movie is a
&gt; PassRefPtr).

Yep.
 
&gt; WebCore/platform/graphics/win/QTMovieVisualContext.h:63
&gt;  +      QTVisualContextRef get();
&gt; Again, a better name for this would be visualContext().

Yep.

&gt; WebCore/platform/graphics/win/QTMovieVisualContext.h:66
&gt;  +      double getHostClockFrequency();
&gt; Same comments here as in QTMovieVisualContextPrivate.

Yep.


&gt; WebCore/platform/graphics/win/QTMovieVisualContext.h:70
&gt;  +  
&gt; Same comments here as in QTMovieVisualContextPrivate.

Yep.

&gt; WebCore/platform/graphics/win/QTPixelBuffer.cpp:35
&gt;  +  QTPixelBuffer::QTPixelBuffer() : m_pixelBuffer(0) {}
&gt; member initializers should go on a separate row.

Ok.

&gt; WebCore/platform/graphics/win/QTPixelBuffer.cpp:37
&gt;  +  QTPixelBuffer::QTPixelBuffer(const QTPixelBuffer&amp; p) :
&gt; m_pixelBuffer(p.m_pixelBuffer) 
&gt; Ditto.

Ok.

&gt; WebCore/platform/graphics/win/QTPixelBuffer.cpp:42
&gt;  +  QTPixelBuffer::QTPixelBuffer(CVPixelBufferRef ref) : m_pixelBuffer(ref)
&gt; Ditto.

Ok.

&gt; WebCore/platform/graphics/win/QTPixelBuffer.cpp:68
&gt;  +  }
&gt; Should be called &quot;pixelBuffer&quot; or something other than get.

Similarly, perhaps &quot;pixelBufferRef()&quot;?

&gt; WebCore/platform/graphics/win/QTPixelBuffer.cpp:74
&gt;  +  }
&gt; Does CVPixelBufferRelease work if m_pixelBuffer is 0?

Yep.

&gt; WebCore/platform/graphics/win/QTPixelBuffer.h:62
&gt;  +  
&gt; Can width and height be const?

Same as above, yes.

&gt; WebCore/platform/graphics/win/QTPixelBuffer.h:69
&gt;  +  
&gt; Can these be const? (Or at least some of them).

All of the &quot;consty&quot; ones can, yes.

&gt; WebCore/platform/graphics/win/QTPixelBuffer.h:76
&gt;  +  
&gt; Const?

Sure.

&gt; WebCore/platform/graphics/win/QTPixelBuffer.h:77
&gt;  +      void getExtendedPixels(size_t* left, size_t* right, size_t* top,
&gt; size_t* bottom);
&gt; Maybe references would be better than pointers here?

The references will just be turned into pointers when we call CVPixelBufferGetExtendedPixels.  And if the caller only wanted to get the &quot;left&quot; extended pixel, they would still have to define and pass in all the other parameters anyway.

&gt; WebCore/platform/graphics/win/QTPixelBuffer.cpp:166
&gt;  +      return propogated;
&gt; Can just merge these into a single line. 

Sure thing.  (There used to be a CFShow() between those two lines, for debugging purposes.)

&gt; WebCore/platform/graphics/win/QTPixelBuffer.h:51
&gt;  +      QTPixelBuffer&amp; operator=(const QTPixelBuffer&amp;);
&gt; Come to think of it, I don&apos;t think ref counted objects should be copyable. Are
&gt; the copy constructor and copy-assignment operators really needed?

Nope.  These could be moved into private: and unimplemented.  

&gt; WebCore/platform/graphics/win/QTPixelBuffer.h:82
&gt;  +      static void retainCallback(void* refcon);
&gt; What are these used for?

Funny story.  You can&apos;t pass a CVPixelBuffer ref created in QTMovieWin.dll to a CFRetain or CFRelease defined in CoreFoundation.dll.  So whenever a retain or a release needs to be called on a CVPixelBufferRef, it needs to occur within QTMovieWin.dll.  

I defined three different types of retain/release callbacks in the QTPixelBuffer class: a straight CF-style retain/release callback that takes a single parameter, a CAImageQueue style release callback that takes a few other extraneous parameters, and a CGDataProvider style release callback.  

The CF-style retain/release callbacks are so you can put a CVPixelBufferRef in a CFArray (with the correct retain/release callbacks passed in during CFArray creation).  The CAImageQueue callbacks are for use with CAImageQueues (which don&apos;t take CVPixelBuffers directly, but want a callback they can use to release the underlying pixel data).  And the CGDataProvider callbacks are so the QTPixelBuffers can be used to create CGImages, backed by CGDataProviders, referencing the original pixel data in the CVPixelBuffer.

&gt; Patch looks good overall, but I&apos;d like to see my comments addressed in a new
&gt; patch.

Sure thing.  I&apos;ll post a replacement patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220159</commentid>
    <comment_count>55</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2010-05-03 10:20:16 -0700</bug_when>
    <thetext>(In reply to comment #54)
&gt; (In reply to comment #51)
&gt; &gt; WebCore/platform/graphics/win/QTMovieVisualContext.cpp:50
&gt; &gt;  +      QTVisualContextRef get();
&gt; &gt; I think this should be renamed to visualContext() or something other than
&gt; &gt; get().
&gt; 
&gt; Originally, I didn&apos;t like the looks of foo-&gt;visualContext()-&gt;visualContext(). 
&gt; (If the class &quot;Foo&quot; had an accessor which returned a QTVisualContext*.)  I
&gt; considered &quot;platformVisualContext()&quot; or &quot;rawVisualContext()&quot; but didn&apos;t like
&gt; any of those either.  &quot;get()&quot; was a cop-out.
&gt; 
&gt; How about &quot;visualContextRef()&quot;?

I like that!

&gt; &gt; WebCore/platform/graphics/win/QTMovieVisualContext.cpp:56
&gt; &gt;  +      RefPtr&lt;QTMovie&gt; movie() const;
&gt; &gt; No need for this to return a RefPtr.
&gt; 
&gt; PassRefPtr instead.

You don&apos;t want it to return a PassRefPtr, because then if someone does

context-&gt;movie()-&gt;doSomething()

that&apos;s going to ref and then deref the QTMovie object for no good reason.

&gt; &gt; WebCore/platform/graphics/win/QTMovieVisualContext.cpp:138
&gt; &gt;  +  }
&gt; &gt; And this could return a QTMovie * instead of a RefPtr.
&gt; 
&gt; Why not a return PassRefPtr?

See my comment above.

&gt; 
&gt; &gt; WebCore/platform/graphics/win/QTMovieVisualContext.cpp:47
&gt; &gt;  +      QTPixelBuffer imageForTime(const QTCVTimeStamp*);
&gt; &gt; Can these be const?
&gt; 
&gt; Originally, I had thought that if they were, this-&gt;m_visualContext would be a
&gt; &quot;const CVPixelBufferRef&quot;, and I&apos;d have to const_cast away the constness before
&gt; passing it on to QTVisualContextIsImageAvailableForTime.  Apparently, (I just
&gt; tried) this compiles just fine without the const_cast.   So, yes. :)
&gt; 
&gt; However, calling QTVisualContextCopyImageForTime may change the internal state
&gt; of the QTVisualContext, so it&apos;s not necessarily a &quot;const&quot; operation.
&gt;

Makes sense!
 
&gt; &gt; WebCore/platform/graphics/win/QTMovieVisualContext.cpp:123
&gt; &gt;  +  {
&gt; &gt; You could return early here if (movie == m_movie). (Especially when movie is a
&gt; &gt; PassRefPtr).
&gt; 
&gt; Yep.
&gt; 
&gt; &gt; WebCore/platform/graphics/win/QTMovieVisualContext.h:63
&gt; &gt;  +      QTVisualContextRef get();
&gt; &gt; Again, a better name for this would be visualContext().
&gt; 
&gt; Yep.
&gt; 

Or visualContextRef() :)

&gt; &gt; WebCore/platform/graphics/win/QTPixelBuffer.cpp:68
&gt; &gt;  +  }
&gt; &gt; Should be called &quot;pixelBuffer&quot; or something other than get.
&gt; 
&gt; Similarly, perhaps &quot;pixelBufferRef()&quot;?
&gt; 

Sounds good.

&gt; &gt; WebCore/platform/graphics/win/QTPixelBuffer.h:77
&gt; &gt;  +      void getExtendedPixels(size_t* left, size_t* right, size_t* top,
&gt; &gt; size_t* bottom);
&gt; &gt; Maybe references would be better than pointers here?
&gt; 
&gt; The references will just be turned into pointers when we call
&gt; CVPixelBufferGetExtendedPixels.  And if the caller only wanted to get the
&gt; &quot;left&quot; extended pixel, they would still have to define and pass in all the
&gt; other parameters anyway.

OK!

&gt; 
&gt; &gt; WebCore/platform/graphics/win/QTPixelBuffer.h:51
&gt; &gt;  +      QTPixelBuffer&amp; operator=(const QTPixelBuffer&amp;);
&gt; &gt; Come to think of it, I don&apos;t think ref counted objects should be copyable. Are
&gt; &gt; the copy constructor and copy-assignment operators really needed?
&gt; 
&gt; Nope.  These could be moved into private: and unimplemented.  

The way we do this is by inheriting from the &quot;Noncopyable&quot; object.

&gt; 
&gt; &gt; WebCore/platform/graphics/win/QTPixelBuffer.h:82
&gt; &gt;  +      static void retainCallback(void* refcon);
&gt; &gt; What are these used for?
&gt; 
&gt; Funny story.  You can&apos;t pass a CVPixelBuffer ref created in QTMovieWin.dll to a
&gt; CFRetain or CFRelease defined in CoreFoundation.dll.  So whenever a retain or a
&gt; release needs to be called on a CVPixelBufferRef, it needs to occur within
&gt; QTMovieWin.dll.  
&gt; 
&gt; I defined three different types of retain/release callbacks in the
&gt; QTPixelBuffer class: a straight CF-style retain/release callback that takes a
&gt; single parameter, a CAImageQueue style release callback that takes a few other
&gt; extraneous parameters, and a CGDataProvider style release callback.  
&gt; 
&gt; The CF-style retain/release callbacks are so you can put a CVPixelBufferRef in
&gt; a CFArray (with the correct retain/release callbacks passed in during CFArray
&gt; creation).  The CAImageQueue callbacks are for use with CAImageQueues (which
&gt; don&apos;t take CVPixelBuffers directly, but want a callback they can use to release
&gt; the underlying pixel data).  And the CGDataProvider callbacks are so the
&gt; QTPixelBuffers can be used to create CGImages, backed by CGDataProviders,
&gt; referencing the original pixel data in the CVPixelBuffer.
&gt; 

Ah, I see!

&gt; &gt; Patch looks good overall, but I&apos;d like to see my comments addressed in a new
&gt; &gt; patch.
&gt; 
&gt; Sure thing.  I&apos;ll post a replacement patch.

Great!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220816</commentid>
    <comment_count>56</comment_count>
      <attachid>55053</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-05-04 15:28:12 -0700</bug_when>
    <thetext>Created attachment 55053
Part 1.1: QTMovieWin: The breakup of QTMovieWin

Sam, I addressed your comments in this patch, except for the DEFINE_STATIC change.  That I left out because I could not find a way to declare a static non-const pointer with that macro.  Also, it appeared that the macro in question was designed to avoid file-level static initializers, and this static is function level.  If you want, I can still use the DEFINE_STATIC macro, and const_cast away the constness of the static variable before returning it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220818</commentid>
    <comment_count>57</comment_count>
      <attachid>55054</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-05-04 15:29:16 -0700</bug_when>
    <thetext>Created attachment 55054
Part 4.1: WebCore: New class MediaPlayerPrivateQuickTimeVisualContext, the copy</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220820</commentid>
    <comment_count>58</comment_count>
      <attachid>55056</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-05-04 15:30:05 -0700</bug_when>
    <thetext>Created attachment 55056
Part 4.2: WebCore: New class MediaPlayerPrivateQuickTimeVisualContext, the modification</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220822</commentid>
    <comment_count>59</comment_count>
      <attachid>55057</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-05-04 15:32:43 -0700</bug_when>
    <thetext>Created attachment 55057
Part 2: QTMovieWin: New Classes QTPixelBuffer, QTCFDictionary, and QTMovieVisualContext

Anders, I addressed all of your suggestions in this patch.  However, instead of making QTPixelBuffer non-copyable, I made it non-refcounted.  It was never used as a refcounted pointer, so there was no need for refcounting in the first place.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220825</commentid>
    <comment_count>60</comment_count>
      <attachid>55058</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-05-04 15:35:18 -0700</bug_when>
    <thetext>Created attachment 55058
Part 1.1: QTMovieWin: The breakup of QTMovieWin

Attached the wrong patch file previously.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220829</commentid>
    <comment_count>61</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-05-04 15:36:49 -0700</bug_when>
    <thetext>Attachment 55054 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebCore/platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.h:26:  #ifndef header guard has wrong style, please use: MediaPlayerPrivateQuickTimeVisualContext_h  [build/header_guard] [5]
WebCore/platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:29:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebCore/platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:31:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:57:  &quot;FrameView.h&quot; already included at WebCore/platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:34  [build/include] [4]
WebCore/platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:58:  &quot;Frame.h&quot; already included at WebCore/platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:33  [build/include] [4]
WebCore/platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:59:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:391:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:905:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
Total errors found: 8 in 2 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>220831</commentid>
    <comment_count>62</comment_count>
      <attachid>55063</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-05-04 15:39:34 -0700</bug_when>
    <thetext>Created attachment 55063
ChangeLog changes. 

Maciej, I added the title of the bug above the bug URL in each of the ChangeLog entries.  However, I did not break the ChangeLog diffs into each individual .patch, as there&apos;s a very good chance that committing the patches would cause collisions in the ChangeLog.  I thought it would be safer to leave the ChangeLog in its own, separate patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220836</commentid>
    <comment_count>63</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-05-04 15:42:10 -0700</bug_when>
    <thetext>For Parts 4.1 and 4.2, the style check is failing because the copy and modification portions are in separate patches.  if this is going to block submission, let me know and I&apos;ll re-unify them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221226</commentid>
    <comment_count>64</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-05-05 12:26:27 -0700</bug_when>
    <thetext>Looks like &quot;Part 2: QTMovieWin: New Classes QTPixelBuffer, QTCFDictionary, and QTMovieVisualContext&quot; and &quot;Part 1.1: QTMovieWin: The breakup of QTMovieWin&quot; are a copy of the same thing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221252</commentid>
    <comment_count>65</comment_count>
      <attachid>55149</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-05-05 13:23:22 -0700</bug_when>
    <thetext>Created attachment 55149
Part 1.1: QTMovieWin: The breakup of QTMovieWin

Chris, you&apos;re right.  I must have uploaded the wrong patch as Part 1.1. Replacing that attachment with a new one now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221370</commentid>
    <comment_count>66</comment_count>
      <attachid>55057</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2010-05-05 17:25:28 -0700</bug_when>
    <thetext>Comment on attachment 55057
Part 2: QTMovieWin: New Classes QTPixelBuffer, QTCFDictionary, and QTMovieVisualContext

WebCore/platform/graphics/win/QTMovieVisualContext.cpp:76
 +          pPixelBufferContextCreate = reinterpret_cast&lt;pfnQTPixelBufferContextCreate&gt;(GetProcAddress(qtmlDLL, &quot;QTPixelBufferContextCreate&quot;));
Add :: to the GetProcAddress call like you did with LoadLibraryW.

WebCore/platform/graphics/win/QTPixelBuffer.cpp:68
 +      m_pixelBuffer = ref;
If you want to, you could return early if ref == m_pixelBuffer.

(I don&apos;t feel strongly about it though).


Looks great otherwise, r=me!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221906</commentid>
    <comment_count>67</comment_count>
      <attachid>55063</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2010-05-06 13:09:36 -0700</bug_when>
    <thetext>Comment on attachment 55063
ChangeLog changes. 

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222178</commentid>
    <comment_count>68</comment_count>
      <attachid>55056</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2010-05-06 22:47:29 -0700</bug_when>
    <thetext>Comment on attachment 55056
Part 4.2: WebCore: New class MediaPlayerPrivateQuickTimeVisualContext, the modification


&gt; +void MediaPlayerPrivateQuickTimeVisualContext::retrieveCurrentImage()
&gt; +{
&gt; +    if (!m_visualContext)
&gt; +        return;
&gt; +
&gt; +    if (!m_qtVideoLayer)
&gt; +        return;
&gt; +
&gt; +    QTPixelBuffer buffer = m_visualContext-&gt;imageForTime(0);
&gt; +    if (!buffer.pixelBufferRef())
&gt; +        return;
&gt; +
I assume imageForTime(0) gets the image for &quot;now&quot;? I realize that it just 
wraps QTVisualContextCopyImageForTime and that functions defines the magic value, but it would be nice
to define a constant instead of passing &quot;0&quot; - &quot;kCurrentMovieTime&quot; maybe ?


&gt; +
&gt; +        CFTimeInterval imageTime = QTMovieVisualContext::currentHostTime();
&gt; +
&quot;imageTime&quot; isn&apos;t used anywhere, left over from earlier revision?

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222206</commentid>
    <comment_count>69</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-05-06 23:44:51 -0700</bug_when>
    <thetext>(In reply to comment #68)
&gt; I assume imageForTime(0) gets the image for &quot;now&quot;? I realize that it just 
&gt; wraps QTVisualContextCopyImageForTime and that functions defines the magic
&gt; value, but it would be nice
&gt; to define a constant instead of passing &quot;0&quot; - &quot;kCurrentMovieTime&quot; maybe ?

I think I&apos;d rather add a second function called QTMovieVisualContext::currentImage(), or ::imageForCurrentTime().  The constant is an implementation detail, and could change in the future outside of our own control.

&gt; &quot;imageTime&quot; isn&apos;t used anywhere, left over from earlier revision?

Yup, deleted!

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222407</commentid>
    <comment_count>70</comment_count>
      <attachid>55149</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2010-05-07 08:58:30 -0700</bug_when>
    <thetext>Comment on attachment 55149
Part 1.1: QTMovieWin: The breakup of QTMovieWin

&gt;              if (shouldRestorePlaybackState &amp;&amp; m_timeToRestore != -1.0f) {
&gt;                  m_movieWin-&gt;setCurrentTime(m_timeToRestore);
&gt; @@ -281,7 +190,7 @@ void QTMovieWinPrivate::task()
&gt;                  m_rateToRestore = -1.0f;
&gt;              }

I know you didn&apos;t add this, but as long as you are cleaning things up you might as well change &quot;-1.0f&quot; to &quot;-1&quot; to match style guidelines.


&gt; +    size_t indexOfClient = m_private-&gt;m_clients.find(client);
&gt; +    if (indexOfClient &gt;= 0)
&gt; +        m_private-&gt;m_clients.remove(indexOfClient);

Is ever this OK for this search to fail? If not, add an ASSERT() so we can track down the source of the problem.

Nice refactoring!

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222423</commentid>
    <comment_count>71</comment_count>
      <attachid>55149</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2010-05-07 09:29:19 -0700</bug_when>
    <thetext>Comment on attachment 55149
Part 1.1: QTMovieWin: The breakup of QTMovieWin

&gt; +    size_t indexOfClient = m_private-&gt;m_clients.find(client);
&gt; +    if (indexOfClient &gt;= 0)
&gt; +        m_private-&gt;m_clients.remove(indexOfClient);

This test will always be true. size_t is an unsigned value. The correct test is:

if (indexOfClient != notFound)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222472</commentid>
    <comment_count>72</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-05-07 10:44:26 -0700</bug_when>
    <thetext>(In reply to comment #71)
&gt; (From update of attachment 55149 [details])
&gt; &gt; +    size_t indexOfClient = m_private-&gt;m_clients.find(client);
&gt; &gt; +    if (indexOfClient &gt;= 0)
&gt; &gt; +        m_private-&gt;m_clients.remove(indexOfClient);
&gt; 
&gt; This test will always be true. size_t is an unsigned value. The correct test
&gt; is:
&gt; 
&gt; if (indexOfClient != notFound)

Good catch!  Changed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222743</commentid>
    <comment_count>73</comment_count>
      <attachid>55446</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-05-07 18:21:54 -0700</bug_when>
    <thetext>Created attachment 55446
Part 7: WebKit: FullscreenVideoController and QTMovieGWorld

FullscreenVideoController dangerously casts a QTMovie* to a QTMovieWin*.  This patch doesn&apos;t fix that, but it does fix the compile error now that QTMovieWin has been renamed QTMovieGWorld.  The dangerous cast problem will be tracked in: https://bugs.webkit.org/show_bug.cgi?id=37832</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222825</commentid>
    <comment_count>74</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-05-07 23:25:40 -0700</bug_when>
    <thetext>Manually committed r59001: http://trac.webkit.org/changeset/59001</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222829</commentid>
    <comment_count>75</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-05-07 23:39:51 -0700</bug_when>
    <thetext>This broke the windows build:
http://build.webkit.org/builders/Windows%20Debug%20(Build)/builds/15023/steps/compile-webkit/logs/stdio</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222831</commentid>
    <comment_count>76</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2010-05-08 00:00:12 -0700</bug_when>
    <thetext>Manually committed r59003: http://trac.webkit.org/changeset/59003</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54499</attachid>
            <date>2010-04-27 19:06:09 -0700</date>
            <delta_ts>2010-04-27 20:46:38 -0700</delta_ts>
            <desc>Patch which breaks up QTMovieWin into QTMovieWin and QTMovie</desc>
            <filename>7569713-QTMovieWin-Breakup.patch</filename>
            <type>text/plain</type>
            <size>67405</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">SW5kZXg6IFFUTW92aWUuY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gUVRNb3ZpZS5jcHAJKHJldmlzaW9u
IDU3NjYzKQ0KKysrIFFUTW92aWUuY3BwCSh3b3JraW5nIGNvcHkpDQpAQCAtMjQsMTcgKzI0LDE3
IEBADQogICovCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKLSNpbmNsdWRlICJRVE1vdmllV2luLmgi
CisjaW5jbHVkZSAiUVRNb3ZpZS5oIgogCiAvLyBQdXQgTW92aWVzLmggZmlyc3Qgc28gYnVpbGQg
ZmFpbHVyZXMgaGVyZSBwb2ludCBjbGVhcmx5IHRvIFF1aWNrVGltZQogI2luY2x1ZGUgPE1vdmll
cy5oPgogCisjaW5jbHVkZSAiUVRNb3ZpZVRhc2suaCIKICNpbmNsdWRlICJRVE1vdmllV2luVGlt
ZXIuaCIKICNpbmNsdWRlIDxHWE1hdGguaD4KICNpbmNsdWRlIDxRVE1MLmg+CiAjaW5jbHVkZSA8
UXVpY2tUaW1lQ29tcG9uZW50cy5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5j
bHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTQ3LDcgKzQ3LDcgQEANCiBzdGF0aWMgY29uc3QgbG9u
ZyBtcGVnNE9iamVjdERlc2NyaXB0aW9uVHJhY2tUeXBlID0gJ29kc20nOwogc3RhdGljIGNvbnN0
IGxvbmcgbXBlZzRTY2VuZURlc2NyaXB0aW9uVHJhY2tUeXBlID0gJ3Nkc20nOwogc3RhdGljIGNv
bnN0IGxvbmcgY2xvc2VkQ2FwdGlvbkRpc3BsYXlQcm9wZXJ0eUlEID0gJ2Rpc3AnOwotc3RhdGlj
IExQQ1RTVFIgZnVsbHNjcmVlblFUTW92aWVXaW5Qb2ludGVyUHJvcCA9IFRFWFQoImZ1bGxzY3Jl
ZW5RVE1vdmllV2luUG9pbnRlciIpOworc3RhdGljIExQQ1RTVFIgZnVsbHNjcmVlblFUTW92aWVQ
b2ludGVyUHJvcCA9IFRFWFQoImZ1bGxzY3JlZW5RVE1vdmllUG9pbnRlciIpOwogCiAvLyBSZXNp
emluZyBHV29ybGRzIGlzIHNsb3csIGdpdmUgdGhlbSBhIG1pbmltdW0gc2l6ZSBzbyBzaXplIG9m
IHNtYWxsIAogLy8gdmlkZW9zIGNhbiBiZSBhbmltYXRlZCBzbW9vdGhseQpAQCAtNjEsNTMgKzYx
LDI1IEBADQogICAgIHZvaWQqIHB0cjsKIH07CiAKLXN0YXRpYyBNb3ZpZURyYXdpbmdDb21wbGV0
ZVVQUCBnTW92aWVEcmF3aW5nQ29tcGxldGVVUFAgPSAwOwotc3RhdGljIEhhc2hTZXQ8UVRNb3Zp
ZVdpblByaXZhdGUqPiogZ1Rhc2tMaXN0Owogc3RhdGljIFZlY3RvcjxDRlN0cmluZ1JlZj4qIGdT
dXBwb3J0ZWRUeXBlcyA9IDA7CiBzdGF0aWMgU0ludDMyIHF1aWNrVGltZVZlcnNpb24gPSAwOwog
Ci1zdGF0aWMgUVRNb3ZpZVdpbjo6U2V0VGFza1RpbWVyRGVsYXlGdW5jIGdTZXRUYXNrVGltZXJE
ZWxheSA9IDA7Ci1zdGF0aWMgUVRNb3ZpZVdpbjo6U3RvcFRhc2tUaW1lckZ1bmMgZ1N0b3BUYXNr
VGltZXIgPSAwOwotCi1zdGF0aWMgdm9pZCB1cGRhdGVUYXNrVGltZXIoaW50IG1heEludGVydmFs
ID0gMTAwMCkKLXsKLSAgICBpZiAoIWdUYXNrTGlzdC0+c2l6ZSgpKSB7Ci0gICAgICAgIGdTdG9w
VGFza1RpbWVyKCk7Ci0gICAgICAgIHJldHVybjsgICAgCi0gICAgfQotICAgIAotICAgIGxvbmcg
aW50ZXJ2YWxJbk1TOwotICAgIFFUR2V0VGltZVVudGlsTmV4dFRhc2soJmludGVydmFsSW5NUywg
MTAwMCk7Ci0gICAgaWYgKGludGVydmFsSW5NUyA+IG1heEludGVydmFsKQotICAgICAgICBpbnRl
cnZhbEluTVMgPSBtYXhJbnRlcnZhbDsKLSAgICBnU2V0VGFza1RpbWVyRGVsYXkoc3RhdGljX2Nh
c3Q8ZmxvYXQ+KGludGVydmFsSW5NUykgLyAxMDAwKTsKLX0KLQotY2xhc3MgUVRNb3ZpZVdpblBy
aXZhdGUgOiBwdWJsaWMgTm9uY29weWFibGUgeworY2xhc3MgUVRNb3ZpZVByaXZhdGUgOiBwdWJs
aWMgTm9uY29weWFibGUsIHB1YmxpYyBRVE1vdmllVGFza0NsaWVudCB7CiBwdWJsaWM6Ci0gICAg
UVRNb3ZpZVdpblByaXZhdGUoKTsKLSAgICB+UVRNb3ZpZVdpblByaXZhdGUoKTsKKyAgICBRVE1v
dmllUHJpdmF0ZSgpOworICAgIH5RVE1vdmllUHJpdmF0ZSgpOwogICAgIHZvaWQgdGFzaygpOwog
ICAgIHZvaWQgc3RhcnRUYXNrKCk7CiAgICAgdm9pZCBlbmRUYXNrKCk7CiAKICAgICB2b2lkIGNy
ZWF0ZU1vdmllQ29udHJvbGxlcigpOwotICAgIHZvaWQgcmVnaXN0ZXJEcmF3aW5nQ2FsbGJhY2so
KTsKLSAgICB2b2lkIGRyYXdpbmdDb21wbGV0ZSgpOwotICAgIHZvaWQgdXBkYXRlR1dvcmxkKCk7
Ci0gICAgdm9pZCBjcmVhdGVHV29ybGQoKTsKLSAgICB2b2lkIGRlbGV0ZUdXb3JsZCgpOwotICAg
IHZvaWQgY2xlYXJHV29ybGQoKTsKLSAgICB2b2lkIGNhY2hlTW92aWVTY2FsZSgpOwotICAgIHZv
aWQgdXBkYXRlTW92aWVTaXplKCk7CiAKLSAgICB2b2lkIHNldFNpemUoaW50LCBpbnQpOwotCi0g
ICAgUVRNb3ZpZVdpbiogbV9tb3ZpZVdpbjsKKyAgICBRVE1vdmllKiBtX21vdmllV2luOwogICAg
IE1vdmllIG1fbW92aWU7CiAgICAgTW92aWVDb250cm9sbGVyIG1fbW92aWVDb250cm9sbGVyOwog
ICAgIGJvb2wgbV90YXNraW5nOwotICAgIFFUTW92aWVXaW5DbGllbnQqIG1fY2xpZW50OworICAg
IGJvb2wgbV9kaXNhYmxlZDsKKyAgICBWZWN0b3I8UVRNb3ZpZUNsaWVudCo+IG1fY2xpZW50czsK
ICAgICBsb25nIG1fbG9hZFN0YXRlOwogICAgIGJvb2wgbV9lbmRlZDsKICAgICBib29sIG1fc2Vl
a2luZzsKQEAgLTExNiwxMCArODgsNiBAQA0KICAgICBpbnQgbV93aWR0aDsKICAgICBpbnQgbV9o
ZWlnaHQ7CiAgICAgYm9vbCBtX3Zpc2libGU7Ci0gICAgR1dvcmxkUHRyIG1fZ1dvcmxkOwotICAg
IGludCBtX2dXb3JsZFdpZHRoOwotICAgIGludCBtX2dXb3JsZEhlaWdodDsKLSAgICBHV29ybGRQ
dHIgbV9zYXZlZEdXb3JsZDsKICAgICBsb25nIG1fbG9hZEVycm9yOwogICAgIGZsb2F0IG1fd2lk
dGhTY2FsZUZhY3RvcjsKICAgICBmbG9hdCBtX2hlaWdodFNjYWxlRmFjdG9yOwpAQCAtMTI5LDE5
ICs5NywxMyBAQA0KICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgYm9vbCBtX3NjYWxlQ2FjaGVk
OwogI2VuZGlmCi0gICAgV2luZG93UHRyIG1fZnVsbHNjcmVlbldpbmRvdzsKLSAgICBHV29ybGRQ
dHIgbV9mdWxsc2NyZWVuT3JpZ0dXb3JsZDsKLSAgICBSZWN0IG1fZnVsbHNjcmVlblJlY3Q7Ci0g
ICAgUVRNb3ZpZVdpbkZ1bGxzY3JlZW5DbGllbnQqIG1fZnVsbHNjcmVlbkNsaWVudDsKLSAgICBj
aGFyKiBtX2Z1bGxzY3JlZW5SZXN0b3JlU3RhdGU7CiB9OwogCi1RVE1vdmllV2luUHJpdmF0ZTo6
UVRNb3ZpZVdpblByaXZhdGUoKQorUVRNb3ZpZVByaXZhdGU6OlFUTW92aWVQcml2YXRlKCkKICAg
ICA6IG1fbW92aWVXaW4oMCkKICAgICAsIG1fbW92aWUoMCkKICAgICAsIG1fbW92aWVDb250cm9s
bGVyKDApCiAgICAgLCBtX3Rhc2tpbmcoZmFsc2UpCi0gICAgLCBtX2NsaWVudCgwKQogICAgICwg
bV9sb2FkU3RhdGUoMCkKICAgICAsIG1fZW5kZWQoZmFsc2UpCiAgICAgLCBtX3NlZWtpbmcoZmFs
c2UpCkBAIC0xNTAsMzUgKzExMiwyMiBAQA0KICAgICAsIG1fd2lkdGgoMCkKICAgICAsIG1faGVp
Z2h0KDApCiAgICAgLCBtX3Zpc2libGUoZmFsc2UpCi0gICAgLCBtX2dXb3JsZCgwKQotICAgICwg
bV9nV29ybGRXaWR0aCgwKQotICAgICwgbV9nV29ybGRIZWlnaHQoMCkKLSAgICAsIG1fc2F2ZWRH
V29ybGQoMCkKICAgICAsIG1fbG9hZEVycm9yKDApCiAgICAgLCBtX3dpZHRoU2NhbGVGYWN0b3Io
MSkKICAgICAsIG1faGVpZ2h0U2NhbGVGYWN0b3IoMSkKICAgICAsIG1fY3VycmVudFVSTCgwKQog
ICAgICwgbV90aW1lVG9SZXN0b3JlKC0xLjBmKQogICAgICwgbV9yYXRlVG9SZXN0b3JlKC0xLjBm
KQorICAgICwgbV9kaXNhYmxlZChmYWxzZSkKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgLCBt
X3NjYWxlQ2FjaGVkKGZhbHNlKQogI2VuZGlmCi0gICAgLCBtX2Z1bGxzY3JlZW5XaW5kb3coMCkK
LSAgICAsIG1fZnVsbHNjcmVlbk9yaWdHV29ybGQoMCkKLSAgICAsIG1fZnVsbHNjcmVlbkNsaWVu
dCgwKQotICAgICwgbV9mdWxsc2NyZWVuUmVzdG9yZVN0YXRlKDApCiB7Ci0gICAgUmVjdCByZWN0
ID0geyAwLCAwLCAwLCAwIH07Ci0gICAgbV9mdWxsc2NyZWVuUmVjdCA9IHJlY3Q7CiB9CiAKLVFU
TW92aWVXaW5Qcml2YXRlOjp+UVRNb3ZpZVdpblByaXZhdGUoKQorUVRNb3ZpZVByaXZhdGU6On5R
VE1vdmllUHJpdmF0ZSgpCiB7Ci0gICAgQVNTRVJUKCFtX2Z1bGxzY3JlZW5XaW5kb3cpOwotCiAg
ICAgZW5kVGFzaygpOwotICAgIGlmIChtX2dXb3JsZCkKLSAgICAgICAgZGVsZXRlR1dvcmxkKCk7
CiAgICAgaWYgKG1fbW92aWVDb250cm9sbGVyKQogICAgICAgICBEaXNwb3NlTW92aWVDb250cm9s
bGVyKG1fbW92aWVDb250cm9sbGVyKTsKICAgICBpZiAobV9tb3ZpZSkKQEAgLTE4Nyw2MCArMTM2
LDI2IEBADQogICAgICAgICBDRlJlbGVhc2UobV9jdXJyZW50VVJMKTsKIH0KIAotdm9pZCBRVE1v
dmllV2luOjp0YXNrVGltZXJGaXJlZCgpCit2b2lkIFFUTW92aWVQcml2YXRlOjpzdGFydFRhc2so
KSAKIHsKLSAgICAvLyBUaGUgaGFzaCBjb250ZW50IG1pZ2h0IGNoYW5nZSBkdXJpbmcgdGFzaygp
Ci0gICAgVmVjdG9yPFFUTW92aWVXaW5Qcml2YXRlKj4gdGFza3M7Ci0gICAgY29weVRvVmVjdG9y
KCpnVGFza0xpc3QsIHRhc2tzKTsKLSAgICBzaXplX3QgY291bnQgPSB0YXNrcy5zaXplKCk7Ci0g
ICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IGNvdW50OyArK24pCi0gICAgICAgIHRhc2tzW25d
LT50YXNrKCk7Ci0KLSAgICB1cGRhdGVUYXNrVGltZXIoKTsKKyAgICBpZiAoIW1fdGFza2luZykg
eworICAgICAgICBRVE1vdmllVGFzazo6c2hhcmVkVGFzaygpLT5hZGRUYXNrQ2xpZW50KHRoaXMp
OworICAgICAgICBtX3Rhc2tpbmcgPSB0cnVlOworICAgIH0KKyAgICBRVE1vdmllVGFzazo6c2hh
cmVkVGFzaygpLT51cGRhdGVUYXNrVGltZXIoKTsKIH0KIAotdm9pZCBRVE1vdmllV2luUHJpdmF0
ZTo6c3RhcnRUYXNrKCkgCit2b2lkIFFUTW92aWVQcml2YXRlOjplbmRUYXNrKCkgCiB7Ci0gICAg
aWYgKG1fdGFza2luZykKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghZ1Rhc2tMaXN0KQotICAg
ICAgICBnVGFza0xpc3QgPSBuZXcgSGFzaFNldDxRVE1vdmllV2luUHJpdmF0ZSo+OwotICAgIGdU
YXNrTGlzdC0+YWRkKHRoaXMpOwotICAgIG1fdGFza2luZyA9IHRydWU7Ci0gICAgdXBkYXRlVGFz
a1RpbWVyKCk7CisgICAgaWYgKG1fdGFza2luZykgeworICAgICAgICBRVE1vdmllVGFzazo6c2hh
cmVkVGFzaygpLT5yZW1vdmVUYXNrQ2xpZW50KHRoaXMpOworICAgICAgICBtX3Rhc2tpbmcgPSBm
YWxzZTsKKyAgICB9CisgICAgUVRNb3ZpZVRhc2s6OnNoYXJlZFRhc2soKS0+dXBkYXRlVGFza1Rp
bWVyKCk7CiB9CiAKLXZvaWQgUVRNb3ZpZVdpblByaXZhdGU6OmVuZFRhc2soKSAKK3ZvaWQgUVRN
b3ZpZVByaXZhdGU6OnRhc2soKSAKIHsKLSAgICBpZiAoIW1fdGFza2luZykKLSAgICAgICAgcmV0
dXJuOwotICAgIGdUYXNrTGlzdC0+cmVtb3ZlKHRoaXMpOwotICAgIG1fdGFza2luZyA9IGZhbHNl
OwotICAgIHVwZGF0ZVRhc2tUaW1lcigpOwotfQotCi12b2lkIFFUTW92aWVXaW5Qcml2YXRlOjpj
YWNoZU1vdmllU2NhbGUoKQotewotICAgIFJlY3QgbmF0dXJhbFJlY3Q7Ci0gICAgUmVjdCBpbml0
aWFsUmVjdDsKLQotICAgIEdldE1vdmllTmF0dXJhbEJvdW5kc1JlY3QobV9tb3ZpZSwgJm5hdHVy
YWxSZWN0KTsKLSAgICBHZXRNb3ZpZUJveChtX21vdmllLCAmaW5pdGlhbFJlY3QpOwotCi0gICAg
ZmxvYXQgbmF0dXJhbFdpZHRoID0gbmF0dXJhbFJlY3QucmlnaHQgLSBuYXR1cmFsUmVjdC5sZWZ0
OwotICAgIGZsb2F0IG5hdHVyYWxIZWlnaHQgPSBuYXR1cmFsUmVjdC5ib3R0b20gLSBuYXR1cmFs
UmVjdC50b3A7Ci0KLSAgICBpZiAobmF0dXJhbFdpZHRoKQotICAgICAgICBtX3dpZHRoU2NhbGVG
YWN0b3IgPSAoaW5pdGlhbFJlY3QucmlnaHQgLSBpbml0aWFsUmVjdC5sZWZ0KSAvIG5hdHVyYWxX
aWR0aDsKLSAgICBpZiAobmF0dXJhbEhlaWdodCkKLSAgICAgICAgbV9oZWlnaHRTY2FsZUZhY3Rv
ciA9IChpbml0aWFsUmVjdC5ib3R0b20gLSBpbml0aWFsUmVjdC50b3ApIC8gbmF0dXJhbEhlaWdo
dDsKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgbV9zY2FsZUNhY2hlZCA9IHRydWU7OwotI2Vu
ZGlmCi19Ci0KLXZvaWQgUVRNb3ZpZVdpblByaXZhdGU6OnRhc2soKSAKLXsKICAgICBBU1NFUlQo
bV90YXNraW5nKTsKIAogICAgIGlmICghbV9sb2FkRXJyb3IpIHsKQEAgLTI1NiwyMyArMTcxLDE5
IEBADQogICAgICAgICAvLyBUaGlzIGlzIGRpZmZlcmVudCBmcm9tIFFUS2l0IEFQSSBhbmQgc2Vl
bXMgc3RyYW5nZS4KICAgICAgICAgbG9uZyBsb2FkU3RhdGUgPSBtX2xvYWRFcnJvciA/IFFUTW92
aWVMb2FkU3RhdGVFcnJvciA6IEdldE1vdmllTG9hZFN0YXRlKG1fbW92aWUpOwogICAgICAgICBp
ZiAobG9hZFN0YXRlICE9IG1fbG9hZFN0YXRlKSB7Ci0KICAgICAgICAgICAgIC8vIHdlIG9ubHkg
bmVlZCB0byBlcmFzZSB0aGUgbW92aWUgZ3dvcmxkIHdoZW4gdGhlIGxvYWQgc3RhdGUgY2hhbmdl
cyB0byBsb2FkZWQgd2hpbGUgaXQKICAgICAgICAgICAgIC8vICBpcyB2aXNpYmxlIGFzIHRoZSBn
d29ybGQgaXMgZGVzdHJveWVkL2NyZWF0ZWQgd2hlbiB2aXNpYmlsaXR5IGNoYW5nZXMKICAgICAg
ICAgICAgIGJvb2wgc2hvdWxkUmVzdG9yZVBsYXliYWNrU3RhdGUgPSBmYWxzZTsKICAgICAgICAg
ICAgIGJvb2wgbW92aWVOZXdseVBsYXlhYmxlID0gbG9hZFN0YXRlID49IFFUTW92aWVMb2FkU3Rh
dGVMb2FkZWQgJiYgbV9sb2FkU3RhdGUgPCBRVE1vdmllTG9hZFN0YXRlTG9hZGVkOwogICAgICAg
ICAgICAgbV9sb2FkU3RhdGUgPSBsb2FkU3RhdGU7Ci0gICAgICAgICAgICBpZiAobW92aWVOZXds
eVBsYXlhYmxlKSB7Ci0gICAgICAgICAgICAgICAgY2FjaGVNb3ZpZVNjYWxlKCk7Ci0gICAgICAg
ICAgICAgICAgdXBkYXRlTW92aWVTaXplKCk7Ci0gICAgICAgICAgICAgICAgaWYgKG1fdmlzaWJs
ZSkKLSAgICAgICAgICAgICAgICAgICAgY2xlYXJHV29ybGQoKTsKKyAgICAgICAgICAgIGlmICht
b3ZpZU5ld2x5UGxheWFibGUpCiAgICAgICAgICAgICAgICAgc2hvdWxkUmVzdG9yZVBsYXliYWNr
U3RhdGUgPSB0cnVlOwotICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoIW1fbW92aWVD
b250cm9sbGVyICYmIG1fbG9hZFN0YXRlID49IFFUTW92aWVMb2FkU3RhdGVMb2FkZWQpCiAgICAg
ICAgICAgICAgICAgY3JlYXRlTW92aWVDb250cm9sbGVyKCk7Ci0gICAgICAgICAgICBtX2NsaWVu
dC0+bW92aWVMb2FkU3RhdGVDaGFuZ2VkKG1fbW92aWVXaW4pOworCisgICAgICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fY2xpZW50cy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAg
ICBtX2NsaWVudHNbaV0tPm1vdmllTG9hZFN0YXRlQ2hhbmdlZChtX21vdmllV2luKTsKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgaWYgKHNob3VsZFJlc3RvcmVQbGF5YmFja1N0YXRlICYmIG1f
dGltZVRvUmVzdG9yZSAhPSAtMS4wZikgewogICAgICAgICAgICAgICAgIG1fbW92aWVXaW4tPnNl
dEN1cnJlbnRUaW1lKG1fdGltZVRvUmVzdG9yZSk7CkBAIC0yODEsNyArMTkyLDcgQEANCiAgICAg
ICAgICAgICAgICAgbV9yYXRlVG9SZXN0b3JlID0gLTEuMGY7CiAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIGlmIChtX21vdmllV2luLT5tX2Rpc2FibGVkKSB7CisgICAgICAgICAgICBpZiAo
bV9kaXNhYmxlZCkgewogICAgICAgICAgICAgICAgIGVuZFRhc2soKTsKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICB9CkBAIC0yOTIsMjMgKzIwMywyNyBAQA0KICAgICBib29s
IGVuZGVkID0gISFJc01vdmllRG9uZShtX21vdmllKTsKICAgICBpZiAoZW5kZWQgIT0gbV9lbmRl
ZCkgewogICAgICAgICBtX2VuZGVkID0gZW5kZWQ7Ci0gICAgICAgIGlmIChtX2NsaWVudCAmJiBl
bmRlZCkKLSAgICAgICAgICAgIG1fY2xpZW50LT5tb3ZpZUVuZGVkKG1fbW92aWVXaW4pOworICAg
ICAgICBpZiAoZW5kZWQpIHsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9j
bGllbnRzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgbV9jbGllbnRzW2ldLT5tb3ZpZUVu
ZGVkKG1fbW92aWVXaW4pOworICAgICAgICB9CiAgICAgfQogCiAgICAgZmxvYXQgdGltZSA9IG1f
bW92aWVXaW4tPmN1cnJlbnRUaW1lKCk7CiAgICAgaWYgKHRpbWUgPCBtX2xhc3RNZWRpYVRpbWUg
fHwgdGltZSA+PSBtX2xhc3RNZWRpYVRpbWUgKyBjTm9uQ29udGludW91c1RpbWVDaGFuZ2UgfHwg
bV9zZWVraW5nKSB7CiAgICAgICAgIG1fc2Vla2luZyA9IGZhbHNlOwotICAgICAgICBpZiAobV9j
bGllbnQpCi0gICAgICAgICAgICBtX2NsaWVudC0+bW92aWVUaW1lQ2hhbmdlZChtX21vdmllV2lu
KTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NsaWVudHMuc2l6ZSgpOyArK2kp
CisgICAgICAgICAgICBtX2NsaWVudHNbaV0tPm1vdmllVGltZUNoYW5nZWQobV9tb3ZpZVdpbik7
CiAgICAgfQogICAgIG1fbGFzdE1lZGlhVGltZSA9IHRpbWU7CiAKICAgICBpZiAobV9sb2FkRXJy
b3IpCiAgICAgICAgIGVuZFRhc2soKTsKKyAgICBlbHNlCisgICAgICAgIFFUTW92aWVUYXNrOjpz
aGFyZWRUYXNrKCktPnVwZGF0ZVRhc2tUaW1lcigpOwogfQogCi12b2lkIFFUTW92aWVXaW5Qcml2
YXRlOjpjcmVhdGVNb3ZpZUNvbnRyb2xsZXIoKQordm9pZCBRVE1vdmllUHJpdmF0ZTo6Y3JlYXRl
TW92aWVDb250cm9sbGVyKCkKIHsKICAgICBSZWN0IGJvdW5kczsKICAgICBsb25nIGZsYWdzOwpA
QCAtMzI0LDE1NiArMjM5LDM3IEBADQogICAgIG1fbW92aWVDb250cm9sbGVyID0gTmV3TW92aWVD
b250cm9sbGVyKG1fbW92aWUsICZib3VuZHMsIGZsYWdzKTsKICAgICBpZiAoIW1fbW92aWVDb250
cm9sbGVyKQogICAgICAgICByZXR1cm47Ci0KLSAgICBNQ1NldENvbnRyb2xsZXJQb3J0KG1fbW92
aWVDb250cm9sbGVyLCBtX2dXb3JsZCk7Ci0gICAgTUNTZXRDb250cm9sbGVyQXR0YWNoZWQobV9t
b3ZpZUNvbnRyb2xsZXIsIGZhbHNlKTsKIH0KIAotdm9pZCBRVE1vdmllV2luUHJpdmF0ZTo6cmVn
aXN0ZXJEcmF3aW5nQ2FsbGJhY2soKQorUVRNb3ZpZTo6UVRNb3ZpZShRVE1vdmllQ2xpZW50KiBj
bGllbnQpCisgICAgOiBtX3ByaXZhdGUobmV3IFFUTW92aWVQcml2YXRlKCkpCiB7Ci0gICAgVXBw
UGFyYW0gcGFyYW07Ci0gICAgcGFyYW0ucHRyID0gdGhpczsKLSAgICBTZXRNb3ZpZURyYXdpbmdD
b21wbGV0ZVByb2MobV9tb3ZpZSwgbW92aWVEcmF3aW5nQ2FsbFdoZW5DaGFuZ2VkLCBnTW92aWVE
cmF3aW5nQ29tcGxldGVVUFAsIHBhcmFtLmxvbmdWYWx1ZSk7CisgICAgbV9wcml2YXRlLT5tX21v
dmllV2luID0gdGhpczsKKyAgICBpZiAoY2xpZW50KQorICAgICAgICBtX3ByaXZhdGUtPm1fY2xp
ZW50cy5hcHBlbmQoY2xpZW50KTsKKyAgICBpbml0aWFsaXplUXVpY2tUaW1lKCk7CiB9CiAKLXZv
aWQgUVRNb3ZpZVdpblByaXZhdGU6OmRyYXdpbmdDb21wbGV0ZSgpCitRVE1vdmllOjp+UVRNb3Zp
ZSgpCiB7Ci0gICAgaWYgKCFtX2dXb3JsZCB8fCBtX21vdmllV2luLT5tX2Rpc2FibGVkIHx8IG1f
bG9hZFN0YXRlIDwgUVRNb3ZpZUxvYWRTdGF0ZUxvYWRlZCkKLSAgICAgICAgcmV0dXJuOwotICAg
IG1fY2xpZW50LT5tb3ZpZU5ld0ltYWdlQXZhaWxhYmxlKG1fbW92aWVXaW4pOworICAgIGRlbGV0
ZSBtX3ByaXZhdGU7CiB9CiAKLXZvaWQgUVRNb3ZpZVdpblByaXZhdGU6OnVwZGF0ZUdXb3JsZCgp
Cit2b2lkIFFUTW92aWU6OmFkZENsaWVudChRVE1vdmllQ2xpZW50KiBjbGllbnQpCiB7Ci0gICAg
Ym9vbCBzaG91bGRCZVZpc2libGUgPSBtX3Zpc2libGU7Ci0gICAgaWYgKCFtX2hlaWdodCB8fCAh
bV93aWR0aCkKLSAgICAgICAgc2hvdWxkQmVWaXNpYmxlID0gZmFsc2U7Ci0KLSAgICBpZiAoc2hv
dWxkQmVWaXNpYmxlICYmICFtX2dXb3JsZCkKLSAgICAgICAgY3JlYXRlR1dvcmxkKCk7Ci0gICAg
ZWxzZSBpZiAoIXNob3VsZEJlVmlzaWJsZSAmJiBtX2dXb3JsZCkKLSAgICAgICAgZGVsZXRlR1dv
cmxkKCk7Ci0gICAgZWxzZSBpZiAobV9nV29ybGQgJiYgKG1fd2lkdGggPiBtX2dXb3JsZFdpZHRo
IHx8IG1faGVpZ2h0ID4gbV9nV29ybGRIZWlnaHQpKSB7Ci0gICAgICAgIC8vIG5lZWQgYSBiaWdn
ZXIsIGJldHRlciBnV29ybGQKLSAgICAgICAgZGVsZXRlR1dvcmxkKCk7Ci0gICAgICAgIGNyZWF0
ZUdXb3JsZCgpOwotICAgIH0KKyAgICBpZiAoY2xpZW50KQorICAgICAgICBtX3ByaXZhdGUtPm1f
Y2xpZW50cy5hcHBlbmQoY2xpZW50KTsKIH0KIAotdm9pZCBRVE1vdmllV2luUHJpdmF0ZTo6Y3Jl
YXRlR1dvcmxkKCkKK3ZvaWQgUVRNb3ZpZTo6cmVtb3ZlQ2xpZW50KFFUTW92aWVDbGllbnQqIGNs
aWVudCkKIHsKLSAgICBBU1NFUlQoIW1fZ1dvcmxkKTsKLSAgICBpZiAoIW1fbW92aWUgfHwgbV9s
b2FkU3RhdGUgPCBRVE1vdmllTG9hZFN0YXRlTG9hZGVkKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX2dXb3JsZFdpZHRoID0gbWF4KGNHV29ybGRNaW5XaWR0aCwgbV93aWR0aCk7Ci0gICAgbV9n
V29ybGRIZWlnaHQgPSBtYXgoY0dXb3JsZE1pbkhlaWdodCwgbV9oZWlnaHQpOwotICAgIFJlY3Qg
Ym91bmRzOyAKLSAgICBib3VuZHMudG9wID0gMDsKLSAgICBib3VuZHMubGVmdCA9IDA7IAotICAg
IGJvdW5kcy5yaWdodCA9IG1fZ1dvcmxkV2lkdGg7Ci0gICAgYm91bmRzLmJvdHRvbSA9IG1fZ1dv
cmxkSGVpZ2h0OwotICAgIE9TRXJyIGVyciA9IFFUTmV3R1dvcmxkKCZtX2dXb3JsZCwgazMyQkdS
QVBpeGVsRm9ybWF0LCAmYm91bmRzLCAwLCAwLCAwKTsgCi0gICAgaWYgKGVycikgCi0gICAgICAg
IHJldHVybjsKLSAgICBHZXRNb3ZpZUdXb3JsZChtX21vdmllLCAmbV9zYXZlZEdXb3JsZCwgMCk7
Ci0gICAgaWYgKG1fbW92aWVDb250cm9sbGVyKQotICAgICAgICBNQ1NldENvbnRyb2xsZXJQb3J0
KG1fbW92aWVDb250cm9sbGVyLCBtX2dXb3JsZCk7Ci0gICAgU2V0TW92aWVHV29ybGQobV9tb3Zp
ZSwgbV9nV29ybGQsIDApOwotICAgIGJvdW5kcy5yaWdodCA9IG1fd2lkdGg7Ci0gICAgYm91bmRz
LmJvdHRvbSA9IG1faGVpZ2h0OwotICAgIGlmIChtX21vdmllQ29udHJvbGxlcikKLSAgICAgICAg
TUNTZXRDb250cm9sbGVyQm91bmRzUmVjdChtX21vdmllQ29udHJvbGxlciwgJmJvdW5kcyk7Ci0g
ICAgU2V0TW92aWVCb3gobV9tb3ZpZSwgJmJvdW5kcyk7CisgICAgc2l6ZV90IGluZGV4T2ZDbGll
bnQgPSBtX3ByaXZhdGUtPm1fY2xpZW50cy5maW5kKGNsaWVudCk7CisgICAgaWYgKGluZGV4T2ZD
bGllbnQgPiAwKQorICAgICAgICBtX3ByaXZhdGUtPm1fY2xpZW50cy5yZW1vdmUoaW5kZXhPZkNs
aWVudCk7CiB9CiAKLXZvaWQgUVRNb3ZpZVdpblByaXZhdGU6OmNsZWFyR1dvcmxkKCkKK3ZvaWQg
UVRNb3ZpZTo6cGxheSgpCiB7Ci0gICAgaWYgKCFtX21vdmllfHwhbV9nV29ybGQpCi0gICAgICAg
IHJldHVybjsKLQotICAgIEdyYWZQdHIgc2F2ZVBvcnQ7Ci0gICAgR2V0UG9ydCgmc2F2ZVBvcnQp
OyAKLSAgICBNYWNTZXRQb3J0KChHcmFmUHRyKW1fZ1dvcmxkKTsKLQotICAgIFJlY3QgYm91bmRz
OyAKLSAgICBib3VuZHMudG9wID0gMDsKLSAgICBib3VuZHMubGVmdCA9IDA7IAotICAgIGJvdW5k
cy5yaWdodCA9IG1fZ1dvcmxkV2lkdGg7Ci0gICAgYm91bmRzLmJvdHRvbSA9IG1fZ1dvcmxkSGVp
Z2h0OwotICAgIEVyYXNlUmVjdCgmYm91bmRzKTsKLQotICAgIE1hY1NldFBvcnQoc2F2ZVBvcnQp
OwotfQotCi12b2lkIFFUTW92aWVXaW5Qcml2YXRlOjpzZXRTaXplKGludCB3aWR0aCwgaW50IGhl
aWdodCkKLXsKLSAgICBpZiAobV93aWR0aCA9PSB3aWR0aCAmJiBtX2hlaWdodCA9PSBoZWlnaHQp
Ci0gICAgICAgIHJldHVybjsKLSAgICBtX3dpZHRoID0gd2lkdGg7Ci0gICAgbV9oZWlnaHQgPSBo
ZWlnaHQ7Ci0KLSAgICAvLyBEbyBub3QgY2hhbmdlIG1vdmllIGJveCBiZWZvcmUgcmVhY2hpbmcg
bG9hZCBzdGF0ZSBsb2FkZWQgYXMgd2UgZ3JhYgotICAgIC8vIHRoZSBpbml0aWFsIHNpemUgd2hl
biB0YXNrKCkgc2VlcyB0aGF0IHN0YXRlIGZvciB0aGUgZmlyc3QgdGltZSwgYW5kCi0gICAgLy8g
d2UgbmVlZCB0aGUgaW5pdGlhbCBzaXplIHRvIGJlIGFibGUgdG8gc2NhbGUgbW92aWUgcHJvcGVy
bHkuIAotICAgIGlmICghbV9tb3ZpZSB8fCBtX2xvYWRTdGF0ZSA8IFFUTW92aWVMb2FkU3RhdGVM
b2FkZWQpCi0gICAgICAgIHJldHVybjsKLQotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICBBU1NF
UlQobV9zY2FsZUNhY2hlZCk7Ci0jZW5kaWYKLQotICAgIHVwZGF0ZU1vdmllU2l6ZSgpOwotfQot
Ci12b2lkIFFUTW92aWVXaW5Qcml2YXRlOjp1cGRhdGVNb3ZpZVNpemUoKQotewotICAgIGlmICgh
bV9tb3ZpZSB8fCBtX2xvYWRTdGF0ZSA8IFFUTW92aWVMb2FkU3RhdGVMb2FkZWQpCi0gICAgICAg
IHJldHVybjsKLQotICAgIFJlY3QgYm91bmRzOyAKLSAgICBib3VuZHMudG9wID0gMDsKLSAgICBi
b3VuZHMubGVmdCA9IDA7IAotICAgIGJvdW5kcy5yaWdodCA9IG1fd2lkdGg7Ci0gICAgYm91bmRz
LmJvdHRvbSA9IG1faGVpZ2h0OwotICAgIGlmIChtX21vdmllQ29udHJvbGxlcikKLSAgICAgICAg
TUNTZXRDb250cm9sbGVyQm91bmRzUmVjdChtX21vdmllQ29udHJvbGxlciwgJmJvdW5kcyk7Ci0g
ICAgU2V0TW92aWVCb3gobV9tb3ZpZSwgJmJvdW5kcyk7Ci0gICAgdXBkYXRlR1dvcmxkKCk7Ci19
Ci0KLQotdm9pZCBRVE1vdmllV2luUHJpdmF0ZTo6ZGVsZXRlR1dvcmxkKCkKLXsKLSAgICBBU1NF
UlQobV9nV29ybGQpOwotICAgIGlmIChtX21vdmllQ29udHJvbGxlcikKLSAgICAgICAgTUNTZXRD
b250cm9sbGVyUG9ydChtX21vdmllQ29udHJvbGxlciwgbV9zYXZlZEdXb3JsZCk7Ci0gICAgaWYg
KG1fbW92aWUpCi0gICAgICAgIFNldE1vdmllR1dvcmxkKG1fbW92aWUsIG1fc2F2ZWRHV29ybGQs
IDApOwotICAgIG1fc2F2ZWRHV29ybGQgPSAwOwotICAgIERpc3Bvc2VHV29ybGQobV9nV29ybGQp
OyAKLSAgICBtX2dXb3JsZCA9IDA7Ci0gICAgbV9nV29ybGRXaWR0aCA9IDA7Ci0gICAgbV9nV29y
bGRIZWlnaHQgPSAwOwotfQotCi0KLVFUTW92aWVXaW46OlFUTW92aWVXaW4oUVRNb3ZpZVdpbkNs
aWVudCogY2xpZW50KQotICAgIDogbV9wcml2YXRlKG5ldyBRVE1vdmllV2luUHJpdmF0ZSgpKQot
ICAgICwgbV9kaXNhYmxlZChmYWxzZSkKLXsKLSAgICBtX3ByaXZhdGUtPm1fbW92aWVXaW4gPSB0
aGlzOwotICAgIG1fcHJpdmF0ZS0+bV9jbGllbnQgPSBjbGllbnQ7Ci0gICAgaW5pdGlhbGl6ZVF1
aWNrVGltZSgpOwotfQotCi1RVE1vdmllV2luOjp+UVRNb3ZpZVdpbigpCi17Ci0gICAgZGVsZXRl
IG1fcHJpdmF0ZTsKLX0KLQotdm9pZCBRVE1vdmllV2luOjpwbGF5KCkKLXsKICAgICBtX3ByaXZh
dGUtPm1fdGltZVRvUmVzdG9yZSA9IC0xLjBmOwogCiAgICAgaWYgKG1fcHJpdmF0ZS0+bV9tb3Zp
ZUNvbnRyb2xsZXIpCkBAIC00ODMsNyArMjc5LDcgQEANCiAgICAgbV9wcml2YXRlLT5zdGFydFRh
c2soKTsKIH0KIAotdm9pZCBRVE1vdmllV2luOjpwYXVzZSgpCit2b2lkIFFUTW92aWU6OnBhdXNl
KCkKIHsKICAgICBtX3ByaXZhdGUtPm1fdGltZVRvUmVzdG9yZSA9IC0xLjBmOwogCkBAIC00OTEs
MTcgKzI4NywxNyBAQA0KICAgICAgICAgTUNEb0FjdGlvbihtX3ByaXZhdGUtPm1fbW92aWVDb250
cm9sbGVyLCBtY0FjdGlvblBsYXksIDApOwogICAgIGVsc2UKICAgICAgICAgU3RvcE1vdmllKG1f
cHJpdmF0ZS0+bV9tb3ZpZSk7Ci0gICAgdXBkYXRlVGFza1RpbWVyKCk7CisgICAgUVRNb3ZpZVRh
c2s6OnNoYXJlZFRhc2soKS0+dXBkYXRlVGFza1RpbWVyKCk7CiB9CiAKLWZsb2F0IFFUTW92aWVX
aW46OnJhdGUoKSBjb25zdAorZmxvYXQgUVRNb3ZpZTo6cmF0ZSgpIGNvbnN0CiB7CiAgICAgaWYg
KCFtX3ByaXZhdGUtPm1fbW92aWUpCiAgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBGaXhl
ZFRvRmxvYXQoR2V0TW92aWVSYXRlKG1fcHJpdmF0ZS0+bV9tb3ZpZSkpOwogfQogCi12b2lkIFFU
TW92aWVXaW46OnNldFJhdGUoZmxvYXQgcmF0ZSkKK3ZvaWQgUVRNb3ZpZTo6c2V0UmF0ZShmbG9h
dCByYXRlKQogewogICAgIGlmICghbV9wcml2YXRlLT5tX21vdmllKQogICAgICAgICByZXR1cm47
ICAgIApAQCAtNTExLDEwICszMDcsMTAgQEANCiAgICAgICAgIE1DRG9BY3Rpb24obV9wcml2YXRl
LT5tX21vdmllQ29udHJvbGxlciwgbWNBY3Rpb25QcmVyb2xsQW5kUGxheSwgKHZvaWQgKilGbG9h
dFRvRml4ZWQocmF0ZSkpOwogICAgIGVsc2UKICAgICAgICAgU2V0TW92aWVSYXRlKG1fcHJpdmF0
ZS0+bV9tb3ZpZSwgRmxvYXRUb0ZpeGVkKHJhdGUpKTsKLSAgICB1cGRhdGVUYXNrVGltZXIoKTsK
KyAgICBRVE1vdmllVGFzazo6c2hhcmVkVGFzaygpLT51cGRhdGVUYXNrVGltZXIoKTsKIH0KIAot
ZmxvYXQgUVRNb3ZpZVdpbjo6ZHVyYXRpb24oKSBjb25zdAorZmxvYXQgUVRNb3ZpZTo6ZHVyYXRp
b24oKSBjb25zdAogewogICAgIGlmICghbV9wcml2YXRlLT5tX21vdmllKQogICAgICAgICByZXR1
cm4gMDsKQEAgLTUyMyw3ICszMTksNyBAQA0KICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+
KHZhbCkgLyBzY2FsZTsKIH0KIAotZmxvYXQgUVRNb3ZpZVdpbjo6Y3VycmVudFRpbWUoKSBjb25z
dAorZmxvYXQgUVRNb3ZpZTo6Y3VycmVudFRpbWUoKSBjb25zdAogewogICAgIGlmICghbV9wcml2
YXRlLT5tX21vdmllKQogICAgICAgICByZXR1cm4gMDsKQEAgLTUzMiw3ICszMjgsNyBAQA0KICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZhbCkgLyBzY2FsZTsKIH0KIAotdm9pZCBRVE1v
dmllV2luOjpzZXRDdXJyZW50VGltZShmbG9hdCB0aW1lKSBjb25zdAordm9pZCBRVE1vdmllOjpz
ZXRDdXJyZW50VGltZShmbG9hdCB0aW1lKSBjb25zdAogewogICAgIGlmICghbV9wcml2YXRlLT5t
X21vdmllKQogICAgICAgICByZXR1cm47CkBAIC01NDEsMjIgKzMzNywyMiBAQA0KICAgICAKICAg
ICBtX3ByaXZhdGUtPm1fc2Vla2luZyA9IHRydWU7CiAgICAgVGltZVNjYWxlIHNjYWxlID0gR2V0
TW92aWVUaW1lU2NhbGUobV9wcml2YXRlLT5tX21vdmllKTsKLSAgICBpZiAobV9wcml2YXRlLT5t
X21vdmllQ29udHJvbGxlcil7CisgICAgaWYgKG1fcHJpdmF0ZS0+bV9tb3ZpZUNvbnRyb2xsZXIp
IHsKICAgICAgICAgUVRSZXN0YXJ0QXRUaW1lUmVjb3JkIHJlc3RhcnQgPSB7IHRpbWUgKiBzY2Fs
ZSAsIDAgfTsKICAgICAgICAgTUNEb0FjdGlvbihtX3ByaXZhdGUtPm1fbW92aWVDb250cm9sbGVy
LCBtY0FjdGlvblJlc3RhcnRBdFRpbWUsICh2b2lkICopJnJlc3RhcnQpOwogICAgIH0gZWxzZQog
ICAgICAgICBTZXRNb3ZpZVRpbWVWYWx1ZShtX3ByaXZhdGUtPm1fbW92aWUsIFRpbWVWYWx1ZSh0
aW1lICogc2NhbGUpKTsKLSAgICB1cGRhdGVUYXNrVGltZXIoKTsKKyAgICBRVE1vdmllVGFzazo6
c2hhcmVkVGFzaygpLT51cGRhdGVUYXNrVGltZXIoKTsKIH0KIAotdm9pZCBRVE1vdmllV2luOjpz
ZXRWb2x1bWUoZmxvYXQgdm9sdW1lKQordm9pZCBRVE1vdmllOjpzZXRWb2x1bWUoZmxvYXQgdm9s
dW1lKQogewogICAgIGlmICghbV9wcml2YXRlLT5tX21vdmllKQogICAgICAgICByZXR1cm47CiAg
ICAgU2V0TW92aWVWb2x1bWUobV9wcml2YXRlLT5tX21vdmllLCBzdGF0aWNfY2FzdDxzaG9ydD4o
dm9sdW1lICogMjU2KSk7CiB9CiAKLXZvaWQgUVRNb3ZpZVdpbjo6c2V0UHJlc2VydmVzUGl0Y2go
Ym9vbCBwcmVzZXJ2ZXNQaXRjaCkKK3ZvaWQgUVRNb3ZpZTo6c2V0UHJlc2VydmVzUGl0Y2goYm9v
bCBwcmVzZXJ2ZXNQaXRjaCkKIHsKICAgICBpZiAoIW1fcHJpdmF0ZS0+bV9tb3ZpZSB8fCAhbV9w
cml2YXRlLT5tX2N1cnJlbnRVUkwpCiAgICAgICAgIHJldHVybjsKQEAgLTU3NSwxNCArMzcxLDE0
IEBADQogICAgIGxvYWQobV9wcml2YXRlLT5tX2N1cnJlbnRVUkwsIHByZXNlcnZlc1BpdGNoKTsK
IH0KIAotdW5zaWduZWQgUVRNb3ZpZVdpbjo6ZGF0YVNpemUoKSBjb25zdAordW5zaWduZWQgUVRN
b3ZpZTo6ZGF0YVNpemUoKSBjb25zdAogewogICAgIGlmICghbV9wcml2YXRlLT5tX21vdmllKQog
ICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gR2V0TW92aWVEYXRhU2l6ZShtX3ByaXZhdGUt
Pm1fbW92aWUsIDAsIEdldE1vdmllRHVyYXRpb24obV9wcml2YXRlLT5tX21vdmllKSk7CiB9CiAK
LWZsb2F0IFFUTW92aWVXaW46Om1heFRpbWVMb2FkZWQoKSBjb25zdAorZmxvYXQgUVRNb3ZpZTo6
bWF4VGltZUxvYWRlZCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3ByaXZhdGUtPm1fbW92aWUpCiAg
ICAgICAgIHJldHVybiAwOwpAQCAtNTkyLDEyICszODgsMTIgQEANCiAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGZsb2F0Pih2YWwpIC8gc2NhbGU7CiB9CiAKLWxvbmcgUVRNb3ZpZVdpbjo6bG9hZFN0
YXRlKCkgY29uc3QKK2xvbmcgUVRNb3ZpZTo6bG9hZFN0YXRlKCkgY29uc3QKIHsKICAgICByZXR1
cm4gbV9wcml2YXRlLT5tX2xvYWRTdGF0ZTsKIH0KIAotdm9pZCBRVE1vdmllV2luOjpnZXROYXR1
cmFsU2l6ZShpbnQmIHdpZHRoLCBpbnQmIGhlaWdodCkKK3ZvaWQgUVRNb3ZpZTo6Z2V0TmF0dXJh
bFNpemUoaW50JiB3aWR0aCwgaW50JiBoZWlnaHQpCiB7CiAgICAgUmVjdCByZWN0ID0geyAwLCB9
OwogCkBAIC02MDcsNTcgKzQwMyw4IEBADQogICAgIGhlaWdodCA9IChyZWN0LmJvdHRvbSAtIHJl
Y3QudG9wKSAqIG1fcHJpdmF0ZS0+bV9oZWlnaHRTY2FsZUZhY3RvcjsKIH0KIAotdm9pZCBRVE1v
dmllV2luOjpzZXRTaXplKGludCB3aWR0aCwgaW50IGhlaWdodCkKK3ZvaWQgUVRNb3ZpZTo6bG9h
ZChjb25zdCBVQ2hhciogdXJsLCBpbnQgbGVuLCBib29sIHByZXNlcnZlc1BpdGNoKQogewotICAg
IG1fcHJpdmF0ZS0+c2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKLSAgICB1cGRhdGVUYXNrVGltZXIo
MCk7Ci19Ci0KLXZvaWQgUVRNb3ZpZVdpbjo6c2V0VmlzaWJsZShib29sIGIpCi17Ci0gICAgbV9w
cml2YXRlLT5tX3Zpc2libGUgPSBiOwotICAgIG1fcHJpdmF0ZS0+dXBkYXRlR1dvcmxkKCk7Ci19
Ci0KLXZvaWQgUVRNb3ZpZVdpbjo6Z2V0Q3VycmVudEZyYW1lSW5mbyh2b2lkKiYgYnVmZmVyLCB1
bnNpZ25lZCYgYml0c1BlclBpeGVsLCB1bnNpZ25lZCYgcm93Qnl0ZXMsIHVuc2lnbmVkJiB3aWR0
aCwgdW5zaWduZWQmIGhlaWdodCkKLXsKLSAgICBpZiAoIW1fcHJpdmF0ZS0+bV9nV29ybGQpIHsK
LSAgICAgICAgYnVmZmVyID0gMDsKLSAgICAgICAgYml0c1BlclBpeGVsID0gMDsKLSAgICAgICAg
cm93Qnl0ZXMgPSAwOwotICAgICAgICB3aWR0aCA9IDA7Ci0gICAgICAgIGhlaWdodCA9IDA7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgUGl4TWFwSGFuZGxlIG9mZnNjcmVlblBpeE1hcCA9
IEdldEdXb3JsZFBpeE1hcChtX3ByaXZhdGUtPm1fZ1dvcmxkKTsKLSAgICBidWZmZXIgPSAoKm9m
ZnNjcmVlblBpeE1hcCktPmJhc2VBZGRyOwotICAgIGJpdHNQZXJQaXhlbCA9ICgqb2Zmc2NyZWVu
UGl4TWFwKS0+cGl4ZWxTaXplOwotICAgIHJvd0J5dGVzID0gKCpvZmZzY3JlZW5QaXhNYXApLT5y
b3dCeXRlcyAmIDB4M0ZGRjsKLSAgICB3aWR0aCA9IG1fcHJpdmF0ZS0+bV93aWR0aDsKLSAgICBo
ZWlnaHQgPSBtX3ByaXZhdGUtPm1faGVpZ2h0OwotfQotCi12b2lkIFFUTW92aWVXaW46OnBhaW50
KEhEQyBoZGMsIGludCB4LCBpbnQgeSkKLXsKLSAgICBpZiAoIW1fcHJpdmF0ZS0+bV9nV29ybGQp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEhEQyBoZGNTcmMgPSBzdGF0aWNfY2FzdDxIREM+KEdl
dFBvcnRIREMocmVpbnRlcnByZXRfY2FzdDxHcmFmUHRyPihtX3ByaXZhdGUtPm1fZ1dvcmxkKSkp
OyAKLSAgICBpZiAoIWhkY1NyYykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRklYTUU6IElm
IHdlIGNvdWxkIGRldGVybWluZSB0aGUgbW92aWUgaGFzIG5vIGFscGhhLCB3ZSBjb3VsZCB1c2Ug
Qml0Qmx0IGZvciB0aG9zZSBjYXNlcywgd2hpY2ggbWlnaHQgYmUgZmFzdGVyLgotICAgIEJMRU5E
RlVOQ1RJT04gYmxlbmRGdW5jdGlvbjsgCi0gICAgYmxlbmRGdW5jdGlvbi5CbGVuZE9wID0gQUNf
U1JDX09WRVI7Ci0gICAgYmxlbmRGdW5jdGlvbi5CbGVuZEZsYWdzID0gMDsKLSAgICBibGVuZEZ1
bmN0aW9uLlNvdXJjZUNvbnN0YW50QWxwaGEgPSAyNTU7Ci0gICAgYmxlbmRGdW5jdGlvbi5BbHBo
YUZvcm1hdCA9IEFDX1NSQ19BTFBIQTsKLSAgICBBbHBoYUJsZW5kKGhkYywgeCwgeSwgbV9wcml2
YXRlLT5tX3dpZHRoLCBtX3ByaXZhdGUtPm1faGVpZ2h0LCBoZGNTcmMsIAotICAgICAgICAgMCwg
MCwgbV9wcml2YXRlLT5tX3dpZHRoLCBtX3ByaXZhdGUtPm1faGVpZ2h0LCBibGVuZEZ1bmN0aW9u
KTsKLX0KLQotdm9pZCBRVE1vdmllV2luOjpsb2FkKGNvbnN0IFVDaGFyKiB1cmwsIGludCBsZW4s
IGJvb2wgcHJlc2VydmVzUGl0Y2gpCi17CiAgICAgQ0ZTdHJpbmdSZWYgdXJsU3RyaW5nUmVmID0g
Q0ZTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCByZWludGVy
cHJldF9jYXN0PGNvbnN0IFVuaUNoYXIqPih1cmwpLCBsZW4pOwogICAgIENGVVJMUmVmIGNmVVJM
ID0gQ0ZVUkxDcmVhdGVXaXRoU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIHVybFN0cmluZ1Jl
ZiwgMCk7CiAKQEAgLTY2NywxNSArNDE0LDEzIEBADQogICAgIENGUmVsZWFzZSh1cmxTdHJpbmdS
ZWYpOwogfQogCi12b2lkIFFUTW92aWVXaW46OmxvYWQoQ0ZVUkxSZWYgdXJsLCBib29sIHByZXNl
cnZlc1BpdGNoKQordm9pZCBRVE1vdmllOjpsb2FkKENGVVJMUmVmIHVybCwgYm9vbCBwcmVzZXJ2
ZXNQaXRjaCkKIHsKICAgICBpZiAoIXVybCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1f
cHJpdmF0ZS0+bV9tb3ZpZSkgewogICAgICAgICBtX3ByaXZhdGUtPmVuZFRhc2soKTsKLSAgICAg
ICAgaWYgKG1fcHJpdmF0ZS0+bV9nV29ybGQpCi0gICAgICAgICAgICBtX3ByaXZhdGUtPmRlbGV0
ZUdXb3JsZCgpOwogICAgICAgICBpZiAobV9wcml2YXRlLT5tX21vdmllQ29udHJvbGxlcikKICAg
ICAgICAgICAgIERpc3Bvc2VNb3ZpZUNvbnRyb2xsZXIobV9wcml2YXRlLT5tX21vdmllQ29udHJv
bGxlcik7CiAgICAgICAgIG1fcHJpdmF0ZS0+bV9tb3ZpZUNvbnRyb2xsZXIgPSAwOwpAQCAtNzY4
LDE0ICs1MTMsMTQgQEANCiAgICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcFN0YXR1
cyA9IDA7IAogICAgIG1vdmllUHJvcENvdW50Kys7IAogCi0gICAgQVNTRVJUKG1vdmllUHJvcENv
dW50IDw9IHNpemVvZihtb3ZpZVByb3BzKS9zaXplb2YobW92aWVQcm9wc1swXSkpOworICAgIEFT
U0VSVChtb3ZpZVByb3BDb3VudCA8PSBzaXplb2YobW92aWVQcm9wcykgLyBzaXplb2YobW92aWVQ
cm9wc1swXSkpOwogICAgIG1fcHJpdmF0ZS0+bV9sb2FkRXJyb3IgPSBOZXdNb3ZpZUZyb21Qcm9w
ZXJ0aWVzKG1vdmllUHJvcENvdW50LCBtb3ZpZVByb3BzLCAwLCAwLCAmbV9wcml2YXRlLT5tX21v
dmllKTsKIAogZW5kOgogICAgIG1fcHJpdmF0ZS0+c3RhcnRUYXNrKCk7CiAgICAgLy8gZ2V0IHRo
ZSBsb2FkIGZhaWwgY2FsbGJhY2sgcXVpY2tseSAKICAgICBpZiAobV9wcml2YXRlLT5tX2xvYWRF
cnJvcikKLSAgICAgICAgdXBkYXRlVGFza1RpbWVyKDApOworICAgICAgICBRVE1vdmllVGFzazo6
c2hhcmVkVGFzaygpLT51cGRhdGVUYXNrVGltZXIoMCk7CiAgICAgZWxzZSB7CiAgICAgICAgIE9T
VHlwZSBtb2RlID0ga1FUQXBlcnR1cmVNb2RlX0NsZWFuQXBlcnR1cmU7CiAKQEAgLTc4NCwxMSAr
NTI5LDEwIEBADQogICAgICAgICAvLyB0aGUgaW5zdGFsbGVkIHZlcnNpb24gb2YgUVQgZG9lc24n
dCBzdXBwb3J0IGl0IGFuZCBpdCBpc24ndCBzZXJpb3VzIGVub3VnaCB0byAKICAgICAgICAgLy8g
d2FycmFudCBmYWlsaW5nLgogICAgICAgICBRVFNldE1vdmllUHJvcGVydHkobV9wcml2YXRlLT5t
X21vdmllLCBrUVRQcm9wZXJ0eUNsYXNzX1Zpc3VhbCwga1FUVmlzdWFsUHJvcGVydHlJRF9BcGVy
dHVyZU1vZGUsIHNpemVvZihtb2RlKSwgJm1vZGUpOwotICAgICAgICBtX3ByaXZhdGUtPnJlZ2lz
dGVyRHJhd2luZ0NhbGxiYWNrKCk7CiAgICAgfQogfQogCi12b2lkIFFUTW92aWVXaW46OmRpc2Fi
bGVVbnN1cHBvcnRlZFRyYWNrcyh1bnNpZ25lZCYgZW5hYmxlZFRyYWNrQ291bnQsIHVuc2lnbmVk
JiB0b3RhbFRyYWNrQ291bnQpCit2b2lkIFFUTW92aWU6OmRpc2FibGVVbnN1cHBvcnRlZFRyYWNr
cyh1bnNpZ25lZCYgZW5hYmxlZFRyYWNrQ291bnQsIHVuc2lnbmVkJiB0b3RhbFRyYWNrQ291bnQp
CiB7CiAgICAgaWYgKCFtX3ByaXZhdGUtPm1fbW92aWUpIHsKICAgICAgICAgdG90YWxUcmFja0Nv
dW50ID0gMDsKQEAgLTkwMywyMCArNjQ3LDI1IEBADQogICAgIH0KIH0KIAotdm9pZCBRVE1vdmll
V2luOjpzZXREaXNhYmxlZChib29sIGIpCitib29sIFFUTW92aWU6OmlzRGlzYWJsZWQoKSBjb25z
dAogewotICAgIG1fZGlzYWJsZWQgPSBiOworICAgIHJldHVybiBtX3ByaXZhdGUtPm1fZGlzYWJs
ZWQ7CiB9CiAKK3ZvaWQgUVRNb3ZpZTo6c2V0RGlzYWJsZWQoYm9vbCBiKQoreworICAgIG1fcHJp
dmF0ZS0+bV9kaXNhYmxlZCA9IGI7Cit9CiAKLWJvb2wgUVRNb3ZpZVdpbjo6aGFzVmlkZW8oKSBj
b25zdAorCitib29sIFFUTW92aWU6Omhhc1ZpZGVvKCkgY29uc3QKIHsKICAgICBpZiAoIW1fcHJp
dmF0ZS0+bV9tb3ZpZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiAoR2V0TW92
aWVJbmRUcmFja1R5cGUobV9wcml2YXRlLT5tX21vdmllLCAxLCBWaXN1YWxNZWRpYUNoYXJhY3Rl
cmlzdGljLCBtb3ZpZVRyYWNrQ2hhcmFjdGVyaXN0aWMgfCBtb3ZpZVRyYWNrRW5hYmxlZE9ubHkp
KTsKIH0KIAotYm9vbCBRVE1vdmllV2luOjpoYXNBdWRpbygpIGNvbnN0Citib29sIFFUTW92aWU6
Omhhc0F1ZGlvKCkgY29uc3QKIHsKICAgICBpZiAoIW1fcHJpdmF0ZS0+bV9tb3ZpZSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtOTI0LDE0ICs2NzMsMTQgQEANCiB9CiAKIAotYm9vbCBRVE1v
dmllV2luOjpoYXNDbG9zZWRDYXB0aW9ucygpIGNvbnN0IAorYm9vbCBRVE1vdmllOjpoYXNDbG9z
ZWRDYXB0aW9ucygpIGNvbnN0IAogewogICAgIGlmICghbV9wcml2YXRlLT5tX21vdmllKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIEdldE1vdmllSW5kVHJhY2tUeXBlKG1fcHJp
dmF0ZS0+bV9tb3ZpZSwgMSwgY2xvc2VkQ2FwdGlvblRyYWNrVHlwZSwgbW92aWVUcmFja01lZGlh
VHlwZSk7CiB9CiAKLXZvaWQgUVRNb3ZpZVdpbjo6c2V0Q2xvc2VkQ2FwdGlvbnNWaXNpYmxlKGJv
b2wgdmlzaWJsZSkKK3ZvaWQgUVRNb3ZpZTo6c2V0Q2xvc2VkQ2FwdGlvbnNWaXNpYmxlKGJvb2wg
dmlzaWJsZSkKIHsKICAgICBpZiAoIW1fcHJpdmF0ZS0+bV9tb3ZpZSkKICAgICAgICAgcmV0dXJu
OwpAQCAtOTQ0LDE2ICs2OTMsNiBAQA0KICAgICBRVFNldFRyYWNrUHJvcGVydHkoY2NUcmFjaywg
Y2xvc2VkQ2FwdGlvblRyYWNrVHlwZSwgY2xvc2VkQ2FwdGlvbkRpc3BsYXlQcm9wZXJ0eUlELCBz
aXplb2YoZG9EaXNwbGF5KSwgJmRvRGlzcGxheSk7CiB9CiAKLXBhc2NhbCBPU0VyciBtb3ZpZURy
YXdpbmdDb21wbGV0ZVByb2MoTW92aWUgbW92aWUsIGxvbmcgZGF0YSkKLXsKLSAgICBVcHBQYXJh
bSBwYXJhbTsKLSAgICBwYXJhbS5sb25nVmFsdWUgPSBkYXRhOwotICAgIFFUTW92aWVXaW5Qcml2
YXRlKiBtcCA9IHN0YXRpY19jYXN0PFFUTW92aWVXaW5Qcml2YXRlKj4ocGFyYW0ucHRyKTsKLSAg
ICBpZiAobXApCi0gICAgICAgIG1wLT5kcmF3aW5nQ29tcGxldGUoKTsKLSAgICByZXR1cm4gMDsK
LX0KLQogc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVN1cHBvcnRlZFR5cGVzKCkgCiB7CiAgICAgaWYg
KGdTdXBwb3J0ZWRUeXBlcykKQEAgLTEwNDMsMTMgKzc4MiwxMyBAQA0KICAgICB9CiB9CiAKLXVu
c2lnbmVkIFFUTW92aWVXaW46OmNvdW50U3VwcG9ydGVkVHlwZXMoKQordW5zaWduZWQgUVRNb3Zp
ZTo6Y291bnRTdXBwb3J0ZWRUeXBlcygpCiB7CiAgICAgaW5pdGlhbGl6ZVN1cHBvcnRlZFR5cGVz
KCk7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihnU3VwcG9ydGVkVHlwZXMtPnNp
emUoKSk7CiB9CiAKLXZvaWQgUVRNb3ZpZVdpbjo6Z2V0U3VwcG9ydGVkVHlwZSh1bnNpZ25lZCBp
bmRleCwgY29uc3QgVUNoYXIqJiBzdHIsIHVuc2lnbmVkJiBsZW4pCit2b2lkIFFUTW92aWU6Omdl
dFN1cHBvcnRlZFR5cGUodW5zaWduZWQgaW5kZXgsIGNvbnN0IFVDaGFyKiYgc3RyLCB1bnNpZ25l
ZCYgbGVuKQogewogICAgIGluaXRpYWxpemVTdXBwb3J0ZWRUeXBlcygpOwogICAgIEFTU0VSVChp
bmRleCA8IGdTdXBwb3J0ZWRUeXBlcy0+c2l6ZSgpKTsKQEAgLTEwNjcsMTQgKzgwNiw4IEBADQog
ICAgIAogfQogCi12b2lkIFFUTW92aWVXaW46OnNldFRhc2tUaW1lckZ1bmNzKFNldFRhc2tUaW1l
ckRlbGF5RnVuYyBzZXRUYXNrVGltZXJEZWxheSwgU3RvcFRhc2tUaW1lckZ1bmMgc3RvcFRhc2tU
aW1lcikKK2Jvb2wgUVRNb3ZpZTo6aW5pdGlhbGl6ZVF1aWNrVGltZSgpIAogewotICAgIGdTZXRU
YXNrVGltZXJEZWxheSA9IHNldFRhc2tUaW1lckRlbGF5OwotICAgIGdTdG9wVGFza1RpbWVyID0g
c3RvcFRhc2tUaW1lcjsKLX0KLQotYm9vbCBRVE1vdmllV2luOjppbml0aWFsaXplUXVpY2tUaW1l
KCkgCi17CiAgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKICAgICBzdGF0aWMg
Ym9vbCBpbml0aWFsaXphdGlvblN1Y2NlZWRlZCA9IGZhbHNlOwogICAgIGlmICghaW5pdGlhbGl6
ZWQpIHsKQEAgLTEwOTIsNzcgKzgyNSwxNiBAQA0KICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgfQogICAgICAgICBFbnRlck1vdmllcygpOwotICAgICAgICBnTW92aWVEcmF3aW5n
Q29tcGxldGVVUFAgPSBOZXdNb3ZpZURyYXdpbmdDb21wbGV0ZVVQUChtb3ZpZURyYXdpbmdDb21w
bGV0ZVByb2MpOwogICAgICAgICBpbml0aWFsaXphdGlvblN1Y2NlZWRlZCA9IHRydWU7CiAgICAg
fQogICAgIHJldHVybiBpbml0aWFsaXphdGlvblN1Y2NlZWRlZDsKIH0KIAotTFJFU1VMVCBRVE1v
dmllV2luOjpmdWxsc2NyZWVuV25kUHJvYyhIV05EIHduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0g
d1BhcmFtLCBMUEFSQU0gbFBhcmFtKQorTW92aWUgUVRNb3ZpZTo6Z2V0TW92aWVIYW5kbGUoKSBj
b25zdCAKIHsKLSAgICBRVE1vdmllV2luKiBtb3ZpZSA9IHN0YXRpY19jYXN0PFFUTW92aWVXaW4q
PihHZXRQcm9wKHduZCwgZnVsbHNjcmVlblFUTW92aWVXaW5Qb2ludGVyUHJvcCkpOwotCi0gICAg
aWYgKG1lc3NhZ2UgPT0gV01fREVTVFJPWSkKLSAgICAgICAgUmVtb3ZlUHJvcCh3bmQsIGZ1bGxz
Y3JlZW5RVE1vdmllV2luUG9pbnRlclByb3ApOwotCi0gICAgaWYgKCFtb3ZpZSkKLSAgICAgICAg
cmV0dXJuIERlZldpbmRvd1Byb2Mod25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7Ci0KLSAg
ICByZXR1cm4gbW92aWUtPm1fcHJpdmF0ZS0+bV9mdWxsc2NyZWVuQ2xpZW50LT5mdWxsc2NyZWVu
Q2xpZW50V25kUHJvYyh3bmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtKTsKKyAgICByZXR1cm4g
bV9wcml2YXRlLT5tX21vdmllOwogfQogCi1IV05EIFFUTW92aWVXaW46OmVudGVyRnVsbHNjcmVl
bihRVE1vdmllV2luRnVsbHNjcmVlbkNsaWVudCogY2xpZW50KQotewotICAgIG1fcHJpdmF0ZS0+
bV9mdWxsc2NyZWVuQ2xpZW50ID0gY2xpZW50OwotICAgIAotICAgIEJlZ2luRnVsbFNjcmVlbigm
bV9wcml2YXRlLT5tX2Z1bGxzY3JlZW5SZXN0b3JlU3RhdGUsIDAsIDAsIDAsICZtX3ByaXZhdGUt
Pm1fZnVsbHNjcmVlbldpbmRvdywgMCwgZnVsbFNjcmVlbkFsbG93RXZlbnRzKTsgCi0gICAgUVRN
TFNldFdpbmRvd1duZFByb2MobV9wcml2YXRlLT5tX2Z1bGxzY3JlZW5XaW5kb3csIGZ1bGxzY3Jl
ZW5XbmRQcm9jKTsKLSAgICBDcmVhdGVQb3J0QXNzb2NpYXRpb24oR2V0UG9ydE5hdGl2ZVdpbmRv
dyhtX3ByaXZhdGUtPm1fZnVsbHNjcmVlbldpbmRvdyksIDAsIDApOwotCi0gICAgR2V0TW92aWVC
b3gobV9wcml2YXRlLT5tX21vdmllLCAmbV9wcml2YXRlLT5tX2Z1bGxzY3JlZW5SZWN0KTsKLSAg
ICBHZXRNb3ZpZUdXb3JsZChtX3ByaXZhdGUtPm1fbW92aWUsICZtX3ByaXZhdGUtPm1fZnVsbHNj
cmVlbk9yaWdHV29ybGQsIDApOwotICAgIFNldE1vdmllR1dvcmxkKG1fcHJpdmF0ZS0+bV9tb3Zp
ZSwgcmVpbnRlcnByZXRfY2FzdDxDR3JhZlB0cj4obV9wcml2YXRlLT5tX2Z1bGxzY3JlZW5XaW5k
b3cpLCBHZXRHV29ybGREZXZpY2UocmVpbnRlcnByZXRfY2FzdDxDR3JhZlB0cj4obV9wcml2YXRl
LT5tX2Z1bGxzY3JlZW5XaW5kb3cpKSk7Ci0KLSAgICAvLyBTZXQgdGhlIHNpemUgb2YgdGhlIGJv
eCB0byBwcmVzZXJ2ZSBhc3BlY3QgcmF0aW8KLSAgICBSZWN0IHJlY3QgPSBtX3ByaXZhdGUtPm1f
ZnVsbHNjcmVlbldpbmRvdy0+cG9ydFJlY3Q7Ci0KLSAgICBmbG9hdCBtb3ZpZVJhdGlvID0gc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KG1fcHJpdmF0ZS0+bV93aWR0aCkgLyBtX3ByaXZhdGUtPm1faGVpZ2h0
OwotICAgIGludCB3aW5kb3dXaWR0aCA9ICByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0OwotICAgIGlu
dCB3aW5kb3dIZWlnaHQgPSByZWN0LmJvdHRvbSAtIHJlY3QudG9wOwotICAgIGZsb2F0IHdpbmRv
d1JhdGlvID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHdpbmRvd1dpZHRoKSAvIHdpbmRvd0hlaWdodDsK
LSAgICBpbnQgYWN0dWFsV2lkdGggPSAod2luZG93UmF0aW8gPiBtb3ZpZVJhdGlvKSA/ICh3aW5k
b3dIZWlnaHQgKiBtb3ZpZVJhdGlvKSA6IHdpbmRvd1dpZHRoOwotICAgIGludCBhY3R1YWxIZWln
aHQgPSAod2luZG93UmF0aW8gPCBtb3ZpZVJhdGlvKSA/ICh3aW5kb3dXaWR0aCAvIG1vdmllUmF0
aW8pIDogd2luZG93SGVpZ2h0OwotICAgIGludCBvZmZzZXRYID0gKHdpbmRvd1dpZHRoIC0gYWN0
dWFsV2lkdGgpIC8gMjsKLSAgICBpbnQgb2Zmc2V0WSA9ICh3aW5kb3dIZWlnaHQgLSBhY3R1YWxI
ZWlnaHQpIC8gMjsKLQotICAgIHJlY3QubGVmdCA9IG9mZnNldFg7Ci0gICAgcmVjdC5yaWdodCA9
IG9mZnNldFggKyBhY3R1YWxXaWR0aDsKLSAgICByZWN0LnRvcCA9IG9mZnNldFk7Ci0gICAgcmVj
dC5ib3R0b20gPSBvZmZzZXRZICsgYWN0dWFsSGVpZ2h0OwotCi0gICAgU2V0TW92aWVCb3gobV9w
cml2YXRlLT5tX21vdmllLCAmcmVjdCk7Ci0gICAgU2hvd0hpZGVUYXNrQmFyKHRydWUpOwotCi0g
ICAgLy8gU2V0IHRoZSAndGhpcycgcG9pbnRlciBvbiB0aGUgSFdORAotICAgIEhXTkQgd25kID0g
c3RhdGljX2Nhc3Q8SFdORD4oR2V0UG9ydE5hdGl2ZVdpbmRvdyhtX3ByaXZhdGUtPm1fZnVsbHNj
cmVlbldpbmRvdykpOwotICAgIFNldFByb3Aod25kLCBmdWxsc2NyZWVuUVRNb3ZpZVdpblBvaW50
ZXJQcm9wLCBzdGF0aWNfY2FzdDxIQU5ETEU+KHRoaXMpKTsKLQotICAgIHJldHVybiB3bmQ7Ci19
Ci0KLXZvaWQgUVRNb3ZpZVdpbjo6ZXhpdEZ1bGxzY3JlZW4oKQotewotICAgIGlmICghbV9wcml2
YXRlLT5tX2Z1bGxzY3JlZW5XaW5kb3cpCi0gICAgICAgIHJldHVybjsKLQotICAgIEhXTkQgd25k
ID0gc3RhdGljX2Nhc3Q8SFdORD4oR2V0UG9ydE5hdGl2ZVdpbmRvdyhtX3ByaXZhdGUtPm1fZnVs
bHNjcmVlbldpbmRvdykpOwotICAgIERlc3Ryb3lQb3J0QXNzb2NpYXRpb24ocmVpbnRlcnByZXRf
Y2FzdDxDR3JhZlB0cj4obV9wcml2YXRlLT5tX2Z1bGxzY3JlZW5XaW5kb3cpKTsKLSAgICBTZXRN
b3ZpZUdXb3JsZChtX3ByaXZhdGUtPm1fbW92aWUsIG1fcHJpdmF0ZS0+bV9mdWxsc2NyZWVuT3Jp
Z0dXb3JsZCwgMCk7Ci0gICAgRW5kRnVsbFNjcmVlbihtX3ByaXZhdGUtPm1fZnVsbHNjcmVlblJl
c3RvcmVTdGF0ZSwgMEwpOwotICAgIFNldE1vdmllQm94KG1fcHJpdmF0ZS0+bV9tb3ZpZSwgJm1f
cHJpdmF0ZS0+bV9mdWxsc2NyZWVuUmVjdCk7Ci0gICAgbV9wcml2YXRlLT5tX2Z1bGxzY3JlZW5X
aW5kb3cgPSAwOwotfQotCiBCT09MIFdJTkFQSSBEbGxNYWluKEhJTlNUQU5DRSBoaW5zdERMTCwg
RFdPUkQgZmR3UmVhc29uLCBMUFZPSUQgbHB2UmVzZXJ2ZWQpCiB7CiAgICAgc3dpdGNoIChmZHdS
ZWFzb24pIHsKSW5kZXg6IFFUTW92aWUuaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFFUTW92aWUuaAkocmV2
aXNpb24gNTc2NjMpDQorKysgUVRNb3ZpZS5oCSh3b3JraW5nIGNvcHkpDQpAQCAtMjMsMTEgKzIz
LDEyIEBADQogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBRVE1vdmllV2luX2gKLSNk
ZWZpbmUgUVRNb3ZpZVdpbl9oCisjaWZuZGVmIFFUTW92aWVfaAorI2RlZmluZSBRVE1vdmllX2gK
IAogI2luY2x1ZGUgPFVuaWNvZGUuaD4KICNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KIAogI2lmZGVmIFFUTU9WSUVXSU5fRVhQT1JUUwogI2RlZmluZSBR
VE1PVklFV0lOX0FQSSBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKQEAgLTM1LDIyICszNiwxNyBAQA0K
ICNkZWZpbmUgUVRNT1ZJRVdJTl9BUEkgX19kZWNsc3BlYyhkbGxpbXBvcnQpCiAjZW5kaWYKIAot
Y2xhc3MgUVRNb3ZpZVdpbjsKLWNsYXNzIFFUTW92aWVXaW5Qcml2YXRlOworY2xhc3MgUVRNb3Zp
ZTsKK2NsYXNzIFFUTW92aWVQcml2YXRlOwordHlwZWRlZiBzdHJ1Y3QgTW92aWVUeXBlKiogTW92
aWU7CiAKLWNsYXNzIFFUTW92aWVXaW5DbGllbnQgeworY2xhc3MgUVRNb3ZpZUNsaWVudCB7CiBw
dWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIG1vdmllRW5kZWQoUVRNb3ZpZVdpbiopID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgbW92aWVMb2FkU3RhdGVDaGFuZ2VkKFFUTW92aWVXaW4qKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIG1vdmllVGltZUNoYW5nZWQoUVRNb3ZpZVdpbiopID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgbW92aWVOZXdJbWFnZUF2YWlsYWJsZShRVE1vdmllV2luKikgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBtb3ZpZUVuZGVkKFFUTW92aWUqKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IG1vdmllTG9hZFN0YXRlQ2hhbmdlZChRVE1vdmllKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBt
b3ZpZVRpbWVDaGFuZ2VkKFFUTW92aWUqKSA9IDA7CiB9OwogCi1jbGFzcyBRVE1vdmllV2luRnVs
bHNjcmVlbkNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCBMUkVTVUxUIGZ1bGxzY3JlZW5D
bGllbnRXbmRQcm9jKEhXTkQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNLCBMUEFSQU0pID0gMDsKLX07
Ci0KIGVudW0gewogICAgIFFUTW92aWVMb2FkU3RhdGVFcnJvciA9IC0xTCwKICAgICBRVE1vdmll
TG9hZFN0YXRlTG9hZGVkICA9IDIwMDBMLApAQCAtNjEsMTkgKzU3LDIwIEBADQogCiB0eXBlZGVm
IGNvbnN0IHN0cnVjdCBfX0NGVVJMICogQ0ZVUkxSZWY7CiAKLWNsYXNzIFFUTU9WSUVXSU5fQVBJ
IFFUTW92aWVXaW4geworY2xhc3MgUVRNT1ZJRVdJTl9BUEkgUVRNb3ZpZSA6IHB1YmxpYyBSZWZD
b3VudGVkPFFUTW92aWU+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplUXVp
Y2tUaW1lKCk7Ci0KLSAgICB0eXBlZGVmIHZvaWQgKCpTZXRUYXNrVGltZXJEZWxheUZ1bmMpKGRv
dWJsZSk7Ci0gICAgdHlwZWRlZiB2b2lkICgqU3RvcFRhc2tUaW1lckZ1bmMpKCk7Ci0gICAgc3Rh
dGljIHZvaWQgc2V0VGFza1RpbWVyRnVuY3MoU2V0VGFza1RpbWVyRGVsYXlGdW5jLCBTdG9wVGFz
a1RpbWVyRnVuYyk7CiAgICAgc3RhdGljIHZvaWQgdGFza1RpbWVyRmlyZWQoKTsKIAotICAgIFFU
TW92aWVXaW4oUVRNb3ZpZVdpbkNsaWVudCopOwotICAgIH5RVE1vdmllV2luKCk7CisgICAgUVRN
b3ZpZShRVE1vdmllQ2xpZW50Kik7CisgICAgflFUTW92aWUoKTsKIAorICAgIHZvaWQgYWRkQ2xp
ZW50KFFUTW92aWVDbGllbnQqKTsKKyAgICB2b2lkIHJlbW92ZUNsaWVudChRVE1vdmllQ2xpZW50
Kik7CisKICAgICB2b2lkIGxvYWQoY29uc3QgVUNoYXIqIHVybCwgaW50IGxlbiwgYm9vbCBwcmVz
ZXJ2ZXNQaXRjaCk7CisgICAgdm9pZCBsb2FkKENGVVJMUmVmLCBib29sIHByZXNlcnZlc1BpdGNo
KTsKKwogICAgIGxvbmcgbG9hZFN0YXRlKCkgY29uc3Q7CiAgICAgZmxvYXQgbWF4VGltZUxvYWRl
ZCgpIGNvbnN0OwogCkBAIC05MywxMyArOTAsMTAgQEANCiAgICAgdW5zaWduZWQgZGF0YVNpemUo
KSBjb25zdDsKIAogICAgIHZvaWQgZ2V0TmF0dXJhbFNpemUoaW50JiB3aWR0aCwgaW50JiBoZWln
aHQpOwotICAgIHZvaWQgc2V0U2l6ZShpbnQgd2lkdGgsIGludCBoZWlnaHQpOwogCi0gICAgdm9p
ZCBzZXRWaXNpYmxlKGJvb2wpOwotICAgIHZvaWQgcGFpbnQoSERDLCBpbnQgeCwgaW50IHkpOwot
ICAgIHZvaWQgZ2V0Q3VycmVudEZyYW1lSW5mbyh2b2lkKiYgYnVmZmVyLCB1bnNpZ25lZCYgYml0
c1BlclBpeGVsLCB1bnNpZ25lZCYgcm93Qnl0ZXMsIHVuc2lnbmVkJiB3aWR0aCwgdW5zaWduZWQm
IGhlaWdodCk7Ci0KICAgICB2b2lkIGRpc2FibGVVbnN1cHBvcnRlZFRyYWNrcyh1bnNpZ25lZCYg
ZW5hYmxlZFRyYWNrQ291bnQsIHVuc2lnbmVkJiB0b3RhbFRyYWNrQ291bnQpOworCisgICAgYm9v
bCBpc0Rpc2FibGVkKCkgY29uc3Q7CiAgICAgdm9pZCBzZXREaXNhYmxlZChib29sKTsKIAogICAg
IGJvb2wgaGFzVmlkZW8oKSBjb25zdDsKQEAgLTExMSwxNyArMTA1LDExIEBADQogICAgIHN0YXRp
YyB1bnNpZ25lZCBjb3VudFN1cHBvcnRlZFR5cGVzKCk7CiAgICAgc3RhdGljIHZvaWQgZ2V0U3Vw
cG9ydGVkVHlwZSh1bnNpZ25lZCBpbmRleCwgY29uc3QgVUNoYXIqJiBzdHIsIHVuc2lnbmVkJiBs
ZW4pOwogCi0gICAgLy8gUmV0dXJucyB0aGUgZnVsbC1zY3JlZW4gd2luZG93IGNyZWF0ZWQKLSAg
ICBIV05EIGVudGVyRnVsbHNjcmVlbihRVE1vdmllV2luRnVsbHNjcmVlbkNsaWVudCopOwotICAg
IHZvaWQgZXhpdEZ1bGxzY3JlZW4oKTsKKyAgICBNb3ZpZSBnZXRNb3ZpZUhhbmRsZSgpIGNvbnN0
OwogCiBwcml2YXRlOgotICAgIHZvaWQgbG9hZChDRlVSTFJlZiwgYm9vbCBwcmVzZXJ2ZXNQaXRj
aCk7Ci0gICAgc3RhdGljIExSRVNVTFQgZnVsbHNjcmVlblduZFByb2MoSFdORCwgVUlOVCBtZXNz
YWdlLCBXUEFSQU0sIExQQVJBTSk7Ci0KLSAgICBRVE1vdmllV2luUHJpdmF0ZSogbV9wcml2YXRl
OwotICAgIGJvb2wgbV9kaXNhYmxlZDsKLSAgICBmcmllbmQgY2xhc3MgUVRNb3ZpZVdpblByaXZh
dGU7CisgICAgUVRNb3ZpZVByaXZhdGUqIG1fcHJpdmF0ZTsKKyAgICBmcmllbmQgY2xhc3MgUVRN
b3ZpZVByaXZhdGU7CiB9OwogCiAjZW5kaWYKSW5kZXg6IFFUTW92aWVXaW4uY3BwDQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09DQotLS0gUVRNb3ZpZVdpbi5jcHAJKHJldmlzaW9uIDU4MTg3KQ0KKysrIFFUTW92aWVXaW4u
Y3BwCSh3b3JraW5nIGNvcHkpDQpAQCAtMjksNyArMjksNyBAQA0KIC8vIFB1dCBNb3ZpZXMuaCBm
aXJzdCBzbyBidWlsZCBmYWlsdXJlcyBoZXJlIHBvaW50IGNsZWFybHkgdG8gUXVpY2tUaW1lCiAj
aW5jbHVkZSA8TW92aWVzLmg+CiAKLSNpbmNsdWRlICJRVE1vdmllV2luVGltZXIuaCIKKyNpbmNs
dWRlICJRVE1vdmllVGFzay5oIgogI2luY2x1ZGUgPEdYTWF0aC5oPgogI2luY2x1ZGUgPFFUTUwu
aD4KICNpbmNsdWRlIDxRdWlja1RpbWVDb21wb25lbnRzLmg+CkBAIC00MiwxMSArNDIsNiBAQA0K
IAogc3RhdGljIGNvbnN0IGxvbmcgbWluaW11bVF1aWNrVGltZVZlcnNpb24gPSAweDA3MzAwMDAw
OyAvLyA3LjMKIAotc3RhdGljIGNvbnN0IGxvbmcgY2xvc2VkQ2FwdGlvblRyYWNrVHlwZSA9ICdj
bGNwJzsKLXN0YXRpYyBjb25zdCBsb25nIHN1YlRpdGxlVHJhY2tUeXBlID0gJ3NidGwnOwotc3Rh
dGljIGNvbnN0IGxvbmcgbXBlZzRPYmplY3REZXNjcmlwdGlvblRyYWNrVHlwZSA9ICdvZHNtJzsK
LXN0YXRpYyBjb25zdCBsb25nIG1wZWc0U2NlbmVEZXNjcmlwdGlvblRyYWNrVHlwZSA9ICdzZHNt
JzsKLXN0YXRpYyBjb25zdCBsb25nIGNsb3NlZENhcHRpb25EaXNwbGF5UHJvcGVydHlJRCA9ICdk
aXNwJzsKIHN0YXRpYyBMUENUU1RSIGZ1bGxzY3JlZW5RVE1vdmllV2luUG9pbnRlclByb3AgPSBU
RVhUKCJmdWxsc2NyZWVuUVRNb3ZpZVdpblBvaW50ZXIiKTsKIAogLy8gUmVzaXppbmcgR1dvcmxk
cyBpcyBzbG93LCBnaXZlIHRoZW0gYSBtaW5pbXVtIHNpemUgc28gc2l6ZSBvZiBzbWFsbCAKQEAg
LTY2LDMzICs2MSwxMyBAQA0KIHN0YXRpYyBWZWN0b3I8Q0ZTdHJpbmdSZWY+KiBnU3VwcG9ydGVk
VHlwZXMgPSAwOwogc3RhdGljIFNJbnQzMiBxdWlja1RpbWVWZXJzaW9uID0gMDsKIAotc3RhdGlj
IFFUTW92aWVXaW46OlNldFRhc2tUaW1lckRlbGF5RnVuYyBnU2V0VGFza1RpbWVyRGVsYXkgPSAw
Owotc3RhdGljIFFUTW92aWVXaW46OlN0b3BUYXNrVGltZXJGdW5jIGdTdG9wVGFza1RpbWVyID0g
MDsKLQotc3RhdGljIHZvaWQgdXBkYXRlVGFza1RpbWVyKGludCBtYXhJbnRlcnZhbCA9IDEwMDAp
Ci17Ci0gICAgaWYgKCFnVGFza0xpc3QtPnNpemUoKSkgewotICAgICAgICBnU3RvcFRhc2tUaW1l
cigpOwotICAgICAgICByZXR1cm47ICAgIAotICAgIH0KLSAgICAKLSAgICBsb25nIGludGVydmFs
SW5NUzsKLSAgICBRVEdldFRpbWVVbnRpbE5leHRUYXNrKCZpbnRlcnZhbEluTVMsIDEwMDApOwot
ICAgIGlmIChpbnRlcnZhbEluTVMgPiBtYXhJbnRlcnZhbCkKLSAgICAgICAgaW50ZXJ2YWxJbk1T
ID0gbWF4SW50ZXJ2YWw7Ci0gICAgZ1NldFRhc2tUaW1lckRlbGF5KHN0YXRpY19jYXN0PGZsb2F0
PihpbnRlcnZhbEluTVMpIC8gMTAwMCk7Ci19Ci0KLWNsYXNzIFFUTW92aWVXaW5Qcml2YXRlIDog
cHVibGljIE5vbmNvcHlhYmxlIHsKK2NsYXNzIFFUTW92aWVXaW5Qcml2YXRlIDogcHVibGljIFFU
TW92aWVDbGllbnQgewogcHVibGljOgotICAgIFFUTW92aWVXaW5Qcml2YXRlKCk7Ci0gICAgflFU
TW92aWVXaW5Qcml2YXRlKCk7Ci0gICAgdm9pZCB0YXNrKCk7Ci0gICAgdm9pZCBzdGFydFRhc2so
KTsKLSAgICB2b2lkIGVuZFRhc2soKTsKKyAgICBRVE1vdmllV2luUHJpdmF0ZShRVE1vdmllV2lu
KiBtb3ZpZVdpbik7CisgICAgdmlydHVhbCB+UVRNb3ZpZVdpblByaXZhdGUoKTsKIAotICAgIHZv
aWQgY3JlYXRlTW92aWVDb250cm9sbGVyKCk7CiAgICAgdm9pZCByZWdpc3RlckRyYXdpbmdDYWxs
YmFjaygpOworICAgIHZvaWQgdW5yZWdpc3RlckRyYXdpbmdDYWxsYmFjaygpOwogICAgIHZvaWQg
ZHJhd2luZ0NvbXBsZXRlKCk7CiAgICAgdm9pZCB1cGRhdGVHV29ybGQoKTsKICAgICB2b2lkIGNy
ZWF0ZUdXb3JsZCgpOwpAQCAtMTAzLDE2ICs3OCwxNSBAQA0KIAogICAgIHZvaWQgc2V0U2l6ZShp
bnQsIGludCk7CiAKKyAgICB2aXJ0dWFsIHZvaWQgbW92aWVFbmRlZChRVE1vdmllKik7CisgICAg
dmlydHVhbCB2b2lkIG1vdmllTG9hZFN0YXRlQ2hhbmdlZChRVE1vdmllKik7CisgICAgdmlydHVh
bCB2b2lkIG1vdmllVGltZUNoYW5nZWQoUVRNb3ZpZSopOworCiAgICAgUVRNb3ZpZVdpbiogbV9t
b3ZpZVdpbjsKKyAgICBSZWZQdHI8UVRNb3ZpZT4gbV9xdE1vdmllOwogICAgIE1vdmllIG1fbW92
aWU7Ci0gICAgTW92aWVDb250cm9sbGVyIG1fbW92aWVDb250cm9sbGVyOwotICAgIGJvb2wgbV90
YXNraW5nOwogICAgIFFUTW92aWVXaW5DbGllbnQqIG1fY2xpZW50OwogICAgIGxvbmcgbV9sb2Fk
U3RhdGU7Ci0gICAgYm9vbCBtX2VuZGVkOwotICAgIGJvb2wgbV9zZWVraW5nOwotICAgIGZsb2F0
IG1fbGFzdE1lZGlhVGltZTsKLSAgICBkb3VibGUgbV9sYXN0TG9hZFN0YXRlQ2hlY2tUaW1lOwog
ICAgIGludCBtX3dpZHRoOwogICAgIGludCBtX2hlaWdodDsKICAgICBib29sIG1fdmlzaWJsZTsK
QEAgLTEyMCwxMiArOTQsOCBAQA0KICAgICBpbnQgbV9nV29ybGRXaWR0aDsKICAgICBpbnQgbV9n
V29ybGRIZWlnaHQ7CiAgICAgR1dvcmxkUHRyIG1fc2F2ZWRHV29ybGQ7Ci0gICAgbG9uZyBtX2xv
YWRFcnJvcjsKICAgICBmbG9hdCBtX3dpZHRoU2NhbGVGYWN0b3I7CiAgICAgZmxvYXQgbV9oZWln
aHRTY2FsZUZhY3RvcjsKLSAgICBDRlVSTFJlZiBtX2N1cnJlbnRVUkw7Ci0gICAgZmxvYXQgbV90
aW1lVG9SZXN0b3JlOwotICAgIGZsb2F0IG1fcmF0ZVRvUmVzdG9yZTsKICNpZiAhQVNTRVJUX0RJ
U0FCTEVECiAgICAgYm9vbCBtX3NjYWxlQ2FjaGVkOwogI2VuZGlmCkBAIC0xMzQsMTkgKzEwNCwx
NCBAQA0KICAgICBSZWN0IG1fZnVsbHNjcmVlblJlY3Q7CiAgICAgUVRNb3ZpZVdpbkZ1bGxzY3Jl
ZW5DbGllbnQqIG1fZnVsbHNjcmVlbkNsaWVudDsKICAgICBjaGFyKiBtX2Z1bGxzY3JlZW5SZXN0
b3JlU3RhdGU7CisgICAgYm9vbCBtX2Rpc2FibGVkOwogfTsKIAotUVRNb3ZpZVdpblByaXZhdGU6
OlFUTW92aWVXaW5Qcml2YXRlKCkKLSAgICA6IG1fbW92aWVXaW4oMCkKK1FUTW92aWVXaW5Qcml2
YXRlOjpRVE1vdmllV2luUHJpdmF0ZShRVE1vdmllV2luKiBtb3ZpZVdpbikKKyAgICA6IG1fbW92
aWVXaW4obW92aWVXaW4pCiAgICAgLCBtX21vdmllKDApCi0gICAgLCBtX21vdmllQ29udHJvbGxl
cigwKQotICAgICwgbV90YXNraW5nKGZhbHNlKQogICAgICwgbV9jbGllbnQoMCkKICAgICAsIG1f
bG9hZFN0YXRlKDApCi0gICAgLCBtX2VuZGVkKGZhbHNlKQotICAgICwgbV9zZWVraW5nKGZhbHNl
KQotICAgICwgbV9sYXN0TWVkaWFUaW1lKDApCi0gICAgLCBtX2xhc3RMb2FkU3RhdGVDaGVja1Rp
bWUoMCkKICAgICAsIG1fd2lkdGgoMCkKICAgICAsIG1faGVpZ2h0KDApCiAgICAgLCBtX3Zpc2li
bGUoZmFsc2UpCkBAIC0xNTQsMTIgKzExOSw4IEBADQogICAgICwgbV9nV29ybGRXaWR0aCgwKQog
ICAgICwgbV9nV29ybGRIZWlnaHQoMCkKICAgICAsIG1fc2F2ZWRHV29ybGQoMCkKLSAgICAsIG1f
bG9hZEVycm9yKDApCiAgICAgLCBtX3dpZHRoU2NhbGVGYWN0b3IoMSkKICAgICAsIG1faGVpZ2h0
U2NhbGVGYWN0b3IoMSkKLSAgICAsIG1fY3VycmVudFVSTCgwKQotICAgICwgbV90aW1lVG9SZXN0
b3JlKC0xLjBmKQotICAgICwgbV9yYXRlVG9SZXN0b3JlKC0xLjBmKQogI2lmICFBU1NFUlRfRElT
QUJMRUQKICAgICAsIG1fc2NhbGVDYWNoZWQoZmFsc2UpCiAjZW5kaWYKQEAgLTE2Nyw2ICsxMjgs
OCBAQA0KICAgICAsIG1fZnVsbHNjcmVlbk9yaWdHV29ybGQoMCkKICAgICAsIG1fZnVsbHNjcmVl
bkNsaWVudCgwKQogICAgICwgbV9mdWxsc2NyZWVuUmVzdG9yZVN0YXRlKDApCisgICAgLCBtX2Rp
c2FibGVkKGZhbHNlKQorICAgICwgbV9xdE1vdmllKDApCiB7CiAgICAgUmVjdCByZWN0ID0geyAw
LCAwLCAwLCAwIH07CiAgICAgbV9mdWxsc2NyZWVuUmVjdCA9IHJlY3Q7CkBAIC0xNzYsNDkgKzEz
OSwxMCBAQA0KIHsKICAgICBBU1NFUlQoIW1fZnVsbHNjcmVlbldpbmRvdyk7CiAKLSAgICBlbmRU
YXNrKCk7CiAgICAgaWYgKG1fZ1dvcmxkKQogICAgICAgICBkZWxldGVHV29ybGQoKTsKLSAgICBp
ZiAobV9tb3ZpZUNvbnRyb2xsZXIpCi0gICAgICAgIERpc3Bvc2VNb3ZpZUNvbnRyb2xsZXIobV9t
b3ZpZUNvbnRyb2xsZXIpOwotICAgIGlmIChtX21vdmllKQotICAgICAgICBEaXNwb3NlTW92aWUo
bV9tb3ZpZSk7Ci0gICAgaWYgKG1fY3VycmVudFVSTCkKLSAgICAgICAgQ0ZSZWxlYXNlKG1fY3Vy
cmVudFVSTCk7CiB9CiAKLXZvaWQgUVRNb3ZpZVdpbjo6dGFza1RpbWVyRmlyZWQoKQotewotICAg
IC8vIFRoZSBoYXNoIGNvbnRlbnQgbWlnaHQgY2hhbmdlIGR1cmluZyB0YXNrKCkKLSAgICBWZWN0
b3I8UVRNb3ZpZVdpblByaXZhdGUqPiB0YXNrczsKLSAgICBjb3B5VG9WZWN0b3IoKmdUYXNrTGlz
dCwgdGFza3MpOwotICAgIHNpemVfdCBjb3VudCA9IHRhc2tzLnNpemUoKTsKLSAgICBmb3IgKHVu
c2lnbmVkIG4gPSAwOyBuIDwgY291bnQ7ICsrbikKLSAgICAgICAgdGFza3Nbbl0tPnRhc2soKTsK
LQotICAgIHVwZGF0ZVRhc2tUaW1lcigpOwotfQotCi12b2lkIFFUTW92aWVXaW5Qcml2YXRlOjpz
dGFydFRhc2soKSAKLXsKLSAgICBpZiAobV90YXNraW5nKQotICAgICAgICByZXR1cm47Ci0gICAg
aWYgKCFnVGFza0xpc3QpCi0gICAgICAgIGdUYXNrTGlzdCA9IG5ldyBIYXNoU2V0PFFUTW92aWVX
aW5Qcml2YXRlKj47Ci0gICAgZ1Rhc2tMaXN0LT5hZGQodGhpcyk7Ci0gICAgbV90YXNraW5nID0g
dHJ1ZTsKLSAgICB1cGRhdGVUYXNrVGltZXIoKTsKLX0KLQotdm9pZCBRVE1vdmllV2luUHJpdmF0
ZTo6ZW5kVGFzaygpIAotewotICAgIGlmICghbV90YXNraW5nKQotICAgICAgICByZXR1cm47Ci0g
ICAgZ1Rhc2tMaXN0LT5yZW1vdmUodGhpcyk7Ci0gICAgbV90YXNraW5nID0gZmFsc2U7Ci0gICAg
dXBkYXRlVGFza1RpbWVyKCk7Ci19Ci0KIHZvaWQgUVRNb3ZpZVdpblByaXZhdGU6OmNhY2hlTW92
aWVTY2FsZSgpCiB7CiAgICAgUmVjdCBuYXR1cmFsUmVjdDsKQEAgLTIzNSwxMTAgKzE1OSwzOCBA
QA0KICAgICBpZiAobmF0dXJhbEhlaWdodCkKICAgICAgICAgbV9oZWlnaHRTY2FsZUZhY3RvciA9
IChpbml0aWFsUmVjdC5ib3R0b20gLSBpbml0aWFsUmVjdC50b3ApIC8gbmF0dXJhbEhlaWdodDsK
ICNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgbV9zY2FsZUNhY2hlZCA9IHRydWU7OworICAgIG1f
c2NhbGVDYWNoZWQgPSB0cnVlOwogI2VuZGlmCiB9CiAKLXZvaWQgUVRNb3ZpZVdpblByaXZhdGU6
OnRhc2soKSAKK3Bhc2NhbCBPU0VyciBtb3ZpZURyYXdpbmdDb21wbGV0ZVByb2MoTW92aWUgbW92
aWUsIGxvbmcgZGF0YSkKIHsKLSAgICBBU1NFUlQobV90YXNraW5nKTsKLQotICAgIGlmICghbV9s
b2FkRXJyb3IpIHsKLSAgICAgICAgaWYgKG1fbW92aWVDb250cm9sbGVyKQotICAgICAgICAgICAg
TUNJZGxlKG1fbW92aWVDb250cm9sbGVyKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgTW92
aWVzVGFzayhtX21vdmllLCAwKTsKLSAgICB9Ci0KLSAgICAvLyBHZXRNb3ZpZUxvYWRTdGF0ZSBk
b2N1bWVudGF0aW9uIHNheXMgdGhhdCB5b3Ugc2hvdWxkIG5vdCBjYWxsIGl0IG1vcmUgb2Z0ZW4g
dGhhbiBldmVyeSBxdWFydGVyIG9mIGEgc2Vjb25kLgotICAgIGlmIChzeXN0ZW1UaW1lKCkgPj0g
bV9sYXN0TG9hZFN0YXRlQ2hlY2tUaW1lICsgMC4yNSB8fCBtX2xvYWRFcnJvcikgeyAKLSAgICAg
ICAgLy8gSWYgbG9hZCBmYWlscyBRVCdzIGxvYWQgc3RhdGUgaXMgUVRNb3ZpZUxvYWRTdGF0ZUNv
bXBsZXRlLgotICAgICAgICAvLyBUaGlzIGlzIGRpZmZlcmVudCBmcm9tIFFUS2l0IEFQSSBhbmQg
c2VlbXMgc3RyYW5nZS4KLSAgICAgICAgbG9uZyBsb2FkU3RhdGUgPSBtX2xvYWRFcnJvciA/IFFU
TW92aWVMb2FkU3RhdGVFcnJvciA6IEdldE1vdmllTG9hZFN0YXRlKG1fbW92aWUpOwotICAgICAg
ICBpZiAobG9hZFN0YXRlICE9IG1fbG9hZFN0YXRlKSB7Ci0KLSAgICAgICAgICAgIC8vIHdlIG9u
bHkgbmVlZCB0byBlcmFzZSB0aGUgbW92aWUgZ3dvcmxkIHdoZW4gdGhlIGxvYWQgc3RhdGUgY2hh
bmdlcyB0byBsb2FkZWQgd2hpbGUgaXQKLSAgICAgICAgICAgIC8vICBpcyB2aXNpYmxlIGFzIHRo
ZSBnd29ybGQgaXMgZGVzdHJveWVkL2NyZWF0ZWQgd2hlbiB2aXNpYmlsaXR5IGNoYW5nZXMKLSAg
ICAgICAgICAgIGJvb2wgc2hvdWxkUmVzdG9yZVBsYXliYWNrU3RhdGUgPSBmYWxzZTsKLSAgICAg
ICAgICAgIGJvb2wgbW92aWVOZXdseVBsYXlhYmxlID0gbG9hZFN0YXRlID49IFFUTW92aWVMb2Fk
U3RhdGVMb2FkZWQgJiYgbV9sb2FkU3RhdGUgPCBRVE1vdmllTG9hZFN0YXRlTG9hZGVkOwotICAg
ICAgICAgICAgbV9sb2FkU3RhdGUgPSBsb2FkU3RhdGU7Ci0gICAgICAgICAgICBpZiAobW92aWVO
ZXdseVBsYXlhYmxlKSB7Ci0gICAgICAgICAgICAgICAgY2FjaGVNb3ZpZVNjYWxlKCk7Ci0gICAg
ICAgICAgICAgICAgdXBkYXRlTW92aWVTaXplKCk7Ci0gICAgICAgICAgICAgICAgaWYgKG1fdmlz
aWJsZSkKLSAgICAgICAgICAgICAgICAgICAgY2xlYXJHV29ybGQoKTsKLSAgICAgICAgICAgICAg
ICBzaG91bGRSZXN0b3JlUGxheWJhY2tTdGF0ZSA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGlmICghbV9tb3ZpZUNvbnRyb2xsZXIgJiYgbV9sb2FkU3RhdGUgPj0gUVRNb3Zp
ZUxvYWRTdGF0ZUxvYWRlZCkKLSAgICAgICAgICAgICAgICBjcmVhdGVNb3ZpZUNvbnRyb2xsZXIo
KTsKLSAgICAgICAgICAgIG1fY2xpZW50LT5tb3ZpZUxvYWRTdGF0ZUNoYW5nZWQobV9tb3ZpZVdp
bik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChzaG91bGRSZXN0b3JlUGxheWJhY2tT
dGF0ZSAmJiBtX3RpbWVUb1Jlc3RvcmUgIT0gLTEuMGYpIHsKLSAgICAgICAgICAgICAgICBtX21v
dmllV2luLT5zZXRDdXJyZW50VGltZShtX3RpbWVUb1Jlc3RvcmUpOwotICAgICAgICAgICAgICAg
IG1fdGltZVRvUmVzdG9yZSA9IC0xLjBmOwotICAgICAgICAgICAgICAgIG1fbW92aWVXaW4tPnNl
dFJhdGUobV9yYXRlVG9SZXN0b3JlKTsKLSAgICAgICAgICAgICAgICBtX3JhdGVUb1Jlc3RvcmUg
PSAtMS4wZjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKG1fbW92aWVXaW4tPm1f
ZGlzYWJsZWQpIHsKLSAgICAgICAgICAgICAgICBlbmRUYXNrKCk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIG1fbGFzdExvYWRTdGF0
ZUNoZWNrVGltZSA9IHN5c3RlbVRpbWUoKTsKLSAgICB9Ci0KLSAgICBib29sIGVuZGVkID0gISFJ
c01vdmllRG9uZShtX21vdmllKTsKLSAgICBpZiAoZW5kZWQgIT0gbV9lbmRlZCkgewotICAgICAg
ICBtX2VuZGVkID0gZW5kZWQ7Ci0gICAgICAgIGlmIChtX2NsaWVudCAmJiBlbmRlZCkKLSAgICAg
ICAgICAgIG1fY2xpZW50LT5tb3ZpZUVuZGVkKG1fbW92aWVXaW4pOwotICAgIH0KLQotICAgIGZs
b2F0IHRpbWUgPSBtX21vdmllV2luLT5jdXJyZW50VGltZSgpOwotICAgIGlmICh0aW1lIDwgbV9s
YXN0TWVkaWFUaW1lIHx8IHRpbWUgPj0gbV9sYXN0TWVkaWFUaW1lICsgY05vbkNvbnRpbnVvdXNU
aW1lQ2hhbmdlIHx8IG1fc2Vla2luZykgewotICAgICAgICBtX3NlZWtpbmcgPSBmYWxzZTsKLSAg
ICAgICAgaWYgKG1fY2xpZW50KQotICAgICAgICAgICAgbV9jbGllbnQtPm1vdmllVGltZUNoYW5n
ZWQobV9tb3ZpZVdpbik7Ci0gICAgfQotICAgIG1fbGFzdE1lZGlhVGltZSA9IHRpbWU7Ci0KLSAg
ICBpZiAobV9sb2FkRXJyb3IpCi0gICAgICAgIGVuZFRhc2soKTsKKyAgICBVcHBQYXJhbSBwYXJh
bTsKKyAgICBwYXJhbS5sb25nVmFsdWUgPSBkYXRhOworICAgIFFUTW92aWVXaW5Qcml2YXRlKiBt
cCA9IHN0YXRpY19jYXN0PFFUTW92aWVXaW5Qcml2YXRlKj4ocGFyYW0ucHRyKTsKKyAgICBpZiAo
bXApCisgICAgICAgIG1wLT5kcmF3aW5nQ29tcGxldGUoKTsKKyAgICByZXR1cm4gMDsKIH0KIAot
dm9pZCBRVE1vdmllV2luUHJpdmF0ZTo6Y3JlYXRlTW92aWVDb250cm9sbGVyKCkKLXsKLSAgICBS
ZWN0IGJvdW5kczsKLSAgICBsb25nIGZsYWdzOwotCi0gICAgaWYgKCFtX21vdmllKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAobV9tb3ZpZUNvbnRyb2xsZXIpCi0gICAgICAgIERpc3Bvc2VN
b3ZpZUNvbnRyb2xsZXIobV9tb3ZpZUNvbnRyb2xsZXIpOwotCi0gICAgR2V0TW92aWVCb3gobV9t
b3ZpZSwgJmJvdW5kcyk7Ci0gICAgZmxhZ3MgPSBtY1RvcExlZnRNb3ZpZSB8IG1jTm90VmlzaWJs
ZTsKLSAgICBtX21vdmllQ29udHJvbGxlciA9IE5ld01vdmllQ29udHJvbGxlcihtX21vdmllLCAm
Ym91bmRzLCBmbGFncyk7Ci0gICAgaWYgKCFtX21vdmllQ29udHJvbGxlcikKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgTUNTZXRDb250cm9sbGVyUG9ydChtX21vdmllQ29udHJvbGxlciwgbV9nV29y
bGQpOwotICAgIE1DU2V0Q29udHJvbGxlckF0dGFjaGVkKG1fbW92aWVDb250cm9sbGVyLCBmYWxz
ZSk7Ci19Ci0KIHZvaWQgUVRNb3ZpZVdpblByaXZhdGU6OnJlZ2lzdGVyRHJhd2luZ0NhbGxiYWNr
KCkKIHsKKyAgICBpZiAoIWdNb3ZpZURyYXdpbmdDb21wbGV0ZVVQUCkKKyAgICAgICAgZ01vdmll
RHJhd2luZ0NvbXBsZXRlVVBQID0gTmV3TW92aWVEcmF3aW5nQ29tcGxldGVVUFAobW92aWVEcmF3
aW5nQ29tcGxldGVQcm9jKTsKKwogICAgIFVwcFBhcmFtIHBhcmFtOwogICAgIHBhcmFtLnB0ciA9
IHRoaXM7CiAgICAgU2V0TW92aWVEcmF3aW5nQ29tcGxldGVQcm9jKG1fbW92aWUsIG1vdmllRHJh
d2luZ0NhbGxXaGVuQ2hhbmdlZCwgZ01vdmllRHJhd2luZ0NvbXBsZXRlVVBQLCBwYXJhbS5sb25n
VmFsdWUpOwogfQogCit2b2lkIFFUTW92aWVXaW5Qcml2YXRlOjp1bnJlZ2lzdGVyRHJhd2luZ0Nh
bGxiYWNrKCkKK3sKKyAgICBTZXRNb3ZpZURyYXdpbmdDb21wbGV0ZVByb2MobV9tb3ZpZSwgbW92
aWVEcmF3aW5nQ2FsbFdoZW5DaGFuZ2VkLCAwLCAwKTsKK30KKwogdm9pZCBRVE1vdmllV2luUHJp
dmF0ZTo6ZHJhd2luZ0NvbXBsZXRlKCkKIHsKLSAgICBpZiAoIW1fZ1dvcmxkIHx8IG1fbW92aWVX
aW4tPm1fZGlzYWJsZWQgfHwgbV9sb2FkU3RhdGUgPCBRVE1vdmllTG9hZFN0YXRlTG9hZGVkKQor
ICAgIGlmICghbV9nV29ybGQgfHwgbV9tb3ZpZVdpbi0+bV9wcml2YXRlLT5tX2Rpc2FibGVkIHx8
IG1fbG9hZFN0YXRlIDwgUVRNb3ZpZUxvYWRTdGF0ZUxvYWRlZCkKICAgICAgICAgcmV0dXJuOwog
ICAgIG1fY2xpZW50LT5tb3ZpZU5ld0ltYWdlQXZhaWxhYmxlKG1fbW92aWVXaW4pOwogfQpAQCAt
Mzc3LDE5ICsyMjksMTUgQEANCiAgICAgaWYgKGVycikgCiAgICAgICAgIHJldHVybjsKICAgICBH
ZXRNb3ZpZUdXb3JsZChtX21vdmllLCAmbV9zYXZlZEdXb3JsZCwgMCk7Ci0gICAgaWYgKG1fbW92
aWVDb250cm9sbGVyKQotICAgICAgICBNQ1NldENvbnRyb2xsZXJQb3J0KG1fbW92aWVDb250cm9s
bGVyLCBtX2dXb3JsZCk7CiAgICAgU2V0TW92aWVHV29ybGQobV9tb3ZpZSwgbV9nV29ybGQsIDAp
OwogICAgIGJvdW5kcy5yaWdodCA9IG1fd2lkdGg7CiAgICAgYm91bmRzLmJvdHRvbSA9IG1faGVp
Z2h0OwotICAgIGlmIChtX21vdmllQ29udHJvbGxlcikKLSAgICAgICAgTUNTZXRDb250cm9sbGVy
Qm91bmRzUmVjdChtX21vdmllQ29udHJvbGxlciwgJmJvdW5kcyk7CiAgICAgU2V0TW92aWVCb3go
bV9tb3ZpZSwgJmJvdW5kcyk7CiB9CiAKIHZvaWQgUVRNb3ZpZVdpblByaXZhdGU6OmNsZWFyR1dv
cmxkKCkKIHsKLSAgICBpZiAoIW1fbW92aWV8fCFtX2dXb3JsZCkKKyAgICBpZiAoIW1fbW92aWUg
fHwgIW1fZ1dvcmxkKQogICAgICAgICByZXR1cm47CiAKICAgICBHcmFmUHRyIHNhdmVQb3J0OwpA
QCAtNDM2LDggKzI4NCw2IEBADQogICAgIGJvdW5kcy5sZWZ0ID0gMDsgCiAgICAgYm91bmRzLnJp
Z2h0ID0gbV93aWR0aDsKICAgICBib3VuZHMuYm90dG9tID0gbV9oZWlnaHQ7Ci0gICAgaWYgKG1f
bW92aWVDb250cm9sbGVyKQotICAgICAgICBNQ1NldENvbnRyb2xsZXJCb3VuZHNSZWN0KG1fbW92
aWVDb250cm9sbGVyLCAmYm91bmRzKTsKICAgICBTZXRNb3ZpZUJveChtX21vdmllLCAmYm91bmRz
KTsKICAgICB1cGRhdGVHV29ybGQoKTsKIH0KQEAgLTQ0Niw4ICsyOTIsNiBAQA0KIHZvaWQgUVRN
b3ZpZVdpblByaXZhdGU6OmRlbGV0ZUdXb3JsZCgpCiB7CiAgICAgQVNTRVJUKG1fZ1dvcmxkKTsK
LSAgICBpZiAobV9tb3ZpZUNvbnRyb2xsZXIpCi0gICAgICAgIE1DU2V0Q29udHJvbGxlclBvcnQo
bV9tb3ZpZUNvbnRyb2xsZXIsIG1fc2F2ZWRHV29ybGQpOwogICAgIGlmIChtX21vdmllKQogICAg
ICAgICBTZXRNb3ZpZUdXb3JsZChtX21vdmllLCBtX3NhdmVkR1dvcmxkLCAwKTsKICAgICBtX3Nh
dmVkR1dvcmxkID0gMDsKQEAgLTQ1NywxNjAgKzMwMSw1MCBAQA0KICAgICBtX2dXb3JsZEhlaWdo
dCA9IDA7CiB9CiAKLQotUVRNb3ZpZVdpbjo6UVRNb3ZpZVdpbihRVE1vdmllV2luQ2xpZW50KiBj
bGllbnQpCi0gICAgOiBtX3ByaXZhdGUobmV3IFFUTW92aWVXaW5Qcml2YXRlKCkpCi0gICAgLCBt
X2Rpc2FibGVkKGZhbHNlKQordm9pZCBRVE1vdmllV2luUHJpdmF0ZTo6bW92aWVFbmRlZChRVE1v
dmllKikKIHsKLSAgICBtX3ByaXZhdGUtPm1fbW92aWVXaW4gPSB0aGlzOwotICAgIG1fcHJpdmF0
ZS0+bV9jbGllbnQgPSBjbGllbnQ7Ci0gICAgaW5pdGlhbGl6ZVF1aWNrVGltZSgpOworICAgIC8v
IERvIG5vdGhpbmcKIH0KIAotUVRNb3ZpZVdpbjo6flFUTW92aWVXaW4oKQordm9pZCBRVE1vdmll
V2luUHJpdmF0ZTo6bW92aWVMb2FkU3RhdGVDaGFuZ2VkKFFUTW92aWUqIG1vdmllKQogewotICAg
IGRlbGV0ZSBtX3ByaXZhdGU7Ci19CisgICAgbG9uZyBsb2FkU3RhdGUgPSBHZXRNb3ZpZUxvYWRT
dGF0ZShtb3ZpZS0+Z2V0TW92aWVIYW5kbGUoKSk7CisgICAgaWYgKGxvYWRTdGF0ZSAhPSBtX2xv
YWRTdGF0ZSkgewogCi12b2lkIFFUTW92aWVXaW46OnBsYXkoKQotewotICAgIG1fcHJpdmF0ZS0+
bV90aW1lVG9SZXN0b3JlID0gLTEuMGY7CisgICAgICAgIC8vIHdlIG9ubHkgbmVlZCB0byBlcmFz
ZSB0aGUgbW92aWUgZ3dvcmxkIHdoZW4gdGhlIGxvYWQgc3RhdGUgY2hhbmdlcyB0byBsb2FkZWQg
d2hpbGUgaXQKKyAgICAgICAgLy8gIGlzIHZpc2libGUgYXMgdGhlIGd3b3JsZCBpcyBkZXN0cm95
ZWQvY3JlYXRlZCB3aGVuIHZpc2liaWxpdHkgY2hhbmdlcworICAgICAgICBib29sIG1vdmllTmV3
bHlQbGF5YWJsZSA9IGxvYWRTdGF0ZSA+PSBRVE1vdmllTG9hZFN0YXRlTG9hZGVkICYmIG1fbG9h
ZFN0YXRlIDwgUVRNb3ZpZUxvYWRTdGF0ZUxvYWRlZDsKKyAgICAgICAgbV9sb2FkU3RhdGUgPSBs
b2FkU3RhdGU7CiAKLSAgICBpZiAobV9wcml2YXRlLT5tX21vdmllQ29udHJvbGxlcikKLSAgICAg
ICAgTUNEb0FjdGlvbihtX3ByaXZhdGUtPm1fbW92aWVDb250cm9sbGVyLCBtY0FjdGlvblByZXJv
bGxBbmRQbGF5LCAodm9pZCAqKUdldE1vdmllUHJlZmVycmVkUmF0ZShtX3ByaXZhdGUtPm1fbW92
aWUpKTsKLSAgICBlbHNlCi0gICAgICAgIFN0YXJ0TW92aWUobV9wcml2YXRlLT5tX21vdmllKTsK
LSAgICBtX3ByaXZhdGUtPnN0YXJ0VGFzaygpOworICAgICAgICBpZiAobW92aWVOZXdseVBsYXlh
YmxlKSB7CisgICAgICAgICAgICBjYWNoZU1vdmllU2NhbGUoKTsKKyAgICAgICAgICAgIHVwZGF0
ZU1vdmllU2l6ZSgpOworICAgICAgICAgICAgaWYgKG1fdmlzaWJsZSkKKyAgICAgICAgICAgICAg
ICBjbGVhckdXb3JsZCgpOworICAgICAgICB9CisgICAgfQogfQogCi12b2lkIFFUTW92aWVXaW46
OnBhdXNlKCkKK3ZvaWQgUVRNb3ZpZVdpblByaXZhdGU6Om1vdmllVGltZUNoYW5nZWQoUVRNb3Zp
ZSopCiB7Ci0gICAgbV9wcml2YXRlLT5tX3RpbWVUb1Jlc3RvcmUgPSAtMS4wZjsKLQotICAgIGlm
IChtX3ByaXZhdGUtPm1fbW92aWVDb250cm9sbGVyKQotICAgICAgICBNQ0RvQWN0aW9uKG1fcHJp
dmF0ZS0+bV9tb3ZpZUNvbnRyb2xsZXIsIG1jQWN0aW9uUGxheSwgMCk7Ci0gICAgZWxzZQotICAg
ICAgICBTdG9wTW92aWUobV9wcml2YXRlLT5tX21vdmllKTsKLSAgICB1cGRhdGVUYXNrVGltZXIo
KTsKKyAgICAvLyBEbyBub3RoaW5nCiB9CiAKLWZsb2F0IFFUTW92aWVXaW46OnJhdGUoKSBjb25z
dAorUVRNb3ZpZVdpbjo6UVRNb3ZpZVdpbihRVE1vdmllV2luQ2xpZW50KiBjbGllbnQpCisgICAg
OiBtX3ByaXZhdGUobmV3IFFUTW92aWVXaW5Qcml2YXRlKHRoaXMpKQogewotICAgIGlmICghbV9w
cml2YXRlLT5tX21vdmllKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gRml4ZWRUb0Zs
b2F0KEdldE1vdmllUmF0ZShtX3ByaXZhdGUtPm1fbW92aWUpKTsKKyAgICBtX3ByaXZhdGUtPm1f
Y2xpZW50ID0gY2xpZW50OwogfQogCi12b2lkIFFUTW92aWVXaW46OnNldFJhdGUoZmxvYXQgcmF0
ZSkKK1FUTW92aWVXaW46On5RVE1vdmllV2luKCkKIHsKLSAgICBpZiAoIW1fcHJpdmF0ZS0+bV9t
b3ZpZSkKLSAgICAgICAgcmV0dXJuOyAgICAKLSAgICBtX3ByaXZhdGUtPm1fdGltZVRvUmVzdG9y
ZSA9IC0xLjBmOwotICAgIAotICAgIGlmIChtX3ByaXZhdGUtPm1fbW92aWVDb250cm9sbGVyKQot
ICAgICAgICBNQ0RvQWN0aW9uKG1fcHJpdmF0ZS0+bV9tb3ZpZUNvbnRyb2xsZXIsIG1jQWN0aW9u
UHJlcm9sbEFuZFBsYXksICh2b2lkICopRmxvYXRUb0ZpeGVkKHJhdGUpKTsKLSAgICBlbHNlCi0g
ICAgICAgIFNldE1vdmllUmF0ZShtX3ByaXZhdGUtPm1fbW92aWUsIEZsb2F0VG9GaXhlZChyYXRl
KSk7Ci0gICAgdXBkYXRlVGFza1RpbWVyKCk7CisgICAgZGVsZXRlIG1fcHJpdmF0ZTsKIH0KIAot
ZmxvYXQgUVRNb3ZpZVdpbjo6ZHVyYXRpb24oKSBjb25zdAotewotICAgIGlmICghbV9wcml2YXRl
LT5tX21vdmllKQotICAgICAgICByZXR1cm4gMDsKLSAgICBUaW1lVmFsdWUgdmFsID0gR2V0TW92
aWVEdXJhdGlvbihtX3ByaXZhdGUtPm1fbW92aWUpOwotICAgIFRpbWVTY2FsZSBzY2FsZSA9IEdl
dE1vdmllVGltZVNjYWxlKG1fcHJpdmF0ZS0+bV9tb3ZpZSk7Ci0gICAgcmV0dXJuIHN0YXRpY19j
YXN0PGZsb2F0Pih2YWwpIC8gc2NhbGU7Ci19Ci0KLWZsb2F0IFFUTW92aWVXaW46OmN1cnJlbnRU
aW1lKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fcHJpdmF0ZS0+bV9tb3ZpZSkKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgVGltZVZhbHVlIHZhbCA9IEdldE1vdmllVGltZShtX3ByaXZhdGUtPm1fbW92
aWUsIDApOwotICAgIFRpbWVTY2FsZSBzY2FsZSA9IEdldE1vdmllVGltZVNjYWxlKG1fcHJpdmF0
ZS0+bV9tb3ZpZSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih2YWwpIC8gc2NhbGU7
Ci19Ci0KLXZvaWQgUVRNb3ZpZVdpbjo6c2V0Q3VycmVudFRpbWUoZmxvYXQgdGltZSkgY29uc3QK
LXsKLSAgICBpZiAoIW1fcHJpdmF0ZS0+bV9tb3ZpZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
bV9wcml2YXRlLT5tX3RpbWVUb1Jlc3RvcmUgPSAtMS4wZjsKLSAgICAKLSAgICBtX3ByaXZhdGUt
Pm1fc2Vla2luZyA9IHRydWU7Ci0gICAgVGltZVNjYWxlIHNjYWxlID0gR2V0TW92aWVUaW1lU2Nh
bGUobV9wcml2YXRlLT5tX21vdmllKTsKLSAgICBpZiAobV9wcml2YXRlLT5tX21vdmllQ29udHJv
bGxlcil7Ci0gICAgICAgIFFUUmVzdGFydEF0VGltZVJlY29yZCByZXN0YXJ0ID0geyB0aW1lICog
c2NhbGUgLCAwIH07Ci0gICAgICAgIE1DRG9BY3Rpb24obV9wcml2YXRlLT5tX21vdmllQ29udHJv
bGxlciwgbWNBY3Rpb25SZXN0YXJ0QXRUaW1lLCAodm9pZCAqKSZyZXN0YXJ0KTsKLSAgICB9IGVs
c2UKLSAgICAgICAgU2V0TW92aWVUaW1lVmFsdWUobV9wcml2YXRlLT5tX21vdmllLCBUaW1lVmFs
dWUodGltZSAqIHNjYWxlKSk7Ci0gICAgdXBkYXRlVGFza1RpbWVyKCk7Ci19Ci0KLXZvaWQgUVRN
b3ZpZVdpbjo6c2V0Vm9sdW1lKGZsb2F0IHZvbHVtZSkKLXsKLSAgICBpZiAoIW1fcHJpdmF0ZS0+
bV9tb3ZpZSkKLSAgICAgICAgcmV0dXJuOwotICAgIFNldE1vdmllVm9sdW1lKG1fcHJpdmF0ZS0+
bV9tb3ZpZSwgc3RhdGljX2Nhc3Q8c2hvcnQ+KHZvbHVtZSAqIDI1NikpOwotfQotCi12b2lkIFFU
TW92aWVXaW46OnNldFByZXNlcnZlc1BpdGNoKGJvb2wgcHJlc2VydmVzUGl0Y2gpCi17Ci0gICAg
aWYgKCFtX3ByaXZhdGUtPm1fbW92aWUgfHwgIW1fcHJpdmF0ZS0+bV9jdXJyZW50VVJMKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBPU0VyciBlcnJvcjsKLSAgICBib29sIHByb3AgPSBmYWxzZTsK
LQotICAgIGVycm9yID0gUVRHZXRNb3ZpZVByb3BlcnR5KG1fcHJpdmF0ZS0+bV9tb3ZpZSwga1FU
UHJvcGVydHlDbGFzc19BdWRpbywga1FUQXVkaW9Qcm9wZXJ0eUlEX1JhdGVDaGFuZ2VzUHJlc2Vy
dmVQaXRjaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoa1FUQXVkaW9Q
cm9wZXJ0eUlEX1JhdGVDaGFuZ2VzUHJlc2VydmVQaXRjaCksIHN0YXRpY19jYXN0PFFUUHJvcGVy
dHlWYWx1ZVB0cj4oJnByb3ApLCAwKTsKLQotICAgIGlmIChlcnJvciB8fCBwcm9wID09IHByZXNl
cnZlc1BpdGNoKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3ByaXZhdGUtPm1fdGltZVRvUmVz
dG9yZSA9IGN1cnJlbnRUaW1lKCk7Ci0gICAgbV9wcml2YXRlLT5tX3JhdGVUb1Jlc3RvcmUgPSBy
YXRlKCk7Ci0gICAgbG9hZChtX3ByaXZhdGUtPm1fY3VycmVudFVSTCwgcHJlc2VydmVzUGl0Y2gp
OwotfQotCi11bnNpZ25lZCBRVE1vdmllV2luOjpkYXRhU2l6ZSgpIGNvbnN0Ci17Ci0gICAgaWYg
KCFtX3ByaXZhdGUtPm1fbW92aWUpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBHZXRN
b3ZpZURhdGFTaXplKG1fcHJpdmF0ZS0+bV9tb3ZpZSwgMCwgR2V0TW92aWVEdXJhdGlvbihtX3By
aXZhdGUtPm1fbW92aWUpKTsKLX0KLQotZmxvYXQgUVRNb3ZpZVdpbjo6bWF4VGltZUxvYWRlZCgp
IGNvbnN0Ci17Ci0gICAgaWYgKCFtX3ByaXZhdGUtPm1fbW92aWUpCi0gICAgICAgIHJldHVybiAw
OwotICAgIFRpbWVWYWx1ZSB2YWw7Ci0gICAgR2V0TWF4TG9hZGVkVGltZUluTW92aWUobV9wcml2
YXRlLT5tX21vdmllLCAmdmFsKTsKLSAgICBUaW1lU2NhbGUgc2NhbGUgPSBHZXRNb3ZpZVRpbWVT
Y2FsZShtX3ByaXZhdGUtPm1fbW92aWUpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4o
dmFsKSAvIHNjYWxlOwotfQotCi1sb25nIFFUTW92aWVXaW46OmxvYWRTdGF0ZSgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+bV9sb2FkU3RhdGU7Ci19Ci0KLXZvaWQgUVRNb3ZpZVdp
bjo6Z2V0TmF0dXJhbFNpemUoaW50JiB3aWR0aCwgaW50JiBoZWlnaHQpCi17Ci0gICAgUmVjdCBy
ZWN0ID0geyAwLCB9OwotCi0gICAgaWYgKG1fcHJpdmF0ZS0+bV9tb3ZpZSkKLSAgICAgICAgR2V0
TW92aWVOYXR1cmFsQm91bmRzUmVjdChtX3ByaXZhdGUtPm1fbW92aWUsICZyZWN0KTsKLSAgICB3
aWR0aCA9IChyZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0KSAqIG1fcHJpdmF0ZS0+bV93aWR0aFNjYWxl
RmFjdG9yOwotICAgIGhlaWdodCA9IChyZWN0LmJvdHRvbSAtIHJlY3QudG9wKSAqIG1fcHJpdmF0
ZS0+bV9oZWlnaHRTY2FsZUZhY3RvcjsKLX0KLQogdm9pZCBRVE1vdmllV2luOjpzZXRTaXplKGlu
dCB3aWR0aCwgaW50IGhlaWdodCkKIHsKICAgICBtX3ByaXZhdGUtPnNldFNpemUod2lkdGgsIGhl
aWdodCk7Ci0gICAgdXBkYXRlVGFza1RpbWVyKDApOworICAgIFFUTW92aWVUYXNrOjpzaGFyZWRU
YXNrKCktPnVwZGF0ZVRhc2tUaW1lcigpOwogfQogCiB2b2lkIFFUTW92aWVXaW46OnNldFZpc2li
bGUoYm9vbCBiKQpAQCAtNjU2LDQ0OCArMzkwLDE2IEBADQogICAgICAgICAgMCwgMCwgbV9wcml2
YXRlLT5tX3dpZHRoLCBtX3ByaXZhdGUtPm1faGVpZ2h0LCBibGVuZEZ1bmN0aW9uKTsKIH0KIAot
dm9pZCBRVE1vdmllV2luOjpsb2FkKGNvbnN0IFVDaGFyKiB1cmwsIGludCBsZW4sIGJvb2wgcHJl
c2VydmVzUGl0Y2gpCi17Ci0gICAgQ0ZTdHJpbmdSZWYgdXJsU3RyaW5nUmVmID0gQ0ZTdHJpbmdD
cmVhdGVXaXRoQ2hhcmFjdGVycyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCByZWludGVycHJldF9jYXN0
PGNvbnN0IFVuaUNoYXIqPih1cmwpLCBsZW4pOwotICAgIENGVVJMUmVmIGNmVVJMID0gQ0ZVUkxD
cmVhdGVXaXRoU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIHVybFN0cmluZ1JlZiwgMCk7Ci0K
LSAgICBsb2FkKGNmVVJMLCBwcmVzZXJ2ZXNQaXRjaCk7Ci0KLSAgICBDRlJlbGVhc2UoY2ZVUkwp
OwotICAgIENGUmVsZWFzZSh1cmxTdHJpbmdSZWYpOwotfQotCi12b2lkIFFUTW92aWVXaW46Omxv
YWQoQ0ZVUkxSZWYgdXJsLCBib29sIHByZXNlcnZlc1BpdGNoKQotewotICAgIGlmICghdXJsKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9wcml2YXRlLT5tX21vdmllKSB7Ci0gICAgICAg
IG1fcHJpdmF0ZS0+ZW5kVGFzaygpOwotICAgICAgICBpZiAobV9wcml2YXRlLT5tX2dXb3JsZCkK
LSAgICAgICAgICAgIG1fcHJpdmF0ZS0+ZGVsZXRlR1dvcmxkKCk7Ci0gICAgICAgIGlmIChtX3By
aXZhdGUtPm1fbW92aWVDb250cm9sbGVyKQotICAgICAgICAgICAgRGlzcG9zZU1vdmllQ29udHJv
bGxlcihtX3ByaXZhdGUtPm1fbW92aWVDb250cm9sbGVyKTsKLSAgICAgICAgbV9wcml2YXRlLT5t
X21vdmllQ29udHJvbGxlciA9IDA7Ci0gICAgICAgIERpc3Bvc2VNb3ZpZShtX3ByaXZhdGUtPm1f
bW92aWUpOwotICAgICAgICBtX3ByaXZhdGUtPm1fbW92aWUgPSAwOwotICAgICAgICBtX3ByaXZh
dGUtPm1fbG9hZFN0YXRlID0gMDsKLSAgICB9ICAKLQotICAgIC8vIERlZmluZSBhIHByb3BlcnR5
IGFycmF5IGZvciBOZXdNb3ZpZUZyb21Qcm9wZXJ0aWVzLiA4IHNob3VsZCBiZSBlbm91Z2ggZm9y
IG91ciBuZWVkcy4gCi0gICAgUVROZXdNb3ZpZVByb3BlcnR5RWxlbWVudCBtb3ZpZVByb3BzWzhd
OyAKLSAgICBJdGVtQ291bnQgbW92aWVQcm9wQ291bnQgPSAwOyAKLQotICAgIGJvb2wgYm9vbFRy
dWUgPSB0cnVlOwotICAgIAotICAgIC8vIERpc2FibGUgc3RyZWFtaW5nIHN1cHBvcnQgZm9yIG5v
dy4gCi0gICAgQ0ZTdHJpbmdSZWYgc2NoZW1lID0gQ0ZVUkxDb3B5U2NoZW1lKHVybCk7Ci0gICAg
Ym9vbCBpc1JUU1AgPSBDRlN0cmluZ0hhc1ByZWZpeChzY2hlbWUsIENGU1RSKCJydHNwOiIpKTsK
LSAgICBDRlJlbGVhc2Uoc2NoZW1lKTsKLQotICAgIGlmIChpc1JUU1ApIHsKLSAgICAgICAgbV9w
cml2YXRlLT5tX2xvYWRFcnJvciA9IG5vTW92aWVGb3VuZDsKLSAgICAgICAgZ290byBlbmQ7Ci0g
ICAgfQotCi0gICAgaWYgKG1fcHJpdmF0ZS0+bV9jdXJyZW50VVJMKSB7Ci0gICAgICAgIGlmICht
X3ByaXZhdGUtPm1fY3VycmVudFVSTCAhPSB1cmwpIHsKLSAgICAgICAgICAgIENGUmVsZWFzZSht
X3ByaXZhdGUtPm1fY3VycmVudFVSTCk7Ci0gICAgICAgICAgICBtX3ByaXZhdGUtPm1fY3VycmVu
dFVSTCA9IHVybDsKLSAgICAgICAgICAgIENGUmV0YWluKHVybCk7Ci0gICAgICAgIH0KLSAgICB9
IGVsc2UgewotICAgICAgICBtX3ByaXZhdGUtPm1fY3VycmVudFVSTCA9IHVybDsKLSAgICAgICAg
Q0ZSZXRhaW4odXJsKTsKLSAgICB9Ci0KLSAgICAvLyBBZGQgdGhlIG1vdmllIGRhdGEgbG9jYXRp
b24gdG8gdGhlIHByb3BlcnR5IGFycmF5IAotICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRd
LnByb3BDbGFzcyA9IGtRVFByb3BlcnR5Q2xhc3NfRGF0YUxvY2F0aW9uOyAKLSAgICBtb3ZpZVBy
b3BzW21vdmllUHJvcENvdW50XS5wcm9wSUQgPSBrUVREYXRhTG9jYXRpb25Qcm9wZXJ0eUlEX0NG
VVJMOyAKLSAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wVmFsdWVTaXplID0gc2l6
ZW9mKG1fcHJpdmF0ZS0+bV9jdXJyZW50VVJMKTsgCi0gICAgbW92aWVQcm9wc1ttb3ZpZVByb3BD
b3VudF0ucHJvcFZhbHVlQWRkcmVzcyA9ICYobV9wcml2YXRlLT5tX2N1cnJlbnRVUkwpOyAKLSAg
ICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wU3RhdHVzID0gMDsgCi0gICAgbW92aWVQ
cm9wQ291bnQrKzsgCi0KLSAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wQ2xhc3Mg
PSBrUVRQcm9wZXJ0eUNsYXNzX01vdmllSW5zdGFudGlhdGlvbjsgCi0gICAgbW92aWVQcm9wc1tt
b3ZpZVByb3BDb3VudF0ucHJvcElEID0ga1FUTW92aWVJbnN0YW50aWF0aW9uUHJvcGVydHlJRF9E
b250QXNrVW5yZXNvbHZlZERhdGFSZWZzOyAKLSAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50
XS5wcm9wVmFsdWVTaXplID0gc2l6ZW9mKGJvb2xUcnVlKTsgCi0gICAgbW92aWVQcm9wc1ttb3Zp
ZVByb3BDb3VudF0ucHJvcFZhbHVlQWRkcmVzcyA9ICZib29sVHJ1ZTsgCi0gICAgbW92aWVQcm9w
c1ttb3ZpZVByb3BDb3VudF0ucHJvcFN0YXR1cyA9IDA7IAotICAgIG1vdmllUHJvcENvdW50Kys7
IAotCi0gICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcENsYXNzID0ga1FUUHJvcGVy
dHlDbGFzc19Nb3ZpZUluc3RhbnRpYXRpb247IAotICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291
bnRdLnByb3BJRCA9IGtRVE1vdmllSW5zdGFudGlhdGlvblByb3BlcnR5SURfQXN5bmNPSzsgCi0g
ICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcFZhbHVlU2l6ZSA9IHNpemVvZihib29s
VHJ1ZSk7IAotICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BWYWx1ZUFkZHJlc3Mg
PSAmYm9vbFRydWU7IAotICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BTdGF0dXMg
PSAwOyAKLSAgICBtb3ZpZVByb3BDb3VudCsrOyAKLQotICAgIG1vdmllUHJvcHNbbW92aWVQcm9w
Q291bnRdLnByb3BDbGFzcyA9IGtRVFByb3BlcnR5Q2xhc3NfTmV3TW92aWVQcm9wZXJ0eTsgCi0g
ICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcElEID0ga1FUTmV3TW92aWVQcm9wZXJ0
eUlEX0FjdGl2ZTsgCi0gICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcFZhbHVlU2l6
ZSA9IHNpemVvZihib29sVHJ1ZSk7IAotICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnBy
b3BWYWx1ZUFkZHJlc3MgPSAmYm9vbFRydWU7IAotICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291
bnRdLnByb3BTdGF0dXMgPSAwOyAKLSAgICBtb3ZpZVByb3BDb3VudCsrOyAKLQotICAgIG1vdmll
UHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BDbGFzcyA9IGtRVFByb3BlcnR5Q2xhc3NfTmV3TW92
aWVQcm9wZXJ0eTsgCi0gICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcElEID0ga1FU
TmV3TW92aWVQcm9wZXJ0eUlEX0RvbnRJbnRlcmFjdFdpdGhVc2VyOyAKLSAgICBtb3ZpZVByb3Bz
W21vdmllUHJvcENvdW50XS5wcm9wVmFsdWVTaXplID0gc2l6ZW9mKGJvb2xUcnVlKTsgCi0gICAg
bW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcFZhbHVlQWRkcmVzcyA9ICZib29sVHJ1ZTsg
Ci0gICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcFN0YXR1cyA9IDA7IAotICAgIG1v
dmllUHJvcENvdW50Kys7IAotCi0gICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcENs
YXNzID0ga1FUUHJvcGVydHlDbGFzc19Nb3ZpZUluc3RhbnRpYXRpb247Ci0gICAgbW92aWVQcm9w
c1ttb3ZpZVByb3BDb3VudF0ucHJvcElEID0gJyF1cmwnOwotICAgIG1vdmllUHJvcHNbbW92aWVQ
cm9wQ291bnRdLnByb3BWYWx1ZVNpemUgPSBzaXplb2YoYm9vbFRydWUpOyAKLSAgICBtb3ZpZVBy
b3BzW21vdmllUHJvcENvdW50XS5wcm9wVmFsdWVBZGRyZXNzID0gJmJvb2xUcnVlOyAKLSAgICBt
b3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wU3RhdHVzID0gMDsgCi0gICAgbW92aWVQcm9w
Q291bnQrKzsgCi0KLSAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wQ2xhc3MgPSBr
UVRQcm9wZXJ0eUNsYXNzX01vdmllSW5zdGFudGlhdGlvbjsgCi0gICAgbW92aWVQcm9wc1ttb3Zp
ZVByb3BDb3VudF0ucHJvcElEID0gJ3NpdGUnOwotICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291
bnRdLnByb3BWYWx1ZVNpemUgPSBzaXplb2YoYm9vbFRydWUpOyAKLSAgICBtb3ZpZVByb3BzW21v
dmllUHJvcENvdW50XS5wcm9wVmFsdWVBZGRyZXNzID0gJmJvb2xUcnVlOyAKLSAgICBtb3ZpZVBy
b3BzW21vdmllUHJvcENvdW50XS5wcm9wU3RhdHVzID0gMDsgCi0gICAgbW92aWVQcm9wQ291bnQr
KzsKLQotICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BDbGFzcyA9IGtRVFByb3Bl
cnR5Q2xhc3NfQXVkaW87IAotICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BJRCA9
IGtRVEF1ZGlvUHJvcGVydHlJRF9SYXRlQ2hhbmdlc1ByZXNlcnZlUGl0Y2g7Ci0gICAgbW92aWVQ
cm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcFZhbHVlU2l6ZSA9IHNpemVvZihwcmVzZXJ2ZXNQaXRj
aCk7IAotICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BWYWx1ZUFkZHJlc3MgPSAm
cHJlc2VydmVzUGl0Y2g7IAotICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BTdGF0
dXMgPSAwOyAKLSAgICBtb3ZpZVByb3BDb3VudCsrOyAKLQotICAgIEFTU0VSVChtb3ZpZVByb3BD
b3VudCA8PSBzaXplb2YobW92aWVQcm9wcykvc2l6ZW9mKG1vdmllUHJvcHNbMF0pKTsKLSAgICBt
X3ByaXZhdGUtPm1fbG9hZEVycm9yID0gTmV3TW92aWVGcm9tUHJvcGVydGllcyhtb3ZpZVByb3BD
b3VudCwgbW92aWVQcm9wcywgMCwgMCwgJm1fcHJpdmF0ZS0+bV9tb3ZpZSk7Ci0KLWVuZDoKLSAg
ICBtX3ByaXZhdGUtPnN0YXJ0VGFzaygpOwotICAgIC8vIGdldCB0aGUgbG9hZCBmYWlsIGNhbGxi
YWNrIHF1aWNrbHkgCi0gICAgaWYgKG1fcHJpdmF0ZS0+bV9sb2FkRXJyb3IpCi0gICAgICAgIHVw
ZGF0ZVRhc2tUaW1lcigwKTsKLSAgICBlbHNlIHsKLSAgICAgICAgT1NUeXBlIG1vZGUgPSBrUVRB
cGVydHVyZU1vZGVfQ2xlYW5BcGVydHVyZTsKLQotICAgICAgICAvLyBTZXQgdGhlIGFwZXJ0dXJl
IG1vZGUgcHJvcGVydHkgb24gYSBtb3ZpZSB0byBzaWduYWwgdGhhdCB3ZSB3YW50IGFzcGVjdCBy
YXRpbwotICAgICAgICAvLyBhbmQgY2xlYW4gYXBlcnR1cmUgZGltZW5zaW9ucy4gRG9uJ3Qgd29y
cnkgYWJvdXQgZXJyb3JzLCB3ZSBjYW4ndCBkbyBhbnl0aGluZyBpZgotICAgICAgICAvLyB0aGUg
aW5zdGFsbGVkIHZlcnNpb24gb2YgUVQgZG9lc24ndCBzdXBwb3J0IGl0IGFuZCBpdCBpc24ndCBz
ZXJpb3VzIGVub3VnaCB0byAKLSAgICAgICAgLy8gd2FycmFudCBmYWlsaW5nLgotICAgICAgICBR
VFNldE1vdmllUHJvcGVydHkobV9wcml2YXRlLT5tX21vdmllLCBrUVRQcm9wZXJ0eUNsYXNzX1Zp
c3VhbCwga1FUVmlzdWFsUHJvcGVydHlJRF9BcGVydHVyZU1vZGUsIHNpemVvZihtb2RlKSwgJm1v
ZGUpOwotICAgICAgICBtX3ByaXZhdGUtPnJlZ2lzdGVyRHJhd2luZ0NhbGxiYWNrKCk7Ci0gICAg
fQotfQotCi12b2lkIFFUTW92aWVXaW46OmRpc2FibGVVbnN1cHBvcnRlZFRyYWNrcyh1bnNpZ25l
ZCYgZW5hYmxlZFRyYWNrQ291bnQsIHVuc2lnbmVkJiB0b3RhbFRyYWNrQ291bnQpCi17Ci0gICAg
aWYgKCFtX3ByaXZhdGUtPm1fbW92aWUpIHsKLSAgICAgICAgdG90YWxUcmFja0NvdW50ID0gMDsK
LSAgICAgICAgZW5hYmxlZFRyYWNrQ291bnQgPSAwOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgc3RhdGljIEhhc2hTZXQ8T1NUeXBlPiogYWxsb3dlZFRyYWNrVHlwZXMgPSAwOwotICAg
IGlmICghYWxsb3dlZFRyYWNrVHlwZXMpIHsKLSAgICAgICAgYWxsb3dlZFRyYWNrVHlwZXMgPSBu
ZXcgSGFzaFNldDxPU1R5cGU+OwotICAgICAgICBhbGxvd2VkVHJhY2tUeXBlcy0+YWRkKFZpZGVv
TWVkaWFUeXBlKTsKLSAgICAgICAgYWxsb3dlZFRyYWNrVHlwZXMtPmFkZChTb3VuZE1lZGlhVHlw
ZSk7Ci0gICAgICAgIGFsbG93ZWRUcmFja1R5cGVzLT5hZGQoVGV4dE1lZGlhVHlwZSk7Ci0gICAg
ICAgIGFsbG93ZWRUcmFja1R5cGVzLT5hZGQoQmFzZU1lZGlhVHlwZSk7Ci0gICAgICAgIGFsbG93
ZWRUcmFja1R5cGVzLT5hZGQoY2xvc2VkQ2FwdGlvblRyYWNrVHlwZSk7Ci0gICAgICAgIGFsbG93
ZWRUcmFja1R5cGVzLT5hZGQoc3ViVGl0bGVUcmFja1R5cGUpOwotICAgICAgICBhbGxvd2VkVHJh
Y2tUeXBlcy0+YWRkKG1wZWc0T2JqZWN0RGVzY3JpcHRpb25UcmFja1R5cGUpOwotICAgICAgICBh
bGxvd2VkVHJhY2tUeXBlcy0+YWRkKG1wZWc0U2NlbmVEZXNjcmlwdGlvblRyYWNrVHlwZSk7Ci0g
ICAgICAgIGFsbG93ZWRUcmFja1R5cGVzLT5hZGQoVGltZUNvZGVNZWRpYVR5cGUpOwotICAgICAg
ICBhbGxvd2VkVHJhY2tUeXBlcy0+YWRkKFRpbWVDb2RlNjRNZWRpYVR5cGUpOwotICAgIH0KLQot
ICAgIGxvbmcgdHJhY2tDb3VudCA9IEdldE1vdmllVHJhY2tDb3VudChtX3ByaXZhdGUtPm1fbW92
aWUpOwotICAgIGVuYWJsZWRUcmFja0NvdW50ID0gdHJhY2tDb3VudDsKLSAgICB0b3RhbFRyYWNr
Q291bnQgPSB0cmFja0NvdW50OwotCi0gICAgLy8gVHJhY2sgaW5kZXhlcyBhcmUgMS1iYXNlZC4g
eXVjay4gVGhlc2UgdGhpbmdzIG11c3QgZGVzY2VuZCBmcm9tIG9sZC0KLSAgICAvLyBzY2hvb2wg
bWFjIHJlc291cmNlcyBvciBzb21ldGhpbmcuCi0gICAgZm9yIChsb25nIHRyYWNrSW5kZXggPSAx
OyB0cmFja0luZGV4IDw9IHRyYWNrQ291bnQ7IHRyYWNrSW5kZXgrKykgewotICAgICAgICAvLyBH
cmFiIHRoZSB0cmFjayBhdCB0aGUgY3VycmVudCBpbmRleC4gSWYgdGhlcmUgaXNuJ3Qgb25lIHRo
ZXJlLCB0aGVuCi0gICAgICAgIC8vIHdlIGNhbiBtb3ZlIG9udG8gdGhlIG5leHQgb25lLgotICAg
ICAgICBUcmFjayBjdXJyZW50VHJhY2sgPSBHZXRNb3ZpZUluZFRyYWNrKG1fcHJpdmF0ZS0+bV9t
b3ZpZSwgdHJhY2tJbmRleCk7Ci0gICAgICAgIGlmICghY3VycmVudFRyYWNrKQotICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgIAotICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIHRy
YWNrIGlzIGRpc2FibGVkIGFscmVhZHksIHdlIHNob3VsZCBtb3ZlIGFsb25nLgotICAgICAgICAv
LyBXZSBkb24ndCBuZWVkIHRvIHJlLWRpc2FibGUgaXQuCi0gICAgICAgIGlmICghR2V0VHJhY2tF
bmFibGVkKGN1cnJlbnRUcmFjaykpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAv
LyBHcmFiIHRoZSB0cmFjaydzIG1lZGlhLiBXZSdyZSBnb2luZyB0byBjaGVjayB0byBzZWUgaWYg
d2UgbmVlZCB0bwotICAgICAgICAvLyBkaXNhYmxlIHRoZSB0cmFja3MuIFRoZXkgY291bGQgYmUg
dW5zdXBwb3J0ZWQuCi0gICAgICAgIE1lZGlhIHRyYWNrTWVkaWEgPSBHZXRUcmFja01lZGlhKGN1
cnJlbnRUcmFjayk7Ci0gICAgICAgIGlmICghdHJhY2tNZWRpYSkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAKLSAgICAgICAgLy8gR3JhYiB0aGUgbWVkaWEgdHlwZSBmb3IgdGhpcyB0
cmFjay4gTWFrZSBzdXJlIHRoYXQgd2UgZG9uJ3QKLSAgICAgICAgLy8gZ2V0IGFuIGVycm9yIGlu
IGRvaW5nIHNvLiBJZiB3ZSBkbywgdGhlbiBzb21ldGhpbmcgcmVhbGx5IGZ1bmt5IGlzCi0gICAg
ICAgIC8vIHdyb25nLgotICAgICAgICBPU1R5cGUgbWVkaWFUeXBlOwotICAgICAgICBHZXRNZWRp
YUhhbmRsZXJEZXNjcmlwdGlvbih0cmFja01lZGlhLCAmbWVkaWFUeXBlLCBuaWwsIG5pbCk7Ci0g
ICAgICAgIE9TRXJyIG1lZGlhRXJyID0gR2V0TW92aWVzRXJyb3IoKTsgICAgCi0gICAgICAgIGlm
IChtZWRpYUVyciAhPSBub0VycikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAKLSAg
ICAgICAgaWYgKCFhbGxvd2VkVHJhY2tUeXBlcy0+Y29udGFpbnMobWVkaWFUeXBlKSkgewotCi0g
ICAgICAgICAgICAvLyBEaWZmZXJlbnQgbXBlZyB2YXJpYW50cyBpbXBvcnQgYXMgZGlmZmVyZW50
IHRyYWNrIHR5cGVzIHNvIGNoZWNrIGZvciB0aGUgIm1wZWcgCi0gICAgICAgICAgICAvLyBjaGFy
YWN0ZXJpc3RpYyIgaW5zdGVhZCBvZiBoYXJkIGNvZGluZyB0aGUgKGN1cnJlbnQpIGxpc3Qgb2Yg
bXBlZyBtZWRpYSB0eXBlcy4KLSAgICAgICAgICAgIGlmIChHZXRNb3ZpZUluZFRyYWNrVHlwZSht
X3ByaXZhdGUtPm1fbW92aWUsIDEsICdtcGVnJywgbW92aWVUcmFja0NoYXJhY3RlcmlzdGljIHwg
bW92aWVUcmFja0VuYWJsZWRPbmx5KSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAg
ICAgICAgICAgU2V0VHJhY2tFbmFibGVkKGN1cnJlbnRUcmFjaywgZmFsc2UpOwotICAgICAgICAg
ICAgLS1lbmFibGVkVHJhY2tDb3VudDsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8g
R3JhYiB0aGUgdHJhY2sgcmVmZXJlbmNlIGNvdW50IGZvciBjaGFwdGVycy4gVGhpcyB3aWxsIHRl
bGwgdXMgaWYgaXQKLSAgICAgICAgLy8gaGFzIGNoYXB0ZXIgdHJhY2tzIGluIGl0LiBJZiB0aGVy
ZSBhcmVuJ3QgYW55IHJlZmVyZW5jZXMsIHRoZW4gd2UKLSAgICAgICAgLy8gY2FuIG1vdmUgb24g
dGhlIG5leHQgdHJhY2suCi0gICAgICAgIGxvbmcgcmVmZXJlbmNlQ291bnQgPSBHZXRUcmFja1Jl
ZmVyZW5jZUNvdW50KGN1cnJlbnRUcmFjaywga1RyYWNrUmVmZXJlbmNlQ2hhcHRlckxpc3QpOwot
ICAgICAgICBpZiAocmVmZXJlbmNlQ291bnQgPD0gMCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAKLSAgICAgICAgbG9uZyByZWZlcmVuY2VJbmRleCA9IDA7ICAgICAgICAKLSAgICAg
ICAgd2hpbGUgKDEpIHsKLSAgICAgICAgICAgIC8vIElmIHdlIGdldCBub3RoaW5nIGhlcmUsIHdl
J3ZlIG92ZXJzdGVwcGVkIG91ciBib3VuZHMgYW5kIGNhbiBzdG9wCi0gICAgICAgICAgICAvLyBs
b29raW5nLiBDaGFwdGVyIGluZGljZXMgaGVyZSBhcmUgMS1iYXNlZCBhcyB3ZWxsIC0gaGVuY2Us
IHRoZQotICAgICAgICAgICAgLy8gcHJlLWluY3JlbWVudC4KLSAgICAgICAgICAgIHJlZmVyZW5j
ZUluZGV4Kys7Ci0gICAgICAgICAgICBUcmFjayBjaGFwdGVyVHJhY2sgPSBHZXRUcmFja1JlZmVy
ZW5jZShjdXJyZW50VHJhY2ssIGtUcmFja1JlZmVyZW5jZUNoYXB0ZXJMaXN0LCByZWZlcmVuY2VJ
bmRleCk7Ci0gICAgICAgICAgICBpZiAoIWNoYXB0ZXJUcmFjaykKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gVHJ5IHRvIGdyYWIgdGhlIG1lZGlh
IGZvciB0aGUgdHJhY2suCi0gICAgICAgICAgICBNZWRpYSBjaGFwdGVyTWVkaWEgPSBHZXRUcmFj
a01lZGlhKGNoYXB0ZXJUcmFjayk7Ci0gICAgICAgICAgICBpZiAoIWNoYXB0ZXJNZWRpYSkKLSAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgCi0gICAgICAgICAgICAvLyBHcmFiIHRo
ZSBtZWRpYSB0eXBlIGZvciB0aGlzIHRyYWNrLiBNYWtlIHN1cmUgdGhhdCB3ZSBkb24ndAotICAg
ICAgICAgICAgLy8gZ2V0IGFuIGVycm9yIGluIGRvaW5nIHNvLiBJZiB3ZSBkbywgdGhlbiBzb21l
dGhpbmcgcmVhbGx5Ci0gICAgICAgICAgICAvLyBmdW5reSBpcyB3cm9uZy4KLSAgICAgICAgICAg
IE9TVHlwZSBtZWRpYVR5cGU7Ci0gICAgICAgICAgICBHZXRNZWRpYUhhbmRsZXJEZXNjcmlwdGlv
bihjaGFwdGVyTWVkaWEsICZtZWRpYVR5cGUsIG5pbCwgbmlsKTsKLSAgICAgICAgICAgIE9TRXJy
IG1lZGlhRXJyID0gR2V0TW92aWVzRXJyb3IoKTsKLSAgICAgICAgICAgIGlmIChtZWRpYUVyciAh
PSBub0VycikKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSB0cmFjayBpcyBhIHZpZGVvIHRyYWNrLiBXZSBk
b24ndCBjYXJlIGFib3V0Ci0gICAgICAgICAgICAvLyBvdGhlciBub24tdmlkZW8gdHJhY2tzLgot
ICAgICAgICAgICAgaWYgKG1lZGlhVHlwZSAhPSBWaWRlb01lZGlhVHlwZSkKLSAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2Vl
IGlmIHRoZSB0cmFjayBpcyBhbHJlYWR5IGRpc2FibGVkLiBJZiBpdCBpcywgd2UKLSAgICAgICAg
ICAgIC8vIHNob3VsZCBtb3ZlIGFsb25nLgotICAgICAgICAgICAgaWYgKCFHZXRUcmFja0VuYWJs
ZWQoY2hhcHRlclRyYWNrKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgLy8gRGlzYWJsZWQgdGhlIGV2aWwsIGV2aWwgdHJhY2suCi0gICAgICAg
ICAgICBTZXRUcmFja0VuYWJsZWQoY2hhcHRlclRyYWNrLCBmYWxzZSk7Ci0gICAgICAgICAgICAt
LWVuYWJsZWRUcmFja0NvdW50OwotICAgICAgICB9Ci0gICAgfQotfQotCiB2b2lkIFFUTW92aWVX
aW46OnNldERpc2FibGVkKGJvb2wgYikKIHsKLSAgICBtX2Rpc2FibGVkID0gYjsKKyAgICBtX3By
aXZhdGUtPm1fZGlzYWJsZWQgPSBiOwogfQogCi0KLWJvb2wgUVRNb3ZpZVdpbjo6aGFzVmlkZW8o
KSBjb25zdAorYm9vbCBRVE1vdmllV2luOjppc0Rpc2FibGVkKCkgY29uc3QKIHsKLSAgICBpZiAo
IW1fcHJpdmF0ZS0+bV9tb3ZpZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiAo
R2V0TW92aWVJbmRUcmFja1R5cGUobV9wcml2YXRlLT5tX21vdmllLCAxLCBWaXN1YWxNZWRpYUNo
YXJhY3RlcmlzdGljLCBtb3ZpZVRyYWNrQ2hhcmFjdGVyaXN0aWMgfCBtb3ZpZVRyYWNrRW5hYmxl
ZE9ubHkpKTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5tX2Rpc2FibGVkOwogfQogCi1ib29sIFFU
TW92aWVXaW46Omhhc0F1ZGlvKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fcHJpdmF0ZS0+bV9tb3Zp
ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiAoR2V0TW92aWVJbmRUcmFja1R5
cGUobV9wcml2YXRlLT5tX21vdmllLCAxLCBBdWRpb01lZGlhQ2hhcmFjdGVyaXN0aWMsIG1vdmll
VHJhY2tDaGFyYWN0ZXJpc3RpYyB8IG1vdmllVHJhY2tFbmFibGVkT25seSkpOwotfQotCi0KLWJv
b2wgUVRNb3ZpZVdpbjo6aGFzQ2xvc2VkQ2FwdGlvbnMoKSBjb25zdCAKLXsKLSAgICBpZiAoIW1f
cHJpdmF0ZS0+bV9tb3ZpZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBHZXRN
b3ZpZUluZFRyYWNrVHlwZShtX3ByaXZhdGUtPm1fbW92aWUsIDEsIGNsb3NlZENhcHRpb25UcmFj
a1R5cGUsIG1vdmllVHJhY2tNZWRpYVR5cGUpOwotfQotCi12b2lkIFFUTW92aWVXaW46OnNldENs
b3NlZENhcHRpb25zVmlzaWJsZShib29sIHZpc2libGUpCi17Ci0gICAgaWYgKCFtX3ByaXZhdGUt
Pm1fbW92aWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIFRyYWNrIGNjVHJhY2sgPSBHZXRNb3Zp
ZUluZFRyYWNrVHlwZShtX3ByaXZhdGUtPm1fbW92aWUsIDEsIGNsb3NlZENhcHRpb25UcmFja1R5
cGUsIG1vdmllVHJhY2tNZWRpYVR5cGUpOwotICAgIGlmICghY2NUcmFjaykKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgQm9vbGVhbiBkb0Rpc3BsYXkgPSB2aXNpYmxlOwotICAgIFFUU2V0VHJhY2tQ
cm9wZXJ0eShjY1RyYWNrLCBjbG9zZWRDYXB0aW9uVHJhY2tUeXBlLCBjbG9zZWRDYXB0aW9uRGlz
cGxheVByb3BlcnR5SUQsIHNpemVvZihkb0Rpc3BsYXkpLCAmZG9EaXNwbGF5KTsKLX0KLQotcGFz
Y2FsIE9TRXJyIG1vdmllRHJhd2luZ0NvbXBsZXRlUHJvYyhNb3ZpZSBtb3ZpZSwgbG9uZyBkYXRh
KQotewotICAgIFVwcFBhcmFtIHBhcmFtOwotICAgIHBhcmFtLmxvbmdWYWx1ZSA9IGRhdGE7Ci0g
ICAgUVRNb3ZpZVdpblByaXZhdGUqIG1wID0gc3RhdGljX2Nhc3Q8UVRNb3ZpZVdpblByaXZhdGUq
PihwYXJhbS5wdHIpOwotICAgIGlmIChtcCkKLSAgICAgICAgbXAtPmRyYXdpbmdDb21wbGV0ZSgp
OwotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBpbml0aWFsaXplU3VwcG9ydGVkVHlw
ZXMoKSAKLXsKLSAgICBpZiAoZ1N1cHBvcnRlZFR5cGVzKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBnU3VwcG9ydGVkVHlwZXMgPSBuZXcgVmVjdG9yPENGU3RyaW5nUmVmPjsKLSAgICBpZiAocXVp
Y2tUaW1lVmVyc2lvbiA8IG1pbmltdW1RdWlja1RpbWVWZXJzaW9uKSB7Ci0gICAgICAgIExPR19F
UlJPUigiUXVpY2tUaW1lIHZlcnNpb24gJXggZGV0ZWN0ZWQsIGF0IGxlYXN0ICV4IHJlcXVpcmVk
LiBSZXR1cm5pbmcgZW1wdHkgbGlzdCBvZiBzdXBwb3J0ZWQgbWVkaWEgTUlNRSB0eXBlcy4iLCBx
dWlja1RpbWVWZXJzaW9uLCBtaW5pbXVtUXVpY2tUaW1lVmVyc2lvbik7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICAvLyBRdWlja1RpbWUgZG9lc24ndCBoYXZlIGFuIGltcG9ydGVyIGZv
ciB2aWRlby9xdWlja3RpbWUuIEFkZCBpdCBtYW51YWxseS4KLSAgICBnU3VwcG9ydGVkVHlwZXMt
PmFwcGVuZChDRlNUUigidmlkZW8vcXVpY2t0aW1lIikpOwotCi0gICAgZm9yIChpbnQgaW5kZXgg
PSAwOyBpbmRleCA8IDI7IGluZGV4KyspIHsKLSAgICAgICAgQ29tcG9uZW50RGVzY3JpcHRpb24g
ZmluZENEOwotCi0gICAgICAgIC8vIGxvb2sgYXQgYWxsIG1vdmllIGltcG9ydGVycyB0aGF0IGNh
biBpbXBvcnQgaW4gcGxhY2UgYW5kIGFyZSBpbnN0YWxsZWQuIAotICAgICAgICBmaW5kQ0QuY29t
cG9uZW50VHlwZSA9IE1vdmllSW1wb3J0VHlwZTsKLSAgICAgICAgZmluZENELmNvbXBvbmVudFN1
YlR5cGUgPSAwOwotICAgICAgICBmaW5kQ0QuY29tcG9uZW50TWFudWZhY3R1cmVyID0gMDsKLSAg
ICAgICAgZmluZENELmNvbXBvbmVudEZsYWdzTWFzayA9IGNtcElzTWlzc2luZyB8IG1vdmllSW1w
b3J0U3ViVHlwZUlzRmlsZUV4dGVuc2lvbiB8IGNhbk1vdmllSW1wb3J0SW5QbGFjZSB8IGRvbnRB
dXRvRmlsZU1vdmllSW1wb3J0OwotCi0gICAgICAgIC8vIGxvb2sgYXQgdGhvc2UgcmVnaXN0ZXJl
ZCBieSBIRlMgZmlsZSB0eXBlcyB0aGUgZmlyc3QgdGltZSB0aHJvdWdoLCBieSBmaWxlIGV4dGVu
c2lvbiB0aGUgc2Vjb25kIHRpbWUKLSAgICAgICAgZmluZENELmNvbXBvbmVudEZsYWdzID0gY2Fu
TW92aWVJbXBvcnRJblBsYWNlIHwgKGluZGV4ID8gbW92aWVJbXBvcnRTdWJUeXBlSXNGaWxlRXh0
ZW5zaW9uIDogMCk7Ci0gICAgICAgIAotICAgICAgICBsb25nIGNvbXBvbmVudENvdW50ID0gQ291
bnRDb21wb25lbnRzKCZmaW5kQ0QpOwotICAgICAgICBpZiAoIWNvbXBvbmVudENvdW50KQotICAg
ICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgQ29tcG9uZW50IGNvbXAgPSAwOwotICAgICAg
ICB3aGlsZSAoY29tcCA9IEZpbmROZXh0Q29tcG9uZW50KGNvbXAsICZmaW5kQ0QpKSB7Ci0gICAg
ICAgICAgICAvLyBEb2VzIHRoaXMgY29tcG9uZW50IGhhdmUgYSBNSU1FIHR5cGUgY29udGFpbmVy
PwotICAgICAgICAgICAgQ29tcG9uZW50RGVzY3JpcHRpb24gaW5mb0NEOwotICAgICAgICAgICAg
T1NFcnIgZXJyID0gR2V0Q29tcG9uZW50SW5mbyhjb21wLCAmaW5mb0NELCBuaWwgLypuYW1lKi8s
IG5pbCAvKmluZm8qLywgbmlsIC8qaWNvbiovKTsKLSAgICAgICAgICAgIGlmIChlcnIpCi0gICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoIShpbmZvQ0QuY29tcG9uZW50
RmxhZ3MgJiBoYXNNb3ZpZUltcG9ydE1JTUVMaXN0KSkKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIFFUQXRvbUNvbnRhaW5lciBtaW1lTGlzdCA9IDA7Ci0gICAgICAgICAg
ICBlcnIgPSBNb3ZpZUltcG9ydEdldE1JTUVUeXBlTGlzdCgoQ29tcG9uZW50SW5zdGFuY2UpY29t
cCwgJm1pbWVMaXN0KTsKLSAgICAgICAgICAgIGlmIChlcnIgfHwgIW1pbWVMaXN0KQotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAvLyBHcmFiIGV2ZXJ5IHR5cGUgZnJv
bSB0aGUgY29udGFpbmVyLgotICAgICAgICAgICAgUVRMb2NrQ29udGFpbmVyKG1pbWVMaXN0KTsK
LSAgICAgICAgICAgIGludCB0eXBlQ291bnQgPSBRVENvdW50Q2hpbGRyZW5PZlR5cGUobWltZUxp
c3QsIGtQYXJlbnRBdG9tSXNDb250YWluZXIsIGtNaW1lSW5mb01pbWVUeXBlVGFnKTsKLSAgICAg
ICAgICAgIGZvciAoaW50IHR5cGVJbmRleCA9IDE7IHR5cGVJbmRleCA8PSB0eXBlQ291bnQ7IHR5
cGVJbmRleCsrKSB7Ci0gICAgICAgICAgICAgICAgUVRBdG9tIG1pbWVUYWcgPSBRVEZpbmRDaGls
ZEJ5SW5kZXgobWltZUxpc3QsIDAsIGtNaW1lSW5mb01pbWVUeXBlVGFnLCB0eXBlSW5kZXgsIDAp
OwotICAgICAgICAgICAgICAgIGlmICghbWltZVRhZykKLSAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICAgICAgY2hhciogYXRvbURhdGE7Ci0gICAgICAgICAgICAgICAg
bG9uZyB0eXBlTGVuZ3RoOwotICAgICAgICAgICAgICAgIGlmIChub0VyciAhPSBRVEdldEF0b21E
YXRhUHRyKG1pbWVMaXN0LCBtaW1lVGFnLCAmdHlwZUxlbmd0aCwgJmF0b21EYXRhKSkKLSAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgICAgICBjaGFyIHR5cGVCdWZm
ZXJbMjU2XTsKLSAgICAgICAgICAgICAgICBpZiAodHlwZUxlbmd0aCA+PSBzaXplb2YodHlwZUJ1
ZmZlcikpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIG1l
bWNweSh0eXBlQnVmZmVyLCBhdG9tRGF0YSwgdHlwZUxlbmd0aCk7Ci0gICAgICAgICAgICAgICAg
dHlwZUJ1ZmZlclt0eXBlTGVuZ3RoXSA9IDA7Ci0KLSAgICAgICAgICAgICAgICAvLyBPbmx5IGFk
ZCAiYXVkaW8vLi4uIiBhbmQgInZpZGVvLy4uLiIgdHlwZXMuCi0gICAgICAgICAgICAgICAgaWYg
KHN0cm5jbXAodHlwZUJ1ZmZlciwgImF1ZGlvLyIsIDYpICYmIHN0cm5jbXAodHlwZUJ1ZmZlciwg
InZpZGVvLyIsIDYpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAg
ICAgICAgIENGU3RyaW5nUmVmIGNmTWltZVR5cGUgPSBDRlN0cmluZ0NyZWF0ZVdpdGhDU3RyaW5n
KDAsIHR5cGVCdWZmZXIsIGtDRlN0cmluZ0VuY29kaW5nVVRGOCk7Ci0gICAgICAgICAgICAgICAg
aWYgKCFjZk1pbWVUeXBlKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAg
ICAgICAgICAgIC8vIE9ubHkgYWRkIGVhY2ggdHlwZSBvbmNlLgotICAgICAgICAgICAgICAgIGJv
b2wgYWxyZWFkeUFkZGVkID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgYWRkZWRJ
bmRleCA9IDA7IGFkZGVkSW5kZXggPCBnU3VwcG9ydGVkVHlwZXMtPnNpemUoKTsgYWRkZWRJbmRl
eCsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIENGU3RyaW5nUmVmIHR5cGUgPSBnU3VwcG9ydGVk
VHlwZXMtPmF0KGFkZGVkSW5kZXgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoa0NGQ29tcGFy
ZUVxdWFsVG8gPT0gQ0ZTdHJpbmdDb21wYXJlKGNmTWltZVR5cGUsIHR5cGUsIGtDRkNvbXBhcmVD
YXNlSW5zZW5zaXRpdmUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhbHJlYWR5QWRkZWQg
PSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCFhbHJlYWR5QWRk
ZWQpCi0gICAgICAgICAgICAgICAgICAgIGdTdXBwb3J0ZWRUeXBlcy0+YXBwZW5kKGNmTWltZVR5
cGUpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgQ0ZSZWxlYXNl
KGNmTWltZVR5cGUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgRGlzcG9zZUhhbmRsZSht
aW1lTGlzdCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXVuc2lnbmVkIFFUTW92aWVXaW46OmNv
dW50U3VwcG9ydGVkVHlwZXMoKQotewotICAgIGluaXRpYWxpemVTdXBwb3J0ZWRUeXBlcygpOwot
ICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZ1N1cHBvcnRlZFR5cGVzLT5zaXplKCkp
OwotfQotCi12b2lkIFFUTW92aWVXaW46OmdldFN1cHBvcnRlZFR5cGUodW5zaWduZWQgaW5kZXgs
IGNvbnN0IFVDaGFyKiYgc3RyLCB1bnNpZ25lZCYgbGVuKQotewotICAgIGluaXRpYWxpemVTdXBw
b3J0ZWRUeXBlcygpOwotICAgIEFTU0VSVChpbmRleCA8IGdTdXBwb3J0ZWRUeXBlcy0+c2l6ZSgp
KTsKLQotICAgIC8vIEFsbG9jYXRlIHN1ZmZpY2llbnQgYnVmZmVyIHRvIGhvbGQgYW55IE1JTUUg
dHlwZQotICAgIHN0YXRpYyBVbmlDaGFyKiBzdGF0aWNCdWZmZXIgPSAwOwotICAgIGlmICghc3Rh
dGljQnVmZmVyKQotICAgICAgICBzdGF0aWNCdWZmZXIgPSBuZXcgVW5pQ2hhclszMl07Ci0KLSAg
ICBDRlN0cmluZ1JlZiBjZnN0ciA9IGdTdXBwb3J0ZWRUeXBlcy0+YXQoaW5kZXgpOwotICAgIGxl
biA9IENGU3RyaW5nR2V0TGVuZ3RoKGNmc3RyKTsKLSAgICBDRlJhbmdlIHJhbmdlID0geyAwLCBs
ZW4gfTsKLSAgICBDRlN0cmluZ0dldENoYXJhY3RlcnMoY2ZzdHIsIHJhbmdlLCBzdGF0aWNCdWZm
ZXIpOwotICAgIHN0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPihzdGF0aWNCdWZm
ZXIpOwotICAgIAotfQotCi12b2lkIFFUTW92aWVXaW46OnNldFRhc2tUaW1lckZ1bmNzKFNldFRh
c2tUaW1lckRlbGF5RnVuYyBzZXRUYXNrVGltZXJEZWxheSwgU3RvcFRhc2tUaW1lckZ1bmMgc3Rv
cFRhc2tUaW1lcikKLXsKLSAgICBnU2V0VGFza1RpbWVyRGVsYXkgPSBzZXRUYXNrVGltZXJEZWxh
eTsKLSAgICBnU3RvcFRhc2tUaW1lciA9IHN0b3BUYXNrVGltZXI7Ci19Ci0KLWJvb2wgUVRNb3Zp
ZVdpbjo6aW5pdGlhbGl6ZVF1aWNrVGltZSgpIAotewotICAgIHN0YXRpYyBib29sIGluaXRpYWxp
emVkID0gZmFsc2U7Ci0gICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6YXRpb25TdWNjZWVkZWQgPSBm
YWxzZTsKLSAgICBpZiAoIWluaXRpYWxpemVkKSB7Ci0gICAgICAgIGluaXRpYWxpemVkID0gdHJ1
ZTsKLSAgICAgICAgLy8gSW5pdGlhbGl6ZSBhbmQgY2hlY2sgUXVpY2tUaW1lIHZlcnNpb24KLSAg
ICAgICAgT1NFcnIgcmVzdWx0ID0gSW5pdGlhbGl6ZVFUTUwoa0luaXRpYWxpemVRVE1MRW5hYmxl
RG91YmxlQnVmZmVyZWRTdXJmYWNlKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBub0VycikKLSAg
ICAgICAgICAgIHJlc3VsdCA9IEdlc3RhbHQoZ2VzdGFsdFF1aWNrVGltZSwgJnF1aWNrVGltZVZl
cnNpb24pOwotICAgICAgICBpZiAocmVzdWx0ICE9IG5vRXJyKSB7Ci0gICAgICAgICAgICBMT0df
RVJST1IoIk5vIFF1aWNrVGltZSBhdmFpbGFibGUuIERpc2FibGluZyA8dmlkZW8+IGFuZCA8YXVk
aW8+IHN1cHBvcnQuIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKHF1aWNrVGltZVZlcnNpb24gPCBtaW5pbXVtUXVpY2tUaW1lVmVyc2lvbikgewot
ICAgICAgICAgICAgTE9HX0VSUk9SKCJRdWlja1RpbWUgdmVyc2lvbiAleCBkZXRlY3RlZCwgYXQg
bGVhc3QgJXggcmVxdWlyZWQuIERpc2FibGluZyA8dmlkZW8+IGFuZCA8YXVkaW8+IHN1cHBvcnQu
IiwgcXVpY2tUaW1lVmVyc2lvbiwgbWluaW11bVF1aWNrVGltZVZlcnNpb24pOwotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIEVudGVyTW92aWVzKCk7Ci0gICAg
ICAgIGdNb3ZpZURyYXdpbmdDb21wbGV0ZVVQUCA9IE5ld01vdmllRHJhd2luZ0NvbXBsZXRlVVBQ
KG1vdmllRHJhd2luZ0NvbXBsZXRlUHJvYyk7Ci0gICAgICAgIGluaXRpYWxpemF0aW9uU3VjY2Vl
ZGVkID0gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGluaXRpYWxpemF0aW9uU3VjY2VlZGVkOwot
fQotCiBMUkVTVUxUIFFUTW92aWVXaW46OmZ1bGxzY3JlZW5XbmRQcm9jKEhXTkQgd25kLCBVSU5U
IG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCiB7CiAgICAgUVRNb3ZpZVdp
biogbW92aWUgPSBzdGF0aWNfY2FzdDxRVE1vdmllV2luKj4oR2V0UHJvcCh3bmQsIGZ1bGxzY3Jl
ZW5RVE1vdmllV2luUG9pbnRlclByb3ApKTsKQEAgLTExNjMsMTYgKzQ2NSwyNSBAQA0KICAgICBt
X3ByaXZhdGUtPm1fZnVsbHNjcmVlbldpbmRvdyA9IDA7CiB9CiAKLUJPT0wgV0lOQVBJIERsbE1h
aW4oSElOU1RBTkNFIGhpbnN0RExMLCBEV09SRCBmZHdSZWFzb24sIExQVk9JRCBscHZSZXNlcnZl
ZCkKK3ZvaWQgUVRNb3ZpZVdpbjo6c2V0TW92aWUoUmVmUHRyPFFUTW92aWU+IG1vdmllKQogewot
ICAgIHN3aXRjaCAoZmR3UmVhc29uKSB7Ci0gICAgY2FzZSBETExfUFJPQ0VTU19BVFRBQ0g6Ci0g
ICAgICAgIHJldHVybiBUUlVFOwotICAgIGNhc2UgRExMX1BST0NFU1NfREVUQUNIOgotICAgIGNh
c2UgRExMX1RIUkVBRF9BVFRBQ0g6Ci0gICAgY2FzZSBETExfVEhSRUFEX0RFVEFDSDoKLSAgICAg
ICAgcmV0dXJuIEZBTFNFOworICAgIGlmIChtX3ByaXZhdGUtPm1fcXRNb3ZpZSkgeworICAgICAg
ICBtX3ByaXZhdGUtPnVucmVnaXN0ZXJEcmF3aW5nQ2FsbGJhY2soKTsKKyAgICAgICAgbV9wcml2
YXRlLT5tX3F0TW92aWUtPnJlbW92ZUNsaWVudChtX3ByaXZhdGUpOworICAgICAgICBtX3ByaXZh
dGUtPm1fcXRNb3ZpZSA9IDA7CisgICAgICAgIG1fcHJpdmF0ZS0+bV9tb3ZpZSA9IDA7CiAgICAg
fQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBGQUxTRTsKKworICAgIG1f
cHJpdmF0ZS0+bV9xdE1vdmllID0gbW92aWU7CisKKyAgICBpZiAobV9wcml2YXRlLT5tX3F0TW92
aWUpIHsKKyAgICAgICAgbV9wcml2YXRlLT5tX3F0TW92aWUtPmFkZENsaWVudChtX3ByaXZhdGUp
OworICAgICAgICBtX3ByaXZhdGUtPm1fbW92aWUgPSBtX3ByaXZhdGUtPm1fcXRNb3ZpZS0+Z2V0
TW92aWVIYW5kbGUoKTsKKyAgICAgICAgbV9wcml2YXRlLT5yZWdpc3RlckRyYXdpbmdDYWxsYmFj
aygpOworICAgIH0KIH0KKworUmVmUHRyPFFUTW92aWU+IFFUTW92aWVXaW46Om1vdmllKCkgY29u
c3QgCit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bV9xdE1vdmllOworfQpJbmRleDogUVRNb3Zp
ZVdpbi5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09DQotLS0gUVRNb3ZpZVdpbi5oCShyZXZpc2lvbiA1ODE4NykNCisr
KyBRVE1vdmllV2luLmgJKHdvcmtpbmcgY29weSkNCkBAIC0yNiw3ICsyNiwxMSBAQA0KICNpZm5k
ZWYgUVRNb3ZpZVdpbl9oCiAjZGVmaW5lIFFUTW92aWVXaW5faAogCisKKyNpbmNsdWRlICJRVE1v
dmllLmgiCiAjaW5jbHVkZSA8VW5pY29kZS5oPgorI2luY2x1ZGUgPFdURi9SZWZDb3VudGVkLmg+
CisjaW5jbHVkZSA8V1RGL1JlZlB0ci5oPgogI2luY2x1ZGUgPHdpbmRvd3MuaD4KIAogI2lmZGVm
IFFUTU9WSUVXSU5fRVhQT1JUUwpAQCAtNDAsOSArNDQsNiBAQA0KIAogY2xhc3MgUVRNb3ZpZVdp
bkNsaWVudCB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIG1vdmllRW5kZWQoUVRNb3ZpZVdp
biopID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbW92aWVMb2FkU3RhdGVDaGFuZ2VkKFFUTW92aWVX
aW4qKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIG1vdmllVGltZUNoYW5nZWQoUVRNb3ZpZVdpbiop
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgbW92aWVOZXdJbWFnZUF2YWlsYWJsZShRVE1vdmllV2lu
KikgPSAwOwogfTsKIApAQCAtNTEsNDcgKzUyLDExIEBADQogICAgIHZpcnR1YWwgTFJFU1VMVCBm
dWxsc2NyZWVuQ2xpZW50V25kUHJvYyhIV05ELCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSwgTFBBUkFN
KSA9IDA7CiB9OwogCi1lbnVtIHsKLSAgICBRVE1vdmllTG9hZFN0YXRlRXJyb3IgPSAtMUwsCi0g
ICAgUVRNb3ZpZUxvYWRTdGF0ZUxvYWRlZCAgPSAyMDAwTCwKLSAgICBRVE1vdmllTG9hZFN0YXRl
UGxheWFibGUgPSAxMDAwMEwsCi0gICAgUVRNb3ZpZUxvYWRTdGF0ZVBsYXl0aHJvdWdoT0sgPSAy
MDAwMEwsCi0gICAgUVRNb3ZpZUxvYWRTdGF0ZUNvbXBsZXRlID0gMTAwMDAwTAotfTsKLQotdHlw
ZWRlZiBjb25zdCBzdHJ1Y3QgX19DRlVSTCAqIENGVVJMUmVmOwotCi1jbGFzcyBRVE1PVklFV0lO
X0FQSSBRVE1vdmllV2luIHsKK2NsYXNzIFFUTU9WSUVXSU5fQVBJIFFUTW92aWVXaW4gOiBwdWJs
aWMgUmVmQ291bnRlZDxRVE1vdmllV2luPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGJvb2wgaW5p
dGlhbGl6ZVF1aWNrVGltZSgpOwotCi0gICAgdHlwZWRlZiB2b2lkICgqU2V0VGFza1RpbWVyRGVs
YXlGdW5jKShkb3VibGUpOwotICAgIHR5cGVkZWYgdm9pZCAoKlN0b3BUYXNrVGltZXJGdW5jKSgp
OwotICAgIHN0YXRpYyB2b2lkIHNldFRhc2tUaW1lckZ1bmNzKFNldFRhc2tUaW1lckRlbGF5RnVu
YywgU3RvcFRhc2tUaW1lckZ1bmMpOwotICAgIHN0YXRpYyB2b2lkIHRhc2tUaW1lckZpcmVkKCk7
Ci0KICAgICBRVE1vdmllV2luKFFUTW92aWVXaW5DbGllbnQqKTsKICAgICB+UVRNb3ZpZVdpbigp
OwogCi0gICAgdm9pZCBsb2FkKGNvbnN0IFVDaGFyKiB1cmwsIGludCBsZW4sIGJvb2wgcHJlc2Vy
dmVzUGl0Y2gpOwotICAgIGxvbmcgbG9hZFN0YXRlKCkgY29uc3Q7Ci0gICAgZmxvYXQgbWF4VGlt
ZUxvYWRlZCgpIGNvbnN0OwotCi0gICAgdm9pZCBwbGF5KCk7Ci0gICAgdm9pZCBwYXVzZSgpOwot
Ci0gICAgZmxvYXQgcmF0ZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0UmF0ZShmbG9hdCk7Ci0KLSAg
ICBmbG9hdCBkdXJhdGlvbigpIGNvbnN0OwotICAgIGZsb2F0IGN1cnJlbnRUaW1lKCkgY29uc3Q7
Ci0gICAgdm9pZCBzZXRDdXJyZW50VGltZShmbG9hdCkgY29uc3Q7Ci0KLSAgICB2b2lkIHNldFZv
bHVtZShmbG9hdCk7Ci0gICAgdm9pZCBzZXRQcmVzZXJ2ZXNQaXRjaChib29sKTsKLQotICAgIHVu
c2lnbmVkIGRhdGFTaXplKCkgY29uc3Q7Ci0KICAgICB2b2lkIGdldE5hdHVyYWxTaXplKGludCYg
d2lkdGgsIGludCYgaGVpZ2h0KTsKICAgICB2b2lkIHNldFNpemUoaW50IHdpZHRoLCBpbnQgaGVp
Z2h0KTsKIApAQCAtOTksMjggKzY0LDIwIEBADQogICAgIHZvaWQgcGFpbnQoSERDLCBpbnQgeCwg
aW50IHkpOwogICAgIHZvaWQgZ2V0Q3VycmVudEZyYW1lSW5mbyh2b2lkKiYgYnVmZmVyLCB1bnNp
Z25lZCYgYml0c1BlclBpeGVsLCB1bnNpZ25lZCYgcm93Qnl0ZXMsIHVuc2lnbmVkJiB3aWR0aCwg
dW5zaWduZWQmIGhlaWdodCk7CiAKLSAgICB2b2lkIGRpc2FibGVVbnN1cHBvcnRlZFRyYWNrcyh1
bnNpZ25lZCYgZW5hYmxlZFRyYWNrQ291bnQsIHVuc2lnbmVkJiB0b3RhbFRyYWNrQ291bnQpOwog
ICAgIHZvaWQgc2V0RGlzYWJsZWQoYm9vbCk7CisgICAgYm9vbCBpc0Rpc2FibGVkKCkgY29uc3Q7
CiAKLSAgICBib29sIGhhc1ZpZGVvKCkgY29uc3Q7Ci0gICAgYm9vbCBoYXNBdWRpbygpIGNvbnN0
OwotCi0gICAgYm9vbCBoYXNDbG9zZWRDYXB0aW9ucygpIGNvbnN0OwotICAgIHZvaWQgc2V0Q2xv
c2VkQ2FwdGlvbnNWaXNpYmxlKGJvb2wpOwotCi0gICAgc3RhdGljIHVuc2lnbmVkIGNvdW50U3Vw
cG9ydGVkVHlwZXMoKTsKLSAgICBzdGF0aWMgdm9pZCBnZXRTdXBwb3J0ZWRUeXBlKHVuc2lnbmVk
IGluZGV4LCBjb25zdCBVQ2hhciomIHN0ciwgdW5zaWduZWQmIGxlbik7Ci0KICAgICAvLyBSZXR1
cm5zIHRoZSBmdWxsLXNjcmVlbiB3aW5kb3cgY3JlYXRlZAogICAgIEhXTkQgZW50ZXJGdWxsc2Ny
ZWVuKFFUTW92aWVXaW5GdWxsc2NyZWVuQ2xpZW50Kik7CiAgICAgdm9pZCBleGl0RnVsbHNjcmVl
bigpOwogCisgICAgdm9pZCBzZXRNb3ZpZShSZWZQdHI8UVRNb3ZpZT4pOworICAgIFJlZlB0cjxR
VE1vdmllPiBtb3ZpZSgpIGNvbnN0OworCiBwcml2YXRlOgotICAgIHZvaWQgbG9hZChDRlVSTFJl
ZiwgYm9vbCBwcmVzZXJ2ZXNQaXRjaCk7CiAgICAgc3RhdGljIExSRVNVTFQgZnVsbHNjcmVlbldu
ZFByb2MoSFdORCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0sIExQQVJBTSk7CiAKICAgICBRVE1vdmll
V2luUHJpdmF0ZSogbV9wcml2YXRlOwotICAgIGJvb2wgbV9kaXNhYmxlZDsKICAgICBmcmllbmQg
Y2xhc3MgUVRNb3ZpZVdpblByaXZhdGU7CiB9OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54500</attachid>
            <date>2010-04-27 19:07:46 -0700</date>
            <delta_ts>2010-04-27 20:47:35 -0700</delta_ts>
            <desc>New classes in QTMovieWin</desc>
            <filename>7569713-QTMovieWin-NewClasses.patch</filename>
            <type>text/plain</type>
            <size>32433</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">SW5kZXg6IFFUQ0ZEaWN0aW9uYXJ5LmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFFUQ0ZEaWN0aW9uYXJ5
LmNwcAkocmV2aXNpb24gMCkNCisrKyBRVENGRGljdGlvbmFyeS5jcHAJKHJldmlzaW9uIDApDQpA
QCAtMCwwICsxLDYwIEBADQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSwg
MjAxMCBBcHBsZSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaW5jbHVkZSAiUVRDRkRpY3Rpb25hcnkuaCIKKworI2luY2x1ZGUgPENG
RGF0YS5oPgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKworQ0ZEYXRhUmVmIFFUQ0ZQcm9wZXJ0eUxp
c3RDcmVhdGVYTUxEYXRhKENGQWxsb2NhdG9yUmVmIGFsbG9jYXRvciwgQ0ZQcm9wZXJ0eUxpc3RS
ZWYgcHJvcGVydHlMaXN0KQoreworCisgICAgdHlwZWRlZiBDRkRhdGFSZWYgKCogcGZuQ0ZQcm9w
ZXJ0eUxpc3RDcmVhdGVYTUxEYXRhKShDRkFsbG9jYXRvclJlZiBhbGxvY2F0b3IsIENGUHJvcGVy
dHlMaXN0UmVmIHByb3BlcnR5TGlzdCk7CisgICAgc3RhdGljIHBmbkNGUHJvcGVydHlMaXN0Q3Jl
YXRlWE1MRGF0YSBwQ0ZQcm9wZXJ0eUxpc3RDcmVhdGVYTUxEYXRhID0gMDsKKyAgICBpZiAoIXBD
RlByb3BlcnR5TGlzdENyZWF0ZVhNTERhdGEpIHsKKyAgICAgICAgSE1PRFVMRSBxdGNmRExMID0g
TG9hZExpYnJhcnlXKEwiUVRDRi5kbGwiKTsKKyAgICAgICAgaWYgKHF0Y2ZETEwpCisgICAgICAg
ICAgICBwQ0ZQcm9wZXJ0eUxpc3RDcmVhdGVYTUxEYXRhID0gcmVpbnRlcnByZXRfY2FzdDxwZm5D
RlByb3BlcnR5TGlzdENyZWF0ZVhNTERhdGE+KEdldFByb2NBZGRyZXNzKHF0Y2ZETEwsICJRVENG
X0NGUHJvcGVydHlMaXN0Q3JlYXRlWE1MRGF0YSIpKTsKKyAgICB9CisKKyAgICBpZiAocENGUHJv
cGVydHlMaXN0Q3JlYXRlWE1MRGF0YSkKKyAgICAgICAgcmV0dXJuIHBDRlByb3BlcnR5TGlzdENy
ZWF0ZVhNTERhdGEoYWxsb2NhdG9yLCBwcm9wZXJ0eUxpc3QpOworICAgIHJldHVybiAwOworfQor
CitDRkRpY3Rpb25hcnlSZWYgUVRDRkRpY3Rpb25hcnlDcmVhdGVDb3B5V2l0aERhdGFDYWxsYmFj
ayhDRkFsbG9jYXRvclJlZiBhbGxvY2F0b3IsIENGRGljdGlvbmFyeVJlZiBkaWN0aW9uYXJ5LCBR
VENGRGljdG9uYXJ5Q3JlYXRlRnJvbURhdGFDYWxsYmFjayBjYWxsYmFjaykgCit7CisgICAgQVNT
RVJUKGRpY3Rpb25hcnkpOworICAgIEFTU0VSVChjYWxsYmFjayk7CisKKyAgICBDRkRhdGFSZWYg
ZGF0YSA9IFFUQ0ZQcm9wZXJ0eUxpc3RDcmVhdGVYTUxEYXRhKGtDRkFsbG9jYXRvckRlZmF1bHQs
IGRpY3Rpb25hcnkpOworICAgIENGRGljdGlvbmFyeVJlZiBvdXRwdXREaWN0aW9uYXJ5ID0gY2Fs
bGJhY2soYWxsb2NhdG9yLCBDRkRhdGFHZXRCeXRlUHRyKGRhdGEpLCBDRkRhdGFHZXRMZW5ndGgo
ZGF0YSkpOworICAgIGlmIChkYXRhKQorICAgICAgICBDRlJlbGVhc2UoZGF0YSk7CisKKyAgICBy
ZXR1cm4gb3V0cHV0RGljdGlvbmFyeTsKK30KSW5kZXg6IFFUQ0ZEaWN0aW9uYXJ5LmgNCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0NCi0tLSBRVENGRGljdGlvbmFyeS5oCShyZXZpc2lvbiAwKQ0KKysrIFFUQ0ZEaWN0aW9u
YXJ5LmgJKHJldmlzaW9uIDApDQpAQCAtMCwwICsxLDQ0IEBADQorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBRVENGRGljdGlvbmFyeV9oCisjZGVmaW5lIFFUQ0ZEaWN0aW9u
YXJ5X2gKKworI2lmZGVmIFFUTU9WSUVXSU5fRVhQT1JUUworI2RlZmluZSBRVE1PVklFV0lOX0FQ
SSBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKKyNlbHNlCisjZGVmaW5lIFFUTU9WSUVXSU5fQVBJIF9f
ZGVjbHNwZWMoZGxsaW1wb3J0KQorI2VuZGlmCisKKyNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9D
RkJhc2UuaD4KKwordHlwZWRlZiBjb25zdCBzdHJ1Y3QgX19DRkRpY3Rpb25hcnkgKiBDRkRpY3Rp
b25hcnlSZWY7Cit0eXBlZGVmIGNvbnN0IHN0cnVjdCBfX0NGQWxsb2NhdG9yICogQ0ZBbGxvY2F0
b3JSZWY7CisKK3R5cGVkZWYgQ0ZEaWN0aW9uYXJ5UmVmICgqIFFUQ0ZEaWN0b25hcnlDcmVhdGVG
cm9tRGF0YUNhbGxiYWNrKShDRkFsbG9jYXRvclJlZiwgY29uc3QgVUludDgqLCBDRkluZGV4KTsK
KworUVRNT1ZJRVdJTl9BUEkgQ0ZEaWN0aW9uYXJ5UmVmIFFUQ0ZEaWN0aW9uYXJ5Q3JlYXRlQ29w
eVdpdGhEYXRhQ2FsbGJhY2soQ0ZBbGxvY2F0b3JSZWYsIENGRGljdGlvbmFyeVJlZiwgUVRDRkRp
Y3RvbmFyeUNyZWF0ZUZyb21EYXRhQ2FsbGJhY2spOworCisjZW5kaWYKSW5kZXg6IFFUTW92aWVU
YXNrLmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQ0KLS0tIFFUTW92aWVUYXNrLmNwcAkocmV2aXNpb24gMCkNCisr
KyBRVE1vdmllVGFzay5jcHAJKHJldmlzaW9uIDApDQpAQCAtMCwwICsxLDEwMSBAQA0KKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUsIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJR
VE1vdmllVGFzay5oIgorCisvLyBQdXQgTW92aWVzLmggZmlyc3Qgc28gYnVpbGQgZmFpbHVyZXMg
aGVyZSBwb2ludCBjbGVhcmx5IHRvIFF1aWNrVGltZQorI2luY2x1ZGUgPE1vdmllcy5oPgorCisj
aW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKworUVRNb3ZpZVRhc2s6OlFUTW92aWVUYXNrKCkgCisg
ICAgOiBtX3NldFRhc2tUaW1lckRlbGF5KDApCisgICAgLCBtX3N0b3BUYXNrVGltZXIoMCkKK3sK
K30KKworUVRNb3ZpZVRhc2s6On5RVE1vdmllVGFzaygpCit7Cit9CisKK1FUTW92aWVUYXNrKiBR
VE1vdmllVGFzazo6c2hhcmVkVGFzaygpCit7CisgICAgc3RhdGljIFFUTW92aWVUYXNrKiBzX3No
YXJlZFRhc2sgPSBuZXcgUVRNb3ZpZVRhc2soKTsKKyAgICByZXR1cm4gc19zaGFyZWRUYXNrOwor
fQorCit2b2lkIFFUTW92aWVUYXNrOjp1cGRhdGVUYXNrVGltZXIoZG91YmxlIG1heEludGVydmFs
LCBkb3VibGUgbWluSW50ZXJ2YWwpCit7CisgICAgQVNTRVJUKG1fc2V0VGFza1RpbWVyRGVsYXkp
OworICAgIGlmICghbV9zZXRUYXNrVGltZXJEZWxheSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
QVNTRVJUKG1fc3RvcFRhc2tUaW1lcik7CisgICAgaWYgKCFtX3Rhc2tMaXN0LnNpemUoKSAmJiBt
X3N0b3BUYXNrVGltZXIpIHsKKyAgICAgICAgbV9zdG9wVGFza1RpbWVyKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgCisgICAgbG9uZyBpbnRlcnZhbEluTVM7CisgICAgT1NTdGF0dXMg
c3RhdHVzID0gUVRHZXRUaW1lVW50aWxOZXh0VGFzaygmaW50ZXJ2YWxJbk1TLCAxMDAwKTsKKyAg
ICBkb3VibGUgaW50ZXJ2YWwgPSBpbnRlcnZhbEluTVMgLyAxMDAwLjA7CisgICAgaWYgKGludGVy
dmFsIDwgbWluSW50ZXJ2YWwpCisgICAgICAgIGludGVydmFsID0gbWluSW50ZXJ2YWw7CisgICAg
aWYgKHN0YXR1cyAhPSBub0VyciAmJiBpbnRlcnZhbCA+IG1heEludGVydmFsKQorICAgICAgICBp
bnRlcnZhbCA9IG1heEludGVydmFsOworICAgIG1fc2V0VGFza1RpbWVyRGVsYXkoaW50ZXJ2YWwp
OworfQorCit2b2lkIFFUTW92aWVUYXNrOjpmaXJlVGFza0NsaWVudHMoKQoreworICAgIGZvciAo
SGFzaFNldDxRVE1vdmllVGFza0NsaWVudCo+OjppdGVyYXRvciBpID0gbV90YXNrTGlzdC5iZWdp
bigpOyBpICE9IG1fdGFza0xpc3QuZW5kKCk7ICsraSkKKyAgICAgICAgKCppKS0+dGFzaygpOwor
fQorCit2b2lkIFFUTW92aWVUYXNrOjphZGRUYXNrQ2xpZW50KFFUTW92aWVUYXNrQ2xpZW50KiBj
bGllbnQpIAoreworICAgIEFTU0VSVChjbGllbnQpOworICAgIGlmICghY2xpZW50KQorICAgICAg
ICByZXR1cm47CisKKyAgICBtX3Rhc2tMaXN0LmFkZChjbGllbnQpOworfQorCit2b2lkIFFUTW92
aWVUYXNrOjpyZW1vdmVUYXNrQ2xpZW50KFFUTW92aWVUYXNrQ2xpZW50KiBjbGllbnQpCit7Cisg
ICAgQVNTRVJUKGNsaWVudCk7CisgICAgaWYgKCFjbGllbnQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIG1fdGFza0xpc3QucmVtb3ZlKGNsaWVudCk7Cit9CisKK3ZvaWQgUVRNb3ZpZVRhc2s6OnNl
dFRhc2tUaW1lckZ1bmNzKFNldFRhc2tUaW1lckRlbGF5RnVuYyBzZXRUYXNrVGltZXJEZWxheSwg
U3RvcFRhc2tUaW1lckZ1bmMgc3RvcFRhc2tUaW1lcikKK3sKKyAgICBtX3NldFRhc2tUaW1lckRl
bGF5ID0gc2V0VGFza1RpbWVyRGVsYXk7CisgICAgbV9zdG9wVGFza1RpbWVyID0gc3RvcFRhc2tU
aW1lcjsKK30KKwpJbmRleDogUVRNb3ZpZVRhc2suaA0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFFUTW92aWVU
YXNrLmgJKHJldmlzaW9uIDApDQorKysgUVRNb3ZpZVRhc2suaAkocmV2aXNpb24gMCkNCkBAIC0w
LDAgKzEsNjkgQEANCisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5LCAyMDEw
IEFwcGxlLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFFUTW92
aWVUYXNrX2gKKyNkZWZpbmUgUVRNb3ZpZVRhc2tfaAorCisjaW5jbHVkZSA8V1RGL0hhc2hTZXQu
aD4KKworI2lmZGVmIFFUTU9WSUVXSU5fRVhQT1JUUworI2RlZmluZSBRVE1PVklFV0lOX0FQSSBf
X2RlY2xzcGVjKGRsbGV4cG9ydCkKKyNlbHNlCisjZGVmaW5lIFFUTU9WSUVXSU5fQVBJIF9fZGVj
bHNwZWMoZGxsaW1wb3J0KQorI2VuZGlmCisKK2NsYXNzIFFUTW92aWVUYXNrQ2xpZW50IHsKK3B1
YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgdGFzaygpID0gMDsKK307CisKK3R5cGVkZWYgdm9pZCAo
KlNldFRhc2tUaW1lckRlbGF5RnVuYykoZG91YmxlKTsKK3R5cGVkZWYgdm9pZCAoKlN0b3BUYXNr
VGltZXJGdW5jKSgpOworCitjbGFzcyBRVE1PVklFV0lOX0FQSSBRVE1vdmllVGFzayB7CitwdWJs
aWM6CisgICAgc3RhdGljIFFUTW92aWVUYXNrKiBzaGFyZWRUYXNrKCk7CisKKyAgICB2b2lkIGFk
ZFRhc2tDbGllbnQoUVRNb3ZpZVRhc2tDbGllbnQqIGNsaWVudCk7CisgICAgdm9pZCByZW1vdmVU
YXNrQ2xpZW50KFFUTW92aWVUYXNrQ2xpZW50Kik7CisgICAgdm9pZCBmaXJlVGFza0NsaWVudHMo
KTsKKworICAgIHZvaWQgdXBkYXRlVGFza1RpbWVyKGRvdWJsZSBtYXhJbnRlcnZhbCA9IDEuMCwg
ZG91YmxlIG1pbkludGVydmFsID0gMS4wIC8gMzApOworICAgIHZvaWQgc2V0VGFza1RpbWVyRnVu
Y3MoU2V0VGFza1RpbWVyRGVsYXlGdW5jIHNldFRhc2tUaW1lckRlbGF5LCBTdG9wVGFza1RpbWVy
RnVuYyBzdG9wVGFza1RpbWVyKTsKKworcHJvdGVjdGVkOgorICAgIFFUTW92aWVUYXNrKCk7Cisg
ICAgflFUTW92aWVUYXNrKCk7CisKKyAgICBTZXRUYXNrVGltZXJEZWxheUZ1bmMgbV9zZXRUYXNr
VGltZXJEZWxheTsKKyAgICBTdG9wVGFza1RpbWVyRnVuYyBtX3N0b3BUYXNrVGltZXI7CisgICAg
SGFzaFNldDxRVE1vdmllVGFza0NsaWVudCo+IG1fdGFza0xpc3Q7CisKK3ByaXZhdGU6CisgICAg
UVRNb3ZpZVRhc2soY29uc3QgUVRNb3ZpZVRhc2smKTsKKyAgICBRVE1vdmllVGFzayYgb3BlcmF0
b3I9KGNvbnN0IFFUTW92aWVUYXNrJik7Cit9OworCisjZW5kaWYKSW5kZXg6IFFUTW92aWVWaXN1
YWxDb250ZXh0LmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFFUTW92aWVWaXN1YWxDb250ZXh0LmNwcAko
cmV2aXNpb24gMCkNCisrKyBRVE1vdmllVmlzdWFsQ29udGV4dC5jcHAJKHJldmlzaW9uIDApDQpA
QCAtMCwwICsxLDI0NyBAQA0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDks
IDIwMTAgQXBwbGUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpbmNsdWRlICJRVE1vdmllVmlzdWFsQ29udGV4dC5oIgorCisjaW5jbHVk
ZSAiUVRNb3ZpZVRhc2suaCIKKyNpbmNsdWRlIDxDVkJhc2UuaD4KKyNpbmNsdWRlIDxDVkhvc3RU
aW1lLmg+CisjaW5jbHVkZSA8SW1hZ2VDb21wcmVzc2lvbi5oPgorI2luY2x1ZGUgPE1vdmllcy5o
PgorI2luY2x1ZGUgPGQzZDl0eXBlcy5oPgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKworc3RydWN0
IFFUQ1ZUaW1lU3RhbXAgeworICAgIENWVGltZVN0YW1wIHQ7Cit9OworCitjbGFzcyBRVE1vdmll
VmlzdWFsQ29udGV4dFByaXYgeworcHVibGljOgorICAgIFFUTW92aWVWaXN1YWxDb250ZXh0UHJp
dihRVE1vdmllVmlzdWFsQ29udGV4dCogcGFyZW50LCBRVE1vdmllVmlzdWFsQ29udGV4dENsaWVu
dCogY2xpZW50LCBDRkRpY3Rpb25hcnlSZWYgb3B0aW9ucyk7CisgICAgflFUTW92aWVWaXN1YWxD
b250ZXh0UHJpdigpOworCisgICAgYm9vbCBpc0ltYWdlQXZhaWxhYmxlRm9yVGltZShjb25zdCBR
VENWVGltZVN0YW1wKik7CisgICAgUVRQaXhlbEJ1ZmZlciBpbWFnZUZvclRpbWUoY29uc3QgUVRD
VlRpbWVTdGFtcCopOworICAgIHZvaWQgdGFzaygpOworCisgICAgUVRWaXN1YWxDb250ZXh0UmVm
IGdldCgpOworCisgICAgZG91YmxlIGdldEN1cnJlbnRIb3N0VGltZSgpOworICAgIGRvdWJsZSBn
ZXRIb3N0Q2xvY2tGcmVxdWVuY3koKTsKKworICAgIHZvaWQgc2V0TW92aWUoUmVmUHRyPFFUTW92
aWU+KTsKKyAgICBSZWZQdHI8UVRNb3ZpZT4gbW92aWUoKSBjb25zdDsKKyAgICAKKyAgICBzdGF0
aWMgdm9pZCBpbWFnZUF2YWlsYWJsZUNhbGxiYWNrKFFUVmlzdWFsQ29udGV4dFJlZiB2aXN1YWxD
b250ZXh0LCBjb25zdCBDVlRpbWVTdGFtcCAqdGltZVN0YW1wLCB2b2lkICpyZWZDb24pOworCitw
cml2YXRlOgorICAgIFFUTW92aWVWaXN1YWxDb250ZXh0KiBtX3BhcmVudDsKKyAgICBRVE1vdmll
VmlzdWFsQ29udGV4dENsaWVudCogbV9jbGllbnQ7CisgICAgUVRWaXN1YWxDb250ZXh0UmVmIG1f
dmlzdWFsQ29udGV4dDsKKyAgICBSZWZQdHI8UVRNb3ZpZT4gbV9tb3ZpZTsKKworfTsKKworUVRN
b3ZpZVZpc3VhbENvbnRleHRQcml2OjpRVE1vdmllVmlzdWFsQ29udGV4dFByaXYoUVRNb3ZpZVZp
c3VhbENvbnRleHQqIHBhcmVudCwgUVRNb3ZpZVZpc3VhbENvbnRleHRDbGllbnQqIGNsaWVudCwg
Q0ZEaWN0aW9uYXJ5UmVmIG9wdGlvbnMpIAorICAgICAgICA6IG1fcGFyZW50KHBhcmVudCkKKyAg
ICAgICAgLCBtX2NsaWVudChjbGllbnQpCisgICAgICAgICwgbV92aXN1YWxDb250ZXh0KDApCit7
CisgICAgSE1PRFVMRSBxdG1sRExMID0gOjpMb2FkTGlicmFyeVcoTCJRVE1MQ2xpZW50LmRsbCIp
OworICAgIGlmIChxdG1sRExMKSB7CisgICAgICAgIHR5cGVkZWYgT1NTdGF0dXMgKCBfX2NkZWNs
ICpwZm5RVFBpeGVsQnVmZmVyQ29udGV4dENyZWF0ZSkoQ0ZBbGxvY2F0b3JSZWYsIENGRGljdGlv
bmFyeVJlZiwgUVRWaXN1YWxDb250ZXh0UmVmKik7CisgICAgICAgIHBmblFUUGl4ZWxCdWZmZXJD
b250ZXh0Q3JlYXRlIHBQaXhlbEJ1ZmZlckNvbnRleHRDcmVhdGUgPSByZWludGVycHJldF9jYXN0
PHBmblFUUGl4ZWxCdWZmZXJDb250ZXh0Q3JlYXRlPihHZXRQcm9jQWRkcmVzcyhxdG1sRExMLCAi
UVRQaXhlbEJ1ZmZlckNvbnRleHRDcmVhdGUiKSk7CisgICAgICAgIGlmIChwUGl4ZWxCdWZmZXJD
b250ZXh0Q3JlYXRlKSB7CisgICAgICAgICAgICBPU1N0YXR1cyBzdGF0dXMgPSBwUGl4ZWxCdWZm
ZXJDb250ZXh0Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIG9wdGlvbnMsICZtX3Zpc3VhbENv
bnRleHQpOworICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSBub0VyciAmJiBtX3Zpc3VhbENvbnRl
eHQpCisgICAgICAgICAgICAgICAgUVRWaXN1YWxDb250ZXh0U2V0SW1hZ2VBdmFpbGFibGVDYWxs
YmFjayhtX3Zpc3VhbENvbnRleHQsICZRVE1vdmllVmlzdWFsQ29udGV4dFByaXY6OmltYWdlQXZh
aWxhYmxlQ2FsbGJhY2ssIHN0YXRpY19jYXN0PHZvaWQqPih0aGlzKSk7CisgICAgICAgIH0KKyAg
ICB9Cit9CisKK1FUTW92aWVWaXN1YWxDb250ZXh0UHJpdjo6flFUTW92aWVWaXN1YWxDb250ZXh0
UHJpdigpCit7Cit9CisKK2Jvb2wgUVRNb3ZpZVZpc3VhbENvbnRleHRQcml2Ojppc0ltYWdlQXZh
aWxhYmxlRm9yVGltZShjb25zdCBRVENWVGltZVN0YW1wKiB0aW1lU3RhbXApCit7CisgICAgaWYg
KCFtX3Zpc3VhbENvbnRleHQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBR
VFZpc3VhbENvbnRleHRJc05ld0ltYWdlQXZhaWxhYmxlKG1fdmlzdWFsQ29udGV4dCwgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBDVlRpbWVTdGFtcCo+KHRpbWVTdGFtcCkpOyAKK30KKworUVRQaXhl
bEJ1ZmZlciBRVE1vdmllVmlzdWFsQ29udGV4dFByaXY6OmltYWdlRm9yVGltZShjb25zdCBRVENW
VGltZVN0YW1wKiB0aW1lU3RhbXApCit7CisgICAgUVRQaXhlbEJ1ZmZlciBwaXhlbEJ1ZmZlcjsK
KyAgICBpZiAobV92aXN1YWxDb250ZXh0KSB7CisgICAgICAgIENWSW1hZ2VCdWZmZXJSZWYgbmV3
SW1hZ2UgPSAwOworICAgICAgICBPU1N0YXR1cyBzdGF0dXMgPSBRVFZpc3VhbENvbnRleHRDb3B5
SW1hZ2VGb3JUaW1lKG1fdmlzdWFsQ29udGV4dCwga0NGQWxsb2NhdG9yRGVmYXVsdCwgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBDVlRpbWVTdGFtcCo+KHRpbWVTdGFtcCksICZuZXdJbWFnZSk7Cisg
ICAgICAgIGlmIChzdGF0dXMgPT0gbm9FcnIpIHsKKyAgICAgICAgICAgIHBpeGVsQnVmZmVyLnNl
dChuZXdJbWFnZSk7CisgICAgICAgICAgICBDVlBpeGVsQnVmZmVyUmVsZWFzZShuZXdJbWFnZSk7
CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHBpeGVsQnVmZmVyOworfQorCit2b2lkIFFU
TW92aWVWaXN1YWxDb250ZXh0UHJpdjo6dGFzaygpCit7CisgICAgaWYgKG1fdmlzdWFsQ29udGV4
dCkKKyAgICAgICAgUVRWaXN1YWxDb250ZXh0VGFzayhtX3Zpc3VhbENvbnRleHQpOworfQorCitR
VFZpc3VhbENvbnRleHRSZWYgUVRNb3ZpZVZpc3VhbENvbnRleHRQcml2OjpnZXQoKSAKK3sKKyAg
ICByZXR1cm4gbV92aXN1YWxDb250ZXh0OworfQorCit2b2lkIFFUTW92aWVWaXN1YWxDb250ZXh0
UHJpdjo6c2V0TW92aWUoUmVmUHRyPFFUTW92aWU+IG1vdmllKQoreworICAgIGlmIChtX21vdmll
KSB7CisgICAgICAgIFNldE1vdmllVmlzdWFsQ29udGV4dChtX21vdmllLT5nZXRNb3ZpZUhhbmRs
ZSgpLCAwKTsKKyAgICAgICAgbV9tb3ZpZSA9IDA7CisgICAgfQorCisgICAgaWYgKG1vdmllKQor
ICAgICAgICBPU1N0YXR1cyBzdGF0dXMgPSBTZXRNb3ZpZVZpc3VhbENvbnRleHQobW92aWUtPmdl
dE1vdmllSGFuZGxlKCksIG1fdmlzdWFsQ29udGV4dCk7CisgICAgCisgICAgbV9tb3ZpZSA9IG1v
dmllOworfQorCitSZWZQdHI8UVRNb3ZpZT4gUVRNb3ZpZVZpc3VhbENvbnRleHRQcml2Ojptb3Zp
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbW92aWU7Cit9CisKK3ZvaWQgUVRNb3ZpZVZpc3Vh
bENvbnRleHRQcml2OjppbWFnZUF2YWlsYWJsZUNhbGxiYWNrKFFUVmlzdWFsQ29udGV4dFJlZiB2
aXN1YWxDb250ZXh0LCBjb25zdCBDVlRpbWVTdGFtcCAqdGltZVN0YW1wLCB2b2lkICpyZWZDb24p
IAoreworICAgIGlmICghcmVmQ29uKQorICAgICAgICByZXR1cm47CisKKyAgICBRVE1vdmllVmlz
dWFsQ29udGV4dFByaXYqIHZjID0gc3RhdGljX2Nhc3Q8UVRNb3ZpZVZpc3VhbENvbnRleHRQcml2
Kj4ocmVmQ29uKTsKKyAgICBpZiAoIXZjLT5tX2NsaWVudCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgdmMtPm1fY2xpZW50LT5pbWFnZUF2YWlsYWJsZUZvclRpbWUocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBRVENWVGltZVN0YW1wKj4odGltZVN0YW1wKSk7Cit9CisKK3N0YXRpYyBPU1N0YXR1cyBT
ZXROdW1iZXJWYWx1ZShDRk11dGFibGVEaWN0aW9uYXJ5UmVmIGluRGljdCwgQ0ZTdHJpbmdSZWYg
aW5LZXksIFNJbnQzMiBpblZhbHVlKQoreworICAgIENGTnVtYmVyUmVmIG51bWJlcjsKKyAKKyAg
ICBudW1iZXIgPSBDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJT
SW50MzJUeXBlLCAmaW5WYWx1ZSk7CisgICAgaWYgKCFudW1iZXIpIAorICAgICAgICByZXR1cm4g
Y29yZUZvdW5kYXRpb25Vbmtub3duRXJyOworIAorICAgIENGRGljdGlvbmFyeVNldFZhbHVlKGlu
RGljdCwgaW5LZXksIG51bWJlcik7CisgCisgICAgQ0ZSZWxlYXNlKG51bWJlcik7CisgCisgICAg
cmV0dXJuIG5vRXJyOworfQorCitDRkRpY3Rpb25hcnlSZWYgUVRNb3ZpZVZpc3VhbENvbnRleHQ6
OmdldENHSW1hZ2VPcHRpb25zKCkKK3sKKyAgICBzdGF0aWMgQ0ZEaWN0aW9uYXJ5UmVmIG9wdGlv
bnMgPSAwOworCisgICAgaWYgKCFvcHRpb25zKSB7CisgICAgICAgIENGTXV0YWJsZURpY3Rpb25h
cnlSZWYgIHBpeGVsQnVmZmVyT3B0aW9ucyA9IDA7CisgICAgICAgIENGTXV0YWJsZURpY3Rpb25h
cnlSZWYgIHZpc3VhbENvbnRleHRPcHRpb25zID0gMDsKKyAgICAgICAgT1NTdGF0dXMgICAgICAg
ICAgICAgICAgc3RhdHVzID0gbm9FcnI7CisgICAgICAgIAorICAgICAgICAvLyBQaXhlbCBCdWZm
ZXIgYXR0cmlidXRlcworICAgICAgICBwaXhlbEJ1ZmZlck9wdGlvbnMgPSBDRkRpY3Rpb25hcnlD
cmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDAsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5
Q2FsbEJhY2tzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKTsKKworICAgICAgICAv
LyBVc2UgdGhlIGszMkJHUkFQaXhlbEZvcm1hdCwgYXMgUXVhcnR6Q29yZSB3aWxsIGJlIGFibGUg
dG8gdXNlIHRoZSBwaXhlbHMgZGlyZWN0bHksCisgICAgICAgIC8vIHdpdGhvdXQgbmVlZGluZyBh
biBhZGl0aW9uYWwgY29weSBvciByZW5kZXJpbmcgcGFzczpzCisgICAgICAgIFNldE51bWJlclZh
bHVlKHBpeGVsQnVmZmVyT3B0aW9ucywga0NWUGl4ZWxCdWZmZXJQaXhlbEZvcm1hdFR5cGVLZXks
IGszMkJHUkFQaXhlbEZvcm1hdCk7CisgICAgICAgICAgICAKKyAgICAgICAgLy8gYWxpZ25tZW50
CisgICAgICAgIFNldE51bWJlclZhbHVlKHBpeGVsQnVmZmVyT3B0aW9ucywga0NWUGl4ZWxCdWZm
ZXJCeXRlc1BlclJvd0FsaWdubWVudEtleSwgMTYpOworCisgICAgICAgIC8vIGNvbXBhdGFiaWxp
dHkKKyAgICAgICAgU2V0TnVtYmVyVmFsdWUocGl4ZWxCdWZmZXJPcHRpb25zLCBrQ1ZQaXhlbEJ1
ZmZlckNHSW1hZ2VDb21wYXRpYmlsaXR5S2V5LCAxKTsKKyAgICAgCisgICAgICAgIC8vIFFUIFZp
c3VhbCBDb250ZXh0IGF0dHJpYnV0ZXMKKyAgICAgICAgdmlzdWFsQ29udGV4dE9wdGlvbnMgPSBD
RkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDAsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAma0NGVHlw
ZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNr
cyk7CisgICAgIAorICAgICAgICAvLyBzZXQgdGhlIHBpeGVsIGJ1ZmZlciBhdHRyaWJ1dGVzIGZv
ciB0aGUgdmlzdWFsIGNvbnRleHQKKyAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUodmlzdWFs
Q29udGV4dE9wdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtRVFZpc3VhbENv
bnRleHRQaXhlbEJ1ZmZlckF0dHJpYnV0ZXNLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBpeGVsQnVmZmVyT3B0aW9ucyk7CisKKyAgICAgICAgaWYgKHBpeGVsQnVmZmVyT3B0aW9u
cykKKyAgICAgICAgICAgIENGUmVsZWFzZShwaXhlbEJ1ZmZlck9wdGlvbnMpOworICAgIAorICAg
ICAgICBvcHRpb25zID0gdmlzdWFsQ29udGV4dE9wdGlvbnM7CisgICAgfQorCisgICAgcmV0dXJu
IG9wdGlvbnM7Cit9CisKK1FUTW92aWVWaXN1YWxDb250ZXh0OjpRVE1vdmllVmlzdWFsQ29udGV4
dChRVE1vdmllVmlzdWFsQ29udGV4dENsaWVudCogY2xpZW50LCBDRkRpY3Rpb25hcnlSZWYgb3B0
aW9ucykgCisgICAgOiBtX3ByaXZhdGUobmV3IFFUTW92aWVWaXN1YWxDb250ZXh0UHJpdih0aGlz
LCBjbGllbnQsIG9wdGlvbnMpKQoreworfQorCitRVE1vdmllVmlzdWFsQ29udGV4dDo6flFUTW92
aWVWaXN1YWxDb250ZXh0KCkKK3sKK30KKworYm9vbCBRVE1vdmllVmlzdWFsQ29udGV4dDo6aXNJ
bWFnZUF2YWlsYWJsZUZvclRpbWUoY29uc3QgUVRDVlRpbWVTdGFtcCogdGltZVN0YW1wKQorewor
ICAgIHJldHVybiBtX3ByaXZhdGUtPmlzSW1hZ2VBdmFpbGFibGVGb3JUaW1lKHRpbWVTdGFtcCk7
Cit9CisKK1FUUGl4ZWxCdWZmZXIgUVRNb3ZpZVZpc3VhbENvbnRleHQ6OmltYWdlRm9yVGltZShj
b25zdCBRVENWVGltZVN0YW1wKiB0aW1lU3RhbXApCit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+
aW1hZ2VGb3JUaW1lKHRpbWVTdGFtcCk7Cit9CisKK3ZvaWQgUVRNb3ZpZVZpc3VhbENvbnRleHQ6
OnRhc2soKQoreworICAgIG1fcHJpdmF0ZS0+dGFzaygpOworfQorCitRVFZpc3VhbENvbnRleHRS
ZWYgUVRNb3ZpZVZpc3VhbENvbnRleHQ6OmdldCgpIAoreworICAgIHJldHVybiBtX3ByaXZhdGUt
PmdldCgpOworfQorCit2b2lkIFFUTW92aWVWaXN1YWxDb250ZXh0OjpzZXRNb3ZpZShSZWZQdHI8
UVRNb3ZpZT4gbW92aWUpCit7CisgICAgbV9wcml2YXRlLT5zZXRNb3ZpZShtb3ZpZSk7Cit9CisK
K1JlZlB0cjxRVE1vdmllPiBRVE1vdmllVmlzdWFsQ29udGV4dDo6bW92aWUoKSBjb25zdAorewor
ICAgIHJldHVybiBtX3ByaXZhdGUtPm1vdmllKCk7Cit9CkluZGV4OiBRVE1vdmllVmlzdWFsQ29u
dGV4dC5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09DQotLS0gUVRNb3ZpZVZpc3VhbENvbnRleHQuaAkocmV2aXNpb24g
MCkNCisrKyBRVE1vdmllVmlzdWFsQ29udGV4dC5oCShyZXZpc2lvbiAwKQ0KQEAgLTAsMCArMSw4
MCBAQA0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUs
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUVRNb3ZpZVZpc3Vh
bENvbnRleHRfaAorI2RlZmluZSBRVE1vdmllVmlzdWFsQ29udGV4dF9oCisKKyNpZmRlZiBRVE1P
VklFV0lOX0VYUE9SVFMKKyNkZWZpbmUgUVRNT1ZJRVdJTl9BUEkgX19kZWNsc3BlYyhkbGxleHBv
cnQpCisjZWxzZQorI2RlZmluZSBRVE1PVklFV0lOX0FQSSBfX2RlY2xzcGVjKGRsbGltcG9ydCkK
KyNlbmRpZgorCisjaW5jbHVkZSAiUVRNb3ZpZS5oIgorI2luY2x1ZGUgIlFUTW92aWVUYXNrLmgi
CisjaW5jbHVkZSAiUVRQaXhlbEJ1ZmZlci5oIgorI2luY2x1ZGUgPFdURi9Pd25QdHIuaD4KKyNp
bmNsdWRlIDxXVEYvUmVmQ291bnRlZC5oPgorCit0eXBlZGVmIHN0cnVjdCBPcGFxdWVRVFZpc3Vh
bENvbnRleHQqICAgUVRWaXN1YWxDb250ZXh0UmVmOworCisvLyBRVENWVGltZVN0YW1wIGlzIGEg
c3RydWN0IGNvbnRhaW5pbmcgb25seSBhIENWVGltZVN0YW1wLiAgVGhpcyBpcyB0byAKKy8vIHdv
cmsgYXJvdW5kIHRoZSBpbmFiaWxpdHkgb2YgQ1ZUaW1lU3RhbXAgdG8gYmUgZm9yd2FyZCBkZWNs
YXJlZCwgaW4gCisvLyBhZGRpdGlvbiB0byBpdCBiZWluZyBkZWNsYXJlZCBpbiBkaWZmZXJlbnQg
aGVhZGVyIGZpbGVzIHdoZW4gYnVpbGRpbmcKKy8vIHRoZSBRVE1vdmllV2luIGFuZCBXZWJDb3Jl
IHByb2plY3RzLgorc3RydWN0IFFUQ1ZUaW1lU3RhbXA7CisKK2NsYXNzIFFUTW92aWVWaXN1YWxD
b250ZXh0Q2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgaW1hZ2VBdmFpbGFibGVG
b3JUaW1lKGNvbnN0IFFUQ1ZUaW1lU3RhbXAqKSA9IDA7Cit9OworCitjbGFzcyBRVE1PVklFV0lO
X0FQSSBRVE1vdmllVmlzdWFsQ29udGV4dCA6IHB1YmxpYyBSZWZDb3VudGVkPFFUTW92aWVWaXN1
YWxDb250ZXh0PiB7CitwdWJsaWM6CisgICAgUVRNb3ZpZVZpc3VhbENvbnRleHQoUVRNb3ZpZVZp
c3VhbENvbnRleHRDbGllbnQqLCBDRkRpY3Rpb25hcnlSZWYgb3B0aW9ucyA9IDApOworICAgIH5R
VE1vdmllVmlzdWFsQ29udGV4dCgpOworCisgICAgYm9vbCBpc0ltYWdlQXZhaWxhYmxlRm9yVGlt
ZShjb25zdCBRVENWVGltZVN0YW1wKik7CisgICAgUVRQaXhlbEJ1ZmZlciBpbWFnZUZvclRpbWUo
Y29uc3QgUVRDVlRpbWVTdGFtcCopOworICAgIHZvaWQgdGFzaygpOworCisgICAgUVRWaXN1YWxD
b250ZXh0UmVmIGdldCgpOworCisgICAgZG91YmxlIGdldEN1cnJlbnRIb3N0VGltZSgpOworICAg
IGRvdWJsZSBnZXRIb3N0Q2xvY2tGcmVxdWVuY3koKTsKKworICAgIHZvaWQgc2V0TW92aWUoUmVm
UHRyPFFUTW92aWU+KTsKKyAgICBSZWZQdHI8UVRNb3ZpZT4gbW92aWUoKSBjb25zdDsKKworICAg
IHN0YXRpYyBDRkRpY3Rpb25hcnlSZWYgZ2V0Q0dJbWFnZU9wdGlvbnMoKTsKKworcHJvdGVjdGVk
OgorICAgIHZvaWQgc2V0dXBWaXN1YWxDb250ZXh0KCk7CisKKyAgICBmcmllbmQgY2xhc3MgUVRN
b3ZpZVZpc3VhbENvbnRleHRQcml2OworICAgIE93blB0cjxRVE1vdmllVmlzdWFsQ29udGV4dFBy
aXY+IG1fcHJpdmF0ZTsKK307CisKKyNlbmRpZgpJbmRleDogUVRQaXhlbEJ1ZmZlci5jcHANCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0NCi0tLSBRVFBpeGVsQnVmZmVyLmNwcAkocmV2aXNpb24gMCkNCisrKyBRVFBpeGVs
QnVmZmVyLmNwcAkocmV2aXNpb24gMCkNCkBAIC0wLDAgKzEsMTk4IEBADQorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSwgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlFUUGl4ZWxC
dWZmZXIuaCIKKworI2luY2x1ZGUgPENGU3RyaW5nLmg+CisjaW5jbHVkZSA8Q0dDb2xvclNwYWNl
Lmg+CisjaW5jbHVkZSA8Q0dJbWFnZS5oPgorI2luY2x1ZGUgPENWUGl4ZWxCdWZmZXIuaD4KKwor
UVRQaXhlbEJ1ZmZlcjo6UVRQaXhlbEJ1ZmZlcigpIDogbV9waXhlbEJ1ZmZlcigwKSB7fQorCitR
VFBpeGVsQnVmZmVyOjpRVFBpeGVsQnVmZmVyKGNvbnN0IFFUUGl4ZWxCdWZmZXImIHApIDogbV9w
aXhlbEJ1ZmZlcihwLm1fcGl4ZWxCdWZmZXIpIAoreworICAgIENWUGl4ZWxCdWZmZXJSZXRhaW4o
bV9waXhlbEJ1ZmZlcik7Cit9CisKK1FUUGl4ZWxCdWZmZXI6OlFUUGl4ZWxCdWZmZXIoQ1ZQaXhl
bEJ1ZmZlclJlZiByZWYpIDogbV9waXhlbEJ1ZmZlcihyZWYpCit7CisgICAgQ1ZQaXhlbEJ1ZmZl
clJldGFpbihtX3BpeGVsQnVmZmVyKTsKK30KKworUVRQaXhlbEJ1ZmZlcjo6flFUUGl4ZWxCdWZm
ZXIoKSAKK3sKKyAgICBjbGVhcigpOworfQorCitRVFBpeGVsQnVmZmVyJiBRVFBpeGVsQnVmZmVy
OjpvcGVyYXRvcj0oY29uc3QgUVRQaXhlbEJ1ZmZlciYgcCkgCit7CisgICAgc2V0KHAubV9waXhl
bEJ1ZmZlcik7CisgICAgcmV0dXJuICp0aGlzOworfQorCit2b2lkIFFUUGl4ZWxCdWZmZXI6OnNl
dChDVlBpeGVsQnVmZmVyUmVmIHJlZikKK3sKKyAgICBDVlBpeGVsQnVmZmVyUmV0YWluKHJlZik7
CisgICAgQ1ZQaXhlbEJ1ZmZlclJlbGVhc2UobV9waXhlbEJ1ZmZlcik7CisgICAgbV9waXhlbEJ1
ZmZlciA9IHJlZjsKK30KKworQ1ZQaXhlbEJ1ZmZlclJlZiBRVFBpeGVsQnVmZmVyOjpnZXQoKQor
eworICAgIHJldHVybiBtX3BpeGVsQnVmZmVyOworfQorCit2b2lkIFFUUGl4ZWxCdWZmZXI6OmNs
ZWFyKCkKK3sKKyAgICBDVlBpeGVsQnVmZmVyUmVsZWFzZShtX3BpeGVsQnVmZmVyKTsKKyAgICBt
X3BpeGVsQnVmZmVyID0gMDsKK30KKworQ1ZSZXR1cm4gUVRQaXhlbEJ1ZmZlcjo6bG9ja0Jhc2VB
ZGRyZXNzKCkKK3sKKyAgICByZXR1cm4gQ1ZQaXhlbEJ1ZmZlckxvY2tCYXNlQWRkcmVzcyhtX3Bp
eGVsQnVmZmVyLCAwKTsKK30KKworQ1ZSZXR1cm4gUVRQaXhlbEJ1ZmZlcjo6dW5sb2NrQmFzZUFk
ZHJlc3MoKQoreworICAgIHJldHVybiBDVlBpeGVsQnVmZmVyVW5sb2NrQmFzZUFkZHJlc3MobV9w
aXhlbEJ1ZmZlciwgMCk7Cit9CisKK3NpemVfdCBRVFBpeGVsQnVmZmVyOjp3aWR0aCgpCit7Cisg
ICAgcmV0dXJuIENWUGl4ZWxCdWZmZXJHZXRXaWR0aChtX3BpeGVsQnVmZmVyKTsKK30KKworc2l6
ZV90IFFUUGl4ZWxCdWZmZXI6OmhlaWdodCgpCit7CisgICAgcmV0dXJuIENWUGl4ZWxCdWZmZXJH
ZXRIZWlnaHQobV9waXhlbEJ1ZmZlcik7Cit9CisKK3Vuc2lnbmVkIGxvbmcgUVRQaXhlbEJ1ZmZl
cjo6cGl4ZWxGb3JtYXRUeXBlKCkKK3sKKyAgICBPU1R5cGUgcGl4ZWxGb3JtYXRUeXBlID0gQ1ZQ
aXhlbEJ1ZmZlckdldFBpeGVsRm9ybWF0VHlwZShtX3BpeGVsQnVmZmVyKTsKKyAgICByZXR1cm4g
cGl4ZWxGb3JtYXRUeXBlOworfQorCit2b2lkKiBRVFBpeGVsQnVmZmVyOjpiYXNlQWRkcmVzcygp
Cit7CisgICAgcmV0dXJuIENWUGl4ZWxCdWZmZXJHZXRCYXNlQWRkcmVzcyhtX3BpeGVsQnVmZmVy
KTsKK30KKworc2l6ZV90IFFUUGl4ZWxCdWZmZXI6OmJ5dGVzUGVyUm93KCkKK3sKKyAgICByZXR1
cm4gQ1ZQaXhlbEJ1ZmZlckdldEJ5dGVzUGVyUm93KG1fcGl4ZWxCdWZmZXIpOworfQorCitzaXpl
X3QgUVRQaXhlbEJ1ZmZlcjo6ZGF0YVNpemUoKQoreworICAgIHJldHVybiBDVlBpeGVsQnVmZmVy
R2V0RGF0YVNpemUobV9waXhlbEJ1ZmZlcik7Cit9CisKKworYm9vbCBRVFBpeGVsQnVmZmVyOjpp
c1BsYW5hcigpCit7CisgICAgcmV0dXJuIENWUGl4ZWxCdWZmZXJJc1BsYW5hcihtX3BpeGVsQnVm
ZmVyKTsKK30KKworc2l6ZV90IFFUUGl4ZWxCdWZmZXI6OnBsYW5lQ291bnQoKQoreworICAgIHJl
dHVybiBDVlBpeGVsQnVmZmVyR2V0UGxhbmVDb3VudChtX3BpeGVsQnVmZmVyKTsKK30KKworc2l6
ZV90IFFUUGl4ZWxCdWZmZXI6OndpZHRoT2ZQbGFuZShzaXplX3QgcGxhbmUpCit7CisgICAgcmV0
dXJuIENWUGl4ZWxCdWZmZXJHZXRXaWR0aE9mUGxhbmUobV9waXhlbEJ1ZmZlciwgcGxhbmUpOwor
fQorCitzaXplX3QgUVRQaXhlbEJ1ZmZlcjo6aGVpZ2h0T2ZQbGFuZShzaXplX3QgcGxhbmUpCit7
CisgICAgcmV0dXJuIENWUGl4ZWxCdWZmZXJHZXRIZWlnaHRPZlBsYW5lKG1fcGl4ZWxCdWZmZXIs
IHBsYW5lKTsKK30KKwordm9pZCogUVRQaXhlbEJ1ZmZlcjo6YmFzZUFkZHJlc3NPZlBsYW5lKHNp
emVfdCBwbGFuZSkKK3sKKyAgICByZXR1cm4gQ1ZQaXhlbEJ1ZmZlckdldEJhc2VBZGRyZXNzT2ZQ
bGFuZShtX3BpeGVsQnVmZmVyLCBwbGFuZSk7Cit9CisKK3NpemVfdCBRVFBpeGVsQnVmZmVyOjpi
eXRlc1BlclJvd09mUGxhbmUoc2l6ZV90IHBsYW5lKQoreworICAgIHJldHVybiBDVlBpeGVsQnVm
ZmVyR2V0Qnl0ZXNQZXJSb3dPZlBsYW5lKG1fcGl4ZWxCdWZmZXIsIHBsYW5lKTsKK30KKwordm9p
ZCBRVFBpeGVsQnVmZmVyOjpnZXRFeHRlbmRlZFBpeGVscyhzaXplX3QqIGxlZnQsIHNpemVfdCog
cmlnaHQsIHNpemVfdCogdG9wLCBzaXplX3QqIGJvdHRvbSkKK3sKKyAgICByZXR1cm4gQ1ZQaXhl
bEJ1ZmZlckdldEV4dGVuZGVkUGl4ZWxzKG1fcGl4ZWxCdWZmZXIsIGxlZnQsIHJpZ2h0LCB0b3As
IGJvdHRvbSk7Cit9CisKK0NGRGljdGlvbmFyeVJlZiBRVFBpeGVsQnVmZmVyOjphdHRhY2htZW50
cygpCit7CisgICAgQ0ZEaWN0aW9uYXJ5UmVmIHByb3BvZ2F0ZWQgPSBDVkJ1ZmZlckdldEF0dGFj
aG1lbnRzKG1fcGl4ZWxCdWZmZXIsIGtDVkF0dGFjaG1lbnRNb2RlX1Nob3VsZFByb3BhZ2F0ZSk7
CisgICAgcmV0dXJuIHByb3BvZ2F0ZWQ7Cit9CisKK3ZvaWQgUVRQaXhlbEJ1ZmZlcjo6cmV0YWlu
Q2FsbGJhY2sodm9pZCogcmVmY29uKQoreworICAgIENWUGl4ZWxCdWZmZXJSZXRhaW4oc3RhdGlj
X2Nhc3Q8Q1ZQaXhlbEJ1ZmZlclJlZj4ocmVmY29uKSk7Cit9CisKK3ZvaWQgUVRQaXhlbEJ1ZmZl
cjo6cmVsZWFzZUNhbGxiYWNrKHZvaWQqIHJlZmNvbikKK3sKKyAgICBDVlBpeGVsQnVmZmVyUmVs
ZWFzZShzdGF0aWNfY2FzdDxDVlBpeGVsQnVmZmVyUmVmPihyZWZjb24pKTsKK30KKwordm9pZCBR
VFBpeGVsQnVmZmVyOjppbWFnZVF1ZXVlUmVsZWFzZUNhbGxiYWNrKHVuc2lnbmVkIGludCB0eXBl
LCB1aW50NjRfdCBpZCwgdm9pZCogcmVmY29uKQoreworICAgIENWUGl4ZWxCdWZmZXJSZWxlYXNl
KHN0YXRpY19jYXN0PENWUGl4ZWxCdWZmZXJSZWY+KHJlZmNvbikpOworfQorCit2b2lkIFFUUGl4
ZWxCdWZmZXI6OmRhdGFQcm92aWRlclJlbGVhc2VCeXRlUG9pbnRlckNhbGxiYWNrKHZvaWQqIHJl
ZmNvbiwgY29uc3Qgdm9pZCogcG9pbnRlcikKK3sKKyAgICBDVlBpeGVsQnVmZmVyVW5sb2NrQmFz
ZUFkZHJlc3Moc3RhdGljX2Nhc3Q8Q1ZQaXhlbEJ1ZmZlclJlZj4ocmVmY29uKSwgMCk7Cit9CisK
K2NvbnN0IHZvaWQqIFFUUGl4ZWxCdWZmZXI6OmRhdGFQcm92aWRlckdldEJ5dGVQb2ludGVyQ2Fs
bGJhY2sodm9pZCogcmVmY29uKQoreworICAgIENWUGl4ZWxCdWZmZXJMb2NrQmFzZUFkZHJlc3Mo
c3RhdGljX2Nhc3Q8Q1ZQaXhlbEJ1ZmZlclJlZj4ocmVmY29uKSwgMCk7CisgICAgcmV0dXJuIENW
UGl4ZWxCdWZmZXJHZXRCYXNlQWRkcmVzcyhzdGF0aWNfY2FzdDxDVlBpeGVsQnVmZmVyUmVmPihy
ZWZjb24pKTsKK30KKworc2l6ZV90IFFUUGl4ZWxCdWZmZXI6OmRhdGFQcm92aWRlckdldEJ5dGVz
QXRQb3NpdGlvbkNhbGxiYWNrKHZvaWQqIHJlZmNvbiwgdm9pZCogYnVmZmVyLCBzaXplX3QgcG9z
aXRpb24sIHNpemVfdCBjb3VudCkKK3sKKyAgICBjaGFyKiBkYXRhID0gKGNoYXIqKUNWUGl4ZWxC
dWZmZXJHZXRCYXNlQWRkcmVzcyhzdGF0aWNfY2FzdDxDVlBpeGVsQnVmZmVyUmVmPihyZWZjb24p
KTsKKyAgICBzaXplX3Qgc2l6ZSA9IENWUGl4ZWxCdWZmZXJHZXREYXRhU2l6ZShzdGF0aWNfY2Fz
dDxDVlBpeGVsQnVmZmVyUmVmPihyZWZjb24pKTsKKyAgICBpZiAoc2l6ZSAtIHBvc2l0aW9uIDwg
Y291bnQpCisgICAgICAgIGNvdW50ID0gc2l6ZSAtIHBvc2l0aW9uOworCisgICAgbWVtY3B5KGJ1
ZmZlciwgZGF0YStwb3NpdGlvbiwgY291bnQpOworICAgIHJldHVybiBjb3VudDsKK30KKwordm9p
ZCBRVFBpeGVsQnVmZmVyOjpkYXRhUHJvdmlkZXJSZWxlYXNlSW5mb0NhbGxiYWNrKHZvaWQqIHJl
ZmNvbikKK3sKKyAgICBDVlBpeGVsQnVmZmVyUmVsZWFzZShzdGF0aWNfY2FzdDxDVlBpeGVsQnVm
ZmVyUmVmPihyZWZjb24pKTsKK30KSW5kZXg6IFFUUGl4ZWxCdWZmZXIuaA0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0K
LS0tIFFUUGl4ZWxCdWZmZXIuaAkocmV2aXNpb24gMCkNCisrKyBRVFBpeGVsQnVmZmVyLmgJKHJl
dmlzaW9uIDApDQpAQCAtMCwwICsxLDk1IEBADQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywg
MjAwOCwgMjAwOSwgMjAxMCBBcHBsZSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBRVFBpeGVsQnVmZmVyX2gKKyNkZWZpbmUgUVRQaXhlbEJ1ZmZlcl9oCisKKyNp
ZmRlZiBRVE1PVklFV0lOX0VYUE9SVFMKKyNkZWZpbmUgUVRNT1ZJRVdJTl9BUEkgX19kZWNsc3Bl
YyhkbGxleHBvcnQpCisjZWxzZQorI2RlZmluZSBRVE1PVklFV0lOX0FQSSBfX2RlY2xzcGVjKGRs
bGltcG9ydCkKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KKwordHlwZWRlZiBzdHJ1Y3QgX19DVkJ1ZmZlciAqQ1ZCdWZmZXJSZWY7Cit0
eXBlZGVmIENWQnVmZmVyUmVmIENWUGl4ZWxCdWZmZXJSZWY7Cit0eXBlZGVmIHN0cnVjdCBDR0lt
YWdlKiBDR0ltYWdlUmVmOwordHlwZWRlZiBpbnQzMl90IENWUmV0dXJuOwordHlwZWRlZiBjb25z
dCBzdHJ1Y3QgX19DRkRpY3Rpb25hcnkgKiBDRkRpY3Rpb25hcnlSZWY7CisKKy8vIFFUUGl4ZWxC
dWZmZXIgd3JhcHMgUXVpY2tUaW1lJ3MgaW1wbGVtZW50YXRpb24gb2YgQ1ZQaXhlbEJ1ZmZlciwg
c28gaXRzIGZ1bmN0aW9ucyBhcmUKKy8vIHNhZmUgdG8gY2FsbCB3aXRoaW4gV2ViS2l0LgorY2xh
c3MgUVRNT1ZJRVdJTl9BUEkgUVRQaXhlbEJ1ZmZlciA6IFJlZkNvdW50ZWQ8UVRQaXhlbEJ1ZmZl
cj4geworcHVibGljOgorICAgIFFUUGl4ZWxCdWZmZXIoKTsKKyAgICBRVFBpeGVsQnVmZmVyKGNv
bnN0IFFUUGl4ZWxCdWZmZXImKTsKKyAgICBRVFBpeGVsQnVmZmVyKENWUGl4ZWxCdWZmZXJSZWYp
OworICAgIFFUUGl4ZWxCdWZmZXImIG9wZXJhdG9yPShjb25zdCBRVFBpeGVsQnVmZmVyJik7Cisg
ICAgflFUUGl4ZWxCdWZmZXIoKTsKKworICAgIHZvaWQgc2V0KENWUGl4ZWxCdWZmZXJSZWYpOwor
ICAgIENWUGl4ZWxCdWZmZXJSZWYgZ2V0KCk7CisgICAgdm9pZCBjbGVhcigpOworCisgICAgQ1ZS
ZXR1cm4gbG9ja0Jhc2VBZGRyZXNzKCk7CisgICAgQ1ZSZXR1cm4gdW5sb2NrQmFzZUFkZHJlc3Mo
KTsKKyAgICBzaXplX3Qgd2lkdGgoKTsKKyAgICBzaXplX3QgaGVpZ2h0KCk7CisKKyAgICB1bnNp
Z25lZCBsb25nIHBpeGVsRm9ybWF0VHlwZSgpOworICAgIHZvaWQqIGJhc2VBZGRyZXNzKCk7Cisg
ICAgc2l6ZV90IGJ5dGVzUGVyUm93KCk7CisgICAgc2l6ZV90IGRhdGFTaXplKCk7CisKKyAgICBi
b29sIGlzUGxhbmFyKCk7CisgICAgc2l6ZV90IHBsYW5lQ291bnQoKTsKKyAgICBzaXplX3Qgd2lk
dGhPZlBsYW5lKHNpemVfdCk7CisgICAgc2l6ZV90IGhlaWdodE9mUGxhbmUoc2l6ZV90KTsKKyAg
ICB2b2lkKiBiYXNlQWRkcmVzc09mUGxhbmUoc2l6ZV90KTsKKyAgICBzaXplX3QgYnl0ZXNQZXJS
b3dPZlBsYW5lKHNpemVfdCk7CisKKyAgICB2b2lkIGdldEV4dGVuZGVkUGl4ZWxzKHNpemVfdCog
bGVmdCwgc2l6ZV90KiByaWdodCwgc2l6ZV90KiB0b3AsIHNpemVfdCogYm90dG9tKTsKKyAgICBD
RkRpY3Rpb25hcnlSZWYgYXR0YWNobWVudHMoKTsKKworICAgIC8vIEdlbmVyaWMgQ0ZSZXRhaW4v
Q0ZSZWxlYXNlIGNhbGxiYWNrcworICAgIHN0YXRpYyB2b2lkIHJlbGVhc2VDYWxsYmFjayh2b2lk
KiByZWZjb24pOworICAgIHN0YXRpYyB2b2lkIHJldGFpbkNhbGxiYWNrKHZvaWQqIHJlZmNvbik7
CisKKyAgICAvLyBDQUltYWdlUXVldWUgY2FsbGJhY2tzCisgICAgc3RhdGljIHZvaWQgaW1hZ2VR
dWV1ZVJlbGVhc2VDYWxsYmFjayh1bnNpZ25lZCBpbnQgdHlwZSwgdWludDY0X3QgaWQsIHZvaWQq
IHJlZmNvbik7CisKKyAgICAvLyBDR0RhdGFQcm92aWRlciBjYWxsYmFja3MKKyAgICBzdGF0aWMg
dm9pZCBkYXRhUHJvdmlkZXJSZWxlYXNlQnl0ZVBvaW50ZXJDYWxsYmFjayh2b2lkKiByZWZjb24s
IGNvbnN0IHZvaWQqIHBvaW50ZXIpOworICAgIHN0YXRpYyBjb25zdCB2b2lkKiBkYXRhUHJvdmlk
ZXJHZXRCeXRlUG9pbnRlckNhbGxiYWNrKHZvaWQqIHJlZmNvbik7CisgICAgc3RhdGljIHNpemVf
dCBkYXRhUHJvdmlkZXJHZXRCeXRlc0F0UG9zaXRpb25DYWxsYmFjayh2b2lkKiByZWZjb24sIHZv
aWQqIGJ1ZmZlciwgc2l6ZV90IHBvc2l0aW9uLCBzaXplX3QgY291bnQpOworICAgIHN0YXRpYyB2
b2lkIGRhdGFQcm92aWRlclJlbGVhc2VJbmZvQ2FsbGJhY2sodm9pZCogcmVmY29uKTsKKworcHJp
dmF0ZToKKyAgICBDVlBpeGVsQnVmZmVyUmVmIG1fcGl4ZWxCdWZmZXI7Cit9OworCisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54501</attachid>
            <date>2010-04-27 19:08:32 -0700</date>
            <delta_ts>2010-04-27 20:48:33 -0700</delta_ts>
            <desc>Changes to MediaPlayerPrivateQuickTimeWin</desc>
            <filename>7569713-MediaPlayerPrivateQuickTimeWin.patch</filename>
            <type>text/plain</type>
            <size>8025</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">SW5kZXg6IE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVdpbi5jcHANCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0t
LSBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVXaW4uY3BwCShyZXZpc2lvbiA1ODE4NykNCisr
KyBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVXaW4uY3BwCSh3b3JraW5nIGNvcHkpDQpAQCAt
MzQsNyArMzQsOCBAQA0KICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKICNpbmNsdWRlICJLVVJMLmgiCi0jaW5jbHVkZSAiUVRNb3ZpZVdpbi5oIgor
I2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZVRhc2tUaW1lci5oIgorI2luY2x1ZGUgIlFUTW92
aWVUYXNrLmgiCiAjaW5jbHVkZSAiU2Nyb2xsVmlldy5oIgogI2luY2x1ZGUgIlNvZnRMaW5raW5n
LmgiCiAjaW5jbHVkZSAiU3RyaW5nQnVpbGRlci5oIgpAQCAtNTMsMTAgKzU0LDggQEANCiAjZW5k
aWYKIAogI2lmIERSQVdfRlJBTUVfUkFURQotI2luY2x1ZGUgIkZvbnQuaCIKLSNpbmNsdWRlICJG
cmFtZVZpZXcuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCisj
aW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUgIlJl
bmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiV2luZG93cy5oIgpAQCAtMTA0LDYgKzEwMyw3IEBADQog
TWVkaWFQbGF5ZXJQcml2YXRlOjp+TWVkaWFQbGF5ZXJQcml2YXRlKCkKIHsKICAgICB0ZWFyRG93
blZpZGVvUmVuZGVyaW5nKCk7CisgICAgbV9xdE1vdmllV2luLT5zZXRNb3ZpZSgwKTsKIH0KIAog
Ym9vbCBNZWRpYVBsYXllclByaXZhdGU6OnN1cHBvcnRzRnVsbHNjcmVlbigpIGNvbnN0CkBAIC0x
MjUsNTAgKzEyNSw2IEBADQogfQogI2VuZGlmCiAKLWNsYXNzIFRhc2tUaW1lciA6IFRpbWVyQmFz
ZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZSgpOwotICAgIAotcHJpdmF0
ZToKLSAgICBzdGF0aWMgdm9pZCBzZXRUYXNrVGltZXJEZWxheShkb3VibGUpOwotICAgIHN0YXRp
YyB2b2lkIHN0b3BUYXNrVGltZXIoKTsKLQotICAgIHZvaWQgZmlyZWQoKTsKLQotICAgIHN0YXRp
YyBUYXNrVGltZXIqIHNfdGltZXI7Ci19OwotCi1UYXNrVGltZXIqIFRhc2tUaW1lcjo6c190aW1l
ciA9IDA7Ci0KLXZvaWQgVGFza1RpbWVyOjppbml0aWFsaXplKCkKLXsKLSAgICBpZiAoc190aW1l
cikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc190aW1lciA9IG5ldyBUYXNrVGltZXI7Ci0KLSAg
ICBRVE1vdmllV2luOjpzZXRUYXNrVGltZXJGdW5jcyhzZXRUYXNrVGltZXJEZWxheSwgc3RvcFRh
c2tUaW1lcik7Ci19Ci0KLXZvaWQgVGFza1RpbWVyOjpzZXRUYXNrVGltZXJEZWxheShkb3VibGUg
ZGVsYXlJblNlY29uZHMpCi17Ci0gICAgQVNTRVJUKHNfdGltZXIpOwotCi0gICAgc190aW1lci0+
c3RhcnRPbmVTaG90KGRlbGF5SW5TZWNvbmRzKTsKLX0KLQotdm9pZCBUYXNrVGltZXI6OnN0b3BU
YXNrVGltZXIoKQotewotICAgIEFTU0VSVChzX3RpbWVyKTsKLQotICAgIHNfdGltZXItPnN0b3Ao
KTsKLX0KLQotdm9pZCBUYXNrVGltZXI6OmZpcmVkKCkKLXsKLSAgICBRVE1vdmllV2luOjp0YXNr
VGltZXJGaXJlZCgpOwotfQotCiBTdHJpbmcgTWVkaWFQbGF5ZXJQcml2YXRlOjpyZmMyNjE2RGF0
ZVN0cmluZ0Zyb21UaW1lKENGQWJzb2x1dGVUaW1lIHRpbWUpCiB7CiAgICAgc3RhdGljIGNvbnN0
IGNoYXIqIGNvbnN0IGRheVN0cmluZ3NbXSA9IHsgIk1vbiIsICJUdWUiLCAiV2VkIiwgIlRodSIs
ICJGcmkiLCAiU2F0IiwgIlN1biIgfTsKQEAgLTI2Miw3ICsyMTgsNyBAQA0KIAogdm9pZCBNZWRp
YVBsYXllclByaXZhdGU6OmxvYWQoY29uc3QgU3RyaW5nJiB1cmwpCiB7Ci0gICAgaWYgKCFRVE1v
dmllV2luOjppbml0aWFsaXplUXVpY2tUaW1lKCkpIHsKKyAgICBpZiAoIVFUTW92aWU6OmluaXRp
YWxpemVRdWlja1RpbWUoKSkgewogICAgICAgICAvLyBGSVhNRTogaXMgdGhpcyB0aGUgcmlnaHQg
ZXJyb3IgdG8gcmV0dXJuPwogICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpE
ZWNvZGVFcnJvcjsgCiAgICAgICAgIG1fcGxheWVyLT5uZXR3b3JrU3RhdGVDaGFuZ2VkKCk7CkBA
IC0yNzAsNyArMjI2LDcgQEANCiAgICAgfQogCiAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgdGFzayB0
aW1lci4KLSAgICBUYXNrVGltZXI6OmluaXRpYWxpemUoKTsKKyAgICBNZWRpYVBsYXllclByaXZh
dGVUYXNrVGltZXI6OmluaXRpYWxpemUoKTsKIAogICAgIGlmIChtX25ldHdvcmtTdGF0ZSAhPSBN
ZWRpYVBsYXllcjo6TG9hZGluZykgewogICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxh
eWVyOjpMb2FkaW5nOwpAQCAtMjg0LDEwICsyNDAsMTMgQEANCiAKICAgICBzZXRVcENvb2tpZXNG
b3JRdWlja1RpbWUodXJsKTsKIAotICAgIG1fcXRNb3ZpZS5zZXQobmV3IFFUTW92aWVXaW4odGhp
cykpOworICAgIG1fcXRNb3ZpZSA9IGFkb3B0UmVmKG5ldyBRVE1vdmllKHRoaXMpKTsKICAgICBt
X3F0TW92aWUtPmxvYWQodXJsLmNoYXJhY3RlcnMoKSwgdXJsLmxlbmd0aCgpLCBtX3BsYXllci0+
cHJlc2VydmVzUGl0Y2goKSk7CiAgICAgbV9xdE1vdmllLT5zZXRWb2x1bWUobV9wbGF5ZXItPnZv
bHVtZSgpKTsKLSAgICBtX3F0TW92aWUtPnNldFZpc2libGUobV9wbGF5ZXItPnZpc2libGUoKSk7
CisKKyAgICBtX3F0TW92aWVXaW4gPSBhZG9wdFJlZihuZXcgUVRNb3ZpZVdpbih0aGlzKSk7Cisg
ICAgbV9xdE1vdmllV2luLT5zZXRNb3ZpZShtX3F0TW92aWUuZ2V0KCkpOworICAgIG1fcXRNb3Zp
ZVdpbi0+c2V0VmlzaWJsZShtX3BsYXllci0+dmlzaWJsZSgpKTsKIH0KIAogdm9pZCBNZWRpYVBs
YXllclByaXZhdGU6OnBsYXkoKQpAQCAtMzg4LDcgKzM0Nyw3IEBADQogewogICAgIGlmICghbV9x
dE1vdmllKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gbV9xdE1vdmllLT5yYXRl
KCkgPT0gMC4wZjsKKyAgICByZXR1cm4gKCFtX3F0TW92aWUtPnJhdGUoKSk7CiB9CiAKIGJvb2wg
TWVkaWFQbGF5ZXJQcml2YXRlOjpzZWVraW5nKCkgY29uc3QKQEAgLTYxMiw3ICs1NzEsNyBAQA0K
ICAgICBpZiAobV9oYXNVbnN1cHBvcnRlZFRyYWNrcyB8fCAhbV9xdE1vdmllIHx8IG1fc2l6ZSA9
PSBzaXplKQogICAgICAgICByZXR1cm47CiAgICAgbV9zaXplID0gc2l6ZTsKLSAgICBtX3F0TW92
aWUtPnNldFNpemUoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKKyAgICBtX3F0TW92aWVX
aW4tPnNldFNpemUoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKIH0KIAogdm9pZCBNZWRp
YVBsYXllclByaXZhdGU6OnNldFZpc2libGUoYm9vbCB2aXNpYmxlKQpAQCAtNjIwLDcgKzU3OSw3
IEBADQogICAgIGlmIChtX2hhc1Vuc3VwcG9ydGVkVHJhY2tzIHx8ICFtX3F0TW92aWUgfHwgbV92
aXNpYmxlID09IHZpc2libGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcXRNb3ZpZS0+c2V0
VmlzaWJsZSh2aXNpYmxlKTsKKyAgICBtX3F0TW92aWVXaW4tPnNldFZpc2libGUodmlzaWJsZSk7
CiAgICAgbV92aXNpYmxlID0gdmlzaWJsZTsKICAgICBpZiAobV92aXNpYmxlKSB7CiAgICAgICAg
IGlmIChpc1JlYWR5Rm9yUmVuZGVyaW5nKCkpCkBAIC02NTksNyArNjE4LDcgQEANCiAgICAgICAg
IFNldFdvcmxkVHJhbnNmb3JtKGhkYywgJnhmb3JtKTsKICAgICB9CiAKLSAgICBtX3F0TW92aWUt
PnBhaW50KGhkYywgci54KCksIHIueSgpKTsKKyAgICBtX3F0TW92aWVXaW4tPnBhaW50KGhkYywg
ci54KCksIHIueSgpKTsKICAgICBpZiAodXNpbmdUZW1wQml0bWFwKQogICAgICAgICBwLT5kcmF3
V2luZG93c0JpdG1hcChiaXRtYXAuZ2V0KCksIHIudG9wTGVmdCgpKTsKICAgICBlbHNlCkBAIC03
MTksMTEgKzY3OCwxMSBAQA0KICAgICBzdGF0aWMgYm9vbCB0eXBlTGlzdEluaXRpYWxpemVkID0g
ZmFsc2U7CiAKICAgICBpZiAoIXR5cGVMaXN0SW5pdGlhbGl6ZWQpIHsKLSAgICAgICAgdW5zaWdu
ZWQgY291bnQgPSBRVE1vdmllV2luOjpjb3VudFN1cHBvcnRlZFR5cGVzKCk7CisgICAgICAgIHVu
c2lnbmVkIGNvdW50ID0gUVRNb3ZpZTo6Y291bnRTdXBwb3J0ZWRUeXBlcygpOwogICAgICAgICBm
b3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgY291bnQ7IG4rKykgewogICAgICAgICAgICAgY29uc3Qg
VUNoYXIqIGNoYXJhY3RlcjsKICAgICAgICAgICAgIHVuc2lnbmVkIGxlbjsKLSAgICAgICAgICAg
IFFUTW92aWVXaW46OmdldFN1cHBvcnRlZFR5cGUobiwgY2hhcmFjdGVyLCBsZW4pOworICAgICAg
ICAgICAgUVRNb3ZpZTo6Z2V0U3VwcG9ydGVkVHlwZShuLCBjaGFyYWN0ZXIsIGxlbik7CiAgICAg
ICAgICAgICBpZiAobGVuKQogICAgICAgICAgICAgICAgIHR5cGVDYWNoZS5hZGQoU3RyaW5nKGNo
YXJhY3RlciwgbGVuKSk7CiAgICAgICAgIH0KQEAgLTc0MSw3ICs3MDAsNyBAQA0KIAogYm9vbCBN
ZWRpYVBsYXllclByaXZhdGU6OmlzQXZhaWxhYmxlKCkKIHsKLSAgICByZXR1cm4gUVRNb3ZpZVdp
bjo6aW5pdGlhbGl6ZVF1aWNrVGltZSgpOworICAgIHJldHVybiBRVE1vdmllOjppbml0aWFsaXpl
UXVpY2tUaW1lKCk7CiB9CiAKIE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgTWVkaWFQbGF5ZXJQ
cml2YXRlOjpzdXBwb3J0c1R5cGUoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGNv
ZGVjcykKQEAgLTc1MSw3ICs3MTAsNyBAQA0KICAgICByZXR1cm4gbWltZVR5cGVDYWNoZSgpLmNv
bnRhaW5zKHR5cGUpID8gKGNvZGVjcy5pc0VtcHR5KCkgPyBNZWRpYVBsYXllcjo6TWF5QmVTdXBw
b3J0ZWQgOiBNZWRpYVBsYXllcjo6SXNTdXBwb3J0ZWQpIDogTWVkaWFQbGF5ZXI6OklzTm90U3Vw
cG9ydGVkOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6bW92aWVFbmRlZChRVE1vdmll
V2luKiBtb3ZpZSkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjptb3ZpZUVuZGVkKFFUTW92aWUq
IG1vdmllKQogewogICAgIGlmIChtX2hhc1Vuc3VwcG9ydGVkVHJhY2tzKQogICAgICAgICByZXR1
cm47CkBAIC03NjAsNyArNzE5LDcgQEANCiAgICAgZGlkRW5kKCk7CiB9CiAKLXZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlOjptb3ZpZUxvYWRTdGF0ZUNoYW5nZWQoUVRNb3ZpZVdpbiogbW92aWUpCit2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6bW92aWVMb2FkU3RhdGVDaGFuZ2VkKFFUTW92aWUqIG1v
dmllKQogewogICAgIGlmIChtX2hhc1Vuc3VwcG9ydGVkVHJhY2tzKQogICAgICAgICByZXR1cm47
CkBAIC03NjksNyArNzI4LDcgQEANCiAgICAgdXBkYXRlU3RhdGVzKCk7CiB9CiAKLXZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlOjptb3ZpZVRpbWVDaGFuZ2VkKFFUTW92aWVXaW4qIG1vdmllKQordm9p
ZCBNZWRpYVBsYXllclByaXZhdGU6Om1vdmllVGltZUNoYW5nZWQoUVRNb3ZpZSogbW92aWUpCiB7
CiAgICAgaWYgKG1faGFzVW5zdXBwb3J0ZWRUcmFja3MpCiAgICAgICAgIHJldHVybjsKQEAgLTc4
NCw3ICs3NDMsNyBAQA0KICAgICBpZiAobV9oYXNVbnN1cHBvcnRlZFRyYWNrcykKICAgICAgICAg
cmV0dXJuOwogCi0gICAgQVNTRVJUKG1fcXRNb3ZpZS5nZXQoKSA9PSBtb3ZpZSk7CisgICAgQVNT
RVJUKG1fcXRNb3ZpZVdpbi5nZXQoKSA9PSBtb3ZpZSk7CiAjaWYgRFJBV19GUkFNRV9SQVRFCiAg
ICAgaWYgKG1fc3RhcnRlZFBsYXlpbmcpIHsKICAgICAgICAgbV9mcmFtZUNvdW50V2hpbGVQbGF5
aW5nKys7CkBAIC05MDAsOSArODU5LDkgQEANCiAgICAgdW5zaWduZWQgd2lkdGg7CiAgICAgdW5z
aWduZWQgaGVpZ2h0OwogCi0gICAgbV9xdE1vdmllLT5nZXRDdXJyZW50RnJhbWVJbmZvKGJ1ZmZl
ciwgYml0c1BlclBpeGVsLCByb3dCeXRlcywgd2lkdGgsIGhlaWdodCk7CisgICAgbV9xdE1vdmll
V2luLT5nZXRDdXJyZW50RnJhbWVJbmZvKGJ1ZmZlciwgYml0c1BlclBpeGVsLCByb3dCeXRlcywg
d2lkdGgsIGhlaWdodCk7CiAgICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVybiA7CisgICAg
ICAgIHJldHVybjsKIAogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGRhdGEoQWRvcHRDRiwgQ0ZE
YXRhQ3JlYXRlV2l0aEJ5dGVzTm9Db3B5KDAsIHN0YXRpY19jYXN0PFVJbnQ4Kj4oYnVmZmVyKSwg
cm93Qnl0ZXMgKiBoZWlnaHQsIGtDRkFsbG9jYXRvck51bGwpKTsKICAgICBSZXRhaW5QdHI8Q0dE
YXRhUHJvdmlkZXJSZWY+IHByb3ZpZGVyKEFkb3B0Q0YsIENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0
aENGRGF0YShkYXRhLmdldCgpKSk7CkluZGV4OiBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVX
aW4uaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQ0KLS0tIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVdpbi5oCShy
ZXZpc2lvbiA1ODE4NykNCisrKyBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVXaW4uaAkod29y
a2luZyBjb3B5KQ0KQEAgLTIzLDEzICsyMywxNCBAQA0KICAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAK
LSNpZm5kZWYgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXRfaAotI2RlZmluZSBNZWRpYVBsYXllclBy
aXZhdGVRVEtpdF9oCisjaWZuZGVmIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVdpbl9oCisj
ZGVmaW5lIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVdpbl9oCiAKICNpZiBFTkFCTEUoVklE
RU8pCiAKICNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGUuaCIKICNpbmNsdWRlICJUaW1lci5o
IgorI2luY2x1ZGUgPFFUTW92aWUuaD4KICNpbmNsdWRlIDxRVE1vdmllV2luLmg+CiAjaW5jbHVk
ZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KQEAgLTUxLDcgKzUy
LDcgQEANCiBjbGFzcyBJbnRSZWN0OwogY2xhc3MgU3RyaW5nOwogCi1jbGFzcyBNZWRpYVBsYXll
clByaXZhdGUgOiBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlLCBwdWJsaWMgUVRN
b3ZpZVdpbkNsaWVudCAKK2NsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZSA6IHB1YmxpYyBNZWRpYVBs
YXllclByaXZhdGVJbnRlcmZhY2UsIHB1YmxpYyBRVE1vdmllQ2xpZW50LCBwdWJsaWMgUVRNb3Zp
ZVdpbkNsaWVudCAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgICAgICwg
cHVibGljIEdyYXBoaWNzTGF5ZXJDbGllbnQKICNlbmRpZiAKQEAgLTEzMCw5ICsxMzEsOSBAQA0K
ICAgICBmbG9hdCBtYXhUaW1lTG9hZGVkKCkgY29uc3Q7CiAgICAgdm9pZCBzYXdVbnN1cHBvcnRl
ZFRyYWNrcygpOwogCi0gICAgdmlydHVhbCB2b2lkIG1vdmllRW5kZWQoUVRNb3ZpZVdpbiopOwot
ICAgIHZpcnR1YWwgdm9pZCBtb3ZpZUxvYWRTdGF0ZUNoYW5nZWQoUVRNb3ZpZVdpbiopOwotICAg
IHZpcnR1YWwgdm9pZCBtb3ZpZVRpbWVDaGFuZ2VkKFFUTW92aWVXaW4qKTsKKyAgICB2aXJ0dWFs
IHZvaWQgbW92aWVFbmRlZChRVE1vdmllKik7CisgICAgdmlydHVhbCB2b2lkIG1vdmllTG9hZFN0
YXRlQ2hhbmdlZChRVE1vdmllKik7CisgICAgdmlydHVhbCB2b2lkIG1vdmllVGltZUNoYW5nZWQo
UVRNb3ZpZSopOwogICAgIHZpcnR1YWwgdm9pZCBtb3ZpZU5ld0ltYWdlQXZhaWxhYmxlKFFUTW92
aWVXaW4qKTsKIAogICAgIC8vIGVuZ2luZSBzdXBwb3J0CkBAIC0xNjIsNyArMTYzLDggQEANCiAg
ICAgU3RyaW5nIHJmYzI2MTZEYXRlU3RyaW5nRnJvbVRpbWUoQ0ZBYnNvbHV0ZVRpbWUpOwogCiAg
ICAgTWVkaWFQbGF5ZXIqIG1fcGxheWVyOwotICAgIE93blB0cjxRVE1vdmllV2luPiBtX3F0TW92
aWU7CisgICAgUmVmUHRyPFFUTW92aWU+IG1fcXRNb3ZpZTsKKyAgICBSZWZQdHI8UVRNb3ZpZVdp
bj4gbV9xdE1vdmllV2luOwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICBP
d25QdHI8R3JhcGhpY3NMYXllcj4gbV9xdFZpZGVvTGF5ZXI7CiAjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54502</attachid>
            <date>2010-04-27 19:09:32 -0700</date>
            <delta_ts>2010-04-27 20:49:00 -0700</delta_ts>
            <desc>New class MediaPlayerPrivateQuickTimeVisualContext</desc>
            <filename>7569713-MediaPlayerPrivateQuickTimeVisualContext.patch</filename>
            <type>text/plain</type>
            <size>40629</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">SW5kZXg6IE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQuY3BwDQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09DQotLS0gTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dC5jcHAJ
KHJldmlzaW9uIDU3NjYzKQ0KKysrIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENv
bnRleHQuY3BwCSh3b3JraW5nIGNvcHkpDQpAQCAtMjYsNyArMjYsNyBAQA0KICNpbmNsdWRlICJj
b25maWcuaCIKIAogI2lmIEVOQUJMRShWSURFTykKLSNpbmNsdWRlICJNZWRpYVBsYXllclByaXZh
dGVRdWlja1RpbWVXaW4uaCIKKyNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVW
aXN1YWxDb250ZXh0LmgiCiAKICNpbmNsdWRlICJDb29raWUuaCIKICNpbmNsdWRlICJDb29raWVK
YXIuaCIKQEAgLTM0LDE2ICszNCwyNCBAQA0KICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJLVVJMLmgiCi0jaW5jbHVkZSAiUVRN
b3ZpZVdpbi5oIgorI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZVRhc2tUaW1lci5oIgorI2lu
Y2x1ZGUgIlFUQ0ZEaWN0aW9uYXJ5LmgiCisjaW5jbHVkZSAiUVRNb3ZpZS5oIgorI2luY2x1ZGUg
IlFUTW92aWVUYXNrLmgiCisjaW5jbHVkZSAiUVRNb3ZpZVZpc3VhbENvbnRleHQuaCIKICNpbmNs
dWRlICJTY3JvbGxWaWV3LmgiCiAjaW5jbHVkZSAiU29mdExpbmtpbmcuaCIKICNpbmNsdWRlICJT
dHJpbmdCdWlsZGVyLmgiCiAjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgogI2luY2x1ZGUgIlRpbWVS
YW5nZXMuaCIKICNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgPENvcmVWaWRlby9DVkJhc2Uu
aD4KKyNpbmNsdWRlIDxDb3JlVmlkZW8vQ1ZIb3N0VGltZS5oPgorI2luY2x1ZGUgPENvcmVWaWRl
by9DVlBpeGVsQnVmZmVyLmg+CiAjaW5jbHVkZSA8V2luaW5ldC5oPgogI2luY2x1ZGUgPHd0Zi9D
dXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL01h
aW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9T
dGRMaWJFeHRyYXMuaD4KIApAQCAtNTIsMzggKzYwLDY4IEBADQogI2luY2x1ZGUgIldLQ0FDRkxh
eWVyLmgiCiAjZW5kaWYKIAotI2lmIERSQVdfRlJBTUVfUkFURQotI2luY2x1ZGUgIkZvbnQuaCIK
LSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCi0jaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCi0jaW5jbHVkZSAiUmVuZGVyU3R5
bGUuaCIKLSNpbmNsdWRlICJXaW5kb3dzLmgiCi0jZW5kaWYKLQogdXNpbmcgbmFtZXNwYWNlIHN0
ZDsKIAorY29uc3QgQ0ZTdHJpbmdSZWYga01pblF1YXJ0ekNvcmVWZXJzaW9uID0gQ0ZTVFIoIjEu
MC40My4wIik7Citjb25zdCBDRlN0cmluZ1JlZiBrTWluQ29yZVZpZGVvVmVyc2lvbiA9IENGU1RS
KCIxLjAuMC4yIik7CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogU09GVF9MSU5LX0xJQlJBUlko
V2luaW5ldCkKIFNPRlRfTElOSyhXaW5pbmV0LCBJbnRlcm5ldFNldENvb2tpZUV4VywgRFdPUkQs
IFdJTkFQSSwgKExQQ1dTVFIgbHBzelVybCwgTFBDV1NUUiBscHN6Q29va2llTmFtZSwgTFBDV1NU
UiBscHN6Q29va2llRGF0YSwgRFdPUkQgZHdGbGFncywgRFdPUkRfUFRSIGR3UmVzZXJ2ZWQpLCAo
bHBzelVybCwgbHBzekNvb2tpZU5hbWUsIGxwc3pDb29raWVEYXRhLCBkd0ZsYWdzLCBkd1Jlc2Vy
dmVkKSkKIAotTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlKiBNZWRpYVBsYXllclByaXZhdGU6
OmNyZWF0ZShNZWRpYVBsYXllciogcGxheWVyKSAKKy8vIEludGVyZmFjZSBkZWNsYXJhdGlvbiBm
b3IgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dCdzIFFUTW92aWVDbGll
bnQgYWdncmVnYXRlCitjbGFzcyBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250
ZXh0OjpNb3ZpZUNsaWVudCA6IHB1YmxpYyBRVE1vdmllQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBN
b3ZpZUNsaWVudChNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0KiBwYXJl
bnQpIDogbV9wYXJlbnQocGFyZW50KSB7fQorICAgIHZpcnR1YWwgfk1vdmllQ2xpZW50KCkgeyBt
X3BhcmVudCA9IDA7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbW92aWVFbmRlZChRVE1vdmllKik7Cisg
ICAgdmlydHVhbCB2b2lkIG1vdmllTG9hZFN0YXRlQ2hhbmdlZChRVE1vdmllKik7CisgICAgdmly
dHVhbCB2b2lkIG1vdmllVGltZUNoYW5nZWQoUVRNb3ZpZSopOworcHJpdmF0ZToKKyAgICBNZWRp
YVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0KiBtX3BhcmVudDsKK307CisKKy8v
IEludGVyZmFjZSBkZWNsYXJhdGlvbiBmb3IgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlz
dWFsQ29udGV4dCdzIEdyYXBoaWNzTGF5ZXJDbGllbnQgYWdncmVnYXRlCitjbGFzcyBNZWRpYVBs
YXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpMYXllckNsaWVudCA6IHB1YmxpYyBH
cmFwaGljc0xheWVyQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBMYXllckNsaWVudChNZWRpYVBsYXll
clByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0KiBwYXJlbnQpIDogbV9wYXJlbnQocGFyZW50
KSB7fQorICAgIHZpcnR1YWwgfkxheWVyQ2xpZW50KCkgeyBtX3BhcmVudCA9IDA7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBHcmFwaGljc0xheWVyKiwgR3JhcGhpY3ND
b250ZXh0JiwgR3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IEludFJlY3QmIGluQ2xp
cCk7CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgR3JhcGhp
Y3NMYXllciosIGRvdWJsZSB0aW1lKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5U3luY1Jl
cXVpcmVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIqKSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2hvd0Rl
YnVnQm9yZGVycygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIHNo
b3dSZXBhaW50Q291bnRlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Citwcml2YXRlOgorICAg
IE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQqIG1fcGFyZW50OworfTsK
KworY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6VmlzdWFs
Q29udGV4dENsaWVudCA6IHB1YmxpYyBRVE1vdmllVmlzdWFsQ29udGV4dENsaWVudCB7CitwdWJs
aWM6CisgICAgVmlzdWFsQ29udGV4dENsaWVudChNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVW
aXN1YWxDb250ZXh0KiBwYXJlbnQpIDogbV9wYXJlbnQocGFyZW50KSB7fQorICAgIHZpcnR1YWwg
flZpc3VhbENvbnRleHRDbGllbnQoKSB7IG1fcGFyZW50ID0gMDsgfQorICAgIHZvaWQgaW1hZ2VB
dmFpbGFibGVGb3JUaW1lKGNvbnN0IFFUQ1ZUaW1lU3RhbXAqKTsKKyAgICBzdGF0aWMgdm9pZCBy
ZXRyaWV2ZUN1cnJlbnRJbWFnZVByb2Modm9pZCopOworcHJpdmF0ZToKKyAgICBNZWRpYVBsYXll
clByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0KiBtX3BhcmVudDsKK307CisKK01lZGlhUGxh
eWVyUHJpdmF0ZUludGVyZmFjZSogTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29u
dGV4dDo6Y3JlYXRlKE1lZGlhUGxheWVyKiBwbGF5ZXIpIAogeyAKLSAgICByZXR1cm4gbmV3IE1l
ZGlhUGxheWVyUHJpdmF0ZShwbGF5ZXIpOworICAgIHJldHVybiBuZXcgTWVkaWFQbGF5ZXJQcml2
YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dChwbGF5ZXIpOwogfQogCi12b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZTo6cmVnaXN0ZXJNZWRpYUVuZ2luZShNZWRpYUVuZ2luZVJlZ2lzdHJhciByZWdpc3Ry
YXIpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OnJlZ2lz
dGVyTWVkaWFFbmdpbmUoTWVkaWFFbmdpbmVSZWdpc3RyYXIgcmVnaXN0cmFyKQogewogICAgIGlm
IChpc0F2YWlsYWJsZSgpKQogICAgICAgICByZWdpc3RyYXIoY3JlYXRlLCBnZXRTdXBwb3J0ZWRU
eXBlcywgc3VwcG9ydHNUeXBlKTsKIH0KIAotTWVkaWFQbGF5ZXJQcml2YXRlOjpNZWRpYVBsYXll
clByaXZhdGUoTWVkaWFQbGF5ZXIqIHBsYXllcikKK01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGlt
ZVZpc3VhbENvbnRleHQ6Ok1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQo
TWVkaWFQbGF5ZXIqIHBsYXllcikKICAgICA6IG1fcGxheWVyKHBsYXllcikKICAgICAsIG1fc2Vl
a1RvKC0xKQotICAgICwgbV9zZWVrVGltZXIodGhpcywgJk1lZGlhUGxheWVyUHJpdmF0ZTo6c2Vl
a1RpbWVyRmlyZWQpCisgICAgLCBtX3NlZWtUaW1lcih0aGlzLCAmTWVkaWFQbGF5ZXJQcml2YXRl
UXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6c2Vla1RpbWVyRmlyZWQpCisgICAgLCBtX3Zpc3VhbENv
bnRleHRUaW1lcih0aGlzLCAmTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4
dDo6dmlzdWFsQ29udGV4dFRpbWVyRmlyZWQpCiAgICAgLCBtX25ldHdvcmtTdGF0ZShNZWRpYVBs
YXllcjo6RW1wdHkpCiAgICAgLCBtX3JlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5n
KQogICAgICwgbV9lbmFibGVkVHJhY2tDb3VudCgwKQpAQCAtOTMsODQgKzEzMSwzOSBAQA0KICAg
ICAsIG1faXNTdHJlYW1pbmcoZmFsc2UpCiAgICAgLCBtX3Zpc2libGUoZmFsc2UpCiAgICAgLCBt
X25ld0ZyYW1lQXZhaWxhYmxlKGZhbHNlKQotI2lmIERSQVdfRlJBTUVfUkFURQotICAgICwgbV9m
cmFtZUNvdW50V2hpbGVQbGF5aW5nKDApCi0gICAgLCBtX3RpbWVTdGFydGVkUGxheWluZygwKQot
ICAgICwgbV90aW1lU3RvcHBlZFBsYXlpbmcoMCkKLSNlbmRpZgorICAgICwgbV9tb3ZpZUNsaWVu
dChuZXcgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6TW92aWVDbGll
bnQodGhpcykpCisgICAgLCBtX2xheWVyQ2xpZW50KG5ldyBNZWRpYVBsYXllclByaXZhdGVRdWlj
a1RpbWVWaXN1YWxDb250ZXh0OjpMYXllckNsaWVudCh0aGlzKSkKKyAgICAsIG1fdmlzdWFsQ29u
dGV4dENsaWVudChuZXcgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6
VmlzdWFsQ29udGV4dENsaWVudCh0aGlzKSkKIHsKIH0KIAotTWVkaWFQbGF5ZXJQcml2YXRlOjp+
TWVkaWFQbGF5ZXJQcml2YXRlKCkKK01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENv
bnRleHQ6On5NZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0KCkKIHsKICAg
ICB0ZWFyRG93blZpZGVvUmVuZGVyaW5nKCk7CisgICAgY2FuY2VsQ2FsbE9uTWFpblRocmVhZCgm
VmlzdWFsQ29udGV4dENsaWVudDo6cmV0cmlldmVDdXJyZW50SW1hZ2VQcm9jLCB0aGlzKTsKIH0K
IAotYm9vbCBNZWRpYVBsYXllclByaXZhdGU6OnN1cHBvcnRzRnVsbHNjcmVlbigpIGNvbnN0Citi
b29sIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OnN1cHBvcnRzRnVs
bHNjcmVlbigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLVBsYXRmb3JtTWVkaWEg
TWVkaWFQbGF5ZXJQcml2YXRlOjpwbGF0Zm9ybU1lZGlhKCkgY29uc3QKK1BsYXRmb3JtTWVkaWEg
TWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6cGxhdGZvcm1NZWRpYSgp
IGNvbnN0CiB7CiAgICAgUGxhdGZvcm1NZWRpYSBwOwotICAgIHAucXRNb3ZpZSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8UVRNb3ZpZSo+KG1fcXRNb3ZpZS5nZXQoKSk7CisgICAgcC5xdE1vdmllID0gcmVp
bnRlcnByZXRfY2FzdDxRVE1vdmllKj4obV9tb3ZpZS5nZXQoKSk7CiAgICAgcmV0dXJuIHA7CiB9
CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi1QbGF0Zm9ybUxheWVyKiBNZWRp
YVBsYXllclByaXZhdGU6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAorUGxhdGZvcm1MYXllciogTWVk
aWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6cGxhdGZvcm1MYXllcigpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIG1fcXRWaWRlb0xheWVyID8gbV9xdFZpZGVvTGF5ZXItPnBsYXRm
b3JtTGF5ZXIoKSA6IDA7CiB9CiAjZW5kaWYKIAotY2xhc3MgVGFza1RpbWVyIDogVGltZXJCYXNl
IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplKCk7Ci0gICAgCi1wcml2YXRl
OgotICAgIHN0YXRpYyB2b2lkIHNldFRhc2tUaW1lckRlbGF5KGRvdWJsZSk7Ci0gICAgc3RhdGlj
IHZvaWQgc3RvcFRhc2tUaW1lcigpOwotCi0gICAgdm9pZCBmaXJlZCgpOwotCi0gICAgc3RhdGlj
IFRhc2tUaW1lciogc190aW1lcjsKLX07Ci0KLVRhc2tUaW1lciogVGFza1RpbWVyOjpzX3RpbWVy
ID0gMDsKLQotdm9pZCBUYXNrVGltZXI6OmluaXRpYWxpemUoKQorU3RyaW5nIE1lZGlhUGxheWVy
UHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OnJmYzI2MTZEYXRlU3RyaW5nRnJvbVRpbWUo
Q0ZBYnNvbHV0ZVRpbWUgdGltZSkKIHsKLSAgICBpZiAoc190aW1lcikKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgc190aW1lciA9IG5ldyBUYXNrVGltZXI7Ci0KLSAgICBRVE1vdmllV2luOjpzZXRU
YXNrVGltZXJGdW5jcyhzZXRUYXNrVGltZXJEZWxheSwgc3RvcFRhc2tUaW1lcik7Ci19Ci0KLXZv
aWQgVGFza1RpbWVyOjpzZXRUYXNrVGltZXJEZWxheShkb3VibGUgZGVsYXlJblNlY29uZHMpCi17
Ci0gICAgQVNTRVJUKHNfdGltZXIpOwotCi0gICAgc190aW1lci0+c3RhcnRPbmVTaG90KGRlbGF5
SW5TZWNvbmRzKTsKLX0KLQotdm9pZCBUYXNrVGltZXI6OnN0b3BUYXNrVGltZXIoKQotewotICAg
IEFTU0VSVChzX3RpbWVyKTsKLQotICAgIHNfdGltZXItPnN0b3AoKTsKLX0KLQotdm9pZCBUYXNr
VGltZXI6OmZpcmVkKCkKLXsKLSAgICBRVE1vdmllV2luOjp0YXNrVGltZXJGaXJlZCgpOwotfQot
Ci1TdHJpbmcgTWVkaWFQbGF5ZXJQcml2YXRlOjpyZmMyNjE2RGF0ZVN0cmluZ0Zyb21UaW1lKENG
QWJzb2x1dGVUaW1lIHRpbWUpCi17CiAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGRheVN0
cmluZ3NbXSA9IHsgIk1vbiIsICJUdWUiLCAiV2VkIiwgIlRodSIsICJGcmkiLCAiU2F0IiwgIlN1
biIgfTsKICAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgbW9udGhTdHJpbmdzW10gPSB7ICJK
YW4iLCAiRmViIiwgIk1hciIsICJBcHIiLCAiTWF5IiwgIkp1biIsICJKdWwiLCAiQXVnIiwgIlNl
cCIsICJPY3QiLCAiTm92IiwgIkRlYyIgfTsKICAgICBzdGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYg
ZGF0ZUZvcm1hdFN0cmluZyA9IENGU1RSKCIlcywgJTAyZCAlcyAlMDRkICUwMmQ6JTAyZDolMDJk
IEdNVCIpOwpAQCAtMjA3LDggKzIwMCw3IEBADQogICAgIH0KIH0KIAotCi12b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZTo6c2V0VXBDb29raWVzRm9yUXVpY2tUaW1lKGNvbnN0IFN0cmluZyYgdXJsKQor
dm9pZCBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpzZXRVcENvb2tp
ZXNGb3JRdWlja1RpbWUoY29uc3QgU3RyaW5nJiB1cmwpCiB7CiAgICAgLy8gV2ViQ29yZSBsb2Fk
ZWQgdGhlIHBhZ2Ugd2l0aCB0aGUgbW92aWUgVVJMIHdpdGggQ0ZOZXR3b3JrIGJ1dCBRdWlja1Rp
bWUgd2lsbCAKICAgICAvLyB1c2UgV2luSU5ldCB0byBkb3dubG9hZCB0aGUgbW92aWUsIHNvIHdl
IG5lZWQgdG8gY29weSBhbnkgY29va2llcyBuZWVkZWQgdG8KQEAgLTI2MCw5ICsyNTIsOSBAQA0K
ICAgICB9CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpsb2FkKGNvbnN0IFN0cmluZyYg
dXJsKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0Ojpsb2Fk
KGNvbnN0IFN0cmluZyYgdXJsKQogewotICAgIGlmICghUVRNb3ZpZVdpbjo6aW5pdGlhbGl6ZVF1
aWNrVGltZSgpKSB7CisgICAgaWYgKCFRVE1vdmllOjppbml0aWFsaXplUXVpY2tUaW1lKCkpIHsK
ICAgICAgICAgLy8gRklYTUU6IGlzIHRoaXMgdGhlIHJpZ2h0IGVycm9yIHRvIHJldHVybj8KICAg
ICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6RGVjb2RlRXJyb3I7IAogICAgICAg
ICBtX3BsYXllci0+bmV0d29ya1N0YXRlQ2hhbmdlZCgpOwpAQCAtMjcwLDcgKzI2Miw3IEBADQog
ICAgIH0KIAogICAgIC8vIEluaXRpYWxpemUgdGhlIHRhc2sgdGltZXIuCi0gICAgVGFza1RpbWVy
Ojppbml0aWFsaXplKCk7CisgICAgTWVkaWFQbGF5ZXJQcml2YXRlVGFza1RpbWVyOjppbml0aWFs
aXplKCk7CiAKICAgICBpZiAobV9uZXR3b3JrU3RhdGUgIT0gTWVkaWFQbGF5ZXI6OkxvYWRpbmcp
IHsKICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TG9hZGluZzsKQEAgLTI4
NCw1NCArMjc2LDUzIEBADQogCiAgICAgc2V0VXBDb29raWVzRm9yUXVpY2tUaW1lKHVybCk7CiAK
LSAgICBtX3F0TW92aWUuc2V0KG5ldyBRVE1vdmllV2luKHRoaXMpKTsKLSAgICBtX3F0TW92aWUt
PmxvYWQodXJsLmNoYXJhY3RlcnMoKSwgdXJsLmxlbmd0aCgpLCBtX3BsYXllci0+cHJlc2VydmVz
UGl0Y2goKSk7Ci0gICAgbV9xdE1vdmllLT5zZXRWb2x1bWUobV9wbGF5ZXItPnZvbHVtZSgpKTsK
LSAgICBtX3F0TW92aWUtPnNldFZpc2libGUobV9wbGF5ZXItPnZpc2libGUoKSk7CisgICAgbV9t
b3ZpZSA9IGFkb3B0UmVmKG5ldyBRVE1vdmllKG1fbW92aWVDbGllbnQuZ2V0KCkpKTsKKyAgICBt
X21vdmllLT5sb2FkKHVybC5jaGFyYWN0ZXJzKCksIHVybC5sZW5ndGgoKSwgbV9wbGF5ZXItPnBy
ZXNlcnZlc1BpdGNoKCkpOworICAgIG1fbW92aWUtPnNldFZvbHVtZShtX3BsYXllci0+dm9sdW1l
KCkpOworCisgICAgQ0ZEaWN0aW9uYXJ5UmVmIG9wdGlvbnMgPSBRVE1vdmllVmlzdWFsQ29udGV4
dDo6Z2V0Q0dJbWFnZU9wdGlvbnMoKTsKKyAgICBtX3Zpc3VhbENvbnRleHQgPSBhZG9wdFJlZihu
ZXcgUVRNb3ZpZVZpc3VhbENvbnRleHQobV92aXN1YWxDb250ZXh0Q2xpZW50LmdldCgpLCBvcHRp
b25zKSk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpwbGF5KCkKK3ZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6cGxheSgpCiB7Ci0gICAgaWYgKCFt
X3F0TW92aWUpCisgICAgaWYgKCFtX21vdmllKQogICAgICAgICByZXR1cm47CiAgICAgbV9zdGFy
dGVkUGxheWluZyA9IHRydWU7Ci0jaWYgRFJBV19GUkFNRV9SQVRFCi0gICAgbV9mcmFtZUNvdW50
V2hpbGVQbGF5aW5nID0gMDsKLSNlbmRpZgogCi0gICAgbV9xdE1vdmllLT5wbGF5KCk7CisgICAg
bV9tb3ZpZS0+cGxheSgpOworICAgIG1fdmlzdWFsQ29udGV4dFRpbWVyLnN0YXJ0UmVwZWF0aW5n
KDEuMCAvIDMwKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnBhdXNlKCkKK3ZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6cGF1c2UoKQogewotICAg
IGlmICghbV9xdE1vdmllKQorICAgIGlmICghbV9tb3ZpZSkKICAgICAgICAgcmV0dXJuOwogICAg
IG1fc3RhcnRlZFBsYXlpbmcgPSBmYWxzZTsKLSNpZiBEUkFXX0ZSQU1FX1JBVEUKLSAgICBtX3Rp
bWVTdG9wcGVkUGxheWluZyA9IFdURjo6Y3VycmVudFRpbWUoKTsKLSNlbmRpZgotICAgIG1fcXRN
b3ZpZS0+cGF1c2UoKTsKKworICAgIG1fbW92aWUtPnBhdXNlKCk7CisgICAgbV92aXN1YWxDb250
ZXh0VGltZXIuc3RvcCgpOwogfQogCi1mbG9hdCBNZWRpYVBsYXllclByaXZhdGU6OmR1cmF0aW9u
KCkgY29uc3QKK2Zsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6
OmR1cmF0aW9uKCkgY29uc3QKIHsKLSAgICBpZiAoIW1fcXRNb3ZpZSkKKyAgICBpZiAoIW1fbW92
aWUpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBtX3F0TW92aWUtPmR1cmF0aW9uKCk7
CisgICAgcmV0dXJuIG1fbW92aWUtPmR1cmF0aW9uKCk7CiB9CiAKLWZsb2F0IE1lZGlhUGxheWVy
UHJpdmF0ZTo6Y3VycmVudFRpbWUoKSBjb25zdAorZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlUXVp
Y2tUaW1lVmlzdWFsQ29udGV4dDo6Y3VycmVudFRpbWUoKSBjb25zdAogewotICAgIGlmICghbV9x
dE1vdmllKQorICAgIGlmICghbV9tb3ZpZSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJu
IG1fcXRNb3ZpZS0+Y3VycmVudFRpbWUoKTsKKyAgICByZXR1cm4gbV9tb3ZpZS0+Y3VycmVudFRp
bWUoKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNlZWsoZmxvYXQgdGltZSkKK3Zv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6c2VlayhmbG9hdCB0
aW1lKQogewogICAgIGNhbmNlbFNlZWsoKTsKICAgICAKLSAgICBpZiAoIW1fcXRNb3ZpZSkKKyAg
ICBpZiAoIW1fbW92aWUpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBpZiAodGltZSA+IGR1
cmF0aW9uKCkpCkBAIC0zNDQsMjggKzMzNSwyOCBAQA0KICAgICAgICAgbV9zZWVrVGltZXIuc3Rh
cnQoMCwgMC41Zik7CiB9CiAgICAgCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6ZG9TZWVrKCkg
Cit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OmRvU2Vlaygp
IAogewotICAgIGZsb2F0IG9sZFJhdGUgPSBtX3F0TW92aWUtPnJhdGUoKTsKKyAgICBmbG9hdCBv
bGRSYXRlID0gbV9tb3ZpZS0+cmF0ZSgpOwogICAgIGlmIChvbGRSYXRlKQotICAgICAgICBtX3F0
TW92aWUtPnNldFJhdGUoMCk7Ci0gICAgbV9xdE1vdmllLT5zZXRDdXJyZW50VGltZShtX3NlZWtU
byk7CisgICAgICAgIG1fbW92aWUtPnNldFJhdGUoMCk7CisgICAgbV9tb3ZpZS0+c2V0Q3VycmVu
dFRpbWUobV9zZWVrVG8pOwogICAgIGZsb2F0IHRpbWVBZnRlclNlZWsgPSBjdXJyZW50VGltZSgp
OwogICAgIC8vIHJlc3RvcmUgcGxheWJhY2sgb25seSBpZiBub3QgYXQgZW5kLCBvdGhld2lzZSBR
VE1vdmllIHdpbGwgbG9vcAogICAgIGlmIChvbGRSYXRlICYmIHRpbWVBZnRlclNlZWsgPCBkdXJh
dGlvbigpKQotICAgICAgICBtX3F0TW92aWUtPnNldFJhdGUob2xkUmF0ZSk7CisgICAgICAgIG1f
bW92aWUtPnNldFJhdGUob2xkUmF0ZSk7CiAgICAgY2FuY2VsU2VlaygpOwogfQogCi12b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZTo6Y2FuY2VsU2VlaygpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF1
aWNrVGltZVZpc3VhbENvbnRleHQ6OmNhbmNlbFNlZWsoKQogewogICAgIG1fc2Vla1RvID0gLTE7
CiAgICAgbV9zZWVrVGltZXIuc3RvcCgpOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6
c2Vla1RpbWVyRmlyZWQoVGltZXI8TWVkaWFQbGF5ZXJQcml2YXRlPiopCit2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OnNlZWtUaW1lckZpcmVkKFRpbWVyPE1l
ZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ+KikKIHsgICAgICAgIAotICAg
IGlmICghbV9xdE1vdmllIHx8ICFzZWVraW5nKCkgfHwgY3VycmVudFRpbWUoKSA9PSBtX3NlZWtU
bykgeworICAgIGlmICghbV9tb3ZpZSB8fCAhc2Vla2luZygpIHx8IGN1cnJlbnRUaW1lKCkgPT0g
bV9zZWVrVG8pIHsKICAgICAgICAgY2FuY2VsU2VlaygpOwogICAgICAgICB1cGRhdGVTdGF0ZXMo
KTsKICAgICAgICAgbV9wbGF5ZXItPnRpbWVDaGFuZ2VkKCk7IApAQCAtMzg0LDgwICszNzUsODUg
QEANCiAgICAgfQogfQogCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6cGF1c2VkKCkgY29uc3QK
K2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6cGF1c2VkKCkg
Y29uc3QKIHsKLSAgICBpZiAoIW1fcXRNb3ZpZSkKKyAgICBpZiAoIW1fbW92aWUpCiAgICAgICAg
IHJldHVybiB0cnVlOwotICAgIHJldHVybiBtX3F0TW92aWUtPnJhdGUoKSA9PSAwLjBmOworICAg
IHJldHVybiAoIW1fbW92aWUtPnJhdGUoKSk7CiB9CiAKLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRl
OjpzZWVraW5nKCkgY29uc3QKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFs
Q29udGV4dDo6c2Vla2luZygpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX3F0TW92aWUpCisgICAgaWYg
KCFtX21vdmllKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIG1fc2Vla1RvID49
IDA7CiB9CiAKLUludFNpemUgTWVkaWFQbGF5ZXJQcml2YXRlOjpuYXR1cmFsU2l6ZSgpIGNvbnN0
CitJbnRTaXplIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6Om5hdHVy
YWxTaXplKCkgY29uc3QKIHsKLSAgICBpZiAoIW1fcXRNb3ZpZSkKKyAgICBpZiAoIW1fbW92aWUp
CiAgICAgICAgIHJldHVybiBJbnRTaXplKCk7CiAgICAgaW50IHdpZHRoOwogICAgIGludCBoZWln
aHQ7Ci0gICAgbV9xdE1vdmllLT5nZXROYXR1cmFsU2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICBt
X21vdmllLT5nZXROYXR1cmFsU2l6ZSh3aWR0aCwgaGVpZ2h0KTsKICAgICByZXR1cm4gSW50U2l6
ZSh3aWR0aCwgaGVpZ2h0KTsKIH0KIAotYm9vbCBNZWRpYVBsYXllclByaXZhdGU6Omhhc1ZpZGVv
KCkgY29uc3QKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6
aGFzVmlkZW8oKSBjb25zdAogewotICAgIGlmICghbV9xdE1vdmllKQorICAgIGlmICghbV9tb3Zp
ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBtX3F0TW92aWUtPmhhc1ZpZGVv
KCk7CisgICAgcmV0dXJuIG1fbW92aWUtPmhhc1ZpZGVvKCk7CiB9CiAKLWJvb2wgTWVkaWFQbGF5
ZXJQcml2YXRlOjpoYXNBdWRpbygpIGNvbnN0Citib29sIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNr
VGltZVZpc3VhbENvbnRleHQ6Omhhc0F1ZGlvKCkgY29uc3QKIHsKLSAgICBpZiAoIW1fcXRNb3Zp
ZSkKKyAgICBpZiAoIW1fbW92aWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4g
bV9xdE1vdmllLT5oYXNBdWRpbygpOworICAgIHJldHVybiBtX21vdmllLT5oYXNBdWRpbygpOwog
fQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0Vm9sdW1lKGZsb2F0IHZvbHVtZSkKK3Zv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6c2V0Vm9sdW1lKGZs
b2F0IHZvbHVtZSkKIHsKLSAgICBpZiAoIW1fcXRNb3ZpZSkKKyAgICBpZiAoIW1fbW92aWUpCiAg
ICAgICAgIHJldHVybjsKLSAgICBtX3F0TW92aWUtPnNldFZvbHVtZSh2b2x1bWUpOworICAgIG1f
bW92aWUtPnNldFZvbHVtZSh2b2x1bWUpOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6
c2V0UmF0ZShmbG9hdCByYXRlKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1
YWxDb250ZXh0OjpzZXRSYXRlKGZsb2F0IHJhdGUpCiB7Ci0gICAgaWYgKCFtX3F0TW92aWUpCisg
ICAgaWYgKCFtX21vdmllKQogICAgICAgICByZXR1cm47Ci0gICAgbV9xdE1vdmllLT5zZXRSYXRl
KHJhdGUpOworCisgICAgLy8gRG8gbm90IGNhbGwgc2V0UmF0ZSguLi4pIHVubGVzcyB3ZSBoYXZl
IHN0YXJ0ZWQgcGxheWluZzsgb3RoZXJ3aXNlCisgICAgLy8gUXVpY2tUaW1lJ3MgVmlzdWFsQ29u
dGV4dCBjYW4gZ2V0IHdlZGdlZCB3YWl0aW5nIGZvciBhIHJhdGUgY2hhbmdlCisgICAgLy8gY2Fs
bCB3aGljaCB3aWxsIG5ldmVyIGNvbWUuCisgICAgaWYgKG1fc3RhcnRlZFBsYXlpbmcpCisgICAg
ICAgIG1fbW92aWUtPnNldFJhdGUocmF0ZSk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
OjpzZXRQcmVzZXJ2ZXNQaXRjaChib29sIHByZXNlcnZlc1BpdGNoKQordm9pZCBNZWRpYVBsYXll
clByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpzZXRQcmVzZXJ2ZXNQaXRjaChib29sIHBy
ZXNlcnZlc1BpdGNoKQogewotICAgIGlmICghbV9xdE1vdmllKQorICAgIGlmICghbV9tb3ZpZSkK
ICAgICAgICAgcmV0dXJuOwotICAgIG1fcXRNb3ZpZS0+c2V0UHJlc2VydmVzUGl0Y2gocHJlc2Vy
dmVzUGl0Y2gpOworICAgIG1fbW92aWUtPnNldFByZXNlcnZlc1BpdGNoKHByZXNlcnZlc1BpdGNo
KTsKIH0KIAotYm9vbCBNZWRpYVBsYXllclByaXZhdGU6Omhhc0Nsb3NlZENhcHRpb25zKCkgY29u
c3QKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6aGFzQ2xv
c2VkQ2FwdGlvbnMoKSBjb25zdAogewotICAgIGlmICghbV9xdE1vdmllKQorICAgIGlmICghbV9t
b3ZpZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBtX3F0TW92aWUtPmhhc0Ns
b3NlZENhcHRpb25zKCk7CisgICAgcmV0dXJuIG1fbW92aWUtPmhhc0Nsb3NlZENhcHRpb25zKCk7
CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRDbG9zZWRDYXB0aW9uc1Zpc2libGUo
Ym9vbCB2aXNpYmxlKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250
ZXh0OjpzZXRDbG9zZWRDYXB0aW9uc1Zpc2libGUoYm9vbCB2aXNpYmxlKQogewotICAgIGlmICgh
bV9xdE1vdmllKQorICAgIGlmICghbV9tb3ZpZSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fcXRN
b3ZpZS0+c2V0Q2xvc2VkQ2FwdGlvbnNWaXNpYmxlKHZpc2libGUpOworICAgIG1fbW92aWUtPnNl
dENsb3NlZENhcHRpb25zVmlzaWJsZSh2aXNpYmxlKTsKIH0KIAotUGFzc1JlZlB0cjxUaW1lUmFu
Z2VzPiBNZWRpYVBsYXllclByaXZhdGU6OmJ1ZmZlcmVkKCkgY29uc3QKK1Bhc3NSZWZQdHI8VGlt
ZVJhbmdlcz4gTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6YnVmZmVy
ZWQoKSBjb25zdAogewogICAgIFJlZlB0cjxUaW1lUmFuZ2VzPiB0aW1lUmFuZ2VzID0gVGltZVJh
bmdlczo6Y3JlYXRlKCk7CiAgICAgZmxvYXQgbG9hZGVkID0gbWF4VGltZUxvYWRlZCgpOwpAQCAt
NDY3LDIyICs0NjMsMjIgQEANCiAgICAgcmV0dXJuIHRpbWVSYW5nZXMucmVsZWFzZSgpOwogfQog
Ci1mbG9hdCBNZWRpYVBsYXllclByaXZhdGU6Om1heFRpbWVTZWVrYWJsZSgpIGNvbnN0CitmbG9h
dCBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjptYXhUaW1lU2Vla2Fi
bGUoKSBjb25zdAogewogICAgIC8vIGluZmluaXRlIGR1cmF0aW9uIG1lYW5zIGxpdmUgc3RyZWFt
CiAgICAgcmV0dXJuICFpc2Zpbml0ZShkdXJhdGlvbigpKSA/IDAgOiBtYXhUaW1lTG9hZGVkKCk7
CiB9CiAKLWZsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZTo6bWF4VGltZUxvYWRlZCgpIGNvbnN0Citm
bG9hdCBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjptYXhUaW1lTG9h
ZGVkKCkgY29uc3QKIHsKLSAgICBpZiAoIW1fcXRNb3ZpZSkKKyAgICBpZiAoIW1fbW92aWUpCiAg
ICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBtX3F0TW92aWUtPm1heFRpbWVMb2FkZWQoKTsg
CisgICAgcmV0dXJuIG1fbW92aWUtPm1heFRpbWVMb2FkZWQoKTsgCiB9CiAKLXVuc2lnbmVkIE1l
ZGlhUGxheWVyUHJpdmF0ZTo6Ynl0ZXNMb2FkZWQoKSBjb25zdAordW5zaWduZWQgTWVkaWFQbGF5
ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6Ynl0ZXNMb2FkZWQoKSBjb25zdAogewot
ICAgIGlmICghbV9xdE1vdmllKQorICAgIGlmICghbV9tb3ZpZSkKICAgICAgICAgcmV0dXJuIDA7
CiAgICAgZmxvYXQgZHVyID0gZHVyYXRpb24oKTsKICAgICBmbG9hdCBtYXhUaW1lID0gbWF4VGlt
ZUxvYWRlZCgpOwpAQCAtNDkxLDE0ICs0ODcsMTQgQEANCiAgICAgcmV0dXJuIHRvdGFsQnl0ZXMo
KSAqIG1heFRpbWUgLyBkdXI7CiB9CiAKLXVuc2lnbmVkIE1lZGlhUGxheWVyUHJpdmF0ZTo6dG90
YWxCeXRlcygpIGNvbnN0Cit1bnNpZ25lZCBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1
YWxDb250ZXh0Ojp0b3RhbEJ5dGVzKCkgY29uc3QKIHsKLSAgICBpZiAoIW1fcXRNb3ZpZSkKKyAg
ICBpZiAoIW1fbW92aWUpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBtX3F0TW92aWUt
PmRhdGFTaXplKCk7CisgICAgcmV0dXJuIG1fbW92aWUtPmRhdGFTaXplKCk7CiB9CiAKLXZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlOjpjYW5jZWxMb2FkKCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
UXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6Y2FuY2VsTG9hZCgpCiB7CiAgICAgaWYgKG1fbmV0d29y
a1N0YXRlIDwgTWVkaWFQbGF5ZXI6OkxvYWRpbmcgfHwgbV9uZXR3b3JrU3RhdGUgPT0gTWVkaWFQ
bGF5ZXI6OkxvYWRlZCkKICAgICAgICAgcmV0dXJuOwpAQCAtNTA2LDIwICs1MDIsMjAgQEANCiAg
ICAgdGVhckRvd25WaWRlb1JlbmRlcmluZygpOwogCiAgICAgLy8gQ2FuY2VsIHRoZSBsb2FkIGJ5
IGRlc3Ryb3lpbmcgdGhlIG1vdmllLgotICAgIG1fcXRNb3ZpZS5jbGVhcigpOworICAgIG1fbW92
aWUuY2xlYXIoKTsKIAogICAgIHVwZGF0ZVN0YXRlcygpOwogfQogCi12b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZTo6dXBkYXRlU3RhdGVzKCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1l
VmlzdWFsQ29udGV4dDo6dXBkYXRlU3RhdGVzKCkKIHsKICAgICBNZWRpYVBsYXllcjo6TmV0d29y
a1N0YXRlIG9sZE5ldHdvcmtTdGF0ZSA9IG1fbmV0d29ya1N0YXRlOwogICAgIE1lZGlhUGxheWVy
OjpSZWFkeVN0YXRlIG9sZFJlYWR5U3RhdGUgPSBtX3JlYWR5U3RhdGU7CiAgIAotICAgIGxvbmcg
bG9hZFN0YXRlID0gbV9xdE1vdmllID8gbV9xdE1vdmllLT5sb2FkU3RhdGUoKSA6IFFUTW92aWVM
b2FkU3RhdGVFcnJvcjsKKyAgICBsb25nIGxvYWRTdGF0ZSA9IG1fbW92aWUgPyBtX21vdmllLT5s
b2FkU3RhdGUoKSA6IFFUTW92aWVMb2FkU3RhdGVFcnJvcjsKIAogICAgIGlmIChsb2FkU3RhdGUg
Pj0gUVRNb3ZpZUxvYWRTdGF0ZUxvYWRlZCAmJiBtX3JlYWR5U3RhdGUgPCBNZWRpYVBsYXllcjo6
SGF2ZU1ldGFkYXRhKSB7Ci0gICAgICAgIG1fcXRNb3ZpZS0+ZGlzYWJsZVVuc3VwcG9ydGVkVHJh
Y2tzKG1fZW5hYmxlZFRyYWNrQ291bnQsIG1fdG90YWxUcmFja0NvdW50KTsKKyAgICAgICAgbV9t
b3ZpZS0+ZGlzYWJsZVVuc3VwcG9ydGVkVHJhY2tzKG1fZW5hYmxlZFRyYWNrQ291bnQsIG1fdG90
YWxUcmFja0NvdW50KTsKICAgICAgICAgaWYgKG1fcGxheWVyLT5pbk1lZGlhRG9jdW1lbnQoKSkg
ewogICAgICAgICAgICAgaWYgKCFtX2VuYWJsZWRUcmFja0NvdW50IHx8IG1fZW5hYmxlZFRyYWNr
Q291bnQgIT0gbV90b3RhbFRyYWNrQ291bnQpIHsKICAgICAgICAgICAgICAgICAvLyBUaGlzIGlz
IGEgdHlwZSBvZiBtZWRpYSB0aGF0IHdlIGRvIG5vdCBoYW5kbGUgZGlyZWN0bHkgd2l0aCBhIDx2
aWRlbz4gCkBAIC01ODIsNDUgKzU3OCw0MSBAQA0KICAgICAgICAgbV9wbGF5ZXItPnJlYWR5U3Rh
dGVDaGFuZ2VkKCk7CiB9CiAKLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlOjppc1JlYWR5Rm9yUmVu
ZGVyaW5nKCkgY29uc3QKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29u
dGV4dDo6aXNSZWFkeUZvclJlbmRlcmluZygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fcmVhZHlT
dGF0ZSA+PSBNZWRpYVBsYXllcjo6SGF2ZU1ldGFkYXRhICYmIG1fcGxheWVyLT52aXNpYmxlKCk7
CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzYXdVbnN1cHBvcnRlZFRyYWNrcygpCit2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OnNhd1Vuc3VwcG9y
dGVkVHJhY2tzKCkKIHsKLSAgICBtX3F0TW92aWUtPnNldERpc2FibGVkKHRydWUpOworICAgIG1f
bW92aWUtPnNldERpc2FibGVkKHRydWUpOwogICAgIG1faGFzVW5zdXBwb3J0ZWRUcmFja3MgPSB0
cnVlOwogICAgIG1fcGxheWVyLT5tZWRpYVBsYXllckNsaWVudCgpLT5tZWRpYVBsYXllclNhd1Vu
c3VwcG9ydGVkVHJhY2tzKG1fcGxheWVyKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6
OmRpZEVuZCgpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6
OmRpZEVuZCgpCiB7CiAgICAgaWYgKG1faGFzVW5zdXBwb3J0ZWRUcmFja3MpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIG1fc3RhcnRlZFBsYXlpbmcgPSBmYWxzZTsKLSNpZiBEUkFXX0ZSQU1FX1JB
VEUKLSAgICBtX3RpbWVTdG9wcGVkUGxheWluZyA9IFdURjo6Y3VycmVudFRpbWUoKTsKLSNlbmRp
ZgorCiAgICAgdXBkYXRlU3RhdGVzKCk7CiAgICAgbV9wbGF5ZXItPnRpbWVDaGFuZ2VkKCk7CiB9
CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRTaXplKGNvbnN0IEludFNpemUmIHNpemUp
IAordm9pZCBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpzZXRTaXpl
KGNvbnN0IEludFNpemUmIHNpemUpIAogeyAKLSAgICBpZiAobV9oYXNVbnN1cHBvcnRlZFRyYWNr
cyB8fCAhbV9xdE1vdmllIHx8IG1fc2l6ZSA9PSBzaXplKQorICAgIGlmIChtX2hhc1Vuc3VwcG9y
dGVkVHJhY2tzIHx8ICFtX21vdmllIHx8IG1fc2l6ZSA9PSBzaXplKQogICAgICAgICByZXR1cm47
CiAgICAgbV9zaXplID0gc2l6ZTsKLSAgICBtX3F0TW92aWUtPnNldFNpemUoc2l6ZS53aWR0aCgp
LCBzaXplLmhlaWdodCgpKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNldFZpc2li
bGUoYm9vbCB2aXNpYmxlKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxD
b250ZXh0OjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKIHsKLSAgICBpZiAobV9oYXNVbnN1cHBv
cnRlZFRyYWNrcyB8fCAhbV9xdE1vdmllIHx8IG1fdmlzaWJsZSA9PSB2aXNpYmxlKQorICAgIGlm
IChtX2hhc1Vuc3VwcG9ydGVkVHJhY2tzIHx8ICFtX21vdmllIHx8IG1fdmlzaWJsZSA9PSB2aXNp
YmxlKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3F0TW92aWUtPnNldFZpc2libGUodmlzaWJs
ZSk7CiAgICAgbV92aXNpYmxlID0gdmlzaWJsZTsKICAgICBpZiAobV92aXNpYmxlKSB7CiAgICAg
ICAgIGlmIChpc1JlYWR5Rm9yUmVuZGVyaW5nKCkpCkBAIC02MjksODggKzYyMSwxNDIgQEANCiAg
ICAgICAgIHRlYXJEb3duVmlkZW9SZW5kZXJpbmcoKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclBy
aXZhdGU6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogcCwgY29uc3QgSW50UmVjdCYgcikKK3ZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6cGFpbnQoR3JhcGhpY3ND
b250ZXh0KiBwLCBjb25zdCBJbnRSZWN0JiByKQogewogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKICAgICBpZiAobV9xdFZpZGVvTGF5ZXIpCiAgICAgICAgIHJldHVybjsKICNlbmRp
ZgotICAgIGlmIChwLT5wYWludGluZ0Rpc2FibGVkKCkgfHwgIW1fcXRNb3ZpZSB8fCBtX2hhc1Vu
c3VwcG9ydGVkVHJhY2tzKQotICAgICAgICByZXR1cm47CiAKLSAgICBib29sIHVzaW5nVGVtcEJp
dG1hcCA9IGZhbHNlOwotICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ6OldpbmRvd3NCaXRtYXA+
IGJpdG1hcDsKLSAgICBIREMgaGRjID0gcC0+Z2V0V2luZG93c0NvbnRleHQocik7Ci0gICAgaWYg
KCFoZGMpIHsKLSAgICAgICAgLy8gVGhlIGdyYXBoaWNzIGNvbnRleHQgZG9lc24ndCBoYXZlIGFu
IGFzc29jaWF0ZWQgSERDIHNvIGNyZWF0ZSBhIHRlbXBvcmFyeQotICAgICAgICAvLyBiaXRtYXAg
d2hlcmUgUVRNb3ZpZVdpbiBjYW4gZHJhdyB0aGUgZnJhbWUgYW5kIHdlIGNhbiBjb3B5IGl0Lgot
ICAgICAgICB1c2luZ1RlbXBCaXRtYXAgPSB0cnVlOwotICAgICAgICBiaXRtYXAuc2V0KHAtPmNy
ZWF0ZVdpbmRvd3NCaXRtYXAoci5zaXplKCkpKTsKLSAgICAgICAgaGRjID0gYml0bWFwLT5oZGMo
KTsKKyAgICBwYWludENvbXBsZXRlZCgqcCwgcik7Cit9CiAKLSAgICAgICAgLy8gRklYTUU6IGlz
IHRoaXMgbmVjZXNzYXJ5Pz8KLSAgICAgICAgWEZPUk0geGZvcm07Ci0gICAgICAgIHhmb3JtLmVN
MTEgPSAxLjBmOwotICAgICAgICB4Zm9ybS5lTTEyID0gMC4wZjsKLSAgICAgICAgeGZvcm0uZU0y
MSA9IDAuMGY7Ci0gICAgICAgIHhmb3JtLmVNMjIgPSAxLjBmOwotICAgICAgICB4Zm9ybS5lRHgg
PSAtci54KCk7Ci0gICAgICAgIHhmb3JtLmVEeSA9IC1yLnkoKTsKLSAgICAgICAgU2V0V29ybGRU
cmFuc2Zvcm0oaGRjLCAmeGZvcm0pOwordm9pZCBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVW
aXN1YWxDb250ZXh0OjpwYWludENvbXBsZXRlZChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNv
bnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgbV9uZXdGcmFtZUF2YWlsYWJsZSA9IGZhbHNlOwor
fQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OlZpc3Vh
bENvbnRleHRDbGllbnQ6OnJldHJpZXZlQ3VycmVudEltYWdlUHJvYyh2b2lkKiByZWZjb24pCit7
CisgICAgc3RhdGljX2Nhc3Q8TWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4
dCo+KHJlZmNvbiktPnJldHJpZXZlQ3VycmVudEltYWdlKCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6VmlzdWFsQ29udGV4dENsaWVudDo6aW1h
Z2VBdmFpbGFibGVGb3JUaW1lKGNvbnN0IFFUQ1ZUaW1lU3RhbXAqIHRpbWVTdGFtcCkKK3sKKyAg
ICAvLyBUaGlzIGNhbGwgbWF5IGNvbWUgaW4gb24gYW5vdGhlciB0aHJlYWQsIHNvIG1hcnNoYWxs
IHRvIHRoZSBtYWluIHRocmVhZCBmaXJzdDoKKyAgICBjYWxsT25NYWluVGhyZWFkKCZyZXRyaWV2
ZUN1cnJlbnRJbWFnZVByb2MsIG1fcGFyZW50KTsKKworICAgIC8vIGNhbGxPbk1haW5UaHJlYWQg
bXVzdCBiZSBwYWlyZWQgd2l0aCBjYW5jZWxDYWxsT25NYWluVGhyZWFkIGluIHRoZSBkZXN0cnVj
dG9yLAorICAgIC8vIGluIGNhc2UgdGhpcyBvYmplY3QgaXMgZGVsZXRlZCBiZWZvcmUgdGhlIG1h
aW4gdGhyZWFkIHJlcXVlc3QgaXMgaGFuZGxlZC4KK30KKwordm9pZCBNZWRpYVBsYXllclByaXZh
dGVRdWlja1RpbWVWaXN1YWxDb250ZXh0Ojp2aXN1YWxDb250ZXh0VGltZXJGaXJlZChUaW1lcjxN
ZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0PiopCit7CisgICAgcmV0cmll
dmVDdXJyZW50SW1hZ2UoKTsKK30KKworc3RhdGljIENGRGljdGlvbmFyeVJlZiBRVENGRGljdGlv
bmFyeUNyZWF0ZVdpdGhEYXRhQ2FsbGJhY2soQ0ZBbGxvY2F0b3JSZWYgYWxsb2NhdG9yLCBjb25z
dCBVSW50OCogYnl0ZXMsIENGSW5kZXggbGVuZ3RoKQoreworICAgIENGRGF0YVJlZiBkYXRhID0g
Q0ZEYXRhQ3JlYXRlV2l0aEJ5dGVzTm9Db3B5KGFsbG9jYXRvciwgYnl0ZXMsIGxlbmd0aCwgMCk7
CisgICAgaWYgKCFkYXRhKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PENGRGljdGlvbmFyeVJlZj4oQ0ZQcm9wZXJ0eUxpc3RDcmVhdGVGcm9tWE1MRGF0
YShhbGxvY2F0b3IsIGRhdGEsIGtDRlByb3BlcnR5TGlzdEltbXV0YWJsZSwgMCkpOworfQorCitz
dGF0aWMgQ0dJbWFnZVJlZiBDcmVhdGVDR0ltYWdlRnJvbVBpeGVsQnVmZmVyKFFUUGl4ZWxCdWZm
ZXIgYnVmZmVyKQoreworICAgIENHRGF0YVByb3ZpZGVyUmVmIHByb3ZpZGVyID0gMDsKKyAgICBD
R0NvbG9yU3BhY2VSZWYgY29sb3JTcGFjZSA9IDA7CisgICAgQ0dJbWFnZVJlZiBpbWFnZSA9IDA7
CisKKyAgICBzaXplX3QgYml0c1BlckNvbXBvbmVudCA9IDA7CisgICAgc2l6ZV90IGJpdHNQZXJQ
aXhlbCA9IDA7CisgICAgQ0dJbWFnZUFscGhhSW5mbyBhbHBoYUluZm8gPSBrQ0dJbWFnZUFscGhh
Tm9uZTsKKyAgICAgICAgCisgICAgc3dpdGNoIChidWZmZXIucGl4ZWxGb3JtYXRUeXBlKCkpIHsK
KyAgICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlwZV8zMkJHUkE6CisgICAgICAgIGJpdHNQZXJDb21w
b25lbnQgPSA4OworICAgICAgICBiaXRzUGVyUGl4ZWwgPSAzMjsKKyAgICAgICAgYWxwaGFJbmZv
ID0gKENHSW1hZ2VBbHBoYUluZm8pKGtDR0ltYWdlQWxwaGFOb25lU2tpcEZpcnN0IHwga0NHQml0
bWFwQnl0ZU9yZGVyMzJMaXR0bGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIGtDVlBpeGVs
Rm9ybWF0VHlwZV8zMkFSR0I6CisgICAgICAgIGJpdHNQZXJDb21wb25lbnQgPSA4OworICAgICAg
ICBiaXRzUGVyUGl4ZWwgPSAzMjsKKyAgICAgICAgYWxwaGFJbmZvID0gKENHSW1hZ2VBbHBoYUlu
Zm8pKGtDR0ltYWdlQWxwaGFOb25lU2tpcExhc3QgfCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkJpZyk7
CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIC8vIEFsbCBvdGhlciBwaXhl
bCBmb3JtYXRzIGFyZSBjdXJyZW50bHkgdW5zdXBwb3J0ZWQ6CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBtX3F0TW92aWUtPnBhaW50
KGhkYywgci54KCksIHIueSgpKTsKLSAgICBpZiAodXNpbmdUZW1wQml0bWFwKQotICAgICAgICBw
LT5kcmF3V2luZG93c0JpdG1hcChiaXRtYXAuZ2V0KCksIHIudG9wTGVmdCgpKTsKLSAgICBlbHNl
Ci0gICAgICAgIHAtPnJlbGVhc2VXaW5kb3dzQ29udGV4dChoZGMsIHIpOworICAgIENHRGF0YVBy
b3ZpZGVyRGlyZWN0QWNjZXNzQ2FsbGJhY2tzIGNhbGxiYWNrcyA9IHsKKyAgICAgICAgJlFUUGl4
ZWxCdWZmZXI6OmRhdGFQcm92aWRlckdldEJ5dGVQb2ludGVyQ2FsbGJhY2ssCisgICAgICAgICZR
VFBpeGVsQnVmZmVyOjpkYXRhUHJvdmlkZXJSZWxlYXNlQnl0ZVBvaW50ZXJDYWxsYmFjaywKKyAg
ICAgICAgJlFUUGl4ZWxCdWZmZXI6OmRhdGFQcm92aWRlckdldEJ5dGVzQXRQb3NpdGlvbkNhbGxi
YWNrLAorICAgICAgICAmUVRQaXhlbEJ1ZmZlcjo6ZGF0YVByb3ZpZGVyUmVsZWFzZUluZm9DYWxs
YmFjaywKKyAgICB9OworICAgIAorICAgIC8vIENvbG9yc3BhY2Ugc2hvdWxkIGJlIGRldmljZSwg
c28gdGhhdCBRdWFydHogZG9lcyBub3QgaGF2ZSB0byBkbyBhbiBleHRyYSByZW5kZXIuCisgICAg
Y29sb3JTcGFjZSA9IENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpOworICAgIHJlcXVpcmUo
Y29sb3JTcGFjZSwgQmFpbCk7CisgICAgICAgICAgICAKKyAgICBwcm92aWRlciA9IENHRGF0YVBy
b3ZpZGVyQ3JlYXRlRGlyZWN0QWNjZXNzKGJ1ZmZlci5nZXQoKSwgYnVmZmVyLmRhdGFTaXplKCks
ICZjYWxsYmFja3MpOworICAgIHJlcXVpcmUocHJvdmlkZXIsIEJhaWwpOwogCi0gICAgcGFpbnRD
b21wbGV0ZWQoKnAsIHIpOworICAgIC8vIENHRGF0YVByb3ZpZGVyIGRvZXMgbm90IHJldGFpbiB0
aGUgYnVmZmVyLCBidXQgaXQgd2lsbCByZWxlYXNlIGl0IGxhdGVyLCBzbyBkbyBhbiBleHRyYSBy
ZXRhaW4gaGVyZToKKyAgICBRVFBpeGVsQnVmZmVyOjpyZXRhaW5DYWxsYmFjayhidWZmZXIuZ2V0
KCkpOworICAgICAgICAKKyAgICBpbWFnZSA9IENHSW1hZ2VDcmVhdGUoYnVmZmVyLndpZHRoKCks
IGJ1ZmZlci5oZWlnaHQoKSwgYml0c1BlckNvbXBvbmVudCwgYml0c1BlclBpeGVsLCBidWZmZXIu
Ynl0ZXNQZXJSb3coKSwgY29sb3JTcGFjZSwgYWxwaGFJbmZvLCBwcm92aWRlciwgMCwgZmFsc2Us
IGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpOworIAorQmFpbDoKKyAgICAvLyBPbmNlIHRoZSBp
bWFnZSBpcyBjcmVhdGVkIHdlIGNhbiByZWxlYXNlIG91ciByZWZlcmVuY2UgdG8gdGhlIHByb3Zp
ZGVyIGFuZCB0aGUgY29sb3JzcGFjZSwgdGhleSBhcmUgcmV0YWluZWQgYnkgdGhlIGltYWdlCisg
ICAgaWYgKHByb3ZpZGVyKQorICAgICAgICBDR0RhdGFQcm92aWRlclJlbGVhc2UocHJvdmlkZXIp
OworICAgIGlmIChjb2xvclNwYWNlKQorICAgICAgICBDR0NvbG9yU3BhY2VSZWxlYXNlKGNvbG9y
U3BhY2UpOworIAorICAgIHJldHVybiBpbWFnZTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZh
dGU6OnBhaW50Q29tcGxldGVkKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVj
dCYgcmVjdCkKKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0
OjpyZXRyaWV2ZUN1cnJlbnRJbWFnZSgpCiB7Ci0gICAgbV9uZXdGcmFtZUF2YWlsYWJsZSA9IGZh
bHNlOworICAgIGlmICghbV92aXN1YWxDb250ZXh0KQorICAgICAgICByZXR1cm47CiAKLSNpZiBE
UkFXX0ZSQU1FX1JBVEUKLSAgICBpZiAobV9mcmFtZUNvdW50V2hpbGVQbGF5aW5nID4gMTApIHsK
LSAgICAgICAgZG91YmxlIGludGVydmFsID0gIG1fc3RhcnRlZFBsYXlpbmcgPyBXVEY6OmN1cnJl
bnRUaW1lKCkgLSBtX3RpbWVTdGFydGVkUGxheWluZyA6IG1fdGltZVN0b3BwZWRQbGF5aW5nIC0g
bV90aW1lU3RhcnRlZFBsYXlpbmc7Ci0gICAgICAgIGRvdWJsZSBmcmFtZVJhdGUgPSAobV9mcmFt
ZUNvdW50V2hpbGVQbGF5aW5nIC0gMSkgLyBpbnRlcnZhbDsKLSAgICAgICAgQ0dDb250ZXh0UmVm
IGNnQ29udGV4dCA9IGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgICAgIENHUmVjdCBk
cmF3UmVjdCA9IHJlY3Q7CisgICAgaWYgKCFtX3F0VmlkZW9MYXllcikKKyAgICAgICAgcmV0dXJu
OwogCi0gICAgICAgIGNoYXIgdGV4dFs4XTsKLSAgICAgICAgX3NucHJpbnRmKHRleHQsIHNpemVv
Zih0ZXh0KSwgIiUxLjJmIiwgZnJhbWVSYXRlKTsKKyAgICBRVFBpeGVsQnVmZmVyIGJ1ZmZlciA9
IG1fdmlzdWFsQ29udGV4dC0+aW1hZ2VGb3JUaW1lKDApOworICAgIGlmICghYnVmZmVyLmdldCgp
KQorICAgICAgICByZXR1cm47CiAKLSAgICAgICAgc3RhdGljIGNvbnN0IGludCBmb250U2l6ZSA9
IDI1OwotICAgICAgICBzdGF0aWMgY29uc3QgaW50IGZvbnRDaGFyV2lkdGggPSAxMjsKLSAgICAg
ICAgc3RhdGljIGNvbnN0IGludCBib3hIZWlnaHQgPSAyNTsKLSAgICAgICAgc3RhdGljIGNvbnN0
IGludCBib3hCb3JkZXJXaWR0aCA9IDQ7Ci0gICAgICAgIGRyYXdSZWN0LnNpemUud2lkdGggPSBi
b3hCb3JkZXJXaWR0aCAqIDIgKyBmb250Q2hhcldpZHRoICogc3RybGVuKHRleHQpOwotICAgICAg
ICBkcmF3UmVjdC5zaXplLmhlaWdodCA9IGJveEhlaWdodDsKKyAgICBXS0NBQ0ZMYXllciogbGF5
ZXIgPSBzdGF0aWNfY2FzdDxXS0NBQ0ZMYXllcio+KG1fcXRWaWRlb0xheWVyLT5wbGF0Zm9ybUxh
eWVyKCkpOwogCi0gICAgICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY2dDb250ZXh0KTsKLSNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgICAgIGlmIChtX3F0VmlkZW9MYXllcikK
LSAgICAgICAgICAgIENHQ29udGV4dFNjYWxlQ1RNKGNnQ29udGV4dCwgMSwgLTEpOwotICAgICAg
ICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY2dDb250ZXh0LCByZWN0LndpZHRoKCkgLSBkcmF3UmVj
dC5zaXplLndpZHRoLCBtX3F0VmlkZW9MYXllciA/IC1yZWN0LmhlaWdodCgpIDogMCk7CisgICAg
aWYgKGJ1ZmZlci5sb2NrQmFzZUFkZHJlc3MoKSA9PSBrQ1ZSZXR1cm5TdWNjZXNzKSB7CisjaWZu
ZGVmIE5ERUJVRworICAgICAgICAvLyBEZWJ1ZyBRdWlja1RpbWUgbGlua3MgYWdhaW5zdCBhIG5v
bi1EZWJ1ZyB2ZXJzaW9uIG9mIENvcmVGb3VuZGF0aW9uLCBzbyB0aGUgQ0ZEaWN0aW9uYXJ5IGF0
dGFjaGVkIHRvIHRoZSBDVlBpeGVsQnVmZmVyIGNhbm5vdCBiZSBkaXJlY3RseSBwYXNzZWQgb24g
aW50byB0aGUgQ0FJbWFnZVF1ZXVlIHdpdGhvdXQgYmVpbmcgY29udmVydGVkIHRvIGEgbm9uLURl
YnVnIENGRGljdGlvbmFyeToKKyAgICAgICAgQ0ZEaWN0aW9uYXJ5UmVmIGF0dGFjaG1lbnRzID0g
UVRDRkRpY3Rpb25hcnlDcmVhdGVDb3B5V2l0aERhdGFDYWxsYmFjayhrQ0ZBbGxvY2F0b3JEZWZh
dWx0LCBidWZmZXIuYXR0YWNobWVudHMoKSwgJlFUQ0ZEaWN0aW9uYXJ5Q3JlYXRlV2l0aERhdGFD
YWxsYmFjayk7CiAjZWxzZQotICAgICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY2dDb250ZXh0
LCByZWN0LndpZHRoKCkgLSBkcmF3UmVjdC5zaXplLndpZHRoLCAwKTsKKyAgICAgICAgLy8gSG93
ZXZlciwgdGhpcyBpcyB1bm5lY3NzZXNhcnkgaW4gdGhlIG5vbi1EZWJ1ZyBjYXNlOgorICAgICAg
ICBDRkRpY3Rpb25hcnlSZWYgYXR0YWNobWVudHMgPSBzdGF0aWNfY2FzdDxDRkRpY3Rpb25hcnlS
ZWY+KENGUmV0YWluKGJ1ZmZlci5hdHRhY2htZW50cygpKSk7CiAjZW5kaWYKLSAgICAgICAgc3Rh
dGljIGNvbnN0IENHRmxvYXQgYmFja2dyb3VuZENvbG9yWzRdID0geyAwLjk4LCAwLjk4LCAwLjgy
LCAwLjggfTsKLSAgICAgICAgQ0dDb250ZXh0U2V0RmlsbENvbG9yKGNnQ29udGV4dCwgYmFja2dy
b3VuZENvbG9yKTsKLSAgICAgICAgQ0dDb250ZXh0RmlsbFJlY3QoY2dDb250ZXh0LCBkcmF3UmVj
dCk7CiAKLSAgICAgICAgc3RhdGljIGNvbnN0IENHRmxvYXQgdGV4dENvbG9yWzRdID0geyAwLCAw
LCAwLCAxIH07Ci0gICAgICAgIENHQ29udGV4dFNldEZpbGxDb2xvcihjZ0NvbnRleHQsIHRleHRD
b2xvcik7Ci0gICAgICAgIENHQ29udGV4dFNldFRleHRNYXRyaXgoY2dDb250ZXh0LCBDR0FmZmlu
ZVRyYW5zZm9ybU1ha2VTY2FsZSgxLCAtMSkpOwotICAgICAgICBDR0NvbnRleHRTZWxlY3RGb250
KGNnQ29udGV4dCwgIkhlbHZldGljYSIsIGZvbnRTaXplLCBrQ0dFbmNvZGluZ01hY1JvbWFuKTsK
KyAgICAgICAgQ0ZUaW1lSW50ZXJ2YWwgaW1hZ2VUaW1lID0gQ1ZHZXRDdXJyZW50SG9zdFRpbWUo
KSAvIENWR2V0SG9zdENsb2NrRnJlcXVlbmN5KCk7CiAKLSAgICAgICAgQ0dDb250ZXh0U2hvd1Rl
eHRBdFBvaW50KGNnQ29udGV4dCwgZHJhd1JlY3Qub3JpZ2luLnggKyBib3hCb3JkZXJXaWR0aCwg
ZHJhd1JlY3Qub3JpZ2luLnkgKyBib3hIZWlnaHQgLSBib3hCb3JkZXJXaWR0aCwgdGV4dCwgc3Ry
bGVuKHRleHQpKTsKLSAgICAgICAgCi0gICAgICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY2dD
b250ZXh0KTsgICAgICAgIAorICAgICAgICBDR0ltYWdlUmVmIGltYWdlID0gQ3JlYXRlQ0dJbWFn
ZUZyb21QaXhlbEJ1ZmZlcihidWZmZXIpOworICAgICAgICBsYXllci0+c2V0Q29udGVudHMoaW1h
Z2UpOworICAgICAgICBDR0ltYWdlUmVsZWFzZShpbWFnZSk7CisKKyAgICAgICAgaWYgKGF0dGFj
aG1lbnRzKQorICAgICAgICAgICAgQ0ZSZWxlYXNlKGF0dGFjaG1lbnRzKTsKKworICAgICAgICBi
dWZmZXIudW5sb2NrQmFzZUFkZHJlc3MoKTsKKyAgICAgICAgbGF5ZXItPnJvb3RMYXllcigpLT5z
ZXROZWVkc1JlbmRlcigpOwogICAgIH0KLSNlbmRpZgorICAgIG1fdmlzdWFsQ29udGV4dC0+dGFz
aygpOwogfQogCiBzdGF0aWMgSGFzaFNldDxTdHJpbmc+IG1pbWVUeXBlQ2FjaGUoKQpAQCAtNzE5
LDExICs3NjUsMTEgQEANCiAgICAgc3RhdGljIGJvb2wgdHlwZUxpc3RJbml0aWFsaXplZCA9IGZh
bHNlOwogCiAgICAgaWYgKCF0eXBlTGlzdEluaXRpYWxpemVkKSB7Ci0gICAgICAgIHVuc2lnbmVk
IGNvdW50ID0gUVRNb3ZpZVdpbjo6Y291bnRTdXBwb3J0ZWRUeXBlcygpOworICAgICAgICB1bnNp
Z25lZCBjb3VudCA9IFFUTW92aWU6OmNvdW50U3VwcG9ydGVkVHlwZXMoKTsKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBuID0gMDsgbiA8IGNvdW50OyBuKyspIHsKICAgICAgICAgICAgIGNvbnN0IFVD
aGFyKiBjaGFyYWN0ZXI7CiAgICAgICAgICAgICB1bnNpZ25lZCBsZW47Ci0gICAgICAgICAgICBR
VE1vdmllV2luOjpnZXRTdXBwb3J0ZWRUeXBlKG4sIGNoYXJhY3RlciwgbGVuKTsKKyAgICAgICAg
ICAgIFFUTW92aWU6OmdldFN1cHBvcnRlZFR5cGUobiwgY2hhcmFjdGVyLCBsZW4pOwogICAgICAg
ICAgICAgaWYgKGxlbikKICAgICAgICAgICAgICAgICB0eXBlQ2FjaGUuYWRkKFN0cmluZyhjaGFy
YWN0ZXIsIGxlbikpOwogICAgICAgICB9CkBAIC03MzIsODkgKzc3OCw2NSBAQA0KICAgICB9CiAg
ICAgCiAgICAgcmV0dXJuIHR5cGVDYWNoZTsKLX0gCit9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlOjpnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZz4mIHR5cGVzKQordm9pZCBNZWRp
YVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpnZXRTdXBwb3J0ZWRUeXBlcyhI
YXNoU2V0PFN0cmluZz4mIHR5cGVzKQogewogICAgIHR5cGVzID0gbWltZVR5cGVDYWNoZSgpOwog
fSAKIAotYm9vbCBNZWRpYVBsYXllclByaXZhdGU6OmlzQXZhaWxhYmxlKCkKK2Jvb2wgTWVkaWFQ
bGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6aXNBdmFpbGFibGUoKQogewotICAg
IHJldHVybiBRVE1vdmllV2luOjppbml0aWFsaXplUXVpY2tUaW1lKCk7CisgICAgcmV0dXJuIFFU
TW92aWU6OmluaXRpYWxpemVRdWlja1RpbWUoKTsKIH0KIAotTWVkaWFQbGF5ZXI6OlN1cHBvcnRz
VHlwZSBNZWRpYVBsYXllclByaXZhdGU6OnN1cHBvcnRzVHlwZShjb25zdCBTdHJpbmcmIHR5cGUs
IGNvbnN0IFN0cmluZyYgY29kZWNzKQorTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBNZWRpYVBs
YXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpzdXBwb3J0c1R5cGUoY29uc3QgU3Ry
aW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGNvZGVjcykKIHsKICAgICAvLyBvbmx5IHJldHVybiAi
SXNTdXBwb3J0ZWQiIGlmIHRoZXJlIGlzIG5vIGNvZGVjcyBwYXJhbWV0ZXIgZm9yIG5vdyBhcyB0
aGVyZSBpcyBubyB3YXkgdG8gYXNrIFFUIGlmIGl0IHN1cHBvcnRzIGFuCiAgICAgLy8gIGV4dGVu
ZGVkIE1JTUUgdHlwZQogICAgIHJldHVybiBtaW1lVHlwZUNhY2hlKCkuY29udGFpbnModHlwZSkg
PyAoY29kZWNzLmlzRW1wdHkoKSA/IE1lZGlhUGxheWVyOjpNYXlCZVN1cHBvcnRlZCA6IE1lZGlh
UGxheWVyOjpJc1N1cHBvcnRlZCkgOiBNZWRpYVBsYXllcjo6SXNOb3RTdXBwb3J0ZWQ7CiB9CiAK
LXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjptb3ZpZUVuZGVkKFFUTW92aWVXaW4qIG1vdmllKQor
dm9pZCBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpNb3ZpZUNsaWVu
dDo6bW92aWVFbmRlZChRVE1vdmllKiBtb3ZpZSkKIHsKLSAgICBpZiAobV9oYXNVbnN1cHBvcnRl
ZFRyYWNrcykKKyAgICBpZiAobV9wYXJlbnQtPm1faGFzVW5zdXBwb3J0ZWRUcmFja3MpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIEFTU0VSVChtX3F0TW92aWUuZ2V0KCkgPT0gbW92aWUpOwotICAg
IGRpZEVuZCgpOwotfQorICAgIG1fcGFyZW50LT5tX3Zpc3VhbENvbnRleHRUaW1lci5zdG9wKCk7
CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjptb3ZpZUxvYWRTdGF0ZUNoYW5nZWQoUVRNb3Zp
ZVdpbiogbW92aWUpCi17Ci0gICAgaWYgKG1faGFzVW5zdXBwb3J0ZWRUcmFja3MpCi0gICAgICAg
IHJldHVybjsKLQotICAgIEFTU0VSVChtX3F0TW92aWUuZ2V0KCkgPT0gbW92aWUpOwotICAgIHVw
ZGF0ZVN0YXRlcygpOworICAgIEFTU0VSVChtX3BhcmVudC0+bV9tb3ZpZS5nZXQoKSA9PSBtb3Zp
ZSk7CisgICAgbV9wYXJlbnQtPmRpZEVuZCgpOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZTo6bW92aWVUaW1lQ2hhbmdlZChRVE1vdmllV2luKiBtb3ZpZSkKK3ZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6TW92aWVDbGllbnQ6Om1vdmllTG9hZFN0YXRl
Q2hhbmdlZChRVE1vdmllKiBtb3ZpZSkKIHsKLSAgICBpZiAobV9oYXNVbnN1cHBvcnRlZFRyYWNr
cykKKyAgICBpZiAobV9wYXJlbnQtPm1faGFzVW5zdXBwb3J0ZWRUcmFja3MpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIEFTU0VSVChtX3F0TW92aWUuZ2V0KCkgPT0gbW92aWUpOwotICAgIHVwZGF0
ZVN0YXRlcygpOwotICAgIG1fcGxheWVyLT50aW1lQ2hhbmdlZCgpOworICAgIEFTU0VSVChtX3Bh
cmVudC0+bV9tb3ZpZS5nZXQoKSA9PSBtb3ZpZSk7CisgICAgbV9wYXJlbnQtPnVwZGF0ZVN0YXRl
cygpOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6bW92aWVOZXdJbWFnZUF2YWlsYWJs
ZShRVE1vdmllV2luKiBtb3ZpZSkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlz
dWFsQ29udGV4dDo6TW92aWVDbGllbnQ6Om1vdmllVGltZUNoYW5nZWQoUVRNb3ZpZSogbW92aWUp
CiB7Ci0gICAgaWYgKG1faGFzVW5zdXBwb3J0ZWRUcmFja3MpCisgICAgaWYgKG1fcGFyZW50LT5t
X2hhc1Vuc3VwcG9ydGVkVHJhY2tzKQogICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQobV9x
dE1vdmllLmdldCgpID09IG1vdmllKTsKLSNpZiBEUkFXX0ZSQU1FX1JBVEUKLSAgICBpZiAobV9z
dGFydGVkUGxheWluZykgewotICAgICAgICBtX2ZyYW1lQ291bnRXaGlsZVBsYXlpbmcrKzsKLSAg
ICAgICAgLy8gVG8gZWxpbWluYXRlIHByZXJvbGwgY29zdHMgZnJvbSBvdXIgY2FsY3VsYXRpb24s
IG91ciBmcmFtZSByYXRlIGNhbGN1bGF0aW9uIGV4Y2x1ZGVzCi0gICAgICAgIC8vIHRoZSBmaXJz
dCBmcmFtZSBkcmF3biBhZnRlciBwbGF5YmFjayBzdGFydHMuCi0gICAgICAgIGlmIChtX2ZyYW1l
Q291bnRXaGlsZVBsYXlpbmcgPT0gMSkKLSAgICAgICAgICAgIG1fdGltZVN0YXJ0ZWRQbGF5aW5n
ID0gV1RGOjpjdXJyZW50VGltZSgpOwotICAgIH0KLSNlbmRpZgotCi0gICAgbV9uZXdGcmFtZUF2
YWlsYWJsZSA9IHRydWU7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAg
aWYgKG1fcXRWaWRlb0xheWVyKQotICAgICAgICBtX3F0VmlkZW9MYXllci0+cGxhdGZvcm1MYXll
cigpLT5zZXROZWVkc0Rpc3BsYXkoKTsKLSAgICBlbHNlCi0jZW5kaWYKLSAgICAgICAgbV9wbGF5
ZXItPnJlcGFpbnQoKTsKKyAgICBBU1NFUlQobV9wYXJlbnQtPm1fbW92aWUuZ2V0KCkgPT0gbW92
aWUpOworICAgIG1fcGFyZW50LT51cGRhdGVTdGF0ZXMoKTsKKyAgICBtX3BhcmVudC0+bV9wbGF5
ZXItPnRpbWVDaGFuZ2VkKCk7CiB9CiAKLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlOjpoYXNTaW5n
bGVTZWN1cml0eU9yaWdpbigpIGNvbnN0Citib29sIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGlt
ZVZpc3VhbENvbnRleHQ6Omhhc1NpbmdsZVNlY3VyaXR5T3JpZ2luKCkgY29uc3QKIHsKICAgICAv
LyBXZSB0ZWxsIHF1aWNrdGltZSB0byBkaXNhbGxvdyByZXNvdXJjZXMgdGhhdCBjb21lIGZyb20g
ZGlmZmVyZW50IG9yaWdpbnMKICAgICAvLyBzbyB3ZSBhbGwgbWVkaWEgaXMgc2luZ2xlIG9yaWdp
bi4KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotTWVkaWFQbGF5ZXJQcml2YXRlOjpNZWRpYVJlbmRl
cmluZ01vZGUgTWVkaWFQbGF5ZXJQcml2YXRlOjpjdXJyZW50UmVuZGVyaW5nTW9kZSgpIGNvbnN0
CitNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpNZWRpYVJlbmRlcmlu
Z01vZGUgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6Y3VycmVudFJl
bmRlcmluZ01vZGUoKSBjb25zdAogewotICAgIGlmICghbV9xdE1vdmllKQorICAgIGlmICghbV9t
b3ZpZSkKICAgICAgICAgcmV0dXJuIE1lZGlhUmVuZGVyaW5nTm9uZTsKIAogI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKQEAgLTgyNSw5ICs4NDcsOSBAQA0KICAgICByZXR1cm4gTWVk
aWFSZW5kZXJpbmdTb2Z0d2FyZVJlbmRlcmVyOwogfQogCi1NZWRpYVBsYXllclByaXZhdGU6Ok1l
ZGlhUmVuZGVyaW5nTW9kZSBNZWRpYVBsYXllclByaXZhdGU6OnByZWZlcnJlZFJlbmRlcmluZ01v
ZGUoKSBjb25zdAorTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6TWVk
aWFSZW5kZXJpbmdNb2RlIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6
OnByZWZlcnJlZFJlbmRlcmluZ01vZGUoKSBjb25zdAogewotICAgIGlmICghbV9wbGF5ZXItPmZy
YW1lVmlldygpIHx8ICFtX3F0TW92aWUpCisgICAgaWYgKCFtX3BsYXllci0+ZnJhbWVWaWV3KCkg
fHwgIW1fbW92aWUpCiAgICAgICAgIHJldHVybiBNZWRpYVJlbmRlcmluZ05vbmU7CiAKICNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCkBAIC04MzgsNyArODYwLDcgQEANCiAgICAgcmV0
dXJuIE1lZGlhUmVuZGVyaW5nU29mdHdhcmVSZW5kZXJlcjsKIH0KIAotdm9pZCBNZWRpYVBsYXll
clByaXZhdGU6OnNldFVwVmlkZW9SZW5kZXJpbmcoKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVR
dWlja1RpbWVWaXN1YWxDb250ZXh0OjpzZXRVcFZpZGVvUmVuZGVyaW5nKCkKIHsKICAgICBNZWRp
YVJlbmRlcmluZ01vZGUgY3VycmVudE1vZGUgPSBjdXJyZW50UmVuZGVyaW5nTW9kZSgpOwogICAg
IE1lZGlhUmVuZGVyaW5nTW9kZSBwcmVmZXJyZWRNb2RlID0gcHJlZmVycmVkUmVuZGVyaW5nTW9k
ZSgpOwpAQCAtODYwLDE3ICs4ODIsMjEgQEANCiAgICAgaWYgKGN1cnJlbnRNb2RlID09IE1lZGlh
UmVuZGVyaW5nTW92aWVMYXllciB8fCBwcmVmZXJyZWRNb2RlID09IE1lZGlhUmVuZGVyaW5nTW92
aWVMYXllcikKICAgICAgICAgbV9wbGF5ZXItPm1lZGlhUGxheWVyQ2xpZW50KCktPm1lZGlhUGxh
eWVyUmVuZGVyaW5nTW9kZUNoYW5nZWQobV9wbGF5ZXIpOwogI2VuZGlmCisKKyAgICBtX3Zpc3Vh
bENvbnRleHQtPnNldE1vdmllKG1fbW92aWUuZ2V0KCkpOwogfQogCi12b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZTo6dGVhckRvd25WaWRlb1JlbmRlcmluZygpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OnRlYXJEb3duVmlkZW9SZW5kZXJpbmcoKQogewogI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICBpZiAobV9xdFZpZGVvTGF5ZXIpCiAg
ICAgICAgIGRlc3Ryb3lMYXllckZvck1vdmllKCk7CiAjZW5kaWYKKworICAgIG1fdmlzdWFsQ29u
dGV4dC0+c2V0TW92aWUoMCk7CiB9CiAKLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlOjpoYXNTZXRV
cFZpZGVvUmVuZGVyaW5nKCkgY29uc3QKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1l
VmlzdWFsQ29udGV4dDo6aGFzU2V0VXBWaWRlb1JlbmRlcmluZygpIGNvbnN0CiB7CiAjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIHJldHVybiBtX3F0VmlkZW9MYXllciB8fCBj
dXJyZW50UmVuZGVyaW5nTW9kZSgpICE9IE1lZGlhUmVuZGVyaW5nTW92aWVMYXllcjsKQEAgLTg3
OSw1NiArOTA1LDE4IEBADQogI2VuZGlmCiB9CiAKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCi0KLS8vIFVwLWNhbGwgZnJvbSBjb21wb3NpdGluZyBsYXllciBkcmF3aW5nIGNhbGxi
YWNrLgotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnBhaW50Q29udGVudHMoY29uc3QgR3JhcGhp
Y3NMYXllciosIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgR3JhcGhpY3NMYXllclBhaW50aW5n
UGhhc2UsIGNvbnN0IEludFJlY3QmKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVW
aXN1YWxDb250ZXh0OjpjcmVhdGVMYXllckZvck1vdmllKCkKIHsKLSAgICAgaWYgKG1faGFzVW5z
dXBwb3J0ZWRUcmFja3MpCi0gICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoc3VwcG9ydHNB
Y2NlbGVyYXRlZFJlbmRlcmluZygpKTsKLQotICAgIC8vIE5vIHJlYXNvbiB0byByZXBsYWNlIHRo
ZSBjdXJyZW50IGxheWVyIGltYWdlIHVubGVzcyB3ZSBoYXZlIHNvbWV0aGluZyBuZXcgdG8gc2hv
dy4KLSAgICBpZiAoIW1fbmV3RnJhbWVBdmFpbGFibGUpCi0gICAgICAgIHJldHVybjsKLQotICAg
IHN0YXRpYyBDR0NvbG9yU3BhY2VSZWYgY29sb3JTcGFjZSA9IENHQ29sb3JTcGFjZUNyZWF0ZURl
dmljZVJHQigpOwotICAgIHZvaWQqIGJ1ZmZlcjsKLSAgICB1bnNpZ25lZCBiaXRzUGVyUGl4ZWw7
Ci0gICAgdW5zaWduZWQgcm93Qnl0ZXM7Ci0gICAgdW5zaWduZWQgd2lkdGg7Ci0gICAgdW5zaWdu
ZWQgaGVpZ2h0OwotCi0gICAgbV9xdE1vdmllLT5nZXRDdXJyZW50RnJhbWVJbmZvKGJ1ZmZlciwg
Yml0c1BlclBpeGVsLCByb3dCeXRlcywgd2lkdGgsIGhlaWdodCk7Ci0gICAgaWYgKCFidWZmZXIp
Ci0gICAgICAgIHJldHVybiA7Ci0KLSAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBkYXRhKEFkb3B0
Q0YsIENGRGF0YUNyZWF0ZVdpdGhCeXRlc05vQ29weSgwLCBzdGF0aWNfY2FzdDxVSW50OCo+KGJ1
ZmZlciksIHJvd0J5dGVzICogaGVpZ2h0LCBrQ0ZBbGxvY2F0b3JOdWxsKSk7Ci0gICAgUmV0YWlu
UHRyPENHRGF0YVByb3ZpZGVyUmVmPiBwcm92aWRlcihBZG9wdENGLCBDR0RhdGFQcm92aWRlckNy
ZWF0ZVdpdGhDRkRhdGEoZGF0YS5nZXQoKSkpOwotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBm
cmFtZUltYWdlKEFkb3B0Q0YsIENHSW1hZ2VDcmVhdGUod2lkdGgsIGhlaWdodCwgOCwgYml0c1Bl
clBpeGVsLCByb3dCeXRlcywgY29sb3JTcGFjZSwgCi0gICAgICAgIGtDR0JpdG1hcEJ5dGVPcmRl
cjMyTGl0dGxlIHwga0NHSW1hZ2VBbHBoYUZpcnN0LCBwcm92aWRlci5nZXQoKSwgMCwgZmFsc2Us
IGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpKTsKLSAgICBpZiAoIWZyYW1lSW1hZ2UpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIEludFJlY3QgcmVjdCgwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9z
aXplLmhlaWdodCgpKTsKLSAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dC5wbGF0Zm9ybUNv
bnRleHQoKSwgcmVjdCwgZnJhbWVJbWFnZS5nZXQoKSk7IAotICAgIHBhaW50Q29tcGxldGVkKGNv
bnRleHQsIHJlY3QpOwotfQotI2VuZGlmCi0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpjcmVh
dGVMYXllckZvck1vdmllKCkKLXsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAg
ICAgQVNTRVJUKHN1cHBvcnRzQWNjZWxlcmF0ZWRSZW5kZXJpbmcoKSk7CiAKLSAgICBpZiAoIW1f
cXRNb3ZpZSB8fCBtX3F0VmlkZW9MYXllcikKKyAgICBpZiAoIW1fbW92aWUgfHwgbV9xdFZpZGVv
TGF5ZXIpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIENyZWF0ZSBhIEdyYXBoaWNzTGF5ZXIg
dGhhdCB3b24ndCBiZSBpbnNlcnRlZCBkaXJlY3RseSBpbnRvIHRoZSByZW5kZXIgdHJlZSwgYnV0
IHdpbGwgdXNlZCAKICAgICAvLyBhcyBhIHdyYXBwZXIgZm9yIGEgV0tDQUNGTGF5ZXIgd2hpY2gg
Z2V0cyBpbnNlcnRlZCBhcyB0aGUgY29udGVudCBsYXllciBvZiB0aGUgdmlkZW8gCiAgICAgLy8g
cmVuZGVyZXIncyBHcmFwaGljc0xheWVyLgotICAgIG1fcXRWaWRlb0xheWVyLnNldChuZXcgR3Jh
cGhpY3NMYXllckNBQ0YodGhpcykpOworICAgIG1fcXRWaWRlb0xheWVyLnNldChuZXcgR3JhcGhp
Y3NMYXllckNBQ0YobV9sYXllckNsaWVudC5nZXQoKSkpOwogICAgIGlmICghbV9xdFZpZGVvTGF5
ZXIpCiAgICAgICAgIHJldHVybjsKIApAQCAtOTQzLDcgKzkzMSw3IEBADQogI2VuZGlmCiB9CiAK
LXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpkZXN0cm95TGF5ZXJGb3JNb3ZpZSgpCit2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OmRlc3Ryb3lMYXllckZvck1v
dmllKCkKIHsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgaWYgKCFtX3F0
VmlkZW9MYXllcikKQEAgLTk1MiwxMyArOTQwLDE3IEBADQogI2VuZGlmCiB9CiAKK3ZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6TGF5ZXJDbGllbnQ6OnBhaW50
Q29udGVudHMoY29uc3QgR3JhcGhpY3NMYXllciosIEdyYXBoaWNzQ29udGV4dCYsIEdyYXBoaWNz
TGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBJbnRSZWN0JiBpbkNsaXApCit7Cit9CisKICNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6c3Vw
cG9ydHNBY2NlbGVyYXRlZFJlbmRlcmluZygpIGNvbnN0Citib29sIE1lZGlhUGxheWVyUHJpdmF0
ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OnN1cHBvcnRzQWNjZWxlcmF0ZWRSZW5kZXJpbmcoKSBj
b25zdAogewogICAgIHJldHVybiBpc1JlYWR5Rm9yUmVuZGVyaW5nKCk7CiB9CiAKLXZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlOjphY2NlbGVyYXRlZFJlbmRlcmluZ1N0YXRlQ2hhbmdlZCgpCit2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OmFjY2VsZXJhdGVkUmVu
ZGVyaW5nU3RhdGVDaGFuZ2VkKCkKIHsKICAgICAvLyBTZXQgdXAgb3IgY2hhbmdlIHRoZSByZW5k
ZXJpbmcgcGF0aCBpZiBuZWNlc3NhcnkuCiAgICAgc2V0VXBWaWRlb1JlbmRlcmluZygpOwpJbmRl
eDogTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dC5oDQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
DQotLS0gTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dC5oCShyZXZpc2lv
biA1NzY2MykNCisrKyBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0LmgJ
KHdvcmtpbmcgY29weSkNCkBAIC0yMywyNiArMjMsMjUgQEANCiAgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAq
LwogCi0jaWZuZGVmIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0X2gKLSNkZWZpbmUgTWVkaWFQbGF5
ZXJQcml2YXRlUVRLaXRfaAorI2lmbmRlZiBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1
YWxDb250ZXh0X2gKKyNkZWZpbmUgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29u
dGV4dF9oCiAKICNpZiBFTkFCTEUoVklERU8pCiAKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyQ2xp
ZW50LmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlLmgiCiAjaW5jbHVkZSAiVGltZXIu
aCIKLSNpbmNsdWRlIDxRVE1vdmllV2luLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2lu
Y2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIAotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKLSNpbmNsdWRlICJHcmFwaGljc0xheWVyQ2xpZW50LmgiCi0jZW5kaWYgCi0KICNpZm5kZWYg
RFJBV19GUkFNRV9SQVRFCiAjZGVmaW5lIERSQVdfRlJBTUVfUkFURSAwCiAjZW5kaWYKIAogdHlw
ZWRlZiBzdHJ1Y3QgQ0dJbWFnZSAqQ0dJbWFnZVJlZjsKK2NsYXNzIFFUTW92aWU7CitjbGFzcyBR
VE1vdmllVmlzdWFsQ29udGV4dDsKK2NsYXNzIFdLQ0FJbWFnZVF1ZXVlOwogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKQEAgLTUxLDM0ICs1MCwxOCBAQA0KIGNsYXNzIEludFJlY3Q7CiBjbGFzcyBT
dHJpbmc7CiAKLWNsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZSA6IHB1YmxpYyBNZWRpYVBsYXllclBy
aXZhdGVJbnRlcmZhY2UsIHB1YmxpYyBRVE1vdmllV2luQ2xpZW50IAotI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKLSAgICAgICAgLCBwdWJsaWMgR3JhcGhpY3NMYXllckNsaWVudAot
I2VuZGlmIAoteworY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4
dCA6IHB1YmxpYyBNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2UgewogcHVibGljOgogICAgIHN0
YXRpYyB2b2lkIHJlZ2lzdGVyTWVkaWFFbmdpbmUoTWVkaWFFbmdpbmVSZWdpc3RyYXIpOwogCi0g
ICAgfk1lZGlhUGxheWVyUHJpdmF0ZSgpOworICAgIH5NZWRpYVBsYXllclByaXZhdGVRdWlja1Rp
bWVWaXN1YWxDb250ZXh0KCk7CiAKIHByaXZhdGU6CisgICAgTWVkaWFQbGF5ZXJQcml2YXRlUXVp
Y2tUaW1lVmlzdWFsQ29udGV4dChNZWRpYVBsYXllciopOwogCi0jaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQotICAgIC8vIEdyYXBoaWNzTGF5ZXJDbGllbnQgbWV0aG9kcwotICAgIHZp
cnR1YWwgdm9pZCBwYWludENvbnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGljc0Nv
bnRleHQmLCBHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgSW50UmVjdCYgaW5DbGlw
KTsKLSAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QW5pbWF0aW9uU3RhcnRlZChjb25zdCBHcmFwaGlj
c0xheWVyKiwgZG91YmxlIHRpbWUpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBub3RpZnlTeW5jUmVx
dWlyZWQoY29uc3QgR3JhcGhpY3NMYXllciopIHsgfQotICAgIHZpcnR1YWwgYm9vbCBzaG93RGVi
dWdCb3JkZXJzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgc2hv
d1JlcGFpbnRDb3VudGVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSNlbmRpZiAKLQotICAg
IE1lZGlhUGxheWVyUHJpdmF0ZShNZWRpYVBsYXllciopOwotCiAgICAgdmlydHVhbCBib29sIHN1
cHBvcnRzRnVsbHNjcmVlbigpIGNvbnN0OwogICAgIHZpcnR1YWwgUGxhdGZvcm1NZWRpYSBwbGF0
Zm9ybU1lZGlhKCkgY29uc3Q7Ci0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAg
IFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdDsKLSNlbmRpZgogCiAgICAgSW50
U2l6ZSBuYXR1cmFsU2l6ZSgpIGNvbnN0OwogICAgIGJvb2wgaGFzVmlkZW8oKSBjb25zdDsKQEAg
LTEyNiwyNSArMTA5LDE4IEBADQogICAgIHZvaWQgdXBkYXRlU3RhdGVzKCk7CiAgICAgdm9pZCBk
b1NlZWsoKTsKICAgICB2b2lkIGNhbmNlbFNlZWsoKTsKLSAgICB2b2lkIHNlZWtUaW1lckZpcmVk
KFRpbWVyPE1lZGlhUGxheWVyUHJpdmF0ZT4qKTsKKyAgICB2b2lkIHNlZWtUaW1lckZpcmVkKFRp
bWVyPE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ+Kik7CiAgICAgZmxv
YXQgbWF4VGltZUxvYWRlZCgpIGNvbnN0OwogICAgIHZvaWQgc2F3VW5zdXBwb3J0ZWRUcmFja3Mo
KTsKIAotICAgIHZpcnR1YWwgdm9pZCBtb3ZpZUVuZGVkKFFUTW92aWVXaW4qKTsKLSAgICB2aXJ0
dWFsIHZvaWQgbW92aWVMb2FkU3RhdGVDaGFuZ2VkKFFUTW92aWVXaW4qKTsKLSAgICB2aXJ0dWFs
IHZvaWQgbW92aWVUaW1lQ2hhbmdlZChRVE1vdmllV2luKik7Ci0gICAgdmlydHVhbCB2b2lkIG1v
dmllTmV3SW1hZ2VBdmFpbGFibGUoUVRNb3ZpZVdpbiopOwotCiAgICAgLy8gZW5naW5lIHN1cHBv
cnQKICAgICBzdGF0aWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlKiBjcmVhdGUoTWVkaWFQ
bGF5ZXIqKTsKICAgICBzdGF0aWMgdm9pZCBnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmlu
Zz4mIHR5cGVzKTsKICAgICBzdGF0aWMgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBzdXBwb3J0
c1R5cGUoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGNvZGVjcyk7CiAgICAgc3Rh
dGljIGJvb2wgaXNBdmFpbGFibGUoKTsKIAotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNBY2NlbGVyYXRlZFJlbmRlcmluZygpIGNvbnN0
OwogICAgIHZpcnR1YWwgdm9pZCBhY2NlbGVyYXRlZFJlbmRlcmluZ1N0YXRlQ2hhbmdlZCgpOwot
I2VuZGlmCiAKICAgICBlbnVtIE1lZGlhUmVuZGVyaW5nTW9kZSB7IE1lZGlhUmVuZGVyaW5nTm9u
ZSwgTWVkaWFSZW5kZXJpbmdTb2Z0d2FyZVJlbmRlcmVyLCBNZWRpYVJlbmRlcmluZ01vdmllTGF5
ZXIgfTsKICAgICBNZWRpYVJlbmRlcmluZ01vZGUgY3VycmVudFJlbmRlcmluZ01vZGUoKSBjb25z
dDsKQEAgLTE2MSwxMyArMTM3LDI4IEBADQogICAgIHZvaWQgc2V0VXBDb29raWVzRm9yUXVpY2tU
aW1lKGNvbnN0IFN0cmluZyYgdXJsKTsKICAgICBTdHJpbmcgcmZjMjYxNkRhdGVTdHJpbmdGcm9t
VGltZShDRkFic29sdXRlVGltZSk7CiAKKyAgICB2b2lkIHZpc3VhbENvbnRleHRUaW1lckZpcmVk
KFRpbWVyPE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ+Kik7CisgICAg
dm9pZCByZXRyaWV2ZUN1cnJlbnRJbWFnZSgpOworCisgICAgY2xhc3MgTW92aWVDbGllbnQ7Cisg
ICAgZnJpZW5kIGNsYXNzIE1vdmllQ2xpZW50OworICAgIE93blB0cjxNb3ZpZUNsaWVudD4gbV9t
b3ZpZUNsaWVudDsKKworICAgIGNsYXNzIExheWVyQ2xpZW50OworICAgIGZyaWVuZCBjbGFzcyBM
YXllckNsaWVudDsKKyAgICBPd25QdHI8TGF5ZXJDbGllbnQ+IG1fbGF5ZXJDbGllbnQ7CisKKyAg
ICBjbGFzcyBWaXN1YWxDb250ZXh0Q2xpZW50OworICAgIGZyaWVuZCBjbGFzcyBWaXN1YWxDb250
ZXh0Q2xpZW50OworICAgIE93blB0cjxWaXN1YWxDb250ZXh0Q2xpZW50PiBtX3Zpc3VhbENvbnRl
eHRDbGllbnQ7CisKICAgICBNZWRpYVBsYXllciogbV9wbGF5ZXI7Ci0gICAgT3duUHRyPFFUTW92
aWVXaW4+IG1fcXRNb3ZpZTsKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAg
UmVmUHRyPFFUTW92aWU+IG1fbW92aWU7CiAgICAgT3duUHRyPEdyYXBoaWNzTGF5ZXI+IG1fcXRW
aWRlb0xheWVyOwotI2VuZGlmCisgICAgUmVmUHRyPFFUTW92aWVWaXN1YWxDb250ZXh0PiBtX3Zp
c3VhbENvbnRleHQ7CiAgICAgZmxvYXQgbV9zZWVrVG87Ci0gICAgVGltZXI8TWVkaWFQbGF5ZXJQ
cml2YXRlPiBtX3NlZWtUaW1lcjsKKyAgICBUaW1lcjxNZWRpYVBsYXllclByaXZhdGVRdWlja1Rp
bWVWaXN1YWxDb250ZXh0PiBtX3NlZWtUaW1lcjsKKyAgICBUaW1lcjxNZWRpYVBsYXllclByaXZh
dGVRdWlja1RpbWVWaXN1YWxDb250ZXh0PiBtX3Zpc3VhbENvbnRleHRUaW1lcjsKICAgICBJbnRT
aXplIG1fc2l6ZTsKICAgICBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIG1fbmV0d29ya1N0YXRl
OwogICAgIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIG1fcmVhZHlTdGF0ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54504</attachid>
            <date>2010-04-27 19:11:38 -0700</date>
            <delta_ts>2010-04-27 20:49:32 -0700</delta_ts>
            <desc>New class MediaPlayerPrivateTaskTimer</desc>
            <filename>7569713-MediaPlayerPrivate-NewClasses.patch</filename>
            <type>text/plain</type>
            <size>4339</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">SW5kZXg6IE1lZGlhUGxheWVyUHJpdmF0ZVRhc2tUaW1lci5jcHANCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBN
ZWRpYVBsYXllclByaXZhdGVUYXNrVGltZXIuY3BwCShyZXZpc2lvbiAwKQ0KKysrIE1lZGlhUGxh
eWVyUHJpdmF0ZVRhc2tUaW1lci5jcHAJKHJldmlzaW9uIDApDQpAQCAtMCwwICsxLDY1IEBADQor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlVGFza1Rp
bWVyLmgiCisKKyNpbmNsdWRlICJRVE1vdmllVGFzay5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK01lZGlhUGxheWVyUHJpdmF0ZVRhc2tUaW1lciogTWVkaWFQbGF5ZXJQcml2YXRlVGFza1Rp
bWVyOjpzX3RpbWVyID0gMDsKKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVUYXNrVGltZXI6Omlu
aXRpYWxpemUoKQoreworICAgIGlmIChzX3RpbWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBz
X3RpbWVyID0gbmV3IE1lZGlhUGxheWVyUHJpdmF0ZVRhc2tUaW1lcjsKKworICAgIFFUTW92aWVU
YXNrOjpzaGFyZWRUYXNrKCktPnNldFRhc2tUaW1lckZ1bmNzKHNldERlbGF5LCBzdG9wVGFza1Rp
bWVyKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVUYXNrVGltZXI6OnNldERlbGF5KGRv
dWJsZSBkZWxheUluU2Vjb25kcykKK3sKKyAgICBBU1NFUlQoc190aW1lcik7CisKKyAgICBzX3Rp
bWVyLT5zdGFydE9uZVNob3QoZGVsYXlJblNlY29uZHMpOworfQorCit2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZVRhc2tUaW1lcjo6c3RvcFRhc2tUaW1lcigpCit7CisgICAgQVNTRVJUKHNfdGltZXIp
OworCisgICAgc190aW1lci0+c3RvcCgpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVRh
c2tUaW1lcjo6ZmlyZWQoKQoreworICAgIFFUTW92aWVUYXNrOjpzaGFyZWRUYXNrKCktPmZpcmVU
YXNrQ2xpZW50cygpOworfQorCit9CkluZGV4OiBNZWRpYVBsYXllclByaXZhdGVUYXNrVGltZXIu
aA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQ0KLS0tIE1lZGlhUGxheWVyUHJpdmF0ZVRhc2tUaW1lci5oCShyZXZpc2lv
biAwKQ0KKysrIE1lZGlhUGxheWVyUHJpdmF0ZVRhc2tUaW1lci5oCShyZXZpc2lvbiAwKQ0KQEAg
LTAsMCArMSw0OCBAQA0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgTWVkaWFQbGF5ZXJQcml2YXRlVGFza1RpbWVyX2gKKyNk
ZWZpbmUgTWVkaWFQbGF5ZXJQcml2YXRlVGFza1RpbWVyX2gKKworI2luY2x1ZGUgIlRpbWVyLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlVGFza1Rp
bWVyIDogVGltZXJCYXNlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplKCk7
CisgICAgCitwcml2YXRlOgorICAgIHN0YXRpYyB2b2lkIHNldERlbGF5KGRvdWJsZSk7CisgICAg
c3RhdGljIHZvaWQgc3RvcFRhc2tUaW1lcigpOworCisgICAgdm9pZCBmaXJlZCgpOworCisgICAg
c3RhdGljIE1lZGlhUGxheWVyUHJpdmF0ZVRhc2tUaW1lciogc190aW1lcjsKK307CisKK30KKwor
I2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54505</attachid>
            <date>2010-04-27 19:17:11 -0700</date>
            <delta_ts>2010-04-27 20:49:55 -0700</delta_ts>
            <desc>Added MediaPlayerPrivateQuickTimeWin support to MediaPlayer</desc>
            <filename>7569713-MediaPlayer.patch</filename>
            <type>text/plain</type>
            <size>907</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">SW5kZXg6IE1lZGlhUGxheWVyLmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIE1lZGlhUGxheWVyLmNwcAko
cmV2aXNpb24gNTgxODcpDQorKysgTWVkaWFQbGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpDQpAQCAt
NDYsNyArNDYsOCBAQA0KICNlbGlmIE9TKFdJTkNFKSAmJiAhUExBVEZPUk0oUVQpCiAjaW5jbHVk
ZSAiTWVkaWFQbGF5ZXJQcml2YXRlV2luY2UuaCIKICNlbGlmIFBMQVRGT1JNKFdJTikKLSNpbmNs
dWRlICJNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVXaW4uaCIKKyNpbmNsdWRlICJNZWRpYVBs
YXllclByaXZhdGVRdWlja3RpbWVXaW4uaCIKKyNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVR
dWlja1RpbWVWaXN1YWxDb250ZXh0LmgiCiAjZWxpZiBQTEFURk9STShHVEspCiAjaW5jbHVkZSAi
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgiCiAjZWxpZiBQTEFURk9STShRVCkKQEAgLTE2
Miw2ICsxNjMsOSBAQA0KICNpZiBVU0UoR1NUUkVBTUVSKQogICAgICAgICBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OnJlZ2lzdGVyTWVkaWFFbmdpbmUoYWRkTWVkaWFFbmdpbmUpOwogI2Vs
c2UKKyNpZiBQTEFURk9STShXSU4pCisgICAgICAgIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGlt
ZVZpc3VhbENvbnRleHQ6OnJlZ2lzdGVyTWVkaWFFbmdpbmUoYWRkTWVkaWFFbmdpbmUpOworI2Vu
ZGlmCiAgICAgICAgIC8vIEZJWE1FOiBjdXJyZW50bHkgYWxsIHRoZSBNZWRpYUVuZ2luZXMgYXJl
IG5hbWVkCiAgICAgICAgIC8vIE1lZGlhUGxheWVyUHJpdmF0ZS4gVGhpcyBjb2RlIHdpbGwgbmVl
ZCBhbiB1cGRhdGUgd2hlbiBidWcKICAgICAgICAgLy8gMzY2NjMgaXMgYWRyZXNzZWQuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54506</attachid>
            <date>2010-04-27 19:17:48 -0700</date>
            <delta_ts>2010-04-27 20:51:13 -0700</delta_ts>
            <desc>Added cancelCallOnMainThread</desc>
            <filename>7569713-MainThread.patch</filename>
            <type>text/plain</type>
            <size>3924</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIENoYW5nZUxvZwkocmV2aXNpb24gNTgz
NjIpDQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpDQpAQCAtMSwzICsxLDIxIEBADQorMjAx
MC0wNC0yNyAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICA8aHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTM0MDA1PgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzU2OTcx
Mz4KKyAgICAgICAgCisgICAgICAgIEFkZGVkIGNhbmNlbENhbGxPbk1haW5UaHJlYWQuICBjYWxs
T25NYWluVGhyZWFkIHNob3VsZCBhbHdheXMgbm93IGJlIHBhaXJlZAorICAgICAgICB3aXRoIGNh
bmNlbENhbGxPbk1haW5UaHJlYWQgaW4gc2l0dWF0aW9ucyB3aGVyZSB0aGUgcmVmY29uIHBhc3Nl
ZCB0byBjYWxsT25NYWluVGhyZWFkCisgICAgICAgIG1heSBiZSBkZWFsbG9jZWQgYmVmb3JlIHRo
ZSBtYWluIHRocmVhZCBmdW5jdGlvbiBjYW4gYmUgZGlzcGF0Y2hlZC4gIAorICAgICAgICAKKyAg
ICAgICAgKiB3dGYvTWFpblRocmVhZC5jcHA6CisgICAgICAgIChXVEY6OkZ1bmN0aW9uV2l0aENv
bnRleHQ6Om9wZXJhdG9yID09ICk6IFN1cHBvcnRzIHRoZSBGdW5jdGlvbldpdGhDb250ZXh0Rmlu
ZGVyIHByZWRpY2F0ZSBmdW5jdG9yLgorICAgICAgICAoV1RGOjpGdW5jdGlvbldpdGhDb250ZXh0
RmluZGVyOjpGdW5jdGlvbldpdGhDb250ZXh0RmluZGVyKTogIFByZWRpY2F0ZSBmdW5jdG9yIGZv
ciB1c2Ugd2l0aCBEZXF1ZXVlOjpmaW5kSWYKKyAgICAgICAgKFdURjo6RnVuY3Rpb25XaXRoQ29u
dGV4dEZpbmRlcjo6b3BlcmF0b3IoKSk6CisgICAgICAgIChXVEY6OmNhbmNlbENhbGxPbk1haW5U
aHJlYWQpOgorICAgICAgICAqIHd0Zi9NYWluVGhyZWFkLmg6CisKIDIwMTAtMDQtMjcgIFN0ZXBo
YW5pZSBMZXdpcyAgPHNsZXdpc0BhcHBsZS5jb20+CiAKICAgICAgICAgRml4IFRpZ2VyIGJ1aWxk
LgpJbmRleDogSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLmRlZg0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQ0KLS0tIEphdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS5kZWYJKHJldmlzaW9uIDU4MTg3KQ0KKysrIEphdmFTY3JpcHRD
b3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5kZWYJKHdvcmtpbmcgY29w
eSkNCkBAIC03Niw2ICs3Niw3IEBADQogICAgID9jYWxsQEpTQ0BAWUE/QVZKU1ZhbHVlQDFAUEFW
RXhlY1N0YXRlQDFAVjIxQFc0Q2FsbFR5cGVAMUBBQlRDYWxsRGF0YUAxQDFBQlZBcmdMaXN0QDFA
QFoKICAgICA/Y2FsbE9uTWFpblRocmVhZEBXVEZAQFlBWFA2QVhQQVhAWjBAWgogICAgID9jYWxs
T25NYWluVGhyZWFkQW5kV2FpdEBXVEZAQFlBWFA2QVhQQVhAWjBAWgorICAgID9jYW5jZWxDYWxs
T25NYWluVGhyZWFkQFdURkBAWUFYUDZBWFBBWEBaMEBaCiAgICAgP2NoYW5nZVByb3RvdHlwZVRy
YW5zaXRpb25AU3RydWN0dXJlQEpTQ0BAU0E/QVY/JFBhc3NSZWZQdHJAVlN0cnVjdHVyZUBKU0NA
QEBXVEZAQFBBVjEyQFZKU1ZhbHVlQDJAQFoKICAgICA/Y2hhcmFjdGVyU3RhcnRpbmdBdEBTdHJp
bmdAV2ViQ29yZUBAUUJFSElAWgogICAgID9jaGFyYWN0ZXJzQFN0cmluZ0BXZWJDb3JlQEBRQkVQ
Ql9XWFoKSW5kZXg6IHd0Zi9NYWluVGhyZWFkLmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHd0Zi9NYWlu
VGhyZWFkLmNwcAkocmV2aXNpb24gNTgxODcpDQorKysgd3RmL01haW5UaHJlYWQuY3BwCSh3b3Jr
aW5nIGNvcHkpDQpAQCAtNTEsOCArNTEsMjIgQEANCiAgICAgICAgICwgc3luY0ZsYWcoc3luY0Zs
YWcpCiAgICAgeyAKICAgICB9CisgICAgYm9vbCBvcGVyYXRvciA9PSAoY29uc3QgRnVuY3Rpb25X
aXRoQ29udGV4dCYgbykKKyAgICB7CisgICAgICAgIHJldHVybiBmdW5jdGlvbiA9PSBvLmZ1bmN0
aW9uCisgICAgICAgICAgICAmJiBjb250ZXh0ID09IG8uY29udGV4dAorICAgICAgICAgICAgJiYg
c3luY0ZsYWcgPT0gby5zeW5jRmxhZzsKKyAgICB9CiB9OwogCitjbGFzcyBGdW5jdGlvbldpdGhD
b250ZXh0RmluZGVyIHsKK3B1YmxpYzoKKyAgICBGdW5jdGlvbldpdGhDb250ZXh0RmluZGVyKGNv
bnN0IEZ1bmN0aW9uV2l0aENvbnRleHQmIG0pIDogbShtKSB7fQorICAgIGJvb2wgb3BlcmF0b3Io
KSAoRnVuY3Rpb25XaXRoQ29udGV4dCYgbykgeyByZXR1cm4gbyA9PSBtOyB9CisgICAgRnVuY3Rp
b25XaXRoQ29udGV4dCBtOworfTsKKworCiB0eXBlZGVmIERlcXVlPEZ1bmN0aW9uV2l0aENvbnRl
eHQ+IEZ1bmN0aW9uUXVldWU7CiAKIHN0YXRpYyBib29sIGNhbGxiYWNrc1BhdXNlZDsgLy8gVGhp
cyBnbG9iYWwgdmFyaWFibGUgaXMgb25seSBhY2Nlc3NlZCBmcm9tIG1haW4gdGhyZWFkLgpAQCAt
MTQ3LDYgKzE2MSwyNCBAQA0KICAgICBzeW5jRmxhZy53YWl0KGZ1bmN0aW9uUXVldWVNdXRleCk7
CiB9CiAKK3ZvaWQgY2FuY2VsQ2FsbE9uTWFpblRocmVhZChNYWluVGhyZWFkRnVuY3Rpb24qIGZ1
bmN0aW9uLCB2b2lkKiBjb250ZXh0KQoreworICAgIEFTU0VSVChmdW5jdGlvbik7CisKKyAgICBN
dXRleExvY2tlciBsb2NrZXIobWFpblRocmVhZEZ1bmN0aW9uUXVldWVNdXRleCgpKTsKKworICAg
IEZ1bmN0aW9uV2l0aENvbnRleHRGaW5kZXIgcHJlZChGdW5jdGlvbldpdGhDb250ZXh0KGZ1bmN0
aW9uLCBjb250ZXh0KSk7CisKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAvLyBXZSBtdXN0
IHJlZGVmaW5lICdpJyBlYWNoIHBhc3MsIGJlY2F1c2UgdGhlIGl0ZXJlcmF0b3IncyBvcGVyYXRv
cj0gCisgICAgICAgIC8vIHJlcXVpcmVzICd0aGlzJyB0byBiZSB2YWxpZCwgYW5kIHJlbW92ZSgp
IGludmFsaWRhdGVzIGFsbCBpdGVyYXRvcnMKKyAgICAgICAgRnVuY3Rpb25RdWV1ZTo6aXRlcmF0
b3IgaShmdW5jdGlvblF1ZXVlKCkuZmluZElmKHByZWQpKTsKKyAgICAgICAgaWYgKGkgPT0gZnVu
Y3Rpb25RdWV1ZSgpLmVuZCgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGZ1bmN0aW9u
UXVldWUoKS5yZW1vdmUoaSk7CisgICAgfQorfQorCiB2b2lkIHNldE1haW5UaHJlYWRDYWxsYmFj
a3NQYXVzZWQoYm9vbCBwYXVzZWQpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKSW5k
ZXg6IHd0Zi9NYWluVGhyZWFkLmgNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSB3dGYvTWFpblRocmVhZC5oCShy
ZXZpc2lvbiA1ODE4NykNCisrKyB3dGYvTWFpblRocmVhZC5oCSh3b3JraW5nIGNvcHkpDQpAQCAt
NDEsNiArNDEsOCBAQA0KIC8vIEJsb2NrcyB0aGUgdGhyZWFkIHVudGlsIHRoZSBjYWxsIGZpbmlz
aGVzIG9uIHRoZSBtYWluIHRocmVhZC4gTWlzdXNpbmcgdGhpcyBjYW4gZWFzaWx5IGNhdXNlIGRl
YWRsb2Nrcy4KIHZvaWQgY2FsbE9uTWFpblRocmVhZEFuZFdhaXQoTWFpblRocmVhZEZ1bmN0aW9u
Kiwgdm9pZCogY29udGV4dCk7CiAKK3ZvaWQgY2FuY2VsQ2FsbE9uTWFpblRocmVhZChNYWluVGhy
ZWFkRnVuY3Rpb24qLCB2b2lkKiBjb250ZXh0KTsKKwogdm9pZCBzZXRNYWluVGhyZWFkQ2FsbGJh
Y2tzUGF1c2VkKGJvb2wgcGF1c2VkKTsKIAogLy8gTXVzdCBiZSBjYWxsZWQgZnJvbSB0aGUgbWFp
biB0aHJlYWQgKERhcndpbiBpcyBhbiBleGNlcHRpb24gdG8gdGhpcyBydWxlKS4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54507</attachid>
            <date>2010-04-27 19:18:31 -0700</date>
            <delta_ts>2010-04-27 20:52:45 -0700</delta_ts>
            <desc>ChangeLog changes.</desc>
            <filename>7569713-ChangeLog.patch</filename>
            <type>text/plain</type>
            <size>9285</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIENoYW5nZUxvZwkocmV2aXNpb24gNTgz
NjIpDQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpDQpAQCAtMSwzICsxLDE5MiBAQA0KKzIw
MTAtMDQtMjcgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgPGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0zNDAwNT4KKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc1Njk3
MTM+CisKKyAgICAgICAgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dCBo
YXMgYmVlbiBhZGRlZCBhcyBhIAorICAgICAgICBzdXBwb3J0ZWQgTWVkaWFQbGF5ZXIgaW1wbGVt
ZW50YXRpb24uICBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVXaW4KKyAgICAgICAgaGFzIGJl
ZW4gbGVmdCBhcyBhIGZhbGxiYWNrIE1lZGlhUGxheWVyIGltcGxlbWVudGF0aW9uIGZvciB0aG9z
ZSBtZWRpYQorICAgICAgICB0eXBlcyB3aGljaCBkbyBub3Qgc3VwcG9ydCB2aXN1YWwgY29udGV4
dHMgKGN1cnJlbnRseSwgbm9uZSkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9NZWRp
YVBsYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjppbnN0YWxsZWRNZWRpYUVuZ2luZXMpOgor
CisyMDEwLTA0LTI3ICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIDxodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQwMDU+CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83
NTY5NzEzPgorCisgICAgICAgIE1lZGlhUGxheWVyUHJpdmF0ZVRhc2tUaW1lciBoYXMgYmVlbiBi
cm9rZW4gb3V0IGZyb20gTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lV2luOjpUYXNrVGltZXIK
KyAgICAgICAgc28gdGhhdCBtdWx0aXBsZSBjbGllbnRzIGNhbiBzaGFyZSBpdHMgaW1wbGVtZW50
YXRpb24uICBJdCB3b3JrcyB3aXRoIHRoZSBuZXcgCisgICAgICAgIFFUTW92aWVUYXNrVGltZXIg
dG8gcHJvdmlkZSB0aW1lciBzdXBwb3J0IHRvIFFUTW92aWVUYXNrVGltZXIgY2xpZW50cy4KKyAg
ICAgICAgCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0
ZVRhc2tUaW1lci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlVGFza1RpbWVyOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZVRhc2tUaW1lcjo6c2V0RGVsYXkpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlVGFza1RpbWVyOjpzdG9wVGFza1RpbWVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZVRhc2tUaW1lcjo6ZmlyZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVUYXNrVGltZXIuaDogQWRkZWQuCisKKzIwMTAt
MDQtMjcgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgPGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0zNDAwNT4KKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc1Njk3MTM+
CisKKyAgICAgICAgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dCBpcyBh
IG5ldyBNZWRpYVBsYXllclByaXZhdGUgaW1wbGVtZW50YXRpb24KKyAgICAgICAgd2hpY2ggdXNl
cyBRVE1vdmllVmlzdWFsQ29udGV4dCBpbnN0ZWFkIG9mIFFUTW92aWVXaW4gdG8gcmVuZGVyIHZp
ZGVvIGZyYW1lcy4gTXVjaAorICAgICAgICBsaWtlIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGlt
ZVdpbiwgTVBQUVRWaXN1YWxDb250ZXh0IGJyZWFrcyBvdXQgUVRNb3ZpZSBhbmQgCisgICAgICAg
IFFUTW92aWVWaXN1YWxDb250ZXh0LCBhbmQgdXNlcyB0aGUgbmV3bHkgc2hhcmVkIE1lZGlhUGxh
eWVyUHJpdmF0ZVRhc2tUaW1lci4gIEl0IGFsc28KKyAgICAgICAgdXNlcyBhZ2dyZWdhdGlvbiAo
aW4gdGhlIGZvcm0gb2YgZnJpZW5kIGNsYXNzZXMpIGluc3RlYWQgb2YgbXVsdGlwbGUgaW5oZXJp
dGVuY2UgCisgICAgICAgIHRvIGltcGxlbWVudCBpdHMgdmFyaW91cyBjbGllbnQgY2FsbGJhY2tz
LCBzbyBhcyBub3QgdG8gZXhwb3NlIGl0cyBvd24gY2xpZW50cyB0bworICAgICAgICB0aGUgUVRN
b3ZpZSBjbGFzc2VzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxh
eWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQuY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVXaW4uY3Bw
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVRdWlj
a1RpbWVWaXN1YWxDb250ZXh0Lmg6IENvcGllZCBmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVdpbi5oLgorCisyMDEwLTA0LTI3ICBK
ZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MzQwMDU+CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83NTY5NzEzPgorICAgICAg
ICAKKyAgICAgICAgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lV2luIGhhcyBiZWVuIG1vZGlm
aWVkIHRvIHN1cHBvcnQgdGhlIG5ldyBiaWZ1cmNhdGVkIAorICAgICAgICBRVE1vdmllL1FUTW92
aWVXaW4gY2xhc3Nlcy4gIEl0J3MgcHJpdmF0ZSBUYXNrVGltZXIgY2xhc3MgaGFzIGJlZW4gYnJv
a2VuIG91dAorICAgICAgICBpbnRvIGEgbmV3IHRvcC1sZXZlbCBjbGFzcyAoTWVkaWFQbGF5ZXJQ
cml2YXRlVGFza1RpbWVyKSB3aGljaCB3aWxsIGJlIGFkZHJlc3NlZAorICAgICAgICBpbiBhIGZ1
dHVyZSBwYXRjaC4gCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5
ZXJQcml2YXRlUXVpY2tUaW1lV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZTo6fk1lZGlhUGxheWVyUHJpdmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGU6OmxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
OjpwYXVzZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRTaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0VmlzaWJsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnBhaW50KToKKyAgICAgICAgKFdl
YkNvcmU6Om1pbWVUeXBlQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlOjppc0F2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6
Om1vdmllRW5kZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjptb3Zp
ZUxvYWRTdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
Ojptb3ZpZVRpbWVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZTo6bW92aWVOZXdJbWFnZUF2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGU6OnBhaW50Q29udGVudHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9NZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVXaW4uaDoKKworMjAxMC0wNC0yNyAgSmVyIE5v
YmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTM0MDA1PgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzU2OTcxMz4KKworICAgICAgICBR
VENGRGljdGlvbmFyeSBkZWZpbmVzIGZ1bmN0aW9ucyB3aGljaCBoZWxwIHNlcmlhbGl6ZSBhbmQg
dW5zZXJpYWxpemUKKyAgICAgICAgQ0ZEaWN0aW9uYXJpZXMuICBUaGlzIGlzIG5lY2Vzc2FyeSBi
ZWNhdXNlIFF1aWNrVGltZSBsaW5rcyBhZ2FpbnN0IGEgCisgICAgICAgIG5vbi1kZWJ1ZyBDb3Jl
Rm91bmRhdGlvbiBpbiBvdXIgZGVidWcgYnVpbGQsIGFuZCBwYXNzaW5nIG5vbi1kZWJ1ZyAKKyAg
ICAgICAgQ0ZEaWN0aW9uYXJpZXMgdG8gYSBkZWJ1ZyBDRiB3aWxsIGNhdXNlIGEgY3Jhc2guCisg
ICAgICAgIAorICAgICAgICBRVE1vdmllVGFzayBpcyBhIG5ldyBjbGFzcyBjb250YWluaW5nIHRo
ZSB0YXNraW5nIGZ1bmN0aW9uYWxpdHkgYnJva2VuCisgICAgICAgIG91dCBmcm9tIFFUTW92aWVX
aW4uICBUaGlzIGlzIG5lY2Vzc2FyeSBub3cgdGhhdCB0aGUgdGFza2luZworICAgICAgICBmdW5j
dGlvbmFsaXR5IGlzIG5lZWRlZCBpbiBtdWx0aXBsZSBmaWxlcy9jbGFzc2VzLgorICAgICAgICAK
KyAgICAgICAgUVRQaXhlbEJ1ZmZlciBpcyBhIEMrKyB3cmFwcGVyIGZvciBDVlBpeGVsQnVmZmVy
cywgbmVjZXNzYXJ5IGJlY2F1c2UKKyAgICAgICAgbGlrZSB0aGUgQ0YgY2FzZSBhYm92ZSwgUXVp
Y2tUaW1lIGhhcyBpdHMgb3duIGltcGxlbWVudGF0aW9uIG9mIENvcmVWaWRlbworICAgICAgICBh
bmQgaXRzIENWIHR5cGVzIGNhbm5vdCBiZSB1c2VkIHdpdGggdGhlIEFBUyB2ZXJzaW9uIG9mIENv
cmVWaWRlby4KKyAgICAgICAgCisgICAgICAgIFFUTW92aWVWaXN1YWxDb250ZXh0IGlzIHRoZSBu
ZXcgZHJhd2luZyBpbXBsZW1lbnRhdGlvbiwgcGFyYWxsZWwgdG8gCisgICAgICAgIFFUTW92aWVX
aW4uICBJdCBjdXJyZW50bHkgdXNlcyBhIHNvZnR3YXJlIHJlbmRlcmluZyBwYXRoLCBidXQgY2Fu
IGJlCisgICAgICAgIGV4dGVuZGVkIGluIHRoZSBmdXR1cmUgdG8gc3VwcG9ydCBoYXJkd2FyZSBy
ZW5kZXJpbmcuCisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVENG
RGljdGlvbmFyeS5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9R
VENGRGljdGlvbmFyeS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
UVRNb3ZpZVRhc2suY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
UVRNb3ZpZVRhc2suaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FU
TW92aWVWaXN1YWxDb250ZXh0LmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL1FUTW92aWVWaXN1YWxDb250ZXh0Lmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9RVFBpeGVsQnVmZmVyLmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL1FUUGl4ZWxCdWZmZXIuaDogQWRkZWQuCisKKzIwMTAtMDQtMjcgIEpl
ciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0zNDAwNT4KKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc1Njk3MTM+CisKKyAgICAg
ICAgVGhlIG9yaWdpbmFsIGZ1bmN0aW9uYWxpdHkgb2YgUVRNb3ZpZVdpbiBoYXMgYmVlbiBzcGxp
dCBiZXR3ZWVuIFFUTW92aWVXaW4sIAorICAgICAgICBhbmQgYSBuZXcgY2xhc3M6IFFUTW92aWUu
ICBRVE1vdmllIGNvbnRhaW5zIGFsbCB0aGUgImNvbnRyb2xsZXIiIHBhcnRzIChjaGFuZ2luZwor
ICAgICAgICB0aGUgcmF0ZSwgc2Vla2luZywgZXRjKSB3aGlsZSBRVE1vdmllV2luIHJldGFpbnMg
YWxsIHRoZSBkcmF3aW5nIGNvZGUuICBRVE1vdmllV2luCisgICAgICAgIG5vdyB0YWtlcyBhIFFU
TW92aWUsIGFuZCBhcyBzdWNoIFFUTW92aWUgaXMgbm93IHJldGFpbmFibGUuICBRVE1vdmllV2lu
IHJlZ2lzdGVycworICAgICAgICBpdHNlbGYgYXMgYSBjbGllbnQgb2YgUVRNb3ZpZSwgc28gdGhh
dCBpdCBjYW4gcmVjZWl2ZSBsb2FkLXN0YXRlIG5vdGlmaWNhdGlvbnMsCisgICAgICAgIGFuZCB0
aHVzIFFUTW92aWUgbXVzdCBub3cgc3VwcG9ydCBtdWx0aXBsZSBjbGllbnRzLiAgTW92aWUgdGFz
a2luZyB0aW1lciBzdXBwb3J0CisgICAgICAgIGhhcyBiZWVuIG1vdmVkIGludG8gaXRzIG93biBj
bGFzcyAoUVRNb3ZpZVRhc2spIGFuZCB3aWxsIGJlIGFkZHJlc3NlZCBpbiBhIGZ1dHVyZSAKKyAg
ICAgICAgcGF0Y2guICBNb3N0IG9mIHRoZSBmdW5jdGlvbnMgbGlzdGVkIGJlbG93IG9ubHkgY2hh
bmdlZCBzbyBtdWNoIGFzIHRoZWlyIGNsYXNzIG5hbWUgY2hhbmdlZC4KKyAgICAgICAgCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWUuY3BwOiBDb3BpZWQgZnJvbSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVE1vdmllV2luLmNwcC4KKyAgICAgICAgKFFUTW92
aWVQcml2YXRlOjpRVE1vdmllUHJpdmF0ZSk6CisgICAgICAgIChRVE1vdmllUHJpdmF0ZTo6flFU
TW92aWVQcml2YXRlKToKKyAgICAgICAgKFFUTW92aWVQcml2YXRlOjpzdGFydFRhc2spOiBGdW5j
dGlvbmFsaXR5IG1vdmVkIHRvIFFUTW92aWVUYXNrLgorICAgICAgICAoUVRNb3ZpZVByaXZhdGU6
OmVuZFRhc2spOiBGdW5jdGlvbmFsaXR5IG1vdmVkIHRvIFFUTW92aWVUYXNrLgorICAgICAgICAo
UVRNb3ZpZVByaXZhdGU6OnRhc2spOiBEcmF3aW5nIGNvZGUgcmVtb3ZlZC4gIE11bHRpcGxlIGNs
aWVudCBzdXBwb3J0IGFkZGVkLgorICAgICAgICAoUVRNb3ZpZVByaXZhdGU6OmNyZWF0ZU1vdmll
Q29udHJvbGxlcik6IERyYXdpbmcgY29kZSByZW1vdmVkLgorICAgICAgICAoUVRNb3ZpZTo6UVRN
b3ZpZSk6CisgICAgICAgIChRVE1vdmllOjp+UVRNb3ZpZSk6CisgICAgICAgIChRVE1vdmllOjph
ZGRDbGllbnQpOiBNdWx0aXBsZSBjbGllbnQgc3VwcG9ydCBhZGRlZC4KKyAgICAgICAgKFFUTW92
aWU6OnJlbW92ZUNsaWVudCk6IE11bHRpcGxlIGNsaWVudCBzdXBwb3J0IGFkZGVkLgorICAgICAg
ICAoUVRNb3ZpZTo6cGxheSk6CisgICAgICAgIChRVE1vdmllOjpwYXVzZSk6CisgICAgICAgIChR
VE1vdmllOjpyYXRlKToKKyAgICAgICAgKFFUTW92aWU6OnNldFJhdGUpOgorICAgICAgICAoUVRN
b3ZpZTo6ZHVyYXRpb24pOgorICAgICAgICAoUVRNb3ZpZTo6Y3VycmVudFRpbWUpOgorICAgICAg
ICAoUVRNb3ZpZTo6c2V0Q3VycmVudFRpbWUpOgorICAgICAgICAoUVRNb3ZpZTo6c2V0Vm9sdW1l
KToKKyAgICAgICAgKFFUTW92aWU6OnNldFByZXNlcnZlc1BpdGNoKToKKyAgICAgICAgKFFUTW92
aWU6OmRhdGFTaXplKToKKyAgICAgICAgKFFUTW92aWU6Om1heFRpbWVMb2FkZWQpOgorICAgICAg
ICAoUVRNb3ZpZTo6bG9hZFN0YXRlKToKKyAgICAgICAgKFFUTW92aWU6OmdldE5hdHVyYWxTaXpl
KToKKyAgICAgICAgKFFUTW92aWU6OmxvYWQpOgorICAgICAgICAoUVRNb3ZpZTo6ZGlzYWJsZVVu
c3VwcG9ydGVkVHJhY2tzKToKKyAgICAgICAgKFFUTW92aWU6OmlzRGlzYWJsZWQpOiBOZXcgZnVu
Y3Rpb24gaW4gUVRNb3ZpZS4KKyAgICAgICAgKFFUTW92aWU6OnNldERpc2FibGVkKTogCisgICAg
ICAgIChRVE1vdmllOjpoYXNWaWRlbyk6CisgICAgICAgIChRVE1vdmllOjpoYXNBdWRpbyk6Cisg
ICAgICAgIChRVE1vdmllOjpoYXNDbG9zZWRDYXB0aW9ucyk6CisgICAgICAgIChRVE1vdmllOjpz
ZXRDbG9zZWRDYXB0aW9uc1Zpc2libGUpOgorICAgICAgICAoUVRNb3ZpZTo6Y291bnRTdXBwb3J0
ZWRUeXBlcyk6CisgICAgICAgIChRVE1vdmllOjpnZXRTdXBwb3J0ZWRUeXBlKToKKyAgICAgICAg
KFFUTW92aWU6OmluaXRpYWxpemVRdWlja1RpbWUpOgorICAgICAgICAoUVRNb3ZpZTo6Z2V0TW92
aWVIYW5kbGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVE1vdmllLmg6IENv
cGllZCBmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWVXaW4uaC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRNb3ZpZVdpbi5jcHA6CisgICAgICAgIChR
VE1vdmllV2luUHJpdmF0ZTo6UVRNb3ZpZVdpblByaXZhdGUpOgorICAgICAgICAoUVRNb3ZpZVdp
blByaXZhdGU6On5RVE1vdmllV2luUHJpdmF0ZSk6CisgICAgICAgIChRVE1vdmllV2luUHJpdmF0
ZTo6Y2FjaGVNb3ZpZVNjYWxlKToKKyAgICAgICAgKG1vdmllRHJhd2luZ0NvbXBsZXRlUHJvYyk6
CisgICAgICAgIChRVE1vdmllV2luUHJpdmF0ZTo6cmVnaXN0ZXJEcmF3aW5nQ2FsbGJhY2spOgor
ICAgICAgICAoUVRNb3ZpZVdpblByaXZhdGU6OnVucmVnaXN0ZXJEcmF3aW5nQ2FsbGJhY2spOgor
ICAgICAgICAoUVRNb3ZpZVdpblByaXZhdGU6OmRyYXdpbmdDb21wbGV0ZSk6CisgICAgICAgIChR
VE1vdmllV2luUHJpdmF0ZTo6Y3JlYXRlR1dvcmxkKToKKyAgICAgICAgKFFUTW92aWVXaW5Qcml2
YXRlOjpjbGVhckdXb3JsZCk6CisgICAgICAgIChRVE1vdmllV2luUHJpdmF0ZTo6dXBkYXRlTW92
aWVTaXplKToKKyAgICAgICAgKFFUTW92aWVXaW5Qcml2YXRlOjpkZWxldGVHV29ybGQpOgorICAg
ICAgICAoUVRNb3ZpZVdpblByaXZhdGU6Om1vdmllRW5kZWQpOgorICAgICAgICAoUVRNb3ZpZVdp
blByaXZhdGU6Om1vdmllTG9hZFN0YXRlQ2hhbmdlZCk6CisgICAgICAgIChRVE1vdmllV2luUHJp
dmF0ZTo6bW92aWVUaW1lQ2hhbmdlZCk6CisgICAgICAgIChRVE1vdmllV2luOjpRVE1vdmllV2lu
KToKKyAgICAgICAgKFFUTW92aWVXaW46On5RVE1vdmllV2luKToKKyAgICAgICAgKFFUTW92aWVX
aW46OnNldFNpemUpOgorICAgICAgICAoUVRNb3ZpZVdpbjo6c2V0RGlzYWJsZWQpOgorICAgICAg
ICAoUVRNb3ZpZVdpbjo6aXNEaXNhYmxlZCk6CisgICAgICAgIChRVE1vdmllV2luOjpzZXRNb3Zp
ZSk6CisgICAgICAgIChRVE1vdmllV2luOjptb3ZpZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL1FUTW92aWVXaW4uaDoKKwogMjAxMC0wNC0yNyAgSmVucyBBbGZrZSAgPHNuZWpA
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEZpc2hlci4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54508</attachid>
            <date>2010-04-27 19:20:17 -0700</date>
            <delta_ts>2010-04-28 10:57:41 -0700</delta_ts>
            <desc>VCProj project file changes</desc>
            <filename>7569713-VCProj.patch</filename>
            <type>text/plain</type>
            <size>32523</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovUVRNb3ZpZVdpbi52Y3Byb2oNCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0NCi0tLSBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1FUTW92aWVXaW4udmNwcm9qCShyZXZpc2lv
biA1ODE4NykNCisrKyBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1FUTW92aWVXaW4udmNwcm9qCSh3
b3JraW5nIGNvcHkpDQpAQCAtNTUsNyArNTUsNyBAQA0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJ
TmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJRVE1MQ2xp
ZW50LmxpYiBXVEYkKFdlYktpdENvbmZpZ1N1ZmZpeCkubGliIHdpbm1tLmxpYiBwdGhyZWFkVkMy
JChMaWJyYXJ5Q29uZmlnU3VmZml4KS5saWIgTXNpbWczMi5saWIgdXNlcjMyLmxpYiBhZHZhcGkz
Mi5saWIiDQorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IlFUTUxDbGllbnQubGliIENWQ2xp
ZW50LmxpYiBXVEYkKFdlYktpdENvbmZpZ1N1ZmZpeCkubGliIHdpbm1tLmxpYiBwdGhyZWFkVkMy
JChMaWJyYXJ5Q29uZmlnU3VmZml4KS5saWIgTXNpbWczMi5saWIgdXNlcjMyLmxpYiBhZHZhcGkz
Mi5saWIiDQogCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVwkKFByb2plY3ROYW1lKSQoV2ViS2l0
Q29uZmlnU3VmZml4KS5kbGwiDQogCQkJCUFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM9IiZx
dW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxRVEludGVybmFsU0RLXExpYnJhcmllcyZxdW90Ozsm
cXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcUXVpY2tUaW1lIFNES1xMaWJyYXJpZXMmcXVvdDs7
JnF1b3Q7JChQcm9ncmFtRmlsZXMpXFF1aWNrVGltZSBTREtcTGlicmFyaWVzJnF1b3Q7Ig0KIAkJ
CQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJMSUJDTVQiDQpAQCAtODQsNyArODQsNyBAQA0K
IAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJ
CUNvbW1hbmRMaW5lPSJta2RpciAyJmd0O05VTCAmcXVvdDskKFdlYktpdE91dHB1dERpcilcaW5j
bHVkZVxRVE1vdmllV2luJnF1b3Q7JiN4MEQ7JiN4MEE7eGNvcHkgL3kgL2QgJnF1b3Q7JChQcm9q
ZWN0RGlyKS4uXHBsYXRmb3JtXGdyYXBoaWNzXHdpblxRVE1vdmllV2luLmgmcXVvdDsgJnF1b3Q7
JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVcUVRNb3ZpZVdpbiZxdW90OyYjeDBEOyYjeDBBOyYj
eDBEOyYjeDBBO2lmIGV4aXN0ICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxidWlsZGZhaWxlZCZx
dW90OyBkZWwgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGJ1aWxkZmFpbGVkJnF1b3Q7JiN4MEQ7
JiN4MEE7Ig0KKwkJCQlDb21tYW5kTGluZT0ibWtkaXIgMiZndDtOVUwgJnF1b3Q7JChXZWJLaXRP
dXRwdXREaXIpXGluY2x1ZGVcUVRNb3ZpZVdpbiZxdW90OyYjeDBEOyYjeDBBO3hjb3B5IC95IC9k
ICZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxncmFwaGljc1x3aW5cUVRDRkRpY3Rpb25h
cnkuaCZxdW90OyAmcXVvdDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxRVE1vdmllV2luJnF1
b3Q7JiN4MEQ7JiN4MEE7eGNvcHkgL3kgL2QgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3Jt
XGdyYXBoaWNzXHdpblxRVE1vdmllLmgmcXVvdDsgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGlu
Y2x1ZGVcUVRNb3ZpZVdpbiZxdW90OyYjeDBEOyYjeDBBO3hjb3B5IC95IC9kICZxdW90OyQoUHJv
amVjdERpcikuLlxwbGF0Zm9ybVxncmFwaGljc1x3aW5cUVRNb3ZpZVRhc2suaCZxdW90OyAmcXVv
dDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxRVE1vdmllV2luJnF1b3Q7JiN4MEQ7JiN4MEE7
eGNvcHkgL3kgL2QgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXGdyYXBoaWNzXHdpblxR
VE1vdmllVmlzdWFsQ29udGV4dC5oJnF1b3Q7ICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNs
dWRlXFFUTW92aWVXaW4mcXVvdDsmI3gwRDsmI3gwQTt4Y29weSAveSAvZCAmcXVvdDskKFByb2pl
Y3REaXIpLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2luXFFUTW92aWVXaW4uaCZxdW90OyAmcXVvdDsk
KFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxRVE1vdmllV2luJnF1b3Q7JiN4MEQ7JiN4MEE7eGNv
cHkgL3kgL2QgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXGdyYXBoaWNzXHdpblxRVFBp
eGVsQnVmZmVyLmgmcXVvdDsgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVcUVRNb3Zp
ZVdpbiZxdW90OyYjeDBEOyYjeDBBOyYjeDBEOyYjeDBBO2lmIGV4aXN0ICZxdW90OyQoV2ViS2l0
T3V0cHV0RGlyKVxidWlsZGZhaWxlZCZxdW90OyBkZWwgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIp
XGJ1aWxkZmFpbGVkJnF1b3Q7JiN4MEQ7JiN4MEE7Ig0KIAkJCS8+DQogCQk8L0NvbmZpZ3VyYXRp
b24+DQogCQk8Q29uZmlndXJhdGlvbg0KQEAgLTEyOCw3ICsxMjgsNyBAQA0KIAkJCS8+DQogCQkJ
PFRvb2wNCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5j
aWVzPSJRVE1MQ2xpZW50LmxpYiBXVEYkKFdlYktpdENvbmZpZ1N1ZmZpeCkubGliIHdpbm1tLmxp
YiBwdGhyZWFkVkMyJChMaWJyYXJ5Q29uZmlnU3VmZml4KS5saWIgTXNpbWczMi5saWIgdXNlcjMy
LmxpYiBhZHZhcGkzMi5saWIiDQorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IlFUTUxDbGll
bnQubGliIENWQ2xpZW50LmxpYiBXVEYkKFdlYktpdENvbmZpZ1N1ZmZpeCkubGliIHdpbm1tLmxp
YiBwdGhyZWFkVkMyJChMaWJyYXJ5Q29uZmlnU3VmZml4KS5saWIgTXNpbWczMi5saWIgdXNlcjMy
LmxpYiBhZHZhcGkzMi5saWIiDQogCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVwkKFByb2plY3RO
YW1lKSQoV2ViS2l0Q29uZmlnU3VmZml4KS5kbGwiDQogCQkJCUFkZGl0aW9uYWxMaWJyYXJ5RGly
ZWN0b3JpZXM9IiZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxRVEludGVybmFsU0RLXExpYnJh
cmllcyZxdW90OzsmcXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcUXVpY2tUaW1lIFNES1xMaWJy
YXJpZXMmcXVvdDs7JnF1b3Q7JChQcm9ncmFtRmlsZXMpXFF1aWNrVGltZSBTREtcTGlicmFyaWVz
JnF1b3Q7Ig0KIAkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJMSUJDTVQiDQpAQCAtMTU3
LDcgKzE1Nyw3IEBADQogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2
ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9Im1rZGlyIDImZ3Q7TlVMICZxdW90OyQoV2ViS2l0
T3V0cHV0RGlyKVxpbmNsdWRlXFFUTW92aWVXaW4mcXVvdDsmI3gwRDsmI3gwQTt4Y29weSAveSAv
ZCAmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2luXFFUTW92aWVXaW4u
aCZxdW90OyAmcXVvdDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxRVE1vdmllV2luJnF1b3Q7
JiN4MEQ7JiN4MEE7JiN4MEQ7JiN4MEE7aWYgZXhpc3QgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIp
XGJ1aWxkZmFpbGVkJnF1b3Q7IGRlbCAmcXVvdDskKFdlYktpdE91dHB1dERpcilcYnVpbGRmYWls
ZWQmcXVvdDsmI3gwRDsmI3gwQTsiDQorCQkJCUNvbW1hbmRMaW5lPSJta2RpciAyJmd0O05VTCAm
cXVvdDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxRVE1vdmllV2luJnF1b3Q7JiN4MEQ7JiN4
MEE7eGNvcHkgL3kgL2QgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXGdyYXBoaWNzXHdp
blxRVENGRGljdGlvbmFyeS5oJnF1b3Q7ICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRl
XFFUTW92aWVXaW4mcXVvdDsmI3gwRDsmI3gwQTt4Y29weSAveSAvZCAmcXVvdDskKFByb2plY3RE
aXIpLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2luXFFUTW92aWUuaCZxdW90OyAmcXVvdDskKFdlYktp
dE91dHB1dERpcilcaW5jbHVkZVxRVE1vdmllV2luJnF1b3Q7JiN4MEQ7JiN4MEE7eGNvcHkgL3kg
L2QgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXGdyYXBoaWNzXHdpblxRVE1vdmllVGFz
ay5oJnF1b3Q7ICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXFFUTW92aWVXaW4mcXVv
dDsmI3gwRDsmI3gwQTt4Y29weSAveSAvZCAmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1c
Z3JhcGhpY3Ncd2luXFFUTW92aWVWaXN1YWxDb250ZXh0LmgmcXVvdDsgJnF1b3Q7JChXZWJLaXRP
dXRwdXREaXIpXGluY2x1ZGVcUVRNb3ZpZVdpbiZxdW90OyYjeDBEOyYjeDBBO3hjb3B5IC95IC9k
ICZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxncmFwaGljc1x3aW5cUVRNb3ZpZVdpbi5o
JnF1b3Q7ICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXFFUTW92aWVXaW4mcXVvdDsm
I3gwRDsmI3gwQTt4Y29weSAveSAvZCAmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cZ3Jh
cGhpY3Ncd2luXFFUUGl4ZWxCdWZmZXIuaCZxdW90OyAmcXVvdDskKFdlYktpdE91dHB1dERpcilc
aW5jbHVkZVxRVE1vdmllV2luJnF1b3Q7JiN4MEQ7JiN4MEE7JiN4MEQ7JiN4MEE7aWYgZXhpc3Qg
JnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGJ1aWxkZmFpbGVkJnF1b3Q7IGRlbCAmcXVvdDskKFdl
YktpdE91dHB1dERpcilcYnVpbGRmYWlsZWQmcXVvdDsmI3gwRDsmI3gwQTsiDQogCQkJLz4NCiAJ
CTwvQ29uZmlndXJhdGlvbj4NCiAJCTxDb25maWd1cmF0aW9uDQpAQCAtMjAwLDcgKzIwMCw3IEBA
DQogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0
aW9uYWxEZXBlbmRlbmNpZXM9IlFUTUxDbGllbnQubGliIFdURiQoV2ViS2l0Q29uZmlnU3VmZml4
KS5saWIgd2lubW0ubGliIHB0aHJlYWRWQzIkKExpYnJhcnlDb25maWdTdWZmaXgpLmxpYiBNc2lt
ZzMyLmxpYiB1c2VyMzIubGliIGFkdmFwaTMyLmxpYiINCisJCQkJQWRkaXRpb25hbERlcGVuZGVu
Y2llcz0iUVRNTENsaWVudC5saWIgQ1ZDbGllbnQubGliIFdURiQoV2ViS2l0Q29uZmlnU3VmZml4
KS5saWIgd2lubW0ubGliIHB0aHJlYWRWQzIkKExpYnJhcnlDb25maWdTdWZmaXgpLmxpYiBNc2lt
ZzMyLmxpYiB1c2VyMzIubGliIGFkdmFwaTMyLmxpYiINCiAJCQkJT3V0cHV0RmlsZT0iJChPdXRE
aXIpXCQoUHJvamVjdE5hbWUpJChXZWJLaXRDb25maWdTdWZmaXgpLmRsbCINCiAJCQkJQWRkaXRp
b25hbExpYnJhcnlEaXJlY3Rvcmllcz0iJnF1b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIpXFFUSW50
ZXJuYWxTREtcTGlicmFyaWVzJnF1b3Q7OyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxRdWlj
a1RpbWUgU0RLXExpYnJhcmllcyZxdW90OzsmcXVvdDskKFByb2dyYW1GaWxlcylcUXVpY2tUaW1l
IFNES1xMaWJyYXJpZXMmcXVvdDsiDQogCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9IkxJ
QkNNVCINCkBAIC0yMjksNyArMjI5LDcgQEANCiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9
IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0ibWtkaXIgMiZndDtOVUwg
JnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVcUVRNb3ZpZVdpbiZxdW90OyYjeDBEOyYj
eDBBO3hjb3B5IC95IC9kICZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxncmFwaGljc1x3
aW5cUVRNb3ZpZVdpbi5oJnF1b3Q7ICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXFFU
TW92aWVXaW4mcXVvdDsmI3gwRDsmI3gwQTsmI3gwRDsmI3gwQTtpZiBleGlzdCAmcXVvdDskKFdl
YktpdE91dHB1dERpcilcYnVpbGRmYWlsZWQmcXVvdDsgZGVsICZxdW90OyQoV2ViS2l0T3V0cHV0
RGlyKVxidWlsZGZhaWxlZCZxdW90OyYjeDBEOyYjeDBBOyINCisJCQkJQ29tbWFuZExpbmU9Im1r
ZGlyIDImZ3Q7TlVMICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXFFUTW92aWVXaW4m
cXVvdDsmI3gwRDsmI3gwQTt4Y29weSAveSAvZCAmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZv
cm1cZ3JhcGhpY3Ncd2luXFFUQ0ZEaWN0aW9uYXJ5LmgmcXVvdDsgJnF1b3Q7JChXZWJLaXRPdXRw
dXREaXIpXGluY2x1ZGVcUVRNb3ZpZVdpbiZxdW90OyYjeDBEOyYjeDBBO3hjb3B5IC95IC9kICZx
dW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxncmFwaGljc1x3aW5cUVRNb3ZpZS5oJnF1b3Q7
ICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXFFUTW92aWVXaW4mcXVvdDsmI3gwRDsm
I3gwQTt4Y29weSAveSAvZCAmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cZ3JhcGhpY3Nc
d2luXFFUTW92aWVUYXNrLmgmcXVvdDsgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVc
UVRNb3ZpZVdpbiZxdW90OyYjeDBEOyYjeDBBO3hjb3B5IC95IC9kICZxdW90OyQoUHJvamVjdERp
cikuLlxwbGF0Zm9ybVxncmFwaGljc1x3aW5cUVRNb3ZpZVZpc3VhbENvbnRleHQuaCZxdW90OyAm
cXVvdDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxRVE1vdmllV2luJnF1b3Q7JiN4MEQ7JiN4
MEE7eGNvcHkgL3kgL2QgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXGdyYXBoaWNzXHdp
blxRVE1vdmllV2luLmgmcXVvdDsgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVcUVRN
b3ZpZVdpbiZxdW90OyYjeDBEOyYjeDBBO3hjb3B5IC95IC9kICZxdW90OyQoUHJvamVjdERpciku
LlxwbGF0Zm9ybVxncmFwaGljc1x3aW5cUVRQaXhlbEJ1ZmZlci5oJnF1b3Q7ICZxdW90OyQoV2Vi
S2l0T3V0cHV0RGlyKVxpbmNsdWRlXFFUTW92aWVXaW4mcXVvdDsmI3gwRDsmI3gwQTsmI3gwRDsm
I3gwQTtpZiBleGlzdCAmcXVvdDskKFdlYktpdE91dHB1dERpcilcYnVpbGRmYWlsZWQmcXVvdDsg
ZGVsICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxidWlsZGZhaWxlZCZxdW90OyYjeDBEOyYjeDBB
OyINCiAJCQkvPg0KIAkJPC9Db25maWd1cmF0aW9uPg0KIAkJPENvbmZpZ3VyYXRpb24NCkBAIC0y
NTYsNyArMjU2LDcgQEANCiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDQ0xDb21waWxl
clRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiZxdW90OyQoUHJvamVj
dERpcikuLlwmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXEZvcndhcmRpbmdIZWFkZXJzJnF1
b3Q7OyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxJbmNsdWRlXEphdmFTY3JpcHRDb3JlJnF1
b3Q7OyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxpbmNsdWRlXHByaXZhdGVcSmF2YVNjcmlw
dENvcmUmcXVvdDs7JnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXEluY2x1ZGVcSmF2YVNjcmlwdENv
cmUmcXVvdDs7JnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVccHJpdmF0ZVxKYXZhU2Ny
aXB0Q29yZSZxdW90OzsmcXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcSW5jbHVkZVxXZWJDb3Jl
XEZvcndhcmRpbmdIZWFkZXJzJnF1b3Q7OyZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxJbmNsdWRl
XFdlYkNvcmVcRm9yd2FyZGluZ0hlYWRlcnMmcXVvdDs7JnF1b3Q7JChXZWJLaXRPdXRwdXREaXIp
XEluY2x1ZGUmcXVvdDs7JnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXEluY2x1ZGVccHJpdmF0ZSZx
dW90OzsmcXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcUVRJbnRlcm5hbFNES1xDSW5jbHVkZXMm
cXVvdDs7JnF1b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIpXFF1aWNrVGltZSBTREtcQ0luY2x1ZGVz
JnF1b3Q7OyZxdW90OyQoUHJvZ3JhbUZpbGVzKS9RdWlja1RpbWUgU0RLL2NpbmNsdWRlcyZxdW90
OzsmcXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcaW5jbHVkZSZxdW90OzsmcXVvdDskKFdlYktp
dExpYnJhcmllc0RpcilcaW5jbHVkZVxwcml2YXRlJnF1b3Q7Ig0KKwkJCQlBZGRpdGlvbmFsSW5j
bHVkZURpcmVjdG9yaWVzPSImcXVvdDskKFByb2plY3REaXIpLi5cJnF1b3Q7OyZxdW90OyQoUHJv
amVjdERpcikuLlxGb3J3YXJkaW5nSGVhZGVycyZxdW90OzsmcXVvdDskKFByb2dyYW1GaWxlcykv
UXVpY2tUaW1lIFNESy9jaW5jbHVkZXMmcXVvdDs7JnF1b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIp
XEluY2x1ZGVcSmF2YVNjcmlwdENvcmUmcXVvdDs7JnF1b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIp
XGluY2x1ZGVccHJpdmF0ZVxKYXZhU2NyaXB0Q29yZSZxdW90OzsmcXVvdDskKFdlYktpdE91dHB1
dERpcilcSW5jbHVkZVxKYXZhU2NyaXB0Q29yZSZxdW90OzsmcXVvdDskKFdlYktpdE91dHB1dERp
cilcaW5jbHVkZVxwcml2YXRlXEphdmFTY3JpcHRDb3JlJnF1b3Q7OyZxdW90OyQoV2ViS2l0TGli
cmFyaWVzRGlyKVxJbmNsdWRlXFdlYkNvcmVcRm9yd2FyZGluZ0hlYWRlcnMmcXVvdDs7JnF1b3Q7
JChXZWJLaXRPdXRwdXREaXIpXEluY2x1ZGVcV2ViQ29yZVxGb3J3YXJkaW5nSGVhZGVycyZxdW90
OzsmcXVvdDskKFdlYktpdE91dHB1dERpcilcSW5jbHVkZSZxdW90OzsmcXVvdDskKFdlYktpdE91
dHB1dERpcilcSW5jbHVkZVxwcml2YXRlJnF1b3Q7OyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGly
KVxRVEludGVybmFsU0RLXENJbmNsdWRlcyZxdW90OzsmcXVvdDskKFdlYktpdExpYnJhcmllc0Rp
cilcUXVpY2tUaW1lIFNES1xDSW5jbHVkZXMmcXVvdDs7JnF1b3Q7JChXZWJLaXRMaWJyYXJpZXNE
aXIpXGluY2x1ZGUmcXVvdDs7JnF1b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIpXGluY2x1ZGVccHJp
dmF0ZSZxdW90OyINCiAJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9VU1JETEw7UVRNT1ZJ
RVdJTl9FWFBPUlRTIg0KIAkJCQlEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz0iNDgxOSINCiAJCQkv
Pg0KQEAgLTI3Miw3ICsyNzIsNyBAQA0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNM
aW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJRVE1MQ2xpZW50LmxpYiBX
VEYkKFdlYktpdENvbmZpZ1N1ZmZpeCkubGliIHdpbm1tLmxpYiBwdGhyZWFkVkMyJChMaWJyYXJ5
Q29uZmlnU3VmZml4KS5saWIgTXNpbWczMi5saWIgdXNlcjMyLmxpYiBhZHZhcGkzMi5saWIiDQor
CQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IlFUTUxDbGllbnQubGliIENWQ2xpZW50LmxpYiBD
b3JlR3JhcGhpY3MubGliIFdURiQoV2ViS2l0Q29uZmlnU3VmZml4KS5saWIgd2lubW0ubGliIHB0
aHJlYWRWQzIkKExpYnJhcnlDb25maWdTdWZmaXgpLmxpYiBNc2ltZzMyLmxpYiB1c2VyMzIubGli
IGFkdmFwaTMyLmxpYiINCiAJCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXCQoUHJvamVjdE5hbWUp
JChXZWJLaXRDb25maWdTdWZmaXgpLmRsbCINCiAJCQkJQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rv
cmllcz0iJnF1b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIpXFFUSW50ZXJuYWxTREtcTGlicmFyaWVz
JnF1b3Q7OyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxRdWlja1RpbWUgU0RLXExpYnJhcmll
cyZxdW90OzsmcXVvdDskKFByb2dyYW1GaWxlcylcUXVpY2tUaW1lIFNES1xMaWJyYXJpZXMmcXVv
dDsiDQogCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9IkxJQkNNVCINCkBAIC0zMDEsNyAr
MzAxLDcgQEANCiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRU
b29sIg0KLQkJCQlDb21tYW5kTGluZT0ibWtkaXIgMiZndDtOVUwgJnF1b3Q7JChXZWJLaXRPdXRw
dXREaXIpXGluY2x1ZGVcUVRNb3ZpZVdpbiZxdW90OyYjeDBEOyYjeDBBO3hjb3B5IC95IC9kICZx
dW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxncmFwaGljc1x3aW5cUVRNb3ZpZVdpbi5oJnF1
b3Q7ICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXFFUTW92aWVXaW4mcXVvdDsmI3gw
RDsmI3gwQTsmI3gwRDsmI3gwQTtpZiBleGlzdCAmcXVvdDskKFdlYktpdE91dHB1dERpcilcYnVp
bGRmYWlsZWQmcXVvdDsgZGVsICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxidWlsZGZhaWxlZCZx
dW90OyYjeDBEOyYjeDBBOyINCisJCQkJQ29tbWFuZExpbmU9Im1rZGlyIDImZ3Q7TlVMICZxdW90
OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXFFUTW92aWVXaW4mcXVvdDsmI3gwRDsmI3gwQTt4
Y29weSAveSAvZCAmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2luXFFU
Q0ZEaWN0aW9uYXJ5LmgmcXVvdDsgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVcUVRN
b3ZpZVdpbiZxdW90OyYjeDBEOyYjeDBBO3hjb3B5IC95IC9kICZxdW90OyQoUHJvamVjdERpciku
LlxwbGF0Zm9ybVxncmFwaGljc1x3aW5cUVRNb3ZpZS5oJnF1b3Q7ICZxdW90OyQoV2ViS2l0T3V0
cHV0RGlyKVxpbmNsdWRlXFFUTW92aWVXaW4mcXVvdDsmI3gwRDsmI3gwQTt4Y29weSAveSAvZCAm
cXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2luXFFUTW92aWVUYXNrLmgm
cXVvdDsgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVcUVRNb3ZpZVdpbiZxdW90OyYj
eDBEOyYjeDBBO3hjb3B5IC95IC9kICZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxncmFw
aGljc1x3aW5cUVRNb3ZpZVZpc3VhbENvbnRleHQuaCZxdW90OyAmcXVvdDskKFdlYktpdE91dHB1
dERpcilcaW5jbHVkZVxRVE1vdmllV2luJnF1b3Q7JiN4MEQ7JiN4MEE7eGNvcHkgL3kgL2QgJnF1
b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXGdyYXBoaWNzXHdpblxRVE1vdmllV2luLmgmcXVv
dDsgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVcUVRNb3ZpZVdpbiZxdW90OyYjeDBE
OyYjeDBBO3hjb3B5IC95IC9kICZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxncmFwaGlj
c1x3aW5cUVRQaXhlbEJ1ZmZlci5oJnF1b3Q7ICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNs
dWRlXFFUTW92aWVXaW4mcXVvdDsmI3gwRDsmI3gwQTsmI3gwRDsmI3gwQTtpZiBleGlzdCAmcXVv
dDskKFdlYktpdE91dHB1dERpcilcYnVpbGRmYWlsZWQmcXVvdDsgZGVsICZxdW90OyQoV2ViS2l0
T3V0cHV0RGlyKVxidWlsZGZhaWxlZCZxdW90OyYjeDBEOyYjeDBBOyINCiAJCQkvPg0KIAkJPC9D
b25maWd1cmF0aW9uPg0KIAk8L0NvbmZpZ3VyYXRpb25zPg0KQEAgLTMxNCw2ICszMTQsMjIgQEAN
CiAJCQlVbmlxdWVJZGVudGlmaWVyPSJ7NEZDNzM3RjEtQzdBNS00Mzc2LUEwNjYtMkEzMkQ3NTJB
MkZGfSINCiAJCQk+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxn
cmFwaGljc1x3aW5cUVRDRkRpY3Rpb25hcnkuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJ
CTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2luXFFUTW92
aWUuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0
aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2luXFFUTW92aWVUYXNrLmNwcCINCisJCQkJPg0KKwkJ
CTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBo
aWNzXHdpblxRVE1vdmllVmlzdWFsQ29udGV4dC5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQor
CQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1x3aW5cUVRN
b3ZpZVdpbi5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpAQCAtMzIxLDYgKzMzNywxMCBAQA0K
IAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXHdpblxRVE1vdmllV2luVGlt
ZXIuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0
aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2luXFFUUGl4ZWxCdWZmZXIuY3BwIg0KKwkJCQk+DQor
CQkJPC9GaWxlPg0KIAkJPC9GaWx0ZXI+DQogCQk8RmlsdGVyDQogCQkJTmFtZT0iSGVhZGVyIEZp
bGVzIg0KQEAgLTMyOCw2ICszNDgsMjIgQEANCiAJCQlVbmlxdWVJZGVudGlmaWVyPSJ7OTM5OTUz
ODAtODlCRC00YjA0LTg4RUItNjI1RkJFNTJFQkZCfSINCiAJCQk+DQogCQkJPEZpbGUNCisJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1x3aW5cUVRDRkRpY3Rpb25hcnkuaCIN
CisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBs
YXRmb3JtXGdyYXBoaWNzXHdpblxRVE1vdmllLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJ
PEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1x3aW5cUVRNb3Zp
ZVRhc2suaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXHdpblxRVE1vdmllVmlzdWFsQ29udGV4dC5oIg0KKwkJ
CQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZv
cm1cZ3JhcGhpY3Ncd2luXFFUTW92aWVXaW4uaCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCkBAIC0z
MzUsNiArMzcxLDEwIEBADQogCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3Nc
d2luXFFUTW92aWVXaW5UaW1lci5oIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQor
CQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2luXFFUUGl4ZWxCdWZmZXIu
aCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCiAJCTwvRmlsdGVyPg0KIAkJPEZpbHRlcg0KIAkJCU5h
bWU9IlJlc291cmNlIEZpbGVzIg0KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2oNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qCShyZXZpc2lvbiA1ODE4NykNCisrKyBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qCSh3b3JraW5nIGNvcHkpDQpAQCAtMSw0ICsxLDQgQEANCi08P3htbCB2ZXJzaW9u
PSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCis8P3htbCB2ZXJzaW9uPSIxLjAiIGVu
Y29kaW5nPSJ3aW5kb3dzLTEyNTEiPz4NCiA8VmlzdWFsU3R1ZGlvUHJvamVjdA0KIAlQcm9qZWN0
VHlwZT0iVmlzdWFsIEMrKyINCiAJVmVyc2lvbj0iOC4wMCINCkBAIC04MTQxLDYyICs4MTQxLDYg
QEANCiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9IiQo
V2ViS2l0T3V0cHV0RGlyKVxvYmpcJChQcm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNcSlNTdHls
ZU1lZGlhLmNwcCINCi0JCQkJPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9
IkRlYnVnfFdpbjMyIg0KLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQotCQkJCQk+DQot
CQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkvPg0KLQkJ
CQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5h
bWU9IlJlbGVhc2V8V2luMzIiDQotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCi0JCQkJ
CT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCS8+
DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJ
CQkJTmFtZT0iRGVidWdfSW50ZXJuYWx8V2luMzIiDQotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0i
dHJ1ZSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9v
bCINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmln
dXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWdfQ2Fpcm98V2luMzIiDQotCQkJCQlFeGNsdWRlZEZy
b21CdWlsZD0idHJ1ZSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENv
bXBpbGVyVG9vbCINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxG
aWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZV9DYWlyb3xXaW4zMiINCi0JCQkJ
CUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlO
YW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlv
bj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z19BbGx8V2luMzIi
DQotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQot
CQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZp
Z3VyYXRpb24+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iJChX
ZWJLaXRPdXRwdXREaXIpXG9ialwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xKU1N0eWxl
TWVkaWEuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBh
dGg9IiQoV2ViS2l0T3V0cHV0RGlyKVxvYmpcJChQcm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNc
SlNNZWRpYUVycm9yLmNwcCINCiAJCQkJPg0KIAkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCkBAIC04
Mzg5LDcgKzgzMzMsNiBAQA0KIAkJCQkJPg0KIAkJCQkJPFRvb2wNCiAJCQkJCQlOYW1lPSJWQ0NM
Q29tcGlsZXJUb29sIg0KLQ0KIAkJCQkJLz4NCiAJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCiAJ
CQkJPEZpbGVDb25maWd1cmF0aW9uDQpAQCAtMTAzODIsNiArMTAzMjUsNjIgQEANCiAJCQkJPg0K
IAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9IiQoV2ViS2l0T3V0cHV0
RGlyKVxvYmpcJChQcm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNcSlNTdHlsZU1lZGlhLmNwcCIN
CisJCQkJPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbjMy
Ig0KKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0K
KwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25m
aWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8
V2luMzIiDQorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCisJCQkJCT4NCisJCQkJCTxU
b29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCS8+DQorCQkJCTwvRmls
ZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVi
dWdfSW50ZXJuYWx8V2luMzIiDQorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCisJCQkJ
CT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCS8+
DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJ
CQkJTmFtZT0iRGVidWdfQ2Fpcm98V2luMzIiDQorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1
ZSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIN
CisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJh
dGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZV9DYWlyb3xXaW4zMiINCisJCQkJCUV4Y2x1ZGVkRnJv
bUJ1aWxkPSJ0cnVlIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29t
cGlsZXJUb29sIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZp
bGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z19BbGx8V2luMzIiDQorCQkJCQlFeGNs
dWRlZEZyb21CdWlsZD0idHJ1ZSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0i
VkNDTENvbXBpbGVyVG9vbCINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQor
CQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iJChXZWJLaXRPdXRwdXRE
aXIpXG9ialwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xKU1N0eWxlTWVkaWEuaCINCisJ
CQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9IiQoV2ViS2l0
T3V0cHV0RGlyKVxvYmpcJChQcm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNcSlNTdHlsZVNoZWV0
LmNwcCINCiAJCQkJPg0KIAkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCkBAIC0xODgzNCw3ICsxODgz
Myw2IEBADQogCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQogCQkJCTxGaWxlQ29uZmlndXJhdGlv
bg0KIAkJCQkJTmFtZT0iRGVidWdfQWxsfFdpbjMyIg0KLQ0KIAkJCQkJRXhjbHVkZWRGcm9tQnVp
bGQ9InRydWUiDQogCQkJCQk+DQogCQkJCQk8VG9vbA0KQEAgLTIxNDU1LDE5ICsyMTQ1MywxOSBA
QA0KIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5c
bG9hZGVyXERvY3VtZW50V3JpdGVyLmNwcCINCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxsb2FkZXJc
RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8
RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGxvYWRlclxEb2N1bWVudFdyaXRlci5oIg0KKwkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXGxvYWRlclxEb2N1bWVudFRocmVhZGFibGVMb2FkZXIuaCINCiAJ
CQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGxvYWRl
clxEb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwIg0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGxv
YWRlclxEb2N1bWVudFdyaXRlci5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUN
Ci0JCQkJUmVsYXRpdmVQYXRoPSIuLlxsb2FkZXJcRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmgi
DQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cbG9hZGVyXERvY3VtZW50V3JpdGVyLmgiDQogCQkJCT4N
CiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCkBAIC0yMjgzNCwxOSArMjI4MzIsMTkgQEANCiAJCQkJ
CT4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0
Zm9ybVxncmFwaGljc1xHbHlwaFBhZ2VUcmVlTm9kZS5jcHAiDQorCQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEdseXBoTWV0cmljc01hcC5jcHAiDQogCQkJCQk+DQogCQkJ
CTwvRmlsZT4NCiAJCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3Jh
cGhpY3NcR2x5cGhQYWdlVHJlZU5vZGUuaCINCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZv
cm1cZ3JhcGhpY3NcR2x5cGhNZXRyaWNzTWFwLmgiDQogCQkJCQk+DQogCQkJCTwvRmlsZT4NCiAJ
CQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcR2x5cGhN
ZXRyaWNzTWFwLmNwcCINCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3Nc
R2x5cGhQYWdlVHJlZU5vZGUuY3BwIg0KIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxl
DQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEdseXBoTWV0cmljc01h
cC5oIg0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xHbHlwaFBhZ2VU
cmVlTm9kZS5oIg0KIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQpAQCAtMjM0Mzcs
NiArMjM0MzUsMTQgQEANCiAJCQkJCQk+DQogCQkJCQk8L0ZpbGU+DQogCQkJCQk8RmlsZQ0KKwkJ
CQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2luXE1lZGlhUGxheWVyUHJp
dmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQuY3BwIg0KKwkJCQkJCT4NCisJCQkJCTwvRmlsZT4N
CisJCQkJCTxGaWxlDQorCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1x3
aW5cTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dC5oIg0KKwkJCQkJCT4N
CisJCQkJCTwvRmlsZT4NCisJCQkJCTxGaWxlDQogCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0
Zm9ybVxncmFwaGljc1x3aW5cTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lV2luLmNwcCINCiAJ
CQkJCQk+DQogCQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQpAQCAtMjM0NzcsNiArMjM0ODMsMTQg
QEANCiAJCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KIAkJCQkJPC9GaWxlPg0KIAkJCQkJPEZp
bGUNCisJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXHdpblxNZWRpYVBs
YXllclByaXZhdGVUYXNrVGltZXIuY3BwIg0KKwkJCQkJCT4NCisJCQkJCTwvRmlsZT4NCisJCQkJ
CTxGaWxlDQorCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1x3aW5cTWVk
aWFQbGF5ZXJQcml2YXRlVGFza1RpbWVyLmgiDQorCQkJCQkJPg0KKwkJCQkJPC9GaWxlPg0KKwkJ
CQkJPEZpbGUNCiAJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXG9wZW50
eXBlXE9wZW5UeXBlVXRpbGl0aWVzLmNwcCINCiAJCQkJCQk+DQogCQkJCQk8L0ZpbGU+DQpAQCAt
MjU3MzgsMTUgKzI1NzUyLDE1IEBADQogCQkJCQk+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUN
Ci0JCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cdGV4dFxTdWZmaXhUcmVlLmgiDQorCQkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXFN0cmluZ1RydW5jYXRvci5jcHAi
DQogCQkJCQk+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0i
Li5ccGxhdGZvcm1cZ3JhcGhpY3NcU3RyaW5nVHJ1bmNhdG9yLmNwcCINCisJCQkJCVJlbGF0aXZl
UGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcU3RyaW5nVHJ1bmNhdG9yLmgiDQogCQkJCQk+DQog
CQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1c
Z3JhcGhpY3NcU3RyaW5nVHJ1bmNhdG9yLmgiDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRm
b3JtXHRleHRcU3VmZml4VHJlZS5oIg0KIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxl
DQpAQCAtMjcxNTEsMTQgKzI3MTY1LDYgQEANCiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8Rmls
ZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGNzc1xTdHlsZU1lZGlhLmNwcCINCi0JCQkJPg0KLQkJ
CTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGNzc1xTdHlsZU1lZGlh
LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIu
Llxjc3NcbWVkaWFDb250cm9scy5jc3MiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpAQCAtMjcyNDcs
NiArMjcyNTMsMTQgQEANCiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXGNzc1xTdHlsZU1lZGlhLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJ
CQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGNzc1xTdHlsZU1lZGlhLmgiDQorCQkJCT4N
CisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxjc3NcU3R5bGVT
aGVldC5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpAQCAtMzE3ODUsNyArMzE3OTksNiBAQA0K
IAkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQogCQkJCQkvPg0KIAkJCQk8L0ZpbGVDb25m
aWd1cmF0aW9uPg0KLQ0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXGh0bWxcSFRNTEZvcm1FbGVtZW50LmgiDQpAQCAtMzkwNzEsNyArMzkwODQsNyBAQA0KIAkJ
CQkJPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGJp
bmRpbmdzXGpzXEpTU2hhcmVkV29ya2VyQ29uc3RydWN0b3IuY3BwIg0KKwkJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxiaW5kaW5nc1xqc1xKU1NjcmlwdFByb2ZpbGVOb2RlQ3VzdG9tLmNwcCINCiAJCQkJ
CT4NCiAJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KIAkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0K
QEAgLTM5MTIzLDEyICszOTEzNiw4IEBADQogCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KIAkJ
CQk8L0ZpbGU+DQogCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpz
XEpTU2hhcmVkV29ya2VyQ29uc3RydWN0b3IuaCINCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cYmlu
ZGluZ3NcanNcSlNTaGFyZWRXb3JrZXJDb25zdHJ1Y3Rvci5jcHAiDQogCQkJCQk+DQotCQkJCTwv
RmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cYmluZGluZ3NcanNcSlNT
aGFyZWRXb3JrZXJDdXN0b20uY3BwIg0KLQkJCQkJPg0KIAkJCQkJPEZpbGVDb25maWd1cmF0aW9u
DQogCQkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQogCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRy
dWUiDQpAQCAtMzkxNzksOCArMzkxODgsMTIgQEANCiAJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+
DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cYmluZGlu
Z3NcanNcSlNTUUxSZXN1bHRTZXRSb3dMaXN0Q3VzdG9tLmNwcCINCisJCQkJCVJlbGF0aXZlUGF0
aD0iLi5cYmluZGluZ3NcanNcSlNTaGFyZWRXb3JrZXJDb25zdHJ1Y3Rvci5oIg0KIAkJCQkJPg0K
KwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdz
XGpzXEpTU2hhcmVkV29ya2VyQ3VzdG9tLmNwcCINCisJCQkJCT4NCiAJCQkJCTxGaWxlQ29uZmln
dXJhdGlvbg0KIAkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KIAkJCQkJCUV4Y2x1ZGVkRnJvbUJ1
aWxkPSJ0cnVlIg0KQEAgLTM5MjMxLDcgKzM5MjQ0LDcgQEANCiAJCQkJCTwvRmlsZUNvbmZpZ3Vy
YXRpb24+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5c
YmluZGluZ3NcanNcSlNTUUxUcmFuc2FjdGlvbkN1c3RvbS5jcHAiDQorCQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXGJpbmRpbmdzXGpzXEpTU1FMUmVzdWx0U2V0Um93TGlzdEN1c3RvbS5jcHAiDQogCQkJ
CQk+DQogCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCiAJCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIN
CkBAIC0zOTI4Myw3ICszOTI5Niw3IEBADQogCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KIAkJ
CQk8L0ZpbGU+DQogCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpz
XEpTU3RvcmFnZUN1c3RvbS5jcHAiDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpz
XEpTU1FMVHJhbnNhY3Rpb25DdXN0b20uY3BwIg0KIAkJCQkJPg0KIAkJCQkJPEZpbGVDb25maWd1
cmF0aW9uDQogCQkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQpAQCAtMzkzMzUsNyArMzkzNDgsNyBA
QA0KIAkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0K
LQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxiaW5kaW5nc1xqc1xKU1N0eWxlU2hlZXRDdXN0b20uY3Bw
Ig0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxiaW5kaW5nc1xqc1xKU1N0b3JhZ2VDdXN0b20uY3Bw
Ig0KIAkJCQkJPg0KIAkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQogCQkJCQkJTmFtZT0iRGVidWd8
V2luMzIiDQpAQCAtMzkzODcsNyArMzk0MDAsNyBAQA0KIAkJCQkJPC9GaWxlQ29uZmlndXJhdGlv
bj4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxiaW5k
aW5nc1xqc1xKU1N0eWxlU2hlZXRMaXN0Q3VzdG9tLmNwcCINCisJCQkJCVJlbGF0aXZlUGF0aD0i
Li5cYmluZGluZ3NcanNcSlNTdHlsZVNoZWV0Q3VzdG9tLmNwcCINCiAJCQkJCT4NCiAJCQkJCTxG
aWxlQ29uZmlndXJhdGlvbg0KIAkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KQEAgLTM5NDM5LDEy
ICszOTQ1Miw4IEBADQogCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KIAkJCQk8L0ZpbGU+DQog
CQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXEpTU1ZHQ29udGV4
dENhY2hlLmgiDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXEpTU3R5bGVTaGVl
dExpc3RDdXN0b20uY3BwIg0KIAkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXEpTU1ZHRWxlbWVudEluc3RhbmNlQ3VzdG9t
LmNwcCINCi0JCQkJCT4NCiAJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KIAkJCQkJCU5hbWU9IkRl
YnVnfFdpbjMyIg0KIAkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KQEAgLTM5NDk1LDgg
KzM5NTA0LDEyIEBADQogCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KIAkJCQk8L0ZpbGU+DQog
CQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXEpTU1ZHTGVuZ3Ro
Q3VzdG9tLmNwcCINCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cYmluZGluZ3NcanNcSlNTVkdDb250
ZXh0Q2FjaGUuaCINCiAJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVs
YXRpdmVQYXRoPSIuLlxiaW5kaW5nc1xqc1xKU1NWR0VsZW1lbnRJbnN0YW5jZUN1c3RvbS5jcHAi
DQorCQkJCQk+DQogCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCiAJCQkJCQlOYW1lPSJEZWJ1Z3xX
aW4zMiINCiAJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCkBAIC0zOTU0Nyw3ICszOTU2
MCw3IEBADQogCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxG
aWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXEpTU1ZHTWF0cml4Q3VzdG9t
LmNwcCINCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cYmluZGluZ3NcanNcSlNTVkdMZW5ndGhDdXN0
b20uY3BwIg0KIAkJCQkJPg0KIAkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQogCQkJCQkJTmFtZT0i
RGVidWd8V2luMzIiDQpAQCAtMzk1OTksNyArMzk2MTIsNyBAQA0KIAkJCQkJPC9GaWxlQ29uZmln
dXJhdGlvbj4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIu
LlxiaW5kaW5nc1xqc1xKU1NWR1BhdGhTZWdDdXN0b20uY3BwIg0KKwkJCQkJUmVsYXRpdmVQYXRo
PSIuLlxiaW5kaW5nc1xqc1xKU1NWR01hdHJpeEN1c3RvbS5jcHAiDQogCQkJCQk+DQogCQkJCQk8
RmlsZUNvbmZpZ3VyYXRpb24NCiAJCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCkBAIC0zOTY1MSw3
ICszOTY2NCw3IEBADQogCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KIAkJCQk8L0ZpbGU+DQog
CQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXEpTU1ZHUGF0aFNl
Z0xpc3RDdXN0b20uY3BwIg0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxiaW5kaW5nc1xqc1xKU1NW
R1BhdGhTZWdDdXN0b20uY3BwIg0KIAkJCQkJPg0KIAkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQog
CQkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQpAQCAtMzk3MDMsMTYgKzM5NzE2LDggQEANCiAJCQkJ
CTwvRmlsZUNvbmZpZ3VyYXRpb24+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCi0JCQkJCVJl
bGF0aXZlUGF0aD0iLi5cYmluZGluZ3NcanNcSlNTVkdQT0RMaXN0Q3VzdG9tLmgiDQorCQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXEpTU1ZHUGF0aFNlZ0xpc3RDdXN0b20uY3BwIg0K
IAkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XGJpbmRpbmdzXGpzXEpTU1ZHUE9EVHlwZVdyYXBwZXIuaCINCi0JCQkJCT4NCi0JCQkJPC9GaWxl
Pg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxiaW5kaW5nc1xqc1xKU1Njcmlw
dFByb2ZpbGVOb2RlQ3VzdG9tLmNwcCINCi0JCQkJCT4NCiAJCQkJCTxGaWxlQ29uZmlndXJhdGlv
bg0KIAkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KIAkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0
cnVlIg0KQEAgLTM5NzYzLDYgKzM5NzY4LDE0IEBADQogCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9u
Pg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGJpbmRp
bmdzXGpzXEpTU1ZHUE9ETGlzdEN1c3RvbS5oIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJ
CTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXEpTU1ZHUE9EVHlwZVdy
YXBwZXIuaCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRp
dmVQYXRoPSIuLlxiaW5kaW5nc1xqc1xKU1RleHRDdXN0b20uY3BwIg0KIAkJCQkJPg0KIAkJCQkJ
PEZpbGVDb25maWd1cmF0aW9uDQpAQCAtNDAyNTEsNyArNDAyNjQsOCBAQA0KIAkJCQkJPC9GaWxl
Q29uZmlndXJhdGlvbj4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxiaW5kaW5nc1xqc1xKU1dvcmtlckNvbnRleHRFcnJvckhhbmRsZXIuY3BwIiA+DQor
CQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXEpTV29ya2VyQ29udGV4dEVycm9ySGFu
ZGxlci5jcHAiDQorCQkJCQk+DQogCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCiAJCQkJCQlOYW1l
PSJEZWJ1Z3xXaW4zMiINCiAJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCkluZGV4OiBX
ZWJLaXQvd2luL1dlYktpdC52Y3Byb2ovV2ViS2l0LnZjcHJvag0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdl
YktpdC93aW4vV2ViS2l0LnZjcHJvai9XZWJLaXQudmNwcm9qCShyZXZpc2lvbiA1ODE4NykNCisr
KyBXZWJLaXQvd2luL1dlYktpdC52Y3Byb2ovV2ViS2l0LnZjcHJvagkod29ya2luZyBjb3B5KQ0K
QEAgLTU5LDcgKzU5LDcgQEANCiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlua2Vy
VG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZGVsYXlpbXAubGliIGtlcm5lbDMy
LmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxs
MzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3Az
Mi5saWIgdXNwMTAubGliIGNvbWN0bDMyLmxpYiB2ZXJzaW9uLmxpYiBzaGx3YXBpLmxpYiBsaWJ4
bWwyJChMaWJyYXJ5Q29uZmlnU3VmZml4KS5saWIgbGlieHNsdCQoTGlicmFyeUNvbmZpZ1N1ZmZp
eCkubGliIGljdWluJChMaWJyYXJ5Q29uZmlnU3VmZml4KS5saWIgaWN1dWMkKExpYnJhcnlDb25m
aWdTdWZmaXgpLmxpYiBTUUxpdGUzJChMaWJyYXJ5Q29uZmlnU3VmZml4KS5saWIgcHRocmVhZFZD
MiQoTGlicmFyeUNvbmZpZ1N1ZmZpeCkubGliIENvcmVGb3VuZGF0aW9uJChMaWJyYXJ5Q29uZmln
U3VmZml4KS5saWIgSmF2YVNjcmlwdENvcmUkKFdlYktpdERMTENvbmZpZ1N1ZmZpeCkubGliIENG
TmV0d29yayQoTGlicmFyeUNvbmZpZ1N1ZmZpeCkubGliIENvcmVHcmFwaGljcyQoTGlicmFyeUNv
bmZpZ1N1ZmZpeCkubGliIFdlYktpdEdVSUQkKFdlYktpdENvbmZpZ1N1ZmZpeCkubGliIFdlYkNv
cmUkKFdlYktpdENvbmZpZ1N1ZmZpeCkubGliIFdlYktpdFN5c3RlbUludGVyZmFjZSQoV2ViS2l0
Q29uZmlnU3VmZml4KS5saWIgbXNpbWczMi5saWIgUVRNb3ZpZVdpbiQoV2ViS2l0Q29uZmlnU3Vm
Zml4KS5saWIgY3J5cHQzMi5saWIgaXBobHBhcGkubGliIHdpbm1tLmxpYiBycGNydDQubGliIGNv
bXN1cHB3LmxpYiINCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZGVsYXlpbXAubGliIGtl
cm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGli
IHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBv
ZGJjY3AzMi5saWIgdXNwMTAubGliIGNvbWN0bDMyLmxpYiB2ZXJzaW9uLmxpYiBzaGx3YXBpLmxp
YiBsaWJ4bWwyJChMaWJyYXJ5Q29uZmlnU3VmZml4KS5saWIgbGlieHNsdCQoTGlicmFyeUNvbmZp
Z1N1ZmZpeCkubGliIGljdWluJChMaWJyYXJ5Q29uZmlnU3VmZml4KS5saWIgaWN1dWMkKExpYnJh
cnlDb25maWdTdWZmaXgpLmxpYiBTUUxpdGUzJChMaWJyYXJ5Q29uZmlnU3VmZml4KS5saWIgcHRo
cmVhZFZDMiQoTGlicmFyeUNvbmZpZ1N1ZmZpeCkubGliIENvcmVGb3VuZGF0aW9uJChMaWJyYXJ5
Q29uZmlnU3VmZml4KS5saWIgSmF2YVNjcmlwdENvcmUkKFdlYktpdERMTENvbmZpZ1N1ZmZpeCku
bGliIENGTmV0d29yayQoTGlicmFyeUNvbmZpZ1N1ZmZpeCkubGliIENvcmVHcmFwaGljcyQoTGli
cmFyeUNvbmZpZ1N1ZmZpeCkubGliIENvcmVWaWRlbyQoTGlicmFyeUNvbmZpZ1N1ZmZpeCkubGli
IFdlYktpdEdVSUQkKFdlYktpdENvbmZpZ1N1ZmZpeCkubGliIFdlYkNvcmUkKFdlYktpdENvbmZp
Z1N1ZmZpeCkubGliIFdlYktpdFN5c3RlbUludGVyZmFjZSQoV2ViS2l0Q29uZmlnU3VmZml4KS5s
aWIgbXNpbWczMi5saWIgUVRNb3ZpZVdpbiQoV2ViS2l0Q29uZmlnU3VmZml4KS5saWIgY3J5cHQz
Mi5saWIgaXBobHBhcGkubGliIHdpbm1tLmxpYiBycGNydDQubGliIGNvbXN1cHB3LmxpYiINCiAJ
CQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXCQoUHJvamVjdE5hbWUpJChXZWJLaXRETExDb25maWdT
dWZmaXgpLmRsbCINCiAJCQkJQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz0iJChEWFNES19E
SVIpXExpYlx4ODYiDQogCQkJCU1vZHVsZURlZmluaXRpb25GaWxlPSJXZWJLaXQkKFdlYktpdERM
TENvbmZpZ1N1ZmZpeCkuZGVmIg0KQEAgLTEzNiw3ICsxMzYsNyBAQA0KIAkJCS8+DQogCQkJPFRv
b2wNCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVz
PSJkZWxheWltcC5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIGNvbWRsZzMy
LmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlk
LmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiB1c3AxMC5saWIgY29tY3RsMzIubGliIHZlcnNp
b24ubGliIHNobHdhcGkubGliIGxpYnhtbDIkKExpYnJhcnlDb25maWdTdWZmaXgpLmxpYiBsaWJ4
c2x0JChMaWJyYXJ5Q29uZmlnU3VmZml4KS5saWIgaWN1aW4kKExpYnJhcnlDb25maWdTdWZmaXgp
LmxpYiBpY3V1YyQoTGlicmFyeUNvbmZpZ1N1ZmZpeCkubGliIFNRTGl0ZTMkKExpYnJhcnlDb25m
aWdTdWZmaXgpLmxpYiBwdGhyZWFkVkMyJChMaWJyYXJ5Q29uZmlnU3VmZml4KS5saWIgQ29yZUZv
dW5kYXRpb24kKExpYnJhcnlDb25maWdTdWZmaXgpLmxpYiBKYXZhU2NyaXB0Q29yZSQoV2ViS2l0
RExMQ29uZmlnU3VmZml4KS5saWIgQ0ZOZXR3b3JrJChMaWJyYXJ5Q29uZmlnU3VmZml4KS5saWIg
Q29yZUdyYXBoaWNzJChMaWJyYXJ5Q29uZmlnU3VmZml4KS5saWIgV2ViS2l0R1VJRCQoV2ViS2l0
Q29uZmlnU3VmZml4KS5saWIgV2ViQ29yZSQoV2ViS2l0Q29uZmlnU3VmZml4KS5saWIgV2ViS2l0
U3lzdGVtSW50ZXJmYWNlJChXZWJLaXRDb25maWdTdWZmaXgpLmxpYiBtc2ltZzMyLmxpYiBRVE1v
dmllV2luJChXZWJLaXRDb25maWdTdWZmaXgpLmxpYiBjcnlwdDMyLmxpYiBpcGhscGFwaS5saWIg
d2lubW0ubGliIHJwY3J0NC5saWIgY29tc3VwcHcubGliIg0KKwkJCQlBZGRpdGlvbmFsRGVwZW5k
ZW5jaWVzPSJkZWxheWltcC5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIGNv
bWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxp
YiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiB1c3AxMC5saWIgY29tY3RsMzIubGli
IHZlcnNpb24ubGliIHNobHdhcGkubGliIGxpYnhtbDIkKExpYnJhcnlDb25maWdTdWZmaXgpLmxp
YiBsaWJ4c2x0JChMaWJyYXJ5Q29uZmlnU3VmZml4KS5saWIgaWN1aW4kKExpYnJhcnlDb25maWdT
dWZmaXgpLmxpYiBpY3V1YyQoTGlicmFyeUNvbmZpZ1N1ZmZpeCkubGliIFNRTGl0ZTMkKExpYnJh
cnlDb25maWdTdWZmaXgpLmxpYiBwdGhyZWFkVkMyJChMaWJyYXJ5Q29uZmlnU3VmZml4KS5saWIg
Q29yZUZvdW5kYXRpb24kKExpYnJhcnlDb25maWdTdWZmaXgpLmxpYiBKYXZhU2NyaXB0Q29yZSQo
V2ViS2l0RExMQ29uZmlnU3VmZml4KS5saWIgQ0ZOZXR3b3JrJChMaWJyYXJ5Q29uZmlnU3VmZml4
KS5saWIgQ29yZUdyYXBoaWNzJChMaWJyYXJ5Q29uZmlnU3VmZml4KS5saWIgQ29yZVZpZGVvJChM
aWJyYXJ5Q29uZmlnU3VmZml4KS5saWIgV2ViS2l0R1VJRCQoV2ViS2l0Q29uZmlnU3VmZml4KS5s
aWIgV2ViQ29yZSQoV2ViS2l0Q29uZmlnU3VmZml4KS5saWIgV2ViS2l0U3lzdGVtSW50ZXJmYWNl
JChXZWJLaXRDb25maWdTdWZmaXgpLmxpYiBtc2ltZzMyLmxpYiBRVE1vdmllV2luJChXZWJLaXRD
b25maWdTdWZmaXgpLmxpYiBjcnlwdDMyLmxpYiBpcGhscGFwaS5saWIgd2lubW0ubGliIHJwY3J0
NC5saWIgY29tc3VwcHcubGliIg0KIAkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcJChQcm9qZWN0
TmFtZSkkKFdlYktpdERMTENvbmZpZ1N1ZmZpeCkuZGxsIg0KIAkJCQlBZGRpdGlvbmFsTGlicmFy
eURpcmVjdG9yaWVzPSIkKERYU0RLX0RJUilcTGliXHg4NiINCiAJCQkJTW9kdWxlRGVmaW5pdGlv
bkZpbGU9IldlYktpdCQoV2ViS2l0RExMQ29uZmlnU3VmZml4KS5kZWYiDQpAQCAtMjEzLDcgKzIx
Myw3IEBADQogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJ
CUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImRlbGF5aW1wLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMy
LmxpYiBnZGkzMi5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUz
Mi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIHVzcDEw
LmxpYiBjb21jdGwzMi5saWIgdmVyc2lvbi5saWIgc2hsd2FwaS5saWIgbGlieG1sMiQoTGlicmFy
eUNvbmZpZ1N1ZmZpeCkubGliIGxpYnhzbHQkKExpYnJhcnlDb25maWdTdWZmaXgpLmxpYiBpY3Vp
biQoTGlicmFyeUNvbmZpZ1N1ZmZpeCkubGliIGljdXVjJChMaWJyYXJ5Q29uZmlnU3VmZml4KS5s
aWIgU1FMaXRlMyQoTGlicmFyeUNvbmZpZ1N1ZmZpeCkubGliIHB0aHJlYWRWQzIkKExpYnJhcnlD
b25maWdTdWZmaXgpLmxpYiBDb3JlRm91bmRhdGlvbiQoTGlicmFyeUNvbmZpZ1N1ZmZpeCkubGli
IEphdmFTY3JpcHRDb3JlJChXZWJLaXRETExDb25maWdTdWZmaXgpLmxpYiBDRk5ldHdvcmskKExp
YnJhcnlDb25maWdTdWZmaXgpLmxpYiBDb3JlR3JhcGhpY3MkKExpYnJhcnlDb25maWdTdWZmaXgp
LmxpYiBXZWJLaXRHVUlEJChXZWJLaXRDb25maWdTdWZmaXgpLmxpYiBXZWJDb3JlJChXZWJLaXRD
b25maWdTdWZmaXgpLmxpYiBXZWJLaXRTeXN0ZW1JbnRlcmZhY2UkKFdlYktpdENvbmZpZ1N1ZmZp
eCkubGliIG1zaW1nMzIubGliIFFUTW92aWVXaW4kKFdlYktpdENvbmZpZ1N1ZmZpeCkubGliIGNy
eXB0MzIubGliIGlwaGxwYXBpLmxpYiB3aW5tbS5saWIgcnBjcnQ0LmxpYiBjb21zdXBwdy5saWIi
DQorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImRlbGF5aW1wLmxpYiBrZXJuZWwzMi5saWIg
dXNlcjMyLmxpYiBnZGkzMi5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxp
YiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGli
IHVzcDEwLmxpYiBjb21jdGwzMi5saWIgdmVyc2lvbi5saWIgc2hsd2FwaS5saWIgbGlieG1sMiQo
TGlicmFyeUNvbmZpZ1N1ZmZpeCkubGliIGxpYnhzbHQkKExpYnJhcnlDb25maWdTdWZmaXgpLmxp
YiBpY3VpbiQoTGlicmFyeUNvbmZpZ1N1ZmZpeCkubGliIGljdXVjJChMaWJyYXJ5Q29uZmlnU3Vm
Zml4KS5saWIgU1FMaXRlMyQoTGlicmFyeUNvbmZpZ1N1ZmZpeCkubGliIHB0aHJlYWRWQzIkKExp
YnJhcnlDb25maWdTdWZmaXgpLmxpYiBDb3JlRm91bmRhdGlvbiQoTGlicmFyeUNvbmZpZ1N1ZmZp
eCkubGliIEphdmFTY3JpcHRDb3JlJChXZWJLaXRETExDb25maWdTdWZmaXgpLmxpYiBDRk5ldHdv
cmskKExpYnJhcnlDb25maWdTdWZmaXgpLmxpYiBDb3JlR3JhcGhpY3MkKExpYnJhcnlDb25maWdT
dWZmaXgpLmxpYiBDb3JlVmlkZW8kKExpYnJhcnlDb25maWdTdWZmaXgpLmxpYiBXZWJLaXRHVUlE
JChXZWJLaXRDb25maWdTdWZmaXgpLmxpYiBXZWJDb3JlJChXZWJLaXRDb25maWdTdWZmaXgpLmxp
YiBXZWJLaXRTeXN0ZW1JbnRlcmZhY2UkKFdlYktpdENvbmZpZ1N1ZmZpeCkubGliIG1zaW1nMzIu
bGliIFFUTW92aWVXaW4kKFdlYktpdENvbmZpZ1N1ZmZpeCkubGliIGNyeXB0MzIubGliIGlwaGxw
YXBpLmxpYiB3aW5tbS5saWIgcnBjcnQ0LmxpYiBjb21zdXBwdy5saWIiDQogCQkJCU91dHB1dEZp
bGU9IiQoT3V0RGlyKVwkKFByb2plY3ROYW1lKSQoV2ViS2l0RExMQ29uZmlnU3VmZml4KS5kbGwi
DQogCQkJCUFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM9IiQoRFhTREtfRElSKVxMaWJceDg2
Ig0KIAkJCQlNb2R1bGVEZWZpbml0aW9uRmlsZT0iV2ViS2l0JChXZWJLaXRETExDb25maWdTdWZm
aXgpLmRlZiINCkBAIC00NDYsNyArNDQ2LDcgQEANCiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5h
bWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZGVsYXlpbXAu
bGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiBjb21kbGczMi5saWIgYWR2YXBp
MzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMy
LmxpYiBvZGJjY3AzMi5saWIgdXNwMTAubGliIGNvbWN0bDMyLmxpYiB2ZXJzaW9uLmxpYiBzaGx3
YXBpLmxpYiBsaWJ4bWwyJChMaWJyYXJ5Q29uZmlnU3VmZml4KS5saWIgbGlieHNsdCQoTGlicmFy
eUNvbmZpZ1N1ZmZpeCkubGliIGljdWluJChMaWJyYXJ5Q29uZmlnU3VmZml4KS5saWIgaWN1dWMk
KExpYnJhcnlDb25maWdTdWZmaXgpLmxpYiBTUUxpdGUzJChMaWJyYXJ5Q29uZmlnU3VmZml4KS5s
aWIgcHRocmVhZFZDMiQoTGlicmFyeUNvbmZpZ1N1ZmZpeCkubGliIENvcmVGb3VuZGF0aW9uJChM
aWJyYXJ5Q29uZmlnU3VmZml4KS5saWIgSmF2YVNjcmlwdENvcmUkKFdlYktpdERMTENvbmZpZ1N1
ZmZpeCkubGliIENGTmV0d29yayQoTGlicmFyeUNvbmZpZ1N1ZmZpeCkubGliIENvcmVHcmFwaGlj
cyQoTGlicmFyeUNvbmZpZ1N1ZmZpeCkubGliIFdlYktpdEdVSUQkKFdlYktpdENvbmZpZ1N1ZmZp
eCkubGliIFdlYkNvcmUkKFdlYktpdENvbmZpZ1N1ZmZpeCkubGliIFdlYktpdFN5c3RlbUludGVy
ZmFjZSQoV2ViS2l0Q29uZmlnU3VmZml4KS5saWIgbXNpbWczMi5saWIgUVRNb3ZpZVdpbiQoV2Vi
S2l0Q29uZmlnU3VmZml4KS5saWIgY3J5cHQzMi5saWIgaXBobHBhcGkubGliIHdpbm1tLmxpYiBy
cGNydDQubGliIGNvbXN1cHB3LmxpYiINCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZGVs
YXlpbXAubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiBjb21kbGczMi5saWIg
YWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIg
b2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgdXNwMTAubGliIGNvbWN0bDMyLmxpYiB2ZXJzaW9uLmxp
YiBzaGx3YXBpLmxpYiBsaWJ4bWwyJChMaWJyYXJ5Q29uZmlnU3VmZml4KS5saWIgbGlieHNsdCQo
TGlicmFyeUNvbmZpZ1N1ZmZpeCkubGliIGljdWluJChMaWJyYXJ5Q29uZmlnU3VmZml4KS5saWIg
aWN1dWMkKExpYnJhcnlDb25maWdTdWZmaXgpLmxpYiBTUUxpdGUzJChMaWJyYXJ5Q29uZmlnU3Vm
Zml4KS5saWIgcHRocmVhZFZDMiQoTGlicmFyeUNvbmZpZ1N1ZmZpeCkubGliIENvcmVGb3VuZGF0
aW9uJChMaWJyYXJ5Q29uZmlnU3VmZml4KS5saWIgSmF2YVNjcmlwdENvcmUkKFdlYktpdERMTENv
bmZpZ1N1ZmZpeCkubGliIENGTmV0d29yayQoTGlicmFyeUNvbmZpZ1N1ZmZpeCkubGliIENvcmVH
cmFwaGljcyQoTGlicmFyeUNvbmZpZ1N1ZmZpeCkubGliIENvcmVWaWRlbyQoTGlicmFyeUNvbmZp
Z1N1ZmZpeCkubGliIFdlYktpdEdVSUQkKFdlYktpdENvbmZpZ1N1ZmZpeCkubGliIFdlYkNvcmUk
KFdlYktpdENvbmZpZ1N1ZmZpeCkubGliIFdlYktpdFN5c3RlbUludGVyZmFjZSQoV2ViS2l0Q29u
ZmlnU3VmZml4KS5saWIgbXNpbWczMi5saWIgUVRNb3ZpZVdpbiQoV2ViS2l0Q29uZmlnU3VmZml4
KS5saWIgY3J5cHQzMi5saWIgaXBobHBhcGkubGliIHdpbm1tLmxpYiBycGNydDQubGliIGNvbXN1
cHB3LmxpYiINCiAJCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXCQoUHJvamVjdE5hbWUpJChXZWJL
aXRETExDb25maWdTdWZmaXgpLmRsbCINCiAJCQkJQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmll
cz0iJChEWFNES19ESVIpXExpYlx4ODYiDQogCQkJCU1vZHVsZURlZmluaXRpb25GaWxlPSJXZWJL
aXQkKFdlYktpdERMTENvbmZpZ1N1ZmZpeCkuZGVmIg0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54512</attachid>
            <date>2010-04-27 20:46:38 -0700</date>
            <delta_ts>2010-04-28 10:51:09 -0700</delta_ts>
            <desc>Patch which breaks up QTMovieWin into QTMovieWin and QTMovie</desc>
            <filename>7569713-QTMovieWin-Breakup.patch</filename>
            <type>text/plain</type>
            <size>67765</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWUuY3BwDQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09DQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRNb3ZpZS5jcHAJKHJldmlz
aW9uIDU3NjYzKQ0KKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWUuY3Bw
CSh3b3JraW5nIGNvcHkpDQpAQCAtMjQsMTcgKzI0LDE3IEBADQogICovCiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAKLSNpbmNsdWRlICJRVE1vdmllV2luLmgiCisjaW5jbHVkZSAiUVRNb3ZpZS5oIgog
CiAvLyBQdXQgTW92aWVzLmggZmlyc3Qgc28gYnVpbGQgZmFpbHVyZXMgaGVyZSBwb2ludCBjbGVh
cmx5IHRvIFF1aWNrVGltZQogI2luY2x1ZGUgPE1vdmllcy5oPgogCisjaW5jbHVkZSAiUVRNb3Zp
ZVRhc2suaCIKICNpbmNsdWRlICJRVE1vdmllV2luVGltZXIuaCIKICNpbmNsdWRlIDxHWE1hdGgu
aD4KICNpbmNsdWRlIDxRVE1MLmg+CiAjaW5jbHVkZSA8UXVpY2tUaW1lQ29tcG9uZW50cy5oPgog
I2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAg
LTQ3LDcgKzQ3LDcgQEANCiBzdGF0aWMgY29uc3QgbG9uZyBtcGVnNE9iamVjdERlc2NyaXB0aW9u
VHJhY2tUeXBlID0gJ29kc20nOwogc3RhdGljIGNvbnN0IGxvbmcgbXBlZzRTY2VuZURlc2NyaXB0
aW9uVHJhY2tUeXBlID0gJ3Nkc20nOwogc3RhdGljIGNvbnN0IGxvbmcgY2xvc2VkQ2FwdGlvbkRp
c3BsYXlQcm9wZXJ0eUlEID0gJ2Rpc3AnOwotc3RhdGljIExQQ1RTVFIgZnVsbHNjcmVlblFUTW92
aWVXaW5Qb2ludGVyUHJvcCA9IFRFWFQoImZ1bGxzY3JlZW5RVE1vdmllV2luUG9pbnRlciIpOwor
c3RhdGljIExQQ1RTVFIgZnVsbHNjcmVlblFUTW92aWVQb2ludGVyUHJvcCA9IFRFWFQoImZ1bGxz
Y3JlZW5RVE1vdmllUG9pbnRlciIpOwogCiAvLyBSZXNpemluZyBHV29ybGRzIGlzIHNsb3csIGdp
dmUgdGhlbSBhIG1pbmltdW0gc2l6ZSBzbyBzaXplIG9mIHNtYWxsIAogLy8gdmlkZW9zIGNhbiBi
ZSBhbmltYXRlZCBzbW9vdGhseQpAQCAtNjEsNTMgKzYxLDI1IEBADQogICAgIHZvaWQqIHB0cjsK
IH07CiAKLXN0YXRpYyBNb3ZpZURyYXdpbmdDb21wbGV0ZVVQUCBnTW92aWVEcmF3aW5nQ29tcGxl
dGVVUFAgPSAwOwotc3RhdGljIEhhc2hTZXQ8UVRNb3ZpZVdpblByaXZhdGUqPiogZ1Rhc2tMaXN0
Owogc3RhdGljIFZlY3RvcjxDRlN0cmluZ1JlZj4qIGdTdXBwb3J0ZWRUeXBlcyA9IDA7CiBzdGF0
aWMgU0ludDMyIHF1aWNrVGltZVZlcnNpb24gPSAwOwogCi1zdGF0aWMgUVRNb3ZpZVdpbjo6U2V0
VGFza1RpbWVyRGVsYXlGdW5jIGdTZXRUYXNrVGltZXJEZWxheSA9IDA7Ci1zdGF0aWMgUVRNb3Zp
ZVdpbjo6U3RvcFRhc2tUaW1lckZ1bmMgZ1N0b3BUYXNrVGltZXIgPSAwOwotCi1zdGF0aWMgdm9p
ZCB1cGRhdGVUYXNrVGltZXIoaW50IG1heEludGVydmFsID0gMTAwMCkKLXsKLSAgICBpZiAoIWdU
YXNrTGlzdC0+c2l6ZSgpKSB7Ci0gICAgICAgIGdTdG9wVGFza1RpbWVyKCk7Ci0gICAgICAgIHJl
dHVybjsgICAgCi0gICAgfQotICAgIAotICAgIGxvbmcgaW50ZXJ2YWxJbk1TOwotICAgIFFUR2V0
VGltZVVudGlsTmV4dFRhc2soJmludGVydmFsSW5NUywgMTAwMCk7Ci0gICAgaWYgKGludGVydmFs
SW5NUyA+IG1heEludGVydmFsKQotICAgICAgICBpbnRlcnZhbEluTVMgPSBtYXhJbnRlcnZhbDsK
LSAgICBnU2V0VGFza1RpbWVyRGVsYXkoc3RhdGljX2Nhc3Q8ZmxvYXQ+KGludGVydmFsSW5NUykg
LyAxMDAwKTsKLX0KLQotY2xhc3MgUVRNb3ZpZVdpblByaXZhdGUgOiBwdWJsaWMgTm9uY29weWFi
bGUgeworY2xhc3MgUVRNb3ZpZVByaXZhdGUgOiBwdWJsaWMgTm9uY29weWFibGUsIHB1YmxpYyBR
VE1vdmllVGFza0NsaWVudCB7CiBwdWJsaWM6Ci0gICAgUVRNb3ZpZVdpblByaXZhdGUoKTsKLSAg
ICB+UVRNb3ZpZVdpblByaXZhdGUoKTsKKyAgICBRVE1vdmllUHJpdmF0ZSgpOworICAgIH5RVE1v
dmllUHJpdmF0ZSgpOwogICAgIHZvaWQgdGFzaygpOwogICAgIHZvaWQgc3RhcnRUYXNrKCk7CiAg
ICAgdm9pZCBlbmRUYXNrKCk7CiAKICAgICB2b2lkIGNyZWF0ZU1vdmllQ29udHJvbGxlcigpOwot
ICAgIHZvaWQgcmVnaXN0ZXJEcmF3aW5nQ2FsbGJhY2soKTsKLSAgICB2b2lkIGRyYXdpbmdDb21w
bGV0ZSgpOwotICAgIHZvaWQgdXBkYXRlR1dvcmxkKCk7Ci0gICAgdm9pZCBjcmVhdGVHV29ybGQo
KTsKLSAgICB2b2lkIGRlbGV0ZUdXb3JsZCgpOwotICAgIHZvaWQgY2xlYXJHV29ybGQoKTsKLSAg
ICB2b2lkIGNhY2hlTW92aWVTY2FsZSgpOwotICAgIHZvaWQgdXBkYXRlTW92aWVTaXplKCk7CiAK
LSAgICB2b2lkIHNldFNpemUoaW50LCBpbnQpOwotCi0gICAgUVRNb3ZpZVdpbiogbV9tb3ZpZVdp
bjsKKyAgICBRVE1vdmllKiBtX21vdmllV2luOwogICAgIE1vdmllIG1fbW92aWU7CiAgICAgTW92
aWVDb250cm9sbGVyIG1fbW92aWVDb250cm9sbGVyOwogICAgIGJvb2wgbV90YXNraW5nOwotICAg
IFFUTW92aWVXaW5DbGllbnQqIG1fY2xpZW50OworICAgIGJvb2wgbV9kaXNhYmxlZDsKKyAgICBW
ZWN0b3I8UVRNb3ZpZUNsaWVudCo+IG1fY2xpZW50czsKICAgICBsb25nIG1fbG9hZFN0YXRlOwog
ICAgIGJvb2wgbV9lbmRlZDsKICAgICBib29sIG1fc2Vla2luZzsKQEAgLTExNiwxMCArODgsNiBA
QA0KICAgICBpbnQgbV93aWR0aDsKICAgICBpbnQgbV9oZWlnaHQ7CiAgICAgYm9vbCBtX3Zpc2li
bGU7Ci0gICAgR1dvcmxkUHRyIG1fZ1dvcmxkOwotICAgIGludCBtX2dXb3JsZFdpZHRoOwotICAg
IGludCBtX2dXb3JsZEhlaWdodDsKLSAgICBHV29ybGRQdHIgbV9zYXZlZEdXb3JsZDsKICAgICBs
b25nIG1fbG9hZEVycm9yOwogICAgIGZsb2F0IG1fd2lkdGhTY2FsZUZhY3RvcjsKICAgICBmbG9h
dCBtX2hlaWdodFNjYWxlRmFjdG9yOwpAQCAtMTI5LDE5ICs5NywxMyBAQA0KICNpZiAhQVNTRVJU
X0RJU0FCTEVECiAgICAgYm9vbCBtX3NjYWxlQ2FjaGVkOwogI2VuZGlmCi0gICAgV2luZG93UHRy
IG1fZnVsbHNjcmVlbldpbmRvdzsKLSAgICBHV29ybGRQdHIgbV9mdWxsc2NyZWVuT3JpZ0dXb3Js
ZDsKLSAgICBSZWN0IG1fZnVsbHNjcmVlblJlY3Q7Ci0gICAgUVRNb3ZpZVdpbkZ1bGxzY3JlZW5D
bGllbnQqIG1fZnVsbHNjcmVlbkNsaWVudDsKLSAgICBjaGFyKiBtX2Z1bGxzY3JlZW5SZXN0b3Jl
U3RhdGU7CiB9OwogCi1RVE1vdmllV2luUHJpdmF0ZTo6UVRNb3ZpZVdpblByaXZhdGUoKQorUVRN
b3ZpZVByaXZhdGU6OlFUTW92aWVQcml2YXRlKCkKICAgICA6IG1fbW92aWVXaW4oMCkKICAgICAs
IG1fbW92aWUoMCkKICAgICAsIG1fbW92aWVDb250cm9sbGVyKDApCiAgICAgLCBtX3Rhc2tpbmco
ZmFsc2UpCi0gICAgLCBtX2NsaWVudCgwKQogICAgICwgbV9sb2FkU3RhdGUoMCkKICAgICAsIG1f
ZW5kZWQoZmFsc2UpCiAgICAgLCBtX3NlZWtpbmcoZmFsc2UpCkBAIC0xNTAsMzUgKzExMiwyMiBA
QA0KICAgICAsIG1fd2lkdGgoMCkKICAgICAsIG1faGVpZ2h0KDApCiAgICAgLCBtX3Zpc2libGUo
ZmFsc2UpCi0gICAgLCBtX2dXb3JsZCgwKQotICAgICwgbV9nV29ybGRXaWR0aCgwKQotICAgICwg
bV9nV29ybGRIZWlnaHQoMCkKLSAgICAsIG1fc2F2ZWRHV29ybGQoMCkKICAgICAsIG1fbG9hZEVy
cm9yKDApCiAgICAgLCBtX3dpZHRoU2NhbGVGYWN0b3IoMSkKICAgICAsIG1faGVpZ2h0U2NhbGVG
YWN0b3IoMSkKICAgICAsIG1fY3VycmVudFVSTCgwKQogICAgICwgbV90aW1lVG9SZXN0b3JlKC0x
LjBmKQogICAgICwgbV9yYXRlVG9SZXN0b3JlKC0xLjBmKQorICAgICwgbV9kaXNhYmxlZChmYWxz
ZSkKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgLCBtX3NjYWxlQ2FjaGVkKGZhbHNlKQogI2Vu
ZGlmCi0gICAgLCBtX2Z1bGxzY3JlZW5XaW5kb3coMCkKLSAgICAsIG1fZnVsbHNjcmVlbk9yaWdH
V29ybGQoMCkKLSAgICAsIG1fZnVsbHNjcmVlbkNsaWVudCgwKQotICAgICwgbV9mdWxsc2NyZWVu
UmVzdG9yZVN0YXRlKDApCiB7Ci0gICAgUmVjdCByZWN0ID0geyAwLCAwLCAwLCAwIH07Ci0gICAg
bV9mdWxsc2NyZWVuUmVjdCA9IHJlY3Q7CiB9CiAKLVFUTW92aWVXaW5Qcml2YXRlOjp+UVRNb3Zp
ZVdpblByaXZhdGUoKQorUVRNb3ZpZVByaXZhdGU6On5RVE1vdmllUHJpdmF0ZSgpCiB7Ci0gICAg
QVNTRVJUKCFtX2Z1bGxzY3JlZW5XaW5kb3cpOwotCiAgICAgZW5kVGFzaygpOwotICAgIGlmICht
X2dXb3JsZCkKLSAgICAgICAgZGVsZXRlR1dvcmxkKCk7CiAgICAgaWYgKG1fbW92aWVDb250cm9s
bGVyKQogICAgICAgICBEaXNwb3NlTW92aWVDb250cm9sbGVyKG1fbW92aWVDb250cm9sbGVyKTsK
ICAgICBpZiAobV9tb3ZpZSkKQEAgLTE4Nyw2MCArMTM2LDI2IEBADQogICAgICAgICBDRlJlbGVh
c2UobV9jdXJyZW50VVJMKTsKIH0KIAotdm9pZCBRVE1vdmllV2luOjp0YXNrVGltZXJGaXJlZCgp
Cit2b2lkIFFUTW92aWVQcml2YXRlOjpzdGFydFRhc2soKSAKIHsKLSAgICAvLyBUaGUgaGFzaCBj
b250ZW50IG1pZ2h0IGNoYW5nZSBkdXJpbmcgdGFzaygpCi0gICAgVmVjdG9yPFFUTW92aWVXaW5Q
cml2YXRlKj4gdGFza3M7Ci0gICAgY29weVRvVmVjdG9yKCpnVGFza0xpc3QsIHRhc2tzKTsKLSAg
ICBzaXplX3QgY291bnQgPSB0YXNrcy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBuID0gMDsg
biA8IGNvdW50OyArK24pCi0gICAgICAgIHRhc2tzW25dLT50YXNrKCk7Ci0KLSAgICB1cGRhdGVU
YXNrVGltZXIoKTsKKyAgICBpZiAoIW1fdGFza2luZykgeworICAgICAgICBRVE1vdmllVGFzazo6
c2hhcmVkVGFzaygpLT5hZGRUYXNrQ2xpZW50KHRoaXMpOworICAgICAgICBtX3Rhc2tpbmcgPSB0
cnVlOworICAgIH0KKyAgICBRVE1vdmllVGFzazo6c2hhcmVkVGFzaygpLT51cGRhdGVUYXNrVGlt
ZXIoKTsKIH0KIAotdm9pZCBRVE1vdmllV2luUHJpdmF0ZTo6c3RhcnRUYXNrKCkgCit2b2lkIFFU
TW92aWVQcml2YXRlOjplbmRUYXNrKCkgCiB7Ci0gICAgaWYgKG1fdGFza2luZykKLSAgICAgICAg
cmV0dXJuOwotICAgIGlmICghZ1Rhc2tMaXN0KQotICAgICAgICBnVGFza0xpc3QgPSBuZXcgSGFz
aFNldDxRVE1vdmllV2luUHJpdmF0ZSo+OwotICAgIGdUYXNrTGlzdC0+YWRkKHRoaXMpOwotICAg
IG1fdGFza2luZyA9IHRydWU7Ci0gICAgdXBkYXRlVGFza1RpbWVyKCk7CisgICAgaWYgKG1fdGFz
a2luZykgeworICAgICAgICBRVE1vdmllVGFzazo6c2hhcmVkVGFzaygpLT5yZW1vdmVUYXNrQ2xp
ZW50KHRoaXMpOworICAgICAgICBtX3Rhc2tpbmcgPSBmYWxzZTsKKyAgICB9CisgICAgUVRNb3Zp
ZVRhc2s6OnNoYXJlZFRhc2soKS0+dXBkYXRlVGFza1RpbWVyKCk7CiB9CiAKLXZvaWQgUVRNb3Zp
ZVdpblByaXZhdGU6OmVuZFRhc2soKSAKK3ZvaWQgUVRNb3ZpZVByaXZhdGU6OnRhc2soKSAKIHsK
LSAgICBpZiAoIW1fdGFza2luZykKLSAgICAgICAgcmV0dXJuOwotICAgIGdUYXNrTGlzdC0+cmVt
b3ZlKHRoaXMpOwotICAgIG1fdGFza2luZyA9IGZhbHNlOwotICAgIHVwZGF0ZVRhc2tUaW1lcigp
OwotfQotCi12b2lkIFFUTW92aWVXaW5Qcml2YXRlOjpjYWNoZU1vdmllU2NhbGUoKQotewotICAg
IFJlY3QgbmF0dXJhbFJlY3Q7Ci0gICAgUmVjdCBpbml0aWFsUmVjdDsKLQotICAgIEdldE1vdmll
TmF0dXJhbEJvdW5kc1JlY3QobV9tb3ZpZSwgJm5hdHVyYWxSZWN0KTsKLSAgICBHZXRNb3ZpZUJv
eChtX21vdmllLCAmaW5pdGlhbFJlY3QpOwotCi0gICAgZmxvYXQgbmF0dXJhbFdpZHRoID0gbmF0
dXJhbFJlY3QucmlnaHQgLSBuYXR1cmFsUmVjdC5sZWZ0OwotICAgIGZsb2F0IG5hdHVyYWxIZWln
aHQgPSBuYXR1cmFsUmVjdC5ib3R0b20gLSBuYXR1cmFsUmVjdC50b3A7Ci0KLSAgICBpZiAobmF0
dXJhbFdpZHRoKQotICAgICAgICBtX3dpZHRoU2NhbGVGYWN0b3IgPSAoaW5pdGlhbFJlY3Qucmln
aHQgLSBpbml0aWFsUmVjdC5sZWZ0KSAvIG5hdHVyYWxXaWR0aDsKLSAgICBpZiAobmF0dXJhbEhl
aWdodCkKLSAgICAgICAgbV9oZWlnaHRTY2FsZUZhY3RvciA9IChpbml0aWFsUmVjdC5ib3R0b20g
LSBpbml0aWFsUmVjdC50b3ApIC8gbmF0dXJhbEhlaWdodDsKLSNpZiAhQVNTRVJUX0RJU0FCTEVE
Ci0gICAgbV9zY2FsZUNhY2hlZCA9IHRydWU7OwotI2VuZGlmCi19Ci0KLXZvaWQgUVRNb3ZpZVdp
blByaXZhdGU6OnRhc2soKSAKLXsKICAgICBBU1NFUlQobV90YXNraW5nKTsKIAogICAgIGlmICgh
bV9sb2FkRXJyb3IpIHsKQEAgLTI1NiwyMyArMTcxLDE5IEBADQogICAgICAgICAvLyBUaGlzIGlz
IGRpZmZlcmVudCBmcm9tIFFUS2l0IEFQSSBhbmQgc2VlbXMgc3RyYW5nZS4KICAgICAgICAgbG9u
ZyBsb2FkU3RhdGUgPSBtX2xvYWRFcnJvciA/IFFUTW92aWVMb2FkU3RhdGVFcnJvciA6IEdldE1v
dmllTG9hZFN0YXRlKG1fbW92aWUpOwogICAgICAgICBpZiAobG9hZFN0YXRlICE9IG1fbG9hZFN0
YXRlKSB7Ci0KICAgICAgICAgICAgIC8vIHdlIG9ubHkgbmVlZCB0byBlcmFzZSB0aGUgbW92aWUg
Z3dvcmxkIHdoZW4gdGhlIGxvYWQgc3RhdGUgY2hhbmdlcyB0byBsb2FkZWQgd2hpbGUgaXQKICAg
ICAgICAgICAgIC8vICBpcyB2aXNpYmxlIGFzIHRoZSBnd29ybGQgaXMgZGVzdHJveWVkL2NyZWF0
ZWQgd2hlbiB2aXNpYmlsaXR5IGNoYW5nZXMKICAgICAgICAgICAgIGJvb2wgc2hvdWxkUmVzdG9y
ZVBsYXliYWNrU3RhdGUgPSBmYWxzZTsKICAgICAgICAgICAgIGJvb2wgbW92aWVOZXdseVBsYXlh
YmxlID0gbG9hZFN0YXRlID49IFFUTW92aWVMb2FkU3RhdGVMb2FkZWQgJiYgbV9sb2FkU3RhdGUg
PCBRVE1vdmllTG9hZFN0YXRlTG9hZGVkOwogICAgICAgICAgICAgbV9sb2FkU3RhdGUgPSBsb2Fk
U3RhdGU7Ci0gICAgICAgICAgICBpZiAobW92aWVOZXdseVBsYXlhYmxlKSB7Ci0gICAgICAgICAg
ICAgICAgY2FjaGVNb3ZpZVNjYWxlKCk7Ci0gICAgICAgICAgICAgICAgdXBkYXRlTW92aWVTaXpl
KCk7Ci0gICAgICAgICAgICAgICAgaWYgKG1fdmlzaWJsZSkKLSAgICAgICAgICAgICAgICAgICAg
Y2xlYXJHV29ybGQoKTsKKyAgICAgICAgICAgIGlmIChtb3ZpZU5ld2x5UGxheWFibGUpCiAgICAg
ICAgICAgICAgICAgc2hvdWxkUmVzdG9yZVBsYXliYWNrU3RhdGUgPSB0cnVlOwotICAgICAgICAg
ICAgfQogCiAgICAgICAgICAgICBpZiAoIW1fbW92aWVDb250cm9sbGVyICYmIG1fbG9hZFN0YXRl
ID49IFFUTW92aWVMb2FkU3RhdGVMb2FkZWQpCiAgICAgICAgICAgICAgICAgY3JlYXRlTW92aWVD
b250cm9sbGVyKCk7Ci0gICAgICAgICAgICBtX2NsaWVudC0+bW92aWVMb2FkU3RhdGVDaGFuZ2Vk
KG1fbW92aWVXaW4pOworCisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY2xp
ZW50cy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICBtX2NsaWVudHNbaV0tPm1vdmllTG9h
ZFN0YXRlQ2hhbmdlZChtX21vdmllV2luKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYg
KHNob3VsZFJlc3RvcmVQbGF5YmFja1N0YXRlICYmIG1fdGltZVRvUmVzdG9yZSAhPSAtMS4wZikg
ewogICAgICAgICAgICAgICAgIG1fbW92aWVXaW4tPnNldEN1cnJlbnRUaW1lKG1fdGltZVRvUmVz
dG9yZSk7CkBAIC0yODEsNyArMTkyLDcgQEANCiAgICAgICAgICAgICAgICAgbV9yYXRlVG9SZXN0
b3JlID0gLTEuMGY7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChtX21vdmllV2lu
LT5tX2Rpc2FibGVkKSB7CisgICAgICAgICAgICBpZiAobV9kaXNhYmxlZCkgewogICAgICAgICAg
ICAgICAgIGVuZFRhc2soKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9
CkBAIC0yOTIsMjMgKzIwMywyNyBAQA0KICAgICBib29sIGVuZGVkID0gISFJc01vdmllRG9uZSht
X21vdmllKTsKICAgICBpZiAoZW5kZWQgIT0gbV9lbmRlZCkgewogICAgICAgICBtX2VuZGVkID0g
ZW5kZWQ7Ci0gICAgICAgIGlmIChtX2NsaWVudCAmJiBlbmRlZCkKLSAgICAgICAgICAgIG1fY2xp
ZW50LT5tb3ZpZUVuZGVkKG1fbW92aWVXaW4pOworICAgICAgICBpZiAoZW5kZWQpIHsKKyAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jbGllbnRzLnNpemUoKTsgKytpKQorICAg
ICAgICAgICAgICAgbV9jbGllbnRzW2ldLT5tb3ZpZUVuZGVkKG1fbW92aWVXaW4pOworICAgICAg
ICB9CiAgICAgfQogCiAgICAgZmxvYXQgdGltZSA9IG1fbW92aWVXaW4tPmN1cnJlbnRUaW1lKCk7
CiAgICAgaWYgKHRpbWUgPCBtX2xhc3RNZWRpYVRpbWUgfHwgdGltZSA+PSBtX2xhc3RNZWRpYVRp
bWUgKyBjTm9uQ29udGludW91c1RpbWVDaGFuZ2UgfHwgbV9zZWVraW5nKSB7CiAgICAgICAgIG1f
c2Vla2luZyA9IGZhbHNlOwotICAgICAgICBpZiAobV9jbGllbnQpCi0gICAgICAgICAgICBtX2Ns
aWVudC0+bW92aWVUaW1lQ2hhbmdlZChtX21vdmllV2luKTsKKyAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX2NsaWVudHMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBtX2NsaWVudHNb
aV0tPm1vdmllVGltZUNoYW5nZWQobV9tb3ZpZVdpbik7CiAgICAgfQogICAgIG1fbGFzdE1lZGlh
VGltZSA9IHRpbWU7CiAKICAgICBpZiAobV9sb2FkRXJyb3IpCiAgICAgICAgIGVuZFRhc2soKTsK
KyAgICBlbHNlCisgICAgICAgIFFUTW92aWVUYXNrOjpzaGFyZWRUYXNrKCktPnVwZGF0ZVRhc2tU
aW1lcigpOwogfQogCi12b2lkIFFUTW92aWVXaW5Qcml2YXRlOjpjcmVhdGVNb3ZpZUNvbnRyb2xs
ZXIoKQordm9pZCBRVE1vdmllUHJpdmF0ZTo6Y3JlYXRlTW92aWVDb250cm9sbGVyKCkKIHsKICAg
ICBSZWN0IGJvdW5kczsKICAgICBsb25nIGZsYWdzOwpAQCAtMzI0LDE1NiArMjM5LDM3IEBADQog
ICAgIG1fbW92aWVDb250cm9sbGVyID0gTmV3TW92aWVDb250cm9sbGVyKG1fbW92aWUsICZib3Vu
ZHMsIGZsYWdzKTsKICAgICBpZiAoIW1fbW92aWVDb250cm9sbGVyKQogICAgICAgICByZXR1cm47
Ci0KLSAgICBNQ1NldENvbnRyb2xsZXJQb3J0KG1fbW92aWVDb250cm9sbGVyLCBtX2dXb3JsZCk7
Ci0gICAgTUNTZXRDb250cm9sbGVyQXR0YWNoZWQobV9tb3ZpZUNvbnRyb2xsZXIsIGZhbHNlKTsK
IH0KIAotdm9pZCBRVE1vdmllV2luUHJpdmF0ZTo6cmVnaXN0ZXJEcmF3aW5nQ2FsbGJhY2soKQor
UVRNb3ZpZTo6UVRNb3ZpZShRVE1vdmllQ2xpZW50KiBjbGllbnQpCisgICAgOiBtX3ByaXZhdGUo
bmV3IFFUTW92aWVQcml2YXRlKCkpCiB7Ci0gICAgVXBwUGFyYW0gcGFyYW07Ci0gICAgcGFyYW0u
cHRyID0gdGhpczsKLSAgICBTZXRNb3ZpZURyYXdpbmdDb21wbGV0ZVByb2MobV9tb3ZpZSwgbW92
aWVEcmF3aW5nQ2FsbFdoZW5DaGFuZ2VkLCBnTW92aWVEcmF3aW5nQ29tcGxldGVVUFAsIHBhcmFt
LmxvbmdWYWx1ZSk7CisgICAgbV9wcml2YXRlLT5tX21vdmllV2luID0gdGhpczsKKyAgICBpZiAo
Y2xpZW50KQorICAgICAgICBtX3ByaXZhdGUtPm1fY2xpZW50cy5hcHBlbmQoY2xpZW50KTsKKyAg
ICBpbml0aWFsaXplUXVpY2tUaW1lKCk7CiB9CiAKLXZvaWQgUVRNb3ZpZVdpblByaXZhdGU6OmRy
YXdpbmdDb21wbGV0ZSgpCitRVE1vdmllOjp+UVRNb3ZpZSgpCiB7Ci0gICAgaWYgKCFtX2dXb3Js
ZCB8fCBtX21vdmllV2luLT5tX2Rpc2FibGVkIHx8IG1fbG9hZFN0YXRlIDwgUVRNb3ZpZUxvYWRT
dGF0ZUxvYWRlZCkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY2xpZW50LT5tb3ZpZU5ld0ltYWdl
QXZhaWxhYmxlKG1fbW92aWVXaW4pOworICAgIGRlbGV0ZSBtX3ByaXZhdGU7CiB9CiAKLXZvaWQg
UVRNb3ZpZVdpblByaXZhdGU6OnVwZGF0ZUdXb3JsZCgpCit2b2lkIFFUTW92aWU6OmFkZENsaWVu
dChRVE1vdmllQ2xpZW50KiBjbGllbnQpCiB7Ci0gICAgYm9vbCBzaG91bGRCZVZpc2libGUgPSBt
X3Zpc2libGU7Ci0gICAgaWYgKCFtX2hlaWdodCB8fCAhbV93aWR0aCkKLSAgICAgICAgc2hvdWxk
QmVWaXNpYmxlID0gZmFsc2U7Ci0KLSAgICBpZiAoc2hvdWxkQmVWaXNpYmxlICYmICFtX2dXb3Js
ZCkKLSAgICAgICAgY3JlYXRlR1dvcmxkKCk7Ci0gICAgZWxzZSBpZiAoIXNob3VsZEJlVmlzaWJs
ZSAmJiBtX2dXb3JsZCkKLSAgICAgICAgZGVsZXRlR1dvcmxkKCk7Ci0gICAgZWxzZSBpZiAobV9n
V29ybGQgJiYgKG1fd2lkdGggPiBtX2dXb3JsZFdpZHRoIHx8IG1faGVpZ2h0ID4gbV9nV29ybGRI
ZWlnaHQpKSB7Ci0gICAgICAgIC8vIG5lZWQgYSBiaWdnZXIsIGJldHRlciBnV29ybGQKLSAgICAg
ICAgZGVsZXRlR1dvcmxkKCk7Ci0gICAgICAgIGNyZWF0ZUdXb3JsZCgpOwotICAgIH0KKyAgICBp
ZiAoY2xpZW50KQorICAgICAgICBtX3ByaXZhdGUtPm1fY2xpZW50cy5hcHBlbmQoY2xpZW50KTsK
IH0KIAotdm9pZCBRVE1vdmllV2luUHJpdmF0ZTo6Y3JlYXRlR1dvcmxkKCkKK3ZvaWQgUVRNb3Zp
ZTo6cmVtb3ZlQ2xpZW50KFFUTW92aWVDbGllbnQqIGNsaWVudCkKIHsKLSAgICBBU1NFUlQoIW1f
Z1dvcmxkKTsKLSAgICBpZiAoIW1fbW92aWUgfHwgbV9sb2FkU3RhdGUgPCBRVE1vdmllTG9hZFN0
YXRlTG9hZGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2dXb3JsZFdpZHRoID0gbWF4KGNH
V29ybGRNaW5XaWR0aCwgbV93aWR0aCk7Ci0gICAgbV9nV29ybGRIZWlnaHQgPSBtYXgoY0dXb3Js
ZE1pbkhlaWdodCwgbV9oZWlnaHQpOwotICAgIFJlY3QgYm91bmRzOyAKLSAgICBib3VuZHMudG9w
ID0gMDsKLSAgICBib3VuZHMubGVmdCA9IDA7IAotICAgIGJvdW5kcy5yaWdodCA9IG1fZ1dvcmxk
V2lkdGg7Ci0gICAgYm91bmRzLmJvdHRvbSA9IG1fZ1dvcmxkSGVpZ2h0OwotICAgIE9TRXJyIGVy
ciA9IFFUTmV3R1dvcmxkKCZtX2dXb3JsZCwgazMyQkdSQVBpeGVsRm9ybWF0LCAmYm91bmRzLCAw
LCAwLCAwKTsgCi0gICAgaWYgKGVycikgCi0gICAgICAgIHJldHVybjsKLSAgICBHZXRNb3ZpZUdX
b3JsZChtX21vdmllLCAmbV9zYXZlZEdXb3JsZCwgMCk7Ci0gICAgaWYgKG1fbW92aWVDb250cm9s
bGVyKQotICAgICAgICBNQ1NldENvbnRyb2xsZXJQb3J0KG1fbW92aWVDb250cm9sbGVyLCBtX2dX
b3JsZCk7Ci0gICAgU2V0TW92aWVHV29ybGQobV9tb3ZpZSwgbV9nV29ybGQsIDApOwotICAgIGJv
dW5kcy5yaWdodCA9IG1fd2lkdGg7Ci0gICAgYm91bmRzLmJvdHRvbSA9IG1faGVpZ2h0OwotICAg
IGlmIChtX21vdmllQ29udHJvbGxlcikKLSAgICAgICAgTUNTZXRDb250cm9sbGVyQm91bmRzUmVj
dChtX21vdmllQ29udHJvbGxlciwgJmJvdW5kcyk7Ci0gICAgU2V0TW92aWVCb3gobV9tb3ZpZSwg
JmJvdW5kcyk7CisgICAgc2l6ZV90IGluZGV4T2ZDbGllbnQgPSBtX3ByaXZhdGUtPm1fY2xpZW50
cy5maW5kKGNsaWVudCk7CisgICAgaWYgKGluZGV4T2ZDbGllbnQgPiAwKQorICAgICAgICBtX3By
aXZhdGUtPm1fY2xpZW50cy5yZW1vdmUoaW5kZXhPZkNsaWVudCk7CiB9CiAKLXZvaWQgUVRNb3Zp
ZVdpblByaXZhdGU6OmNsZWFyR1dvcmxkKCkKK3ZvaWQgUVRNb3ZpZTo6cGxheSgpCiB7Ci0gICAg
aWYgKCFtX21vdmllfHwhbV9nV29ybGQpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdyYWZQdHIg
c2F2ZVBvcnQ7Ci0gICAgR2V0UG9ydCgmc2F2ZVBvcnQpOyAKLSAgICBNYWNTZXRQb3J0KChHcmFm
UHRyKW1fZ1dvcmxkKTsKLQotICAgIFJlY3QgYm91bmRzOyAKLSAgICBib3VuZHMudG9wID0gMDsK
LSAgICBib3VuZHMubGVmdCA9IDA7IAotICAgIGJvdW5kcy5yaWdodCA9IG1fZ1dvcmxkV2lkdGg7
Ci0gICAgYm91bmRzLmJvdHRvbSA9IG1fZ1dvcmxkSGVpZ2h0OwotICAgIEVyYXNlUmVjdCgmYm91
bmRzKTsKLQotICAgIE1hY1NldFBvcnQoc2F2ZVBvcnQpOwotfQotCi12b2lkIFFUTW92aWVXaW5Q
cml2YXRlOjpzZXRTaXplKGludCB3aWR0aCwgaW50IGhlaWdodCkKLXsKLSAgICBpZiAobV93aWR0
aCA9PSB3aWR0aCAmJiBtX2hlaWdodCA9PSBoZWlnaHQpCi0gICAgICAgIHJldHVybjsKLSAgICBt
X3dpZHRoID0gd2lkdGg7Ci0gICAgbV9oZWlnaHQgPSBoZWlnaHQ7Ci0KLSAgICAvLyBEbyBub3Qg
Y2hhbmdlIG1vdmllIGJveCBiZWZvcmUgcmVhY2hpbmcgbG9hZCBzdGF0ZSBsb2FkZWQgYXMgd2Ug
Z3JhYgotICAgIC8vIHRoZSBpbml0aWFsIHNpemUgd2hlbiB0YXNrKCkgc2VlcyB0aGF0IHN0YXRl
IGZvciB0aGUgZmlyc3QgdGltZSwgYW5kCi0gICAgLy8gd2UgbmVlZCB0aGUgaW5pdGlhbCBzaXpl
IHRvIGJlIGFibGUgdG8gc2NhbGUgbW92aWUgcHJvcGVybHkuIAotICAgIGlmICghbV9tb3ZpZSB8
fCBtX2xvYWRTdGF0ZSA8IFFUTW92aWVMb2FkU3RhdGVMb2FkZWQpCi0gICAgICAgIHJldHVybjsK
LQotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICBBU1NFUlQobV9zY2FsZUNhY2hlZCk7Ci0jZW5k
aWYKLQotICAgIHVwZGF0ZU1vdmllU2l6ZSgpOwotfQotCi12b2lkIFFUTW92aWVXaW5Qcml2YXRl
Ojp1cGRhdGVNb3ZpZVNpemUoKQotewotICAgIGlmICghbV9tb3ZpZSB8fCBtX2xvYWRTdGF0ZSA8
IFFUTW92aWVMb2FkU3RhdGVMb2FkZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlY3QgYm91
bmRzOyAKLSAgICBib3VuZHMudG9wID0gMDsKLSAgICBib3VuZHMubGVmdCA9IDA7IAotICAgIGJv
dW5kcy5yaWdodCA9IG1fd2lkdGg7Ci0gICAgYm91bmRzLmJvdHRvbSA9IG1faGVpZ2h0OwotICAg
IGlmIChtX21vdmllQ29udHJvbGxlcikKLSAgICAgICAgTUNTZXRDb250cm9sbGVyQm91bmRzUmVj
dChtX21vdmllQ29udHJvbGxlciwgJmJvdW5kcyk7Ci0gICAgU2V0TW92aWVCb3gobV9tb3ZpZSwg
JmJvdW5kcyk7Ci0gICAgdXBkYXRlR1dvcmxkKCk7Ci19Ci0KLQotdm9pZCBRVE1vdmllV2luUHJp
dmF0ZTo6ZGVsZXRlR1dvcmxkKCkKLXsKLSAgICBBU1NFUlQobV9nV29ybGQpOwotICAgIGlmICht
X21vdmllQ29udHJvbGxlcikKLSAgICAgICAgTUNTZXRDb250cm9sbGVyUG9ydChtX21vdmllQ29u
dHJvbGxlciwgbV9zYXZlZEdXb3JsZCk7Ci0gICAgaWYgKG1fbW92aWUpCi0gICAgICAgIFNldE1v
dmllR1dvcmxkKG1fbW92aWUsIG1fc2F2ZWRHV29ybGQsIDApOwotICAgIG1fc2F2ZWRHV29ybGQg
PSAwOwotICAgIERpc3Bvc2VHV29ybGQobV9nV29ybGQpOyAKLSAgICBtX2dXb3JsZCA9IDA7Ci0g
ICAgbV9nV29ybGRXaWR0aCA9IDA7Ci0gICAgbV9nV29ybGRIZWlnaHQgPSAwOwotfQotCi0KLVFU
TW92aWVXaW46OlFUTW92aWVXaW4oUVRNb3ZpZVdpbkNsaWVudCogY2xpZW50KQotICAgIDogbV9w
cml2YXRlKG5ldyBRVE1vdmllV2luUHJpdmF0ZSgpKQotICAgICwgbV9kaXNhYmxlZChmYWxzZSkK
LXsKLSAgICBtX3ByaXZhdGUtPm1fbW92aWVXaW4gPSB0aGlzOwotICAgIG1fcHJpdmF0ZS0+bV9j
bGllbnQgPSBjbGllbnQ7Ci0gICAgaW5pdGlhbGl6ZVF1aWNrVGltZSgpOwotfQotCi1RVE1vdmll
V2luOjp+UVRNb3ZpZVdpbigpCi17Ci0gICAgZGVsZXRlIG1fcHJpdmF0ZTsKLX0KLQotdm9pZCBR
VE1vdmllV2luOjpwbGF5KCkKLXsKICAgICBtX3ByaXZhdGUtPm1fdGltZVRvUmVzdG9yZSA9IC0x
LjBmOwogCiAgICAgaWYgKG1fcHJpdmF0ZS0+bV9tb3ZpZUNvbnRyb2xsZXIpCkBAIC00ODMsNyAr
Mjc5LDcgQEANCiAgICAgbV9wcml2YXRlLT5zdGFydFRhc2soKTsKIH0KIAotdm9pZCBRVE1vdmll
V2luOjpwYXVzZSgpCit2b2lkIFFUTW92aWU6OnBhdXNlKCkKIHsKICAgICBtX3ByaXZhdGUtPm1f
dGltZVRvUmVzdG9yZSA9IC0xLjBmOwogCkBAIC00OTEsMTcgKzI4NywxNyBAQA0KICAgICAgICAg
TUNEb0FjdGlvbihtX3ByaXZhdGUtPm1fbW92aWVDb250cm9sbGVyLCBtY0FjdGlvblBsYXksIDAp
OwogICAgIGVsc2UKICAgICAgICAgU3RvcE1vdmllKG1fcHJpdmF0ZS0+bV9tb3ZpZSk7Ci0gICAg
dXBkYXRlVGFza1RpbWVyKCk7CisgICAgUVRNb3ZpZVRhc2s6OnNoYXJlZFRhc2soKS0+dXBkYXRl
VGFza1RpbWVyKCk7CiB9CiAKLWZsb2F0IFFUTW92aWVXaW46OnJhdGUoKSBjb25zdAorZmxvYXQg
UVRNb3ZpZTo6cmF0ZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3ByaXZhdGUtPm1fbW92aWUpCiAg
ICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBGaXhlZFRvRmxvYXQoR2V0TW92aWVSYXRlKG1f
cHJpdmF0ZS0+bV9tb3ZpZSkpOwogfQogCi12b2lkIFFUTW92aWVXaW46OnNldFJhdGUoZmxvYXQg
cmF0ZSkKK3ZvaWQgUVRNb3ZpZTo6c2V0UmF0ZShmbG9hdCByYXRlKQogewogICAgIGlmICghbV9w
cml2YXRlLT5tX21vdmllKQogICAgICAgICByZXR1cm47ICAgIApAQCAtNTExLDEwICszMDcsMTAg
QEANCiAgICAgICAgIE1DRG9BY3Rpb24obV9wcml2YXRlLT5tX21vdmllQ29udHJvbGxlciwgbWNB
Y3Rpb25QcmVyb2xsQW5kUGxheSwgKHZvaWQgKilGbG9hdFRvRml4ZWQocmF0ZSkpOwogICAgIGVs
c2UKICAgICAgICAgU2V0TW92aWVSYXRlKG1fcHJpdmF0ZS0+bV9tb3ZpZSwgRmxvYXRUb0ZpeGVk
KHJhdGUpKTsKLSAgICB1cGRhdGVUYXNrVGltZXIoKTsKKyAgICBRVE1vdmllVGFzazo6c2hhcmVk
VGFzaygpLT51cGRhdGVUYXNrVGltZXIoKTsKIH0KIAotZmxvYXQgUVRNb3ZpZVdpbjo6ZHVyYXRp
b24oKSBjb25zdAorZmxvYXQgUVRNb3ZpZTo6ZHVyYXRpb24oKSBjb25zdAogewogICAgIGlmICgh
bV9wcml2YXRlLT5tX21vdmllKQogICAgICAgICByZXR1cm4gMDsKQEAgLTUyMyw3ICszMTksNyBA
QA0KICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZhbCkgLyBzY2FsZTsKIH0KIAotZmxv
YXQgUVRNb3ZpZVdpbjo6Y3VycmVudFRpbWUoKSBjb25zdAorZmxvYXQgUVRNb3ZpZTo6Y3VycmVu
dFRpbWUoKSBjb25zdAogewogICAgIGlmICghbV9wcml2YXRlLT5tX21vdmllKQogICAgICAgICBy
ZXR1cm4gMDsKQEAgLTUzMiw3ICszMjgsNyBAQA0KICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Zmxv
YXQ+KHZhbCkgLyBzY2FsZTsKIH0KIAotdm9pZCBRVE1vdmllV2luOjpzZXRDdXJyZW50VGltZShm
bG9hdCB0aW1lKSBjb25zdAordm9pZCBRVE1vdmllOjpzZXRDdXJyZW50VGltZShmbG9hdCB0aW1l
KSBjb25zdAogewogICAgIGlmICghbV9wcml2YXRlLT5tX21vdmllKQogICAgICAgICByZXR1cm47
CkBAIC01NDEsMjIgKzMzNywyMiBAQA0KICAgICAKICAgICBtX3ByaXZhdGUtPm1fc2Vla2luZyA9
IHRydWU7CiAgICAgVGltZVNjYWxlIHNjYWxlID0gR2V0TW92aWVUaW1lU2NhbGUobV9wcml2YXRl
LT5tX21vdmllKTsKLSAgICBpZiAobV9wcml2YXRlLT5tX21vdmllQ29udHJvbGxlcil7CisgICAg
aWYgKG1fcHJpdmF0ZS0+bV9tb3ZpZUNvbnRyb2xsZXIpIHsKICAgICAgICAgUVRSZXN0YXJ0QXRU
aW1lUmVjb3JkIHJlc3RhcnQgPSB7IHRpbWUgKiBzY2FsZSAsIDAgfTsKICAgICAgICAgTUNEb0Fj
dGlvbihtX3ByaXZhdGUtPm1fbW92aWVDb250cm9sbGVyLCBtY0FjdGlvblJlc3RhcnRBdFRpbWUs
ICh2b2lkICopJnJlc3RhcnQpOwogICAgIH0gZWxzZQogICAgICAgICBTZXRNb3ZpZVRpbWVWYWx1
ZShtX3ByaXZhdGUtPm1fbW92aWUsIFRpbWVWYWx1ZSh0aW1lICogc2NhbGUpKTsKLSAgICB1cGRh
dGVUYXNrVGltZXIoKTsKKyAgICBRVE1vdmllVGFzazo6c2hhcmVkVGFzaygpLT51cGRhdGVUYXNr
VGltZXIoKTsKIH0KIAotdm9pZCBRVE1vdmllV2luOjpzZXRWb2x1bWUoZmxvYXQgdm9sdW1lKQor
dm9pZCBRVE1vdmllOjpzZXRWb2x1bWUoZmxvYXQgdm9sdW1lKQogewogICAgIGlmICghbV9wcml2
YXRlLT5tX21vdmllKQogICAgICAgICByZXR1cm47CiAgICAgU2V0TW92aWVWb2x1bWUobV9wcml2
YXRlLT5tX21vdmllLCBzdGF0aWNfY2FzdDxzaG9ydD4odm9sdW1lICogMjU2KSk7CiB9CiAKLXZv
aWQgUVRNb3ZpZVdpbjo6c2V0UHJlc2VydmVzUGl0Y2goYm9vbCBwcmVzZXJ2ZXNQaXRjaCkKK3Zv
aWQgUVRNb3ZpZTo6c2V0UHJlc2VydmVzUGl0Y2goYm9vbCBwcmVzZXJ2ZXNQaXRjaCkKIHsKICAg
ICBpZiAoIW1fcHJpdmF0ZS0+bV9tb3ZpZSB8fCAhbV9wcml2YXRlLT5tX2N1cnJlbnRVUkwpCiAg
ICAgICAgIHJldHVybjsKQEAgLTU3NSwxNCArMzcxLDE0IEBADQogICAgIGxvYWQobV9wcml2YXRl
LT5tX2N1cnJlbnRVUkwsIHByZXNlcnZlc1BpdGNoKTsKIH0KIAotdW5zaWduZWQgUVRNb3ZpZVdp
bjo6ZGF0YVNpemUoKSBjb25zdAordW5zaWduZWQgUVRNb3ZpZTo6ZGF0YVNpemUoKSBjb25zdAog
ewogICAgIGlmICghbV9wcml2YXRlLT5tX21vdmllKQogICAgICAgICByZXR1cm4gMDsKICAgICBy
ZXR1cm4gR2V0TW92aWVEYXRhU2l6ZShtX3ByaXZhdGUtPm1fbW92aWUsIDAsIEdldE1vdmllRHVy
YXRpb24obV9wcml2YXRlLT5tX21vdmllKSk7CiB9CiAKLWZsb2F0IFFUTW92aWVXaW46Om1heFRp
bWVMb2FkZWQoKSBjb25zdAorZmxvYXQgUVRNb3ZpZTo6bWF4VGltZUxvYWRlZCgpIGNvbnN0CiB7
CiAgICAgaWYgKCFtX3ByaXZhdGUtPm1fbW92aWUpCiAgICAgICAgIHJldHVybiAwOwpAQCAtNTky
LDEyICszODgsMTIgQEANCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih2YWwpIC8gc2Nh
bGU7CiB9CiAKLWxvbmcgUVRNb3ZpZVdpbjo6bG9hZFN0YXRlKCkgY29uc3QKK2xvbmcgUVRNb3Zp
ZTo6bG9hZFN0YXRlKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9wcml2YXRlLT5tX2xvYWRTdGF0
ZTsKIH0KIAotdm9pZCBRVE1vdmllV2luOjpnZXROYXR1cmFsU2l6ZShpbnQmIHdpZHRoLCBpbnQm
IGhlaWdodCkKK3ZvaWQgUVRNb3ZpZTo6Z2V0TmF0dXJhbFNpemUoaW50JiB3aWR0aCwgaW50JiBo
ZWlnaHQpCiB7CiAgICAgUmVjdCByZWN0ID0geyAwLCB9OwogCkBAIC02MDcsNTcgKzQwMyw4IEBA
DQogICAgIGhlaWdodCA9IChyZWN0LmJvdHRvbSAtIHJlY3QudG9wKSAqIG1fcHJpdmF0ZS0+bV9o
ZWlnaHRTY2FsZUZhY3RvcjsKIH0KIAotdm9pZCBRVE1vdmllV2luOjpzZXRTaXplKGludCB3aWR0
aCwgaW50IGhlaWdodCkKK3ZvaWQgUVRNb3ZpZTo6bG9hZChjb25zdCBVQ2hhciogdXJsLCBpbnQg
bGVuLCBib29sIHByZXNlcnZlc1BpdGNoKQogewotICAgIG1fcHJpdmF0ZS0+c2V0U2l6ZSh3aWR0
aCwgaGVpZ2h0KTsKLSAgICB1cGRhdGVUYXNrVGltZXIoMCk7Ci19Ci0KLXZvaWQgUVRNb3ZpZVdp
bjo6c2V0VmlzaWJsZShib29sIGIpCi17Ci0gICAgbV9wcml2YXRlLT5tX3Zpc2libGUgPSBiOwot
ICAgIG1fcHJpdmF0ZS0+dXBkYXRlR1dvcmxkKCk7Ci19Ci0KLXZvaWQgUVRNb3ZpZVdpbjo6Z2V0
Q3VycmVudEZyYW1lSW5mbyh2b2lkKiYgYnVmZmVyLCB1bnNpZ25lZCYgYml0c1BlclBpeGVsLCB1
bnNpZ25lZCYgcm93Qnl0ZXMsIHVuc2lnbmVkJiB3aWR0aCwgdW5zaWduZWQmIGhlaWdodCkKLXsK
LSAgICBpZiAoIW1fcHJpdmF0ZS0+bV9nV29ybGQpIHsKLSAgICAgICAgYnVmZmVyID0gMDsKLSAg
ICAgICAgYml0c1BlclBpeGVsID0gMDsKLSAgICAgICAgcm93Qnl0ZXMgPSAwOwotICAgICAgICB3
aWR0aCA9IDA7Ci0gICAgICAgIGhlaWdodCA9IDA7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgUGl4TWFwSGFuZGxlIG9mZnNjcmVlblBpeE1hcCA9IEdldEdXb3JsZFBpeE1hcChtX3ByaXZh
dGUtPm1fZ1dvcmxkKTsKLSAgICBidWZmZXIgPSAoKm9mZnNjcmVlblBpeE1hcCktPmJhc2VBZGRy
OwotICAgIGJpdHNQZXJQaXhlbCA9ICgqb2Zmc2NyZWVuUGl4TWFwKS0+cGl4ZWxTaXplOwotICAg
IHJvd0J5dGVzID0gKCpvZmZzY3JlZW5QaXhNYXApLT5yb3dCeXRlcyAmIDB4M0ZGRjsKLSAgICB3
aWR0aCA9IG1fcHJpdmF0ZS0+bV93aWR0aDsKLSAgICBoZWlnaHQgPSBtX3ByaXZhdGUtPm1faGVp
Z2h0OwotfQotCi12b2lkIFFUTW92aWVXaW46OnBhaW50KEhEQyBoZGMsIGludCB4LCBpbnQgeSkK
LXsKLSAgICBpZiAoIW1fcHJpdmF0ZS0+bV9nV29ybGQpCi0gICAgICAgIHJldHVybjsKLQotICAg
IEhEQyBoZGNTcmMgPSBzdGF0aWNfY2FzdDxIREM+KEdldFBvcnRIREMocmVpbnRlcnByZXRfY2Fz
dDxHcmFmUHRyPihtX3ByaXZhdGUtPm1fZ1dvcmxkKSkpOyAKLSAgICBpZiAoIWhkY1NyYykKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgLy8gRklYTUU6IElmIHdlIGNvdWxkIGRldGVybWluZSB0aGUg
bW92aWUgaGFzIG5vIGFscGhhLCB3ZSBjb3VsZCB1c2UgQml0Qmx0IGZvciB0aG9zZSBjYXNlcywg
d2hpY2ggbWlnaHQgYmUgZmFzdGVyLgotICAgIEJMRU5ERlVOQ1RJT04gYmxlbmRGdW5jdGlvbjsg
Ci0gICAgYmxlbmRGdW5jdGlvbi5CbGVuZE9wID0gQUNfU1JDX09WRVI7Ci0gICAgYmxlbmRGdW5j
dGlvbi5CbGVuZEZsYWdzID0gMDsKLSAgICBibGVuZEZ1bmN0aW9uLlNvdXJjZUNvbnN0YW50QWxw
aGEgPSAyNTU7Ci0gICAgYmxlbmRGdW5jdGlvbi5BbHBoYUZvcm1hdCA9IEFDX1NSQ19BTFBIQTsK
LSAgICBBbHBoYUJsZW5kKGhkYywgeCwgeSwgbV9wcml2YXRlLT5tX3dpZHRoLCBtX3ByaXZhdGUt
Pm1faGVpZ2h0LCBoZGNTcmMsIAotICAgICAgICAgMCwgMCwgbV9wcml2YXRlLT5tX3dpZHRoLCBt
X3ByaXZhdGUtPm1faGVpZ2h0LCBibGVuZEZ1bmN0aW9uKTsKLX0KLQotdm9pZCBRVE1vdmllV2lu
Ojpsb2FkKGNvbnN0IFVDaGFyKiB1cmwsIGludCBsZW4sIGJvb2wgcHJlc2VydmVzUGl0Y2gpCi17
CiAgICAgQ0ZTdHJpbmdSZWYgdXJsU3RyaW5nUmVmID0gQ0ZTdHJpbmdDcmVhdGVXaXRoQ2hhcmFj
dGVycyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCByZWludGVycHJldF9jYXN0PGNvbnN0IFVuaUNoYXIq
Pih1cmwpLCBsZW4pOwogICAgIENGVVJMUmVmIGNmVVJMID0gQ0ZVUkxDcmVhdGVXaXRoU3RyaW5n
KGtDRkFsbG9jYXRvckRlZmF1bHQsIHVybFN0cmluZ1JlZiwgMCk7CiAKQEAgLTY2NywxNSArNDE0
LDEzIEBADQogICAgIENGUmVsZWFzZSh1cmxTdHJpbmdSZWYpOwogfQogCi12b2lkIFFUTW92aWVX
aW46OmxvYWQoQ0ZVUkxSZWYgdXJsLCBib29sIHByZXNlcnZlc1BpdGNoKQordm9pZCBRVE1vdmll
Ojpsb2FkKENGVVJMUmVmIHVybCwgYm9vbCBwcmVzZXJ2ZXNQaXRjaCkKIHsKICAgICBpZiAoIXVy
bCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1fcHJpdmF0ZS0+bV9tb3ZpZSkgewogICAg
ICAgICBtX3ByaXZhdGUtPmVuZFRhc2soKTsKLSAgICAgICAgaWYgKG1fcHJpdmF0ZS0+bV9nV29y
bGQpCi0gICAgICAgICAgICBtX3ByaXZhdGUtPmRlbGV0ZUdXb3JsZCgpOwogICAgICAgICBpZiAo
bV9wcml2YXRlLT5tX21vdmllQ29udHJvbGxlcikKICAgICAgICAgICAgIERpc3Bvc2VNb3ZpZUNv
bnRyb2xsZXIobV9wcml2YXRlLT5tX21vdmllQ29udHJvbGxlcik7CiAgICAgICAgIG1fcHJpdmF0
ZS0+bV9tb3ZpZUNvbnRyb2xsZXIgPSAwOwpAQCAtNzY4LDE0ICs1MTMsMTQgQEANCiAgICAgbW92
aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcFN0YXR1cyA9IDA7IAogICAgIG1vdmllUHJvcENv
dW50Kys7IAogCi0gICAgQVNTRVJUKG1vdmllUHJvcENvdW50IDw9IHNpemVvZihtb3ZpZVByb3Bz
KS9zaXplb2YobW92aWVQcm9wc1swXSkpOworICAgIEFTU0VSVChtb3ZpZVByb3BDb3VudCA8PSBz
aXplb2YobW92aWVQcm9wcykgLyBzaXplb2YobW92aWVQcm9wc1swXSkpOwogICAgIG1fcHJpdmF0
ZS0+bV9sb2FkRXJyb3IgPSBOZXdNb3ZpZUZyb21Qcm9wZXJ0aWVzKG1vdmllUHJvcENvdW50LCBt
b3ZpZVByb3BzLCAwLCAwLCAmbV9wcml2YXRlLT5tX21vdmllKTsKIAogZW5kOgogICAgIG1fcHJp
dmF0ZS0+c3RhcnRUYXNrKCk7CiAgICAgLy8gZ2V0IHRoZSBsb2FkIGZhaWwgY2FsbGJhY2sgcXVp
Y2tseSAKICAgICBpZiAobV9wcml2YXRlLT5tX2xvYWRFcnJvcikKLSAgICAgICAgdXBkYXRlVGFz
a1RpbWVyKDApOworICAgICAgICBRVE1vdmllVGFzazo6c2hhcmVkVGFzaygpLT51cGRhdGVUYXNr
VGltZXIoMCk7CiAgICAgZWxzZSB7CiAgICAgICAgIE9TVHlwZSBtb2RlID0ga1FUQXBlcnR1cmVN
b2RlX0NsZWFuQXBlcnR1cmU7CiAKQEAgLTc4NCwxMSArNTI5LDEwIEBADQogICAgICAgICAvLyB0
aGUgaW5zdGFsbGVkIHZlcnNpb24gb2YgUVQgZG9lc24ndCBzdXBwb3J0IGl0IGFuZCBpdCBpc24n
dCBzZXJpb3VzIGVub3VnaCB0byAKICAgICAgICAgLy8gd2FycmFudCBmYWlsaW5nLgogICAgICAg
ICBRVFNldE1vdmllUHJvcGVydHkobV9wcml2YXRlLT5tX21vdmllLCBrUVRQcm9wZXJ0eUNsYXNz
X1Zpc3VhbCwga1FUVmlzdWFsUHJvcGVydHlJRF9BcGVydHVyZU1vZGUsIHNpemVvZihtb2RlKSwg
Jm1vZGUpOwotICAgICAgICBtX3ByaXZhdGUtPnJlZ2lzdGVyRHJhd2luZ0NhbGxiYWNrKCk7CiAg
ICAgfQogfQogCi12b2lkIFFUTW92aWVXaW46OmRpc2FibGVVbnN1cHBvcnRlZFRyYWNrcyh1bnNp
Z25lZCYgZW5hYmxlZFRyYWNrQ291bnQsIHVuc2lnbmVkJiB0b3RhbFRyYWNrQ291bnQpCit2b2lk
IFFUTW92aWU6OmRpc2FibGVVbnN1cHBvcnRlZFRyYWNrcyh1bnNpZ25lZCYgZW5hYmxlZFRyYWNr
Q291bnQsIHVuc2lnbmVkJiB0b3RhbFRyYWNrQ291bnQpCiB7CiAgICAgaWYgKCFtX3ByaXZhdGUt
Pm1fbW92aWUpIHsKICAgICAgICAgdG90YWxUcmFja0NvdW50ID0gMDsKQEAgLTkwMywyMCArNjQ3
LDI1IEBADQogICAgIH0KIH0KIAotdm9pZCBRVE1vdmllV2luOjpzZXREaXNhYmxlZChib29sIGIp
Citib29sIFFUTW92aWU6OmlzRGlzYWJsZWQoKSBjb25zdAogewotICAgIG1fZGlzYWJsZWQgPSBi
OworICAgIHJldHVybiBtX3ByaXZhdGUtPm1fZGlzYWJsZWQ7CiB9CiAKK3ZvaWQgUVRNb3ZpZTo6
c2V0RGlzYWJsZWQoYm9vbCBiKQoreworICAgIG1fcHJpdmF0ZS0+bV9kaXNhYmxlZCA9IGI7Cit9
CiAKLWJvb2wgUVRNb3ZpZVdpbjo6aGFzVmlkZW8oKSBjb25zdAorCitib29sIFFUTW92aWU6Omhh
c1ZpZGVvKCkgY29uc3QKIHsKICAgICBpZiAoIW1fcHJpdmF0ZS0+bV9tb3ZpZSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIHJldHVybiAoR2V0TW92aWVJbmRUcmFja1R5cGUobV9wcml2YXRl
LT5tX21vdmllLCAxLCBWaXN1YWxNZWRpYUNoYXJhY3RlcmlzdGljLCBtb3ZpZVRyYWNrQ2hhcmFj
dGVyaXN0aWMgfCBtb3ZpZVRyYWNrRW5hYmxlZE9ubHkpKTsKIH0KIAotYm9vbCBRVE1vdmllV2lu
OjpoYXNBdWRpbygpIGNvbnN0Citib29sIFFUTW92aWU6Omhhc0F1ZGlvKCkgY29uc3QKIHsKICAg
ICBpZiAoIW1fcHJpdmF0ZS0+bV9tb3ZpZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtOTI0
LDE0ICs2NzMsMTQgQEANCiB9CiAKIAotYm9vbCBRVE1vdmllV2luOjpoYXNDbG9zZWRDYXB0aW9u
cygpIGNvbnN0IAorYm9vbCBRVE1vdmllOjpoYXNDbG9zZWRDYXB0aW9ucygpIGNvbnN0IAogewog
ICAgIGlmICghbV9wcml2YXRlLT5tX21vdmllKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
cmV0dXJuIEdldE1vdmllSW5kVHJhY2tUeXBlKG1fcHJpdmF0ZS0+bV9tb3ZpZSwgMSwgY2xvc2Vk
Q2FwdGlvblRyYWNrVHlwZSwgbW92aWVUcmFja01lZGlhVHlwZSk7CiB9CiAKLXZvaWQgUVRNb3Zp
ZVdpbjo6c2V0Q2xvc2VkQ2FwdGlvbnNWaXNpYmxlKGJvb2wgdmlzaWJsZSkKK3ZvaWQgUVRNb3Zp
ZTo6c2V0Q2xvc2VkQ2FwdGlvbnNWaXNpYmxlKGJvb2wgdmlzaWJsZSkKIHsKICAgICBpZiAoIW1f
cHJpdmF0ZS0+bV9tb3ZpZSkKICAgICAgICAgcmV0dXJuOwpAQCAtOTQ0LDE2ICs2OTMsNiBAQA0K
ICAgICBRVFNldFRyYWNrUHJvcGVydHkoY2NUcmFjaywgY2xvc2VkQ2FwdGlvblRyYWNrVHlwZSwg
Y2xvc2VkQ2FwdGlvbkRpc3BsYXlQcm9wZXJ0eUlELCBzaXplb2YoZG9EaXNwbGF5KSwgJmRvRGlz
cGxheSk7CiB9CiAKLXBhc2NhbCBPU0VyciBtb3ZpZURyYXdpbmdDb21wbGV0ZVByb2MoTW92aWUg
bW92aWUsIGxvbmcgZGF0YSkKLXsKLSAgICBVcHBQYXJhbSBwYXJhbTsKLSAgICBwYXJhbS5sb25n
VmFsdWUgPSBkYXRhOwotICAgIFFUTW92aWVXaW5Qcml2YXRlKiBtcCA9IHN0YXRpY19jYXN0PFFU
TW92aWVXaW5Qcml2YXRlKj4ocGFyYW0ucHRyKTsKLSAgICBpZiAobXApCi0gICAgICAgIG1wLT5k
cmF3aW5nQ29tcGxldGUoKTsKLSAgICByZXR1cm4gMDsKLX0KLQogc3RhdGljIHZvaWQgaW5pdGlh
bGl6ZVN1cHBvcnRlZFR5cGVzKCkgCiB7CiAgICAgaWYgKGdTdXBwb3J0ZWRUeXBlcykKQEAgLTEw
NDMsMTMgKzc4MiwxMyBAQA0KICAgICB9CiB9CiAKLXVuc2lnbmVkIFFUTW92aWVXaW46OmNvdW50
U3VwcG9ydGVkVHlwZXMoKQordW5zaWduZWQgUVRNb3ZpZTo6Y291bnRTdXBwb3J0ZWRUeXBlcygp
CiB7CiAgICAgaW5pdGlhbGl6ZVN1cHBvcnRlZFR5cGVzKCk7CiAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihnU3VwcG9ydGVkVHlwZXMtPnNpemUoKSk7CiB9CiAKLXZvaWQgUVRNb3Zp
ZVdpbjo6Z2V0U3VwcG9ydGVkVHlwZSh1bnNpZ25lZCBpbmRleCwgY29uc3QgVUNoYXIqJiBzdHIs
IHVuc2lnbmVkJiBsZW4pCit2b2lkIFFUTW92aWU6OmdldFN1cHBvcnRlZFR5cGUodW5zaWduZWQg
aW5kZXgsIGNvbnN0IFVDaGFyKiYgc3RyLCB1bnNpZ25lZCYgbGVuKQogewogICAgIGluaXRpYWxp
emVTdXBwb3J0ZWRUeXBlcygpOwogICAgIEFTU0VSVChpbmRleCA8IGdTdXBwb3J0ZWRUeXBlcy0+
c2l6ZSgpKTsKQEAgLTEwNjcsMTQgKzgwNiw4IEBADQogICAgIAogfQogCi12b2lkIFFUTW92aWVX
aW46OnNldFRhc2tUaW1lckZ1bmNzKFNldFRhc2tUaW1lckRlbGF5RnVuYyBzZXRUYXNrVGltZXJE
ZWxheSwgU3RvcFRhc2tUaW1lckZ1bmMgc3RvcFRhc2tUaW1lcikKK2Jvb2wgUVRNb3ZpZTo6aW5p
dGlhbGl6ZVF1aWNrVGltZSgpIAogewotICAgIGdTZXRUYXNrVGltZXJEZWxheSA9IHNldFRhc2tU
aW1lckRlbGF5OwotICAgIGdTdG9wVGFza1RpbWVyID0gc3RvcFRhc2tUaW1lcjsKLX0KLQotYm9v
bCBRVE1vdmllV2luOjppbml0aWFsaXplUXVpY2tUaW1lKCkgCi17CiAgICAgc3RhdGljIGJvb2wg
aW5pdGlhbGl6ZWQgPSBmYWxzZTsKICAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXphdGlvblN1Y2Nl
ZWRlZCA9IGZhbHNlOwogICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKQEAgLTEwOTIsNzcgKzgyNSwx
NiBAQA0KICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBFbnRl
ck1vdmllcygpOwotICAgICAgICBnTW92aWVEcmF3aW5nQ29tcGxldGVVUFAgPSBOZXdNb3ZpZURy
YXdpbmdDb21wbGV0ZVVQUChtb3ZpZURyYXdpbmdDb21wbGV0ZVByb2MpOwogICAgICAgICBpbml0
aWFsaXphdGlvblN1Y2NlZWRlZCA9IHRydWU7CiAgICAgfQogICAgIHJldHVybiBpbml0aWFsaXph
dGlvblN1Y2NlZWRlZDsKIH0KIAotTFJFU1VMVCBRVE1vdmllV2luOjpmdWxsc2NyZWVuV25kUHJv
YyhIV05EIHduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQor
TW92aWUgUVRNb3ZpZTo6Z2V0TW92aWVIYW5kbGUoKSBjb25zdCAKIHsKLSAgICBRVE1vdmllV2lu
KiBtb3ZpZSA9IHN0YXRpY19jYXN0PFFUTW92aWVXaW4qPihHZXRQcm9wKHduZCwgZnVsbHNjcmVl
blFUTW92aWVXaW5Qb2ludGVyUHJvcCkpOwotCi0gICAgaWYgKG1lc3NhZ2UgPT0gV01fREVTVFJP
WSkKLSAgICAgICAgUmVtb3ZlUHJvcCh3bmQsIGZ1bGxzY3JlZW5RVE1vdmllV2luUG9pbnRlclBy
b3ApOwotCi0gICAgaWYgKCFtb3ZpZSkKLSAgICAgICAgcmV0dXJuIERlZldpbmRvd1Byb2Mod25k
LCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7Ci0KLSAgICByZXR1cm4gbW92aWUtPm1fcHJpdmF0
ZS0+bV9mdWxsc2NyZWVuQ2xpZW50LT5mdWxsc2NyZWVuQ2xpZW50V25kUHJvYyh3bmQsIG1lc3Nh
Z2UsIHdQYXJhbSwgbFBhcmFtKTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5tX21vdmllOwogfQog
Ci1IV05EIFFUTW92aWVXaW46OmVudGVyRnVsbHNjcmVlbihRVE1vdmllV2luRnVsbHNjcmVlbkNs
aWVudCogY2xpZW50KQotewotICAgIG1fcHJpdmF0ZS0+bV9mdWxsc2NyZWVuQ2xpZW50ID0gY2xp
ZW50OwotICAgIAotICAgIEJlZ2luRnVsbFNjcmVlbigmbV9wcml2YXRlLT5tX2Z1bGxzY3JlZW5S
ZXN0b3JlU3RhdGUsIDAsIDAsIDAsICZtX3ByaXZhdGUtPm1fZnVsbHNjcmVlbldpbmRvdywgMCwg
ZnVsbFNjcmVlbkFsbG93RXZlbnRzKTsgCi0gICAgUVRNTFNldFdpbmRvd1duZFByb2MobV9wcml2
YXRlLT5tX2Z1bGxzY3JlZW5XaW5kb3csIGZ1bGxzY3JlZW5XbmRQcm9jKTsKLSAgICBDcmVhdGVQ
b3J0QXNzb2NpYXRpb24oR2V0UG9ydE5hdGl2ZVdpbmRvdyhtX3ByaXZhdGUtPm1fZnVsbHNjcmVl
bldpbmRvdyksIDAsIDApOwotCi0gICAgR2V0TW92aWVCb3gobV9wcml2YXRlLT5tX21vdmllLCAm
bV9wcml2YXRlLT5tX2Z1bGxzY3JlZW5SZWN0KTsKLSAgICBHZXRNb3ZpZUdXb3JsZChtX3ByaXZh
dGUtPm1fbW92aWUsICZtX3ByaXZhdGUtPm1fZnVsbHNjcmVlbk9yaWdHV29ybGQsIDApOwotICAg
IFNldE1vdmllR1dvcmxkKG1fcHJpdmF0ZS0+bV9tb3ZpZSwgcmVpbnRlcnByZXRfY2FzdDxDR3Jh
ZlB0cj4obV9wcml2YXRlLT5tX2Z1bGxzY3JlZW5XaW5kb3cpLCBHZXRHV29ybGREZXZpY2UocmVp
bnRlcnByZXRfY2FzdDxDR3JhZlB0cj4obV9wcml2YXRlLT5tX2Z1bGxzY3JlZW5XaW5kb3cpKSk7
Ci0KLSAgICAvLyBTZXQgdGhlIHNpemUgb2YgdGhlIGJveCB0byBwcmVzZXJ2ZSBhc3BlY3QgcmF0
aW8KLSAgICBSZWN0IHJlY3QgPSBtX3ByaXZhdGUtPm1fZnVsbHNjcmVlbldpbmRvdy0+cG9ydFJl
Y3Q7Ci0KLSAgICBmbG9hdCBtb3ZpZVJhdGlvID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fcHJpdmF0
ZS0+bV93aWR0aCkgLyBtX3ByaXZhdGUtPm1faGVpZ2h0OwotICAgIGludCB3aW5kb3dXaWR0aCA9
ICByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0OwotICAgIGludCB3aW5kb3dIZWlnaHQgPSByZWN0LmJv
dHRvbSAtIHJlY3QudG9wOwotICAgIGZsb2F0IHdpbmRvd1JhdGlvID0gc3RhdGljX2Nhc3Q8Zmxv
YXQ+KHdpbmRvd1dpZHRoKSAvIHdpbmRvd0hlaWdodDsKLSAgICBpbnQgYWN0dWFsV2lkdGggPSAo
d2luZG93UmF0aW8gPiBtb3ZpZVJhdGlvKSA/ICh3aW5kb3dIZWlnaHQgKiBtb3ZpZVJhdGlvKSA6
IHdpbmRvd1dpZHRoOwotICAgIGludCBhY3R1YWxIZWlnaHQgPSAod2luZG93UmF0aW8gPCBtb3Zp
ZVJhdGlvKSA/ICh3aW5kb3dXaWR0aCAvIG1vdmllUmF0aW8pIDogd2luZG93SGVpZ2h0OwotICAg
IGludCBvZmZzZXRYID0gKHdpbmRvd1dpZHRoIC0gYWN0dWFsV2lkdGgpIC8gMjsKLSAgICBpbnQg
b2Zmc2V0WSA9ICh3aW5kb3dIZWlnaHQgLSBhY3R1YWxIZWlnaHQpIC8gMjsKLQotICAgIHJlY3Qu
bGVmdCA9IG9mZnNldFg7Ci0gICAgcmVjdC5yaWdodCA9IG9mZnNldFggKyBhY3R1YWxXaWR0aDsK
LSAgICByZWN0LnRvcCA9IG9mZnNldFk7Ci0gICAgcmVjdC5ib3R0b20gPSBvZmZzZXRZICsgYWN0
dWFsSGVpZ2h0OwotCi0gICAgU2V0TW92aWVCb3gobV9wcml2YXRlLT5tX21vdmllLCAmcmVjdCk7
Ci0gICAgU2hvd0hpZGVUYXNrQmFyKHRydWUpOwotCi0gICAgLy8gU2V0IHRoZSAndGhpcycgcG9p
bnRlciBvbiB0aGUgSFdORAotICAgIEhXTkQgd25kID0gc3RhdGljX2Nhc3Q8SFdORD4oR2V0UG9y
dE5hdGl2ZVdpbmRvdyhtX3ByaXZhdGUtPm1fZnVsbHNjcmVlbldpbmRvdykpOwotICAgIFNldFBy
b3Aod25kLCBmdWxsc2NyZWVuUVRNb3ZpZVdpblBvaW50ZXJQcm9wLCBzdGF0aWNfY2FzdDxIQU5E
TEU+KHRoaXMpKTsKLQotICAgIHJldHVybiB3bmQ7Ci19Ci0KLXZvaWQgUVRNb3ZpZVdpbjo6ZXhp
dEZ1bGxzY3JlZW4oKQotewotICAgIGlmICghbV9wcml2YXRlLT5tX2Z1bGxzY3JlZW5XaW5kb3cp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEhXTkQgd25kID0gc3RhdGljX2Nhc3Q8SFdORD4oR2V0
UG9ydE5hdGl2ZVdpbmRvdyhtX3ByaXZhdGUtPm1fZnVsbHNjcmVlbldpbmRvdykpOwotICAgIERl
c3Ryb3lQb3J0QXNzb2NpYXRpb24ocmVpbnRlcnByZXRfY2FzdDxDR3JhZlB0cj4obV9wcml2YXRl
LT5tX2Z1bGxzY3JlZW5XaW5kb3cpKTsKLSAgICBTZXRNb3ZpZUdXb3JsZChtX3ByaXZhdGUtPm1f
bW92aWUsIG1fcHJpdmF0ZS0+bV9mdWxsc2NyZWVuT3JpZ0dXb3JsZCwgMCk7Ci0gICAgRW5kRnVs
bFNjcmVlbihtX3ByaXZhdGUtPm1fZnVsbHNjcmVlblJlc3RvcmVTdGF0ZSwgMEwpOwotICAgIFNl
dE1vdmllQm94KG1fcHJpdmF0ZS0+bV9tb3ZpZSwgJm1fcHJpdmF0ZS0+bV9mdWxsc2NyZWVuUmVj
dCk7Ci0gICAgbV9wcml2YXRlLT5tX2Z1bGxzY3JlZW5XaW5kb3cgPSAwOwotfQotCiBCT09MIFdJ
TkFQSSBEbGxNYWluKEhJTlNUQU5DRSBoaW5zdERMTCwgRFdPUkQgZmR3UmVhc29uLCBMUFZPSUQg
bHB2UmVzZXJ2ZWQpCiB7CiAgICAgc3dpdGNoIChmZHdSZWFzb24pIHsKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWUuaA0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWUuaAkocmV2aXNpb24gNTc2NjMpDQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRNb3ZpZS5oCSh3b3JraW5nIGNvcHkpDQpAQCAt
MjMsMTEgKzIzLDEyIEBADQogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBRVE1vdmll
V2luX2gKLSNkZWZpbmUgUVRNb3ZpZVdpbl9oCisjaWZuZGVmIFFUTW92aWVfaAorI2RlZmluZSBR
VE1vdmllX2gKIAogI2luY2x1ZGUgPFVuaWNvZGUuaD4KICNpbmNsdWRlIDx3aW5kb3dzLmg+Cisj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAogI2lmZGVmIFFUTU9WSUVXSU5fRVhQT1JUUwog
I2RlZmluZSBRVE1PVklFV0lOX0FQSSBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKQEAgLTM1LDIyICsz
NiwxNyBAQA0KICNkZWZpbmUgUVRNT1ZJRVdJTl9BUEkgX19kZWNsc3BlYyhkbGxpbXBvcnQpCiAj
ZW5kaWYKIAotY2xhc3MgUVRNb3ZpZVdpbjsKLWNsYXNzIFFUTW92aWVXaW5Qcml2YXRlOworY2xh
c3MgUVRNb3ZpZTsKK2NsYXNzIFFUTW92aWVQcml2YXRlOwordHlwZWRlZiBzdHJ1Y3QgTW92aWVU
eXBlKiogTW92aWU7CiAKLWNsYXNzIFFUTW92aWVXaW5DbGllbnQgeworY2xhc3MgUVRNb3ZpZUNs
aWVudCB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIG1vdmllRW5kZWQoUVRNb3ZpZVdpbiop
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbW92aWVMb2FkU3RhdGVDaGFuZ2VkKFFUTW92aWVXaW4q
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIG1vdmllVGltZUNoYW5nZWQoUVRNb3ZpZVdpbiopID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgbW92aWVOZXdJbWFnZUF2YWlsYWJsZShRVE1vdmllV2luKikg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBtb3ZpZUVuZGVkKFFUTW92aWUqKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIG1vdmllTG9hZFN0YXRlQ2hhbmdlZChRVE1vdmllKikgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBtb3ZpZVRpbWVDaGFuZ2VkKFFUTW92aWUqKSA9IDA7CiB9OwogCi1jbGFzcyBRVE1v
dmllV2luRnVsbHNjcmVlbkNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCBMUkVTVUxUIGZ1
bGxzY3JlZW5DbGllbnRXbmRQcm9jKEhXTkQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNLCBMUEFSQU0p
ID0gMDsKLX07Ci0KIGVudW0gewogICAgIFFUTW92aWVMb2FkU3RhdGVFcnJvciA9IC0xTCwKICAg
ICBRVE1vdmllTG9hZFN0YXRlTG9hZGVkICA9IDIwMDBMLApAQCAtNjEsMTkgKzU3LDIwIEBADQog
CiB0eXBlZGVmIGNvbnN0IHN0cnVjdCBfX0NGVVJMICogQ0ZVUkxSZWY7CiAKLWNsYXNzIFFUTU9W
SUVXSU5fQVBJIFFUTW92aWVXaW4geworY2xhc3MgUVRNT1ZJRVdJTl9BUEkgUVRNb3ZpZSA6IHB1
YmxpYyBSZWZDb3VudGVkPFFUTW92aWU+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBpbml0
aWFsaXplUXVpY2tUaW1lKCk7Ci0KLSAgICB0eXBlZGVmIHZvaWQgKCpTZXRUYXNrVGltZXJEZWxh
eUZ1bmMpKGRvdWJsZSk7Ci0gICAgdHlwZWRlZiB2b2lkICgqU3RvcFRhc2tUaW1lckZ1bmMpKCk7
Ci0gICAgc3RhdGljIHZvaWQgc2V0VGFza1RpbWVyRnVuY3MoU2V0VGFza1RpbWVyRGVsYXlGdW5j
LCBTdG9wVGFza1RpbWVyRnVuYyk7CiAgICAgc3RhdGljIHZvaWQgdGFza1RpbWVyRmlyZWQoKTsK
IAotICAgIFFUTW92aWVXaW4oUVRNb3ZpZVdpbkNsaWVudCopOwotICAgIH5RVE1vdmllV2luKCk7
CisgICAgUVRNb3ZpZShRVE1vdmllQ2xpZW50Kik7CisgICAgflFUTW92aWUoKTsKIAorICAgIHZv
aWQgYWRkQ2xpZW50KFFUTW92aWVDbGllbnQqKTsKKyAgICB2b2lkIHJlbW92ZUNsaWVudChRVE1v
dmllQ2xpZW50Kik7CisKICAgICB2b2lkIGxvYWQoY29uc3QgVUNoYXIqIHVybCwgaW50IGxlbiwg
Ym9vbCBwcmVzZXJ2ZXNQaXRjaCk7CisgICAgdm9pZCBsb2FkKENGVVJMUmVmLCBib29sIHByZXNl
cnZlc1BpdGNoKTsKKwogICAgIGxvbmcgbG9hZFN0YXRlKCkgY29uc3Q7CiAgICAgZmxvYXQgbWF4
VGltZUxvYWRlZCgpIGNvbnN0OwogCkBAIC05MywxMyArOTAsMTAgQEANCiAgICAgdW5zaWduZWQg
ZGF0YVNpemUoKSBjb25zdDsKIAogICAgIHZvaWQgZ2V0TmF0dXJhbFNpemUoaW50JiB3aWR0aCwg
aW50JiBoZWlnaHQpOwotICAgIHZvaWQgc2V0U2l6ZShpbnQgd2lkdGgsIGludCBoZWlnaHQpOwog
Ci0gICAgdm9pZCBzZXRWaXNpYmxlKGJvb2wpOwotICAgIHZvaWQgcGFpbnQoSERDLCBpbnQgeCwg
aW50IHkpOwotICAgIHZvaWQgZ2V0Q3VycmVudEZyYW1lSW5mbyh2b2lkKiYgYnVmZmVyLCB1bnNp
Z25lZCYgYml0c1BlclBpeGVsLCB1bnNpZ25lZCYgcm93Qnl0ZXMsIHVuc2lnbmVkJiB3aWR0aCwg
dW5zaWduZWQmIGhlaWdodCk7Ci0KICAgICB2b2lkIGRpc2FibGVVbnN1cHBvcnRlZFRyYWNrcyh1
bnNpZ25lZCYgZW5hYmxlZFRyYWNrQ291bnQsIHVuc2lnbmVkJiB0b3RhbFRyYWNrQ291bnQpOwor
CisgICAgYm9vbCBpc0Rpc2FibGVkKCkgY29uc3Q7CiAgICAgdm9pZCBzZXREaXNhYmxlZChib29s
KTsKIAogICAgIGJvb2wgaGFzVmlkZW8oKSBjb25zdDsKQEAgLTExMSwxNyArMTA1LDExIEBADQog
ICAgIHN0YXRpYyB1bnNpZ25lZCBjb3VudFN1cHBvcnRlZFR5cGVzKCk7CiAgICAgc3RhdGljIHZv
aWQgZ2V0U3VwcG9ydGVkVHlwZSh1bnNpZ25lZCBpbmRleCwgY29uc3QgVUNoYXIqJiBzdHIsIHVu
c2lnbmVkJiBsZW4pOwogCi0gICAgLy8gUmV0dXJucyB0aGUgZnVsbC1zY3JlZW4gd2luZG93IGNy
ZWF0ZWQKLSAgICBIV05EIGVudGVyRnVsbHNjcmVlbihRVE1vdmllV2luRnVsbHNjcmVlbkNsaWVu
dCopOwotICAgIHZvaWQgZXhpdEZ1bGxzY3JlZW4oKTsKKyAgICBNb3ZpZSBnZXRNb3ZpZUhhbmRs
ZSgpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIHZvaWQgbG9hZChDRlVSTFJlZiwgYm9vbCBwcmVz
ZXJ2ZXNQaXRjaCk7Ci0gICAgc3RhdGljIExSRVNVTFQgZnVsbHNjcmVlblduZFByb2MoSFdORCwg
VUlOVCBtZXNzYWdlLCBXUEFSQU0sIExQQVJBTSk7Ci0KLSAgICBRVE1vdmllV2luUHJpdmF0ZSog
bV9wcml2YXRlOwotICAgIGJvb2wgbV9kaXNhYmxlZDsKLSAgICBmcmllbmQgY2xhc3MgUVRNb3Zp
ZVdpblByaXZhdGU7CisgICAgUVRNb3ZpZVByaXZhdGUqIG1fcHJpdmF0ZTsKKyAgICBmcmllbmQg
Y2xhc3MgUVRNb3ZpZVByaXZhdGU7CiB9OwogCiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL1FUTW92aWVXaW4uY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vUVRNb3ZpZVdpbi5jcHAJKHJldmlzaW9uIDU4MTg3KQ0KKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWVXaW4uY3BwCSh3b3JraW5nIGNv
cHkpDQpAQCAtMjksNyArMjksNyBAQA0KIC8vIFB1dCBNb3ZpZXMuaCBmaXJzdCBzbyBidWlsZCBm
YWlsdXJlcyBoZXJlIHBvaW50IGNsZWFybHkgdG8gUXVpY2tUaW1lCiAjaW5jbHVkZSA8TW92aWVz
Lmg+CiAKLSNpbmNsdWRlICJRVE1vdmllV2luVGltZXIuaCIKKyNpbmNsdWRlICJRVE1vdmllVGFz
ay5oIgogI2luY2x1ZGUgPEdYTWF0aC5oPgogI2luY2x1ZGUgPFFUTUwuaD4KICNpbmNsdWRlIDxR
dWlja1RpbWVDb21wb25lbnRzLmg+CkBAIC00MiwxMSArNDIsNiBAQA0KIAogc3RhdGljIGNvbnN0
IGxvbmcgbWluaW11bVF1aWNrVGltZVZlcnNpb24gPSAweDA3MzAwMDAwOyAvLyA3LjMKIAotc3Rh
dGljIGNvbnN0IGxvbmcgY2xvc2VkQ2FwdGlvblRyYWNrVHlwZSA9ICdjbGNwJzsKLXN0YXRpYyBj
b25zdCBsb25nIHN1YlRpdGxlVHJhY2tUeXBlID0gJ3NidGwnOwotc3RhdGljIGNvbnN0IGxvbmcg
bXBlZzRPYmplY3REZXNjcmlwdGlvblRyYWNrVHlwZSA9ICdvZHNtJzsKLXN0YXRpYyBjb25zdCBs
b25nIG1wZWc0U2NlbmVEZXNjcmlwdGlvblRyYWNrVHlwZSA9ICdzZHNtJzsKLXN0YXRpYyBjb25z
dCBsb25nIGNsb3NlZENhcHRpb25EaXNwbGF5UHJvcGVydHlJRCA9ICdkaXNwJzsKIHN0YXRpYyBM
UENUU1RSIGZ1bGxzY3JlZW5RVE1vdmllV2luUG9pbnRlclByb3AgPSBURVhUKCJmdWxsc2NyZWVu
UVRNb3ZpZVdpblBvaW50ZXIiKTsKIAogLy8gUmVzaXppbmcgR1dvcmxkcyBpcyBzbG93LCBnaXZl
IHRoZW0gYSBtaW5pbXVtIHNpemUgc28gc2l6ZSBvZiBzbWFsbCAKQEAgLTY2LDMzICs2MSwxMyBA
QA0KIHN0YXRpYyBWZWN0b3I8Q0ZTdHJpbmdSZWY+KiBnU3VwcG9ydGVkVHlwZXMgPSAwOwogc3Rh
dGljIFNJbnQzMiBxdWlja1RpbWVWZXJzaW9uID0gMDsKIAotc3RhdGljIFFUTW92aWVXaW46OlNl
dFRhc2tUaW1lckRlbGF5RnVuYyBnU2V0VGFza1RpbWVyRGVsYXkgPSAwOwotc3RhdGljIFFUTW92
aWVXaW46OlN0b3BUYXNrVGltZXJGdW5jIGdTdG9wVGFza1RpbWVyID0gMDsKLQotc3RhdGljIHZv
aWQgdXBkYXRlVGFza1RpbWVyKGludCBtYXhJbnRlcnZhbCA9IDEwMDApCi17Ci0gICAgaWYgKCFn
VGFza0xpc3QtPnNpemUoKSkgewotICAgICAgICBnU3RvcFRhc2tUaW1lcigpOwotICAgICAgICBy
ZXR1cm47ICAgIAotICAgIH0KLSAgICAKLSAgICBsb25nIGludGVydmFsSW5NUzsKLSAgICBRVEdl
dFRpbWVVbnRpbE5leHRUYXNrKCZpbnRlcnZhbEluTVMsIDEwMDApOwotICAgIGlmIChpbnRlcnZh
bEluTVMgPiBtYXhJbnRlcnZhbCkKLSAgICAgICAgaW50ZXJ2YWxJbk1TID0gbWF4SW50ZXJ2YWw7
Ci0gICAgZ1NldFRhc2tUaW1lckRlbGF5KHN0YXRpY19jYXN0PGZsb2F0PihpbnRlcnZhbEluTVMp
IC8gMTAwMCk7Ci19Ci0KLWNsYXNzIFFUTW92aWVXaW5Qcml2YXRlIDogcHVibGljIE5vbmNvcHlh
YmxlIHsKK2NsYXNzIFFUTW92aWVXaW5Qcml2YXRlIDogcHVibGljIFFUTW92aWVDbGllbnQgewog
cHVibGljOgotICAgIFFUTW92aWVXaW5Qcml2YXRlKCk7Ci0gICAgflFUTW92aWVXaW5Qcml2YXRl
KCk7Ci0gICAgdm9pZCB0YXNrKCk7Ci0gICAgdm9pZCBzdGFydFRhc2soKTsKLSAgICB2b2lkIGVu
ZFRhc2soKTsKKyAgICBRVE1vdmllV2luUHJpdmF0ZShRVE1vdmllV2luKiBtb3ZpZVdpbik7Cisg
ICAgdmlydHVhbCB+UVRNb3ZpZVdpblByaXZhdGUoKTsKIAotICAgIHZvaWQgY3JlYXRlTW92aWVD
b250cm9sbGVyKCk7CiAgICAgdm9pZCByZWdpc3RlckRyYXdpbmdDYWxsYmFjaygpOworICAgIHZv
aWQgdW5yZWdpc3RlckRyYXdpbmdDYWxsYmFjaygpOwogICAgIHZvaWQgZHJhd2luZ0NvbXBsZXRl
KCk7CiAgICAgdm9pZCB1cGRhdGVHV29ybGQoKTsKICAgICB2b2lkIGNyZWF0ZUdXb3JsZCgpOwpA
QCAtMTAzLDE2ICs3OCwxNSBAQA0KIAogICAgIHZvaWQgc2V0U2l6ZShpbnQsIGludCk7CiAKKyAg
ICB2aXJ0dWFsIHZvaWQgbW92aWVFbmRlZChRVE1vdmllKik7CisgICAgdmlydHVhbCB2b2lkIG1v
dmllTG9hZFN0YXRlQ2hhbmdlZChRVE1vdmllKik7CisgICAgdmlydHVhbCB2b2lkIG1vdmllVGlt
ZUNoYW5nZWQoUVRNb3ZpZSopOworCiAgICAgUVRNb3ZpZVdpbiogbV9tb3ZpZVdpbjsKKyAgICBS
ZWZQdHI8UVRNb3ZpZT4gbV9xdE1vdmllOwogICAgIE1vdmllIG1fbW92aWU7Ci0gICAgTW92aWVD
b250cm9sbGVyIG1fbW92aWVDb250cm9sbGVyOwotICAgIGJvb2wgbV90YXNraW5nOwogICAgIFFU
TW92aWVXaW5DbGllbnQqIG1fY2xpZW50OwogICAgIGxvbmcgbV9sb2FkU3RhdGU7Ci0gICAgYm9v
bCBtX2VuZGVkOwotICAgIGJvb2wgbV9zZWVraW5nOwotICAgIGZsb2F0IG1fbGFzdE1lZGlhVGlt
ZTsKLSAgICBkb3VibGUgbV9sYXN0TG9hZFN0YXRlQ2hlY2tUaW1lOwogICAgIGludCBtX3dpZHRo
OwogICAgIGludCBtX2hlaWdodDsKICAgICBib29sIG1fdmlzaWJsZTsKQEAgLTEyMCwxMiArOTQs
OCBAQA0KICAgICBpbnQgbV9nV29ybGRXaWR0aDsKICAgICBpbnQgbV9nV29ybGRIZWlnaHQ7CiAg
ICAgR1dvcmxkUHRyIG1fc2F2ZWRHV29ybGQ7Ci0gICAgbG9uZyBtX2xvYWRFcnJvcjsKICAgICBm
bG9hdCBtX3dpZHRoU2NhbGVGYWN0b3I7CiAgICAgZmxvYXQgbV9oZWlnaHRTY2FsZUZhY3RvcjsK
LSAgICBDRlVSTFJlZiBtX2N1cnJlbnRVUkw7Ci0gICAgZmxvYXQgbV90aW1lVG9SZXN0b3JlOwot
ICAgIGZsb2F0IG1fcmF0ZVRvUmVzdG9yZTsKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgYm9v
bCBtX3NjYWxlQ2FjaGVkOwogI2VuZGlmCkBAIC0xMzQsMTkgKzEwNCwxNCBAQA0KICAgICBSZWN0
IG1fZnVsbHNjcmVlblJlY3Q7CiAgICAgUVRNb3ZpZVdpbkZ1bGxzY3JlZW5DbGllbnQqIG1fZnVs
bHNjcmVlbkNsaWVudDsKICAgICBjaGFyKiBtX2Z1bGxzY3JlZW5SZXN0b3JlU3RhdGU7CisgICAg
Ym9vbCBtX2Rpc2FibGVkOwogfTsKIAotUVRNb3ZpZVdpblByaXZhdGU6OlFUTW92aWVXaW5Qcml2
YXRlKCkKLSAgICA6IG1fbW92aWVXaW4oMCkKK1FUTW92aWVXaW5Qcml2YXRlOjpRVE1vdmllV2lu
UHJpdmF0ZShRVE1vdmllV2luKiBtb3ZpZVdpbikKKyAgICA6IG1fbW92aWVXaW4obW92aWVXaW4p
CiAgICAgLCBtX21vdmllKDApCi0gICAgLCBtX21vdmllQ29udHJvbGxlcigwKQotICAgICwgbV90
YXNraW5nKGZhbHNlKQogICAgICwgbV9jbGllbnQoMCkKICAgICAsIG1fbG9hZFN0YXRlKDApCi0g
ICAgLCBtX2VuZGVkKGZhbHNlKQotICAgICwgbV9zZWVraW5nKGZhbHNlKQotICAgICwgbV9sYXN0
TWVkaWFUaW1lKDApCi0gICAgLCBtX2xhc3RMb2FkU3RhdGVDaGVja1RpbWUoMCkKICAgICAsIG1f
d2lkdGgoMCkKICAgICAsIG1faGVpZ2h0KDApCiAgICAgLCBtX3Zpc2libGUoZmFsc2UpCkBAIC0x
NTQsMTIgKzExOSw4IEBADQogICAgICwgbV9nV29ybGRXaWR0aCgwKQogICAgICwgbV9nV29ybGRI
ZWlnaHQoMCkKICAgICAsIG1fc2F2ZWRHV29ybGQoMCkKLSAgICAsIG1fbG9hZEVycm9yKDApCiAg
ICAgLCBtX3dpZHRoU2NhbGVGYWN0b3IoMSkKICAgICAsIG1faGVpZ2h0U2NhbGVGYWN0b3IoMSkK
LSAgICAsIG1fY3VycmVudFVSTCgwKQotICAgICwgbV90aW1lVG9SZXN0b3JlKC0xLjBmKQotICAg
ICwgbV9yYXRlVG9SZXN0b3JlKC0xLjBmKQogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICAsIG1f
c2NhbGVDYWNoZWQoZmFsc2UpCiAjZW5kaWYKQEAgLTE2Nyw2ICsxMjgsOCBAQA0KICAgICAsIG1f
ZnVsbHNjcmVlbk9yaWdHV29ybGQoMCkKICAgICAsIG1fZnVsbHNjcmVlbkNsaWVudCgwKQogICAg
ICwgbV9mdWxsc2NyZWVuUmVzdG9yZVN0YXRlKDApCisgICAgLCBtX2Rpc2FibGVkKGZhbHNlKQor
ICAgICwgbV9xdE1vdmllKDApCiB7CiAgICAgUmVjdCByZWN0ID0geyAwLCAwLCAwLCAwIH07CiAg
ICAgbV9mdWxsc2NyZWVuUmVjdCA9IHJlY3Q7CkBAIC0xNzYsNDkgKzEzOSwxMCBAQA0KIHsKICAg
ICBBU1NFUlQoIW1fZnVsbHNjcmVlbldpbmRvdyk7CiAKLSAgICBlbmRUYXNrKCk7CiAgICAgaWYg
KG1fZ1dvcmxkKQogICAgICAgICBkZWxldGVHV29ybGQoKTsKLSAgICBpZiAobV9tb3ZpZUNvbnRy
b2xsZXIpCi0gICAgICAgIERpc3Bvc2VNb3ZpZUNvbnRyb2xsZXIobV9tb3ZpZUNvbnRyb2xsZXIp
OwotICAgIGlmIChtX21vdmllKQotICAgICAgICBEaXNwb3NlTW92aWUobV9tb3ZpZSk7Ci0gICAg
aWYgKG1fY3VycmVudFVSTCkKLSAgICAgICAgQ0ZSZWxlYXNlKG1fY3VycmVudFVSTCk7CiB9CiAK
LXZvaWQgUVRNb3ZpZVdpbjo6dGFza1RpbWVyRmlyZWQoKQotewotICAgIC8vIFRoZSBoYXNoIGNv
bnRlbnQgbWlnaHQgY2hhbmdlIGR1cmluZyB0YXNrKCkKLSAgICBWZWN0b3I8UVRNb3ZpZVdpblBy
aXZhdGUqPiB0YXNrczsKLSAgICBjb3B5VG9WZWN0b3IoKmdUYXNrTGlzdCwgdGFza3MpOwotICAg
IHNpemVfdCBjb3VudCA9IHRhc2tzLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBu
IDwgY291bnQ7ICsrbikKLSAgICAgICAgdGFza3Nbbl0tPnRhc2soKTsKLQotICAgIHVwZGF0ZVRh
c2tUaW1lcigpOwotfQotCi12b2lkIFFUTW92aWVXaW5Qcml2YXRlOjpzdGFydFRhc2soKSAKLXsK
LSAgICBpZiAobV90YXNraW5nKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFnVGFza0xpc3Qp
Ci0gICAgICAgIGdUYXNrTGlzdCA9IG5ldyBIYXNoU2V0PFFUTW92aWVXaW5Qcml2YXRlKj47Ci0g
ICAgZ1Rhc2tMaXN0LT5hZGQodGhpcyk7Ci0gICAgbV90YXNraW5nID0gdHJ1ZTsKLSAgICB1cGRh
dGVUYXNrVGltZXIoKTsKLX0KLQotdm9pZCBRVE1vdmllV2luUHJpdmF0ZTo6ZW5kVGFzaygpIAot
ewotICAgIGlmICghbV90YXNraW5nKQotICAgICAgICByZXR1cm47Ci0gICAgZ1Rhc2tMaXN0LT5y
ZW1vdmUodGhpcyk7Ci0gICAgbV90YXNraW5nID0gZmFsc2U7Ci0gICAgdXBkYXRlVGFza1RpbWVy
KCk7Ci19Ci0KIHZvaWQgUVRNb3ZpZVdpblByaXZhdGU6OmNhY2hlTW92aWVTY2FsZSgpCiB7CiAg
ICAgUmVjdCBuYXR1cmFsUmVjdDsKQEAgLTIzNSwxMTAgKzE1OSwzOCBAQA0KICAgICBpZiAobmF0
dXJhbEhlaWdodCkKICAgICAgICAgbV9oZWlnaHRTY2FsZUZhY3RvciA9IChpbml0aWFsUmVjdC5i
b3R0b20gLSBpbml0aWFsUmVjdC50b3ApIC8gbmF0dXJhbEhlaWdodDsKICNpZiAhQVNTRVJUX0RJ
U0FCTEVECi0gICAgbV9zY2FsZUNhY2hlZCA9IHRydWU7OworICAgIG1fc2NhbGVDYWNoZWQgPSB0
cnVlOwogI2VuZGlmCiB9CiAKLXZvaWQgUVRNb3ZpZVdpblByaXZhdGU6OnRhc2soKSAKK3Bhc2Nh
bCBPU0VyciBtb3ZpZURyYXdpbmdDb21wbGV0ZVByb2MoTW92aWUgbW92aWUsIGxvbmcgZGF0YSkK
IHsKLSAgICBBU1NFUlQobV90YXNraW5nKTsKLQotICAgIGlmICghbV9sb2FkRXJyb3IpIHsKLSAg
ICAgICAgaWYgKG1fbW92aWVDb250cm9sbGVyKQotICAgICAgICAgICAgTUNJZGxlKG1fbW92aWVD
b250cm9sbGVyKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgTW92aWVzVGFzayhtX21vdmll
LCAwKTsKLSAgICB9Ci0KLSAgICAvLyBHZXRNb3ZpZUxvYWRTdGF0ZSBkb2N1bWVudGF0aW9uIHNh
eXMgdGhhdCB5b3Ugc2hvdWxkIG5vdCBjYWxsIGl0IG1vcmUgb2Z0ZW4gdGhhbiBldmVyeSBxdWFy
dGVyIG9mIGEgc2Vjb25kLgotICAgIGlmIChzeXN0ZW1UaW1lKCkgPj0gbV9sYXN0TG9hZFN0YXRl
Q2hlY2tUaW1lICsgMC4yNSB8fCBtX2xvYWRFcnJvcikgeyAKLSAgICAgICAgLy8gSWYgbG9hZCBm
YWlscyBRVCdzIGxvYWQgc3RhdGUgaXMgUVRNb3ZpZUxvYWRTdGF0ZUNvbXBsZXRlLgotICAgICAg
ICAvLyBUaGlzIGlzIGRpZmZlcmVudCBmcm9tIFFUS2l0IEFQSSBhbmQgc2VlbXMgc3RyYW5nZS4K
LSAgICAgICAgbG9uZyBsb2FkU3RhdGUgPSBtX2xvYWRFcnJvciA/IFFUTW92aWVMb2FkU3RhdGVF
cnJvciA6IEdldE1vdmllTG9hZFN0YXRlKG1fbW92aWUpOwotICAgICAgICBpZiAobG9hZFN0YXRl
ICE9IG1fbG9hZFN0YXRlKSB7Ci0KLSAgICAgICAgICAgIC8vIHdlIG9ubHkgbmVlZCB0byBlcmFz
ZSB0aGUgbW92aWUgZ3dvcmxkIHdoZW4gdGhlIGxvYWQgc3RhdGUgY2hhbmdlcyB0byBsb2FkZWQg
d2hpbGUgaXQKLSAgICAgICAgICAgIC8vICBpcyB2aXNpYmxlIGFzIHRoZSBnd29ybGQgaXMgZGVz
dHJveWVkL2NyZWF0ZWQgd2hlbiB2aXNpYmlsaXR5IGNoYW5nZXMKLSAgICAgICAgICAgIGJvb2wg
c2hvdWxkUmVzdG9yZVBsYXliYWNrU3RhdGUgPSBmYWxzZTsKLSAgICAgICAgICAgIGJvb2wgbW92
aWVOZXdseVBsYXlhYmxlID0gbG9hZFN0YXRlID49IFFUTW92aWVMb2FkU3RhdGVMb2FkZWQgJiYg
bV9sb2FkU3RhdGUgPCBRVE1vdmllTG9hZFN0YXRlTG9hZGVkOwotICAgICAgICAgICAgbV9sb2Fk
U3RhdGUgPSBsb2FkU3RhdGU7Ci0gICAgICAgICAgICBpZiAobW92aWVOZXdseVBsYXlhYmxlKSB7
Ci0gICAgICAgICAgICAgICAgY2FjaGVNb3ZpZVNjYWxlKCk7Ci0gICAgICAgICAgICAgICAgdXBk
YXRlTW92aWVTaXplKCk7Ci0gICAgICAgICAgICAgICAgaWYgKG1fdmlzaWJsZSkKLSAgICAgICAg
ICAgICAgICAgICAgY2xlYXJHV29ybGQoKTsKLSAgICAgICAgICAgICAgICBzaG91bGRSZXN0b3Jl
UGxheWJhY2tTdGF0ZSA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICgh
bV9tb3ZpZUNvbnRyb2xsZXIgJiYgbV9sb2FkU3RhdGUgPj0gUVRNb3ZpZUxvYWRTdGF0ZUxvYWRl
ZCkKLSAgICAgICAgICAgICAgICBjcmVhdGVNb3ZpZUNvbnRyb2xsZXIoKTsKLSAgICAgICAgICAg
IG1fY2xpZW50LT5tb3ZpZUxvYWRTdGF0ZUNoYW5nZWQobV9tb3ZpZVdpbik7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIGlmIChzaG91bGRSZXN0b3JlUGxheWJhY2tTdGF0ZSAmJiBtX3RpbWVU
b1Jlc3RvcmUgIT0gLTEuMGYpIHsKLSAgICAgICAgICAgICAgICBtX21vdmllV2luLT5zZXRDdXJy
ZW50VGltZShtX3RpbWVUb1Jlc3RvcmUpOwotICAgICAgICAgICAgICAgIG1fdGltZVRvUmVzdG9y
ZSA9IC0xLjBmOwotICAgICAgICAgICAgICAgIG1fbW92aWVXaW4tPnNldFJhdGUobV9yYXRlVG9S
ZXN0b3JlKTsKLSAgICAgICAgICAgICAgICBtX3JhdGVUb1Jlc3RvcmUgPSAtMS4wZjsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKG1fbW92aWVXaW4tPm1fZGlzYWJsZWQpIHsKLSAg
ICAgICAgICAgICAgICBlbmRUYXNrKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIG1fbGFzdExvYWRTdGF0ZUNoZWNrVGltZSA9IHN5
c3RlbVRpbWUoKTsKLSAgICB9Ci0KLSAgICBib29sIGVuZGVkID0gISFJc01vdmllRG9uZShtX21v
dmllKTsKLSAgICBpZiAoZW5kZWQgIT0gbV9lbmRlZCkgewotICAgICAgICBtX2VuZGVkID0gZW5k
ZWQ7Ci0gICAgICAgIGlmIChtX2NsaWVudCAmJiBlbmRlZCkKLSAgICAgICAgICAgIG1fY2xpZW50
LT5tb3ZpZUVuZGVkKG1fbW92aWVXaW4pOwotICAgIH0KLQotICAgIGZsb2F0IHRpbWUgPSBtX21v
dmllV2luLT5jdXJyZW50VGltZSgpOwotICAgIGlmICh0aW1lIDwgbV9sYXN0TWVkaWFUaW1lIHx8
IHRpbWUgPj0gbV9sYXN0TWVkaWFUaW1lICsgY05vbkNvbnRpbnVvdXNUaW1lQ2hhbmdlIHx8IG1f
c2Vla2luZykgewotICAgICAgICBtX3NlZWtpbmcgPSBmYWxzZTsKLSAgICAgICAgaWYgKG1fY2xp
ZW50KQotICAgICAgICAgICAgbV9jbGllbnQtPm1vdmllVGltZUNoYW5nZWQobV9tb3ZpZVdpbik7
Ci0gICAgfQotICAgIG1fbGFzdE1lZGlhVGltZSA9IHRpbWU7Ci0KLSAgICBpZiAobV9sb2FkRXJy
b3IpCi0gICAgICAgIGVuZFRhc2soKTsKKyAgICBVcHBQYXJhbSBwYXJhbTsKKyAgICBwYXJhbS5s
b25nVmFsdWUgPSBkYXRhOworICAgIFFUTW92aWVXaW5Qcml2YXRlKiBtcCA9IHN0YXRpY19jYXN0
PFFUTW92aWVXaW5Qcml2YXRlKj4ocGFyYW0ucHRyKTsKKyAgICBpZiAobXApCisgICAgICAgIG1w
LT5kcmF3aW5nQ29tcGxldGUoKTsKKyAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBRVE1vdmllV2lu
UHJpdmF0ZTo6Y3JlYXRlTW92aWVDb250cm9sbGVyKCkKLXsKLSAgICBSZWN0IGJvdW5kczsKLSAg
ICBsb25nIGZsYWdzOwotCi0gICAgaWYgKCFtX21vdmllKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAobV9tb3ZpZUNvbnRyb2xsZXIpCi0gICAgICAgIERpc3Bvc2VNb3ZpZUNvbnRyb2xsZXIo
bV9tb3ZpZUNvbnRyb2xsZXIpOwotCi0gICAgR2V0TW92aWVCb3gobV9tb3ZpZSwgJmJvdW5kcyk7
Ci0gICAgZmxhZ3MgPSBtY1RvcExlZnRNb3ZpZSB8IG1jTm90VmlzaWJsZTsKLSAgICBtX21vdmll
Q29udHJvbGxlciA9IE5ld01vdmllQ29udHJvbGxlcihtX21vdmllLCAmYm91bmRzLCBmbGFncyk7
Ci0gICAgaWYgKCFtX21vdmllQ29udHJvbGxlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTUNT
ZXRDb250cm9sbGVyUG9ydChtX21vdmllQ29udHJvbGxlciwgbV9nV29ybGQpOwotICAgIE1DU2V0
Q29udHJvbGxlckF0dGFjaGVkKG1fbW92aWVDb250cm9sbGVyLCBmYWxzZSk7Ci19Ci0KIHZvaWQg
UVRNb3ZpZVdpblByaXZhdGU6OnJlZ2lzdGVyRHJhd2luZ0NhbGxiYWNrKCkKIHsKKyAgICBpZiAo
IWdNb3ZpZURyYXdpbmdDb21wbGV0ZVVQUCkKKyAgICAgICAgZ01vdmllRHJhd2luZ0NvbXBsZXRl
VVBQID0gTmV3TW92aWVEcmF3aW5nQ29tcGxldGVVUFAobW92aWVEcmF3aW5nQ29tcGxldGVQcm9j
KTsKKwogICAgIFVwcFBhcmFtIHBhcmFtOwogICAgIHBhcmFtLnB0ciA9IHRoaXM7CiAgICAgU2V0
TW92aWVEcmF3aW5nQ29tcGxldGVQcm9jKG1fbW92aWUsIG1vdmllRHJhd2luZ0NhbGxXaGVuQ2hh
bmdlZCwgZ01vdmllRHJhd2luZ0NvbXBsZXRlVVBQLCBwYXJhbS5sb25nVmFsdWUpOwogfQogCit2
b2lkIFFUTW92aWVXaW5Qcml2YXRlOjp1bnJlZ2lzdGVyRHJhd2luZ0NhbGxiYWNrKCkKK3sKKyAg
ICBTZXRNb3ZpZURyYXdpbmdDb21wbGV0ZVByb2MobV9tb3ZpZSwgbW92aWVEcmF3aW5nQ2FsbFdo
ZW5DaGFuZ2VkLCAwLCAwKTsKK30KKwogdm9pZCBRVE1vdmllV2luUHJpdmF0ZTo6ZHJhd2luZ0Nv
bXBsZXRlKCkKIHsKLSAgICBpZiAoIW1fZ1dvcmxkIHx8IG1fbW92aWVXaW4tPm1fZGlzYWJsZWQg
fHwgbV9sb2FkU3RhdGUgPCBRVE1vdmllTG9hZFN0YXRlTG9hZGVkKQorICAgIGlmICghbV9nV29y
bGQgfHwgbV9tb3ZpZVdpbi0+bV9wcml2YXRlLT5tX2Rpc2FibGVkIHx8IG1fbG9hZFN0YXRlIDwg
UVRNb3ZpZUxvYWRTdGF0ZUxvYWRlZCkKICAgICAgICAgcmV0dXJuOwogICAgIG1fY2xpZW50LT5t
b3ZpZU5ld0ltYWdlQXZhaWxhYmxlKG1fbW92aWVXaW4pOwogfQpAQCAtMzc3LDE5ICsyMjksMTUg
QEANCiAgICAgaWYgKGVycikgCiAgICAgICAgIHJldHVybjsKICAgICBHZXRNb3ZpZUdXb3JsZCht
X21vdmllLCAmbV9zYXZlZEdXb3JsZCwgMCk7Ci0gICAgaWYgKG1fbW92aWVDb250cm9sbGVyKQot
ICAgICAgICBNQ1NldENvbnRyb2xsZXJQb3J0KG1fbW92aWVDb250cm9sbGVyLCBtX2dXb3JsZCk7
CiAgICAgU2V0TW92aWVHV29ybGQobV9tb3ZpZSwgbV9nV29ybGQsIDApOwogICAgIGJvdW5kcy5y
aWdodCA9IG1fd2lkdGg7CiAgICAgYm91bmRzLmJvdHRvbSA9IG1faGVpZ2h0OwotICAgIGlmICht
X21vdmllQ29udHJvbGxlcikKLSAgICAgICAgTUNTZXRDb250cm9sbGVyQm91bmRzUmVjdChtX21v
dmllQ29udHJvbGxlciwgJmJvdW5kcyk7CiAgICAgU2V0TW92aWVCb3gobV9tb3ZpZSwgJmJvdW5k
cyk7CiB9CiAKIHZvaWQgUVRNb3ZpZVdpblByaXZhdGU6OmNsZWFyR1dvcmxkKCkKIHsKLSAgICBp
ZiAoIW1fbW92aWV8fCFtX2dXb3JsZCkKKyAgICBpZiAoIW1fbW92aWUgfHwgIW1fZ1dvcmxkKQog
ICAgICAgICByZXR1cm47CiAKICAgICBHcmFmUHRyIHNhdmVQb3J0OwpAQCAtNDM2LDggKzI4NCw2
IEBADQogICAgIGJvdW5kcy5sZWZ0ID0gMDsgCiAgICAgYm91bmRzLnJpZ2h0ID0gbV93aWR0aDsK
ICAgICBib3VuZHMuYm90dG9tID0gbV9oZWlnaHQ7Ci0gICAgaWYgKG1fbW92aWVDb250cm9sbGVy
KQotICAgICAgICBNQ1NldENvbnRyb2xsZXJCb3VuZHNSZWN0KG1fbW92aWVDb250cm9sbGVyLCAm
Ym91bmRzKTsKICAgICBTZXRNb3ZpZUJveChtX21vdmllLCAmYm91bmRzKTsKICAgICB1cGRhdGVH
V29ybGQoKTsKIH0KQEAgLTQ0Niw4ICsyOTIsNiBAQA0KIHZvaWQgUVRNb3ZpZVdpblByaXZhdGU6
OmRlbGV0ZUdXb3JsZCgpCiB7CiAgICAgQVNTRVJUKG1fZ1dvcmxkKTsKLSAgICBpZiAobV9tb3Zp
ZUNvbnRyb2xsZXIpCi0gICAgICAgIE1DU2V0Q29udHJvbGxlclBvcnQobV9tb3ZpZUNvbnRyb2xs
ZXIsIG1fc2F2ZWRHV29ybGQpOwogICAgIGlmIChtX21vdmllKQogICAgICAgICBTZXRNb3ZpZUdX
b3JsZChtX21vdmllLCBtX3NhdmVkR1dvcmxkLCAwKTsKICAgICBtX3NhdmVkR1dvcmxkID0gMDsK
QEAgLTQ1NywxNjAgKzMwMSw1MCBAQA0KICAgICBtX2dXb3JsZEhlaWdodCA9IDA7CiB9CiAKLQot
UVRNb3ZpZVdpbjo6UVRNb3ZpZVdpbihRVE1vdmllV2luQ2xpZW50KiBjbGllbnQpCi0gICAgOiBt
X3ByaXZhdGUobmV3IFFUTW92aWVXaW5Qcml2YXRlKCkpCi0gICAgLCBtX2Rpc2FibGVkKGZhbHNl
KQordm9pZCBRVE1vdmllV2luUHJpdmF0ZTo6bW92aWVFbmRlZChRVE1vdmllKikKIHsKLSAgICBt
X3ByaXZhdGUtPm1fbW92aWVXaW4gPSB0aGlzOwotICAgIG1fcHJpdmF0ZS0+bV9jbGllbnQgPSBj
bGllbnQ7Ci0gICAgaW5pdGlhbGl6ZVF1aWNrVGltZSgpOworICAgIC8vIERvIG5vdGhpbmcKIH0K
IAotUVRNb3ZpZVdpbjo6flFUTW92aWVXaW4oKQordm9pZCBRVE1vdmllV2luUHJpdmF0ZTo6bW92
aWVMb2FkU3RhdGVDaGFuZ2VkKFFUTW92aWUqIG1vdmllKQogewotICAgIGRlbGV0ZSBtX3ByaXZh
dGU7Ci19CisgICAgbG9uZyBsb2FkU3RhdGUgPSBHZXRNb3ZpZUxvYWRTdGF0ZShtb3ZpZS0+Z2V0
TW92aWVIYW5kbGUoKSk7CisgICAgaWYgKGxvYWRTdGF0ZSAhPSBtX2xvYWRTdGF0ZSkgewogCi12
b2lkIFFUTW92aWVXaW46OnBsYXkoKQotewotICAgIG1fcHJpdmF0ZS0+bV90aW1lVG9SZXN0b3Jl
ID0gLTEuMGY7CisgICAgICAgIC8vIHdlIG9ubHkgbmVlZCB0byBlcmFzZSB0aGUgbW92aWUgZ3dv
cmxkIHdoZW4gdGhlIGxvYWQgc3RhdGUgY2hhbmdlcyB0byBsb2FkZWQgd2hpbGUgaXQKKyAgICAg
ICAgLy8gIGlzIHZpc2libGUgYXMgdGhlIGd3b3JsZCBpcyBkZXN0cm95ZWQvY3JlYXRlZCB3aGVu
IHZpc2liaWxpdHkgY2hhbmdlcworICAgICAgICBib29sIG1vdmllTmV3bHlQbGF5YWJsZSA9IGxv
YWRTdGF0ZSA+PSBRVE1vdmllTG9hZFN0YXRlTG9hZGVkICYmIG1fbG9hZFN0YXRlIDwgUVRNb3Zp
ZUxvYWRTdGF0ZUxvYWRlZDsKKyAgICAgICAgbV9sb2FkU3RhdGUgPSBsb2FkU3RhdGU7CiAKLSAg
ICBpZiAobV9wcml2YXRlLT5tX21vdmllQ29udHJvbGxlcikKLSAgICAgICAgTUNEb0FjdGlvbiht
X3ByaXZhdGUtPm1fbW92aWVDb250cm9sbGVyLCBtY0FjdGlvblByZXJvbGxBbmRQbGF5LCAodm9p
ZCAqKUdldE1vdmllUHJlZmVycmVkUmF0ZShtX3ByaXZhdGUtPm1fbW92aWUpKTsKLSAgICBlbHNl
Ci0gICAgICAgIFN0YXJ0TW92aWUobV9wcml2YXRlLT5tX21vdmllKTsKLSAgICBtX3ByaXZhdGUt
PnN0YXJ0VGFzaygpOworICAgICAgICBpZiAobW92aWVOZXdseVBsYXlhYmxlKSB7CisgICAgICAg
ICAgICBjYWNoZU1vdmllU2NhbGUoKTsKKyAgICAgICAgICAgIHVwZGF0ZU1vdmllU2l6ZSgpOwor
ICAgICAgICAgICAgaWYgKG1fdmlzaWJsZSkKKyAgICAgICAgICAgICAgICBjbGVhckdXb3JsZCgp
OworICAgICAgICB9CisgICAgfQogfQogCi12b2lkIFFUTW92aWVXaW46OnBhdXNlKCkKK3ZvaWQg
UVRNb3ZpZVdpblByaXZhdGU6Om1vdmllVGltZUNoYW5nZWQoUVRNb3ZpZSopCiB7Ci0gICAgbV9w
cml2YXRlLT5tX3RpbWVUb1Jlc3RvcmUgPSAtMS4wZjsKLQotICAgIGlmIChtX3ByaXZhdGUtPm1f
bW92aWVDb250cm9sbGVyKQotICAgICAgICBNQ0RvQWN0aW9uKG1fcHJpdmF0ZS0+bV9tb3ZpZUNv
bnRyb2xsZXIsIG1jQWN0aW9uUGxheSwgMCk7Ci0gICAgZWxzZQotICAgICAgICBTdG9wTW92aWUo
bV9wcml2YXRlLT5tX21vdmllKTsKLSAgICB1cGRhdGVUYXNrVGltZXIoKTsKKyAgICAvLyBEbyBu
b3RoaW5nCiB9CiAKLWZsb2F0IFFUTW92aWVXaW46OnJhdGUoKSBjb25zdAorUVRNb3ZpZVdpbjo6
UVRNb3ZpZVdpbihRVE1vdmllV2luQ2xpZW50KiBjbGllbnQpCisgICAgOiBtX3ByaXZhdGUobmV3
IFFUTW92aWVXaW5Qcml2YXRlKHRoaXMpKQogewotICAgIGlmICghbV9wcml2YXRlLT5tX21vdmll
KQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gRml4ZWRUb0Zsb2F0KEdldE1vdmllUmF0
ZShtX3ByaXZhdGUtPm1fbW92aWUpKTsKKyAgICBtX3ByaXZhdGUtPm1fY2xpZW50ID0gY2xpZW50
OwogfQogCi12b2lkIFFUTW92aWVXaW46OnNldFJhdGUoZmxvYXQgcmF0ZSkKK1FUTW92aWVXaW46
On5RVE1vdmllV2luKCkKIHsKLSAgICBpZiAoIW1fcHJpdmF0ZS0+bV9tb3ZpZSkKLSAgICAgICAg
cmV0dXJuOyAgICAKLSAgICBtX3ByaXZhdGUtPm1fdGltZVRvUmVzdG9yZSA9IC0xLjBmOwotICAg
IAotICAgIGlmIChtX3ByaXZhdGUtPm1fbW92aWVDb250cm9sbGVyKQotICAgICAgICBNQ0RvQWN0
aW9uKG1fcHJpdmF0ZS0+bV9tb3ZpZUNvbnRyb2xsZXIsIG1jQWN0aW9uUHJlcm9sbEFuZFBsYXks
ICh2b2lkICopRmxvYXRUb0ZpeGVkKHJhdGUpKTsKLSAgICBlbHNlCi0gICAgICAgIFNldE1vdmll
UmF0ZShtX3ByaXZhdGUtPm1fbW92aWUsIEZsb2F0VG9GaXhlZChyYXRlKSk7Ci0gICAgdXBkYXRl
VGFza1RpbWVyKCk7CisgICAgZGVsZXRlIG1fcHJpdmF0ZTsKIH0KIAotZmxvYXQgUVRNb3ZpZVdp
bjo6ZHVyYXRpb24oKSBjb25zdAotewotICAgIGlmICghbV9wcml2YXRlLT5tX21vdmllKQotICAg
ICAgICByZXR1cm4gMDsKLSAgICBUaW1lVmFsdWUgdmFsID0gR2V0TW92aWVEdXJhdGlvbihtX3By
aXZhdGUtPm1fbW92aWUpOwotICAgIFRpbWVTY2FsZSBzY2FsZSA9IEdldE1vdmllVGltZVNjYWxl
KG1fcHJpdmF0ZS0+bV9tb3ZpZSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih2YWwp
IC8gc2NhbGU7Ci19Ci0KLWZsb2F0IFFUTW92aWVXaW46OmN1cnJlbnRUaW1lKCkgY29uc3QKLXsK
LSAgICBpZiAoIW1fcHJpdmF0ZS0+bV9tb3ZpZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgVGlt
ZVZhbHVlIHZhbCA9IEdldE1vdmllVGltZShtX3ByaXZhdGUtPm1fbW92aWUsIDApOwotICAgIFRp
bWVTY2FsZSBzY2FsZSA9IEdldE1vdmllVGltZVNjYWxlKG1fcHJpdmF0ZS0+bV9tb3ZpZSk7Ci0g
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih2YWwpIC8gc2NhbGU7Ci19Ci0KLXZvaWQgUVRN
b3ZpZVdpbjo6c2V0Q3VycmVudFRpbWUoZmxvYXQgdGltZSkgY29uc3QKLXsKLSAgICBpZiAoIW1f
cHJpdmF0ZS0+bV9tb3ZpZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9wcml2YXRlLT5tX3Rp
bWVUb1Jlc3RvcmUgPSAtMS4wZjsKLSAgICAKLSAgICBtX3ByaXZhdGUtPm1fc2Vla2luZyA9IHRy
dWU7Ci0gICAgVGltZVNjYWxlIHNjYWxlID0gR2V0TW92aWVUaW1lU2NhbGUobV9wcml2YXRlLT5t
X21vdmllKTsKLSAgICBpZiAobV9wcml2YXRlLT5tX21vdmllQ29udHJvbGxlcil7Ci0gICAgICAg
IFFUUmVzdGFydEF0VGltZVJlY29yZCByZXN0YXJ0ID0geyB0aW1lICogc2NhbGUgLCAwIH07Ci0g
ICAgICAgIE1DRG9BY3Rpb24obV9wcml2YXRlLT5tX21vdmllQ29udHJvbGxlciwgbWNBY3Rpb25S
ZXN0YXJ0QXRUaW1lLCAodm9pZCAqKSZyZXN0YXJ0KTsKLSAgICB9IGVsc2UKLSAgICAgICAgU2V0
TW92aWVUaW1lVmFsdWUobV9wcml2YXRlLT5tX21vdmllLCBUaW1lVmFsdWUodGltZSAqIHNjYWxl
KSk7Ci0gICAgdXBkYXRlVGFza1RpbWVyKCk7Ci19Ci0KLXZvaWQgUVRNb3ZpZVdpbjo6c2V0Vm9s
dW1lKGZsb2F0IHZvbHVtZSkKLXsKLSAgICBpZiAoIW1fcHJpdmF0ZS0+bV9tb3ZpZSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIFNldE1vdmllVm9sdW1lKG1fcHJpdmF0ZS0+bV9tb3ZpZSwgc3RhdGlj
X2Nhc3Q8c2hvcnQ+KHZvbHVtZSAqIDI1NikpOwotfQotCi12b2lkIFFUTW92aWVXaW46OnNldFBy
ZXNlcnZlc1BpdGNoKGJvb2wgcHJlc2VydmVzUGl0Y2gpCi17Ci0gICAgaWYgKCFtX3ByaXZhdGUt
Pm1fbW92aWUgfHwgIW1fcHJpdmF0ZS0+bV9jdXJyZW50VVJMKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBPU0VyciBlcnJvcjsKLSAgICBib29sIHByb3AgPSBmYWxzZTsKLQotICAgIGVycm9yID0g
UVRHZXRNb3ZpZVByb3BlcnR5KG1fcHJpdmF0ZS0+bV9tb3ZpZSwga1FUUHJvcGVydHlDbGFzc19B
dWRpbywga1FUQXVkaW9Qcm9wZXJ0eUlEX1JhdGVDaGFuZ2VzUHJlc2VydmVQaXRjaCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoa1FUQXVkaW9Qcm9wZXJ0eUlEX1JhdGVD
aGFuZ2VzUHJlc2VydmVQaXRjaCksIHN0YXRpY19jYXN0PFFUUHJvcGVydHlWYWx1ZVB0cj4oJnBy
b3ApLCAwKTsKLQotICAgIGlmIChlcnJvciB8fCBwcm9wID09IHByZXNlcnZlc1BpdGNoKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX3ByaXZhdGUtPm1fdGltZVRvUmVzdG9yZSA9IGN1cnJlbnRU
aW1lKCk7Ci0gICAgbV9wcml2YXRlLT5tX3JhdGVUb1Jlc3RvcmUgPSByYXRlKCk7Ci0gICAgbG9h
ZChtX3ByaXZhdGUtPm1fY3VycmVudFVSTCwgcHJlc2VydmVzUGl0Y2gpOwotfQotCi11bnNpZ25l
ZCBRVE1vdmllV2luOjpkYXRhU2l6ZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3ByaXZhdGUtPm1f
bW92aWUpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBHZXRNb3ZpZURhdGFTaXplKG1f
cHJpdmF0ZS0+bV9tb3ZpZSwgMCwgR2V0TW92aWVEdXJhdGlvbihtX3ByaXZhdGUtPm1fbW92aWUp
KTsKLX0KLQotZmxvYXQgUVRNb3ZpZVdpbjo6bWF4VGltZUxvYWRlZCgpIGNvbnN0Ci17Ci0gICAg
aWYgKCFtX3ByaXZhdGUtPm1fbW92aWUpCi0gICAgICAgIHJldHVybiAwOwotICAgIFRpbWVWYWx1
ZSB2YWw7Ci0gICAgR2V0TWF4TG9hZGVkVGltZUluTW92aWUobV9wcml2YXRlLT5tX21vdmllLCAm
dmFsKTsKLSAgICBUaW1lU2NhbGUgc2NhbGUgPSBHZXRNb3ZpZVRpbWVTY2FsZShtX3ByaXZhdGUt
Pm1fbW92aWUpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4odmFsKSAvIHNjYWxlOwot
fQotCi1sb25nIFFUTW92aWVXaW46OmxvYWRTdGF0ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
cHJpdmF0ZS0+bV9sb2FkU3RhdGU7Ci19Ci0KLXZvaWQgUVRNb3ZpZVdpbjo6Z2V0TmF0dXJhbFNp
emUoaW50JiB3aWR0aCwgaW50JiBoZWlnaHQpCi17Ci0gICAgUmVjdCByZWN0ID0geyAwLCB9Owot
Ci0gICAgaWYgKG1fcHJpdmF0ZS0+bV9tb3ZpZSkKLSAgICAgICAgR2V0TW92aWVOYXR1cmFsQm91
bmRzUmVjdChtX3ByaXZhdGUtPm1fbW92aWUsICZyZWN0KTsKLSAgICB3aWR0aCA9IChyZWN0LnJp
Z2h0IC0gcmVjdC5sZWZ0KSAqIG1fcHJpdmF0ZS0+bV93aWR0aFNjYWxlRmFjdG9yOwotICAgIGhl
aWdodCA9IChyZWN0LmJvdHRvbSAtIHJlY3QudG9wKSAqIG1fcHJpdmF0ZS0+bV9oZWlnaHRTY2Fs
ZUZhY3RvcjsKLX0KLQogdm9pZCBRVE1vdmllV2luOjpzZXRTaXplKGludCB3aWR0aCwgaW50IGhl
aWdodCkKIHsKICAgICBtX3ByaXZhdGUtPnNldFNpemUod2lkdGgsIGhlaWdodCk7Ci0gICAgdXBk
YXRlVGFza1RpbWVyKDApOworICAgIFFUTW92aWVUYXNrOjpzaGFyZWRUYXNrKCktPnVwZGF0ZVRh
c2tUaW1lcigpOwogfQogCiB2b2lkIFFUTW92aWVXaW46OnNldFZpc2libGUoYm9vbCBiKQpAQCAt
NjU2LDQ0OCArMzkwLDE2IEBADQogICAgICAgICAgMCwgMCwgbV9wcml2YXRlLT5tX3dpZHRoLCBt
X3ByaXZhdGUtPm1faGVpZ2h0LCBibGVuZEZ1bmN0aW9uKTsKIH0KIAotdm9pZCBRVE1vdmllV2lu
Ojpsb2FkKGNvbnN0IFVDaGFyKiB1cmwsIGludCBsZW4sIGJvb2wgcHJlc2VydmVzUGl0Y2gpCi17
Ci0gICAgQ0ZTdHJpbmdSZWYgdXJsU3RyaW5nUmVmID0gQ0ZTdHJpbmdDcmVhdGVXaXRoQ2hhcmFj
dGVycyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCByZWludGVycHJldF9jYXN0PGNvbnN0IFVuaUNoYXIq
Pih1cmwpLCBsZW4pOwotICAgIENGVVJMUmVmIGNmVVJMID0gQ0ZVUkxDcmVhdGVXaXRoU3RyaW5n
KGtDRkFsbG9jYXRvckRlZmF1bHQsIHVybFN0cmluZ1JlZiwgMCk7Ci0KLSAgICBsb2FkKGNmVVJM
LCBwcmVzZXJ2ZXNQaXRjaCk7Ci0KLSAgICBDRlJlbGVhc2UoY2ZVUkwpOwotICAgIENGUmVsZWFz
ZSh1cmxTdHJpbmdSZWYpOwotfQotCi12b2lkIFFUTW92aWVXaW46OmxvYWQoQ0ZVUkxSZWYgdXJs
LCBib29sIHByZXNlcnZlc1BpdGNoKQotewotICAgIGlmICghdXJsKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAobV9wcml2YXRlLT5tX21vdmllKSB7Ci0gICAgICAgIG1fcHJpdmF0ZS0+ZW5k
VGFzaygpOwotICAgICAgICBpZiAobV9wcml2YXRlLT5tX2dXb3JsZCkKLSAgICAgICAgICAgIG1f
cHJpdmF0ZS0+ZGVsZXRlR1dvcmxkKCk7Ci0gICAgICAgIGlmIChtX3ByaXZhdGUtPm1fbW92aWVD
b250cm9sbGVyKQotICAgICAgICAgICAgRGlzcG9zZU1vdmllQ29udHJvbGxlcihtX3ByaXZhdGUt
Pm1fbW92aWVDb250cm9sbGVyKTsKLSAgICAgICAgbV9wcml2YXRlLT5tX21vdmllQ29udHJvbGxl
ciA9IDA7Ci0gICAgICAgIERpc3Bvc2VNb3ZpZShtX3ByaXZhdGUtPm1fbW92aWUpOwotICAgICAg
ICBtX3ByaXZhdGUtPm1fbW92aWUgPSAwOwotICAgICAgICBtX3ByaXZhdGUtPm1fbG9hZFN0YXRl
ID0gMDsKLSAgICB9ICAKLQotICAgIC8vIERlZmluZSBhIHByb3BlcnR5IGFycmF5IGZvciBOZXdN
b3ZpZUZyb21Qcm9wZXJ0aWVzLiA4IHNob3VsZCBiZSBlbm91Z2ggZm9yIG91ciBuZWVkcy4gCi0g
ICAgUVROZXdNb3ZpZVByb3BlcnR5RWxlbWVudCBtb3ZpZVByb3BzWzhdOyAKLSAgICBJdGVtQ291
bnQgbW92aWVQcm9wQ291bnQgPSAwOyAKLQotICAgIGJvb2wgYm9vbFRydWUgPSB0cnVlOwotICAg
IAotICAgIC8vIERpc2FibGUgc3RyZWFtaW5nIHN1cHBvcnQgZm9yIG5vdy4gCi0gICAgQ0ZTdHJp
bmdSZWYgc2NoZW1lID0gQ0ZVUkxDb3B5U2NoZW1lKHVybCk7Ci0gICAgYm9vbCBpc1JUU1AgPSBD
RlN0cmluZ0hhc1ByZWZpeChzY2hlbWUsIENGU1RSKCJydHNwOiIpKTsKLSAgICBDRlJlbGVhc2Uo
c2NoZW1lKTsKLQotICAgIGlmIChpc1JUU1ApIHsKLSAgICAgICAgbV9wcml2YXRlLT5tX2xvYWRF
cnJvciA9IG5vTW92aWVGb3VuZDsKLSAgICAgICAgZ290byBlbmQ7Ci0gICAgfQotCi0gICAgaWYg
KG1fcHJpdmF0ZS0+bV9jdXJyZW50VVJMKSB7Ci0gICAgICAgIGlmIChtX3ByaXZhdGUtPm1fY3Vy
cmVudFVSTCAhPSB1cmwpIHsKLSAgICAgICAgICAgIENGUmVsZWFzZShtX3ByaXZhdGUtPm1fY3Vy
cmVudFVSTCk7Ci0gICAgICAgICAgICBtX3ByaXZhdGUtPm1fY3VycmVudFVSTCA9IHVybDsKLSAg
ICAgICAgICAgIENGUmV0YWluKHVybCk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAg
ICBtX3ByaXZhdGUtPm1fY3VycmVudFVSTCA9IHVybDsKLSAgICAgICAgQ0ZSZXRhaW4odXJsKTsK
LSAgICB9Ci0KLSAgICAvLyBBZGQgdGhlIG1vdmllIGRhdGEgbG9jYXRpb24gdG8gdGhlIHByb3Bl
cnR5IGFycmF5IAotICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BDbGFzcyA9IGtR
VFByb3BlcnR5Q2xhc3NfRGF0YUxvY2F0aW9uOyAKLSAgICBtb3ZpZVByb3BzW21vdmllUHJvcENv
dW50XS5wcm9wSUQgPSBrUVREYXRhTG9jYXRpb25Qcm9wZXJ0eUlEX0NGVVJMOyAKLSAgICBtb3Zp
ZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wVmFsdWVTaXplID0gc2l6ZW9mKG1fcHJpdmF0ZS0+
bV9jdXJyZW50VVJMKTsgCi0gICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcFZhbHVl
QWRkcmVzcyA9ICYobV9wcml2YXRlLT5tX2N1cnJlbnRVUkwpOyAKLSAgICBtb3ZpZVByb3BzW21v
dmllUHJvcENvdW50XS5wcm9wU3RhdHVzID0gMDsgCi0gICAgbW92aWVQcm9wQ291bnQrKzsgCi0K
LSAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wQ2xhc3MgPSBrUVRQcm9wZXJ0eUNs
YXNzX01vdmllSW5zdGFudGlhdGlvbjsgCi0gICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0u
cHJvcElEID0ga1FUTW92aWVJbnN0YW50aWF0aW9uUHJvcGVydHlJRF9Eb250QXNrVW5yZXNvbHZl
ZERhdGFSZWZzOyAKLSAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wVmFsdWVTaXpl
ID0gc2l6ZW9mKGJvb2xUcnVlKTsgCi0gICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJv
cFZhbHVlQWRkcmVzcyA9ICZib29sVHJ1ZTsgCi0gICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3Vu
dF0ucHJvcFN0YXR1cyA9IDA7IAotICAgIG1vdmllUHJvcENvdW50Kys7IAotCi0gICAgbW92aWVQ
cm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcENsYXNzID0ga1FUUHJvcGVydHlDbGFzc19Nb3ZpZUlu
c3RhbnRpYXRpb247IAotICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BJRCA9IGtR
VE1vdmllSW5zdGFudGlhdGlvblByb3BlcnR5SURfQXN5bmNPSzsgCi0gICAgbW92aWVQcm9wc1tt
b3ZpZVByb3BDb3VudF0ucHJvcFZhbHVlU2l6ZSA9IHNpemVvZihib29sVHJ1ZSk7IAotICAgIG1v
dmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BWYWx1ZUFkZHJlc3MgPSAmYm9vbFRydWU7IAot
ICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BTdGF0dXMgPSAwOyAKLSAgICBtb3Zp
ZVByb3BDb3VudCsrOyAKLQotICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BDbGFz
cyA9IGtRVFByb3BlcnR5Q2xhc3NfTmV3TW92aWVQcm9wZXJ0eTsgCi0gICAgbW92aWVQcm9wc1tt
b3ZpZVByb3BDb3VudF0ucHJvcElEID0ga1FUTmV3TW92aWVQcm9wZXJ0eUlEX0FjdGl2ZTsgCi0g
ICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcFZhbHVlU2l6ZSA9IHNpemVvZihib29s
VHJ1ZSk7IAotICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BWYWx1ZUFkZHJlc3Mg
PSAmYm9vbFRydWU7IAotICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BTdGF0dXMg
PSAwOyAKLSAgICBtb3ZpZVByb3BDb3VudCsrOyAKLQotICAgIG1vdmllUHJvcHNbbW92aWVQcm9w
Q291bnRdLnByb3BDbGFzcyA9IGtRVFByb3BlcnR5Q2xhc3NfTmV3TW92aWVQcm9wZXJ0eTsgCi0g
ICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcElEID0ga1FUTmV3TW92aWVQcm9wZXJ0
eUlEX0RvbnRJbnRlcmFjdFdpdGhVc2VyOyAKLSAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50
XS5wcm9wVmFsdWVTaXplID0gc2l6ZW9mKGJvb2xUcnVlKTsgCi0gICAgbW92aWVQcm9wc1ttb3Zp
ZVByb3BDb3VudF0ucHJvcFZhbHVlQWRkcmVzcyA9ICZib29sVHJ1ZTsgCi0gICAgbW92aWVQcm9w
c1ttb3ZpZVByb3BDb3VudF0ucHJvcFN0YXR1cyA9IDA7IAotICAgIG1vdmllUHJvcENvdW50Kys7
IAotCi0gICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcENsYXNzID0ga1FUUHJvcGVy
dHlDbGFzc19Nb3ZpZUluc3RhbnRpYXRpb247Ci0gICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3Vu
dF0ucHJvcElEID0gJyF1cmwnOwotICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BW
YWx1ZVNpemUgPSBzaXplb2YoYm9vbFRydWUpOyAKLSAgICBtb3ZpZVByb3BzW21vdmllUHJvcENv
dW50XS5wcm9wVmFsdWVBZGRyZXNzID0gJmJvb2xUcnVlOyAKLSAgICBtb3ZpZVByb3BzW21vdmll
UHJvcENvdW50XS5wcm9wU3RhdHVzID0gMDsgCi0gICAgbW92aWVQcm9wQ291bnQrKzsgCi0KLSAg
ICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wQ2xhc3MgPSBrUVRQcm9wZXJ0eUNsYXNz
X01vdmllSW5zdGFudGlhdGlvbjsgCi0gICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJv
cElEID0gJ3NpdGUnOwotICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BWYWx1ZVNp
emUgPSBzaXplb2YoYm9vbFRydWUpOyAKLSAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5w
cm9wVmFsdWVBZGRyZXNzID0gJmJvb2xUcnVlOyAKLSAgICBtb3ZpZVByb3BzW21vdmllUHJvcENv
dW50XS5wcm9wU3RhdHVzID0gMDsgCi0gICAgbW92aWVQcm9wQ291bnQrKzsKLQotICAgIG1vdmll
UHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BDbGFzcyA9IGtRVFByb3BlcnR5Q2xhc3NfQXVkaW87
IAotICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BJRCA9IGtRVEF1ZGlvUHJvcGVy
dHlJRF9SYXRlQ2hhbmdlc1ByZXNlcnZlUGl0Y2g7Ci0gICAgbW92aWVQcm9wc1ttb3ZpZVByb3BD
b3VudF0ucHJvcFZhbHVlU2l6ZSA9IHNpemVvZihwcmVzZXJ2ZXNQaXRjaCk7IAotICAgIG1vdmll
UHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BWYWx1ZUFkZHJlc3MgPSAmcHJlc2VydmVzUGl0Y2g7
IAotICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BTdGF0dXMgPSAwOyAKLSAgICBt
b3ZpZVByb3BDb3VudCsrOyAKLQotICAgIEFTU0VSVChtb3ZpZVByb3BDb3VudCA8PSBzaXplb2Yo
bW92aWVQcm9wcykvc2l6ZW9mKG1vdmllUHJvcHNbMF0pKTsKLSAgICBtX3ByaXZhdGUtPm1fbG9h
ZEVycm9yID0gTmV3TW92aWVGcm9tUHJvcGVydGllcyhtb3ZpZVByb3BDb3VudCwgbW92aWVQcm9w
cywgMCwgMCwgJm1fcHJpdmF0ZS0+bV9tb3ZpZSk7Ci0KLWVuZDoKLSAgICBtX3ByaXZhdGUtPnN0
YXJ0VGFzaygpOwotICAgIC8vIGdldCB0aGUgbG9hZCBmYWlsIGNhbGxiYWNrIHF1aWNrbHkgCi0g
ICAgaWYgKG1fcHJpdmF0ZS0+bV9sb2FkRXJyb3IpCi0gICAgICAgIHVwZGF0ZVRhc2tUaW1lcigw
KTsKLSAgICBlbHNlIHsKLSAgICAgICAgT1NUeXBlIG1vZGUgPSBrUVRBcGVydHVyZU1vZGVfQ2xl
YW5BcGVydHVyZTsKLQotICAgICAgICAvLyBTZXQgdGhlIGFwZXJ0dXJlIG1vZGUgcHJvcGVydHkg
b24gYSBtb3ZpZSB0byBzaWduYWwgdGhhdCB3ZSB3YW50IGFzcGVjdCByYXRpbwotICAgICAgICAv
LyBhbmQgY2xlYW4gYXBlcnR1cmUgZGltZW5zaW9ucy4gRG9uJ3Qgd29ycnkgYWJvdXQgZXJyb3Jz
LCB3ZSBjYW4ndCBkbyBhbnl0aGluZyBpZgotICAgICAgICAvLyB0aGUgaW5zdGFsbGVkIHZlcnNp
b24gb2YgUVQgZG9lc24ndCBzdXBwb3J0IGl0IGFuZCBpdCBpc24ndCBzZXJpb3VzIGVub3VnaCB0
byAKLSAgICAgICAgLy8gd2FycmFudCBmYWlsaW5nLgotICAgICAgICBRVFNldE1vdmllUHJvcGVy
dHkobV9wcml2YXRlLT5tX21vdmllLCBrUVRQcm9wZXJ0eUNsYXNzX1Zpc3VhbCwga1FUVmlzdWFs
UHJvcGVydHlJRF9BcGVydHVyZU1vZGUsIHNpemVvZihtb2RlKSwgJm1vZGUpOwotICAgICAgICBt
X3ByaXZhdGUtPnJlZ2lzdGVyRHJhd2luZ0NhbGxiYWNrKCk7Ci0gICAgfQotfQotCi12b2lkIFFU
TW92aWVXaW46OmRpc2FibGVVbnN1cHBvcnRlZFRyYWNrcyh1bnNpZ25lZCYgZW5hYmxlZFRyYWNr
Q291bnQsIHVuc2lnbmVkJiB0b3RhbFRyYWNrQ291bnQpCi17Ci0gICAgaWYgKCFtX3ByaXZhdGUt
Pm1fbW92aWUpIHsKLSAgICAgICAgdG90YWxUcmFja0NvdW50ID0gMDsKLSAgICAgICAgZW5hYmxl
ZFRyYWNrQ291bnQgPSAwOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc3RhdGljIEhh
c2hTZXQ8T1NUeXBlPiogYWxsb3dlZFRyYWNrVHlwZXMgPSAwOwotICAgIGlmICghYWxsb3dlZFRy
YWNrVHlwZXMpIHsKLSAgICAgICAgYWxsb3dlZFRyYWNrVHlwZXMgPSBuZXcgSGFzaFNldDxPU1R5
cGU+OwotICAgICAgICBhbGxvd2VkVHJhY2tUeXBlcy0+YWRkKFZpZGVvTWVkaWFUeXBlKTsKLSAg
ICAgICAgYWxsb3dlZFRyYWNrVHlwZXMtPmFkZChTb3VuZE1lZGlhVHlwZSk7Ci0gICAgICAgIGFs
bG93ZWRUcmFja1R5cGVzLT5hZGQoVGV4dE1lZGlhVHlwZSk7Ci0gICAgICAgIGFsbG93ZWRUcmFj
a1R5cGVzLT5hZGQoQmFzZU1lZGlhVHlwZSk7Ci0gICAgICAgIGFsbG93ZWRUcmFja1R5cGVzLT5h
ZGQoY2xvc2VkQ2FwdGlvblRyYWNrVHlwZSk7Ci0gICAgICAgIGFsbG93ZWRUcmFja1R5cGVzLT5h
ZGQoc3ViVGl0bGVUcmFja1R5cGUpOwotICAgICAgICBhbGxvd2VkVHJhY2tUeXBlcy0+YWRkKG1w
ZWc0T2JqZWN0RGVzY3JpcHRpb25UcmFja1R5cGUpOwotICAgICAgICBhbGxvd2VkVHJhY2tUeXBl
cy0+YWRkKG1wZWc0U2NlbmVEZXNjcmlwdGlvblRyYWNrVHlwZSk7Ci0gICAgICAgIGFsbG93ZWRU
cmFja1R5cGVzLT5hZGQoVGltZUNvZGVNZWRpYVR5cGUpOwotICAgICAgICBhbGxvd2VkVHJhY2tU
eXBlcy0+YWRkKFRpbWVDb2RlNjRNZWRpYVR5cGUpOwotICAgIH0KLQotICAgIGxvbmcgdHJhY2tD
b3VudCA9IEdldE1vdmllVHJhY2tDb3VudChtX3ByaXZhdGUtPm1fbW92aWUpOwotICAgIGVuYWJs
ZWRUcmFja0NvdW50ID0gdHJhY2tDb3VudDsKLSAgICB0b3RhbFRyYWNrQ291bnQgPSB0cmFja0Nv
dW50OwotCi0gICAgLy8gVHJhY2sgaW5kZXhlcyBhcmUgMS1iYXNlZC4geXVjay4gVGhlc2UgdGhp
bmdzIG11c3QgZGVzY2VuZCBmcm9tIG9sZC0KLSAgICAvLyBzY2hvb2wgbWFjIHJlc291cmNlcyBv
ciBzb21ldGhpbmcuCi0gICAgZm9yIChsb25nIHRyYWNrSW5kZXggPSAxOyB0cmFja0luZGV4IDw9
IHRyYWNrQ291bnQ7IHRyYWNrSW5kZXgrKykgewotICAgICAgICAvLyBHcmFiIHRoZSB0cmFjayBh
dCB0aGUgY3VycmVudCBpbmRleC4gSWYgdGhlcmUgaXNuJ3Qgb25lIHRoZXJlLCB0aGVuCi0gICAg
ICAgIC8vIHdlIGNhbiBtb3ZlIG9udG8gdGhlIG5leHQgb25lLgotICAgICAgICBUcmFjayBjdXJy
ZW50VHJhY2sgPSBHZXRNb3ZpZUluZFRyYWNrKG1fcHJpdmF0ZS0+bV9tb3ZpZSwgdHJhY2tJbmRl
eCk7Ci0gICAgICAgIGlmICghY3VycmVudFRyYWNrKQotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIAotICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIHRyYWNrIGlzIGRpc2FibGVk
IGFscmVhZHksIHdlIHNob3VsZCBtb3ZlIGFsb25nLgotICAgICAgICAvLyBXZSBkb24ndCBuZWVk
IHRvIHJlLWRpc2FibGUgaXQuCi0gICAgICAgIGlmICghR2V0VHJhY2tFbmFibGVkKGN1cnJlbnRU
cmFjaykpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAvLyBHcmFiIHRoZSB0cmFj
aydzIG1lZGlhLiBXZSdyZSBnb2luZyB0byBjaGVjayB0byBzZWUgaWYgd2UgbmVlZCB0bwotICAg
ICAgICAvLyBkaXNhYmxlIHRoZSB0cmFja3MuIFRoZXkgY291bGQgYmUgdW5zdXBwb3J0ZWQuCi0g
ICAgICAgIE1lZGlhIHRyYWNrTWVkaWEgPSBHZXRUcmFja01lZGlhKGN1cnJlbnRUcmFjayk7Ci0g
ICAgICAgIGlmICghdHJhY2tNZWRpYSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAK
LSAgICAgICAgLy8gR3JhYiB0aGUgbWVkaWEgdHlwZSBmb3IgdGhpcyB0cmFjay4gTWFrZSBzdXJl
IHRoYXQgd2UgZG9uJ3QKLSAgICAgICAgLy8gZ2V0IGFuIGVycm9yIGluIGRvaW5nIHNvLiBJZiB3
ZSBkbywgdGhlbiBzb21ldGhpbmcgcmVhbGx5IGZ1bmt5IGlzCi0gICAgICAgIC8vIHdyb25nLgot
ICAgICAgICBPU1R5cGUgbWVkaWFUeXBlOwotICAgICAgICBHZXRNZWRpYUhhbmRsZXJEZXNjcmlw
dGlvbih0cmFja01lZGlhLCAmbWVkaWFUeXBlLCBuaWwsIG5pbCk7Ci0gICAgICAgIE9TRXJyIG1l
ZGlhRXJyID0gR2V0TW92aWVzRXJyb3IoKTsgICAgCi0gICAgICAgIGlmIChtZWRpYUVyciAhPSBu
b0VycikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAKLSAgICAgICAgaWYgKCFhbGxv
d2VkVHJhY2tUeXBlcy0+Y29udGFpbnMobWVkaWFUeXBlKSkgewotCi0gICAgICAgICAgICAvLyBE
aWZmZXJlbnQgbXBlZyB2YXJpYW50cyBpbXBvcnQgYXMgZGlmZmVyZW50IHRyYWNrIHR5cGVzIHNv
IGNoZWNrIGZvciB0aGUgIm1wZWcgCi0gICAgICAgICAgICAvLyBjaGFyYWN0ZXJpc3RpYyIgaW5z
dGVhZCBvZiBoYXJkIGNvZGluZyB0aGUgKGN1cnJlbnQpIGxpc3Qgb2YgbXBlZyBtZWRpYSB0eXBl
cy4KLSAgICAgICAgICAgIGlmIChHZXRNb3ZpZUluZFRyYWNrVHlwZShtX3ByaXZhdGUtPm1fbW92
aWUsIDEsICdtcGVnJywgbW92aWVUcmFja0NoYXJhY3RlcmlzdGljIHwgbW92aWVUcmFja0VuYWJs
ZWRPbmx5KSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgU2V0VHJh
Y2tFbmFibGVkKGN1cnJlbnRUcmFjaywgZmFsc2UpOwotICAgICAgICAgICAgLS1lbmFibGVkVHJh
Y2tDb3VudDsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gR3JhYiB0aGUgdHJhY2sg
cmVmZXJlbmNlIGNvdW50IGZvciBjaGFwdGVycy4gVGhpcyB3aWxsIHRlbGwgdXMgaWYgaXQKLSAg
ICAgICAgLy8gaGFzIGNoYXB0ZXIgdHJhY2tzIGluIGl0LiBJZiB0aGVyZSBhcmVuJ3QgYW55IHJl
ZmVyZW5jZXMsIHRoZW4gd2UKLSAgICAgICAgLy8gY2FuIG1vdmUgb24gdGhlIG5leHQgdHJhY2su
Ci0gICAgICAgIGxvbmcgcmVmZXJlbmNlQ291bnQgPSBHZXRUcmFja1JlZmVyZW5jZUNvdW50KGN1
cnJlbnRUcmFjaywga1RyYWNrUmVmZXJlbmNlQ2hhcHRlckxpc3QpOwotICAgICAgICBpZiAocmVm
ZXJlbmNlQ291bnQgPD0gMCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAKLSAgICAg
ICAgbG9uZyByZWZlcmVuY2VJbmRleCA9IDA7ICAgICAgICAKLSAgICAgICAgd2hpbGUgKDEpIHsK
LSAgICAgICAgICAgIC8vIElmIHdlIGdldCBub3RoaW5nIGhlcmUsIHdlJ3ZlIG92ZXJzdGVwcGVk
IG91ciBib3VuZHMgYW5kIGNhbiBzdG9wCi0gICAgICAgICAgICAvLyBsb29raW5nLiBDaGFwdGVy
IGluZGljZXMgaGVyZSBhcmUgMS1iYXNlZCBhcyB3ZWxsIC0gaGVuY2UsIHRoZQotICAgICAgICAg
ICAgLy8gcHJlLWluY3JlbWVudC4KLSAgICAgICAgICAgIHJlZmVyZW5jZUluZGV4Kys7Ci0gICAg
ICAgICAgICBUcmFjayBjaGFwdGVyVHJhY2sgPSBHZXRUcmFja1JlZmVyZW5jZShjdXJyZW50VHJh
Y2ssIGtUcmFja1JlZmVyZW5jZUNoYXB0ZXJMaXN0LCByZWZlcmVuY2VJbmRleCk7Ci0gICAgICAg
ICAgICBpZiAoIWNoYXB0ZXJUcmFjaykKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgLy8gVHJ5IHRvIGdyYWIgdGhlIG1lZGlhIGZvciB0aGUgdHJhY2su
Ci0gICAgICAgICAgICBNZWRpYSBjaGFwdGVyTWVkaWEgPSBHZXRUcmFja01lZGlhKGNoYXB0ZXJU
cmFjayk7Ci0gICAgICAgICAgICBpZiAoIWNoYXB0ZXJNZWRpYSkKLSAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgCi0gICAgICAgICAgICAvLyBHcmFiIHRoZSBtZWRpYSB0eXBlIGZv
ciB0aGlzIHRyYWNrLiBNYWtlIHN1cmUgdGhhdCB3ZSBkb24ndAotICAgICAgICAgICAgLy8gZ2V0
IGFuIGVycm9yIGluIGRvaW5nIHNvLiBJZiB3ZSBkbywgdGhlbiBzb21ldGhpbmcgcmVhbGx5Ci0g
ICAgICAgICAgICAvLyBmdW5reSBpcyB3cm9uZy4KLSAgICAgICAgICAgIE9TVHlwZSBtZWRpYVR5
cGU7Ci0gICAgICAgICAgICBHZXRNZWRpYUhhbmRsZXJEZXNjcmlwdGlvbihjaGFwdGVyTWVkaWEs
ICZtZWRpYVR5cGUsIG5pbCwgbmlsKTsKLSAgICAgICAgICAgIE9TRXJyIG1lZGlhRXJyID0gR2V0
TW92aWVzRXJyb3IoKTsKLSAgICAgICAgICAgIGlmIChtZWRpYUVyciAhPSBub0VycikKLSAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gQ2hlY2sg
dG8gc2VlIGlmIHRoZSB0cmFjayBpcyBhIHZpZGVvIHRyYWNrLiBXZSBkb24ndCBjYXJlIGFib3V0
Ci0gICAgICAgICAgICAvLyBvdGhlciBub24tdmlkZW8gdHJhY2tzLgotICAgICAgICAgICAgaWYg
KG1lZGlhVHlwZSAhPSBWaWRlb01lZGlhVHlwZSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSB0cmFjayBp
cyBhbHJlYWR5IGRpc2FibGVkLiBJZiBpdCBpcywgd2UKLSAgICAgICAgICAgIC8vIHNob3VsZCBt
b3ZlIGFsb25nLgotICAgICAgICAgICAgaWYgKCFHZXRUcmFja0VuYWJsZWQoY2hhcHRlclRyYWNr
KSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
Ly8gRGlzYWJsZWQgdGhlIGV2aWwsIGV2aWwgdHJhY2suCi0gICAgICAgICAgICBTZXRUcmFja0Vu
YWJsZWQoY2hhcHRlclRyYWNrLCBmYWxzZSk7Ci0gICAgICAgICAgICAtLWVuYWJsZWRUcmFja0Nv
dW50OwotICAgICAgICB9Ci0gICAgfQotfQotCiB2b2lkIFFUTW92aWVXaW46OnNldERpc2FibGVk
KGJvb2wgYikKIHsKLSAgICBtX2Rpc2FibGVkID0gYjsKKyAgICBtX3ByaXZhdGUtPm1fZGlzYWJs
ZWQgPSBiOwogfQogCi0KLWJvb2wgUVRNb3ZpZVdpbjo6aGFzVmlkZW8oKSBjb25zdAorYm9vbCBR
VE1vdmllV2luOjppc0Rpc2FibGVkKCkgY29uc3QKIHsKLSAgICBpZiAoIW1fcHJpdmF0ZS0+bV9t
b3ZpZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiAoR2V0TW92aWVJbmRUcmFj
a1R5cGUobV9wcml2YXRlLT5tX21vdmllLCAxLCBWaXN1YWxNZWRpYUNoYXJhY3RlcmlzdGljLCBt
b3ZpZVRyYWNrQ2hhcmFjdGVyaXN0aWMgfCBtb3ZpZVRyYWNrRW5hYmxlZE9ubHkpKTsKKyAgICBy
ZXR1cm4gbV9wcml2YXRlLT5tX2Rpc2FibGVkOwogfQogCi1ib29sIFFUTW92aWVXaW46Omhhc0F1
ZGlvKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fcHJpdmF0ZS0+bV9tb3ZpZSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIHJldHVybiAoR2V0TW92aWVJbmRUcmFja1R5cGUobV9wcml2YXRlLT5t
X21vdmllLCAxLCBBdWRpb01lZGlhQ2hhcmFjdGVyaXN0aWMsIG1vdmllVHJhY2tDaGFyYWN0ZXJp
c3RpYyB8IG1vdmllVHJhY2tFbmFibGVkT25seSkpOwotfQotCi0KLWJvb2wgUVRNb3ZpZVdpbjo6
aGFzQ2xvc2VkQ2FwdGlvbnMoKSBjb25zdCAKLXsKLSAgICBpZiAoIW1fcHJpdmF0ZS0+bV9tb3Zp
ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBHZXRNb3ZpZUluZFRyYWNrVHlw
ZShtX3ByaXZhdGUtPm1fbW92aWUsIDEsIGNsb3NlZENhcHRpb25UcmFja1R5cGUsIG1vdmllVHJh
Y2tNZWRpYVR5cGUpOwotfQotCi12b2lkIFFUTW92aWVXaW46OnNldENsb3NlZENhcHRpb25zVmlz
aWJsZShib29sIHZpc2libGUpCi17Ci0gICAgaWYgKCFtX3ByaXZhdGUtPm1fbW92aWUpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIFRyYWNrIGNjVHJhY2sgPSBHZXRNb3ZpZUluZFRyYWNrVHlwZSht
X3ByaXZhdGUtPm1fbW92aWUsIDEsIGNsb3NlZENhcHRpb25UcmFja1R5cGUsIG1vdmllVHJhY2tN
ZWRpYVR5cGUpOwotICAgIGlmICghY2NUcmFjaykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQm9v
bGVhbiBkb0Rpc3BsYXkgPSB2aXNpYmxlOwotICAgIFFUU2V0VHJhY2tQcm9wZXJ0eShjY1RyYWNr
LCBjbG9zZWRDYXB0aW9uVHJhY2tUeXBlLCBjbG9zZWRDYXB0aW9uRGlzcGxheVByb3BlcnR5SUQs
IHNpemVvZihkb0Rpc3BsYXkpLCAmZG9EaXNwbGF5KTsKLX0KLQotcGFzY2FsIE9TRXJyIG1vdmll
RHJhd2luZ0NvbXBsZXRlUHJvYyhNb3ZpZSBtb3ZpZSwgbG9uZyBkYXRhKQotewotICAgIFVwcFBh
cmFtIHBhcmFtOwotICAgIHBhcmFtLmxvbmdWYWx1ZSA9IGRhdGE7Ci0gICAgUVRNb3ZpZVdpblBy
aXZhdGUqIG1wID0gc3RhdGljX2Nhc3Q8UVRNb3ZpZVdpblByaXZhdGUqPihwYXJhbS5wdHIpOwot
ICAgIGlmIChtcCkKLSAgICAgICAgbXAtPmRyYXdpbmdDb21wbGV0ZSgpOwotICAgIHJldHVybiAw
OwotfQotCi1zdGF0aWMgdm9pZCBpbml0aWFsaXplU3VwcG9ydGVkVHlwZXMoKSAKLXsKLSAgICBp
ZiAoZ1N1cHBvcnRlZFR5cGVzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBnU3VwcG9ydGVkVHlw
ZXMgPSBuZXcgVmVjdG9yPENGU3RyaW5nUmVmPjsKLSAgICBpZiAocXVpY2tUaW1lVmVyc2lvbiA8
IG1pbmltdW1RdWlja1RpbWVWZXJzaW9uKSB7Ci0gICAgICAgIExPR19FUlJPUigiUXVpY2tUaW1l
IHZlcnNpb24gJXggZGV0ZWN0ZWQsIGF0IGxlYXN0ICV4IHJlcXVpcmVkLiBSZXR1cm5pbmcgZW1w
dHkgbGlzdCBvZiBzdXBwb3J0ZWQgbWVkaWEgTUlNRSB0eXBlcy4iLCBxdWlja1RpbWVWZXJzaW9u
LCBtaW5pbXVtUXVpY2tUaW1lVmVyc2lvbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICAvLyBRdWlja1RpbWUgZG9lc24ndCBoYXZlIGFuIGltcG9ydGVyIGZvciB2aWRlby9xdWlja3Rp
bWUuIEFkZCBpdCBtYW51YWxseS4KLSAgICBnU3VwcG9ydGVkVHlwZXMtPmFwcGVuZChDRlNUUigi
dmlkZW8vcXVpY2t0aW1lIikpOwotCi0gICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IDI7
IGluZGV4KyspIHsKLSAgICAgICAgQ29tcG9uZW50RGVzY3JpcHRpb24gZmluZENEOwotCi0gICAg
ICAgIC8vIGxvb2sgYXQgYWxsIG1vdmllIGltcG9ydGVycyB0aGF0IGNhbiBpbXBvcnQgaW4gcGxh
Y2UgYW5kIGFyZSBpbnN0YWxsZWQuIAotICAgICAgICBmaW5kQ0QuY29tcG9uZW50VHlwZSA9IE1v
dmllSW1wb3J0VHlwZTsKLSAgICAgICAgZmluZENELmNvbXBvbmVudFN1YlR5cGUgPSAwOwotICAg
ICAgICBmaW5kQ0QuY29tcG9uZW50TWFudWZhY3R1cmVyID0gMDsKLSAgICAgICAgZmluZENELmNv
bXBvbmVudEZsYWdzTWFzayA9IGNtcElzTWlzc2luZyB8IG1vdmllSW1wb3J0U3ViVHlwZUlzRmls
ZUV4dGVuc2lvbiB8IGNhbk1vdmllSW1wb3J0SW5QbGFjZSB8IGRvbnRBdXRvRmlsZU1vdmllSW1w
b3J0OwotCi0gICAgICAgIC8vIGxvb2sgYXQgdGhvc2UgcmVnaXN0ZXJlZCBieSBIRlMgZmlsZSB0
eXBlcyB0aGUgZmlyc3QgdGltZSB0aHJvdWdoLCBieSBmaWxlIGV4dGVuc2lvbiB0aGUgc2Vjb25k
IHRpbWUKLSAgICAgICAgZmluZENELmNvbXBvbmVudEZsYWdzID0gY2FuTW92aWVJbXBvcnRJblBs
YWNlIHwgKGluZGV4ID8gbW92aWVJbXBvcnRTdWJUeXBlSXNGaWxlRXh0ZW5zaW9uIDogMCk7Ci0g
ICAgICAgIAotICAgICAgICBsb25nIGNvbXBvbmVudENvdW50ID0gQ291bnRDb21wb25lbnRzKCZm
aW5kQ0QpOwotICAgICAgICBpZiAoIWNvbXBvbmVudENvdW50KQotICAgICAgICAgICAgY29udGlu
dWU7Ci0KLSAgICAgICAgQ29tcG9uZW50IGNvbXAgPSAwOwotICAgICAgICB3aGlsZSAoY29tcCA9
IEZpbmROZXh0Q29tcG9uZW50KGNvbXAsICZmaW5kQ0QpKSB7Ci0gICAgICAgICAgICAvLyBEb2Vz
IHRoaXMgY29tcG9uZW50IGhhdmUgYSBNSU1FIHR5cGUgY29udGFpbmVyPwotICAgICAgICAgICAg
Q29tcG9uZW50RGVzY3JpcHRpb24gaW5mb0NEOwotICAgICAgICAgICAgT1NFcnIgZXJyID0gR2V0
Q29tcG9uZW50SW5mbyhjb21wLCAmaW5mb0NELCBuaWwgLypuYW1lKi8sIG5pbCAvKmluZm8qLywg
bmlsIC8qaWNvbiovKTsKLSAgICAgICAgICAgIGlmIChlcnIpCi0gICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICBpZiAoIShpbmZvQ0QuY29tcG9uZW50RmxhZ3MgJiBoYXNNb3Zp
ZUltcG9ydE1JTUVMaXN0KSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
IFFUQXRvbUNvbnRhaW5lciBtaW1lTGlzdCA9IDA7Ci0gICAgICAgICAgICBlcnIgPSBNb3ZpZUlt
cG9ydEdldE1JTUVUeXBlTGlzdCgoQ29tcG9uZW50SW5zdGFuY2UpY29tcCwgJm1pbWVMaXN0KTsK
LSAgICAgICAgICAgIGlmIChlcnIgfHwgIW1pbWVMaXN0KQotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotCi0gICAgICAgICAgICAvLyBHcmFiIGV2ZXJ5IHR5cGUgZnJvbSB0aGUgY29udGFpbmVy
LgotICAgICAgICAgICAgUVRMb2NrQ29udGFpbmVyKG1pbWVMaXN0KTsKLSAgICAgICAgICAgIGlu
dCB0eXBlQ291bnQgPSBRVENvdW50Q2hpbGRyZW5PZlR5cGUobWltZUxpc3QsIGtQYXJlbnRBdG9t
SXNDb250YWluZXIsIGtNaW1lSW5mb01pbWVUeXBlVGFnKTsKLSAgICAgICAgICAgIGZvciAoaW50
IHR5cGVJbmRleCA9IDE7IHR5cGVJbmRleCA8PSB0eXBlQ291bnQ7IHR5cGVJbmRleCsrKSB7Ci0g
ICAgICAgICAgICAgICAgUVRBdG9tIG1pbWVUYWcgPSBRVEZpbmRDaGlsZEJ5SW5kZXgobWltZUxp
c3QsIDAsIGtNaW1lSW5mb01pbWVUeXBlVGFnLCB0eXBlSW5kZXgsIDApOwotICAgICAgICAgICAg
ICAgIGlmICghbWltZVRhZykKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICAgICAgY2hhciogYXRvbURhdGE7Ci0gICAgICAgICAgICAgICAgbG9uZyB0eXBlTGVuZ3Ro
OwotICAgICAgICAgICAgICAgIGlmIChub0VyciAhPSBRVEdldEF0b21EYXRhUHRyKG1pbWVMaXN0
LCBtaW1lVGFnLCAmdHlwZUxlbmd0aCwgJmF0b21EYXRhKSkKLSAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0KLSAgICAgICAgICAgICAgICBjaGFyIHR5cGVCdWZmZXJbMjU2XTsKLSAgICAg
ICAgICAgICAgICBpZiAodHlwZUxlbmd0aCA+PSBzaXplb2YodHlwZUJ1ZmZlcikpCi0gICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIG1lbWNweSh0eXBlQnVmZmVy
LCBhdG9tRGF0YSwgdHlwZUxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgdHlwZUJ1ZmZlclt0eXBl
TGVuZ3RoXSA9IDA7Ci0KLSAgICAgICAgICAgICAgICAvLyBPbmx5IGFkZCAiYXVkaW8vLi4uIiBh
bmQgInZpZGVvLy4uLiIgdHlwZXMuCi0gICAgICAgICAgICAgICAgaWYgKHN0cm5jbXAodHlwZUJ1
ZmZlciwgImF1ZGlvLyIsIDYpICYmIHN0cm5jbXAodHlwZUJ1ZmZlciwgInZpZGVvLyIsIDYpKQot
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgICAgIENGU3RyaW5n
UmVmIGNmTWltZVR5cGUgPSBDRlN0cmluZ0NyZWF0ZVdpdGhDU3RyaW5nKDAsIHR5cGVCdWZmZXIs
IGtDRlN0cmluZ0VuY29kaW5nVVRGOCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFjZk1pbWVUeXBl
KQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgICAgIC8vIE9u
bHkgYWRkIGVhY2ggdHlwZSBvbmNlLgotICAgICAgICAgICAgICAgIGJvb2wgYWxyZWFkeUFkZGVk
ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgYWRkZWRJbmRleCA9IDA7IGFkZGVk
SW5kZXggPCBnU3VwcG9ydGVkVHlwZXMtPnNpemUoKTsgYWRkZWRJbmRleCsrKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIENGU3RyaW5nUmVmIHR5cGUgPSBnU3VwcG9ydGVkVHlwZXMtPmF0KGFkZGVk
SW5kZXgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoa0NGQ29tcGFyZUVxdWFsVG8gPT0gQ0ZT
dHJpbmdDb21wYXJlKGNmTWltZVR5cGUsIHR5cGUsIGtDRkNvbXBhcmVDYXNlSW5zZW5zaXRpdmUp
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhbHJlYWR5QWRkZWQgPSB0cnVlOwotICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCFhbHJlYWR5QWRkZWQpCi0gICAgICAgICAg
ICAgICAgICAgIGdTdXBwb3J0ZWRUeXBlcy0+YXBwZW5kKGNmTWltZVR5cGUpOwotICAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgQ0ZSZWxlYXNlKGNmTWltZVR5cGUpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgRGlzcG9zZUhhbmRsZShtaW1lTGlzdCk7Ci0gICAg
ICAgIH0KLSAgICB9Ci19Ci0KLXVuc2lnbmVkIFFUTW92aWVXaW46OmNvdW50U3VwcG9ydGVkVHlw
ZXMoKQotewotICAgIGluaXRpYWxpemVTdXBwb3J0ZWRUeXBlcygpOwotICAgIHJldHVybiBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oZ1N1cHBvcnRlZFR5cGVzLT5zaXplKCkpOwotfQotCi12b2lkIFFU
TW92aWVXaW46OmdldFN1cHBvcnRlZFR5cGUodW5zaWduZWQgaW5kZXgsIGNvbnN0IFVDaGFyKiYg
c3RyLCB1bnNpZ25lZCYgbGVuKQotewotICAgIGluaXRpYWxpemVTdXBwb3J0ZWRUeXBlcygpOwot
ICAgIEFTU0VSVChpbmRleCA8IGdTdXBwb3J0ZWRUeXBlcy0+c2l6ZSgpKTsKLQotICAgIC8vIEFs
bG9jYXRlIHN1ZmZpY2llbnQgYnVmZmVyIHRvIGhvbGQgYW55IE1JTUUgdHlwZQotICAgIHN0YXRp
YyBVbmlDaGFyKiBzdGF0aWNCdWZmZXIgPSAwOwotICAgIGlmICghc3RhdGljQnVmZmVyKQotICAg
ICAgICBzdGF0aWNCdWZmZXIgPSBuZXcgVW5pQ2hhclszMl07Ci0KLSAgICBDRlN0cmluZ1JlZiBj
ZnN0ciA9IGdTdXBwb3J0ZWRUeXBlcy0+YXQoaW5kZXgpOwotICAgIGxlbiA9IENGU3RyaW5nR2V0
TGVuZ3RoKGNmc3RyKTsKLSAgICBDRlJhbmdlIHJhbmdlID0geyAwLCBsZW4gfTsKLSAgICBDRlN0
cmluZ0dldENoYXJhY3RlcnMoY2ZzdHIsIHJhbmdlLCBzdGF0aWNCdWZmZXIpOwotICAgIHN0ciA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPihzdGF0aWNCdWZmZXIpOwotICAgIAotfQot
Ci12b2lkIFFUTW92aWVXaW46OnNldFRhc2tUaW1lckZ1bmNzKFNldFRhc2tUaW1lckRlbGF5RnVu
YyBzZXRUYXNrVGltZXJEZWxheSwgU3RvcFRhc2tUaW1lckZ1bmMgc3RvcFRhc2tUaW1lcikKLXsK
LSAgICBnU2V0VGFza1RpbWVyRGVsYXkgPSBzZXRUYXNrVGltZXJEZWxheTsKLSAgICBnU3RvcFRh
c2tUaW1lciA9IHN0b3BUYXNrVGltZXI7Ci19Ci0KLWJvb2wgUVRNb3ZpZVdpbjo6aW5pdGlhbGl6
ZVF1aWNrVGltZSgpIAotewotICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVkID0gZmFsc2U7Ci0g
ICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6YXRpb25TdWNjZWVkZWQgPSBmYWxzZTsKLSAgICBpZiAo
IWluaXRpYWxpemVkKSB7Ci0gICAgICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKLSAgICAgICAgLy8g
SW5pdGlhbGl6ZSBhbmQgY2hlY2sgUXVpY2tUaW1lIHZlcnNpb24KLSAgICAgICAgT1NFcnIgcmVz
dWx0ID0gSW5pdGlhbGl6ZVFUTUwoa0luaXRpYWxpemVRVE1MRW5hYmxlRG91YmxlQnVmZmVyZWRT
dXJmYWNlKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBub0VycikKLSAgICAgICAgICAgIHJlc3Vs
dCA9IEdlc3RhbHQoZ2VzdGFsdFF1aWNrVGltZSwgJnF1aWNrVGltZVZlcnNpb24pOwotICAgICAg
ICBpZiAocmVzdWx0ICE9IG5vRXJyKSB7Ci0gICAgICAgICAgICBMT0dfRVJST1IoIk5vIFF1aWNr
VGltZSBhdmFpbGFibGUuIERpc2FibGluZyA8dmlkZW8+IGFuZCA8YXVkaW8+IHN1cHBvcnQuIik7
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHF1aWNr
VGltZVZlcnNpb24gPCBtaW5pbXVtUXVpY2tUaW1lVmVyc2lvbikgewotICAgICAgICAgICAgTE9H
X0VSUk9SKCJRdWlja1RpbWUgdmVyc2lvbiAleCBkZXRlY3RlZCwgYXQgbGVhc3QgJXggcmVxdWly
ZWQuIERpc2FibGluZyA8dmlkZW8+IGFuZCA8YXVkaW8+IHN1cHBvcnQuIiwgcXVpY2tUaW1lVmVy
c2lvbiwgbWluaW11bVF1aWNrVGltZVZlcnNpb24pOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9Ci0gICAgICAgIEVudGVyTW92aWVzKCk7Ci0gICAgICAgIGdNb3ZpZURyYXdp
bmdDb21wbGV0ZVVQUCA9IE5ld01vdmllRHJhd2luZ0NvbXBsZXRlVVBQKG1vdmllRHJhd2luZ0Nv
bXBsZXRlUHJvYyk7Ci0gICAgICAgIGluaXRpYWxpemF0aW9uU3VjY2VlZGVkID0gdHJ1ZTsKLSAg
ICB9Ci0gICAgcmV0dXJuIGluaXRpYWxpemF0aW9uU3VjY2VlZGVkOwotfQotCiBMUkVTVUxUIFFU
TW92aWVXaW46OmZ1bGxzY3JlZW5XbmRQcm9jKEhXTkQgd25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJB
TSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCiB7CiAgICAgUVRNb3ZpZVdpbiogbW92aWUgPSBzdGF0
aWNfY2FzdDxRVE1vdmllV2luKj4oR2V0UHJvcCh3bmQsIGZ1bGxzY3JlZW5RVE1vdmllV2luUG9p
bnRlclByb3ApKTsKQEAgLTExNjMsMTYgKzQ2NSwyNSBAQA0KICAgICBtX3ByaXZhdGUtPm1fZnVs
bHNjcmVlbldpbmRvdyA9IDA7CiB9CiAKLUJPT0wgV0lOQVBJIERsbE1haW4oSElOU1RBTkNFIGhp
bnN0RExMLCBEV09SRCBmZHdSZWFzb24sIExQVk9JRCBscHZSZXNlcnZlZCkKK3ZvaWQgUVRNb3Zp
ZVdpbjo6c2V0TW92aWUoUmVmUHRyPFFUTW92aWU+IG1vdmllKQogewotICAgIHN3aXRjaCAoZmR3
UmVhc29uKSB7Ci0gICAgY2FzZSBETExfUFJPQ0VTU19BVFRBQ0g6Ci0gICAgICAgIHJldHVybiBU
UlVFOwotICAgIGNhc2UgRExMX1BST0NFU1NfREVUQUNIOgotICAgIGNhc2UgRExMX1RIUkVBRF9B
VFRBQ0g6Ci0gICAgY2FzZSBETExfVEhSRUFEX0RFVEFDSDoKLSAgICAgICAgcmV0dXJuIEZBTFNF
OworICAgIGlmIChtX3ByaXZhdGUtPm1fcXRNb3ZpZSkgeworICAgICAgICBtX3ByaXZhdGUtPnVu
cmVnaXN0ZXJEcmF3aW5nQ2FsbGJhY2soKTsKKyAgICAgICAgbV9wcml2YXRlLT5tX3F0TW92aWUt
PnJlbW92ZUNsaWVudChtX3ByaXZhdGUpOworICAgICAgICBtX3ByaXZhdGUtPm1fcXRNb3ZpZSA9
IDA7CisgICAgICAgIG1fcHJpdmF0ZS0+bV9tb3ZpZSA9IDA7CiAgICAgfQotICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBGQUxTRTsKKworICAgIG1fcHJpdmF0ZS0+bV9xdE1v
dmllID0gbW92aWU7CisKKyAgICBpZiAobV9wcml2YXRlLT5tX3F0TW92aWUpIHsKKyAgICAgICAg
bV9wcml2YXRlLT5tX3F0TW92aWUtPmFkZENsaWVudChtX3ByaXZhdGUpOworICAgICAgICBtX3By
aXZhdGUtPm1fbW92aWUgPSBtX3ByaXZhdGUtPm1fcXRNb3ZpZS0+Z2V0TW92aWVIYW5kbGUoKTsK
KyAgICAgICAgbV9wcml2YXRlLT5yZWdpc3RlckRyYXdpbmdDYWxsYmFjaygpOworICAgIH0KIH0K
KworUmVmUHRyPFFUTW92aWU+IFFUTW92aWVXaW46Om1vdmllKCkgY29uc3QgCit7CisgICAgcmV0
dXJuIG1fcHJpdmF0ZS0+bV9xdE1vdmllOworfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vUVRNb3ZpZVdpbi5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vUVRNb3ZpZVdpbi5oCShyZXZpc2lvbiA1ODE4NykNCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9RVE1vdmllV2luLmgJKHdvcmtpbmcgY29weSkNCkBAIC0yNiw3
ICsyNiwxMSBAQA0KICNpZm5kZWYgUVRNb3ZpZVdpbl9oCiAjZGVmaW5lIFFUTW92aWVXaW5faAog
CisKKyNpbmNsdWRlICJRVE1vdmllLmgiCiAjaW5jbHVkZSA8VW5pY29kZS5oPgorI2luY2x1ZGUg
PFdURi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8V1RGL1JlZlB0ci5oPgogI2luY2x1ZGUgPHdp
bmRvd3MuaD4KIAogI2lmZGVmIFFUTU9WSUVXSU5fRVhQT1JUUwpAQCAtNDAsOSArNDQsNiBAQA0K
IAogY2xhc3MgUVRNb3ZpZVdpbkNsaWVudCB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIG1v
dmllRW5kZWQoUVRNb3ZpZVdpbiopID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbW92aWVMb2FkU3Rh
dGVDaGFuZ2VkKFFUTW92aWVXaW4qKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIG1vdmllVGltZUNo
YW5nZWQoUVRNb3ZpZVdpbiopID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgbW92aWVOZXdJbWFnZUF2
YWlsYWJsZShRVE1vdmllV2luKikgPSAwOwogfTsKIApAQCAtNTEsNDcgKzUyLDExIEBADQogICAg
IHZpcnR1YWwgTFJFU1VMVCBmdWxsc2NyZWVuQ2xpZW50V25kUHJvYyhIV05ELCBVSU5UIG1lc3Nh
Z2UsIFdQQVJBTSwgTFBBUkFNKSA9IDA7CiB9OwogCi1lbnVtIHsKLSAgICBRVE1vdmllTG9hZFN0
YXRlRXJyb3IgPSAtMUwsCi0gICAgUVRNb3ZpZUxvYWRTdGF0ZUxvYWRlZCAgPSAyMDAwTCwKLSAg
ICBRVE1vdmllTG9hZFN0YXRlUGxheWFibGUgPSAxMDAwMEwsCi0gICAgUVRNb3ZpZUxvYWRTdGF0
ZVBsYXl0aHJvdWdoT0sgPSAyMDAwMEwsCi0gICAgUVRNb3ZpZUxvYWRTdGF0ZUNvbXBsZXRlID0g
MTAwMDAwTAotfTsKLQotdHlwZWRlZiBjb25zdCBzdHJ1Y3QgX19DRlVSTCAqIENGVVJMUmVmOwot
Ci1jbGFzcyBRVE1PVklFV0lOX0FQSSBRVE1vdmllV2luIHsKK2NsYXNzIFFUTU9WSUVXSU5fQVBJ
IFFUTW92aWVXaW4gOiBwdWJsaWMgUmVmQ291bnRlZDxRVE1vdmllV2luPiB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZVF1aWNrVGltZSgpOwotCi0gICAgdHlwZWRlZiB2b2lk
ICgqU2V0VGFza1RpbWVyRGVsYXlGdW5jKShkb3VibGUpOwotICAgIHR5cGVkZWYgdm9pZCAoKlN0
b3BUYXNrVGltZXJGdW5jKSgpOwotICAgIHN0YXRpYyB2b2lkIHNldFRhc2tUaW1lckZ1bmNzKFNl
dFRhc2tUaW1lckRlbGF5RnVuYywgU3RvcFRhc2tUaW1lckZ1bmMpOwotICAgIHN0YXRpYyB2b2lk
IHRhc2tUaW1lckZpcmVkKCk7Ci0KICAgICBRVE1vdmllV2luKFFUTW92aWVXaW5DbGllbnQqKTsK
ICAgICB+UVRNb3ZpZVdpbigpOwogCi0gICAgdm9pZCBsb2FkKGNvbnN0IFVDaGFyKiB1cmwsIGlu
dCBsZW4sIGJvb2wgcHJlc2VydmVzUGl0Y2gpOwotICAgIGxvbmcgbG9hZFN0YXRlKCkgY29uc3Q7
Ci0gICAgZmxvYXQgbWF4VGltZUxvYWRlZCgpIGNvbnN0OwotCi0gICAgdm9pZCBwbGF5KCk7Ci0g
ICAgdm9pZCBwYXVzZSgpOwotCi0gICAgZmxvYXQgcmF0ZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0
UmF0ZShmbG9hdCk7Ci0KLSAgICBmbG9hdCBkdXJhdGlvbigpIGNvbnN0OwotICAgIGZsb2F0IGN1
cnJlbnRUaW1lKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRDdXJyZW50VGltZShmbG9hdCkgY29uc3Q7
Ci0KLSAgICB2b2lkIHNldFZvbHVtZShmbG9hdCk7Ci0gICAgdm9pZCBzZXRQcmVzZXJ2ZXNQaXRj
aChib29sKTsKLQotICAgIHVuc2lnbmVkIGRhdGFTaXplKCkgY29uc3Q7Ci0KICAgICB2b2lkIGdl
dE5hdHVyYWxTaXplKGludCYgd2lkdGgsIGludCYgaGVpZ2h0KTsKICAgICB2b2lkIHNldFNpemUo
aW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKIApAQCAtOTksMjggKzY0LDIwIEBADQogICAgIHZvaWQg
cGFpbnQoSERDLCBpbnQgeCwgaW50IHkpOwogICAgIHZvaWQgZ2V0Q3VycmVudEZyYW1lSW5mbyh2
b2lkKiYgYnVmZmVyLCB1bnNpZ25lZCYgYml0c1BlclBpeGVsLCB1bnNpZ25lZCYgcm93Qnl0ZXMs
IHVuc2lnbmVkJiB3aWR0aCwgdW5zaWduZWQmIGhlaWdodCk7CiAKLSAgICB2b2lkIGRpc2FibGVV
bnN1cHBvcnRlZFRyYWNrcyh1bnNpZ25lZCYgZW5hYmxlZFRyYWNrQ291bnQsIHVuc2lnbmVkJiB0
b3RhbFRyYWNrQ291bnQpOwogICAgIHZvaWQgc2V0RGlzYWJsZWQoYm9vbCk7CisgICAgYm9vbCBp
c0Rpc2FibGVkKCkgY29uc3Q7CiAKLSAgICBib29sIGhhc1ZpZGVvKCkgY29uc3Q7Ci0gICAgYm9v
bCBoYXNBdWRpbygpIGNvbnN0OwotCi0gICAgYm9vbCBoYXNDbG9zZWRDYXB0aW9ucygpIGNvbnN0
OwotICAgIHZvaWQgc2V0Q2xvc2VkQ2FwdGlvbnNWaXNpYmxlKGJvb2wpOwotCi0gICAgc3RhdGlj
IHVuc2lnbmVkIGNvdW50U3VwcG9ydGVkVHlwZXMoKTsKLSAgICBzdGF0aWMgdm9pZCBnZXRTdXBw
b3J0ZWRUeXBlKHVuc2lnbmVkIGluZGV4LCBjb25zdCBVQ2hhciomIHN0ciwgdW5zaWduZWQmIGxl
bik7Ci0KICAgICAvLyBSZXR1cm5zIHRoZSBmdWxsLXNjcmVlbiB3aW5kb3cgY3JlYXRlZAogICAg
IEhXTkQgZW50ZXJGdWxsc2NyZWVuKFFUTW92aWVXaW5GdWxsc2NyZWVuQ2xpZW50Kik7CiAgICAg
dm9pZCBleGl0RnVsbHNjcmVlbigpOwogCisgICAgdm9pZCBzZXRNb3ZpZShSZWZQdHI8UVRNb3Zp
ZT4pOworICAgIFJlZlB0cjxRVE1vdmllPiBtb3ZpZSgpIGNvbnN0OworCiBwcml2YXRlOgotICAg
IHZvaWQgbG9hZChDRlVSTFJlZiwgYm9vbCBwcmVzZXJ2ZXNQaXRjaCk7CiAgICAgc3RhdGljIExS
RVNVTFQgZnVsbHNjcmVlblduZFByb2MoSFdORCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0sIExQQVJB
TSk7CiAKICAgICBRVE1vdmllV2luUHJpdmF0ZSogbV9wcml2YXRlOwotICAgIGJvb2wgbV9kaXNh
YmxlZDsKICAgICBmcmllbmQgY2xhc3MgUVRNb3ZpZVdpblByaXZhdGU7CiB9OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54513</attachid>
            <date>2010-04-27 20:47:35 -0700</date>
            <delta_ts>2010-04-28 10:52:04 -0700</delta_ts>
            <desc>New classes in QTMovieWin</desc>
            <filename>7569713-QTMovieWin-NewClasses.patch</filename>
            <type>text/plain</type>
            <size>33153</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUQ0ZEaWN0aW9uYXJ5LmNwcA0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQ0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUQ0ZEaWN0aW9u
YXJ5LmNwcAkocmV2aXNpb24gMCkNCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9R
VENGRGljdGlvbmFyeS5jcHAJKHJldmlzaW9uIDApDQpAQCAtMCwwICsxLDYwIEBADQorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSwgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAi
UVRDRkRpY3Rpb25hcnkuaCIKKworI2luY2x1ZGUgPENGRGF0YS5oPgorI2luY2x1ZGUgPHdpbmRv
d3MuaD4KKworQ0ZEYXRhUmVmIFFUQ0ZQcm9wZXJ0eUxpc3RDcmVhdGVYTUxEYXRhKENGQWxsb2Nh
dG9yUmVmIGFsbG9jYXRvciwgQ0ZQcm9wZXJ0eUxpc3RSZWYgcHJvcGVydHlMaXN0KQoreworCisg
ICAgdHlwZWRlZiBDRkRhdGFSZWYgKCogcGZuQ0ZQcm9wZXJ0eUxpc3RDcmVhdGVYTUxEYXRhKShD
RkFsbG9jYXRvclJlZiBhbGxvY2F0b3IsIENGUHJvcGVydHlMaXN0UmVmIHByb3BlcnR5TGlzdCk7
CisgICAgc3RhdGljIHBmbkNGUHJvcGVydHlMaXN0Q3JlYXRlWE1MRGF0YSBwQ0ZQcm9wZXJ0eUxp
c3RDcmVhdGVYTUxEYXRhID0gMDsKKyAgICBpZiAoIXBDRlByb3BlcnR5TGlzdENyZWF0ZVhNTERh
dGEpIHsKKyAgICAgICAgSE1PRFVMRSBxdGNmRExMID0gTG9hZExpYnJhcnlXKEwiUVRDRi5kbGwi
KTsKKyAgICAgICAgaWYgKHF0Y2ZETEwpCisgICAgICAgICAgICBwQ0ZQcm9wZXJ0eUxpc3RDcmVh
dGVYTUxEYXRhID0gcmVpbnRlcnByZXRfY2FzdDxwZm5DRlByb3BlcnR5TGlzdENyZWF0ZVhNTERh
dGE+KEdldFByb2NBZGRyZXNzKHF0Y2ZETEwsICJRVENGX0NGUHJvcGVydHlMaXN0Q3JlYXRlWE1M
RGF0YSIpKTsKKyAgICB9CisKKyAgICBpZiAocENGUHJvcGVydHlMaXN0Q3JlYXRlWE1MRGF0YSkK
KyAgICAgICAgcmV0dXJuIHBDRlByb3BlcnR5TGlzdENyZWF0ZVhNTERhdGEoYWxsb2NhdG9yLCBw
cm9wZXJ0eUxpc3QpOworICAgIHJldHVybiAwOworfQorCitDRkRpY3Rpb25hcnlSZWYgUVRDRkRp
Y3Rpb25hcnlDcmVhdGVDb3B5V2l0aERhdGFDYWxsYmFjayhDRkFsbG9jYXRvclJlZiBhbGxvY2F0
b3IsIENGRGljdGlvbmFyeVJlZiBkaWN0aW9uYXJ5LCBRVENGRGljdG9uYXJ5Q3JlYXRlRnJvbURh
dGFDYWxsYmFjayBjYWxsYmFjaykgCit7CisgICAgQVNTRVJUKGRpY3Rpb25hcnkpOworICAgIEFT
U0VSVChjYWxsYmFjayk7CisKKyAgICBDRkRhdGFSZWYgZGF0YSA9IFFUQ0ZQcm9wZXJ0eUxpc3RD
cmVhdGVYTUxEYXRhKGtDRkFsbG9jYXRvckRlZmF1bHQsIGRpY3Rpb25hcnkpOworICAgIENGRGlj
dGlvbmFyeVJlZiBvdXRwdXREaWN0aW9uYXJ5ID0gY2FsbGJhY2soYWxsb2NhdG9yLCBDRkRhdGFH
ZXRCeXRlUHRyKGRhdGEpLCBDRkRhdGFHZXRMZW5ndGgoZGF0YSkpOworICAgIGlmIChkYXRhKQor
ICAgICAgICBDRlJlbGVhc2UoZGF0YSk7CisKKyAgICByZXR1cm4gb3V0cHV0RGljdGlvbmFyeTsK
K30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUQ0ZEaWN0aW9uYXJ5LmgN
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0NCi0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVENGRGljdGlv
bmFyeS5oCShyZXZpc2lvbiAwKQ0KKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FU
Q0ZEaWN0aW9uYXJ5LmgJKHJldmlzaW9uIDApDQpAQCAtMCwwICsxLDQ0IEBADQorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSwgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBRVENGRGljdGlvbmFyeV9oCisjZGVmaW5lIFFU
Q0ZEaWN0aW9uYXJ5X2gKKworI2lmZGVmIFFUTU9WSUVXSU5fRVhQT1JUUworI2RlZmluZSBRVE1P
VklFV0lOX0FQSSBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKKyNlbHNlCisjZGVmaW5lIFFUTU9WSUVX
SU5fQVBJIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQorI2VuZGlmCisKKyNpbmNsdWRlIDxDb3JlRm91
bmRhdGlvbi9DRkJhc2UuaD4KKwordHlwZWRlZiBjb25zdCBzdHJ1Y3QgX19DRkRpY3Rpb25hcnkg
KiBDRkRpY3Rpb25hcnlSZWY7Cit0eXBlZGVmIGNvbnN0IHN0cnVjdCBfX0NGQWxsb2NhdG9yICog
Q0ZBbGxvY2F0b3JSZWY7CisKK3R5cGVkZWYgQ0ZEaWN0aW9uYXJ5UmVmICgqIFFUQ0ZEaWN0b25h
cnlDcmVhdGVGcm9tRGF0YUNhbGxiYWNrKShDRkFsbG9jYXRvclJlZiwgY29uc3QgVUludDgqLCBD
RkluZGV4KTsKKworUVRNT1ZJRVdJTl9BUEkgQ0ZEaWN0aW9uYXJ5UmVmIFFUQ0ZEaWN0aW9uYXJ5
Q3JlYXRlQ29weVdpdGhEYXRhQ2FsbGJhY2soQ0ZBbGxvY2F0b3JSZWYsIENGRGljdGlvbmFyeVJl
ZiwgUVRDRkRpY3RvbmFyeUNyZWF0ZUZyb21EYXRhQ2FsbGJhY2spOworCisjZW5kaWYKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWVUYXNrLmNwcA0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQ0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWVUYXNrLmNwcAkocmV2
aXNpb24gMCkNCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVE1vdmllVGFzay5j
cHAJKHJldmlzaW9uIDApDQpAQCAtMCwwICsxLDEwMSBAQA0KKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJRVE1vdmllVGFzay5oIgor
CisvLyBQdXQgTW92aWVzLmggZmlyc3Qgc28gYnVpbGQgZmFpbHVyZXMgaGVyZSBwb2ludCBjbGVh
cmx5IHRvIFF1aWNrVGltZQorI2luY2x1ZGUgPE1vdmllcy5oPgorCisjaW5jbHVkZSA8d3RmL0hh
c2hTZXQuaD4KKworUVRNb3ZpZVRhc2s6OlFUTW92aWVUYXNrKCkgCisgICAgOiBtX3NldFRhc2tU
aW1lckRlbGF5KDApCisgICAgLCBtX3N0b3BUYXNrVGltZXIoMCkKK3sKK30KKworUVRNb3ZpZVRh
c2s6On5RVE1vdmllVGFzaygpCit7Cit9CisKK1FUTW92aWVUYXNrKiBRVE1vdmllVGFzazo6c2hh
cmVkVGFzaygpCit7CisgICAgc3RhdGljIFFUTW92aWVUYXNrKiBzX3NoYXJlZFRhc2sgPSBuZXcg
UVRNb3ZpZVRhc2soKTsKKyAgICByZXR1cm4gc19zaGFyZWRUYXNrOworfQorCit2b2lkIFFUTW92
aWVUYXNrOjp1cGRhdGVUYXNrVGltZXIoZG91YmxlIG1heEludGVydmFsLCBkb3VibGUgbWluSW50
ZXJ2YWwpCit7CisgICAgQVNTRVJUKG1fc2V0VGFza1RpbWVyRGVsYXkpOworICAgIGlmICghbV9z
ZXRUYXNrVGltZXJEZWxheSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1fc3RvcFRh
c2tUaW1lcik7CisgICAgaWYgKCFtX3Rhc2tMaXN0LnNpemUoKSAmJiBtX3N0b3BUYXNrVGltZXIp
IHsKKyAgICAgICAgbV9zdG9wVGFza1RpbWVyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgCisgICAgbG9uZyBpbnRlcnZhbEluTVM7CisgICAgT1NTdGF0dXMgc3RhdHVzID0gUVRHZXRU
aW1lVW50aWxOZXh0VGFzaygmaW50ZXJ2YWxJbk1TLCAxMDAwKTsKKyAgICBkb3VibGUgaW50ZXJ2
YWwgPSBpbnRlcnZhbEluTVMgLyAxMDAwLjA7CisgICAgaWYgKGludGVydmFsIDwgbWluSW50ZXJ2
YWwpCisgICAgICAgIGludGVydmFsID0gbWluSW50ZXJ2YWw7CisgICAgaWYgKHN0YXR1cyAhPSBu
b0VyciAmJiBpbnRlcnZhbCA+IG1heEludGVydmFsKQorICAgICAgICBpbnRlcnZhbCA9IG1heElu
dGVydmFsOworICAgIG1fc2V0VGFza1RpbWVyRGVsYXkoaW50ZXJ2YWwpOworfQorCit2b2lkIFFU
TW92aWVUYXNrOjpmaXJlVGFza0NsaWVudHMoKQoreworICAgIGZvciAoSGFzaFNldDxRVE1vdmll
VGFza0NsaWVudCo+OjppdGVyYXRvciBpID0gbV90YXNrTGlzdC5iZWdpbigpOyBpICE9IG1fdGFz
a0xpc3QuZW5kKCk7ICsraSkKKyAgICAgICAgKCppKS0+dGFzaygpOworfQorCit2b2lkIFFUTW92
aWVUYXNrOjphZGRUYXNrQ2xpZW50KFFUTW92aWVUYXNrQ2xpZW50KiBjbGllbnQpIAoreworICAg
IEFTU0VSVChjbGllbnQpOworICAgIGlmICghY2xpZW50KQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX3Rhc2tMaXN0LmFkZChjbGllbnQpOworfQorCit2b2lkIFFUTW92aWVUYXNrOjpyZW1vdmVU
YXNrQ2xpZW50KFFUTW92aWVUYXNrQ2xpZW50KiBjbGllbnQpCit7CisgICAgQVNTRVJUKGNsaWVu
dCk7CisgICAgaWYgKCFjbGllbnQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fdGFza0xpc3Qu
cmVtb3ZlKGNsaWVudCk7Cit9CisKK3ZvaWQgUVRNb3ZpZVRhc2s6OnNldFRhc2tUaW1lckZ1bmNz
KFNldFRhc2tUaW1lckRlbGF5RnVuYyBzZXRUYXNrVGltZXJEZWxheSwgU3RvcFRhc2tUaW1lckZ1
bmMgc3RvcFRhc2tUaW1lcikKK3sKKyAgICBtX3NldFRhc2tUaW1lckRlbGF5ID0gc2V0VGFza1Rp
bWVyRGVsYXk7CisgICAgbV9zdG9wVGFza1RpbWVyID0gc3RvcFRhc2tUaW1lcjsKK30KKwpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRNb3ZpZVRhc2suaA0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQ0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWVUYXNrLmgJKHJldmlz
aW9uIDApDQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRNb3ZpZVRhc2suaAko
cmV2aXNpb24gMCkNCkBAIC0wLDAgKzEsNjkgQEANCisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3
LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIFFUTW92aWVUYXNrX2gKKyNkZWZpbmUgUVRNb3ZpZVRhc2tfaAorCisjaW5j
bHVkZSA8V1RGL0hhc2hTZXQuaD4KKworI2lmZGVmIFFUTU9WSUVXSU5fRVhQT1JUUworI2RlZmlu
ZSBRVE1PVklFV0lOX0FQSSBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKKyNlbHNlCisjZGVmaW5lIFFU
TU9WSUVXSU5fQVBJIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQorI2VuZGlmCisKK2NsYXNzIFFUTW92
aWVUYXNrQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgdGFzaygpID0gMDsKK307
CisKK3R5cGVkZWYgdm9pZCAoKlNldFRhc2tUaW1lckRlbGF5RnVuYykoZG91YmxlKTsKK3R5cGVk
ZWYgdm9pZCAoKlN0b3BUYXNrVGltZXJGdW5jKSgpOworCitjbGFzcyBRVE1PVklFV0lOX0FQSSBR
VE1vdmllVGFzayB7CitwdWJsaWM6CisgICAgc3RhdGljIFFUTW92aWVUYXNrKiBzaGFyZWRUYXNr
KCk7CisKKyAgICB2b2lkIGFkZFRhc2tDbGllbnQoUVRNb3ZpZVRhc2tDbGllbnQqIGNsaWVudCk7
CisgICAgdm9pZCByZW1vdmVUYXNrQ2xpZW50KFFUTW92aWVUYXNrQ2xpZW50Kik7CisgICAgdm9p
ZCBmaXJlVGFza0NsaWVudHMoKTsKKworICAgIHZvaWQgdXBkYXRlVGFza1RpbWVyKGRvdWJsZSBt
YXhJbnRlcnZhbCA9IDEuMCwgZG91YmxlIG1pbkludGVydmFsID0gMS4wIC8gMzApOworICAgIHZv
aWQgc2V0VGFza1RpbWVyRnVuY3MoU2V0VGFza1RpbWVyRGVsYXlGdW5jIHNldFRhc2tUaW1lckRl
bGF5LCBTdG9wVGFza1RpbWVyRnVuYyBzdG9wVGFza1RpbWVyKTsKKworcHJvdGVjdGVkOgorICAg
IFFUTW92aWVUYXNrKCk7CisgICAgflFUTW92aWVUYXNrKCk7CisKKyAgICBTZXRUYXNrVGltZXJE
ZWxheUZ1bmMgbV9zZXRUYXNrVGltZXJEZWxheTsKKyAgICBTdG9wVGFza1RpbWVyRnVuYyBtX3N0
b3BUYXNrVGltZXI7CisgICAgSGFzaFNldDxRVE1vdmllVGFza0NsaWVudCo+IG1fdGFza0xpc3Q7
CisKK3ByaXZhdGU6CisgICAgUVRNb3ZpZVRhc2soY29uc3QgUVRNb3ZpZVRhc2smKTsKKyAgICBR
VE1vdmllVGFzayYgb3BlcmF0b3I9KGNvbnN0IFFUTW92aWVUYXNrJik7Cit9OworCisjZW5kaWYK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWVWaXN1YWxDb250ZXh0
LmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQ0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92
aWVWaXN1YWxDb250ZXh0LmNwcAkocmV2aXNpb24gMCkNCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9RVE1vdmllVmlzdWFsQ29udGV4dC5jcHAJKHJldmlzaW9uIDApDQpAQCAtMCww
ICsxLDI0NyBAQA0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAg
QXBwbGUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpbmNsdWRlICJRVE1vdmllVmlzdWFsQ29udGV4dC5oIgorCisjaW5jbHVkZSAiUVRN
b3ZpZVRhc2suaCIKKyNpbmNsdWRlIDxDVkJhc2UuaD4KKyNpbmNsdWRlIDxDVkhvc3RUaW1lLmg+
CisjaW5jbHVkZSA8SW1hZ2VDb21wcmVzc2lvbi5oPgorI2luY2x1ZGUgPE1vdmllcy5oPgorI2lu
Y2x1ZGUgPGQzZDl0eXBlcy5oPgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKworc3RydWN0IFFUQ1ZU
aW1lU3RhbXAgeworICAgIENWVGltZVN0YW1wIHQ7Cit9OworCitjbGFzcyBRVE1vdmllVmlzdWFs
Q29udGV4dFByaXYgeworcHVibGljOgorICAgIFFUTW92aWVWaXN1YWxDb250ZXh0UHJpdihRVE1v
dmllVmlzdWFsQ29udGV4dCogcGFyZW50LCBRVE1vdmllVmlzdWFsQ29udGV4dENsaWVudCogY2xp
ZW50LCBDRkRpY3Rpb25hcnlSZWYgb3B0aW9ucyk7CisgICAgflFUTW92aWVWaXN1YWxDb250ZXh0
UHJpdigpOworCisgICAgYm9vbCBpc0ltYWdlQXZhaWxhYmxlRm9yVGltZShjb25zdCBRVENWVGlt
ZVN0YW1wKik7CisgICAgUVRQaXhlbEJ1ZmZlciBpbWFnZUZvclRpbWUoY29uc3QgUVRDVlRpbWVT
dGFtcCopOworICAgIHZvaWQgdGFzaygpOworCisgICAgUVRWaXN1YWxDb250ZXh0UmVmIGdldCgp
OworCisgICAgZG91YmxlIGdldEN1cnJlbnRIb3N0VGltZSgpOworICAgIGRvdWJsZSBnZXRIb3N0
Q2xvY2tGcmVxdWVuY3koKTsKKworICAgIHZvaWQgc2V0TW92aWUoUmVmUHRyPFFUTW92aWU+KTsK
KyAgICBSZWZQdHI8UVRNb3ZpZT4gbW92aWUoKSBjb25zdDsKKyAgICAKKyAgICBzdGF0aWMgdm9p
ZCBpbWFnZUF2YWlsYWJsZUNhbGxiYWNrKFFUVmlzdWFsQ29udGV4dFJlZiB2aXN1YWxDb250ZXh0
LCBjb25zdCBDVlRpbWVTdGFtcCAqdGltZVN0YW1wLCB2b2lkICpyZWZDb24pOworCitwcml2YXRl
OgorICAgIFFUTW92aWVWaXN1YWxDb250ZXh0KiBtX3BhcmVudDsKKyAgICBRVE1vdmllVmlzdWFs
Q29udGV4dENsaWVudCogbV9jbGllbnQ7CisgICAgUVRWaXN1YWxDb250ZXh0UmVmIG1fdmlzdWFs
Q29udGV4dDsKKyAgICBSZWZQdHI8UVRNb3ZpZT4gbV9tb3ZpZTsKKworfTsKKworUVRNb3ZpZVZp
c3VhbENvbnRleHRQcml2OjpRVE1vdmllVmlzdWFsQ29udGV4dFByaXYoUVRNb3ZpZVZpc3VhbENv
bnRleHQqIHBhcmVudCwgUVRNb3ZpZVZpc3VhbENvbnRleHRDbGllbnQqIGNsaWVudCwgQ0ZEaWN0
aW9uYXJ5UmVmIG9wdGlvbnMpIAorICAgICAgICA6IG1fcGFyZW50KHBhcmVudCkKKyAgICAgICAg
LCBtX2NsaWVudChjbGllbnQpCisgICAgICAgICwgbV92aXN1YWxDb250ZXh0KDApCit7CisgICAg
SE1PRFVMRSBxdG1sRExMID0gOjpMb2FkTGlicmFyeVcoTCJRVE1MQ2xpZW50LmRsbCIpOworICAg
IGlmIChxdG1sRExMKSB7CisgICAgICAgIHR5cGVkZWYgT1NTdGF0dXMgKCBfX2NkZWNsICpwZm5R
VFBpeGVsQnVmZmVyQ29udGV4dENyZWF0ZSkoQ0ZBbGxvY2F0b3JSZWYsIENGRGljdGlvbmFyeVJl
ZiwgUVRWaXN1YWxDb250ZXh0UmVmKik7CisgICAgICAgIHBmblFUUGl4ZWxCdWZmZXJDb250ZXh0
Q3JlYXRlIHBQaXhlbEJ1ZmZlckNvbnRleHRDcmVhdGUgPSByZWludGVycHJldF9jYXN0PHBmblFU
UGl4ZWxCdWZmZXJDb250ZXh0Q3JlYXRlPihHZXRQcm9jQWRkcmVzcyhxdG1sRExMLCAiUVRQaXhl
bEJ1ZmZlckNvbnRleHRDcmVhdGUiKSk7CisgICAgICAgIGlmIChwUGl4ZWxCdWZmZXJDb250ZXh0
Q3JlYXRlKSB7CisgICAgICAgICAgICBPU1N0YXR1cyBzdGF0dXMgPSBwUGl4ZWxCdWZmZXJDb250
ZXh0Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIG9wdGlvbnMsICZtX3Zpc3VhbENvbnRleHQp
OworICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSBub0VyciAmJiBtX3Zpc3VhbENvbnRleHQpCisg
ICAgICAgICAgICAgICAgUVRWaXN1YWxDb250ZXh0U2V0SW1hZ2VBdmFpbGFibGVDYWxsYmFjayht
X3Zpc3VhbENvbnRleHQsICZRVE1vdmllVmlzdWFsQ29udGV4dFByaXY6OmltYWdlQXZhaWxhYmxl
Q2FsbGJhY2ssIHN0YXRpY19jYXN0PHZvaWQqPih0aGlzKSk7CisgICAgICAgIH0KKyAgICB9Cit9
CisKK1FUTW92aWVWaXN1YWxDb250ZXh0UHJpdjo6flFUTW92aWVWaXN1YWxDb250ZXh0UHJpdigp
Cit7Cit9CisKK2Jvb2wgUVRNb3ZpZVZpc3VhbENvbnRleHRQcml2Ojppc0ltYWdlQXZhaWxhYmxl
Rm9yVGltZShjb25zdCBRVENWVGltZVN0YW1wKiB0aW1lU3RhbXApCit7CisgICAgaWYgKCFtX3Zp
c3VhbENvbnRleHQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBRVFZpc3Vh
bENvbnRleHRJc05ld0ltYWdlQXZhaWxhYmxlKG1fdmlzdWFsQ29udGV4dCwgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBDVlRpbWVTdGFtcCo+KHRpbWVTdGFtcCkpOyAKK30KKworUVRQaXhlbEJ1ZmZl
ciBRVE1vdmllVmlzdWFsQ29udGV4dFByaXY6OmltYWdlRm9yVGltZShjb25zdCBRVENWVGltZVN0
YW1wKiB0aW1lU3RhbXApCit7CisgICAgUVRQaXhlbEJ1ZmZlciBwaXhlbEJ1ZmZlcjsKKyAgICBp
ZiAobV92aXN1YWxDb250ZXh0KSB7CisgICAgICAgIENWSW1hZ2VCdWZmZXJSZWYgbmV3SW1hZ2Ug
PSAwOworICAgICAgICBPU1N0YXR1cyBzdGF0dXMgPSBRVFZpc3VhbENvbnRleHRDb3B5SW1hZ2VG
b3JUaW1lKG1fdmlzdWFsQ29udGV4dCwga0NGQWxsb2NhdG9yRGVmYXVsdCwgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBDVlRpbWVTdGFtcCo+KHRpbWVTdGFtcCksICZuZXdJbWFnZSk7CisgICAgICAg
IGlmIChzdGF0dXMgPT0gbm9FcnIpIHsKKyAgICAgICAgICAgIHBpeGVsQnVmZmVyLnNldChuZXdJ
bWFnZSk7CisgICAgICAgICAgICBDVlBpeGVsQnVmZmVyUmVsZWFzZShuZXdJbWFnZSk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHBpeGVsQnVmZmVyOworfQorCit2b2lkIFFUTW92aWVW
aXN1YWxDb250ZXh0UHJpdjo6dGFzaygpCit7CisgICAgaWYgKG1fdmlzdWFsQ29udGV4dCkKKyAg
ICAgICAgUVRWaXN1YWxDb250ZXh0VGFzayhtX3Zpc3VhbENvbnRleHQpOworfQorCitRVFZpc3Vh
bENvbnRleHRSZWYgUVRNb3ZpZVZpc3VhbENvbnRleHRQcml2OjpnZXQoKSAKK3sKKyAgICByZXR1
cm4gbV92aXN1YWxDb250ZXh0OworfQorCit2b2lkIFFUTW92aWVWaXN1YWxDb250ZXh0UHJpdjo6
c2V0TW92aWUoUmVmUHRyPFFUTW92aWU+IG1vdmllKQoreworICAgIGlmIChtX21vdmllKSB7Cisg
ICAgICAgIFNldE1vdmllVmlzdWFsQ29udGV4dChtX21vdmllLT5nZXRNb3ZpZUhhbmRsZSgpLCAw
KTsKKyAgICAgICAgbV9tb3ZpZSA9IDA7CisgICAgfQorCisgICAgaWYgKG1vdmllKQorICAgICAg
ICBPU1N0YXR1cyBzdGF0dXMgPSBTZXRNb3ZpZVZpc3VhbENvbnRleHQobW92aWUtPmdldE1vdmll
SGFuZGxlKCksIG1fdmlzdWFsQ29udGV4dCk7CisgICAgCisgICAgbV9tb3ZpZSA9IG1vdmllOwor
fQorCitSZWZQdHI8UVRNb3ZpZT4gUVRNb3ZpZVZpc3VhbENvbnRleHRQcml2Ojptb3ZpZSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fbW92aWU7Cit9CisKK3ZvaWQgUVRNb3ZpZVZpc3VhbENvbnRl
eHRQcml2OjppbWFnZUF2YWlsYWJsZUNhbGxiYWNrKFFUVmlzdWFsQ29udGV4dFJlZiB2aXN1YWxD
b250ZXh0LCBjb25zdCBDVlRpbWVTdGFtcCAqdGltZVN0YW1wLCB2b2lkICpyZWZDb24pIAorewor
ICAgIGlmICghcmVmQ29uKQorICAgICAgICByZXR1cm47CisKKyAgICBRVE1vdmllVmlzdWFsQ29u
dGV4dFByaXYqIHZjID0gc3RhdGljX2Nhc3Q8UVRNb3ZpZVZpc3VhbENvbnRleHRQcml2Kj4ocmVm
Q29uKTsKKyAgICBpZiAoIXZjLT5tX2NsaWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgdmMt
Pm1fY2xpZW50LT5pbWFnZUF2YWlsYWJsZUZvclRpbWUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBR
VENWVGltZVN0YW1wKj4odGltZVN0YW1wKSk7Cit9CisKK3N0YXRpYyBPU1N0YXR1cyBTZXROdW1i
ZXJWYWx1ZShDRk11dGFibGVEaWN0aW9uYXJ5UmVmIGluRGljdCwgQ0ZTdHJpbmdSZWYgaW5LZXks
IFNJbnQzMiBpblZhbHVlKQoreworICAgIENGTnVtYmVyUmVmIG51bWJlcjsKKyAKKyAgICBudW1i
ZXIgPSBDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJTSW50MzJU
eXBlLCAmaW5WYWx1ZSk7CisgICAgaWYgKCFudW1iZXIpIAorICAgICAgICByZXR1cm4gY29yZUZv
dW5kYXRpb25Vbmtub3duRXJyOworIAorICAgIENGRGljdGlvbmFyeVNldFZhbHVlKGluRGljdCwg
aW5LZXksIG51bWJlcik7CisgCisgICAgQ0ZSZWxlYXNlKG51bWJlcik7CisgCisgICAgcmV0dXJu
IG5vRXJyOworfQorCitDRkRpY3Rpb25hcnlSZWYgUVRNb3ZpZVZpc3VhbENvbnRleHQ6OmdldENH
SW1hZ2VPcHRpb25zKCkKK3sKKyAgICBzdGF0aWMgQ0ZEaWN0aW9uYXJ5UmVmIG9wdGlvbnMgPSAw
OworCisgICAgaWYgKCFvcHRpb25zKSB7CisgICAgICAgIENGTXV0YWJsZURpY3Rpb25hcnlSZWYg
IHBpeGVsQnVmZmVyT3B0aW9ucyA9IDA7CisgICAgICAgIENGTXV0YWJsZURpY3Rpb25hcnlSZWYg
IHZpc3VhbENvbnRleHRPcHRpb25zID0gMDsKKyAgICAgICAgT1NTdGF0dXMgICAgICAgICAgICAg
ICAgc3RhdHVzID0gbm9FcnI7CisgICAgICAgIAorICAgICAgICAvLyBQaXhlbCBCdWZmZXIgYXR0
cmlidXRlcworICAgICAgICBwaXhlbEJ1ZmZlck9wdGlvbnMgPSBDRkRpY3Rpb25hcnlDcmVhdGVN
dXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJh
Y2tzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKTsKKworICAgICAgICAvLyBVc2Ug
dGhlIGszMkJHUkFQaXhlbEZvcm1hdCwgYXMgUXVhcnR6Q29yZSB3aWxsIGJlIGFibGUgdG8gdXNl
IHRoZSBwaXhlbHMgZGlyZWN0bHksCisgICAgICAgIC8vIHdpdGhvdXQgbmVlZGluZyBhbiBhZGl0
aW9uYWwgY29weSBvciByZW5kZXJpbmcgcGFzczpzCisgICAgICAgIFNldE51bWJlclZhbHVlKHBp
eGVsQnVmZmVyT3B0aW9ucywga0NWUGl4ZWxCdWZmZXJQaXhlbEZvcm1hdFR5cGVLZXksIGszMkJH
UkFQaXhlbEZvcm1hdCk7CisgICAgICAgICAgICAKKyAgICAgICAgLy8gYWxpZ25tZW50CisgICAg
ICAgIFNldE51bWJlclZhbHVlKHBpeGVsQnVmZmVyT3B0aW9ucywga0NWUGl4ZWxCdWZmZXJCeXRl
c1BlclJvd0FsaWdubWVudEtleSwgMTYpOworCisgICAgICAgIC8vIGNvbXBhdGFiaWxpdHkKKyAg
ICAgICAgU2V0TnVtYmVyVmFsdWUocGl4ZWxCdWZmZXJPcHRpb25zLCBrQ1ZQaXhlbEJ1ZmZlckNH
SW1hZ2VDb21wYXRpYmlsaXR5S2V5LCAxKTsKKyAgICAgCisgICAgICAgIC8vIFFUIFZpc3VhbCBD
b250ZXh0IGF0dHJpYnV0ZXMKKyAgICAgICAgdmlzdWFsQ29udGV4dE9wdGlvbnMgPSBDRkRpY3Rp
b25hcnlDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDAsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAma0NGVHlwZURpY3Rp
b25hcnlLZXlDYWxsQmFja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcyk7Cisg
ICAgIAorICAgICAgICAvLyBzZXQgdGhlIHBpeGVsIGJ1ZmZlciBhdHRyaWJ1dGVzIGZvciB0aGUg
dmlzdWFsIGNvbnRleHQKKyAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUodmlzdWFsQ29udGV4
dE9wdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtRVFZpc3VhbENvbnRleHRQ
aXhlbEJ1ZmZlckF0dHJpYnV0ZXNLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBp
eGVsQnVmZmVyT3B0aW9ucyk7CisKKyAgICAgICAgaWYgKHBpeGVsQnVmZmVyT3B0aW9ucykKKyAg
ICAgICAgICAgIENGUmVsZWFzZShwaXhlbEJ1ZmZlck9wdGlvbnMpOworICAgIAorICAgICAgICBv
cHRpb25zID0gdmlzdWFsQ29udGV4dE9wdGlvbnM7CisgICAgfQorCisgICAgcmV0dXJuIG9wdGlv
bnM7Cit9CisKK1FUTW92aWVWaXN1YWxDb250ZXh0OjpRVE1vdmllVmlzdWFsQ29udGV4dChRVE1v
dmllVmlzdWFsQ29udGV4dENsaWVudCogY2xpZW50LCBDRkRpY3Rpb25hcnlSZWYgb3B0aW9ucykg
CisgICAgOiBtX3ByaXZhdGUobmV3IFFUTW92aWVWaXN1YWxDb250ZXh0UHJpdih0aGlzLCBjbGll
bnQsIG9wdGlvbnMpKQoreworfQorCitRVE1vdmllVmlzdWFsQ29udGV4dDo6flFUTW92aWVWaXN1
YWxDb250ZXh0KCkKK3sKK30KKworYm9vbCBRVE1vdmllVmlzdWFsQ29udGV4dDo6aXNJbWFnZUF2
YWlsYWJsZUZvclRpbWUoY29uc3QgUVRDVlRpbWVTdGFtcCogdGltZVN0YW1wKQoreworICAgIHJl
dHVybiBtX3ByaXZhdGUtPmlzSW1hZ2VBdmFpbGFibGVGb3JUaW1lKHRpbWVTdGFtcCk7Cit9CisK
K1FUUGl4ZWxCdWZmZXIgUVRNb3ZpZVZpc3VhbENvbnRleHQ6OmltYWdlRm9yVGltZShjb25zdCBR
VENWVGltZVN0YW1wKiB0aW1lU3RhbXApCit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+aW1hZ2VG
b3JUaW1lKHRpbWVTdGFtcCk7Cit9CisKK3ZvaWQgUVRNb3ZpZVZpc3VhbENvbnRleHQ6OnRhc2so
KQoreworICAgIG1fcHJpdmF0ZS0+dGFzaygpOworfQorCitRVFZpc3VhbENvbnRleHRSZWYgUVRN
b3ZpZVZpc3VhbENvbnRleHQ6OmdldCgpIAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmdldCgp
OworfQorCit2b2lkIFFUTW92aWVWaXN1YWxDb250ZXh0OjpzZXRNb3ZpZShSZWZQdHI8UVRNb3Zp
ZT4gbW92aWUpCit7CisgICAgbV9wcml2YXRlLT5zZXRNb3ZpZShtb3ZpZSk7Cit9CisKK1JlZlB0
cjxRVE1vdmllPiBRVE1vdmllVmlzdWFsQ29udGV4dDo6bW92aWUoKSBjb25zdAoreworICAgIHJl
dHVybiBtX3ByaXZhdGUtPm1vdmllKCk7Cit9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9RVE1vdmllVmlzdWFsQ29udGV4dC5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vUVRNb3ZpZVZpc3VhbENvbnRleHQuaAkocmV2aXNpb24gMCkN
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVE1vdmllVmlzdWFsQ29udGV4dC5o
CShyZXZpc2lvbiAwKQ0KQEAgLTAsMCArMSw4MCBAQA0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgUVRNb3ZpZVZpc3VhbENvbnRleHRfaAorI2RlZmluZSBRVE1vdmllVmlz
dWFsQ29udGV4dF9oCisKKyNpZmRlZiBRVE1PVklFV0lOX0VYUE9SVFMKKyNkZWZpbmUgUVRNT1ZJ
RVdJTl9BUEkgX19kZWNsc3BlYyhkbGxleHBvcnQpCisjZWxzZQorI2RlZmluZSBRVE1PVklFV0lO
X0FQSSBfX2RlY2xzcGVjKGRsbGltcG9ydCkKKyNlbmRpZgorCisjaW5jbHVkZSAiUVRNb3ZpZS5o
IgorI2luY2x1ZGUgIlFUTW92aWVUYXNrLmgiCisjaW5jbHVkZSAiUVRQaXhlbEJ1ZmZlci5oIgor
I2luY2x1ZGUgPFdURi9Pd25QdHIuaD4KKyNpbmNsdWRlIDxXVEYvUmVmQ291bnRlZC5oPgorCit0
eXBlZGVmIHN0cnVjdCBPcGFxdWVRVFZpc3VhbENvbnRleHQqICAgUVRWaXN1YWxDb250ZXh0UmVm
OworCisvLyBRVENWVGltZVN0YW1wIGlzIGEgc3RydWN0IGNvbnRhaW5pbmcgb25seSBhIENWVGlt
ZVN0YW1wLiAgVGhpcyBpcyB0byAKKy8vIHdvcmsgYXJvdW5kIHRoZSBpbmFiaWxpdHkgb2YgQ1ZU
aW1lU3RhbXAgdG8gYmUgZm9yd2FyZCBkZWNsYXJlZCwgaW4gCisvLyBhZGRpdGlvbiB0byBpdCBi
ZWluZyBkZWNsYXJlZCBpbiBkaWZmZXJlbnQgaGVhZGVyIGZpbGVzIHdoZW4gYnVpbGRpbmcKKy8v
IHRoZSBRVE1vdmllV2luIGFuZCBXZWJDb3JlIHByb2plY3RzLgorc3RydWN0IFFUQ1ZUaW1lU3Rh
bXA7CisKK2NsYXNzIFFUTW92aWVWaXN1YWxDb250ZXh0Q2xpZW50IHsKK3B1YmxpYzoKKyAgICB2
aXJ0dWFsIHZvaWQgaW1hZ2VBdmFpbGFibGVGb3JUaW1lKGNvbnN0IFFUQ1ZUaW1lU3RhbXAqKSA9
IDA7Cit9OworCitjbGFzcyBRVE1PVklFV0lOX0FQSSBRVE1vdmllVmlzdWFsQ29udGV4dCA6IHB1
YmxpYyBSZWZDb3VudGVkPFFUTW92aWVWaXN1YWxDb250ZXh0PiB7CitwdWJsaWM6CisgICAgUVRN
b3ZpZVZpc3VhbENvbnRleHQoUVRNb3ZpZVZpc3VhbENvbnRleHRDbGllbnQqLCBDRkRpY3Rpb25h
cnlSZWYgb3B0aW9ucyA9IDApOworICAgIH5RVE1vdmllVmlzdWFsQ29udGV4dCgpOworCisgICAg
Ym9vbCBpc0ltYWdlQXZhaWxhYmxlRm9yVGltZShjb25zdCBRVENWVGltZVN0YW1wKik7CisgICAg
UVRQaXhlbEJ1ZmZlciBpbWFnZUZvclRpbWUoY29uc3QgUVRDVlRpbWVTdGFtcCopOworICAgIHZv
aWQgdGFzaygpOworCisgICAgUVRWaXN1YWxDb250ZXh0UmVmIGdldCgpOworCisgICAgZG91Ymxl
IGdldEN1cnJlbnRIb3N0VGltZSgpOworICAgIGRvdWJsZSBnZXRIb3N0Q2xvY2tGcmVxdWVuY3ko
KTsKKworICAgIHZvaWQgc2V0TW92aWUoUmVmUHRyPFFUTW92aWU+KTsKKyAgICBSZWZQdHI8UVRN
b3ZpZT4gbW92aWUoKSBjb25zdDsKKworICAgIHN0YXRpYyBDRkRpY3Rpb25hcnlSZWYgZ2V0Q0dJ
bWFnZU9wdGlvbnMoKTsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgc2V0dXBWaXN1YWxDb250ZXh0
KCk7CisKKyAgICBmcmllbmQgY2xhc3MgUVRNb3ZpZVZpc3VhbENvbnRleHRQcml2OworICAgIE93
blB0cjxRVE1vdmllVmlzdWFsQ29udGV4dFByaXY+IG1fcHJpdmF0ZTsKK307CisKKyNlbmRpZgpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRQaXhlbEJ1ZmZlci5jcHANCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0NCi0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVFBpeGVsQnVmZmVy
LmNwcAkocmV2aXNpb24gMCkNCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVFBp
eGVsQnVmZmVyLmNwcAkocmV2aXNpb24gMCkNCkBAIC0wLDAgKzEsMTk4IEBADQorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSwgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlFUUGl4
ZWxCdWZmZXIuaCIKKworI2luY2x1ZGUgPENGU3RyaW5nLmg+CisjaW5jbHVkZSA8Q0dDb2xvclNw
YWNlLmg+CisjaW5jbHVkZSA8Q0dJbWFnZS5oPgorI2luY2x1ZGUgPENWUGl4ZWxCdWZmZXIuaD4K
KworUVRQaXhlbEJ1ZmZlcjo6UVRQaXhlbEJ1ZmZlcigpIDogbV9waXhlbEJ1ZmZlcigwKSB7fQor
CitRVFBpeGVsQnVmZmVyOjpRVFBpeGVsQnVmZmVyKGNvbnN0IFFUUGl4ZWxCdWZmZXImIHApIDog
bV9waXhlbEJ1ZmZlcihwLm1fcGl4ZWxCdWZmZXIpIAoreworICAgIENWUGl4ZWxCdWZmZXJSZXRh
aW4obV9waXhlbEJ1ZmZlcik7Cit9CisKK1FUUGl4ZWxCdWZmZXI6OlFUUGl4ZWxCdWZmZXIoQ1ZQ
aXhlbEJ1ZmZlclJlZiByZWYpIDogbV9waXhlbEJ1ZmZlcihyZWYpCit7CisgICAgQ1ZQaXhlbEJ1
ZmZlclJldGFpbihtX3BpeGVsQnVmZmVyKTsKK30KKworUVRQaXhlbEJ1ZmZlcjo6flFUUGl4ZWxC
dWZmZXIoKSAKK3sKKyAgICBjbGVhcigpOworfQorCitRVFBpeGVsQnVmZmVyJiBRVFBpeGVsQnVm
ZmVyOjpvcGVyYXRvcj0oY29uc3QgUVRQaXhlbEJ1ZmZlciYgcCkgCit7CisgICAgc2V0KHAubV9w
aXhlbEJ1ZmZlcik7CisgICAgcmV0dXJuICp0aGlzOworfQorCit2b2lkIFFUUGl4ZWxCdWZmZXI6
OnNldChDVlBpeGVsQnVmZmVyUmVmIHJlZikKK3sKKyAgICBDVlBpeGVsQnVmZmVyUmV0YWluKHJl
Zik7CisgICAgQ1ZQaXhlbEJ1ZmZlclJlbGVhc2UobV9waXhlbEJ1ZmZlcik7CisgICAgbV9waXhl
bEJ1ZmZlciA9IHJlZjsKK30KKworQ1ZQaXhlbEJ1ZmZlclJlZiBRVFBpeGVsQnVmZmVyOjpnZXQo
KQoreworICAgIHJldHVybiBtX3BpeGVsQnVmZmVyOworfQorCit2b2lkIFFUUGl4ZWxCdWZmZXI6
OmNsZWFyKCkKK3sKKyAgICBDVlBpeGVsQnVmZmVyUmVsZWFzZShtX3BpeGVsQnVmZmVyKTsKKyAg
ICBtX3BpeGVsQnVmZmVyID0gMDsKK30KKworQ1ZSZXR1cm4gUVRQaXhlbEJ1ZmZlcjo6bG9ja0Jh
c2VBZGRyZXNzKCkKK3sKKyAgICByZXR1cm4gQ1ZQaXhlbEJ1ZmZlckxvY2tCYXNlQWRkcmVzcyht
X3BpeGVsQnVmZmVyLCAwKTsKK30KKworQ1ZSZXR1cm4gUVRQaXhlbEJ1ZmZlcjo6dW5sb2NrQmFz
ZUFkZHJlc3MoKQoreworICAgIHJldHVybiBDVlBpeGVsQnVmZmVyVW5sb2NrQmFzZUFkZHJlc3Mo
bV9waXhlbEJ1ZmZlciwgMCk7Cit9CisKK3NpemVfdCBRVFBpeGVsQnVmZmVyOjp3aWR0aCgpCit7
CisgICAgcmV0dXJuIENWUGl4ZWxCdWZmZXJHZXRXaWR0aChtX3BpeGVsQnVmZmVyKTsKK30KKwor
c2l6ZV90IFFUUGl4ZWxCdWZmZXI6OmhlaWdodCgpCit7CisgICAgcmV0dXJuIENWUGl4ZWxCdWZm
ZXJHZXRIZWlnaHQobV9waXhlbEJ1ZmZlcik7Cit9CisKK3Vuc2lnbmVkIGxvbmcgUVRQaXhlbEJ1
ZmZlcjo6cGl4ZWxGb3JtYXRUeXBlKCkKK3sKKyAgICBPU1R5cGUgcGl4ZWxGb3JtYXRUeXBlID0g
Q1ZQaXhlbEJ1ZmZlckdldFBpeGVsRm9ybWF0VHlwZShtX3BpeGVsQnVmZmVyKTsKKyAgICByZXR1
cm4gcGl4ZWxGb3JtYXRUeXBlOworfQorCit2b2lkKiBRVFBpeGVsQnVmZmVyOjpiYXNlQWRkcmVz
cygpCit7CisgICAgcmV0dXJuIENWUGl4ZWxCdWZmZXJHZXRCYXNlQWRkcmVzcyhtX3BpeGVsQnVm
ZmVyKTsKK30KKworc2l6ZV90IFFUUGl4ZWxCdWZmZXI6OmJ5dGVzUGVyUm93KCkKK3sKKyAgICBy
ZXR1cm4gQ1ZQaXhlbEJ1ZmZlckdldEJ5dGVzUGVyUm93KG1fcGl4ZWxCdWZmZXIpOworfQorCitz
aXplX3QgUVRQaXhlbEJ1ZmZlcjo6ZGF0YVNpemUoKQoreworICAgIHJldHVybiBDVlBpeGVsQnVm
ZmVyR2V0RGF0YVNpemUobV9waXhlbEJ1ZmZlcik7Cit9CisKKworYm9vbCBRVFBpeGVsQnVmZmVy
Ojppc1BsYW5hcigpCit7CisgICAgcmV0dXJuIENWUGl4ZWxCdWZmZXJJc1BsYW5hcihtX3BpeGVs
QnVmZmVyKTsKK30KKworc2l6ZV90IFFUUGl4ZWxCdWZmZXI6OnBsYW5lQ291bnQoKQoreworICAg
IHJldHVybiBDVlBpeGVsQnVmZmVyR2V0UGxhbmVDb3VudChtX3BpeGVsQnVmZmVyKTsKK30KKwor
c2l6ZV90IFFUUGl4ZWxCdWZmZXI6OndpZHRoT2ZQbGFuZShzaXplX3QgcGxhbmUpCit7CisgICAg
cmV0dXJuIENWUGl4ZWxCdWZmZXJHZXRXaWR0aE9mUGxhbmUobV9waXhlbEJ1ZmZlciwgcGxhbmUp
OworfQorCitzaXplX3QgUVRQaXhlbEJ1ZmZlcjo6aGVpZ2h0T2ZQbGFuZShzaXplX3QgcGxhbmUp
Cit7CisgICAgcmV0dXJuIENWUGl4ZWxCdWZmZXJHZXRIZWlnaHRPZlBsYW5lKG1fcGl4ZWxCdWZm
ZXIsIHBsYW5lKTsKK30KKwordm9pZCogUVRQaXhlbEJ1ZmZlcjo6YmFzZUFkZHJlc3NPZlBsYW5l
KHNpemVfdCBwbGFuZSkKK3sKKyAgICByZXR1cm4gQ1ZQaXhlbEJ1ZmZlckdldEJhc2VBZGRyZXNz
T2ZQbGFuZShtX3BpeGVsQnVmZmVyLCBwbGFuZSk7Cit9CisKK3NpemVfdCBRVFBpeGVsQnVmZmVy
OjpieXRlc1BlclJvd09mUGxhbmUoc2l6ZV90IHBsYW5lKQoreworICAgIHJldHVybiBDVlBpeGVs
QnVmZmVyR2V0Qnl0ZXNQZXJSb3dPZlBsYW5lKG1fcGl4ZWxCdWZmZXIsIHBsYW5lKTsKK30KKwor
dm9pZCBRVFBpeGVsQnVmZmVyOjpnZXRFeHRlbmRlZFBpeGVscyhzaXplX3QqIGxlZnQsIHNpemVf
dCogcmlnaHQsIHNpemVfdCogdG9wLCBzaXplX3QqIGJvdHRvbSkKK3sKKyAgICByZXR1cm4gQ1ZQ
aXhlbEJ1ZmZlckdldEV4dGVuZGVkUGl4ZWxzKG1fcGl4ZWxCdWZmZXIsIGxlZnQsIHJpZ2h0LCB0
b3AsIGJvdHRvbSk7Cit9CisKK0NGRGljdGlvbmFyeVJlZiBRVFBpeGVsQnVmZmVyOjphdHRhY2ht
ZW50cygpCit7CisgICAgQ0ZEaWN0aW9uYXJ5UmVmIHByb3BvZ2F0ZWQgPSBDVkJ1ZmZlckdldEF0
dGFjaG1lbnRzKG1fcGl4ZWxCdWZmZXIsIGtDVkF0dGFjaG1lbnRNb2RlX1Nob3VsZFByb3BhZ2F0
ZSk7CisgICAgcmV0dXJuIHByb3BvZ2F0ZWQ7Cit9CisKK3ZvaWQgUVRQaXhlbEJ1ZmZlcjo6cmV0
YWluQ2FsbGJhY2sodm9pZCogcmVmY29uKQoreworICAgIENWUGl4ZWxCdWZmZXJSZXRhaW4oc3Rh
dGljX2Nhc3Q8Q1ZQaXhlbEJ1ZmZlclJlZj4ocmVmY29uKSk7Cit9CisKK3ZvaWQgUVRQaXhlbEJ1
ZmZlcjo6cmVsZWFzZUNhbGxiYWNrKHZvaWQqIHJlZmNvbikKK3sKKyAgICBDVlBpeGVsQnVmZmVy
UmVsZWFzZShzdGF0aWNfY2FzdDxDVlBpeGVsQnVmZmVyUmVmPihyZWZjb24pKTsKK30KKwordm9p
ZCBRVFBpeGVsQnVmZmVyOjppbWFnZVF1ZXVlUmVsZWFzZUNhbGxiYWNrKHVuc2lnbmVkIGludCB0
eXBlLCB1aW50NjRfdCBpZCwgdm9pZCogcmVmY29uKQoreworICAgIENWUGl4ZWxCdWZmZXJSZWxl
YXNlKHN0YXRpY19jYXN0PENWUGl4ZWxCdWZmZXJSZWY+KHJlZmNvbikpOworfQorCit2b2lkIFFU
UGl4ZWxCdWZmZXI6OmRhdGFQcm92aWRlclJlbGVhc2VCeXRlUG9pbnRlckNhbGxiYWNrKHZvaWQq
IHJlZmNvbiwgY29uc3Qgdm9pZCogcG9pbnRlcikKK3sKKyAgICBDVlBpeGVsQnVmZmVyVW5sb2Nr
QmFzZUFkZHJlc3Moc3RhdGljX2Nhc3Q8Q1ZQaXhlbEJ1ZmZlclJlZj4ocmVmY29uKSwgMCk7Cit9
CisKK2NvbnN0IHZvaWQqIFFUUGl4ZWxCdWZmZXI6OmRhdGFQcm92aWRlckdldEJ5dGVQb2ludGVy
Q2FsbGJhY2sodm9pZCogcmVmY29uKQoreworICAgIENWUGl4ZWxCdWZmZXJMb2NrQmFzZUFkZHJl
c3Moc3RhdGljX2Nhc3Q8Q1ZQaXhlbEJ1ZmZlclJlZj4ocmVmY29uKSwgMCk7CisgICAgcmV0dXJu
IENWUGl4ZWxCdWZmZXJHZXRCYXNlQWRkcmVzcyhzdGF0aWNfY2FzdDxDVlBpeGVsQnVmZmVyUmVm
PihyZWZjb24pKTsKK30KKworc2l6ZV90IFFUUGl4ZWxCdWZmZXI6OmRhdGFQcm92aWRlckdldEJ5
dGVzQXRQb3NpdGlvbkNhbGxiYWNrKHZvaWQqIHJlZmNvbiwgdm9pZCogYnVmZmVyLCBzaXplX3Qg
cG9zaXRpb24sIHNpemVfdCBjb3VudCkKK3sKKyAgICBjaGFyKiBkYXRhID0gKGNoYXIqKUNWUGl4
ZWxCdWZmZXJHZXRCYXNlQWRkcmVzcyhzdGF0aWNfY2FzdDxDVlBpeGVsQnVmZmVyUmVmPihyZWZj
b24pKTsKKyAgICBzaXplX3Qgc2l6ZSA9IENWUGl4ZWxCdWZmZXJHZXREYXRhU2l6ZShzdGF0aWNf
Y2FzdDxDVlBpeGVsQnVmZmVyUmVmPihyZWZjb24pKTsKKyAgICBpZiAoc2l6ZSAtIHBvc2l0aW9u
IDwgY291bnQpCisgICAgICAgIGNvdW50ID0gc2l6ZSAtIHBvc2l0aW9uOworCisgICAgbWVtY3B5
KGJ1ZmZlciwgZGF0YStwb3NpdGlvbiwgY291bnQpOworICAgIHJldHVybiBjb3VudDsKK30KKwor
dm9pZCBRVFBpeGVsQnVmZmVyOjpkYXRhUHJvdmlkZXJSZWxlYXNlSW5mb0NhbGxiYWNrKHZvaWQq
IHJlZmNvbikKK3sKKyAgICBDVlBpeGVsQnVmZmVyUmVsZWFzZShzdGF0aWNfY2FzdDxDVlBpeGVs
QnVmZmVyUmVmPihyZWZjb24pKTsKK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL1FUUGl4ZWxCdWZmZXIuaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL1FUUGl4ZWxCdWZmZXIuaAkocmV2aXNpb24gMCkNCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9RVFBpeGVsQnVmZmVyLmgJKHJldmlzaW9uIDApDQpAQCAtMCwwICsx
LDk1IEBADQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBs
ZSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBRVFBpeGVsQnVm
ZmVyX2gKKyNkZWZpbmUgUVRQaXhlbEJ1ZmZlcl9oCisKKyNpZmRlZiBRVE1PVklFV0lOX0VYUE9S
VFMKKyNkZWZpbmUgUVRNT1ZJRVdJTl9BUEkgX19kZWNsc3BlYyhkbGxleHBvcnQpCisjZWxzZQor
I2RlZmluZSBRVE1PVklFV0lOX0FQSSBfX2RlY2xzcGVjKGRsbGltcG9ydCkKKyNlbmRpZgorCisj
aW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKwordHlwZWRl
ZiBzdHJ1Y3QgX19DVkJ1ZmZlciAqQ1ZCdWZmZXJSZWY7Cit0eXBlZGVmIENWQnVmZmVyUmVmIENW
UGl4ZWxCdWZmZXJSZWY7Cit0eXBlZGVmIHN0cnVjdCBDR0ltYWdlKiBDR0ltYWdlUmVmOwordHlw
ZWRlZiBpbnQzMl90IENWUmV0dXJuOwordHlwZWRlZiBjb25zdCBzdHJ1Y3QgX19DRkRpY3Rpb25h
cnkgKiBDRkRpY3Rpb25hcnlSZWY7CisKKy8vIFFUUGl4ZWxCdWZmZXIgd3JhcHMgUXVpY2tUaW1l
J3MgaW1wbGVtZW50YXRpb24gb2YgQ1ZQaXhlbEJ1ZmZlciwgc28gaXRzIGZ1bmN0aW9ucyBhcmUK
Ky8vIHNhZmUgdG8gY2FsbCB3aXRoaW4gV2ViS2l0LgorY2xhc3MgUVRNT1ZJRVdJTl9BUEkgUVRQ
aXhlbEJ1ZmZlciA6IFJlZkNvdW50ZWQ8UVRQaXhlbEJ1ZmZlcj4geworcHVibGljOgorICAgIFFU
UGl4ZWxCdWZmZXIoKTsKKyAgICBRVFBpeGVsQnVmZmVyKGNvbnN0IFFUUGl4ZWxCdWZmZXImKTsK
KyAgICBRVFBpeGVsQnVmZmVyKENWUGl4ZWxCdWZmZXJSZWYpOworICAgIFFUUGl4ZWxCdWZmZXIm
IG9wZXJhdG9yPShjb25zdCBRVFBpeGVsQnVmZmVyJik7CisgICAgflFUUGl4ZWxCdWZmZXIoKTsK
KworICAgIHZvaWQgc2V0KENWUGl4ZWxCdWZmZXJSZWYpOworICAgIENWUGl4ZWxCdWZmZXJSZWYg
Z2V0KCk7CisgICAgdm9pZCBjbGVhcigpOworCisgICAgQ1ZSZXR1cm4gbG9ja0Jhc2VBZGRyZXNz
KCk7CisgICAgQ1ZSZXR1cm4gdW5sb2NrQmFzZUFkZHJlc3MoKTsKKyAgICBzaXplX3Qgd2lkdGgo
KTsKKyAgICBzaXplX3QgaGVpZ2h0KCk7CisKKyAgICB1bnNpZ25lZCBsb25nIHBpeGVsRm9ybWF0
VHlwZSgpOworICAgIHZvaWQqIGJhc2VBZGRyZXNzKCk7CisgICAgc2l6ZV90IGJ5dGVzUGVyUm93
KCk7CisgICAgc2l6ZV90IGRhdGFTaXplKCk7CisKKyAgICBib29sIGlzUGxhbmFyKCk7CisgICAg
c2l6ZV90IHBsYW5lQ291bnQoKTsKKyAgICBzaXplX3Qgd2lkdGhPZlBsYW5lKHNpemVfdCk7Cisg
ICAgc2l6ZV90IGhlaWdodE9mUGxhbmUoc2l6ZV90KTsKKyAgICB2b2lkKiBiYXNlQWRkcmVzc09m
UGxhbmUoc2l6ZV90KTsKKyAgICBzaXplX3QgYnl0ZXNQZXJSb3dPZlBsYW5lKHNpemVfdCk7CisK
KyAgICB2b2lkIGdldEV4dGVuZGVkUGl4ZWxzKHNpemVfdCogbGVmdCwgc2l6ZV90KiByaWdodCwg
c2l6ZV90KiB0b3AsIHNpemVfdCogYm90dG9tKTsKKyAgICBDRkRpY3Rpb25hcnlSZWYgYXR0YWNo
bWVudHMoKTsKKworICAgIC8vIEdlbmVyaWMgQ0ZSZXRhaW4vQ0ZSZWxlYXNlIGNhbGxiYWNrcwor
ICAgIHN0YXRpYyB2b2lkIHJlbGVhc2VDYWxsYmFjayh2b2lkKiByZWZjb24pOworICAgIHN0YXRp
YyB2b2lkIHJldGFpbkNhbGxiYWNrKHZvaWQqIHJlZmNvbik7CisKKyAgICAvLyBDQUltYWdlUXVl
dWUgY2FsbGJhY2tzCisgICAgc3RhdGljIHZvaWQgaW1hZ2VRdWV1ZVJlbGVhc2VDYWxsYmFjayh1
bnNpZ25lZCBpbnQgdHlwZSwgdWludDY0X3QgaWQsIHZvaWQqIHJlZmNvbik7CisKKyAgICAvLyBD
R0RhdGFQcm92aWRlciBjYWxsYmFja3MKKyAgICBzdGF0aWMgdm9pZCBkYXRhUHJvdmlkZXJSZWxl
YXNlQnl0ZVBvaW50ZXJDYWxsYmFjayh2b2lkKiByZWZjb24sIGNvbnN0IHZvaWQqIHBvaW50ZXIp
OworICAgIHN0YXRpYyBjb25zdCB2b2lkKiBkYXRhUHJvdmlkZXJHZXRCeXRlUG9pbnRlckNhbGxi
YWNrKHZvaWQqIHJlZmNvbik7CisgICAgc3RhdGljIHNpemVfdCBkYXRhUHJvdmlkZXJHZXRCeXRl
c0F0UG9zaXRpb25DYWxsYmFjayh2b2lkKiByZWZjb24sIHZvaWQqIGJ1ZmZlciwgc2l6ZV90IHBv
c2l0aW9uLCBzaXplX3QgY291bnQpOworICAgIHN0YXRpYyB2b2lkIGRhdGFQcm92aWRlclJlbGVh
c2VJbmZvQ2FsbGJhY2sodm9pZCogcmVmY29uKTsKKworcHJpdmF0ZToKKyAgICBDVlBpeGVsQnVm
ZmVyUmVmIG1fcGl4ZWxCdWZmZXI7Cit9OworCisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54514</attachid>
            <date>2010-04-27 20:48:33 -0700</date>
            <delta_ts>2010-04-28 10:53:41 -0700</delta_ts>
            <desc>Changes to MediaPlayerPrivateQuickTimeWin</desc>
            <filename>7569713-MediaPlayerPrivateQuickTimeWin.patch</filename>
            <type>text/plain</type>
            <size>8205</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1
aWNrVGltZVdpbi5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9NZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVXaW4uY3BwCShyZXZpc2lvbiA1ODE4NykN
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVRdWlj
a1RpbWVXaW4uY3BwCSh3b3JraW5nIGNvcHkpDQpAQCAtMzQsNyArMzQsOCBAQA0KICNpbmNsdWRl
ICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJL
VVJMLmgiCi0jaW5jbHVkZSAiUVRNb3ZpZVdpbi5oIgorI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJp
dmF0ZVRhc2tUaW1lci5oIgorI2luY2x1ZGUgIlFUTW92aWVUYXNrLmgiCiAjaW5jbHVkZSAiU2Ny
b2xsVmlldy5oIgogI2luY2x1ZGUgIlNvZnRMaW5raW5nLmgiCiAjaW5jbHVkZSAiU3RyaW5nQnVp
bGRlci5oIgpAQCAtNTMsMTAgKzU0LDggQEANCiAjZW5kaWYKIAogI2lmIERSQVdfRlJBTUVfUkFU
RQotI2luY2x1ZGUgIkZvbnQuaCIKLSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJG
cmFtZS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1
ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAi
V2luZG93cy5oIgpAQCAtMTA0LDYgKzEwMyw3IEBADQogTWVkaWFQbGF5ZXJQcml2YXRlOjp+TWVk
aWFQbGF5ZXJQcml2YXRlKCkKIHsKICAgICB0ZWFyRG93blZpZGVvUmVuZGVyaW5nKCk7CisgICAg
bV9xdE1vdmllV2luLT5zZXRNb3ZpZSgwKTsKIH0KIAogYm9vbCBNZWRpYVBsYXllclByaXZhdGU6
OnN1cHBvcnRzRnVsbHNjcmVlbigpIGNvbnN0CkBAIC0xMjUsNTAgKzEyNSw2IEBADQogfQogI2Vu
ZGlmCiAKLWNsYXNzIFRhc2tUaW1lciA6IFRpbWVyQmFzZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IHZvaWQgaW5pdGlhbGl6ZSgpOwotICAgIAotcHJpdmF0ZToKLSAgICBzdGF0aWMgdm9pZCBzZXRU
YXNrVGltZXJEZWxheShkb3VibGUpOwotICAgIHN0YXRpYyB2b2lkIHN0b3BUYXNrVGltZXIoKTsK
LQotICAgIHZvaWQgZmlyZWQoKTsKLQotICAgIHN0YXRpYyBUYXNrVGltZXIqIHNfdGltZXI7Ci19
OwotCi1UYXNrVGltZXIqIFRhc2tUaW1lcjo6c190aW1lciA9IDA7Ci0KLXZvaWQgVGFza1RpbWVy
Ojppbml0aWFsaXplKCkKLXsKLSAgICBpZiAoc190aW1lcikKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgc190aW1lciA9IG5ldyBUYXNrVGltZXI7Ci0KLSAgICBRVE1vdmllV2luOjpzZXRUYXNrVGlt
ZXJGdW5jcyhzZXRUYXNrVGltZXJEZWxheSwgc3RvcFRhc2tUaW1lcik7Ci19Ci0KLXZvaWQgVGFz
a1RpbWVyOjpzZXRUYXNrVGltZXJEZWxheShkb3VibGUgZGVsYXlJblNlY29uZHMpCi17Ci0gICAg
QVNTRVJUKHNfdGltZXIpOwotCi0gICAgc190aW1lci0+c3RhcnRPbmVTaG90KGRlbGF5SW5TZWNv
bmRzKTsKLX0KLQotdm9pZCBUYXNrVGltZXI6OnN0b3BUYXNrVGltZXIoKQotewotICAgIEFTU0VS
VChzX3RpbWVyKTsKLQotICAgIHNfdGltZXItPnN0b3AoKTsKLX0KLQotdm9pZCBUYXNrVGltZXI6
OmZpcmVkKCkKLXsKLSAgICBRVE1vdmllV2luOjp0YXNrVGltZXJGaXJlZCgpOwotfQotCiBTdHJp
bmcgTWVkaWFQbGF5ZXJQcml2YXRlOjpyZmMyNjE2RGF0ZVN0cmluZ0Zyb21UaW1lKENGQWJzb2x1
dGVUaW1lIHRpbWUpCiB7CiAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGRheVN0cmluZ3Nb
XSA9IHsgIk1vbiIsICJUdWUiLCAiV2VkIiwgIlRodSIsICJGcmkiLCAiU2F0IiwgIlN1biIgfTsK
QEAgLTI2Miw3ICsyMTgsNyBAQA0KIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmxvYWQoY29u
c3QgU3RyaW5nJiB1cmwpCiB7Ci0gICAgaWYgKCFRVE1vdmllV2luOjppbml0aWFsaXplUXVpY2tU
aW1lKCkpIHsKKyAgICBpZiAoIVFUTW92aWU6OmluaXRpYWxpemVRdWlja1RpbWUoKSkgewogICAg
ICAgICAvLyBGSVhNRTogaXMgdGhpcyB0aGUgcmlnaHQgZXJyb3IgdG8gcmV0dXJuPwogICAgICAg
ICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpEZWNvZGVFcnJvcjsgCiAgICAgICAgIG1f
cGxheWVyLT5uZXR3b3JrU3RhdGVDaGFuZ2VkKCk7CkBAIC0yNzAsNyArMjI2LDcgQEANCiAgICAg
fQogCiAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgdGFzayB0aW1lci4KLSAgICBUYXNrVGltZXI6Omlu
aXRpYWxpemUoKTsKKyAgICBNZWRpYVBsYXllclByaXZhdGVUYXNrVGltZXI6OmluaXRpYWxpemUo
KTsKIAogICAgIGlmIChtX25ldHdvcmtTdGF0ZSAhPSBNZWRpYVBsYXllcjo6TG9hZGluZykgewog
ICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpMb2FkaW5nOwpAQCAtMjg0LDEw
ICsyNDAsMTMgQEANCiAKICAgICBzZXRVcENvb2tpZXNGb3JRdWlja1RpbWUodXJsKTsKIAotICAg
IG1fcXRNb3ZpZS5zZXQobmV3IFFUTW92aWVXaW4odGhpcykpOworICAgIG1fcXRNb3ZpZSA9IGFk
b3B0UmVmKG5ldyBRVE1vdmllKHRoaXMpKTsKICAgICBtX3F0TW92aWUtPmxvYWQodXJsLmNoYXJh
Y3RlcnMoKSwgdXJsLmxlbmd0aCgpLCBtX3BsYXllci0+cHJlc2VydmVzUGl0Y2goKSk7CiAgICAg
bV9xdE1vdmllLT5zZXRWb2x1bWUobV9wbGF5ZXItPnZvbHVtZSgpKTsKLSAgICBtX3F0TW92aWUt
PnNldFZpc2libGUobV9wbGF5ZXItPnZpc2libGUoKSk7CisKKyAgICBtX3F0TW92aWVXaW4gPSBh
ZG9wdFJlZihuZXcgUVRNb3ZpZVdpbih0aGlzKSk7CisgICAgbV9xdE1vdmllV2luLT5zZXRNb3Zp
ZShtX3F0TW92aWUuZ2V0KCkpOworICAgIG1fcXRNb3ZpZVdpbi0+c2V0VmlzaWJsZShtX3BsYXll
ci0+dmlzaWJsZSgpKTsKIH0KIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnBsYXkoKQpAQCAt
Mzg4LDcgKzM0Nyw3IEBADQogewogICAgIGlmICghbV9xdE1vdmllKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICByZXR1cm4gbV9xdE1vdmllLT5yYXRlKCkgPT0gMC4wZjsKKyAgICByZXR1cm4g
KCFtX3F0TW92aWUtPnJhdGUoKSk7CiB9CiAKIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZWVr
aW5nKCkgY29uc3QKQEAgLTYxMiw3ICs1NzEsNyBAQA0KICAgICBpZiAobV9oYXNVbnN1cHBvcnRl
ZFRyYWNrcyB8fCAhbV9xdE1vdmllIHx8IG1fc2l6ZSA9PSBzaXplKQogICAgICAgICByZXR1cm47
CiAgICAgbV9zaXplID0gc2l6ZTsKLSAgICBtX3F0TW92aWUtPnNldFNpemUoc2l6ZS53aWR0aCgp
LCBzaXplLmhlaWdodCgpKTsKKyAgICBtX3F0TW92aWVXaW4tPnNldFNpemUoc2l6ZS53aWR0aCgp
LCBzaXplLmhlaWdodCgpKTsKIH0KIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNldFZpc2li
bGUoYm9vbCB2aXNpYmxlKQpAQCAtNjIwLDcgKzU3OSw3IEBADQogICAgIGlmIChtX2hhc1Vuc3Vw
cG9ydGVkVHJhY2tzIHx8ICFtX3F0TW92aWUgfHwgbV92aXNpYmxlID09IHZpc2libGUpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIG1fcXRNb3ZpZS0+c2V0VmlzaWJsZSh2aXNpYmxlKTsKKyAgICBt
X3F0TW92aWVXaW4tPnNldFZpc2libGUodmlzaWJsZSk7CiAgICAgbV92aXNpYmxlID0gdmlzaWJs
ZTsKICAgICBpZiAobV92aXNpYmxlKSB7CiAgICAgICAgIGlmIChpc1JlYWR5Rm9yUmVuZGVyaW5n
KCkpCkBAIC02NTksNyArNjE4LDcgQEANCiAgICAgICAgIFNldFdvcmxkVHJhbnNmb3JtKGhkYywg
Jnhmb3JtKTsKICAgICB9CiAKLSAgICBtX3F0TW92aWUtPnBhaW50KGhkYywgci54KCksIHIueSgp
KTsKKyAgICBtX3F0TW92aWVXaW4tPnBhaW50KGhkYywgci54KCksIHIueSgpKTsKICAgICBpZiAo
dXNpbmdUZW1wQml0bWFwKQogICAgICAgICBwLT5kcmF3V2luZG93c0JpdG1hcChiaXRtYXAuZ2V0
KCksIHIudG9wTGVmdCgpKTsKICAgICBlbHNlCkBAIC03MTksMTEgKzY3OCwxMSBAQA0KICAgICBz
dGF0aWMgYm9vbCB0eXBlTGlzdEluaXRpYWxpemVkID0gZmFsc2U7CiAKICAgICBpZiAoIXR5cGVM
aXN0SW5pdGlhbGl6ZWQpIHsKLSAgICAgICAgdW5zaWduZWQgY291bnQgPSBRVE1vdmllV2luOjpj
b3VudFN1cHBvcnRlZFR5cGVzKCk7CisgICAgICAgIHVuc2lnbmVkIGNvdW50ID0gUVRNb3ZpZTo6
Y291bnRTdXBwb3J0ZWRUeXBlcygpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwg
Y291bnQ7IG4rKykgewogICAgICAgICAgICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcjsKICAgICAg
ICAgICAgIHVuc2lnbmVkIGxlbjsKLSAgICAgICAgICAgIFFUTW92aWVXaW46OmdldFN1cHBvcnRl
ZFR5cGUobiwgY2hhcmFjdGVyLCBsZW4pOworICAgICAgICAgICAgUVRNb3ZpZTo6Z2V0U3VwcG9y
dGVkVHlwZShuLCBjaGFyYWN0ZXIsIGxlbik7CiAgICAgICAgICAgICBpZiAobGVuKQogICAgICAg
ICAgICAgICAgIHR5cGVDYWNoZS5hZGQoU3RyaW5nKGNoYXJhY3RlciwgbGVuKSk7CiAgICAgICAg
IH0KQEAgLTc0MSw3ICs3MDAsNyBAQA0KIAogYm9vbCBNZWRpYVBsYXllclByaXZhdGU6OmlzQXZh
aWxhYmxlKCkKIHsKLSAgICByZXR1cm4gUVRNb3ZpZVdpbjo6aW5pdGlhbGl6ZVF1aWNrVGltZSgp
OworICAgIHJldHVybiBRVE1vdmllOjppbml0aWFsaXplUXVpY2tUaW1lKCk7CiB9CiAKIE1lZGlh
UGxheWVyOjpTdXBwb3J0c1R5cGUgTWVkaWFQbGF5ZXJQcml2YXRlOjpzdXBwb3J0c1R5cGUoY29u
c3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGNvZGVjcykKQEAgLTc1MSw3ICs3MTAsNyBA
QA0KICAgICByZXR1cm4gbWltZVR5cGVDYWNoZSgpLmNvbnRhaW5zKHR5cGUpID8gKGNvZGVjcy5p
c0VtcHR5KCkgPyBNZWRpYVBsYXllcjo6TWF5QmVTdXBwb3J0ZWQgOiBNZWRpYVBsYXllcjo6SXNT
dXBwb3J0ZWQpIDogTWVkaWFQbGF5ZXI6OklzTm90U3VwcG9ydGVkOwogfQogCi12b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZTo6bW92aWVFbmRlZChRVE1vdmllV2luKiBtb3ZpZSkKK3ZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlOjptb3ZpZUVuZGVkKFFUTW92aWUqIG1vdmllKQogewogICAgIGlmIChtX2hh
c1Vuc3VwcG9ydGVkVHJhY2tzKQogICAgICAgICByZXR1cm47CkBAIC03NjAsNyArNzE5LDcgQEAN
CiAgICAgZGlkRW5kKCk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjptb3ZpZUxvYWRT
dGF0ZUNoYW5nZWQoUVRNb3ZpZVdpbiogbW92aWUpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6
bW92aWVMb2FkU3RhdGVDaGFuZ2VkKFFUTW92aWUqIG1vdmllKQogewogICAgIGlmIChtX2hhc1Vu
c3VwcG9ydGVkVHJhY2tzKQogICAgICAgICByZXR1cm47CkBAIC03NjksNyArNzI4LDcgQEANCiAg
ICAgdXBkYXRlU3RhdGVzKCk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjptb3ZpZVRp
bWVDaGFuZ2VkKFFUTW92aWVXaW4qIG1vdmllKQordm9pZCBNZWRpYVBsYXllclByaXZhdGU6Om1v
dmllVGltZUNoYW5nZWQoUVRNb3ZpZSogbW92aWUpCiB7CiAgICAgaWYgKG1faGFzVW5zdXBwb3J0
ZWRUcmFja3MpCiAgICAgICAgIHJldHVybjsKQEAgLTc4NCw3ICs3NDMsNyBAQA0KICAgICBpZiAo
bV9oYXNVbnN1cHBvcnRlZFRyYWNrcykKICAgICAgICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKG1f
cXRNb3ZpZS5nZXQoKSA9PSBtb3ZpZSk7CisgICAgQVNTRVJUKG1fcXRNb3ZpZVdpbi5nZXQoKSA9
PSBtb3ZpZSk7CiAjaWYgRFJBV19GUkFNRV9SQVRFCiAgICAgaWYgKG1fc3RhcnRlZFBsYXlpbmcp
IHsKICAgICAgICAgbV9mcmFtZUNvdW50V2hpbGVQbGF5aW5nKys7CkBAIC05MDAsOSArODU5LDkg
QEANCiAgICAgdW5zaWduZWQgd2lkdGg7CiAgICAgdW5zaWduZWQgaGVpZ2h0OwogCi0gICAgbV9x
dE1vdmllLT5nZXRDdXJyZW50RnJhbWVJbmZvKGJ1ZmZlciwgYml0c1BlclBpeGVsLCByb3dCeXRl
cywgd2lkdGgsIGhlaWdodCk7CisgICAgbV9xdE1vdmllV2luLT5nZXRDdXJyZW50RnJhbWVJbmZv
KGJ1ZmZlciwgYml0c1BlclBpeGVsLCByb3dCeXRlcywgd2lkdGgsIGhlaWdodCk7CiAgICAgaWYg
KCFidWZmZXIpCi0gICAgICAgIHJldHVybiA7CisgICAgICAgIHJldHVybjsKIAogICAgIFJldGFp
blB0cjxDRkRhdGFSZWY+IGRhdGEoQWRvcHRDRiwgQ0ZEYXRhQ3JlYXRlV2l0aEJ5dGVzTm9Db3B5
KDAsIHN0YXRpY19jYXN0PFVJbnQ4Kj4oYnVmZmVyKSwgcm93Qnl0ZXMgKiBoZWlnaHQsIGtDRkFs
bG9jYXRvck51bGwpKTsKICAgICBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+IHByb3ZpZGVy
KEFkb3B0Q0YsIENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aENGRGF0YShkYXRhLmdldCgpKSk7Cklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVRdWlj
a1RpbWVXaW4uaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVdpbi5oCShyZXZpc2lvbiA1ODE4NykNCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVX
aW4uaAkod29ya2luZyBjb3B5KQ0KQEAgLTIzLDEzICsyMywxNCBAQA0KICAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAogICovCiAKLSNpZm5kZWYgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXRfaAotI2RlZmluZSBNZWRp
YVBsYXllclByaXZhdGVRVEtpdF9oCisjaWZuZGVmIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGlt
ZVdpbl9oCisjZGVmaW5lIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVdpbl9oCiAKICNpZiBF
TkFCTEUoVklERU8pCiAKICNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGUuaCIKICNpbmNsdWRl
ICJUaW1lci5oIgorI2luY2x1ZGUgPFFUTW92aWUuaD4KICNpbmNsdWRlIDxRVE1vdmllV2luLmg+
CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KQEAg
LTUxLDcgKzUyLDcgQEANCiBjbGFzcyBJbnRSZWN0OwogY2xhc3MgU3RyaW5nOwogCi1jbGFzcyBN
ZWRpYVBsYXllclByaXZhdGUgOiBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlLCBw
dWJsaWMgUVRNb3ZpZVdpbkNsaWVudCAKK2NsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZSA6IHB1Ymxp
YyBNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2UsIHB1YmxpYyBRVE1vdmllQ2xpZW50LCBwdWJs
aWMgUVRNb3ZpZVdpbkNsaWVudCAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAg
ICAgICAgICwgcHVibGljIEdyYXBoaWNzTGF5ZXJDbGllbnQKICNlbmRpZiAKQEAgLTEzMCw5ICsx
MzEsOSBAQA0KICAgICBmbG9hdCBtYXhUaW1lTG9hZGVkKCkgY29uc3Q7CiAgICAgdm9pZCBzYXdV
bnN1cHBvcnRlZFRyYWNrcygpOwogCi0gICAgdmlydHVhbCB2b2lkIG1vdmllRW5kZWQoUVRNb3Zp
ZVdpbiopOwotICAgIHZpcnR1YWwgdm9pZCBtb3ZpZUxvYWRTdGF0ZUNoYW5nZWQoUVRNb3ZpZVdp
biopOwotICAgIHZpcnR1YWwgdm9pZCBtb3ZpZVRpbWVDaGFuZ2VkKFFUTW92aWVXaW4qKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgbW92aWVFbmRlZChRVE1vdmllKik7CisgICAgdmlydHVhbCB2b2lkIG1v
dmllTG9hZFN0YXRlQ2hhbmdlZChRVE1vdmllKik7CisgICAgdmlydHVhbCB2b2lkIG1vdmllVGlt
ZUNoYW5nZWQoUVRNb3ZpZSopOwogICAgIHZpcnR1YWwgdm9pZCBtb3ZpZU5ld0ltYWdlQXZhaWxh
YmxlKFFUTW92aWVXaW4qKTsKIAogICAgIC8vIGVuZ2luZSBzdXBwb3J0CkBAIC0xNjIsNyArMTYz
LDggQEANCiAgICAgU3RyaW5nIHJmYzI2MTZEYXRlU3RyaW5nRnJvbVRpbWUoQ0ZBYnNvbHV0ZVRp
bWUpOwogCiAgICAgTWVkaWFQbGF5ZXIqIG1fcGxheWVyOwotICAgIE93blB0cjxRVE1vdmllV2lu
PiBtX3F0TW92aWU7CisgICAgUmVmUHRyPFFUTW92aWU+IG1fcXRNb3ZpZTsKKyAgICBSZWZQdHI8
UVRNb3ZpZVdpbj4gbV9xdE1vdmllV2luOwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKICAgICBPd25QdHI8R3JhcGhpY3NMYXllcj4gbV9xdFZpZGVvTGF5ZXI7CiAjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54515</attachid>
            <date>2010-04-27 20:49:00 -0700</date>
            <delta_ts>2010-04-28 10:55:05 -0700</delta_ts>
            <desc>New class MediaPlayerPrivateQuickTimeVisualContext </desc>
            <filename>7569713-MediaPlayerPrivateQuickTimeVisualContext.patch</filename>
            <type>text/plain</type>
            <size>40809</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1
aWNrVGltZVZpc3VhbENvbnRleHQuY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dC5j
cHAJKHJldmlzaW9uIDU3NjYzKQ0KKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01l
ZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkp
DQpAQCAtMjYsNyArMjYsNyBAQA0KICNpbmNsdWRlICJjb25maWcuaCIKIAogI2lmIEVOQUJMRShW
SURFTykKLSNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVXaW4uaCIKKyNpbmNs
dWRlICJNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0LmgiCiAKICNpbmNs
dWRlICJDb29raWUuaCIKICNpbmNsdWRlICJDb29raWVKYXIuaCIKQEAgLTM0LDE2ICszNCwyNCBA
QA0KICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
ICNpbmNsdWRlICJLVVJMLmgiCi0jaW5jbHVkZSAiUVRNb3ZpZVdpbi5oIgorI2luY2x1ZGUgIk1l
ZGlhUGxheWVyUHJpdmF0ZVRhc2tUaW1lci5oIgorI2luY2x1ZGUgIlFUQ0ZEaWN0aW9uYXJ5Lmgi
CisjaW5jbHVkZSAiUVRNb3ZpZS5oIgorI2luY2x1ZGUgIlFUTW92aWVUYXNrLmgiCisjaW5jbHVk
ZSAiUVRNb3ZpZVZpc3VhbENvbnRleHQuaCIKICNpbmNsdWRlICJTY3JvbGxWaWV3LmgiCiAjaW5j
bHVkZSAiU29mdExpbmtpbmcuaCIKICNpbmNsdWRlICJTdHJpbmdCdWlsZGVyLmgiCiAjaW5jbHVk
ZSAiU3RyaW5nSGFzaC5oIgogI2luY2x1ZGUgIlRpbWVSYW5nZXMuaCIKICNpbmNsdWRlICJUaW1l
ci5oIgorI2luY2x1ZGUgPENvcmVWaWRlby9DVkJhc2UuaD4KKyNpbmNsdWRlIDxDb3JlVmlkZW8v
Q1ZIb3N0VGltZS5oPgorI2luY2x1ZGUgPENvcmVWaWRlby9DVlBpeGVsQnVmZmVyLmg+CiAjaW5j
bHVkZSA8V2luaW5ldC5oPgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUg
PHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIApAQCAtNTIs
MzggKzYwLDY4IEBADQogI2luY2x1ZGUgIldLQ0FDRkxheWVyLmgiCiAjZW5kaWYKIAotI2lmIERS
QVdfRlJBTUVfUkFURQotI2luY2x1ZGUgIkZvbnQuaCIKLSNpbmNsdWRlICJGcmFtZVZpZXcuaCIK
LSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiUmVu
ZGVyT2JqZWN0LmgiCi0jaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKLSNpbmNsdWRlICJXaW5kb3dz
LmgiCi0jZW5kaWYKLQogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAorY29uc3QgQ0ZTdHJpbmdSZWYg
a01pblF1YXJ0ekNvcmVWZXJzaW9uID0gQ0ZTVFIoIjEuMC40My4wIik7Citjb25zdCBDRlN0cmlu
Z1JlZiBrTWluQ29yZVZpZGVvVmVyc2lvbiA9IENGU1RSKCIxLjAuMC4yIik7CisKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogU09GVF9MSU5LX0xJQlJBUlkoV2luaW5ldCkKIFNPRlRfTElOSyhXaW5p
bmV0LCBJbnRlcm5ldFNldENvb2tpZUV4VywgRFdPUkQsIFdJTkFQSSwgKExQQ1dTVFIgbHBzelVy
bCwgTFBDV1NUUiBscHN6Q29va2llTmFtZSwgTFBDV1NUUiBscHN6Q29va2llRGF0YSwgRFdPUkQg
ZHdGbGFncywgRFdPUkRfUFRSIGR3UmVzZXJ2ZWQpLCAobHBzelVybCwgbHBzekNvb2tpZU5hbWUs
IGxwc3pDb29raWVEYXRhLCBkd0ZsYWdzLCBkd1Jlc2VydmVkKSkKIAotTWVkaWFQbGF5ZXJQcml2
YXRlSW50ZXJmYWNlKiBNZWRpYVBsYXllclByaXZhdGU6OmNyZWF0ZShNZWRpYVBsYXllciogcGxh
eWVyKSAKKy8vIEludGVyZmFjZSBkZWNsYXJhdGlvbiBmb3IgTWVkaWFQbGF5ZXJQcml2YXRlUXVp
Y2tUaW1lVmlzdWFsQ29udGV4dCdzIFFUTW92aWVDbGllbnQgYWdncmVnYXRlCitjbGFzcyBNZWRp
YVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpNb3ZpZUNsaWVudCA6IHB1Ymxp
YyBRVE1vdmllQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBNb3ZpZUNsaWVudChNZWRpYVBsYXllclBy
aXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0KiBwYXJlbnQpIDogbV9wYXJlbnQocGFyZW50KSB7
fQorICAgIHZpcnR1YWwgfk1vdmllQ2xpZW50KCkgeyBtX3BhcmVudCA9IDA7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgbW92aWVFbmRlZChRVE1vdmllKik7CisgICAgdmlydHVhbCB2b2lkIG1vdmllTG9h
ZFN0YXRlQ2hhbmdlZChRVE1vdmllKik7CisgICAgdmlydHVhbCB2b2lkIG1vdmllVGltZUNoYW5n
ZWQoUVRNb3ZpZSopOworcHJpdmF0ZToKKyAgICBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVW
aXN1YWxDb250ZXh0KiBtX3BhcmVudDsKK307CisKKy8vIEludGVyZmFjZSBkZWNsYXJhdGlvbiBm
b3IgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dCdzIEdyYXBoaWNzTGF5
ZXJDbGllbnQgYWdncmVnYXRlCitjbGFzcyBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1
YWxDb250ZXh0OjpMYXllckNsaWVudCA6IHB1YmxpYyBHcmFwaGljc0xheWVyQ2xpZW50IHsKK3B1
YmxpYzoKKyAgICBMYXllckNsaWVudChNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxD
b250ZXh0KiBwYXJlbnQpIDogbV9wYXJlbnQocGFyZW50KSB7fQorICAgIHZpcnR1YWwgfkxheWVy
Q2xpZW50KCkgeyBtX3BhcmVudCA9IDA7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50
cyhjb25zdCBHcmFwaGljc0xheWVyKiwgR3JhcGhpY3NDb250ZXh0JiwgR3JhcGhpY3NMYXllclBh
aW50aW5nUGhhc2UsIGNvbnN0IEludFJlY3QmIGluQ2xpcCk7CisgICAgdmlydHVhbCB2b2lkIG5v
dGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgR3JhcGhpY3NMYXllciosIGRvdWJsZSB0aW1lKSB7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5U3luY1JlcXVpcmVkKGNvbnN0IEdyYXBoaWNzTGF5
ZXIqKSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2hvd0RlYnVnQm9yZGVycygpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIHNob3dSZXBhaW50Q291bnRlcigpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9Citwcml2YXRlOgorICAgIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNr
VGltZVZpc3VhbENvbnRleHQqIG1fcGFyZW50OworfTsKKworY2xhc3MgTWVkaWFQbGF5ZXJQcml2
YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6VmlzdWFsQ29udGV4dENsaWVudCA6IHB1YmxpYyBR
VE1vdmllVmlzdWFsQ29udGV4dENsaWVudCB7CitwdWJsaWM6CisgICAgVmlzdWFsQ29udGV4dENs
aWVudChNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0KiBwYXJlbnQpIDog
bV9wYXJlbnQocGFyZW50KSB7fQorICAgIHZpcnR1YWwgflZpc3VhbENvbnRleHRDbGllbnQoKSB7
IG1fcGFyZW50ID0gMDsgfQorICAgIHZvaWQgaW1hZ2VBdmFpbGFibGVGb3JUaW1lKGNvbnN0IFFU
Q1ZUaW1lU3RhbXAqKTsKKyAgICBzdGF0aWMgdm9pZCByZXRyaWV2ZUN1cnJlbnRJbWFnZVByb2Mo
dm9pZCopOworcHJpdmF0ZToKKyAgICBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxD
b250ZXh0KiBtX3BhcmVudDsKK307CisKK01lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZSogTWVk
aWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6Y3JlYXRlKE1lZGlhUGxheWVy
KiBwbGF5ZXIpIAogeyAKLSAgICByZXR1cm4gbmV3IE1lZGlhUGxheWVyUHJpdmF0ZShwbGF5ZXIp
OworICAgIHJldHVybiBuZXcgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4
dChwbGF5ZXIpOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6cmVnaXN0ZXJNZWRpYUVu
Z2luZShNZWRpYUVuZ2luZVJlZ2lzdHJhciByZWdpc3RyYXIpCit2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OnJlZ2lzdGVyTWVkaWFFbmdpbmUoTWVkaWFFbmdp
bmVSZWdpc3RyYXIgcmVnaXN0cmFyKQogewogICAgIGlmIChpc0F2YWlsYWJsZSgpKQogICAgICAg
ICByZWdpc3RyYXIoY3JlYXRlLCBnZXRTdXBwb3J0ZWRUeXBlcywgc3VwcG9ydHNUeXBlKTsKIH0K
IAotTWVkaWFQbGF5ZXJQcml2YXRlOjpNZWRpYVBsYXllclByaXZhdGUoTWVkaWFQbGF5ZXIqIHBs
YXllcikKK01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6Ok1lZGlhUGxh
eWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQoTWVkaWFQbGF5ZXIqIHBsYXllcikKICAg
ICA6IG1fcGxheWVyKHBsYXllcikKICAgICAsIG1fc2Vla1RvKC0xKQotICAgICwgbV9zZWVrVGlt
ZXIodGhpcywgJk1lZGlhUGxheWVyUHJpdmF0ZTo6c2Vla1RpbWVyRmlyZWQpCisgICAgLCBtX3Nl
ZWtUaW1lcih0aGlzLCAmTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6
c2Vla1RpbWVyRmlyZWQpCisgICAgLCBtX3Zpc3VhbENvbnRleHRUaW1lcih0aGlzLCAmTWVkaWFQ
bGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6dmlzdWFsQ29udGV4dFRpbWVyRmly
ZWQpCiAgICAgLCBtX25ldHdvcmtTdGF0ZShNZWRpYVBsYXllcjo6RW1wdHkpCiAgICAgLCBtX3Jl
YWR5U3RhdGUoTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nKQogICAgICwgbV9lbmFibGVkVHJhY2tD
b3VudCgwKQpAQCAtOTMsODQgKzEzMSwzOSBAQA0KICAgICAsIG1faXNTdHJlYW1pbmcoZmFsc2Up
CiAgICAgLCBtX3Zpc2libGUoZmFsc2UpCiAgICAgLCBtX25ld0ZyYW1lQXZhaWxhYmxlKGZhbHNl
KQotI2lmIERSQVdfRlJBTUVfUkFURQotICAgICwgbV9mcmFtZUNvdW50V2hpbGVQbGF5aW5nKDAp
Ci0gICAgLCBtX3RpbWVTdGFydGVkUGxheWluZygwKQotICAgICwgbV90aW1lU3RvcHBlZFBsYXlp
bmcoMCkKLSNlbmRpZgorICAgICwgbV9tb3ZpZUNsaWVudChuZXcgTWVkaWFQbGF5ZXJQcml2YXRl
UXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6TW92aWVDbGllbnQodGhpcykpCisgICAgLCBtX2xheWVy
Q2xpZW50KG5ldyBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpMYXll
ckNsaWVudCh0aGlzKSkKKyAgICAsIG1fdmlzdWFsQ29udGV4dENsaWVudChuZXcgTWVkaWFQbGF5
ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6VmlzdWFsQ29udGV4dENsaWVudCh0aGlz
KSkKIHsKIH0KIAotTWVkaWFQbGF5ZXJQcml2YXRlOjp+TWVkaWFQbGF5ZXJQcml2YXRlKCkKK01l
ZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6On5NZWRpYVBsYXllclByaXZh
dGVRdWlja1RpbWVWaXN1YWxDb250ZXh0KCkKIHsKICAgICB0ZWFyRG93blZpZGVvUmVuZGVyaW5n
KCk7CisgICAgY2FuY2VsQ2FsbE9uTWFpblRocmVhZCgmVmlzdWFsQ29udGV4dENsaWVudDo6cmV0
cmlldmVDdXJyZW50SW1hZ2VQcm9jLCB0aGlzKTsKIH0KIAotYm9vbCBNZWRpYVBsYXllclByaXZh
dGU6OnN1cHBvcnRzRnVsbHNjcmVlbigpIGNvbnN0Citib29sIE1lZGlhUGxheWVyUHJpdmF0ZVF1
aWNrVGltZVZpc3VhbENvbnRleHQ6OnN1cHBvcnRzRnVsbHNjcmVlbigpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLVBsYXRmb3JtTWVkaWEgTWVkaWFQbGF5ZXJQcml2YXRlOjpwbGF0
Zm9ybU1lZGlhKCkgY29uc3QKK1BsYXRmb3JtTWVkaWEgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tU
aW1lVmlzdWFsQ29udGV4dDo6cGxhdGZvcm1NZWRpYSgpIGNvbnN0CiB7CiAgICAgUGxhdGZvcm1N
ZWRpYSBwOwotICAgIHAucXRNb3ZpZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8UVRNb3ZpZSo+KG1fcXRN
b3ZpZS5nZXQoKSk7CisgICAgcC5xdE1vdmllID0gcmVpbnRlcnByZXRfY2FzdDxRVE1vdmllKj4o
bV9tb3ZpZS5nZXQoKSk7CiAgICAgcmV0dXJuIHA7CiB9CiAKICNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCi1QbGF0Zm9ybUxheWVyKiBNZWRpYVBsYXllclByaXZhdGU6OnBsYXRmb3Jt
TGF5ZXIoKSBjb25zdAorUGxhdGZvcm1MYXllciogTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1l
VmlzdWFsQ29udGV4dDo6cGxhdGZvcm1MYXllcigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fcXRW
aWRlb0xheWVyID8gbV9xdFZpZGVvTGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSA6IDA7CiB9CiAjZW5k
aWYKIAotY2xhc3MgVGFza1RpbWVyIDogVGltZXJCYXNlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
dm9pZCBpbml0aWFsaXplKCk7Ci0gICAgCi1wcml2YXRlOgotICAgIHN0YXRpYyB2b2lkIHNldFRh
c2tUaW1lckRlbGF5KGRvdWJsZSk7Ci0gICAgc3RhdGljIHZvaWQgc3RvcFRhc2tUaW1lcigpOwot
Ci0gICAgdm9pZCBmaXJlZCgpOwotCi0gICAgc3RhdGljIFRhc2tUaW1lciogc190aW1lcjsKLX07
Ci0KLVRhc2tUaW1lciogVGFza1RpbWVyOjpzX3RpbWVyID0gMDsKLQotdm9pZCBUYXNrVGltZXI6
OmluaXRpYWxpemUoKQorU3RyaW5nIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENv
bnRleHQ6OnJmYzI2MTZEYXRlU3RyaW5nRnJvbVRpbWUoQ0ZBYnNvbHV0ZVRpbWUgdGltZSkKIHsK
LSAgICBpZiAoc190aW1lcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc190aW1lciA9IG5ldyBU
YXNrVGltZXI7Ci0KLSAgICBRVE1vdmllV2luOjpzZXRUYXNrVGltZXJGdW5jcyhzZXRUYXNrVGlt
ZXJEZWxheSwgc3RvcFRhc2tUaW1lcik7Ci19Ci0KLXZvaWQgVGFza1RpbWVyOjpzZXRUYXNrVGlt
ZXJEZWxheShkb3VibGUgZGVsYXlJblNlY29uZHMpCi17Ci0gICAgQVNTRVJUKHNfdGltZXIpOwot
Ci0gICAgc190aW1lci0+c3RhcnRPbmVTaG90KGRlbGF5SW5TZWNvbmRzKTsKLX0KLQotdm9pZCBU
YXNrVGltZXI6OnN0b3BUYXNrVGltZXIoKQotewotICAgIEFTU0VSVChzX3RpbWVyKTsKLQotICAg
IHNfdGltZXItPnN0b3AoKTsKLX0KLQotdm9pZCBUYXNrVGltZXI6OmZpcmVkKCkKLXsKLSAgICBR
VE1vdmllV2luOjp0YXNrVGltZXJGaXJlZCgpOwotfQotCi1TdHJpbmcgTWVkaWFQbGF5ZXJQcml2
YXRlOjpyZmMyNjE2RGF0ZVN0cmluZ0Zyb21UaW1lKENGQWJzb2x1dGVUaW1lIHRpbWUpCi17CiAg
ICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGRheVN0cmluZ3NbXSA9IHsgIk1vbiIsICJUdWUi
LCAiV2VkIiwgIlRodSIsICJGcmkiLCAiU2F0IiwgIlN1biIgfTsKICAgICBzdGF0aWMgY29uc3Qg
Y2hhciogY29uc3QgbW9udGhTdHJpbmdzW10gPSB7ICJKYW4iLCAiRmViIiwgIk1hciIsICJBcHIi
LCAiTWF5IiwgIkp1biIsICJKdWwiLCAiQXVnIiwgIlNlcCIsICJPY3QiLCAiTm92IiwgIkRlYyIg
fTsKICAgICBzdGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYgZGF0ZUZvcm1hdFN0cmluZyA9IENGU1RS
KCIlcywgJTAyZCAlcyAlMDRkICUwMmQ6JTAyZDolMDJkIEdNVCIpOwpAQCAtMjA3LDggKzIwMCw3
IEBADQogICAgIH0KIH0KIAotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0VXBDb29raWVz
Rm9yUXVpY2tUaW1lKGNvbnN0IFN0cmluZyYgdXJsKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVR
dWlja1RpbWVWaXN1YWxDb250ZXh0OjpzZXRVcENvb2tpZXNGb3JRdWlja1RpbWUoY29uc3QgU3Ry
aW5nJiB1cmwpCiB7CiAgICAgLy8gV2ViQ29yZSBsb2FkZWQgdGhlIHBhZ2Ugd2l0aCB0aGUgbW92
aWUgVVJMIHdpdGggQ0ZOZXR3b3JrIGJ1dCBRdWlja1RpbWUgd2lsbCAKICAgICAvLyB1c2UgV2lu
SU5ldCB0byBkb3dubG9hZCB0aGUgbW92aWUsIHNvIHdlIG5lZWQgdG8gY29weSBhbnkgY29va2ll
cyBuZWVkZWQgdG8KQEAgLTI2MCw5ICsyNTIsOSBAQA0KICAgICB9CiB9CiAKLXZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlOjpsb2FkKGNvbnN0IFN0cmluZyYgdXJsKQordm9pZCBNZWRpYVBsYXllclBy
aXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0Ojpsb2FkKGNvbnN0IFN0cmluZyYgdXJsKQogewot
ICAgIGlmICghUVRNb3ZpZVdpbjo6aW5pdGlhbGl6ZVF1aWNrVGltZSgpKSB7CisgICAgaWYgKCFR
VE1vdmllOjppbml0aWFsaXplUXVpY2tUaW1lKCkpIHsKICAgICAgICAgLy8gRklYTUU6IGlzIHRo
aXMgdGhlIHJpZ2h0IGVycm9yIHRvIHJldHVybj8KICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBN
ZWRpYVBsYXllcjo6RGVjb2RlRXJyb3I7IAogICAgICAgICBtX3BsYXllci0+bmV0d29ya1N0YXRl
Q2hhbmdlZCgpOwpAQCAtMjcwLDcgKzI2Miw3IEBADQogICAgIH0KIAogICAgIC8vIEluaXRpYWxp
emUgdGhlIHRhc2sgdGltZXIuCi0gICAgVGFza1RpbWVyOjppbml0aWFsaXplKCk7CisgICAgTWVk
aWFQbGF5ZXJQcml2YXRlVGFza1RpbWVyOjppbml0aWFsaXplKCk7CiAKICAgICBpZiAobV9uZXR3
b3JrU3RhdGUgIT0gTWVkaWFQbGF5ZXI6OkxvYWRpbmcpIHsKICAgICAgICAgbV9uZXR3b3JrU3Rh
dGUgPSBNZWRpYVBsYXllcjo6TG9hZGluZzsKQEAgLTI4NCw1NCArMjc2LDUzIEBADQogCiAgICAg
c2V0VXBDb29raWVzRm9yUXVpY2tUaW1lKHVybCk7CiAKLSAgICBtX3F0TW92aWUuc2V0KG5ldyBR
VE1vdmllV2luKHRoaXMpKTsKLSAgICBtX3F0TW92aWUtPmxvYWQodXJsLmNoYXJhY3RlcnMoKSwg
dXJsLmxlbmd0aCgpLCBtX3BsYXllci0+cHJlc2VydmVzUGl0Y2goKSk7Ci0gICAgbV9xdE1vdmll
LT5zZXRWb2x1bWUobV9wbGF5ZXItPnZvbHVtZSgpKTsKLSAgICBtX3F0TW92aWUtPnNldFZpc2li
bGUobV9wbGF5ZXItPnZpc2libGUoKSk7CisgICAgbV9tb3ZpZSA9IGFkb3B0UmVmKG5ldyBRVE1v
dmllKG1fbW92aWVDbGllbnQuZ2V0KCkpKTsKKyAgICBtX21vdmllLT5sb2FkKHVybC5jaGFyYWN0
ZXJzKCksIHVybC5sZW5ndGgoKSwgbV9wbGF5ZXItPnByZXNlcnZlc1BpdGNoKCkpOworICAgIG1f
bW92aWUtPnNldFZvbHVtZShtX3BsYXllci0+dm9sdW1lKCkpOworCisgICAgQ0ZEaWN0aW9uYXJ5
UmVmIG9wdGlvbnMgPSBRVE1vdmllVmlzdWFsQ29udGV4dDo6Z2V0Q0dJbWFnZU9wdGlvbnMoKTsK
KyAgICBtX3Zpc3VhbENvbnRleHQgPSBhZG9wdFJlZihuZXcgUVRNb3ZpZVZpc3VhbENvbnRleHQo
bV92aXN1YWxDb250ZXh0Q2xpZW50LmdldCgpLCBvcHRpb25zKSk7CiB9CiAKLXZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlOjpwbGF5KCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlz
dWFsQ29udGV4dDo6cGxheSgpCiB7Ci0gICAgaWYgKCFtX3F0TW92aWUpCisgICAgaWYgKCFtX21v
dmllKQogICAgICAgICByZXR1cm47CiAgICAgbV9zdGFydGVkUGxheWluZyA9IHRydWU7Ci0jaWYg
RFJBV19GUkFNRV9SQVRFCi0gICAgbV9mcmFtZUNvdW50V2hpbGVQbGF5aW5nID0gMDsKLSNlbmRp
ZgogCi0gICAgbV9xdE1vdmllLT5wbGF5KCk7CisgICAgbV9tb3ZpZS0+cGxheSgpOworICAgIG1f
dmlzdWFsQ29udGV4dFRpbWVyLnN0YXJ0UmVwZWF0aW5nKDEuMCAvIDMwKTsKIH0KIAotdm9pZCBN
ZWRpYVBsYXllclByaXZhdGU6OnBhdXNlKCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tU
aW1lVmlzdWFsQ29udGV4dDo6cGF1c2UoKQogewotICAgIGlmICghbV9xdE1vdmllKQorICAgIGlm
ICghbV9tb3ZpZSkKICAgICAgICAgcmV0dXJuOwogICAgIG1fc3RhcnRlZFBsYXlpbmcgPSBmYWxz
ZTsKLSNpZiBEUkFXX0ZSQU1FX1JBVEUKLSAgICBtX3RpbWVTdG9wcGVkUGxheWluZyA9IFdURjo6
Y3VycmVudFRpbWUoKTsKLSNlbmRpZgotICAgIG1fcXRNb3ZpZS0+cGF1c2UoKTsKKworICAgIG1f
bW92aWUtPnBhdXNlKCk7CisgICAgbV92aXN1YWxDb250ZXh0VGltZXIuc3RvcCgpOwogfQogCi1m
bG9hdCBNZWRpYVBsYXllclByaXZhdGU6OmR1cmF0aW9uKCkgY29uc3QKK2Zsb2F0IE1lZGlhUGxh
eWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OmR1cmF0aW9uKCkgY29uc3QKIHsKLSAg
ICBpZiAoIW1fcXRNb3ZpZSkKKyAgICBpZiAoIW1fbW92aWUpCiAgICAgICAgIHJldHVybiAwOwot
ICAgIHJldHVybiBtX3F0TW92aWUtPmR1cmF0aW9uKCk7CisgICAgcmV0dXJuIG1fbW92aWUtPmR1
cmF0aW9uKCk7CiB9CiAKLWZsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZTo6Y3VycmVudFRpbWUoKSBj
b25zdAorZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6Y3Vy
cmVudFRpbWUoKSBjb25zdAogewotICAgIGlmICghbV9xdE1vdmllKQorICAgIGlmICghbV9tb3Zp
ZSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIG1fcXRNb3ZpZS0+Y3VycmVudFRpbWUo
KTsKKyAgICByZXR1cm4gbV9tb3ZpZS0+Y3VycmVudFRpbWUoKTsKIH0KIAotdm9pZCBNZWRpYVBs
YXllclByaXZhdGU6OnNlZWsoZmxvYXQgdGltZSkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXVp
Y2tUaW1lVmlzdWFsQ29udGV4dDo6c2VlayhmbG9hdCB0aW1lKQogewogICAgIGNhbmNlbFNlZWso
KTsKICAgICAKLSAgICBpZiAoIW1fcXRNb3ZpZSkKKyAgICBpZiAoIW1fbW92aWUpCiAgICAgICAg
IHJldHVybjsKICAgICAKICAgICBpZiAodGltZSA+IGR1cmF0aW9uKCkpCkBAIC0zNDQsMjggKzMz
NSwyOCBAQA0KICAgICAgICAgbV9zZWVrVGltZXIuc3RhcnQoMCwgMC41Zik7CiB9CiAgICAgCi12
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6ZG9TZWVrKCkgCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OmRvU2VlaygpIAogewotICAgIGZsb2F0IG9sZFJhdGUg
PSBtX3F0TW92aWUtPnJhdGUoKTsKKyAgICBmbG9hdCBvbGRSYXRlID0gbV9tb3ZpZS0+cmF0ZSgp
OwogICAgIGlmIChvbGRSYXRlKQotICAgICAgICBtX3F0TW92aWUtPnNldFJhdGUoMCk7Ci0gICAg
bV9xdE1vdmllLT5zZXRDdXJyZW50VGltZShtX3NlZWtUbyk7CisgICAgICAgIG1fbW92aWUtPnNl
dFJhdGUoMCk7CisgICAgbV9tb3ZpZS0+c2V0Q3VycmVudFRpbWUobV9zZWVrVG8pOwogICAgIGZs
b2F0IHRpbWVBZnRlclNlZWsgPSBjdXJyZW50VGltZSgpOwogICAgIC8vIHJlc3RvcmUgcGxheWJh
Y2sgb25seSBpZiBub3QgYXQgZW5kLCBvdGhld2lzZSBRVE1vdmllIHdpbGwgbG9vcAogICAgIGlm
IChvbGRSYXRlICYmIHRpbWVBZnRlclNlZWsgPCBkdXJhdGlvbigpKQotICAgICAgICBtX3F0TW92
aWUtPnNldFJhdGUob2xkUmF0ZSk7CisgICAgICAgIG1fbW92aWUtPnNldFJhdGUob2xkUmF0ZSk7
CiAgICAgY2FuY2VsU2VlaygpOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6Y2FuY2Vs
U2VlaygpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OmNh
bmNlbFNlZWsoKQogewogICAgIG1fc2Vla1RvID0gLTE7CiAgICAgbV9zZWVrVGltZXIuc3RvcCgp
OwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2Vla1RpbWVyRmlyZWQoVGltZXI8TWVk
aWFQbGF5ZXJQcml2YXRlPiopCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3Vh
bENvbnRleHQ6OnNlZWtUaW1lckZpcmVkKFRpbWVyPE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGlt
ZVZpc3VhbENvbnRleHQ+KikKIHsgICAgICAgIAotICAgIGlmICghbV9xdE1vdmllIHx8ICFzZWVr
aW5nKCkgfHwgY3VycmVudFRpbWUoKSA9PSBtX3NlZWtUbykgeworICAgIGlmICghbV9tb3ZpZSB8
fCAhc2Vla2luZygpIHx8IGN1cnJlbnRUaW1lKCkgPT0gbV9zZWVrVG8pIHsKICAgICAgICAgY2Fu
Y2VsU2VlaygpOwogICAgICAgICB1cGRhdGVTdGF0ZXMoKTsKICAgICAgICAgbV9wbGF5ZXItPnRp
bWVDaGFuZ2VkKCk7IApAQCAtMzg0LDgwICszNzUsODUgQEANCiAgICAgfQogfQogCi1ib29sIE1l
ZGlhUGxheWVyUHJpdmF0ZTo6cGF1c2VkKCkgY29uc3QKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRl
UXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6cGF1c2VkKCkgY29uc3QKIHsKLSAgICBpZiAoIW1fcXRN
b3ZpZSkKKyAgICBpZiAoIW1fbW92aWUpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVy
biBtX3F0TW92aWUtPnJhdGUoKSA9PSAwLjBmOworICAgIHJldHVybiAoIW1fbW92aWUtPnJhdGUo
KSk7CiB9CiAKLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZWVraW5nKCkgY29uc3QKK2Jvb2wg
TWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6c2Vla2luZygpIGNvbnN0
CiB7Ci0gICAgaWYgKCFtX3F0TW92aWUpCisgICAgaWYgKCFtX21vdmllKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgcmV0dXJuIG1fc2Vla1RvID49IDA7CiB9CiAKLUludFNpemUgTWVkaWFQ
bGF5ZXJQcml2YXRlOjpuYXR1cmFsU2l6ZSgpIGNvbnN0CitJbnRTaXplIE1lZGlhUGxheWVyUHJp
dmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6Om5hdHVyYWxTaXplKCkgY29uc3QKIHsKLSAgICBp
ZiAoIW1fcXRNb3ZpZSkKKyAgICBpZiAoIW1fbW92aWUpCiAgICAgICAgIHJldHVybiBJbnRTaXpl
KCk7CiAgICAgaW50IHdpZHRoOwogICAgIGludCBoZWlnaHQ7Ci0gICAgbV9xdE1vdmllLT5nZXRO
YXR1cmFsU2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICBtX21vdmllLT5nZXROYXR1cmFsU2l6ZSh3
aWR0aCwgaGVpZ2h0KTsKICAgICByZXR1cm4gSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKIH0KIAot
Ym9vbCBNZWRpYVBsYXllclByaXZhdGU6Omhhc1ZpZGVvKCkgY29uc3QKK2Jvb2wgTWVkaWFQbGF5
ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6aGFzVmlkZW8oKSBjb25zdAogewotICAg
IGlmICghbV9xdE1vdmllKQorICAgIGlmICghbV9tb3ZpZSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIHJldHVybiBtX3F0TW92aWUtPmhhc1ZpZGVvKCk7CisgICAgcmV0dXJuIG1fbW92aWUt
Pmhhc1ZpZGVvKCk7CiB9CiAKLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlOjpoYXNBdWRpbygpIGNv
bnN0Citib29sIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6Omhhc0F1
ZGlvKCkgY29uc3QKIHsKLSAgICBpZiAoIW1fcXRNb3ZpZSkKKyAgICBpZiAoIW1fbW92aWUpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gbV9xdE1vdmllLT5oYXNBdWRpbygpOwor
ICAgIHJldHVybiBtX21vdmllLT5oYXNBdWRpbygpOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZTo6c2V0Vm9sdW1lKGZsb2F0IHZvbHVtZSkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXVp
Y2tUaW1lVmlzdWFsQ29udGV4dDo6c2V0Vm9sdW1lKGZsb2F0IHZvbHVtZSkKIHsKLSAgICBpZiAo
IW1fcXRNb3ZpZSkKKyAgICBpZiAoIW1fbW92aWUpCiAgICAgICAgIHJldHVybjsKLSAgICBtX3F0
TW92aWUtPnNldFZvbHVtZSh2b2x1bWUpOworICAgIG1fbW92aWUtPnNldFZvbHVtZSh2b2x1bWUp
OwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0UmF0ZShmbG9hdCByYXRlKQordm9p
ZCBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpzZXRSYXRlKGZsb2F0
IHJhdGUpCiB7Ci0gICAgaWYgKCFtX3F0TW92aWUpCisgICAgaWYgKCFtX21vdmllKQogICAgICAg
ICByZXR1cm47Ci0gICAgbV9xdE1vdmllLT5zZXRSYXRlKHJhdGUpOworCisgICAgLy8gRG8gbm90
IGNhbGwgc2V0UmF0ZSguLi4pIHVubGVzcyB3ZSBoYXZlIHN0YXJ0ZWQgcGxheWluZzsgb3RoZXJ3
aXNlCisgICAgLy8gUXVpY2tUaW1lJ3MgVmlzdWFsQ29udGV4dCBjYW4gZ2V0IHdlZGdlZCB3YWl0
aW5nIGZvciBhIHJhdGUgY2hhbmdlCisgICAgLy8gY2FsbCB3aGljaCB3aWxsIG5ldmVyIGNvbWUu
CisgICAgaWYgKG1fc3RhcnRlZFBsYXlpbmcpCisgICAgICAgIG1fbW92aWUtPnNldFJhdGUocmF0
ZSk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRQcmVzZXJ2ZXNQaXRjaChib29s
IHByZXNlcnZlc1BpdGNoKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxD
b250ZXh0OjpzZXRQcmVzZXJ2ZXNQaXRjaChib29sIHByZXNlcnZlc1BpdGNoKQogewotICAgIGlm
ICghbV9xdE1vdmllKQorICAgIGlmICghbV9tb3ZpZSkKICAgICAgICAgcmV0dXJuOwotICAgIG1f
cXRNb3ZpZS0+c2V0UHJlc2VydmVzUGl0Y2gocHJlc2VydmVzUGl0Y2gpOworICAgIG1fbW92aWUt
PnNldFByZXNlcnZlc1BpdGNoKHByZXNlcnZlc1BpdGNoKTsKIH0KIAotYm9vbCBNZWRpYVBsYXll
clByaXZhdGU6Omhhc0Nsb3NlZENhcHRpb25zKCkgY29uc3QKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2
YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6aGFzQ2xvc2VkQ2FwdGlvbnMoKSBjb25zdAogewot
ICAgIGlmICghbV9xdE1vdmllKQorICAgIGlmICghbV9tb3ZpZSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIHJldHVybiBtX3F0TW92aWUtPmhhc0Nsb3NlZENhcHRpb25zKCk7CisgICAgcmV0
dXJuIG1fbW92aWUtPmhhc0Nsb3NlZENhcHRpb25zKCk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlOjpzZXRDbG9zZWRDYXB0aW9uc1Zpc2libGUoYm9vbCB2aXNpYmxlKQordm9pZCBNZWRp
YVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpzZXRDbG9zZWRDYXB0aW9uc1Zp
c2libGUoYm9vbCB2aXNpYmxlKQogewotICAgIGlmICghbV9xdE1vdmllKQorICAgIGlmICghbV9t
b3ZpZSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fcXRNb3ZpZS0+c2V0Q2xvc2VkQ2FwdGlvbnNW
aXNpYmxlKHZpc2libGUpOworICAgIG1fbW92aWUtPnNldENsb3NlZENhcHRpb25zVmlzaWJsZSh2
aXNpYmxlKTsKIH0KIAotUGFzc1JlZlB0cjxUaW1lUmFuZ2VzPiBNZWRpYVBsYXllclByaXZhdGU6
OmJ1ZmZlcmVkKCkgY29uc3QKK1Bhc3NSZWZQdHI8VGltZVJhbmdlcz4gTWVkaWFQbGF5ZXJQcml2
YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6YnVmZmVyZWQoKSBjb25zdAogewogICAgIFJlZlB0
cjxUaW1lUmFuZ2VzPiB0aW1lUmFuZ2VzID0gVGltZVJhbmdlczo6Y3JlYXRlKCk7CiAgICAgZmxv
YXQgbG9hZGVkID0gbWF4VGltZUxvYWRlZCgpOwpAQCAtNDY3LDIyICs0NjMsMjIgQEANCiAgICAg
cmV0dXJuIHRpbWVSYW5nZXMucmVsZWFzZSgpOwogfQogCi1mbG9hdCBNZWRpYVBsYXllclByaXZh
dGU6Om1heFRpbWVTZWVrYWJsZSgpIGNvbnN0CitmbG9hdCBNZWRpYVBsYXllclByaXZhdGVRdWlj
a1RpbWVWaXN1YWxDb250ZXh0OjptYXhUaW1lU2Vla2FibGUoKSBjb25zdAogewogICAgIC8vIGlu
ZmluaXRlIGR1cmF0aW9uIG1lYW5zIGxpdmUgc3RyZWFtCiAgICAgcmV0dXJuICFpc2Zpbml0ZShk
dXJhdGlvbigpKSA/IDAgOiBtYXhUaW1lTG9hZGVkKCk7CiB9CiAKLWZsb2F0IE1lZGlhUGxheWVy
UHJpdmF0ZTo6bWF4VGltZUxvYWRlZCgpIGNvbnN0CitmbG9hdCBNZWRpYVBsYXllclByaXZhdGVR
dWlja1RpbWVWaXN1YWxDb250ZXh0OjptYXhUaW1lTG9hZGVkKCkgY29uc3QKIHsKLSAgICBpZiAo
IW1fcXRNb3ZpZSkKKyAgICBpZiAoIW1fbW92aWUpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJl
dHVybiBtX3F0TW92aWUtPm1heFRpbWVMb2FkZWQoKTsgCisgICAgcmV0dXJuIG1fbW92aWUtPm1h
eFRpbWVMb2FkZWQoKTsgCiB9CiAKLXVuc2lnbmVkIE1lZGlhUGxheWVyUHJpdmF0ZTo6Ynl0ZXNM
b2FkZWQoKSBjb25zdAordW5zaWduZWQgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFs
Q29udGV4dDo6Ynl0ZXNMb2FkZWQoKSBjb25zdAogewotICAgIGlmICghbV9xdE1vdmllKQorICAg
IGlmICghbV9tb3ZpZSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgZmxvYXQgZHVyID0gZHVyYXRp
b24oKTsKICAgICBmbG9hdCBtYXhUaW1lID0gbWF4VGltZUxvYWRlZCgpOwpAQCAtNDkxLDE0ICs0
ODcsMTQgQEANCiAgICAgcmV0dXJuIHRvdGFsQnl0ZXMoKSAqIG1heFRpbWUgLyBkdXI7CiB9CiAK
LXVuc2lnbmVkIE1lZGlhUGxheWVyUHJpdmF0ZTo6dG90YWxCeXRlcygpIGNvbnN0Cit1bnNpZ25l
ZCBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0Ojp0b3RhbEJ5dGVzKCkg
Y29uc3QKIHsKLSAgICBpZiAoIW1fcXRNb3ZpZSkKKyAgICBpZiAoIW1fbW92aWUpCiAgICAgICAg
IHJldHVybiAwOwotICAgIHJldHVybiBtX3F0TW92aWUtPmRhdGFTaXplKCk7CisgICAgcmV0dXJu
IG1fbW92aWUtPmRhdGFTaXplKCk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpjYW5j
ZWxMb2FkKCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6
Y2FuY2VsTG9hZCgpCiB7CiAgICAgaWYgKG1fbmV0d29ya1N0YXRlIDwgTWVkaWFQbGF5ZXI6Okxv
YWRpbmcgfHwgbV9uZXR3b3JrU3RhdGUgPT0gTWVkaWFQbGF5ZXI6OkxvYWRlZCkKICAgICAgICAg
cmV0dXJuOwpAQCAtNTA2LDIwICs1MDIsMjAgQEANCiAgICAgdGVhckRvd25WaWRlb1JlbmRlcmlu
ZygpOwogCiAgICAgLy8gQ2FuY2VsIHRoZSBsb2FkIGJ5IGRlc3Ryb3lpbmcgdGhlIG1vdmllLgot
ICAgIG1fcXRNb3ZpZS5jbGVhcigpOworICAgIG1fbW92aWUuY2xlYXIoKTsKIAogICAgIHVwZGF0
ZVN0YXRlcygpOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6dXBkYXRlU3RhdGVzKCkK
K3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6dXBkYXRlU3Rh
dGVzKCkKIHsKICAgICBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIG9sZE5ldHdvcmtTdGF0ZSA9
IG1fbmV0d29ya1N0YXRlOwogICAgIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIG9sZFJlYWR5U3Rh
dGUgPSBtX3JlYWR5U3RhdGU7CiAgIAotICAgIGxvbmcgbG9hZFN0YXRlID0gbV9xdE1vdmllID8g
bV9xdE1vdmllLT5sb2FkU3RhdGUoKSA6IFFUTW92aWVMb2FkU3RhdGVFcnJvcjsKKyAgICBsb25n
IGxvYWRTdGF0ZSA9IG1fbW92aWUgPyBtX21vdmllLT5sb2FkU3RhdGUoKSA6IFFUTW92aWVMb2Fk
U3RhdGVFcnJvcjsKIAogICAgIGlmIChsb2FkU3RhdGUgPj0gUVRNb3ZpZUxvYWRTdGF0ZUxvYWRl
ZCAmJiBtX3JlYWR5U3RhdGUgPCBNZWRpYVBsYXllcjo6SGF2ZU1ldGFkYXRhKSB7Ci0gICAgICAg
IG1fcXRNb3ZpZS0+ZGlzYWJsZVVuc3VwcG9ydGVkVHJhY2tzKG1fZW5hYmxlZFRyYWNrQ291bnQs
IG1fdG90YWxUcmFja0NvdW50KTsKKyAgICAgICAgbV9tb3ZpZS0+ZGlzYWJsZVVuc3VwcG9ydGVk
VHJhY2tzKG1fZW5hYmxlZFRyYWNrQ291bnQsIG1fdG90YWxUcmFja0NvdW50KTsKICAgICAgICAg
aWYgKG1fcGxheWVyLT5pbk1lZGlhRG9jdW1lbnQoKSkgewogICAgICAgICAgICAgaWYgKCFtX2Vu
YWJsZWRUcmFja0NvdW50IHx8IG1fZW5hYmxlZFRyYWNrQ291bnQgIT0gbV90b3RhbFRyYWNrQ291
bnQpIHsKICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgdHlwZSBvZiBtZWRpYSB0aGF0IHdl
IGRvIG5vdCBoYW5kbGUgZGlyZWN0bHkgd2l0aCBhIDx2aWRlbz4gCkBAIC01ODIsNDUgKzU3OCw0
MSBAQA0KICAgICAgICAgbV9wbGF5ZXItPnJlYWR5U3RhdGVDaGFuZ2VkKCk7CiB9CiAKLWJvb2wg
TWVkaWFQbGF5ZXJQcml2YXRlOjppc1JlYWR5Rm9yUmVuZGVyaW5nKCkgY29uc3QKK2Jvb2wgTWVk
aWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6aXNSZWFkeUZvclJlbmRlcmlu
ZygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fcmVhZHlTdGF0ZSA+PSBNZWRpYVBsYXllcjo6SGF2
ZU1ldGFkYXRhICYmIG1fcGxheWVyLT52aXNpYmxlKCk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlOjpzYXdVbnN1cHBvcnRlZFRyYWNrcygpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF1
aWNrVGltZVZpc3VhbENvbnRleHQ6OnNhd1Vuc3VwcG9ydGVkVHJhY2tzKCkKIHsKLSAgICBtX3F0
TW92aWUtPnNldERpc2FibGVkKHRydWUpOworICAgIG1fbW92aWUtPnNldERpc2FibGVkKHRydWUp
OwogICAgIG1faGFzVW5zdXBwb3J0ZWRUcmFja3MgPSB0cnVlOwogICAgIG1fcGxheWVyLT5tZWRp
YVBsYXllckNsaWVudCgpLT5tZWRpYVBsYXllclNhd1Vuc3VwcG9ydGVkVHJhY2tzKG1fcGxheWVy
KTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmRpZEVuZCgpCit2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OmRpZEVuZCgpCiB7CiAgICAgaWYgKG1f
aGFzVW5zdXBwb3J0ZWRUcmFja3MpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fc3RhcnRlZFBs
YXlpbmcgPSBmYWxzZTsKLSNpZiBEUkFXX0ZSQU1FX1JBVEUKLSAgICBtX3RpbWVTdG9wcGVkUGxh
eWluZyA9IFdURjo6Y3VycmVudFRpbWUoKTsKLSNlbmRpZgorCiAgICAgdXBkYXRlU3RhdGVzKCk7
CiAgICAgbV9wbGF5ZXItPnRpbWVDaGFuZ2VkKCk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlOjpzZXRTaXplKGNvbnN0IEludFNpemUmIHNpemUpIAordm9pZCBNZWRpYVBsYXllclByaXZh
dGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpzZXRTaXplKGNvbnN0IEludFNpemUmIHNpemUpIAog
eyAKLSAgICBpZiAobV9oYXNVbnN1cHBvcnRlZFRyYWNrcyB8fCAhbV9xdE1vdmllIHx8IG1fc2l6
ZSA9PSBzaXplKQorICAgIGlmIChtX2hhc1Vuc3VwcG9ydGVkVHJhY2tzIHx8ICFtX21vdmllIHx8
IG1fc2l6ZSA9PSBzaXplKQogICAgICAgICByZXR1cm47CiAgICAgbV9zaXplID0gc2l6ZTsKLSAg
ICBtX3F0TW92aWUtPnNldFNpemUoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKIH0KIAot
dm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNldFZpc2libGUoYm9vbCB2aXNpYmxlKQordm9pZCBN
ZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpzZXRWaXNpYmxlKGJvb2wg
dmlzaWJsZSkKIHsKLSAgICBpZiAobV9oYXNVbnN1cHBvcnRlZFRyYWNrcyB8fCAhbV9xdE1vdmll
IHx8IG1fdmlzaWJsZSA9PSB2aXNpYmxlKQorICAgIGlmIChtX2hhc1Vuc3VwcG9ydGVkVHJhY2tz
IHx8ICFtX21vdmllIHx8IG1fdmlzaWJsZSA9PSB2aXNpYmxlKQogICAgICAgICByZXR1cm47CiAK
LSAgICBtX3F0TW92aWUtPnNldFZpc2libGUodmlzaWJsZSk7CiAgICAgbV92aXNpYmxlID0gdmlz
aWJsZTsKICAgICBpZiAobV92aXNpYmxlKSB7CiAgICAgICAgIGlmIChpc1JlYWR5Rm9yUmVuZGVy
aW5nKCkpCkBAIC02MjksODggKzYyMSwxNDIgQEANCiAgICAgICAgIHRlYXJEb3duVmlkZW9SZW5k
ZXJpbmcoKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnBhaW50KEdyYXBoaWNzQ29u
dGV4dCogcCwgY29uc3QgSW50UmVjdCYgcikKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tU
aW1lVmlzdWFsQ29udGV4dDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBwLCBjb25zdCBJbnRSZWN0
JiByKQogewogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICBpZiAobV9xdFZp
ZGVvTGF5ZXIpCiAgICAgICAgIHJldHVybjsKICNlbmRpZgotICAgIGlmIChwLT5wYWludGluZ0Rp
c2FibGVkKCkgfHwgIW1fcXRNb3ZpZSB8fCBtX2hhc1Vuc3VwcG9ydGVkVHJhY2tzKQotICAgICAg
ICByZXR1cm47CiAKLSAgICBib29sIHVzaW5nVGVtcEJpdG1hcCA9IGZhbHNlOwotICAgIE93blB0
cjxHcmFwaGljc0NvbnRleHQ6OldpbmRvd3NCaXRtYXA+IGJpdG1hcDsKLSAgICBIREMgaGRjID0g
cC0+Z2V0V2luZG93c0NvbnRleHQocik7Ci0gICAgaWYgKCFoZGMpIHsKLSAgICAgICAgLy8gVGhl
IGdyYXBoaWNzIGNvbnRleHQgZG9lc24ndCBoYXZlIGFuIGFzc29jaWF0ZWQgSERDIHNvIGNyZWF0
ZSBhIHRlbXBvcmFyeQotICAgICAgICAvLyBiaXRtYXAgd2hlcmUgUVRNb3ZpZVdpbiBjYW4gZHJh
dyB0aGUgZnJhbWUgYW5kIHdlIGNhbiBjb3B5IGl0LgotICAgICAgICB1c2luZ1RlbXBCaXRtYXAg
PSB0cnVlOwotICAgICAgICBiaXRtYXAuc2V0KHAtPmNyZWF0ZVdpbmRvd3NCaXRtYXAoci5zaXpl
KCkpKTsKLSAgICAgICAgaGRjID0gYml0bWFwLT5oZGMoKTsKKyAgICBwYWludENvbXBsZXRlZCgq
cCwgcik7Cit9CiAKLSAgICAgICAgLy8gRklYTUU6IGlzIHRoaXMgbmVjZXNzYXJ5Pz8KLSAgICAg
ICAgWEZPUk0geGZvcm07Ci0gICAgICAgIHhmb3JtLmVNMTEgPSAxLjBmOwotICAgICAgICB4Zm9y
bS5lTTEyID0gMC4wZjsKLSAgICAgICAgeGZvcm0uZU0yMSA9IDAuMGY7Ci0gICAgICAgIHhmb3Jt
LmVNMjIgPSAxLjBmOwotICAgICAgICB4Zm9ybS5lRHggPSAtci54KCk7Ci0gICAgICAgIHhmb3Jt
LmVEeSA9IC1yLnkoKTsKLSAgICAgICAgU2V0V29ybGRUcmFuc2Zvcm0oaGRjLCAmeGZvcm0pOwor
dm9pZCBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpwYWludENvbXBs
ZXRlZChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7Cisg
ICAgbV9uZXdGcmFtZUF2YWlsYWJsZSA9IGZhbHNlOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OlZpc3VhbENvbnRleHRDbGllbnQ6OnJldHJpZXZl
Q3VycmVudEltYWdlUHJvYyh2b2lkKiByZWZjb24pCit7CisgICAgc3RhdGljX2Nhc3Q8TWVkaWFQ
bGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dCo+KHJlZmNvbiktPnJldHJpZXZlQ3Vy
cmVudEltYWdlKCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFs
Q29udGV4dDo6VmlzdWFsQ29udGV4dENsaWVudDo6aW1hZ2VBdmFpbGFibGVGb3JUaW1lKGNvbnN0
IFFUQ1ZUaW1lU3RhbXAqIHRpbWVTdGFtcCkKK3sKKyAgICAvLyBUaGlzIGNhbGwgbWF5IGNvbWUg
aW4gb24gYW5vdGhlciB0aHJlYWQsIHNvIG1hcnNoYWxsIHRvIHRoZSBtYWluIHRocmVhZCBmaXJz
dDoKKyAgICBjYWxsT25NYWluVGhyZWFkKCZyZXRyaWV2ZUN1cnJlbnRJbWFnZVByb2MsIG1fcGFy
ZW50KTsKKworICAgIC8vIGNhbGxPbk1haW5UaHJlYWQgbXVzdCBiZSBwYWlyZWQgd2l0aCBjYW5j
ZWxDYWxsT25NYWluVGhyZWFkIGluIHRoZSBkZXN0cnVjdG9yLAorICAgIC8vIGluIGNhc2UgdGhp
cyBvYmplY3QgaXMgZGVsZXRlZCBiZWZvcmUgdGhlIG1haW4gdGhyZWFkIHJlcXVlc3QgaXMgaGFu
ZGxlZC4KK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0
Ojp2aXN1YWxDb250ZXh0VGltZXJGaXJlZChUaW1lcjxNZWRpYVBsYXllclByaXZhdGVRdWlja1Rp
bWVWaXN1YWxDb250ZXh0PiopCit7CisgICAgcmV0cmlldmVDdXJyZW50SW1hZ2UoKTsKK30KKwor
c3RhdGljIENGRGljdGlvbmFyeVJlZiBRVENGRGljdGlvbmFyeUNyZWF0ZVdpdGhEYXRhQ2FsbGJh
Y2soQ0ZBbGxvY2F0b3JSZWYgYWxsb2NhdG9yLCBjb25zdCBVSW50OCogYnl0ZXMsIENGSW5kZXgg
bGVuZ3RoKQoreworICAgIENGRGF0YVJlZiBkYXRhID0gQ0ZEYXRhQ3JlYXRlV2l0aEJ5dGVzTm9D
b3B5KGFsbG9jYXRvciwgYnl0ZXMsIGxlbmd0aCwgMCk7CisgICAgaWYgKCFkYXRhKQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PENGRGljdGlvbmFyeVJl
Zj4oQ0ZQcm9wZXJ0eUxpc3RDcmVhdGVGcm9tWE1MRGF0YShhbGxvY2F0b3IsIGRhdGEsIGtDRlBy
b3BlcnR5TGlzdEltbXV0YWJsZSwgMCkpOworfQorCitzdGF0aWMgQ0dJbWFnZVJlZiBDcmVhdGVD
R0ltYWdlRnJvbVBpeGVsQnVmZmVyKFFUUGl4ZWxCdWZmZXIgYnVmZmVyKQoreworICAgIENHRGF0
YVByb3ZpZGVyUmVmIHByb3ZpZGVyID0gMDsKKyAgICBDR0NvbG9yU3BhY2VSZWYgY29sb3JTcGFj
ZSA9IDA7CisgICAgQ0dJbWFnZVJlZiBpbWFnZSA9IDA7CisKKyAgICBzaXplX3QgYml0c1BlckNv
bXBvbmVudCA9IDA7CisgICAgc2l6ZV90IGJpdHNQZXJQaXhlbCA9IDA7CisgICAgQ0dJbWFnZUFs
cGhhSW5mbyBhbHBoYUluZm8gPSBrQ0dJbWFnZUFscGhhTm9uZTsKKyAgICAgICAgCisgICAgc3dp
dGNoIChidWZmZXIucGl4ZWxGb3JtYXRUeXBlKCkpIHsKKyAgICBjYXNlIGtDVlBpeGVsRm9ybWF0
VHlwZV8zMkJHUkE6CisgICAgICAgIGJpdHNQZXJDb21wb25lbnQgPSA4OworICAgICAgICBiaXRz
UGVyUGl4ZWwgPSAzMjsKKyAgICAgICAgYWxwaGFJbmZvID0gKENHSW1hZ2VBbHBoYUluZm8pKGtD
R0ltYWdlQWxwaGFOb25lU2tpcEZpcnN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJMaXR0bGUpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIGtDVlBpeGVsRm9ybWF0VHlwZV8zMkFSR0I6CisgICAg
ICAgIGJpdHNQZXJDb21wb25lbnQgPSA4OworICAgICAgICBiaXRzUGVyUGl4ZWwgPSAzMjsKKyAg
ICAgICAgYWxwaGFJbmZvID0gKENHSW1hZ2VBbHBoYUluZm8pKGtDR0ltYWdlQWxwaGFOb25lU2tp
cExhc3QgfCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkJpZyk7CisgICAgICAgIGJyZWFrOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIC8vIEFsbCBvdGhlciBwaXhlbCBmb3JtYXRzIGFyZSBjdXJyZW50bHkg
dW5zdXBwb3J0ZWQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVh
azsKICAgICB9CiAKLSAgICBtX3F0TW92aWUtPnBhaW50KGhkYywgci54KCksIHIueSgpKTsKLSAg
ICBpZiAodXNpbmdUZW1wQml0bWFwKQotICAgICAgICBwLT5kcmF3V2luZG93c0JpdG1hcChiaXRt
YXAuZ2V0KCksIHIudG9wTGVmdCgpKTsKLSAgICBlbHNlCi0gICAgICAgIHAtPnJlbGVhc2VXaW5k
b3dzQ29udGV4dChoZGMsIHIpOworICAgIENHRGF0YVByb3ZpZGVyRGlyZWN0QWNjZXNzQ2FsbGJh
Y2tzIGNhbGxiYWNrcyA9IHsKKyAgICAgICAgJlFUUGl4ZWxCdWZmZXI6OmRhdGFQcm92aWRlckdl
dEJ5dGVQb2ludGVyQ2FsbGJhY2ssCisgICAgICAgICZRVFBpeGVsQnVmZmVyOjpkYXRhUHJvdmlk
ZXJSZWxlYXNlQnl0ZVBvaW50ZXJDYWxsYmFjaywKKyAgICAgICAgJlFUUGl4ZWxCdWZmZXI6OmRh
dGFQcm92aWRlckdldEJ5dGVzQXRQb3NpdGlvbkNhbGxiYWNrLAorICAgICAgICAmUVRQaXhlbEJ1
ZmZlcjo6ZGF0YVByb3ZpZGVyUmVsZWFzZUluZm9DYWxsYmFjaywKKyAgICB9OworICAgIAorICAg
IC8vIENvbG9yc3BhY2Ugc2hvdWxkIGJlIGRldmljZSwgc28gdGhhdCBRdWFydHogZG9lcyBub3Qg
aGF2ZSB0byBkbyBhbiBleHRyYSByZW5kZXIuCisgICAgY29sb3JTcGFjZSA9IENHQ29sb3JTcGFj
ZUNyZWF0ZURldmljZVJHQigpOworICAgIHJlcXVpcmUoY29sb3JTcGFjZSwgQmFpbCk7CisgICAg
ICAgICAgICAKKyAgICBwcm92aWRlciA9IENHRGF0YVByb3ZpZGVyQ3JlYXRlRGlyZWN0QWNjZXNz
KGJ1ZmZlci5nZXQoKSwgYnVmZmVyLmRhdGFTaXplKCksICZjYWxsYmFja3MpOworICAgIHJlcXVp
cmUocHJvdmlkZXIsIEJhaWwpOwogCi0gICAgcGFpbnRDb21wbGV0ZWQoKnAsIHIpOworICAgIC8v
IENHRGF0YVByb3ZpZGVyIGRvZXMgbm90IHJldGFpbiB0aGUgYnVmZmVyLCBidXQgaXQgd2lsbCBy
ZWxlYXNlIGl0IGxhdGVyLCBzbyBkbyBhbiBleHRyYSByZXRhaW4gaGVyZToKKyAgICBRVFBpeGVs
QnVmZmVyOjpyZXRhaW5DYWxsYmFjayhidWZmZXIuZ2V0KCkpOworICAgICAgICAKKyAgICBpbWFn
ZSA9IENHSW1hZ2VDcmVhdGUoYnVmZmVyLndpZHRoKCksIGJ1ZmZlci5oZWlnaHQoKSwgYml0c1Bl
ckNvbXBvbmVudCwgYml0c1BlclBpeGVsLCBidWZmZXIuYnl0ZXNQZXJSb3coKSwgY29sb3JTcGFj
ZSwgYWxwaGFJbmZvLCBwcm92aWRlciwgMCwgZmFsc2UsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1
bHQpOworIAorQmFpbDoKKyAgICAvLyBPbmNlIHRoZSBpbWFnZSBpcyBjcmVhdGVkIHdlIGNhbiBy
ZWxlYXNlIG91ciByZWZlcmVuY2UgdG8gdGhlIHByb3ZpZGVyIGFuZCB0aGUgY29sb3JzcGFjZSwg
dGhleSBhcmUgcmV0YWluZWQgYnkgdGhlIGltYWdlCisgICAgaWYgKHByb3ZpZGVyKQorICAgICAg
ICBDR0RhdGFQcm92aWRlclJlbGVhc2UocHJvdmlkZXIpOworICAgIGlmIChjb2xvclNwYWNlKQor
ICAgICAgICBDR0NvbG9yU3BhY2VSZWxlYXNlKGNvbG9yU3BhY2UpOworIAorICAgIHJldHVybiBp
bWFnZTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnBhaW50Q29tcGxldGVkKEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKKwordm9pZCBNZWRpYVBs
YXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpyZXRyaWV2ZUN1cnJlbnRJbWFnZSgp
CiB7Ci0gICAgbV9uZXdGcmFtZUF2YWlsYWJsZSA9IGZhbHNlOworICAgIGlmICghbV92aXN1YWxD
b250ZXh0KQorICAgICAgICByZXR1cm47CiAKLSNpZiBEUkFXX0ZSQU1FX1JBVEUKLSAgICBpZiAo
bV9mcmFtZUNvdW50V2hpbGVQbGF5aW5nID4gMTApIHsKLSAgICAgICAgZG91YmxlIGludGVydmFs
ID0gIG1fc3RhcnRlZFBsYXlpbmcgPyBXVEY6OmN1cnJlbnRUaW1lKCkgLSBtX3RpbWVTdGFydGVk
UGxheWluZyA6IG1fdGltZVN0b3BwZWRQbGF5aW5nIC0gbV90aW1lU3RhcnRlZFBsYXlpbmc7Ci0g
ICAgICAgIGRvdWJsZSBmcmFtZVJhdGUgPSAobV9mcmFtZUNvdW50V2hpbGVQbGF5aW5nIC0gMSkg
LyBpbnRlcnZhbDsKLSAgICAgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IGNvbnRleHQucGxh
dGZvcm1Db250ZXh0KCk7Ci0gICAgICAgIENHUmVjdCBkcmF3UmVjdCA9IHJlY3Q7CisgICAgaWYg
KCFtX3F0VmlkZW9MYXllcikKKyAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGNoYXIgdGV4dFs4
XTsKLSAgICAgICAgX3NucHJpbnRmKHRleHQsIHNpemVvZih0ZXh0KSwgIiUxLjJmIiwgZnJhbWVS
YXRlKTsKKyAgICBRVFBpeGVsQnVmZmVyIGJ1ZmZlciA9IG1fdmlzdWFsQ29udGV4dC0+aW1hZ2VG
b3JUaW1lKDApOworICAgIGlmICghYnVmZmVyLmdldCgpKQorICAgICAgICByZXR1cm47CiAKLSAg
ICAgICAgc3RhdGljIGNvbnN0IGludCBmb250U2l6ZSA9IDI1OwotICAgICAgICBzdGF0aWMgY29u
c3QgaW50IGZvbnRDaGFyV2lkdGggPSAxMjsKLSAgICAgICAgc3RhdGljIGNvbnN0IGludCBib3hI
ZWlnaHQgPSAyNTsKLSAgICAgICAgc3RhdGljIGNvbnN0IGludCBib3hCb3JkZXJXaWR0aCA9IDQ7
Ci0gICAgICAgIGRyYXdSZWN0LnNpemUud2lkdGggPSBib3hCb3JkZXJXaWR0aCAqIDIgKyBmb250
Q2hhcldpZHRoICogc3RybGVuKHRleHQpOwotICAgICAgICBkcmF3UmVjdC5zaXplLmhlaWdodCA9
IGJveEhlaWdodDsKKyAgICBXS0NBQ0ZMYXllciogbGF5ZXIgPSBzdGF0aWNfY2FzdDxXS0NBQ0ZM
YXllcio+KG1fcXRWaWRlb0xheWVyLT5wbGF0Zm9ybUxheWVyKCkpOwogCi0gICAgICAgIENHQ29u
dGV4dFNhdmVHU3RhdGUoY2dDb250ZXh0KTsKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCi0gICAgICAgIGlmIChtX3F0VmlkZW9MYXllcikKLSAgICAgICAgICAgIENHQ29udGV4dFNj
YWxlQ1RNKGNnQ29udGV4dCwgMSwgLTEpOwotICAgICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0o
Y2dDb250ZXh0LCByZWN0LndpZHRoKCkgLSBkcmF3UmVjdC5zaXplLndpZHRoLCBtX3F0VmlkZW9M
YXllciA/IC1yZWN0LmhlaWdodCgpIDogMCk7CisgICAgaWYgKGJ1ZmZlci5sb2NrQmFzZUFkZHJl
c3MoKSA9PSBrQ1ZSZXR1cm5TdWNjZXNzKSB7CisjaWZuZGVmIE5ERUJVRworICAgICAgICAvLyBE
ZWJ1ZyBRdWlja1RpbWUgbGlua3MgYWdhaW5zdCBhIG5vbi1EZWJ1ZyB2ZXJzaW9uIG9mIENvcmVG
b3VuZGF0aW9uLCBzbyB0aGUgQ0ZEaWN0aW9uYXJ5IGF0dGFjaGVkIHRvIHRoZSBDVlBpeGVsQnVm
ZmVyIGNhbm5vdCBiZSBkaXJlY3RseSBwYXNzZWQgb24gaW50byB0aGUgQ0FJbWFnZVF1ZXVlIHdp
dGhvdXQgYmVpbmcgY29udmVydGVkIHRvIGEgbm9uLURlYnVnIENGRGljdGlvbmFyeToKKyAgICAg
ICAgQ0ZEaWN0aW9uYXJ5UmVmIGF0dGFjaG1lbnRzID0gUVRDRkRpY3Rpb25hcnlDcmVhdGVDb3B5
V2l0aERhdGFDYWxsYmFjayhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBidWZmZXIuYXR0YWNobWVudHMo
KSwgJlFUQ0ZEaWN0aW9uYXJ5Q3JlYXRlV2l0aERhdGFDYWxsYmFjayk7CiAjZWxzZQotICAgICAg
ICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY2dDb250ZXh0LCByZWN0LndpZHRoKCkgLSBkcmF3UmVj
dC5zaXplLndpZHRoLCAwKTsKKyAgICAgICAgLy8gSG93ZXZlciwgdGhpcyBpcyB1bm5lY3NzZXNh
cnkgaW4gdGhlIG5vbi1EZWJ1ZyBjYXNlOgorICAgICAgICBDRkRpY3Rpb25hcnlSZWYgYXR0YWNo
bWVudHMgPSBzdGF0aWNfY2FzdDxDRkRpY3Rpb25hcnlSZWY+KENGUmV0YWluKGJ1ZmZlci5hdHRh
Y2htZW50cygpKSk7CiAjZW5kaWYKLSAgICAgICAgc3RhdGljIGNvbnN0IENHRmxvYXQgYmFja2dy
b3VuZENvbG9yWzRdID0geyAwLjk4LCAwLjk4LCAwLjgyLCAwLjggfTsKLSAgICAgICAgQ0dDb250
ZXh0U2V0RmlsbENvbG9yKGNnQ29udGV4dCwgYmFja2dyb3VuZENvbG9yKTsKLSAgICAgICAgQ0dD
b250ZXh0RmlsbFJlY3QoY2dDb250ZXh0LCBkcmF3UmVjdCk7CiAKLSAgICAgICAgc3RhdGljIGNv
bnN0IENHRmxvYXQgdGV4dENvbG9yWzRdID0geyAwLCAwLCAwLCAxIH07Ci0gICAgICAgIENHQ29u
dGV4dFNldEZpbGxDb2xvcihjZ0NvbnRleHQsIHRleHRDb2xvcik7Ci0gICAgICAgIENHQ29udGV4
dFNldFRleHRNYXRyaXgoY2dDb250ZXh0LCBDR0FmZmluZVRyYW5zZm9ybU1ha2VTY2FsZSgxLCAt
MSkpOwotICAgICAgICBDR0NvbnRleHRTZWxlY3RGb250KGNnQ29udGV4dCwgIkhlbHZldGljYSIs
IGZvbnRTaXplLCBrQ0dFbmNvZGluZ01hY1JvbWFuKTsKKyAgICAgICAgQ0ZUaW1lSW50ZXJ2YWwg
aW1hZ2VUaW1lID0gQ1ZHZXRDdXJyZW50SG9zdFRpbWUoKSAvIENWR2V0SG9zdENsb2NrRnJlcXVl
bmN5KCk7CiAKLSAgICAgICAgQ0dDb250ZXh0U2hvd1RleHRBdFBvaW50KGNnQ29udGV4dCwgZHJh
d1JlY3Qub3JpZ2luLnggKyBib3hCb3JkZXJXaWR0aCwgZHJhd1JlY3Qub3JpZ2luLnkgKyBib3hI
ZWlnaHQgLSBib3hCb3JkZXJXaWR0aCwgdGV4dCwgc3RybGVuKHRleHQpKTsKLSAgICAgICAgCi0g
ICAgICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY2dDb250ZXh0KTsgICAgICAgIAorICAgICAg
ICBDR0ltYWdlUmVmIGltYWdlID0gQ3JlYXRlQ0dJbWFnZUZyb21QaXhlbEJ1ZmZlcihidWZmZXIp
OworICAgICAgICBsYXllci0+c2V0Q29udGVudHMoaW1hZ2UpOworICAgICAgICBDR0ltYWdlUmVs
ZWFzZShpbWFnZSk7CisKKyAgICAgICAgaWYgKGF0dGFjaG1lbnRzKQorICAgICAgICAgICAgQ0ZS
ZWxlYXNlKGF0dGFjaG1lbnRzKTsKKworICAgICAgICBidWZmZXIudW5sb2NrQmFzZUFkZHJlc3Mo
KTsKKyAgICAgICAgbGF5ZXItPnJvb3RMYXllcigpLT5zZXROZWVkc1JlbmRlcigpOwogICAgIH0K
LSNlbmRpZgorICAgIG1fdmlzdWFsQ29udGV4dC0+dGFzaygpOwogfQogCiBzdGF0aWMgSGFzaFNl
dDxTdHJpbmc+IG1pbWVUeXBlQ2FjaGUoKQpAQCAtNzE5LDExICs3NjUsMTEgQEANCiAgICAgc3Rh
dGljIGJvb2wgdHlwZUxpc3RJbml0aWFsaXplZCA9IGZhbHNlOwogCiAgICAgaWYgKCF0eXBlTGlz
dEluaXRpYWxpemVkKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNvdW50ID0gUVRNb3ZpZVdpbjo6Y291
bnRTdXBwb3J0ZWRUeXBlcygpOworICAgICAgICB1bnNpZ25lZCBjb3VudCA9IFFUTW92aWU6OmNv
dW50U3VwcG9ydGVkVHlwZXMoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IGNv
dW50OyBuKyspIHsKICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXI7CiAgICAgICAg
ICAgICB1bnNpZ25lZCBsZW47Ci0gICAgICAgICAgICBRVE1vdmllV2luOjpnZXRTdXBwb3J0ZWRU
eXBlKG4sIGNoYXJhY3RlciwgbGVuKTsKKyAgICAgICAgICAgIFFUTW92aWU6OmdldFN1cHBvcnRl
ZFR5cGUobiwgY2hhcmFjdGVyLCBsZW4pOwogICAgICAgICAgICAgaWYgKGxlbikKICAgICAgICAg
ICAgICAgICB0eXBlQ2FjaGUuYWRkKFN0cmluZyhjaGFyYWN0ZXIsIGxlbikpOwogICAgICAgICB9
CkBAIC03MzIsODkgKzc3OCw2NSBAQA0KICAgICB9CiAgICAgCiAgICAgcmV0dXJuIHR5cGVDYWNo
ZTsKLX0gCit9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpnZXRTdXBwb3J0ZWRUeXBlcyhI
YXNoU2V0PFN0cmluZz4mIHR5cGVzKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVW
aXN1YWxDb250ZXh0OjpnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZz4mIHR5cGVzKQog
ewogICAgIHR5cGVzID0gbWltZVR5cGVDYWNoZSgpOwogfSAKIAotYm9vbCBNZWRpYVBsYXllclBy
aXZhdGU6OmlzQXZhaWxhYmxlKCkKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlz
dWFsQ29udGV4dDo6aXNBdmFpbGFibGUoKQogewotICAgIHJldHVybiBRVE1vdmllV2luOjppbml0
aWFsaXplUXVpY2tUaW1lKCk7CisgICAgcmV0dXJuIFFUTW92aWU6OmluaXRpYWxpemVRdWlja1Rp
bWUoKTsKIH0KIAotTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBNZWRpYVBsYXllclByaXZhdGU6
OnN1cHBvcnRzVHlwZShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgY29kZWNzKQor
TWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1
YWxDb250ZXh0OjpzdXBwb3J0c1R5cGUoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcm
IGNvZGVjcykKIHsKICAgICAvLyBvbmx5IHJldHVybiAiSXNTdXBwb3J0ZWQiIGlmIHRoZXJlIGlz
IG5vIGNvZGVjcyBwYXJhbWV0ZXIgZm9yIG5vdyBhcyB0aGVyZSBpcyBubyB3YXkgdG8gYXNrIFFU
IGlmIGl0IHN1cHBvcnRzIGFuCiAgICAgLy8gIGV4dGVuZGVkIE1JTUUgdHlwZQogICAgIHJldHVy
biBtaW1lVHlwZUNhY2hlKCkuY29udGFpbnModHlwZSkgPyAoY29kZWNzLmlzRW1wdHkoKSA/IE1l
ZGlhUGxheWVyOjpNYXlCZVN1cHBvcnRlZCA6IE1lZGlhUGxheWVyOjpJc1N1cHBvcnRlZCkgOiBN
ZWRpYVBsYXllcjo6SXNOb3RTdXBwb3J0ZWQ7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
Ojptb3ZpZUVuZGVkKFFUTW92aWVXaW4qIG1vdmllKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVR
dWlja1RpbWVWaXN1YWxDb250ZXh0OjpNb3ZpZUNsaWVudDo6bW92aWVFbmRlZChRVE1vdmllKiBt
b3ZpZSkKIHsKLSAgICBpZiAobV9oYXNVbnN1cHBvcnRlZFRyYWNrcykKKyAgICBpZiAobV9wYXJl
bnQtPm1faGFzVW5zdXBwb3J0ZWRUcmFja3MpCiAgICAgICAgIHJldHVybjsKIAotICAgIEFTU0VS
VChtX3F0TW92aWUuZ2V0KCkgPT0gbW92aWUpOwotICAgIGRpZEVuZCgpOwotfQorICAgIG1fcGFy
ZW50LT5tX3Zpc3VhbENvbnRleHRUaW1lci5zdG9wKCk7CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlOjptb3ZpZUxvYWRTdGF0ZUNoYW5nZWQoUVRNb3ZpZVdpbiogbW92aWUpCi17Ci0gICAgaWYg
KG1faGFzVW5zdXBwb3J0ZWRUcmFja3MpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVCht
X3F0TW92aWUuZ2V0KCkgPT0gbW92aWUpOwotICAgIHVwZGF0ZVN0YXRlcygpOworICAgIEFTU0VS
VChtX3BhcmVudC0+bV9tb3ZpZS5nZXQoKSA9PSBtb3ZpZSk7CisgICAgbV9wYXJlbnQtPmRpZEVu
ZCgpOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6bW92aWVUaW1lQ2hhbmdlZChRVE1v
dmllV2luKiBtb3ZpZSkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29u
dGV4dDo6TW92aWVDbGllbnQ6Om1vdmllTG9hZFN0YXRlQ2hhbmdlZChRVE1vdmllKiBtb3ZpZSkK
IHsKLSAgICBpZiAobV9oYXNVbnN1cHBvcnRlZFRyYWNrcykKKyAgICBpZiAobV9wYXJlbnQtPm1f
aGFzVW5zdXBwb3J0ZWRUcmFja3MpCiAgICAgICAgIHJldHVybjsKIAotICAgIEFTU0VSVChtX3F0
TW92aWUuZ2V0KCkgPT0gbW92aWUpOwotICAgIHVwZGF0ZVN0YXRlcygpOwotICAgIG1fcGxheWVy
LT50aW1lQ2hhbmdlZCgpOworICAgIEFTU0VSVChtX3BhcmVudC0+bV9tb3ZpZS5nZXQoKSA9PSBt
b3ZpZSk7CisgICAgbV9wYXJlbnQtPnVwZGF0ZVN0YXRlcygpOwogfQogCi12b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZTo6bW92aWVOZXdJbWFnZUF2YWlsYWJsZShRVE1vdmllV2luKiBtb3ZpZSkKK3Zv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6TW92aWVDbGllbnQ6
Om1vdmllVGltZUNoYW5nZWQoUVRNb3ZpZSogbW92aWUpCiB7Ci0gICAgaWYgKG1faGFzVW5zdXBw
b3J0ZWRUcmFja3MpCisgICAgaWYgKG1fcGFyZW50LT5tX2hhc1Vuc3VwcG9ydGVkVHJhY2tzKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQobV9xdE1vdmllLmdldCgpID09IG1vdmllKTsK
LSNpZiBEUkFXX0ZSQU1FX1JBVEUKLSAgICBpZiAobV9zdGFydGVkUGxheWluZykgewotICAgICAg
ICBtX2ZyYW1lQ291bnRXaGlsZVBsYXlpbmcrKzsKLSAgICAgICAgLy8gVG8gZWxpbWluYXRlIHBy
ZXJvbGwgY29zdHMgZnJvbSBvdXIgY2FsY3VsYXRpb24sIG91ciBmcmFtZSByYXRlIGNhbGN1bGF0
aW9uIGV4Y2x1ZGVzCi0gICAgICAgIC8vIHRoZSBmaXJzdCBmcmFtZSBkcmF3biBhZnRlciBwbGF5
YmFjayBzdGFydHMuCi0gICAgICAgIGlmIChtX2ZyYW1lQ291bnRXaGlsZVBsYXlpbmcgPT0gMSkK
LSAgICAgICAgICAgIG1fdGltZVN0YXJ0ZWRQbGF5aW5nID0gV1RGOjpjdXJyZW50VGltZSgpOwot
ICAgIH0KLSNlbmRpZgotCi0gICAgbV9uZXdGcmFtZUF2YWlsYWJsZSA9IHRydWU7Ci0KLSNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgaWYgKG1fcXRWaWRlb0xheWVyKQotICAg
ICAgICBtX3F0VmlkZW9MYXllci0+cGxhdGZvcm1MYXllcigpLT5zZXROZWVkc0Rpc3BsYXkoKTsK
LSAgICBlbHNlCi0jZW5kaWYKLSAgICAgICAgbV9wbGF5ZXItPnJlcGFpbnQoKTsKKyAgICBBU1NF
UlQobV9wYXJlbnQtPm1fbW92aWUuZ2V0KCkgPT0gbW92aWUpOworICAgIG1fcGFyZW50LT51cGRh
dGVTdGF0ZXMoKTsKKyAgICBtX3BhcmVudC0+bV9wbGF5ZXItPnRpbWVDaGFuZ2VkKCk7CiB9CiAK
LWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlOjpoYXNTaW5nbGVTZWN1cml0eU9yaWdpbigpIGNvbnN0
Citib29sIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6Omhhc1Npbmds
ZVNlY3VyaXR5T3JpZ2luKCkgY29uc3QKIHsKICAgICAvLyBXZSB0ZWxsIHF1aWNrdGltZSB0byBk
aXNhbGxvdyByZXNvdXJjZXMgdGhhdCBjb21lIGZyb20gZGlmZmVyZW50IG9yaWdpbnMKICAgICAv
LyBzbyB3ZSBhbGwgbWVkaWEgaXMgc2luZ2xlIG9yaWdpbi4KICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotTWVkaWFQbGF5ZXJQcml2YXRlOjpNZWRpYVJlbmRlcmluZ01vZGUgTWVkaWFQbGF5ZXJQcml2
YXRlOjpjdXJyZW50UmVuZGVyaW5nTW9kZSgpIGNvbnN0CitNZWRpYVBsYXllclByaXZhdGVRdWlj
a1RpbWVWaXN1YWxDb250ZXh0OjpNZWRpYVJlbmRlcmluZ01vZGUgTWVkaWFQbGF5ZXJQcml2YXRl
UXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6Y3VycmVudFJlbmRlcmluZ01vZGUoKSBjb25zdAogewot
ICAgIGlmICghbV9xdE1vdmllKQorICAgIGlmICghbV9tb3ZpZSkKICAgICAgICAgcmV0dXJuIE1l
ZGlhUmVuZGVyaW5nTm9uZTsKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKQEAg
LTgyNSw5ICs4NDcsOSBAQA0KICAgICByZXR1cm4gTWVkaWFSZW5kZXJpbmdTb2Z0d2FyZVJlbmRl
cmVyOwogfQogCi1NZWRpYVBsYXllclByaXZhdGU6Ok1lZGlhUmVuZGVyaW5nTW9kZSBNZWRpYVBs
YXllclByaXZhdGU6OnByZWZlcnJlZFJlbmRlcmluZ01vZGUoKSBjb25zdAorTWVkaWFQbGF5ZXJQ
cml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6TWVkaWFSZW5kZXJpbmdNb2RlIE1lZGlhUGxh
eWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OnByZWZlcnJlZFJlbmRlcmluZ01vZGUo
KSBjb25zdAogewotICAgIGlmICghbV9wbGF5ZXItPmZyYW1lVmlldygpIHx8ICFtX3F0TW92aWUp
CisgICAgaWYgKCFtX3BsYXllci0+ZnJhbWVWaWV3KCkgfHwgIW1fbW92aWUpCiAgICAgICAgIHJl
dHVybiBNZWRpYVJlbmRlcmluZ05vbmU7CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCkBAIC04MzgsNyArODYwLDcgQEANCiAgICAgcmV0dXJuIE1lZGlhUmVuZGVyaW5nU29mdHdh
cmVSZW5kZXJlcjsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNldFVwVmlkZW9SZW5k
ZXJpbmcoKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0Ojpz
ZXRVcFZpZGVvUmVuZGVyaW5nKCkKIHsKICAgICBNZWRpYVJlbmRlcmluZ01vZGUgY3VycmVudE1v
ZGUgPSBjdXJyZW50UmVuZGVyaW5nTW9kZSgpOwogICAgIE1lZGlhUmVuZGVyaW5nTW9kZSBwcmVm
ZXJyZWRNb2RlID0gcHJlZmVycmVkUmVuZGVyaW5nTW9kZSgpOwpAQCAtODYwLDE3ICs4ODIsMjEg
QEANCiAgICAgaWYgKGN1cnJlbnRNb2RlID09IE1lZGlhUmVuZGVyaW5nTW92aWVMYXllciB8fCBw
cmVmZXJyZWRNb2RlID09IE1lZGlhUmVuZGVyaW5nTW92aWVMYXllcikKICAgICAgICAgbV9wbGF5
ZXItPm1lZGlhUGxheWVyQ2xpZW50KCktPm1lZGlhUGxheWVyUmVuZGVyaW5nTW9kZUNoYW5nZWQo
bV9wbGF5ZXIpOwogI2VuZGlmCisKKyAgICBtX3Zpc3VhbENvbnRleHQtPnNldE1vdmllKG1fbW92
aWUuZ2V0KCkpOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6dGVhckRvd25WaWRlb1Jl
bmRlcmluZygpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6
OnRlYXJEb3duVmlkZW9SZW5kZXJpbmcoKQogewogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKICAgICBpZiAobV9xdFZpZGVvTGF5ZXIpCiAgICAgICAgIGRlc3Ryb3lMYXllckZvck1v
dmllKCk7CiAjZW5kaWYKKworICAgIG1fdmlzdWFsQ29udGV4dC0+c2V0TW92aWUoMCk7CiB9CiAK
LWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlOjpoYXNTZXRVcFZpZGVvUmVuZGVyaW5nKCkgY29uc3QK
K2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6aGFzU2V0VXBW
aWRlb1JlbmRlcmluZygpIGNvbnN0CiB7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQogICAgIHJldHVybiBtX3F0VmlkZW9MYXllciB8fCBjdXJyZW50UmVuZGVyaW5nTW9kZSgpICE9
IE1lZGlhUmVuZGVyaW5nTW92aWVMYXllcjsKQEAgLTg3OSw1NiArOTA1LDE4IEBADQogI2VuZGlm
CiB9CiAKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0KLS8vIFVwLWNhbGwgZnJv
bSBjb21wb3NpdGluZyBsYXllciBkcmF3aW5nIGNhbGxiYWNrLgotdm9pZCBNZWRpYVBsYXllclBy
aXZhdGU6OnBhaW50Q29udGVudHMoY29uc3QgR3JhcGhpY3NMYXllciosIEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgR3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IEludFJlY3QmKQor
dm9pZCBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpjcmVhdGVMYXll
ckZvck1vdmllKCkKIHsKLSAgICAgaWYgKG1faGFzVW5zdXBwb3J0ZWRUcmFja3MpCi0gICAgICAg
ICByZXR1cm47Ci0KLSAgICBBU1NFUlQoc3VwcG9ydHNBY2NlbGVyYXRlZFJlbmRlcmluZygpKTsK
LQotICAgIC8vIE5vIHJlYXNvbiB0byByZXBsYWNlIHRoZSBjdXJyZW50IGxheWVyIGltYWdlIHVu
bGVzcyB3ZSBoYXZlIHNvbWV0aGluZyBuZXcgdG8gc2hvdy4KLSAgICBpZiAoIW1fbmV3RnJhbWVB
dmFpbGFibGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIHN0YXRpYyBDR0NvbG9yU3BhY2VSZWYg
Y29sb3JTcGFjZSA9IENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpOwotICAgIHZvaWQqIGJ1
ZmZlcjsKLSAgICB1bnNpZ25lZCBiaXRzUGVyUGl4ZWw7Ci0gICAgdW5zaWduZWQgcm93Qnl0ZXM7
Ci0gICAgdW5zaWduZWQgd2lkdGg7Ci0gICAgdW5zaWduZWQgaGVpZ2h0OwotCi0gICAgbV9xdE1v
dmllLT5nZXRDdXJyZW50RnJhbWVJbmZvKGJ1ZmZlciwgYml0c1BlclBpeGVsLCByb3dCeXRlcywg
d2lkdGgsIGhlaWdodCk7Ci0gICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVybiA7Ci0KLSAg
ICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBkYXRhKEFkb3B0Q0YsIENGRGF0YUNyZWF0ZVdpdGhCeXRl
c05vQ29weSgwLCBzdGF0aWNfY2FzdDxVSW50OCo+KGJ1ZmZlciksIHJvd0J5dGVzICogaGVpZ2h0
LCBrQ0ZBbGxvY2F0b3JOdWxsKSk7Ci0gICAgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVyUmVmPiBw
cm92aWRlcihBZG9wdENGLCBDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhDRkRhdGEoZGF0YS5nZXQo
KSkpOwotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBmcmFtZUltYWdlKEFkb3B0Q0YsIENHSW1h
Z2VDcmVhdGUod2lkdGgsIGhlaWdodCwgOCwgYml0c1BlclBpeGVsLCByb3dCeXRlcywgY29sb3JT
cGFjZSwgCi0gICAgICAgIGtDR0JpdG1hcEJ5dGVPcmRlcjMyTGl0dGxlIHwga0NHSW1hZ2VBbHBo
YUZpcnN0LCBwcm92aWRlci5nZXQoKSwgMCwgZmFsc2UsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1
bHQpKTsKLSAgICBpZiAoIWZyYW1lSW1hZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIEludFJl
Y3QgcmVjdCgwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsKLSAgICBDR0Nv
bnRleHREcmF3SW1hZ2UoY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwgZnJhbWVJbWFn
ZS5nZXQoKSk7IAotICAgIHBhaW50Q29tcGxldGVkKGNvbnRleHQsIHJlY3QpOwotfQotI2VuZGlm
Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpjcmVhdGVMYXllckZvck1vdmllKCkKLXsKICNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgQVNTRVJUKHN1cHBvcnRzQWNjZWxl
cmF0ZWRSZW5kZXJpbmcoKSk7CiAKLSAgICBpZiAoIW1fcXRNb3ZpZSB8fCBtX3F0VmlkZW9MYXll
cikKKyAgICBpZiAoIW1fbW92aWUgfHwgbV9xdFZpZGVvTGF5ZXIpCiAgICAgICAgIHJldHVybjsK
IAogICAgIC8vIENyZWF0ZSBhIEdyYXBoaWNzTGF5ZXIgdGhhdCB3b24ndCBiZSBpbnNlcnRlZCBk
aXJlY3RseSBpbnRvIHRoZSByZW5kZXIgdHJlZSwgYnV0IHdpbGwgdXNlZCAKICAgICAvLyBhcyBh
IHdyYXBwZXIgZm9yIGEgV0tDQUNGTGF5ZXIgd2hpY2ggZ2V0cyBpbnNlcnRlZCBhcyB0aGUgY29u
dGVudCBsYXllciBvZiB0aGUgdmlkZW8gCiAgICAgLy8gcmVuZGVyZXIncyBHcmFwaGljc0xheWVy
LgotICAgIG1fcXRWaWRlb0xheWVyLnNldChuZXcgR3JhcGhpY3NMYXllckNBQ0YodGhpcykpOwor
ICAgIG1fcXRWaWRlb0xheWVyLnNldChuZXcgR3JhcGhpY3NMYXllckNBQ0YobV9sYXllckNsaWVu
dC5nZXQoKSkpOwogICAgIGlmICghbV9xdFZpZGVvTGF5ZXIpCiAgICAgICAgIHJldHVybjsKIApA
QCAtOTQzLDcgKzkzMSw3IEBADQogI2VuZGlmCiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
OjpkZXN0cm95TGF5ZXJGb3JNb3ZpZSgpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGlt
ZVZpc3VhbENvbnRleHQ6OmRlc3Ryb3lMYXllckZvck1vdmllKCkKIHsKICNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCiAgICAgaWYgKCFtX3F0VmlkZW9MYXllcikKQEAgLTk1MiwxMyAr
OTQwLDE3IEBADQogI2VuZGlmCiB9CiAKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1l
VmlzdWFsQ29udGV4dDo6TGF5ZXJDbGllbnQ6OnBhaW50Q29udGVudHMoY29uc3QgR3JhcGhpY3NM
YXllciosIEdyYXBoaWNzQ29udGV4dCYsIEdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25z
dCBJbnRSZWN0JiBpbkNsaXApCit7Cit9CisKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6c3VwcG9ydHNBY2NlbGVyYXRlZFJlbmRlcmlu
ZygpIGNvbnN0Citib29sIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6
OnN1cHBvcnRzQWNjZWxlcmF0ZWRSZW5kZXJpbmcoKSBjb25zdAogewogICAgIHJldHVybiBpc1Jl
YWR5Rm9yUmVuZGVyaW5nKCk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjphY2NlbGVy
YXRlZFJlbmRlcmluZ1N0YXRlQ2hhbmdlZCgpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNr
VGltZVZpc3VhbENvbnRleHQ6OmFjY2VsZXJhdGVkUmVuZGVyaW5nU3RhdGVDaGFuZ2VkKCkKIHsK
ICAgICAvLyBTZXQgdXAgb3IgY2hhbmdlIHRoZSByZW5kZXJpbmcgcGF0aCBpZiBuZWNlc3Nhcnku
CiAgICAgc2V0VXBWaWRlb1JlbmRlcmluZygpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dC5oDQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09DQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2
YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dC5oCShyZXZpc2lvbiA1NzY2MykNCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxD
b250ZXh0LmgJKHdvcmtpbmcgY29weSkNCkBAIC0yMywyNiArMjMsMjUgQEANCiAgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKICAqLwogCi0jaWZuZGVmIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0X2gKLSNkZWZpbmUg
TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXRfaAorI2lmbmRlZiBNZWRpYVBsYXllclByaXZhdGVRdWlj
a1RpbWVWaXN1YWxDb250ZXh0X2gKKyNkZWZpbmUgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1l
VmlzdWFsQ29udGV4dF9oCiAKICNpZiBFTkFCTEUoVklERU8pCiAKKyNpbmNsdWRlICJHcmFwaGlj
c0xheWVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlLmgiCiAjaW5jbHVk
ZSAiVGltZXIuaCIKLSNpbmNsdWRlIDxRVE1vdmllV2luLmg+CiAjaW5jbHVkZSA8d3RmL093blB0
ci5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIAotI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKLSNpbmNsdWRlICJHcmFwaGljc0xheWVyQ2xpZW50LmgiCi0jZW5kaWYgCi0K
ICNpZm5kZWYgRFJBV19GUkFNRV9SQVRFCiAjZGVmaW5lIERSQVdfRlJBTUVfUkFURSAwCiAjZW5k
aWYKIAogdHlwZWRlZiBzdHJ1Y3QgQ0dJbWFnZSAqQ0dJbWFnZVJlZjsKK2NsYXNzIFFUTW92aWU7
CitjbGFzcyBRVE1vdmllVmlzdWFsQ29udGV4dDsKK2NsYXNzIFdLQ0FJbWFnZVF1ZXVlOwogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTUxLDM0ICs1MCwxOCBAQA0KIGNsYXNzIEludFJlY3Q7
CiBjbGFzcyBTdHJpbmc7CiAKLWNsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZSA6IHB1YmxpYyBNZWRp
YVBsYXllclByaXZhdGVJbnRlcmZhY2UsIHB1YmxpYyBRVE1vdmllV2luQ2xpZW50IAotI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICAgICAgLCBwdWJsaWMgR3JhcGhpY3NMYXll
ckNsaWVudAotI2VuZGlmIAoteworY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlz
dWFsQ29udGV4dCA6IHB1YmxpYyBNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2UgewogcHVibGlj
OgogICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyTWVkaWFFbmdpbmUoTWVkaWFFbmdpbmVSZWdpc3Ry
YXIpOwogCi0gICAgfk1lZGlhUGxheWVyUHJpdmF0ZSgpOworICAgIH5NZWRpYVBsYXllclByaXZh
dGVRdWlja1RpbWVWaXN1YWxDb250ZXh0KCk7CiAKIHByaXZhdGU6CisgICAgTWVkaWFQbGF5ZXJQ
cml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dChNZWRpYVBsYXllciopOwogCi0jaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIC8vIEdyYXBoaWNzTGF5ZXJDbGllbnQgbWV0aG9k
cwotICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBH
cmFwaGljc0NvbnRleHQmLCBHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgSW50UmVj
dCYgaW5DbGlwKTsKLSAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QW5pbWF0aW9uU3RhcnRlZChjb25z
dCBHcmFwaGljc0xheWVyKiwgZG91YmxlIHRpbWUpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBub3Rp
ZnlTeW5jUmVxdWlyZWQoY29uc3QgR3JhcGhpY3NMYXllciopIHsgfQotICAgIHZpcnR1YWwgYm9v
bCBzaG93RGVidWdCb3JkZXJzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFs
IGJvb2wgc2hvd1JlcGFpbnRDb3VudGVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSNlbmRp
ZiAKLQotICAgIE1lZGlhUGxheWVyUHJpdmF0ZShNZWRpYVBsYXllciopOwotCiAgICAgdmlydHVh
bCBib29sIHN1cHBvcnRzRnVsbHNjcmVlbigpIGNvbnN0OwogICAgIHZpcnR1YWwgUGxhdGZvcm1N
ZWRpYSBwbGF0Zm9ybU1lZGlhKCkgY29uc3Q7Ci0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQogICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdDsKLSNlbmRpZgog
CiAgICAgSW50U2l6ZSBuYXR1cmFsU2l6ZSgpIGNvbnN0OwogICAgIGJvb2wgaGFzVmlkZW8oKSBj
b25zdDsKQEAgLTEyNiwyNSArMTA5LDE4IEBADQogICAgIHZvaWQgdXBkYXRlU3RhdGVzKCk7CiAg
ICAgdm9pZCBkb1NlZWsoKTsKICAgICB2b2lkIGNhbmNlbFNlZWsoKTsKLSAgICB2b2lkIHNlZWtU
aW1lckZpcmVkKFRpbWVyPE1lZGlhUGxheWVyUHJpdmF0ZT4qKTsKKyAgICB2b2lkIHNlZWtUaW1l
ckZpcmVkKFRpbWVyPE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ+Kik7
CiAgICAgZmxvYXQgbWF4VGltZUxvYWRlZCgpIGNvbnN0OwogICAgIHZvaWQgc2F3VW5zdXBwb3J0
ZWRUcmFja3MoKTsKIAotICAgIHZpcnR1YWwgdm9pZCBtb3ZpZUVuZGVkKFFUTW92aWVXaW4qKTsK
LSAgICB2aXJ0dWFsIHZvaWQgbW92aWVMb2FkU3RhdGVDaGFuZ2VkKFFUTW92aWVXaW4qKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgbW92aWVUaW1lQ2hhbmdlZChRVE1vdmllV2luKik7Ci0gICAgdmlydHVh
bCB2b2lkIG1vdmllTmV3SW1hZ2VBdmFpbGFibGUoUVRNb3ZpZVdpbiopOwotCiAgICAgLy8gZW5n
aW5lIHN1cHBvcnQKICAgICBzdGF0aWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlKiBjcmVh
dGUoTWVkaWFQbGF5ZXIqKTsKICAgICBzdGF0aWMgdm9pZCBnZXRTdXBwb3J0ZWRUeXBlcyhIYXNo
U2V0PFN0cmluZz4mIHR5cGVzKTsKICAgICBzdGF0aWMgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlw
ZSBzdXBwb3J0c1R5cGUoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGNvZGVjcyk7
CiAgICAgc3RhdGljIGJvb2wgaXNBdmFpbGFibGUoKTsKIAotI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNBY2NlbGVyYXRlZFJlbmRlcmlu
ZygpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBhY2NlbGVyYXRlZFJlbmRlcmluZ1N0YXRlQ2hh
bmdlZCgpOwotI2VuZGlmCiAKICAgICBlbnVtIE1lZGlhUmVuZGVyaW5nTW9kZSB7IE1lZGlhUmVu
ZGVyaW5nTm9uZSwgTWVkaWFSZW5kZXJpbmdTb2Z0d2FyZVJlbmRlcmVyLCBNZWRpYVJlbmRlcmlu
Z01vdmllTGF5ZXIgfTsKICAgICBNZWRpYVJlbmRlcmluZ01vZGUgY3VycmVudFJlbmRlcmluZ01v
ZGUoKSBjb25zdDsKQEAgLTE2MSwxMyArMTM3LDI4IEBADQogICAgIHZvaWQgc2V0VXBDb29raWVz
Rm9yUXVpY2tUaW1lKGNvbnN0IFN0cmluZyYgdXJsKTsKICAgICBTdHJpbmcgcmZjMjYxNkRhdGVT
dHJpbmdGcm9tVGltZShDRkFic29sdXRlVGltZSk7CiAKKyAgICB2b2lkIHZpc3VhbENvbnRleHRU
aW1lckZpcmVkKFRpbWVyPE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ+
Kik7CisgICAgdm9pZCByZXRyaWV2ZUN1cnJlbnRJbWFnZSgpOworCisgICAgY2xhc3MgTW92aWVD
bGllbnQ7CisgICAgZnJpZW5kIGNsYXNzIE1vdmllQ2xpZW50OworICAgIE93blB0cjxNb3ZpZUNs
aWVudD4gbV9tb3ZpZUNsaWVudDsKKworICAgIGNsYXNzIExheWVyQ2xpZW50OworICAgIGZyaWVu
ZCBjbGFzcyBMYXllckNsaWVudDsKKyAgICBPd25QdHI8TGF5ZXJDbGllbnQ+IG1fbGF5ZXJDbGll
bnQ7CisKKyAgICBjbGFzcyBWaXN1YWxDb250ZXh0Q2xpZW50OworICAgIGZyaWVuZCBjbGFzcyBW
aXN1YWxDb250ZXh0Q2xpZW50OworICAgIE93blB0cjxWaXN1YWxDb250ZXh0Q2xpZW50PiBtX3Zp
c3VhbENvbnRleHRDbGllbnQ7CisKICAgICBNZWRpYVBsYXllciogbV9wbGF5ZXI7Ci0gICAgT3du
UHRyPFFUTW92aWVXaW4+IG1fcXRNb3ZpZTsKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCisgICAgUmVmUHRyPFFUTW92aWU+IG1fbW92aWU7CiAgICAgT3duUHRyPEdyYXBoaWNzTGF5
ZXI+IG1fcXRWaWRlb0xheWVyOwotI2VuZGlmCisgICAgUmVmUHRyPFFUTW92aWVWaXN1YWxDb250
ZXh0PiBtX3Zpc3VhbENvbnRleHQ7CiAgICAgZmxvYXQgbV9zZWVrVG87Ci0gICAgVGltZXI8TWVk
aWFQbGF5ZXJQcml2YXRlPiBtX3NlZWtUaW1lcjsKKyAgICBUaW1lcjxNZWRpYVBsYXllclByaXZh
dGVRdWlja1RpbWVWaXN1YWxDb250ZXh0PiBtX3NlZWtUaW1lcjsKKyAgICBUaW1lcjxNZWRpYVBs
YXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0PiBtX3Zpc3VhbENvbnRleHRUaW1lcjsK
ICAgICBJbnRTaXplIG1fc2l6ZTsKICAgICBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIG1fbmV0
d29ya1N0YXRlOwogICAgIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIG1fcmVhZHlTdGF0ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54516</attachid>
            <date>2010-04-27 20:49:32 -0700</date>
            <delta_ts>2010-04-28 10:55:05 -0700</delta_ts>
            <desc>New class MediaPlayerPrivateTaskTimer </desc>
            <filename>7569713-MediaPlayerPrivate-NewClasses.patch</filename>
            <type>text/plain</type>
            <size>4519</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVRh
c2tUaW1lci5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9NZWRpYVBsYXllclByaXZhdGVUYXNrVGltZXIuY3BwCShyZXZpc2lvbiAwKQ0KKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVRhc2tUaW1lci5jcHAJ
KHJldmlzaW9uIDApDQpAQCAtMCwwICsxLDY1IEBADQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlVGFza1RpbWVyLmgiCisKKyNpbmNsdWRlICJRVE1v
dmllVGFzay5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK01lZGlhUGxheWVyUHJpdmF0ZVRh
c2tUaW1lciogTWVkaWFQbGF5ZXJQcml2YXRlVGFza1RpbWVyOjpzX3RpbWVyID0gMDsKKwordm9p
ZCBNZWRpYVBsYXllclByaXZhdGVUYXNrVGltZXI6OmluaXRpYWxpemUoKQoreworICAgIGlmIChz
X3RpbWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBzX3RpbWVyID0gbmV3IE1lZGlhUGxheWVy
UHJpdmF0ZVRhc2tUaW1lcjsKKworICAgIFFUTW92aWVUYXNrOjpzaGFyZWRUYXNrKCktPnNldFRh
c2tUaW1lckZ1bmNzKHNldERlbGF5LCBzdG9wVGFza1RpbWVyKTsKK30KKwordm9pZCBNZWRpYVBs
YXllclByaXZhdGVUYXNrVGltZXI6OnNldERlbGF5KGRvdWJsZSBkZWxheUluU2Vjb25kcykKK3sK
KyAgICBBU1NFUlQoc190aW1lcik7CisKKyAgICBzX3RpbWVyLT5zdGFydE9uZVNob3QoZGVsYXlJ
blNlY29uZHMpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVRhc2tUaW1lcjo6c3RvcFRh
c2tUaW1lcigpCit7CisgICAgQVNTRVJUKHNfdGltZXIpOworCisgICAgc190aW1lci0+c3RvcCgp
OworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVRhc2tUaW1lcjo6ZmlyZWQoKQoreworICAg
IFFUTW92aWVUYXNrOjpzaGFyZWRUYXNrKCktPmZpcmVUYXNrQ2xpZW50cygpOworfQorCit9Cklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVUYXNr
VGltZXIuaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01l
ZGlhUGxheWVyUHJpdmF0ZVRhc2tUaW1lci5oCShyZXZpc2lvbiAwKQ0KKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVRhc2tUaW1lci5oCShyZXZpc2lv
biAwKQ0KQEAgLTAsMCArMSw0OCBAQA0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgTWVkaWFQbGF5ZXJQcml2YXRlVGFza1Rp
bWVyX2gKKyNkZWZpbmUgTWVkaWFQbGF5ZXJQcml2YXRlVGFza1RpbWVyX2gKKworI2luY2x1ZGUg
IlRpbWVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTWVkaWFQbGF5ZXJQcml2
YXRlVGFza1RpbWVyIDogVGltZXJCYXNlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCBpbml0
aWFsaXplKCk7CisgICAgCitwcml2YXRlOgorICAgIHN0YXRpYyB2b2lkIHNldERlbGF5KGRvdWJs
ZSk7CisgICAgc3RhdGljIHZvaWQgc3RvcFRhc2tUaW1lcigpOworCisgICAgdm9pZCBmaXJlZCgp
OworCisgICAgc3RhdGljIE1lZGlhUGxheWVyUHJpdmF0ZVRhc2tUaW1lciogc190aW1lcjsKK307
CisKK30KKworI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54517</attachid>
            <date>2010-04-27 20:49:55 -0700</date>
            <delta_ts>2010-04-28 10:56:25 -0700</delta_ts>
            <desc>Added MediaPlayerPrivateQuickTimeWin support to MediaPlayer </desc>
            <filename>7569713-MediaPlayer.patch</filename>
            <type>text/plain</type>
            <size>985</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwDQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09DQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHAJKHJldmlz
aW9uIDU4MTg3KQ0KKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3Bw
CSh3b3JraW5nIGNvcHkpDQpAQCAtNDYsNyArNDYsOCBAQA0KICNlbGlmIE9TKFdJTkNFKSAmJiAh
UExBVEZPUk0oUVQpCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlV2luY2UuaCIKICNlbGlm
IFBMQVRGT1JNKFdJTikKLSNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVXaW4u
aCIKKyNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVRdWlja3RpbWVXaW4uaCIKKyNpbmNsdWRl
ICJNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0LmgiCiAjZWxpZiBQTEFU
Rk9STShHVEspCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgiCiAjZWxp
ZiBQTEFURk9STShRVCkKQEAgLTE2Miw2ICsxNjMsOSBAQA0KICNpZiBVU0UoR1NUUkVBTUVSKQog
ICAgICAgICBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnJlZ2lzdGVyTWVkaWFFbmdpbmUo
YWRkTWVkaWFFbmdpbmUpOwogI2Vsc2UKKyNpZiBQTEFURk9STShXSU4pCisgICAgICAgIE1lZGlh
UGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OnJlZ2lzdGVyTWVkaWFFbmdpbmUo
YWRkTWVkaWFFbmdpbmUpOworI2VuZGlmCiAgICAgICAgIC8vIEZJWE1FOiBjdXJyZW50bHkgYWxs
IHRoZSBNZWRpYUVuZ2luZXMgYXJlIG5hbWVkCiAgICAgICAgIC8vIE1lZGlhUGxheWVyUHJpdmF0
ZS4gVGhpcyBjb2RlIHdpbGwgbmVlZCBhbiB1cGRhdGUgd2hlbiBidWcKICAgICAgICAgLy8gMzY2
NjMgaXMgYWRyZXNzZWQuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54518</attachid>
            <date>2010-04-27 20:51:13 -0700</date>
            <delta_ts>2010-04-28 11:56:43 -0700</delta_ts>
            <desc>Part 3: JavaScriptCore: Added cancelCallOnMainThread</desc>
            <filename>7569713-MainThread.patch</filename>
            <type>text/plain</type>
            <size>4104</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZw0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIEphdmFTY3Jp
cHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNTgzNjIpDQorKysgSmF2YVNjcmlwdENvcmUvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpDQpAQCAtMSwzICsxLDIxIEBADQorMjAxMC0wNC0yNyAgSmVy
IE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTM0MDA1PgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzU2OTcxMz4KKyAgICAgICAg
CisgICAgICAgIEFkZGVkIGNhbmNlbENhbGxPbk1haW5UaHJlYWQuICBjYWxsT25NYWluVGhyZWFk
IHNob3VsZCBhbHdheXMgbm93IGJlIHBhaXJlZAorICAgICAgICB3aXRoIGNhbmNlbENhbGxPbk1h
aW5UaHJlYWQgaW4gc2l0dWF0aW9ucyB3aGVyZSB0aGUgcmVmY29uIHBhc3NlZCB0byBjYWxsT25N
YWluVGhyZWFkCisgICAgICAgIG1heSBiZSBkZWFsbG9jZWQgYmVmb3JlIHRoZSBtYWluIHRocmVh
ZCBmdW5jdGlvbiBjYW4gYmUgZGlzcGF0Y2hlZC4gIAorICAgICAgICAKKyAgICAgICAgKiB3dGYv
TWFpblRocmVhZC5jcHA6CisgICAgICAgIChXVEY6OkZ1bmN0aW9uV2l0aENvbnRleHQ6Om9wZXJh
dG9yID09ICk6IFN1cHBvcnRzIHRoZSBGdW5jdGlvbldpdGhDb250ZXh0RmluZGVyIHByZWRpY2F0
ZSBmdW5jdG9yLgorICAgICAgICAoV1RGOjpGdW5jdGlvbldpdGhDb250ZXh0RmluZGVyOjpGdW5j
dGlvbldpdGhDb250ZXh0RmluZGVyKTogIFByZWRpY2F0ZSBmdW5jdG9yIGZvciB1c2Ugd2l0aCBE
ZXF1ZXVlOjpmaW5kSWYKKyAgICAgICAgKFdURjo6RnVuY3Rpb25XaXRoQ29udGV4dEZpbmRlcjo6
b3BlcmF0b3IoKSk6CisgICAgICAgIChXVEY6OmNhbmNlbENhbGxPbk1haW5UaHJlYWQpOgorICAg
ICAgICAqIHd0Zi9NYWluVGhyZWFkLmg6CisKIDIwMTAtMDQtMjcgIFN0ZXBoYW5pZSBMZXdpcyAg
PHNsZXdpc0BhcHBsZS5jb20+CiAKICAgICAgICAgRml4IFRpZ2VyIGJ1aWxkLgpJbmRleDogSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLmRlZg0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5kZWYJKHJldmlzaW9uIDU4MTg3
KQ0KKysrIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS5kZWYJKHdvcmtpbmcgY29weSkNCkBAIC03Niw2ICs3Niw3IEBADQog
ICAgID9jYWxsQEpTQ0BAWUE/QVZKU1ZhbHVlQDFAUEFWRXhlY1N0YXRlQDFAVjIxQFc0Q2FsbFR5
cGVAMUBBQlRDYWxsRGF0YUAxQDFBQlZBcmdMaXN0QDFAQFoKICAgICA/Y2FsbE9uTWFpblRocmVh
ZEBXVEZAQFlBWFA2QVhQQVhAWjBAWgogICAgID9jYWxsT25NYWluVGhyZWFkQW5kV2FpdEBXVEZA
QFlBWFA2QVhQQVhAWjBAWgorICAgID9jYW5jZWxDYWxsT25NYWluVGhyZWFkQFdURkBAWUFYUDZB
WFBBWEBaMEBaCiAgICAgP2NoYW5nZVByb3RvdHlwZVRyYW5zaXRpb25AU3RydWN0dXJlQEpTQ0BA
U0E/QVY/JFBhc3NSZWZQdHJAVlN0cnVjdHVyZUBKU0NAQEBXVEZAQFBBVjEyQFZKU1ZhbHVlQDJA
QFoKICAgICA/Y2hhcmFjdGVyU3RhcnRpbmdBdEBTdHJpbmdAV2ViQ29yZUBAUUJFSElAWgogICAg
ID9jaGFyYWN0ZXJzQFN0cmluZ0BXZWJDb3JlQEBRQkVQQl9XWFoKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL3d0Zi9NYWluVGhyZWFkLmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIEphdmFTY3JpcHRDb3JlL3d0
Zi9NYWluVGhyZWFkLmNwcAkocmV2aXNpb24gNTgxODcpDQorKysgSmF2YVNjcmlwdENvcmUvd3Rm
L01haW5UaHJlYWQuY3BwCSh3b3JraW5nIGNvcHkpDQpAQCAtNTEsOCArNTEsMjIgQEANCiAgICAg
ICAgICwgc3luY0ZsYWcoc3luY0ZsYWcpCiAgICAgeyAKICAgICB9CisgICAgYm9vbCBvcGVyYXRv
ciA9PSAoY29uc3QgRnVuY3Rpb25XaXRoQ29udGV4dCYgbykKKyAgICB7CisgICAgICAgIHJldHVy
biBmdW5jdGlvbiA9PSBvLmZ1bmN0aW9uCisgICAgICAgICAgICAmJiBjb250ZXh0ID09IG8uY29u
dGV4dAorICAgICAgICAgICAgJiYgc3luY0ZsYWcgPT0gby5zeW5jRmxhZzsKKyAgICB9CiB9Owog
CitjbGFzcyBGdW5jdGlvbldpdGhDb250ZXh0RmluZGVyIHsKK3B1YmxpYzoKKyAgICBGdW5jdGlv
bldpdGhDb250ZXh0RmluZGVyKGNvbnN0IEZ1bmN0aW9uV2l0aENvbnRleHQmIG0pIDogbShtKSB7
fQorICAgIGJvb2wgb3BlcmF0b3IoKSAoRnVuY3Rpb25XaXRoQ29udGV4dCYgbykgeyByZXR1cm4g
byA9PSBtOyB9CisgICAgRnVuY3Rpb25XaXRoQ29udGV4dCBtOworfTsKKworCiB0eXBlZGVmIERl
cXVlPEZ1bmN0aW9uV2l0aENvbnRleHQ+IEZ1bmN0aW9uUXVldWU7CiAKIHN0YXRpYyBib29sIGNh
bGxiYWNrc1BhdXNlZDsgLy8gVGhpcyBnbG9iYWwgdmFyaWFibGUgaXMgb25seSBhY2Nlc3NlZCBm
cm9tIG1haW4gdGhyZWFkLgpAQCAtMTQ3LDYgKzE2MSwyNCBAQA0KICAgICBzeW5jRmxhZy53YWl0
KGZ1bmN0aW9uUXVldWVNdXRleCk7CiB9CiAKK3ZvaWQgY2FuY2VsQ2FsbE9uTWFpblRocmVhZChN
YWluVGhyZWFkRnVuY3Rpb24qIGZ1bmN0aW9uLCB2b2lkKiBjb250ZXh0KQoreworICAgIEFTU0VS
VChmdW5jdGlvbik7CisKKyAgICBNdXRleExvY2tlciBsb2NrZXIobWFpblRocmVhZEZ1bmN0aW9u
UXVldWVNdXRleCgpKTsKKworICAgIEZ1bmN0aW9uV2l0aENvbnRleHRGaW5kZXIgcHJlZChGdW5j
dGlvbldpdGhDb250ZXh0KGZ1bmN0aW9uLCBjb250ZXh0KSk7CisKKyAgICB3aGlsZSAodHJ1ZSkg
eworICAgICAgICAvLyBXZSBtdXN0IHJlZGVmaW5lICdpJyBlYWNoIHBhc3MsIGJlY2F1c2UgdGhl
IGl0ZXJlcmF0b3IncyBvcGVyYXRvcj0gCisgICAgICAgIC8vIHJlcXVpcmVzICd0aGlzJyB0byBi
ZSB2YWxpZCwgYW5kIHJlbW92ZSgpIGludmFsaWRhdGVzIGFsbCBpdGVyYXRvcnMKKyAgICAgICAg
RnVuY3Rpb25RdWV1ZTo6aXRlcmF0b3IgaShmdW5jdGlvblF1ZXVlKCkuZmluZElmKHByZWQpKTsK
KyAgICAgICAgaWYgKGkgPT0gZnVuY3Rpb25RdWV1ZSgpLmVuZCgpKQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGZ1bmN0aW9uUXVldWUoKS5yZW1vdmUoaSk7CisgICAgfQorfQorCiB2b2lk
IHNldE1haW5UaHJlYWRDYWxsYmFja3NQYXVzZWQoYm9vbCBwYXVzZWQpCiB7CiAgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi9NYWluVGhyZWFkLmgN
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0NCi0tLSBKYXZhU2NyaXB0Q29yZS93dGYvTWFpblRocmVhZC5oCShyZXZpc2lv
biA1ODE4NykNCisrKyBKYXZhU2NyaXB0Q29yZS93dGYvTWFpblRocmVhZC5oCSh3b3JraW5nIGNv
cHkpDQpAQCAtNDEsNiArNDEsOCBAQA0KIC8vIEJsb2NrcyB0aGUgdGhyZWFkIHVudGlsIHRoZSBj
YWxsIGZpbmlzaGVzIG9uIHRoZSBtYWluIHRocmVhZC4gTWlzdXNpbmcgdGhpcyBjYW4gZWFzaWx5
IGNhdXNlIGRlYWRsb2Nrcy4KIHZvaWQgY2FsbE9uTWFpblRocmVhZEFuZFdhaXQoTWFpblRocmVh
ZEZ1bmN0aW9uKiwgdm9pZCogY29udGV4dCk7CiAKK3ZvaWQgY2FuY2VsQ2FsbE9uTWFpblRocmVh
ZChNYWluVGhyZWFkRnVuY3Rpb24qLCB2b2lkKiBjb250ZXh0KTsKKwogdm9pZCBzZXRNYWluVGhy
ZWFkQ2FsbGJhY2tzUGF1c2VkKGJvb2wgcGF1c2VkKTsKIAogLy8gTXVzdCBiZSBjYWxsZWQgZnJv
bSB0aGUgbWFpbiB0aHJlYWQgKERhcndpbiBpcyBhbiBleGNlcHRpb24gdG8gdGhpcyBydWxlKS4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54519</attachid>
            <date>2010-04-27 20:52:45 -0700</date>
            <delta_ts>2010-05-04 15:39:34 -0700</delta_ts>
            <desc>ChangeLog changes. </desc>
            <filename>7569713-ChangeLog.patch</filename>
            <type>text/plain</type>
            <size>9309</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDU4MzYyKQ0KKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
DQpAQCAtMSwzICsxLDE5MiBAQA0KKzIwMTAtMDQtMjcgIEplciBOb2JsZSAgPGplci5ub2JsZUBh
cHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNDAwNT4KKyAgICAg
ICAgPHJkYXI6Ly9wcm9ibGVtLzc1Njk3MTM+CisKKyAgICAgICAgTWVkaWFQbGF5ZXJQcml2YXRl
UXVpY2tUaW1lVmlzdWFsQ29udGV4dCBoYXMgYmVlbiBhZGRlZCBhcyBhIAorICAgICAgICBzdXBw
b3J0ZWQgTWVkaWFQbGF5ZXIgaW1wbGVtZW50YXRpb24uICBNZWRpYVBsYXllclByaXZhdGVRdWlj
a1RpbWVXaW4KKyAgICAgICAgaGFzIGJlZW4gbGVmdCBhcyBhIGZhbGxiYWNrIE1lZGlhUGxheWVy
IGltcGxlbWVudGF0aW9uIGZvciB0aG9zZSBtZWRpYQorICAgICAgICB0eXBlcyB3aGljaCBkbyBu
b3Qgc3VwcG9ydCB2aXN1YWwgY29udGV4dHMgKGN1cnJlbnRseSwgbm9uZSkuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpp
bnN0YWxsZWRNZWRpYUVuZ2luZXMpOgorCisyMDEwLTA0LTI3ICBKZXIgTm9ibGUgIDxqZXIubm9i
bGVAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQwMDU+Cisg
ICAgICAgIDxyZGFyOi8vcHJvYmxlbS83NTY5NzEzPgorCisgICAgICAgIE1lZGlhUGxheWVyUHJp
dmF0ZVRhc2tUaW1lciBoYXMgYmVlbiBicm9rZW4gb3V0IGZyb20gTWVkaWFQbGF5ZXJQcml2YXRl
UXVpY2tUaW1lV2luOjpUYXNrVGltZXIKKyAgICAgICAgc28gdGhhdCBtdWx0aXBsZSBjbGllbnRz
IGNhbiBzaGFyZSBpdHMgaW1wbGVtZW50YXRpb24uICBJdCB3b3JrcyB3aXRoIHRoZSBuZXcgCisg
ICAgICAgIFFUTW92aWVUYXNrVGltZXIgdG8gcHJvdmlkZSB0aW1lciBzdXBwb3J0IHRvIFFUTW92
aWVUYXNrVGltZXIgY2xpZW50cy4KKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVRhc2tUaW1lci5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlVGFza1RpbWVyOjppbml0aWFsaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVRhc2tUaW1lcjo6c2V0RGVsYXkpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlVGFza1RpbWVyOjpzdG9wVGFza1RpbWVy
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVRhc2tUaW1lcjo6ZmlyZWQp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVUYXNr
VGltZXIuaDogQWRkZWQuCisKKzIwMTAtMDQtMjcgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBs
ZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
PGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNDAwNT4KKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzc1Njk3MTM+CisKKyAgICAgICAgTWVkaWFQbGF5ZXJQcml2YXRlUXVp
Y2tUaW1lVmlzdWFsQ29udGV4dCBpcyBhIG5ldyBNZWRpYVBsYXllclByaXZhdGUgaW1wbGVtZW50
YXRpb24KKyAgICAgICAgd2hpY2ggdXNlcyBRVE1vdmllVmlzdWFsQ29udGV4dCBpbnN0ZWFkIG9m
IFFUTW92aWVXaW4gdG8gcmVuZGVyIHZpZGVvIGZyYW1lcy4gTXVjaAorICAgICAgICBsaWtlIE1l
ZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVdpbiwgTVBQUVRWaXN1YWxDb250ZXh0IGJyZWFrcyBv
dXQgUVRNb3ZpZSBhbmQgCisgICAgICAgIFFUTW92aWVWaXN1YWxDb250ZXh0LCBhbmQgdXNlcyB0
aGUgbmV3bHkgc2hhcmVkIE1lZGlhUGxheWVyUHJpdmF0ZVRhc2tUaW1lci4gIEl0IGFsc28KKyAg
ICAgICAgdXNlcyBhZ2dyZWdhdGlvbiAoaW4gdGhlIGZvcm0gb2YgZnJpZW5kIGNsYXNzZXMpIGlu
c3RlYWQgb2YgbXVsdGlwbGUgaW5oZXJpdGVuY2UgCisgICAgICAgIHRvIGltcGxlbWVudCBpdHMg
dmFyaW91cyBjbGllbnQgY2FsbGJhY2tzLCBzbyBhcyBub3QgdG8gZXhwb3NlIGl0cyBvd24gY2xp
ZW50cyB0bworICAgICAgICB0aGUgUVRNb3ZpZSBjbGFzc2VzLgorCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQu
Y3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXll
clByaXZhdGVRdWlja1RpbWVXaW4uY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9NZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0Lmg6IENvcGllZCBmcm9t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGlt
ZVdpbi5oLgorCisyMDEwLTA0LTI3ICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIDxodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQwMDU+CisgICAgICAgIDxyZGFyOi8v
cHJvYmxlbS83NTY5NzEzPgorICAgICAgICAKKyAgICAgICAgTWVkaWFQbGF5ZXJQcml2YXRlUXVp
Y2tUaW1lV2luIGhhcyBiZWVuIG1vZGlmaWVkIHRvIHN1cHBvcnQgdGhlIG5ldyBiaWZ1cmNhdGVk
IAorICAgICAgICBRVE1vdmllL1FUTW92aWVXaW4gY2xhc3Nlcy4gIEl0J3MgcHJpdmF0ZSBUYXNr
VGltZXIgY2xhc3MgaGFzIGJlZW4gYnJva2VuIG91dAorICAgICAgICBpbnRvIGEgbmV3IHRvcC1s
ZXZlbCBjbGFzcyAoTWVkaWFQbGF5ZXJQcml2YXRlVGFza1RpbWVyKSB3aGljaCB3aWxsIGJlIGFk
ZHJlc3NlZAorICAgICAgICBpbiBhIGZ1dHVyZSBwYXRjaC4gCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lV2luLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6fk1lZGlhUGxheWVyUHJpdmF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OmxvYWQpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpwYXVzZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlOjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZTo6c2V0VmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGU6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6Om1pbWVUeXBlQ2FjaGUpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjppc0F2YWlsYWJsZSk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGU6Om1vdmllRW5kZWQpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlOjptb3ZpZUxvYWRTdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjptb3ZpZVRpbWVDaGFuZ2VkKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6bW92aWVOZXdJbWFnZUF2YWlsYWJsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnBhaW50Q29udGVudHMpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVXaW4u
aDoKKworMjAxMC0wNC0yNyAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICA8aHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM0MDA1PgorICAgICAgICA8cmRhcjovL3Byb2Js
ZW0vNzU2OTcxMz4KKworICAgICAgICBRVENGRGljdGlvbmFyeSBkZWZpbmVzIGZ1bmN0aW9ucyB3
aGljaCBoZWxwIHNlcmlhbGl6ZSBhbmQgdW5zZXJpYWxpemUKKyAgICAgICAgQ0ZEaWN0aW9uYXJp
ZXMuICBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIFF1aWNrVGltZSBsaW5rcyBhZ2FpbnN0IGEg
CisgICAgICAgIG5vbi1kZWJ1ZyBDb3JlRm91bmRhdGlvbiBpbiBvdXIgZGVidWcgYnVpbGQsIGFu
ZCBwYXNzaW5nIG5vbi1kZWJ1ZyAKKyAgICAgICAgQ0ZEaWN0aW9uYXJpZXMgdG8gYSBkZWJ1ZyBD
RiB3aWxsIGNhdXNlIGEgY3Jhc2guCisgICAgICAgIAorICAgICAgICBRVE1vdmllVGFzayBpcyBh
IG5ldyBjbGFzcyBjb250YWluaW5nIHRoZSB0YXNraW5nIGZ1bmN0aW9uYWxpdHkgYnJva2VuCisg
ICAgICAgIG91dCBmcm9tIFFUTW92aWVXaW4uICBUaGlzIGlzIG5lY2Vzc2FyeSBub3cgdGhhdCB0
aGUgdGFza2luZworICAgICAgICBmdW5jdGlvbmFsaXR5IGlzIG5lZWRlZCBpbiBtdWx0aXBsZSBm
aWxlcy9jbGFzc2VzLgorICAgICAgICAKKyAgICAgICAgUVRQaXhlbEJ1ZmZlciBpcyBhIEMrKyB3
cmFwcGVyIGZvciBDVlBpeGVsQnVmZmVycywgbmVjZXNzYXJ5IGJlY2F1c2UKKyAgICAgICAgbGlr
ZSB0aGUgQ0YgY2FzZSBhYm92ZSwgUXVpY2tUaW1lIGhhcyBpdHMgb3duIGltcGxlbWVudGF0aW9u
IG9mIENvcmVWaWRlbworICAgICAgICBhbmQgaXRzIENWIHR5cGVzIGNhbm5vdCBiZSB1c2VkIHdp
dGggdGhlIEFBUyB2ZXJzaW9uIG9mIENvcmVWaWRlby4KKyAgICAgICAgCisgICAgICAgIFFUTW92
aWVWaXN1YWxDb250ZXh0IGlzIHRoZSBuZXcgZHJhd2luZyBpbXBsZW1lbnRhdGlvbiwgcGFyYWxs
ZWwgdG8gCisgICAgICAgIFFUTW92aWVXaW4uICBJdCBjdXJyZW50bHkgdXNlcyBhIHNvZnR3YXJl
IHJlbmRlcmluZyBwYXRoLCBidXQgY2FuIGJlCisgICAgICAgIGV4dGVuZGVkIGluIHRoZSBmdXR1
cmUgdG8gc3VwcG9ydCBoYXJkd2FyZSByZW5kZXJpbmcuCisgICAgICAgIAorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9RVENGRGljdGlvbmFyeS5jcHA6IEFkZGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVENGRGljdGlvbmFyeS5oOiBBZGRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRNb3ZpZVRhc2suY3BwOiBBZGRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRNb3ZpZVRhc2suaDogQWRkZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWVWaXN1YWxDb250ZXh0LmNwcDogQWRkZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWVWaXN1YWxDb250ZXh0Lmg6IEFk
ZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVFBpeGVsQnVmZmVyLmNwcDog
QWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUUGl4ZWxCdWZmZXIuaDog
QWRkZWQuCisKKzIwMTAtMDQtMjcgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgPGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNDAwNT4KKyAgICAgICAgPHJkYXI6Ly9w
cm9ibGVtLzc1Njk3MTM+CisKKyAgICAgICAgVGhlIG9yaWdpbmFsIGZ1bmN0aW9uYWxpdHkgb2Yg
UVRNb3ZpZVdpbiBoYXMgYmVlbiBzcGxpdCBiZXR3ZWVuIFFUTW92aWVXaW4sIAorICAgICAgICBh
bmQgYSBuZXcgY2xhc3M6IFFUTW92aWUuICBRVE1vdmllIGNvbnRhaW5zIGFsbCB0aGUgImNvbnRy
b2xsZXIiIHBhcnRzIChjaGFuZ2luZworICAgICAgICB0aGUgcmF0ZSwgc2Vla2luZywgZXRjKSB3
aGlsZSBRVE1vdmllV2luIHJldGFpbnMgYWxsIHRoZSBkcmF3aW5nIGNvZGUuICBRVE1vdmllV2lu
CisgICAgICAgIG5vdyB0YWtlcyBhIFFUTW92aWUsIGFuZCBhcyBzdWNoIFFUTW92aWUgaXMgbm93
IHJldGFpbmFibGUuICBRVE1vdmllV2luIHJlZ2lzdGVycworICAgICAgICBpdHNlbGYgYXMgYSBj
bGllbnQgb2YgUVRNb3ZpZSwgc28gdGhhdCBpdCBjYW4gcmVjZWl2ZSBsb2FkLXN0YXRlIG5vdGlm
aWNhdGlvbnMsCisgICAgICAgIGFuZCB0aHVzIFFUTW92aWUgbXVzdCBub3cgc3VwcG9ydCBtdWx0
aXBsZSBjbGllbnRzLiAgTW92aWUgdGFza2luZyB0aW1lciBzdXBwb3J0CisgICAgICAgIGhhcyBi
ZWVuIG1vdmVkIGludG8gaXRzIG93biBjbGFzcyAoUVRNb3ZpZVRhc2spIGFuZCB3aWxsIGJlIGFk
ZHJlc3NlZCBpbiBhIGZ1dHVyZSAKKyAgICAgICAgcGF0Y2guICBNb3N0IG9mIHRoZSBmdW5jdGlv
bnMgbGlzdGVkIGJlbG93IG9ubHkgY2hhbmdlZCBzbyBtdWNoIGFzIHRoZWlyIGNsYXNzIG5hbWUg
Y2hhbmdlZC4KKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92
aWUuY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVE1vdmll
V2luLmNwcC4KKyAgICAgICAgKFFUTW92aWVQcml2YXRlOjpRVE1vdmllUHJpdmF0ZSk6CisgICAg
ICAgIChRVE1vdmllUHJpdmF0ZTo6flFUTW92aWVQcml2YXRlKToKKyAgICAgICAgKFFUTW92aWVQ
cml2YXRlOjpzdGFydFRhc2spOiBGdW5jdGlvbmFsaXR5IG1vdmVkIHRvIFFUTW92aWVUYXNrLgor
ICAgICAgICAoUVRNb3ZpZVByaXZhdGU6OmVuZFRhc2spOiBGdW5jdGlvbmFsaXR5IG1vdmVkIHRv
IFFUTW92aWVUYXNrLgorICAgICAgICAoUVRNb3ZpZVByaXZhdGU6OnRhc2spOiBEcmF3aW5nIGNv
ZGUgcmVtb3ZlZC4gIE11bHRpcGxlIGNsaWVudCBzdXBwb3J0IGFkZGVkLgorICAgICAgICAoUVRN
b3ZpZVByaXZhdGU6OmNyZWF0ZU1vdmllQ29udHJvbGxlcik6IERyYXdpbmcgY29kZSByZW1vdmVk
LgorICAgICAgICAoUVRNb3ZpZTo6UVRNb3ZpZSk6CisgICAgICAgIChRVE1vdmllOjp+UVRNb3Zp
ZSk6CisgICAgICAgIChRVE1vdmllOjphZGRDbGllbnQpOiBNdWx0aXBsZSBjbGllbnQgc3VwcG9y
dCBhZGRlZC4KKyAgICAgICAgKFFUTW92aWU6OnJlbW92ZUNsaWVudCk6IE11bHRpcGxlIGNsaWVu
dCBzdXBwb3J0IGFkZGVkLgorICAgICAgICAoUVRNb3ZpZTo6cGxheSk6CisgICAgICAgIChRVE1v
dmllOjpwYXVzZSk6CisgICAgICAgIChRVE1vdmllOjpyYXRlKToKKyAgICAgICAgKFFUTW92aWU6
OnNldFJhdGUpOgorICAgICAgICAoUVRNb3ZpZTo6ZHVyYXRpb24pOgorICAgICAgICAoUVRNb3Zp
ZTo6Y3VycmVudFRpbWUpOgorICAgICAgICAoUVRNb3ZpZTo6c2V0Q3VycmVudFRpbWUpOgorICAg
ICAgICAoUVRNb3ZpZTo6c2V0Vm9sdW1lKToKKyAgICAgICAgKFFUTW92aWU6OnNldFByZXNlcnZl
c1BpdGNoKToKKyAgICAgICAgKFFUTW92aWU6OmRhdGFTaXplKToKKyAgICAgICAgKFFUTW92aWU6
Om1heFRpbWVMb2FkZWQpOgorICAgICAgICAoUVRNb3ZpZTo6bG9hZFN0YXRlKToKKyAgICAgICAg
KFFUTW92aWU6OmdldE5hdHVyYWxTaXplKToKKyAgICAgICAgKFFUTW92aWU6OmxvYWQpOgorICAg
ICAgICAoUVRNb3ZpZTo6ZGlzYWJsZVVuc3VwcG9ydGVkVHJhY2tzKToKKyAgICAgICAgKFFUTW92
aWU6OmlzRGlzYWJsZWQpOiBOZXcgZnVuY3Rpb24gaW4gUVRNb3ZpZS4KKyAgICAgICAgKFFUTW92
aWU6OnNldERpc2FibGVkKTogCisgICAgICAgIChRVE1vdmllOjpoYXNWaWRlbyk6CisgICAgICAg
IChRVE1vdmllOjpoYXNBdWRpbyk6CisgICAgICAgIChRVE1vdmllOjpoYXNDbG9zZWRDYXB0aW9u
cyk6CisgICAgICAgIChRVE1vdmllOjpzZXRDbG9zZWRDYXB0aW9uc1Zpc2libGUpOgorICAgICAg
ICAoUVRNb3ZpZTo6Y291bnRTdXBwb3J0ZWRUeXBlcyk6CisgICAgICAgIChRVE1vdmllOjpnZXRT
dXBwb3J0ZWRUeXBlKToKKyAgICAgICAgKFFUTW92aWU6OmluaXRpYWxpemVRdWlja1RpbWUpOgor
ICAgICAgICAoUVRNb3ZpZTo6Z2V0TW92aWVIYW5kbGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9RVE1vdmllLmg6IENvcGllZCBmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL1FUTW92aWVXaW4uaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRN
b3ZpZVdpbi5jcHA6CisgICAgICAgIChRVE1vdmllV2luUHJpdmF0ZTo6UVRNb3ZpZVdpblByaXZh
dGUpOgorICAgICAgICAoUVRNb3ZpZVdpblByaXZhdGU6On5RVE1vdmllV2luUHJpdmF0ZSk6Cisg
ICAgICAgIChRVE1vdmllV2luUHJpdmF0ZTo6Y2FjaGVNb3ZpZVNjYWxlKToKKyAgICAgICAgKG1v
dmllRHJhd2luZ0NvbXBsZXRlUHJvYyk6CisgICAgICAgIChRVE1vdmllV2luUHJpdmF0ZTo6cmVn
aXN0ZXJEcmF3aW5nQ2FsbGJhY2spOgorICAgICAgICAoUVRNb3ZpZVdpblByaXZhdGU6OnVucmVn
aXN0ZXJEcmF3aW5nQ2FsbGJhY2spOgorICAgICAgICAoUVRNb3ZpZVdpblByaXZhdGU6OmRyYXdp
bmdDb21wbGV0ZSk6CisgICAgICAgIChRVE1vdmllV2luUHJpdmF0ZTo6Y3JlYXRlR1dvcmxkKToK
KyAgICAgICAgKFFUTW92aWVXaW5Qcml2YXRlOjpjbGVhckdXb3JsZCk6CisgICAgICAgIChRVE1v
dmllV2luUHJpdmF0ZTo6dXBkYXRlTW92aWVTaXplKToKKyAgICAgICAgKFFUTW92aWVXaW5Qcml2
YXRlOjpkZWxldGVHV29ybGQpOgorICAgICAgICAoUVRNb3ZpZVdpblByaXZhdGU6Om1vdmllRW5k
ZWQpOgorICAgICAgICAoUVRNb3ZpZVdpblByaXZhdGU6Om1vdmllTG9hZFN0YXRlQ2hhbmdlZCk6
CisgICAgICAgIChRVE1vdmllV2luUHJpdmF0ZTo6bW92aWVUaW1lQ2hhbmdlZCk6CisgICAgICAg
IChRVE1vdmllV2luOjpRVE1vdmllV2luKToKKyAgICAgICAgKFFUTW92aWVXaW46On5RVE1vdmll
V2luKToKKyAgICAgICAgKFFUTW92aWVXaW46OnNldFNpemUpOgorICAgICAgICAoUVRNb3ZpZVdp
bjo6c2V0RGlzYWJsZWQpOgorICAgICAgICAoUVRNb3ZpZVdpbjo6aXNEaXNhYmxlZCk6CisgICAg
ICAgIChRVE1vdmllV2luOjpzZXRNb3ZpZSk6CisgICAgICAgIChRVE1vdmllV2luOjptb3ZpZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWVXaW4uaDoKKwogMjAxMC0w
NC0yNyAgSmVucyBBbGZrZSAgPHNuZWpAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IERhcmluIEZpc2hlci4K
</data>
<flag name="review"
          id="38529"
          type_id="1"
          status="-"
          setter="mjs"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54578</attachid>
            <date>2010-04-28 10:51:09 -0700</date>
            <delta_ts>2010-04-28 11:29:18 -0700</delta_ts>
            <desc>Part 1.1: QTMovieWin: The breakup of QTMovieWin</desc>
            <filename>7569713-QTMovieWin-Breakup.patch</filename>
            <type>text/plain</type>
            <size>77886</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWVXaW4uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWVXaW4uY3BwCShy
ZXZpc2lvbiA1ODE4NykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWVX
aW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAvLyBQdXQgTW92aWVzLmgg
Zmlyc3Qgc28gYnVpbGQgZmFpbHVyZXMgaGVyZSBwb2ludCBjbGVhcmx5IHRvIFF1aWNrVGltZQog
I2luY2x1ZGUgPE1vdmllcy5oPgogCi0jaW5jbHVkZSAiUVRNb3ZpZVdpblRpbWVyLmgiCisjaW5j
bHVkZSAiUVRNb3ZpZVRhc2suaCIKICNpbmNsdWRlIDxHWE1hdGguaD4KICNpbmNsdWRlIDxRVE1M
Lmg+CiAjaW5jbHVkZSA8UXVpY2tUaW1lQ29tcG9uZW50cy5oPgpAQCAtNDIsMTEgKzQyLDYgQEAK
IAogc3RhdGljIGNvbnN0IGxvbmcgbWluaW11bVF1aWNrVGltZVZlcnNpb24gPSAweDA3MzAwMDAw
OyAvLyA3LjMKIAotc3RhdGljIGNvbnN0IGxvbmcgY2xvc2VkQ2FwdGlvblRyYWNrVHlwZSA9ICdj
bGNwJzsKLXN0YXRpYyBjb25zdCBsb25nIHN1YlRpdGxlVHJhY2tUeXBlID0gJ3NidGwnOwotc3Rh
dGljIGNvbnN0IGxvbmcgbXBlZzRPYmplY3REZXNjcmlwdGlvblRyYWNrVHlwZSA9ICdvZHNtJzsK
LXN0YXRpYyBjb25zdCBsb25nIG1wZWc0U2NlbmVEZXNjcmlwdGlvblRyYWNrVHlwZSA9ICdzZHNt
JzsKLXN0YXRpYyBjb25zdCBsb25nIGNsb3NlZENhcHRpb25EaXNwbGF5UHJvcGVydHlJRCA9ICdk
aXNwJzsKIHN0YXRpYyBMUENUU1RSIGZ1bGxzY3JlZW5RVE1vdmllV2luUG9pbnRlclByb3AgPSBU
RVhUKCJmdWxsc2NyZWVuUVRNb3ZpZVdpblBvaW50ZXIiKTsKIAogLy8gUmVzaXppbmcgR1dvcmxk
cyBpcyBzbG93LCBnaXZlIHRoZW0gYSBtaW5pbXVtIHNpemUgc28gc2l6ZSBvZiBzbWFsbCAKQEAg
LTY2LDMzICs2MSwxMyBAQAogc3RhdGljIFZlY3RvcjxDRlN0cmluZ1JlZj4qIGdTdXBwb3J0ZWRU
eXBlcyA9IDA7CiBzdGF0aWMgU0ludDMyIHF1aWNrVGltZVZlcnNpb24gPSAwOwogCi1zdGF0aWMg
UVRNb3ZpZVdpbjo6U2V0VGFza1RpbWVyRGVsYXlGdW5jIGdTZXRUYXNrVGltZXJEZWxheSA9IDA7
Ci1zdGF0aWMgUVRNb3ZpZVdpbjo6U3RvcFRhc2tUaW1lckZ1bmMgZ1N0b3BUYXNrVGltZXIgPSAw
OwotCi1zdGF0aWMgdm9pZCB1cGRhdGVUYXNrVGltZXIoaW50IG1heEludGVydmFsID0gMTAwMCkK
LXsKLSAgICBpZiAoIWdUYXNrTGlzdC0+c2l6ZSgpKSB7Ci0gICAgICAgIGdTdG9wVGFza1RpbWVy
KCk7Ci0gICAgICAgIHJldHVybjsgICAgCi0gICAgfQotICAgIAotICAgIGxvbmcgaW50ZXJ2YWxJ
bk1TOwotICAgIFFUR2V0VGltZVVudGlsTmV4dFRhc2soJmludGVydmFsSW5NUywgMTAwMCk7Ci0g
ICAgaWYgKGludGVydmFsSW5NUyA+IG1heEludGVydmFsKQotICAgICAgICBpbnRlcnZhbEluTVMg
PSBtYXhJbnRlcnZhbDsKLSAgICBnU2V0VGFza1RpbWVyRGVsYXkoc3RhdGljX2Nhc3Q8ZmxvYXQ+
KGludGVydmFsSW5NUykgLyAxMDAwKTsKLX0KLQotY2xhc3MgUVRNb3ZpZVdpblByaXZhdGUgOiBw
dWJsaWMgTm9uY29weWFibGUgeworY2xhc3MgUVRNb3ZpZVdpblByaXZhdGUgOiBwdWJsaWMgUVRN
b3ZpZUNsaWVudCB7CiBwdWJsaWM6Ci0gICAgUVRNb3ZpZVdpblByaXZhdGUoKTsKLSAgICB+UVRN
b3ZpZVdpblByaXZhdGUoKTsKLSAgICB2b2lkIHRhc2soKTsKLSAgICB2b2lkIHN0YXJ0VGFzaygp
OwotICAgIHZvaWQgZW5kVGFzaygpOworICAgIFFUTW92aWVXaW5Qcml2YXRlKFFUTW92aWVXaW4q
IG1vdmllV2luKTsKKyAgICB2aXJ0dWFsIH5RVE1vdmllV2luUHJpdmF0ZSgpOwogCi0gICAgdm9p
ZCBjcmVhdGVNb3ZpZUNvbnRyb2xsZXIoKTsKICAgICB2b2lkIHJlZ2lzdGVyRHJhd2luZ0NhbGxi
YWNrKCk7CisgICAgdm9pZCB1bnJlZ2lzdGVyRHJhd2luZ0NhbGxiYWNrKCk7CiAgICAgdm9pZCBk
cmF3aW5nQ29tcGxldGUoKTsKICAgICB2b2lkIHVwZGF0ZUdXb3JsZCgpOwogICAgIHZvaWQgY3Jl
YXRlR1dvcmxkKCk7CkBAIC0xMDMsMTYgKzc4LDE1IEBACiAKICAgICB2b2lkIHNldFNpemUoaW50
LCBpbnQpOwogCisgICAgdmlydHVhbCB2b2lkIG1vdmllRW5kZWQoUVRNb3ZpZSopOworICAgIHZp
cnR1YWwgdm9pZCBtb3ZpZUxvYWRTdGF0ZUNoYW5nZWQoUVRNb3ZpZSopOworICAgIHZpcnR1YWwg
dm9pZCBtb3ZpZVRpbWVDaGFuZ2VkKFFUTW92aWUqKTsKKwogICAgIFFUTW92aWVXaW4qIG1fbW92
aWVXaW47CisgICAgUmVmUHRyPFFUTW92aWU+IG1fcXRNb3ZpZTsKICAgICBNb3ZpZSBtX21vdmll
OwotICAgIE1vdmllQ29udHJvbGxlciBtX21vdmllQ29udHJvbGxlcjsKLSAgICBib29sIG1fdGFz
a2luZzsKICAgICBRVE1vdmllV2luQ2xpZW50KiBtX2NsaWVudDsKICAgICBsb25nIG1fbG9hZFN0
YXRlOwotICAgIGJvb2wgbV9lbmRlZDsKLSAgICBib29sIG1fc2Vla2luZzsKLSAgICBmbG9hdCBt
X2xhc3RNZWRpYVRpbWU7Ci0gICAgZG91YmxlIG1fbGFzdExvYWRTdGF0ZUNoZWNrVGltZTsKICAg
ICBpbnQgbV93aWR0aDsKICAgICBpbnQgbV9oZWlnaHQ7CiAgICAgYm9vbCBtX3Zpc2libGU7CkBA
IC0xMjAsMTIgKzk0LDggQEAKICAgICBpbnQgbV9nV29ybGRXaWR0aDsKICAgICBpbnQgbV9nV29y
bGRIZWlnaHQ7CiAgICAgR1dvcmxkUHRyIG1fc2F2ZWRHV29ybGQ7Ci0gICAgbG9uZyBtX2xvYWRF
cnJvcjsKICAgICBmbG9hdCBtX3dpZHRoU2NhbGVGYWN0b3I7CiAgICAgZmxvYXQgbV9oZWlnaHRT
Y2FsZUZhY3RvcjsKLSAgICBDRlVSTFJlZiBtX2N1cnJlbnRVUkw7Ci0gICAgZmxvYXQgbV90aW1l
VG9SZXN0b3JlOwotICAgIGZsb2F0IG1fcmF0ZVRvUmVzdG9yZTsKICNpZiAhQVNTRVJUX0RJU0FC
TEVECiAgICAgYm9vbCBtX3NjYWxlQ2FjaGVkOwogI2VuZGlmCkBAIC0xMzQsMTkgKzEwNCwxNCBA
QAogICAgIFJlY3QgbV9mdWxsc2NyZWVuUmVjdDsKICAgICBRVE1vdmllV2luRnVsbHNjcmVlbkNs
aWVudCogbV9mdWxsc2NyZWVuQ2xpZW50OwogICAgIGNoYXIqIG1fZnVsbHNjcmVlblJlc3RvcmVT
dGF0ZTsKKyAgICBib29sIG1fZGlzYWJsZWQ7CiB9OwogCi1RVE1vdmllV2luUHJpdmF0ZTo6UVRN
b3ZpZVdpblByaXZhdGUoKQotICAgIDogbV9tb3ZpZVdpbigwKQorUVRNb3ZpZVdpblByaXZhdGU6
OlFUTW92aWVXaW5Qcml2YXRlKFFUTW92aWVXaW4qIG1vdmllV2luKQorICAgIDogbV9tb3ZpZVdp
bihtb3ZpZVdpbikKICAgICAsIG1fbW92aWUoMCkKLSAgICAsIG1fbW92aWVDb250cm9sbGVyKDAp
Ci0gICAgLCBtX3Rhc2tpbmcoZmFsc2UpCiAgICAgLCBtX2NsaWVudCgwKQogICAgICwgbV9sb2Fk
U3RhdGUoMCkKLSAgICAsIG1fZW5kZWQoZmFsc2UpCi0gICAgLCBtX3NlZWtpbmcoZmFsc2UpCi0g
ICAgLCBtX2xhc3RNZWRpYVRpbWUoMCkKLSAgICAsIG1fbGFzdExvYWRTdGF0ZUNoZWNrVGltZSgw
KQogICAgICwgbV93aWR0aCgwKQogICAgICwgbV9oZWlnaHQoMCkKICAgICAsIG1fdmlzaWJsZShm
YWxzZSkKQEAgLTE1NCwxMiArMTE5LDggQEAKICAgICAsIG1fZ1dvcmxkV2lkdGgoMCkKICAgICAs
IG1fZ1dvcmxkSGVpZ2h0KDApCiAgICAgLCBtX3NhdmVkR1dvcmxkKDApCi0gICAgLCBtX2xvYWRF
cnJvcigwKQogICAgICwgbV93aWR0aFNjYWxlRmFjdG9yKDEpCiAgICAgLCBtX2hlaWdodFNjYWxl
RmFjdG9yKDEpCi0gICAgLCBtX2N1cnJlbnRVUkwoMCkKLSAgICAsIG1fdGltZVRvUmVzdG9yZSgt
MS4wZikKLSAgICAsIG1fcmF0ZVRvUmVzdG9yZSgtMS4wZikKICNpZiAhQVNTRVJUX0RJU0FCTEVE
CiAgICAgLCBtX3NjYWxlQ2FjaGVkKGZhbHNlKQogI2VuZGlmCkBAIC0xNjcsNiArMTI4LDggQEAK
ICAgICAsIG1fZnVsbHNjcmVlbk9yaWdHV29ybGQoMCkKICAgICAsIG1fZnVsbHNjcmVlbkNsaWVu
dCgwKQogICAgICwgbV9mdWxsc2NyZWVuUmVzdG9yZVN0YXRlKDApCisgICAgLCBtX2Rpc2FibGVk
KGZhbHNlKQorICAgICwgbV9xdE1vdmllKDApCiB7CiAgICAgUmVjdCByZWN0ID0geyAwLCAwLCAw
LCAwIH07CiAgICAgbV9mdWxsc2NyZWVuUmVjdCA9IHJlY3Q7CkBAIC0xNzYsNDkgKzEzOSwxMCBA
QAogewogICAgIEFTU0VSVCghbV9mdWxsc2NyZWVuV2luZG93KTsKIAotICAgIGVuZFRhc2soKTsK
ICAgICBpZiAobV9nV29ybGQpCiAgICAgICAgIGRlbGV0ZUdXb3JsZCgpOwotICAgIGlmIChtX21v
dmllQ29udHJvbGxlcikKLSAgICAgICAgRGlzcG9zZU1vdmllQ29udHJvbGxlcihtX21vdmllQ29u
dHJvbGxlcik7Ci0gICAgaWYgKG1fbW92aWUpCi0gICAgICAgIERpc3Bvc2VNb3ZpZShtX21vdmll
KTsKLSAgICBpZiAobV9jdXJyZW50VVJMKQotICAgICAgICBDRlJlbGVhc2UobV9jdXJyZW50VVJM
KTsKIH0KIAotdm9pZCBRVE1vdmllV2luOjp0YXNrVGltZXJGaXJlZCgpCi17Ci0gICAgLy8gVGhl
IGhhc2ggY29udGVudCBtaWdodCBjaGFuZ2UgZHVyaW5nIHRhc2soKQotICAgIFZlY3RvcjxRVE1v
dmllV2luUHJpdmF0ZSo+IHRhc2tzOwotICAgIGNvcHlUb1ZlY3RvcigqZ1Rhc2tMaXN0LCB0YXNr
cyk7Ci0gICAgc2l6ZV90IGNvdW50ID0gdGFza3Muc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQg
biA9IDA7IG4gPCBjb3VudDsgKytuKQotICAgICAgICB0YXNrc1tuXS0+dGFzaygpOwotCi0gICAg
dXBkYXRlVGFza1RpbWVyKCk7Ci19Ci0KLXZvaWQgUVRNb3ZpZVdpblByaXZhdGU6OnN0YXJ0VGFz
aygpIAotewotICAgIGlmIChtX3Rhc2tpbmcpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIWdU
YXNrTGlzdCkKLSAgICAgICAgZ1Rhc2tMaXN0ID0gbmV3IEhhc2hTZXQ8UVRNb3ZpZVdpblByaXZh
dGUqPjsKLSAgICBnVGFza0xpc3QtPmFkZCh0aGlzKTsKLSAgICBtX3Rhc2tpbmcgPSB0cnVlOwot
ICAgIHVwZGF0ZVRhc2tUaW1lcigpOwotfQotCi12b2lkIFFUTW92aWVXaW5Qcml2YXRlOjplbmRU
YXNrKCkgCi17Ci0gICAgaWYgKCFtX3Rhc2tpbmcpCi0gICAgICAgIHJldHVybjsKLSAgICBnVGFz
a0xpc3QtPnJlbW92ZSh0aGlzKTsKLSAgICBtX3Rhc2tpbmcgPSBmYWxzZTsKLSAgICB1cGRhdGVU
YXNrVGltZXIoKTsKLX0KLQogdm9pZCBRVE1vdmllV2luUHJpdmF0ZTo6Y2FjaGVNb3ZpZVNjYWxl
KCkKIHsKICAgICBSZWN0IG5hdHVyYWxSZWN0OwpAQCAtMjM1LDExMCArMTU5LDM4IEBACiAgICAg
aWYgKG5hdHVyYWxIZWlnaHQpCiAgICAgICAgIG1faGVpZ2h0U2NhbGVGYWN0b3IgPSAoaW5pdGlh
bFJlY3QuYm90dG9tIC0gaW5pdGlhbFJlY3QudG9wKSAvIG5hdHVyYWxIZWlnaHQ7CiAjaWYgIUFT
U0VSVF9ESVNBQkxFRAotICAgIG1fc2NhbGVDYWNoZWQgPSB0cnVlOzsKKyAgICBtX3NjYWxlQ2Fj
aGVkID0gdHJ1ZTsKICNlbmRpZgogfQogCi12b2lkIFFUTW92aWVXaW5Qcml2YXRlOjp0YXNrKCkg
CitwYXNjYWwgT1NFcnIgbW92aWVEcmF3aW5nQ29tcGxldGVQcm9jKE1vdmllIG1vdmllLCBsb25n
IGRhdGEpCiB7Ci0gICAgQVNTRVJUKG1fdGFza2luZyk7Ci0KLSAgICBpZiAoIW1fbG9hZEVycm9y
KSB7Ci0gICAgICAgIGlmIChtX21vdmllQ29udHJvbGxlcikKLSAgICAgICAgICAgIE1DSWRsZSht
X21vdmllQ29udHJvbGxlcik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIE1vdmllc1Rhc2so
bV9tb3ZpZSwgMCk7Ci0gICAgfQotCi0gICAgLy8gR2V0TW92aWVMb2FkU3RhdGUgZG9jdW1lbnRh
dGlvbiBzYXlzIHRoYXQgeW91IHNob3VsZCBub3QgY2FsbCBpdCBtb3JlIG9mdGVuIHRoYW4gZXZl
cnkgcXVhcnRlciBvZiBhIHNlY29uZC4KLSAgICBpZiAoc3lzdGVtVGltZSgpID49IG1fbGFzdExv
YWRTdGF0ZUNoZWNrVGltZSArIDAuMjUgfHwgbV9sb2FkRXJyb3IpIHsgCi0gICAgICAgIC8vIElm
IGxvYWQgZmFpbHMgUVQncyBsb2FkIHN0YXRlIGlzIFFUTW92aWVMb2FkU3RhdGVDb21wbGV0ZS4K
LSAgICAgICAgLy8gVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSBRVEtpdCBBUEkgYW5kIHNlZW1zIHN0
cmFuZ2UuCi0gICAgICAgIGxvbmcgbG9hZFN0YXRlID0gbV9sb2FkRXJyb3IgPyBRVE1vdmllTG9h
ZFN0YXRlRXJyb3IgOiBHZXRNb3ZpZUxvYWRTdGF0ZShtX21vdmllKTsKLSAgICAgICAgaWYgKGxv
YWRTdGF0ZSAhPSBtX2xvYWRTdGF0ZSkgewotCi0gICAgICAgICAgICAvLyB3ZSBvbmx5IG5lZWQg
dG8gZXJhc2UgdGhlIG1vdmllIGd3b3JsZCB3aGVuIHRoZSBsb2FkIHN0YXRlIGNoYW5nZXMgdG8g
bG9hZGVkIHdoaWxlIGl0Ci0gICAgICAgICAgICAvLyAgaXMgdmlzaWJsZSBhcyB0aGUgZ3dvcmxk
IGlzIGRlc3Ryb3llZC9jcmVhdGVkIHdoZW4gdmlzaWJpbGl0eSBjaGFuZ2VzCi0gICAgICAgICAg
ICBib29sIHNob3VsZFJlc3RvcmVQbGF5YmFja1N0YXRlID0gZmFsc2U7Ci0gICAgICAgICAgICBi
b29sIG1vdmllTmV3bHlQbGF5YWJsZSA9IGxvYWRTdGF0ZSA+PSBRVE1vdmllTG9hZFN0YXRlTG9h
ZGVkICYmIG1fbG9hZFN0YXRlIDwgUVRNb3ZpZUxvYWRTdGF0ZUxvYWRlZDsKLSAgICAgICAgICAg
IG1fbG9hZFN0YXRlID0gbG9hZFN0YXRlOwotICAgICAgICAgICAgaWYgKG1vdmllTmV3bHlQbGF5
YWJsZSkgewotICAgICAgICAgICAgICAgIGNhY2hlTW92aWVTY2FsZSgpOwotICAgICAgICAgICAg
ICAgIHVwZGF0ZU1vdmllU2l6ZSgpOwotICAgICAgICAgICAgICAgIGlmIChtX3Zpc2libGUpCi0g
ICAgICAgICAgICAgICAgICAgIGNsZWFyR1dvcmxkKCk7Ci0gICAgICAgICAgICAgICAgc2hvdWxk
UmVzdG9yZVBsYXliYWNrU3RhdGUgPSB0cnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBpZiAoIW1fbW92aWVDb250cm9sbGVyICYmIG1fbG9hZFN0YXRlID49IFFUTW92aWVMb2FkU3Rh
dGVMb2FkZWQpCi0gICAgICAgICAgICAgICAgY3JlYXRlTW92aWVDb250cm9sbGVyKCk7Ci0gICAg
ICAgICAgICBtX2NsaWVudC0+bW92aWVMb2FkU3RhdGVDaGFuZ2VkKG1fbW92aWVXaW4pOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBpZiAoc2hvdWxkUmVzdG9yZVBsYXliYWNrU3RhdGUgJiYg
bV90aW1lVG9SZXN0b3JlICE9IC0xLjBmKSB7Ci0gICAgICAgICAgICAgICAgbV9tb3ZpZVdpbi0+
c2V0Q3VycmVudFRpbWUobV90aW1lVG9SZXN0b3JlKTsKLSAgICAgICAgICAgICAgICBtX3RpbWVU
b1Jlc3RvcmUgPSAtMS4wZjsKLSAgICAgICAgICAgICAgICBtX21vdmllV2luLT5zZXRSYXRlKG1f
cmF0ZVRvUmVzdG9yZSk7Ci0gICAgICAgICAgICAgICAgbV9yYXRlVG9SZXN0b3JlID0gLTEuMGY7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChtX21vdmllV2luLT5tX2Rpc2FibGVk
KSB7Ci0gICAgICAgICAgICAgICAgZW5kVGFzaygpOwotICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBtX2xhc3RMb2FkU3RhdGVDaGVja1Rp
bWUgPSBzeXN0ZW1UaW1lKCk7Ci0gICAgfQotCi0gICAgYm9vbCBlbmRlZCA9ICEhSXNNb3ZpZURv
bmUobV9tb3ZpZSk7Ci0gICAgaWYgKGVuZGVkICE9IG1fZW5kZWQpIHsKLSAgICAgICAgbV9lbmRl
ZCA9IGVuZGVkOwotICAgICAgICBpZiAobV9jbGllbnQgJiYgZW5kZWQpCi0gICAgICAgICAgICBt
X2NsaWVudC0+bW92aWVFbmRlZChtX21vdmllV2luKTsKLSAgICB9Ci0KLSAgICBmbG9hdCB0aW1l
ID0gbV9tb3ZpZVdpbi0+Y3VycmVudFRpbWUoKTsKLSAgICBpZiAodGltZSA8IG1fbGFzdE1lZGlh
VGltZSB8fCB0aW1lID49IG1fbGFzdE1lZGlhVGltZSArIGNOb25Db250aW51b3VzVGltZUNoYW5n
ZSB8fCBtX3NlZWtpbmcpIHsKLSAgICAgICAgbV9zZWVraW5nID0gZmFsc2U7Ci0gICAgICAgIGlm
IChtX2NsaWVudCkKLSAgICAgICAgICAgIG1fY2xpZW50LT5tb3ZpZVRpbWVDaGFuZ2VkKG1fbW92
aWVXaW4pOwotICAgIH0KLSAgICBtX2xhc3RNZWRpYVRpbWUgPSB0aW1lOwotCi0gICAgaWYgKG1f
bG9hZEVycm9yKQotICAgICAgICBlbmRUYXNrKCk7CisgICAgVXBwUGFyYW0gcGFyYW07CisgICAg
cGFyYW0ubG9uZ1ZhbHVlID0gZGF0YTsKKyAgICBRVE1vdmllV2luUHJpdmF0ZSogbXAgPSBzdGF0
aWNfY2FzdDxRVE1vdmllV2luUHJpdmF0ZSo+KHBhcmFtLnB0cik7CisgICAgaWYgKG1wKQorICAg
ICAgICBtcC0+ZHJhd2luZ0NvbXBsZXRlKCk7CisgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgUVRN
b3ZpZVdpblByaXZhdGU6OmNyZWF0ZU1vdmllQ29udHJvbGxlcigpCi17Ci0gICAgUmVjdCBib3Vu
ZHM7Ci0gICAgbG9uZyBmbGFnczsKLQotICAgIGlmICghbV9tb3ZpZSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKG1fbW92aWVDb250cm9sbGVyKQotICAgICAgICBEaXNwb3NlTW92aWVDb250
cm9sbGVyKG1fbW92aWVDb250cm9sbGVyKTsKLQotICAgIEdldE1vdmllQm94KG1fbW92aWUsICZi
b3VuZHMpOwotICAgIGZsYWdzID0gbWNUb3BMZWZ0TW92aWUgfCBtY05vdFZpc2libGU7Ci0gICAg
bV9tb3ZpZUNvbnRyb2xsZXIgPSBOZXdNb3ZpZUNvbnRyb2xsZXIobV9tb3ZpZSwgJmJvdW5kcywg
ZmxhZ3MpOwotICAgIGlmICghbV9tb3ZpZUNvbnRyb2xsZXIpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIE1DU2V0Q29udHJvbGxlclBvcnQobV9tb3ZpZUNvbnRyb2xsZXIsIG1fZ1dvcmxkKTsKLSAg
ICBNQ1NldENvbnRyb2xsZXJBdHRhY2hlZChtX21vdmllQ29udHJvbGxlciwgZmFsc2UpOwotfQot
CiB2b2lkIFFUTW92aWVXaW5Qcml2YXRlOjpyZWdpc3RlckRyYXdpbmdDYWxsYmFjaygpCiB7Cisg
ICAgaWYgKCFnTW92aWVEcmF3aW5nQ29tcGxldGVVUFApCisgICAgICAgIGdNb3ZpZURyYXdpbmdD
b21wbGV0ZVVQUCA9IE5ld01vdmllRHJhd2luZ0NvbXBsZXRlVVBQKG1vdmllRHJhd2luZ0NvbXBs
ZXRlUHJvYyk7CisKICAgICBVcHBQYXJhbSBwYXJhbTsKICAgICBwYXJhbS5wdHIgPSB0aGlzOwog
ICAgIFNldE1vdmllRHJhd2luZ0NvbXBsZXRlUHJvYyhtX21vdmllLCBtb3ZpZURyYXdpbmdDYWxs
V2hlbkNoYW5nZWQsIGdNb3ZpZURyYXdpbmdDb21wbGV0ZVVQUCwgcGFyYW0ubG9uZ1ZhbHVlKTsK
IH0KIAordm9pZCBRVE1vdmllV2luUHJpdmF0ZTo6dW5yZWdpc3RlckRyYXdpbmdDYWxsYmFjaygp
Cit7CisgICAgU2V0TW92aWVEcmF3aW5nQ29tcGxldGVQcm9jKG1fbW92aWUsIG1vdmllRHJhd2lu
Z0NhbGxXaGVuQ2hhbmdlZCwgMCwgMCk7Cit9CisKIHZvaWQgUVRNb3ZpZVdpblByaXZhdGU6OmRy
YXdpbmdDb21wbGV0ZSgpCiB7Ci0gICAgaWYgKCFtX2dXb3JsZCB8fCBtX21vdmllV2luLT5tX2Rp
c2FibGVkIHx8IG1fbG9hZFN0YXRlIDwgUVRNb3ZpZUxvYWRTdGF0ZUxvYWRlZCkKKyAgICBpZiAo
IW1fZ1dvcmxkIHx8IG1fbW92aWVXaW4tPm1fcHJpdmF0ZS0+bV9kaXNhYmxlZCB8fCBtX2xvYWRT
dGF0ZSA8IFFUTW92aWVMb2FkU3RhdGVMb2FkZWQpCiAgICAgICAgIHJldHVybjsKICAgICBtX2Ns
aWVudC0+bW92aWVOZXdJbWFnZUF2YWlsYWJsZShtX21vdmllV2luKTsKIH0KQEAgLTM3NywxOSAr
MjI5LDE1IEBACiAgICAgaWYgKGVycikgCiAgICAgICAgIHJldHVybjsKICAgICBHZXRNb3ZpZUdX
b3JsZChtX21vdmllLCAmbV9zYXZlZEdXb3JsZCwgMCk7Ci0gICAgaWYgKG1fbW92aWVDb250cm9s
bGVyKQotICAgICAgICBNQ1NldENvbnRyb2xsZXJQb3J0KG1fbW92aWVDb250cm9sbGVyLCBtX2dX
b3JsZCk7CiAgICAgU2V0TW92aWVHV29ybGQobV9tb3ZpZSwgbV9nV29ybGQsIDApOwogICAgIGJv
dW5kcy5yaWdodCA9IG1fd2lkdGg7CiAgICAgYm91bmRzLmJvdHRvbSA9IG1faGVpZ2h0OwotICAg
IGlmIChtX21vdmllQ29udHJvbGxlcikKLSAgICAgICAgTUNTZXRDb250cm9sbGVyQm91bmRzUmVj
dChtX21vdmllQ29udHJvbGxlciwgJmJvdW5kcyk7CiAgICAgU2V0TW92aWVCb3gobV9tb3ZpZSwg
JmJvdW5kcyk7CiB9CiAKIHZvaWQgUVRNb3ZpZVdpblByaXZhdGU6OmNsZWFyR1dvcmxkKCkKIHsK
LSAgICBpZiAoIW1fbW92aWV8fCFtX2dXb3JsZCkKKyAgICBpZiAoIW1fbW92aWUgfHwgIW1fZ1dv
cmxkKQogICAgICAgICByZXR1cm47CiAKICAgICBHcmFmUHRyIHNhdmVQb3J0OwpAQCAtNDM2LDgg
KzI4NCw2IEBACiAgICAgYm91bmRzLmxlZnQgPSAwOyAKICAgICBib3VuZHMucmlnaHQgPSBtX3dp
ZHRoOwogICAgIGJvdW5kcy5ib3R0b20gPSBtX2hlaWdodDsKLSAgICBpZiAobV9tb3ZpZUNvbnRy
b2xsZXIpCi0gICAgICAgIE1DU2V0Q29udHJvbGxlckJvdW5kc1JlY3QobV9tb3ZpZUNvbnRyb2xs
ZXIsICZib3VuZHMpOwogICAgIFNldE1vdmllQm94KG1fbW92aWUsICZib3VuZHMpOwogICAgIHVw
ZGF0ZUdXb3JsZCgpOwogfQpAQCAtNDQ2LDggKzI5Miw2IEBACiB2b2lkIFFUTW92aWVXaW5Qcml2
YXRlOjpkZWxldGVHV29ybGQoKQogewogICAgIEFTU0VSVChtX2dXb3JsZCk7Ci0gICAgaWYgKG1f
bW92aWVDb250cm9sbGVyKQotICAgICAgICBNQ1NldENvbnRyb2xsZXJQb3J0KG1fbW92aWVDb250
cm9sbGVyLCBtX3NhdmVkR1dvcmxkKTsKICAgICBpZiAobV9tb3ZpZSkKICAgICAgICAgU2V0TW92
aWVHV29ybGQobV9tb3ZpZSwgbV9zYXZlZEdXb3JsZCwgMCk7CiAgICAgbV9zYXZlZEdXb3JsZCA9
IDA7CkBAIC00NTcsMTYwICszMDEsNTAgQEAKICAgICBtX2dXb3JsZEhlaWdodCA9IDA7CiB9CiAK
LQotUVRNb3ZpZVdpbjo6UVRNb3ZpZVdpbihRVE1vdmllV2luQ2xpZW50KiBjbGllbnQpCi0gICAg
OiBtX3ByaXZhdGUobmV3IFFUTW92aWVXaW5Qcml2YXRlKCkpCi0gICAgLCBtX2Rpc2FibGVkKGZh
bHNlKQordm9pZCBRVE1vdmllV2luUHJpdmF0ZTo6bW92aWVFbmRlZChRVE1vdmllKikKIHsKLSAg
ICBtX3ByaXZhdGUtPm1fbW92aWVXaW4gPSB0aGlzOwotICAgIG1fcHJpdmF0ZS0+bV9jbGllbnQg
PSBjbGllbnQ7Ci0gICAgaW5pdGlhbGl6ZVF1aWNrVGltZSgpOworICAgIC8vIERvIG5vdGhpbmcK
IH0KIAotUVRNb3ZpZVdpbjo6flFUTW92aWVXaW4oKQordm9pZCBRVE1vdmllV2luUHJpdmF0ZTo6
bW92aWVMb2FkU3RhdGVDaGFuZ2VkKFFUTW92aWUqIG1vdmllKQogewotICAgIGRlbGV0ZSBtX3By
aXZhdGU7Ci19CisgICAgbG9uZyBsb2FkU3RhdGUgPSBHZXRNb3ZpZUxvYWRTdGF0ZShtb3ZpZS0+
Z2V0TW92aWVIYW5kbGUoKSk7CisgICAgaWYgKGxvYWRTdGF0ZSAhPSBtX2xvYWRTdGF0ZSkgewog
Ci12b2lkIFFUTW92aWVXaW46OnBsYXkoKQotewotICAgIG1fcHJpdmF0ZS0+bV90aW1lVG9SZXN0
b3JlID0gLTEuMGY7CisgICAgICAgIC8vIHdlIG9ubHkgbmVlZCB0byBlcmFzZSB0aGUgbW92aWUg
Z3dvcmxkIHdoZW4gdGhlIGxvYWQgc3RhdGUgY2hhbmdlcyB0byBsb2FkZWQgd2hpbGUgaXQKKyAg
ICAgICAgLy8gIGlzIHZpc2libGUgYXMgdGhlIGd3b3JsZCBpcyBkZXN0cm95ZWQvY3JlYXRlZCB3
aGVuIHZpc2liaWxpdHkgY2hhbmdlcworICAgICAgICBib29sIG1vdmllTmV3bHlQbGF5YWJsZSA9
IGxvYWRTdGF0ZSA+PSBRVE1vdmllTG9hZFN0YXRlTG9hZGVkICYmIG1fbG9hZFN0YXRlIDwgUVRN
b3ZpZUxvYWRTdGF0ZUxvYWRlZDsKKyAgICAgICAgbV9sb2FkU3RhdGUgPSBsb2FkU3RhdGU7CiAK
LSAgICBpZiAobV9wcml2YXRlLT5tX21vdmllQ29udHJvbGxlcikKLSAgICAgICAgTUNEb0FjdGlv
bihtX3ByaXZhdGUtPm1fbW92aWVDb250cm9sbGVyLCBtY0FjdGlvblByZXJvbGxBbmRQbGF5LCAo
dm9pZCAqKUdldE1vdmllUHJlZmVycmVkUmF0ZShtX3ByaXZhdGUtPm1fbW92aWUpKTsKLSAgICBl
bHNlCi0gICAgICAgIFN0YXJ0TW92aWUobV9wcml2YXRlLT5tX21vdmllKTsKLSAgICBtX3ByaXZh
dGUtPnN0YXJ0VGFzaygpOworICAgICAgICBpZiAobW92aWVOZXdseVBsYXlhYmxlKSB7CisgICAg
ICAgICAgICBjYWNoZU1vdmllU2NhbGUoKTsKKyAgICAgICAgICAgIHVwZGF0ZU1vdmllU2l6ZSgp
OworICAgICAgICAgICAgaWYgKG1fdmlzaWJsZSkKKyAgICAgICAgICAgICAgICBjbGVhckdXb3Js
ZCgpOworICAgICAgICB9CisgICAgfQogfQogCi12b2lkIFFUTW92aWVXaW46OnBhdXNlKCkKK3Zv
aWQgUVRNb3ZpZVdpblByaXZhdGU6Om1vdmllVGltZUNoYW5nZWQoUVRNb3ZpZSopCiB7Ci0gICAg
bV9wcml2YXRlLT5tX3RpbWVUb1Jlc3RvcmUgPSAtMS4wZjsKLQotICAgIGlmIChtX3ByaXZhdGUt
Pm1fbW92aWVDb250cm9sbGVyKQotICAgICAgICBNQ0RvQWN0aW9uKG1fcHJpdmF0ZS0+bV9tb3Zp
ZUNvbnRyb2xsZXIsIG1jQWN0aW9uUGxheSwgMCk7Ci0gICAgZWxzZQotICAgICAgICBTdG9wTW92
aWUobV9wcml2YXRlLT5tX21vdmllKTsKLSAgICB1cGRhdGVUYXNrVGltZXIoKTsKKyAgICAvLyBE
byBub3RoaW5nCiB9CiAKLWZsb2F0IFFUTW92aWVXaW46OnJhdGUoKSBjb25zdAorUVRNb3ZpZVdp
bjo6UVRNb3ZpZVdpbihRVE1vdmllV2luQ2xpZW50KiBjbGllbnQpCisgICAgOiBtX3ByaXZhdGUo
bmV3IFFUTW92aWVXaW5Qcml2YXRlKHRoaXMpKQogewotICAgIGlmICghbV9wcml2YXRlLT5tX21v
dmllKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gRml4ZWRUb0Zsb2F0KEdldE1vdmll
UmF0ZShtX3ByaXZhdGUtPm1fbW92aWUpKTsKKyAgICBtX3ByaXZhdGUtPm1fY2xpZW50ID0gY2xp
ZW50OwogfQogCi12b2lkIFFUTW92aWVXaW46OnNldFJhdGUoZmxvYXQgcmF0ZSkKK1FUTW92aWVX
aW46On5RVE1vdmllV2luKCkKIHsKLSAgICBpZiAoIW1fcHJpdmF0ZS0+bV9tb3ZpZSkKLSAgICAg
ICAgcmV0dXJuOyAgICAKLSAgICBtX3ByaXZhdGUtPm1fdGltZVRvUmVzdG9yZSA9IC0xLjBmOwot
ICAgIAotICAgIGlmIChtX3ByaXZhdGUtPm1fbW92aWVDb250cm9sbGVyKQotICAgICAgICBNQ0Rv
QWN0aW9uKG1fcHJpdmF0ZS0+bV9tb3ZpZUNvbnRyb2xsZXIsIG1jQWN0aW9uUHJlcm9sbEFuZFBs
YXksICh2b2lkICopRmxvYXRUb0ZpeGVkKHJhdGUpKTsKLSAgICBlbHNlCi0gICAgICAgIFNldE1v
dmllUmF0ZShtX3ByaXZhdGUtPm1fbW92aWUsIEZsb2F0VG9GaXhlZChyYXRlKSk7Ci0gICAgdXBk
YXRlVGFza1RpbWVyKCk7CisgICAgZGVsZXRlIG1fcHJpdmF0ZTsKIH0KIAotZmxvYXQgUVRNb3Zp
ZVdpbjo6ZHVyYXRpb24oKSBjb25zdAotewotICAgIGlmICghbV9wcml2YXRlLT5tX21vdmllKQot
ICAgICAgICByZXR1cm4gMDsKLSAgICBUaW1lVmFsdWUgdmFsID0gR2V0TW92aWVEdXJhdGlvbiht
X3ByaXZhdGUtPm1fbW92aWUpOwotICAgIFRpbWVTY2FsZSBzY2FsZSA9IEdldE1vdmllVGltZVNj
YWxlKG1fcHJpdmF0ZS0+bV9tb3ZpZSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih2
YWwpIC8gc2NhbGU7Ci19Ci0KLWZsb2F0IFFUTW92aWVXaW46OmN1cnJlbnRUaW1lKCkgY29uc3QK
LXsKLSAgICBpZiAoIW1fcHJpdmF0ZS0+bV9tb3ZpZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
VGltZVZhbHVlIHZhbCA9IEdldE1vdmllVGltZShtX3ByaXZhdGUtPm1fbW92aWUsIDApOwotICAg
IFRpbWVTY2FsZSBzY2FsZSA9IEdldE1vdmllVGltZVNjYWxlKG1fcHJpdmF0ZS0+bV9tb3ZpZSk7
Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih2YWwpIC8gc2NhbGU7Ci19Ci0KLXZvaWQg
UVRNb3ZpZVdpbjo6c2V0Q3VycmVudFRpbWUoZmxvYXQgdGltZSkgY29uc3QKLXsKLSAgICBpZiAo
IW1fcHJpdmF0ZS0+bV9tb3ZpZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9wcml2YXRlLT5t
X3RpbWVUb1Jlc3RvcmUgPSAtMS4wZjsKLSAgICAKLSAgICBtX3ByaXZhdGUtPm1fc2Vla2luZyA9
IHRydWU7Ci0gICAgVGltZVNjYWxlIHNjYWxlID0gR2V0TW92aWVUaW1lU2NhbGUobV9wcml2YXRl
LT5tX21vdmllKTsKLSAgICBpZiAobV9wcml2YXRlLT5tX21vdmllQ29udHJvbGxlcil7Ci0gICAg
ICAgIFFUUmVzdGFydEF0VGltZVJlY29yZCByZXN0YXJ0ID0geyB0aW1lICogc2NhbGUgLCAwIH07
Ci0gICAgICAgIE1DRG9BY3Rpb24obV9wcml2YXRlLT5tX21vdmllQ29udHJvbGxlciwgbWNBY3Rp
b25SZXN0YXJ0QXRUaW1lLCAodm9pZCAqKSZyZXN0YXJ0KTsKLSAgICB9IGVsc2UKLSAgICAgICAg
U2V0TW92aWVUaW1lVmFsdWUobV9wcml2YXRlLT5tX21vdmllLCBUaW1lVmFsdWUodGltZSAqIHNj
YWxlKSk7Ci0gICAgdXBkYXRlVGFza1RpbWVyKCk7Ci19Ci0KLXZvaWQgUVRNb3ZpZVdpbjo6c2V0
Vm9sdW1lKGZsb2F0IHZvbHVtZSkKLXsKLSAgICBpZiAoIW1fcHJpdmF0ZS0+bV9tb3ZpZSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIFNldE1vdmllVm9sdW1lKG1fcHJpdmF0ZS0+bV9tb3ZpZSwgc3Rh
dGljX2Nhc3Q8c2hvcnQ+KHZvbHVtZSAqIDI1NikpOwotfQotCi12b2lkIFFUTW92aWVXaW46OnNl
dFByZXNlcnZlc1BpdGNoKGJvb2wgcHJlc2VydmVzUGl0Y2gpCi17Ci0gICAgaWYgKCFtX3ByaXZh
dGUtPm1fbW92aWUgfHwgIW1fcHJpdmF0ZS0+bV9jdXJyZW50VVJMKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBPU0VyciBlcnJvcjsKLSAgICBib29sIHByb3AgPSBmYWxzZTsKLQotICAgIGVycm9y
ID0gUVRHZXRNb3ZpZVByb3BlcnR5KG1fcHJpdmF0ZS0+bV9tb3ZpZSwga1FUUHJvcGVydHlDbGFz
c19BdWRpbywga1FUQXVkaW9Qcm9wZXJ0eUlEX1JhdGVDaGFuZ2VzUHJlc2VydmVQaXRjaCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoa1FUQXVkaW9Qcm9wZXJ0eUlEX1Jh
dGVDaGFuZ2VzUHJlc2VydmVQaXRjaCksIHN0YXRpY19jYXN0PFFUUHJvcGVydHlWYWx1ZVB0cj4o
JnByb3ApLCAwKTsKLQotICAgIGlmIChlcnJvciB8fCBwcm9wID09IHByZXNlcnZlc1BpdGNoKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBtX3ByaXZhdGUtPm1fdGltZVRvUmVzdG9yZSA9IGN1cnJl
bnRUaW1lKCk7Ci0gICAgbV9wcml2YXRlLT5tX3JhdGVUb1Jlc3RvcmUgPSByYXRlKCk7Ci0gICAg
bG9hZChtX3ByaXZhdGUtPm1fY3VycmVudFVSTCwgcHJlc2VydmVzUGl0Y2gpOwotfQotCi11bnNp
Z25lZCBRVE1vdmllV2luOjpkYXRhU2l6ZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3ByaXZhdGUt
Pm1fbW92aWUpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBHZXRNb3ZpZURhdGFTaXpl
KG1fcHJpdmF0ZS0+bV9tb3ZpZSwgMCwgR2V0TW92aWVEdXJhdGlvbihtX3ByaXZhdGUtPm1fbW92
aWUpKTsKLX0KLQotZmxvYXQgUVRNb3ZpZVdpbjo6bWF4VGltZUxvYWRlZCgpIGNvbnN0Ci17Ci0g
ICAgaWYgKCFtX3ByaXZhdGUtPm1fbW92aWUpCi0gICAgICAgIHJldHVybiAwOwotICAgIFRpbWVW
YWx1ZSB2YWw7Ci0gICAgR2V0TWF4TG9hZGVkVGltZUluTW92aWUobV9wcml2YXRlLT5tX21vdmll
LCAmdmFsKTsKLSAgICBUaW1lU2NhbGUgc2NhbGUgPSBHZXRNb3ZpZVRpbWVTY2FsZShtX3ByaXZh
dGUtPm1fbW92aWUpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4odmFsKSAvIHNjYWxl
OwotfQotCi1sb25nIFFUTW92aWVXaW46OmxvYWRTdGF0ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1fcHJpdmF0ZS0+bV9sb2FkU3RhdGU7Ci19Ci0KLXZvaWQgUVRNb3ZpZVdpbjo6Z2V0TmF0dXJh
bFNpemUoaW50JiB3aWR0aCwgaW50JiBoZWlnaHQpCi17Ci0gICAgUmVjdCByZWN0ID0geyAwLCB9
OwotCi0gICAgaWYgKG1fcHJpdmF0ZS0+bV9tb3ZpZSkKLSAgICAgICAgR2V0TW92aWVOYXR1cmFs
Qm91bmRzUmVjdChtX3ByaXZhdGUtPm1fbW92aWUsICZyZWN0KTsKLSAgICB3aWR0aCA9IChyZWN0
LnJpZ2h0IC0gcmVjdC5sZWZ0KSAqIG1fcHJpdmF0ZS0+bV93aWR0aFNjYWxlRmFjdG9yOwotICAg
IGhlaWdodCA9IChyZWN0LmJvdHRvbSAtIHJlY3QudG9wKSAqIG1fcHJpdmF0ZS0+bV9oZWlnaHRT
Y2FsZUZhY3RvcjsKLX0KLQogdm9pZCBRVE1vdmllV2luOjpzZXRTaXplKGludCB3aWR0aCwgaW50
IGhlaWdodCkKIHsKICAgICBtX3ByaXZhdGUtPnNldFNpemUod2lkdGgsIGhlaWdodCk7Ci0gICAg
dXBkYXRlVGFza1RpbWVyKDApOworICAgIFFUTW92aWVUYXNrOjpzaGFyZWRUYXNrKCktPnVwZGF0
ZVRhc2tUaW1lcigpOwogfQogCiB2b2lkIFFUTW92aWVXaW46OnNldFZpc2libGUoYm9vbCBiKQpA
QCAtNjU2LDQ0OCArMzkwLDE2IEBACiAgICAgICAgICAwLCAwLCBtX3ByaXZhdGUtPm1fd2lkdGgs
IG1fcHJpdmF0ZS0+bV9oZWlnaHQsIGJsZW5kRnVuY3Rpb24pOwogfQogCi12b2lkIFFUTW92aWVX
aW46OmxvYWQoY29uc3QgVUNoYXIqIHVybCwgaW50IGxlbiwgYm9vbCBwcmVzZXJ2ZXNQaXRjaCkK
LXsKLSAgICBDRlN0cmluZ1JlZiB1cmxTdHJpbmdSZWYgPSBDRlN0cmluZ0NyZWF0ZVdpdGhDaGFy
YWN0ZXJzKGtDRkFsbG9jYXRvckRlZmF1bHQsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVW5pQ2hh
cio+KHVybCksIGxlbik7Ci0gICAgQ0ZVUkxSZWYgY2ZVUkwgPSBDRlVSTENyZWF0ZVdpdGhTdHJp
bmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgdXJsU3RyaW5nUmVmLCAwKTsKLQotICAgIGxvYWQoY2ZV
UkwsIHByZXNlcnZlc1BpdGNoKTsKLQotICAgIENGUmVsZWFzZShjZlVSTCk7Ci0gICAgQ0ZSZWxl
YXNlKHVybFN0cmluZ1JlZik7Ci19Ci0KLXZvaWQgUVRNb3ZpZVdpbjo6bG9hZChDRlVSTFJlZiB1
cmwsIGJvb2wgcHJlc2VydmVzUGl0Y2gpCi17Ci0gICAgaWYgKCF1cmwpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChtX3ByaXZhdGUtPm1fbW92aWUpIHsKLSAgICAgICAgbV9wcml2YXRlLT5l
bmRUYXNrKCk7Ci0gICAgICAgIGlmIChtX3ByaXZhdGUtPm1fZ1dvcmxkKQotICAgICAgICAgICAg
bV9wcml2YXRlLT5kZWxldGVHV29ybGQoKTsKLSAgICAgICAgaWYgKG1fcHJpdmF0ZS0+bV9tb3Zp
ZUNvbnRyb2xsZXIpCi0gICAgICAgICAgICBEaXNwb3NlTW92aWVDb250cm9sbGVyKG1fcHJpdmF0
ZS0+bV9tb3ZpZUNvbnRyb2xsZXIpOwotICAgICAgICBtX3ByaXZhdGUtPm1fbW92aWVDb250cm9s
bGVyID0gMDsKLSAgICAgICAgRGlzcG9zZU1vdmllKG1fcHJpdmF0ZS0+bV9tb3ZpZSk7Ci0gICAg
ICAgIG1fcHJpdmF0ZS0+bV9tb3ZpZSA9IDA7Ci0gICAgICAgIG1fcHJpdmF0ZS0+bV9sb2FkU3Rh
dGUgPSAwOwotICAgIH0gIAotCi0gICAgLy8gRGVmaW5lIGEgcHJvcGVydHkgYXJyYXkgZm9yIE5l
d01vdmllRnJvbVByb3BlcnRpZXMuIDggc2hvdWxkIGJlIGVub3VnaCBmb3Igb3VyIG5lZWRzLiAK
LSAgICBRVE5ld01vdmllUHJvcGVydHlFbGVtZW50IG1vdmllUHJvcHNbOF07IAotICAgIEl0ZW1D
b3VudCBtb3ZpZVByb3BDb3VudCA9IDA7IAotCi0gICAgYm9vbCBib29sVHJ1ZSA9IHRydWU7Ci0g
ICAgCi0gICAgLy8gRGlzYWJsZSBzdHJlYW1pbmcgc3VwcG9ydCBmb3Igbm93LiAKLSAgICBDRlN0
cmluZ1JlZiBzY2hlbWUgPSBDRlVSTENvcHlTY2hlbWUodXJsKTsKLSAgICBib29sIGlzUlRTUCA9
IENGU3RyaW5nSGFzUHJlZml4KHNjaGVtZSwgQ0ZTVFIoInJ0c3A6IikpOwotICAgIENGUmVsZWFz
ZShzY2hlbWUpOwotCi0gICAgaWYgKGlzUlRTUCkgewotICAgICAgICBtX3ByaXZhdGUtPm1fbG9h
ZEVycm9yID0gbm9Nb3ZpZUZvdW5kOwotICAgICAgICBnb3RvIGVuZDsKLSAgICB9Ci0KLSAgICBp
ZiAobV9wcml2YXRlLT5tX2N1cnJlbnRVUkwpIHsKLSAgICAgICAgaWYgKG1fcHJpdmF0ZS0+bV9j
dXJyZW50VVJMICE9IHVybCkgewotICAgICAgICAgICAgQ0ZSZWxlYXNlKG1fcHJpdmF0ZS0+bV9j
dXJyZW50VVJMKTsKLSAgICAgICAgICAgIG1fcHJpdmF0ZS0+bV9jdXJyZW50VVJMID0gdXJsOwot
ICAgICAgICAgICAgQ0ZSZXRhaW4odXJsKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIG1fcHJpdmF0ZS0+bV9jdXJyZW50VVJMID0gdXJsOwotICAgICAgICBDRlJldGFpbih1cmwp
OwotICAgIH0KLQotICAgIC8vIEFkZCB0aGUgbW92aWUgZGF0YSBsb2NhdGlvbiB0byB0aGUgcHJv
cGVydHkgYXJyYXkgCi0gICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcENsYXNzID0g
a1FUUHJvcGVydHlDbGFzc19EYXRhTG9jYXRpb247IAotICAgIG1vdmllUHJvcHNbbW92aWVQcm9w
Q291bnRdLnByb3BJRCA9IGtRVERhdGFMb2NhdGlvblByb3BlcnR5SURfQ0ZVUkw7IAotICAgIG1v
dmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BWYWx1ZVNpemUgPSBzaXplb2YobV9wcml2YXRl
LT5tX2N1cnJlbnRVUkwpOyAKLSAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wVmFs
dWVBZGRyZXNzID0gJihtX3ByaXZhdGUtPm1fY3VycmVudFVSTCk7IAotICAgIG1vdmllUHJvcHNb
bW92aWVQcm9wQ291bnRdLnByb3BTdGF0dXMgPSAwOyAKLSAgICBtb3ZpZVByb3BDb3VudCsrOyAK
LQotICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BDbGFzcyA9IGtRVFByb3BlcnR5
Q2xhc3NfTW92aWVJbnN0YW50aWF0aW9uOyAKLSAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50
XS5wcm9wSUQgPSBrUVRNb3ZpZUluc3RhbnRpYXRpb25Qcm9wZXJ0eUlEX0RvbnRBc2tVbnJlc29s
dmVkRGF0YVJlZnM7IAotICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BWYWx1ZVNp
emUgPSBzaXplb2YoYm9vbFRydWUpOyAKLSAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5w
cm9wVmFsdWVBZGRyZXNzID0gJmJvb2xUcnVlOyAKLSAgICBtb3ZpZVByb3BzW21vdmllUHJvcENv
dW50XS5wcm9wU3RhdHVzID0gMDsgCi0gICAgbW92aWVQcm9wQ291bnQrKzsgCi0KLSAgICBtb3Zp
ZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wQ2xhc3MgPSBrUVRQcm9wZXJ0eUNsYXNzX01vdmll
SW5zdGFudGlhdGlvbjsgCi0gICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcElEID0g
a1FUTW92aWVJbnN0YW50aWF0aW9uUHJvcGVydHlJRF9Bc3luY09LOyAKLSAgICBtb3ZpZVByb3Bz
W21vdmllUHJvcENvdW50XS5wcm9wVmFsdWVTaXplID0gc2l6ZW9mKGJvb2xUcnVlKTsgCi0gICAg
bW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcFZhbHVlQWRkcmVzcyA9ICZib29sVHJ1ZTsg
Ci0gICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcFN0YXR1cyA9IDA7IAotICAgIG1v
dmllUHJvcENvdW50Kys7IAotCi0gICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcENs
YXNzID0ga1FUUHJvcGVydHlDbGFzc19OZXdNb3ZpZVByb3BlcnR5OyAKLSAgICBtb3ZpZVByb3Bz
W21vdmllUHJvcENvdW50XS5wcm9wSUQgPSBrUVROZXdNb3ZpZVByb3BlcnR5SURfQWN0aXZlOyAK
LSAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wVmFsdWVTaXplID0gc2l6ZW9mKGJv
b2xUcnVlKTsgCi0gICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcFZhbHVlQWRkcmVz
cyA9ICZib29sVHJ1ZTsgCi0gICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcFN0YXR1
cyA9IDA7IAotICAgIG1vdmllUHJvcENvdW50Kys7IAotCi0gICAgbW92aWVQcm9wc1ttb3ZpZVBy
b3BDb3VudF0ucHJvcENsYXNzID0ga1FUUHJvcGVydHlDbGFzc19OZXdNb3ZpZVByb3BlcnR5OyAK
LSAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wSUQgPSBrUVROZXdNb3ZpZVByb3Bl
cnR5SURfRG9udEludGVyYWN0V2l0aFVzZXI7IAotICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291
bnRdLnByb3BWYWx1ZVNpemUgPSBzaXplb2YoYm9vbFRydWUpOyAKLSAgICBtb3ZpZVByb3BzW21v
dmllUHJvcENvdW50XS5wcm9wVmFsdWVBZGRyZXNzID0gJmJvb2xUcnVlOyAKLSAgICBtb3ZpZVBy
b3BzW21vdmllUHJvcENvdW50XS5wcm9wU3RhdHVzID0gMDsgCi0gICAgbW92aWVQcm9wQ291bnQr
KzsgCi0KLSAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wQ2xhc3MgPSBrUVRQcm9w
ZXJ0eUNsYXNzX01vdmllSW5zdGFudGlhdGlvbjsKLSAgICBtb3ZpZVByb3BzW21vdmllUHJvcENv
dW50XS5wcm9wSUQgPSAnIXVybCc7Ci0gICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJv
cFZhbHVlU2l6ZSA9IHNpemVvZihib29sVHJ1ZSk7IAotICAgIG1vdmllUHJvcHNbbW92aWVQcm9w
Q291bnRdLnByb3BWYWx1ZUFkZHJlc3MgPSAmYm9vbFRydWU7IAotICAgIG1vdmllUHJvcHNbbW92
aWVQcm9wQ291bnRdLnByb3BTdGF0dXMgPSAwOyAKLSAgICBtb3ZpZVByb3BDb3VudCsrOyAKLQot
ICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BDbGFzcyA9IGtRVFByb3BlcnR5Q2xh
c3NfTW92aWVJbnN0YW50aWF0aW9uOyAKLSAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5w
cm9wSUQgPSAnc2l0ZSc7Ci0gICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcFZhbHVl
U2l6ZSA9IHNpemVvZihib29sVHJ1ZSk7IAotICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRd
LnByb3BWYWx1ZUFkZHJlc3MgPSAmYm9vbFRydWU7IAotICAgIG1vdmllUHJvcHNbbW92aWVQcm9w
Q291bnRdLnByb3BTdGF0dXMgPSAwOyAKLSAgICBtb3ZpZVByb3BDb3VudCsrOwotCi0gICAgbW92
aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcENsYXNzID0ga1FUUHJvcGVydHlDbGFzc19BdWRp
bzsgCi0gICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcElEID0ga1FUQXVkaW9Qcm9w
ZXJ0eUlEX1JhdGVDaGFuZ2VzUHJlc2VydmVQaXRjaDsKLSAgICBtb3ZpZVByb3BzW21vdmllUHJv
cENvdW50XS5wcm9wVmFsdWVTaXplID0gc2l6ZW9mKHByZXNlcnZlc1BpdGNoKTsgCi0gICAgbW92
aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcFZhbHVlQWRkcmVzcyA9ICZwcmVzZXJ2ZXNQaXRj
aDsgCi0gICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcFN0YXR1cyA9IDA7IAotICAg
IG1vdmllUHJvcENvdW50Kys7IAotCi0gICAgQVNTRVJUKG1vdmllUHJvcENvdW50IDw9IHNpemVv
Zihtb3ZpZVByb3BzKS9zaXplb2YobW92aWVQcm9wc1swXSkpOwotICAgIG1fcHJpdmF0ZS0+bV9s
b2FkRXJyb3IgPSBOZXdNb3ZpZUZyb21Qcm9wZXJ0aWVzKG1vdmllUHJvcENvdW50LCBtb3ZpZVBy
b3BzLCAwLCAwLCAmbV9wcml2YXRlLT5tX21vdmllKTsKLQotZW5kOgotICAgIG1fcHJpdmF0ZS0+
c3RhcnRUYXNrKCk7Ci0gICAgLy8gZ2V0IHRoZSBsb2FkIGZhaWwgY2FsbGJhY2sgcXVpY2tseSAK
LSAgICBpZiAobV9wcml2YXRlLT5tX2xvYWRFcnJvcikKLSAgICAgICAgdXBkYXRlVGFza1RpbWVy
KDApOwotICAgIGVsc2UgewotICAgICAgICBPU1R5cGUgbW9kZSA9IGtRVEFwZXJ0dXJlTW9kZV9D
bGVhbkFwZXJ0dXJlOwotCi0gICAgICAgIC8vIFNldCB0aGUgYXBlcnR1cmUgbW9kZSBwcm9wZXJ0
eSBvbiBhIG1vdmllIHRvIHNpZ25hbCB0aGF0IHdlIHdhbnQgYXNwZWN0IHJhdGlvCi0gICAgICAg
IC8vIGFuZCBjbGVhbiBhcGVydHVyZSBkaW1lbnNpb25zLiBEb24ndCB3b3JyeSBhYm91dCBlcnJv
cnMsIHdlIGNhbid0IGRvIGFueXRoaW5nIGlmCi0gICAgICAgIC8vIHRoZSBpbnN0YWxsZWQgdmVy
c2lvbiBvZiBRVCBkb2Vzbid0IHN1cHBvcnQgaXQgYW5kIGl0IGlzbid0IHNlcmlvdXMgZW5vdWdo
IHRvIAotICAgICAgICAvLyB3YXJyYW50IGZhaWxpbmcuCi0gICAgICAgIFFUU2V0TW92aWVQcm9w
ZXJ0eShtX3ByaXZhdGUtPm1fbW92aWUsIGtRVFByb3BlcnR5Q2xhc3NfVmlzdWFsLCBrUVRWaXN1
YWxQcm9wZXJ0eUlEX0FwZXJ0dXJlTW9kZSwgc2l6ZW9mKG1vZGUpLCAmbW9kZSk7Ci0gICAgICAg
IG1fcHJpdmF0ZS0+cmVnaXN0ZXJEcmF3aW5nQ2FsbGJhY2soKTsKLSAgICB9Ci19Ci0KLXZvaWQg
UVRNb3ZpZVdpbjo6ZGlzYWJsZVVuc3VwcG9ydGVkVHJhY2tzKHVuc2lnbmVkJiBlbmFibGVkVHJh
Y2tDb3VudCwgdW5zaWduZWQmIHRvdGFsVHJhY2tDb3VudCkKLXsKLSAgICBpZiAoIW1fcHJpdmF0
ZS0+bV9tb3ZpZSkgewotICAgICAgICB0b3RhbFRyYWNrQ291bnQgPSAwOwotICAgICAgICBlbmFi
bGVkVHJhY2tDb3VudCA9IDA7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzdGF0aWMg
SGFzaFNldDxPU1R5cGU+KiBhbGxvd2VkVHJhY2tUeXBlcyA9IDA7Ci0gICAgaWYgKCFhbGxvd2Vk
VHJhY2tUeXBlcykgewotICAgICAgICBhbGxvd2VkVHJhY2tUeXBlcyA9IG5ldyBIYXNoU2V0PE9T
VHlwZT47Ci0gICAgICAgIGFsbG93ZWRUcmFja1R5cGVzLT5hZGQoVmlkZW9NZWRpYVR5cGUpOwot
ICAgICAgICBhbGxvd2VkVHJhY2tUeXBlcy0+YWRkKFNvdW5kTWVkaWFUeXBlKTsKLSAgICAgICAg
YWxsb3dlZFRyYWNrVHlwZXMtPmFkZChUZXh0TWVkaWFUeXBlKTsKLSAgICAgICAgYWxsb3dlZFRy
YWNrVHlwZXMtPmFkZChCYXNlTWVkaWFUeXBlKTsKLSAgICAgICAgYWxsb3dlZFRyYWNrVHlwZXMt
PmFkZChjbG9zZWRDYXB0aW9uVHJhY2tUeXBlKTsKLSAgICAgICAgYWxsb3dlZFRyYWNrVHlwZXMt
PmFkZChzdWJUaXRsZVRyYWNrVHlwZSk7Ci0gICAgICAgIGFsbG93ZWRUcmFja1R5cGVzLT5hZGQo
bXBlZzRPYmplY3REZXNjcmlwdGlvblRyYWNrVHlwZSk7Ci0gICAgICAgIGFsbG93ZWRUcmFja1R5
cGVzLT5hZGQobXBlZzRTY2VuZURlc2NyaXB0aW9uVHJhY2tUeXBlKTsKLSAgICAgICAgYWxsb3dl
ZFRyYWNrVHlwZXMtPmFkZChUaW1lQ29kZU1lZGlhVHlwZSk7Ci0gICAgICAgIGFsbG93ZWRUcmFj
a1R5cGVzLT5hZGQoVGltZUNvZGU2NE1lZGlhVHlwZSk7Ci0gICAgfQotCi0gICAgbG9uZyB0cmFj
a0NvdW50ID0gR2V0TW92aWVUcmFja0NvdW50KG1fcHJpdmF0ZS0+bV9tb3ZpZSk7Ci0gICAgZW5h
YmxlZFRyYWNrQ291bnQgPSB0cmFja0NvdW50OwotICAgIHRvdGFsVHJhY2tDb3VudCA9IHRyYWNr
Q291bnQ7Ci0KLSAgICAvLyBUcmFjayBpbmRleGVzIGFyZSAxLWJhc2VkLiB5dWNrLiBUaGVzZSB0
aGluZ3MgbXVzdCBkZXNjZW5kIGZyb20gb2xkLQotICAgIC8vIHNjaG9vbCBtYWMgcmVzb3VyY2Vz
IG9yIHNvbWV0aGluZy4KLSAgICBmb3IgKGxvbmcgdHJhY2tJbmRleCA9IDE7IHRyYWNrSW5kZXgg
PD0gdHJhY2tDb3VudDsgdHJhY2tJbmRleCsrKSB7Ci0gICAgICAgIC8vIEdyYWIgdGhlIHRyYWNr
IGF0IHRoZSBjdXJyZW50IGluZGV4LiBJZiB0aGVyZSBpc24ndCBvbmUgdGhlcmUsIHRoZW4KLSAg
ICAgICAgLy8gd2UgY2FuIG1vdmUgb250byB0aGUgbmV4dCBvbmUuCi0gICAgICAgIFRyYWNrIGN1
cnJlbnRUcmFjayA9IEdldE1vdmllSW5kVHJhY2sobV9wcml2YXRlLT5tX21vdmllLCB0cmFja0lu
ZGV4KTsKLSAgICAgICAgaWYgKCFjdXJyZW50VHJhY2spCi0gICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgCi0gICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGUgdHJhY2sgaXMgZGlzYWJs
ZWQgYWxyZWFkeSwgd2Ugc2hvdWxkIG1vdmUgYWxvbmcuCi0gICAgICAgIC8vIFdlIGRvbid0IG5l
ZWQgdG8gcmUtZGlzYWJsZSBpdC4KLSAgICAgICAgaWYgKCFHZXRUcmFja0VuYWJsZWQoY3VycmVu
dFRyYWNrKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIC8vIEdyYWIgdGhlIHRy
YWNrJ3MgbWVkaWEuIFdlJ3JlIGdvaW5nIHRvIGNoZWNrIHRvIHNlZSBpZiB3ZSBuZWVkIHRvCi0g
ICAgICAgIC8vIGRpc2FibGUgdGhlIHRyYWNrcy4gVGhleSBjb3VsZCBiZSB1bnN1cHBvcnRlZC4K
LSAgICAgICAgTWVkaWEgdHJhY2tNZWRpYSA9IEdldFRyYWNrTWVkaWEoY3VycmVudFRyYWNrKTsK
LSAgICAgICAgaWYgKCF0cmFja01lZGlhKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IAotICAgICAgICAvLyBHcmFiIHRoZSBtZWRpYSB0eXBlIGZvciB0aGlzIHRyYWNrLiBNYWtlIHN1
cmUgdGhhdCB3ZSBkb24ndAotICAgICAgICAvLyBnZXQgYW4gZXJyb3IgaW4gZG9pbmcgc28uIElm
IHdlIGRvLCB0aGVuIHNvbWV0aGluZyByZWFsbHkgZnVua3kgaXMKLSAgICAgICAgLy8gd3Jvbmcu
Ci0gICAgICAgIE9TVHlwZSBtZWRpYVR5cGU7Ci0gICAgICAgIEdldE1lZGlhSGFuZGxlckRlc2Ny
aXB0aW9uKHRyYWNrTWVkaWEsICZtZWRpYVR5cGUsIG5pbCwgbmlsKTsKLSAgICAgICAgT1NFcnIg
bWVkaWFFcnIgPSBHZXRNb3ZpZXNFcnJvcigpOyAgICAKLSAgICAgICAgaWYgKG1lZGlhRXJyICE9
IG5vRXJyKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAotICAgICAgICBpZiAoIWFs
bG93ZWRUcmFja1R5cGVzLT5jb250YWlucyhtZWRpYVR5cGUpKSB7Ci0KLSAgICAgICAgICAgIC8v
IERpZmZlcmVudCBtcGVnIHZhcmlhbnRzIGltcG9ydCBhcyBkaWZmZXJlbnQgdHJhY2sgdHlwZXMg
c28gY2hlY2sgZm9yIHRoZSAibXBlZyAKLSAgICAgICAgICAgIC8vIGNoYXJhY3RlcmlzdGljIiBp
bnN0ZWFkIG9mIGhhcmQgY29kaW5nIHRoZSAoY3VycmVudCkgbGlzdCBvZiBtcGVnIG1lZGlhIHR5
cGVzLgotICAgICAgICAgICAgaWYgKEdldE1vdmllSW5kVHJhY2tUeXBlKG1fcHJpdmF0ZS0+bV9t
b3ZpZSwgMSwgJ21wZWcnLCBtb3ZpZVRyYWNrQ2hhcmFjdGVyaXN0aWMgfCBtb3ZpZVRyYWNrRW5h
YmxlZE9ubHkpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBTZXRU
cmFja0VuYWJsZWQoY3VycmVudFRyYWNrLCBmYWxzZSk7Ci0gICAgICAgICAgICAtLWVuYWJsZWRU
cmFja0NvdW50OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBHcmFiIHRoZSB0cmFj
ayByZWZlcmVuY2UgY291bnQgZm9yIGNoYXB0ZXJzLiBUaGlzIHdpbGwgdGVsbCB1cyBpZiBpdAot
ICAgICAgICAvLyBoYXMgY2hhcHRlciB0cmFja3MgaW4gaXQuIElmIHRoZXJlIGFyZW4ndCBhbnkg
cmVmZXJlbmNlcywgdGhlbiB3ZQotICAgICAgICAvLyBjYW4gbW92ZSBvbiB0aGUgbmV4dCB0cmFj
ay4KLSAgICAgICAgbG9uZyByZWZlcmVuY2VDb3VudCA9IEdldFRyYWNrUmVmZXJlbmNlQ291bnQo
Y3VycmVudFRyYWNrLCBrVHJhY2tSZWZlcmVuY2VDaGFwdGVyTGlzdCk7Ci0gICAgICAgIGlmIChy
ZWZlcmVuY2VDb3VudCA8PSAwKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAotICAg
ICAgICBsb25nIHJlZmVyZW5jZUluZGV4ID0gMDsgICAgICAgIAotICAgICAgICB3aGlsZSAoMSkg
ewotICAgICAgICAgICAgLy8gSWYgd2UgZ2V0IG5vdGhpbmcgaGVyZSwgd2UndmUgb3ZlcnN0ZXBw
ZWQgb3VyIGJvdW5kcyBhbmQgY2FuIHN0b3AKLSAgICAgICAgICAgIC8vIGxvb2tpbmcuIENoYXB0
ZXIgaW5kaWNlcyBoZXJlIGFyZSAxLWJhc2VkIGFzIHdlbGwgLSBoZW5jZSwgdGhlCi0gICAgICAg
ICAgICAvLyBwcmUtaW5jcmVtZW50LgotICAgICAgICAgICAgcmVmZXJlbmNlSW5kZXgrKzsKLSAg
ICAgICAgICAgIFRyYWNrIGNoYXB0ZXJUcmFjayA9IEdldFRyYWNrUmVmZXJlbmNlKGN1cnJlbnRU
cmFjaywga1RyYWNrUmVmZXJlbmNlQ2hhcHRlckxpc3QsIHJlZmVyZW5jZUluZGV4KTsKLSAgICAg
ICAgICAgIGlmICghY2hhcHRlclRyYWNrKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICAvLyBUcnkgdG8gZ3JhYiB0aGUgbWVkaWEgZm9yIHRoZSB0cmFj
ay4KLSAgICAgICAgICAgIE1lZGlhIGNoYXB0ZXJNZWRpYSA9IEdldFRyYWNrTWVkaWEoY2hhcHRl
clRyYWNrKTsKLSAgICAgICAgICAgIGlmICghY2hhcHRlck1lZGlhKQotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAKLSAgICAgICAgICAgIC8vIEdyYWIgdGhlIG1lZGlhIHR5cGUg
Zm9yIHRoaXMgdHJhY2suIE1ha2Ugc3VyZSB0aGF0IHdlIGRvbid0Ci0gICAgICAgICAgICAvLyBn
ZXQgYW4gZXJyb3IgaW4gZG9pbmcgc28uIElmIHdlIGRvLCB0aGVuIHNvbWV0aGluZyByZWFsbHkK
LSAgICAgICAgICAgIC8vIGZ1bmt5IGlzIHdyb25nLgotICAgICAgICAgICAgT1NUeXBlIG1lZGlh
VHlwZTsKLSAgICAgICAgICAgIEdldE1lZGlhSGFuZGxlckRlc2NyaXB0aW9uKGNoYXB0ZXJNZWRp
YSwgJm1lZGlhVHlwZSwgbmlsLCBuaWwpOwotICAgICAgICAgICAgT1NFcnIgbWVkaWFFcnIgPSBH
ZXRNb3ZpZXNFcnJvcigpOwotICAgICAgICAgICAgaWYgKG1lZGlhRXJyICE9IG5vRXJyKQotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBDaGVj
ayB0byBzZWUgaWYgdGhlIHRyYWNrIGlzIGEgdmlkZW8gdHJhY2suIFdlIGRvbid0IGNhcmUgYWJv
dXQKLSAgICAgICAgICAgIC8vIG90aGVyIG5vbi12aWRlbyB0cmFja3MuCi0gICAgICAgICAgICBp
ZiAobWVkaWFUeXBlICE9IFZpZGVvTWVkaWFUeXBlKQotICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIHRyYWNr
IGlzIGFscmVhZHkgZGlzYWJsZWQuIElmIGl0IGlzLCB3ZQotICAgICAgICAgICAgLy8gc2hvdWxk
IG1vdmUgYWxvbmcuCi0gICAgICAgICAgICBpZiAoIUdldFRyYWNrRW5hYmxlZChjaGFwdGVyVHJh
Y2spKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICAvLyBEaXNhYmxlZCB0aGUgZXZpbCwgZXZpbCB0cmFjay4KLSAgICAgICAgICAgIFNldFRyYWNr
RW5hYmxlZChjaGFwdGVyVHJhY2ssIGZhbHNlKTsKLSAgICAgICAgICAgIC0tZW5hYmxlZFRyYWNr
Q291bnQ7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KIHZvaWQgUVRNb3ZpZVdpbjo6c2V0RGlzYWJs
ZWQoYm9vbCBiKQogewotICAgIG1fZGlzYWJsZWQgPSBiOworICAgIG1fcHJpdmF0ZS0+bV9kaXNh
YmxlZCA9IGI7CiB9CiAKLQotYm9vbCBRVE1vdmllV2luOjpoYXNWaWRlbygpIGNvbnN0Citib29s
IFFUTW92aWVXaW46OmlzRGlzYWJsZWQoKSBjb25zdAogewotICAgIGlmICghbV9wcml2YXRlLT5t
X21vdmllKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIChHZXRNb3ZpZUluZFRy
YWNrVHlwZShtX3ByaXZhdGUtPm1fbW92aWUsIDEsIFZpc3VhbE1lZGlhQ2hhcmFjdGVyaXN0aWMs
IG1vdmllVHJhY2tDaGFyYWN0ZXJpc3RpYyB8IG1vdmllVHJhY2tFbmFibGVkT25seSkpOworICAg
IHJldHVybiBtX3ByaXZhdGUtPm1fZGlzYWJsZWQ7CiB9CiAKLWJvb2wgUVRNb3ZpZVdpbjo6aGFz
QXVkaW8oKSBjb25zdAotewotICAgIGlmICghbV9wcml2YXRlLT5tX21vdmllKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIChHZXRNb3ZpZUluZFRyYWNrVHlwZShtX3ByaXZhdGUt
Pm1fbW92aWUsIDEsIEF1ZGlvTWVkaWFDaGFyYWN0ZXJpc3RpYywgbW92aWVUcmFja0NoYXJhY3Rl
cmlzdGljIHwgbW92aWVUcmFja0VuYWJsZWRPbmx5KSk7Ci19Ci0KLQotYm9vbCBRVE1vdmllV2lu
OjpoYXNDbG9zZWRDYXB0aW9ucygpIGNvbnN0IAotewotICAgIGlmICghbV9wcml2YXRlLT5tX21v
dmllKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIEdldE1vdmllSW5kVHJhY2tU
eXBlKG1fcHJpdmF0ZS0+bV9tb3ZpZSwgMSwgY2xvc2VkQ2FwdGlvblRyYWNrVHlwZSwgbW92aWVU
cmFja01lZGlhVHlwZSk7Ci19Ci0KLXZvaWQgUVRNb3ZpZVdpbjo6c2V0Q2xvc2VkQ2FwdGlvbnNW
aXNpYmxlKGJvb2wgdmlzaWJsZSkKLXsKLSAgICBpZiAoIW1fcHJpdmF0ZS0+bV9tb3ZpZSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgVHJhY2sgY2NUcmFjayA9IEdldE1vdmllSW5kVHJhY2tUeXBl
KG1fcHJpdmF0ZS0+bV9tb3ZpZSwgMSwgY2xvc2VkQ2FwdGlvblRyYWNrVHlwZSwgbW92aWVUcmFj
a01lZGlhVHlwZSk7Ci0gICAgaWYgKCFjY1RyYWNrKQotICAgICAgICByZXR1cm47Ci0KLSAgICBC
b29sZWFuIGRvRGlzcGxheSA9IHZpc2libGU7Ci0gICAgUVRTZXRUcmFja1Byb3BlcnR5KGNjVHJh
Y2ssIGNsb3NlZENhcHRpb25UcmFja1R5cGUsIGNsb3NlZENhcHRpb25EaXNwbGF5UHJvcGVydHlJ
RCwgc2l6ZW9mKGRvRGlzcGxheSksICZkb0Rpc3BsYXkpOwotfQotCi1wYXNjYWwgT1NFcnIgbW92
aWVEcmF3aW5nQ29tcGxldGVQcm9jKE1vdmllIG1vdmllLCBsb25nIGRhdGEpCi17Ci0gICAgVXBw
UGFyYW0gcGFyYW07Ci0gICAgcGFyYW0ubG9uZ1ZhbHVlID0gZGF0YTsKLSAgICBRVE1vdmllV2lu
UHJpdmF0ZSogbXAgPSBzdGF0aWNfY2FzdDxRVE1vdmllV2luUHJpdmF0ZSo+KHBhcmFtLnB0cik7
Ci0gICAgaWYgKG1wKQotICAgICAgICBtcC0+ZHJhd2luZ0NvbXBsZXRlKCk7Ci0gICAgcmV0dXJu
IDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGluaXRpYWxpemVTdXBwb3J0ZWRUeXBlcygpIAotewotICAg
IGlmIChnU3VwcG9ydGVkVHlwZXMpCi0gICAgICAgIHJldHVybjsKLQotICAgIGdTdXBwb3J0ZWRU
eXBlcyA9IG5ldyBWZWN0b3I8Q0ZTdHJpbmdSZWY+OwotICAgIGlmIChxdWlja1RpbWVWZXJzaW9u
IDwgbWluaW11bVF1aWNrVGltZVZlcnNpb24pIHsKLSAgICAgICAgTE9HX0VSUk9SKCJRdWlja1Rp
bWUgdmVyc2lvbiAleCBkZXRlY3RlZCwgYXQgbGVhc3QgJXggcmVxdWlyZWQuIFJldHVybmluZyBl
bXB0eSBsaXN0IG9mIHN1cHBvcnRlZCBtZWRpYSBNSU1FIHR5cGVzLiIsIHF1aWNrVGltZVZlcnNp
b24sIG1pbmltdW1RdWlja1RpbWVWZXJzaW9uKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIC8vIFF1aWNrVGltZSBkb2Vzbid0IGhhdmUgYW4gaW1wb3J0ZXIgZm9yIHZpZGVvL3F1aWNr
dGltZS4gQWRkIGl0IG1hbnVhbGx5LgotICAgIGdTdXBwb3J0ZWRUeXBlcy0+YXBwZW5kKENGU1RS
KCJ2aWRlby9xdWlja3RpbWUiKSk7Ci0KLSAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwg
MjsgaW5kZXgrKykgewotICAgICAgICBDb21wb25lbnREZXNjcmlwdGlvbiBmaW5kQ0Q7Ci0KLSAg
ICAgICAgLy8gbG9vayBhdCBhbGwgbW92aWUgaW1wb3J0ZXJzIHRoYXQgY2FuIGltcG9ydCBpbiBw
bGFjZSBhbmQgYXJlIGluc3RhbGxlZC4gCi0gICAgICAgIGZpbmRDRC5jb21wb25lbnRUeXBlID0g
TW92aWVJbXBvcnRUeXBlOwotICAgICAgICBmaW5kQ0QuY29tcG9uZW50U3ViVHlwZSA9IDA7Ci0g
ICAgICAgIGZpbmRDRC5jb21wb25lbnRNYW51ZmFjdHVyZXIgPSAwOwotICAgICAgICBmaW5kQ0Qu
Y29tcG9uZW50RmxhZ3NNYXNrID0gY21wSXNNaXNzaW5nIHwgbW92aWVJbXBvcnRTdWJUeXBlSXNG
aWxlRXh0ZW5zaW9uIHwgY2FuTW92aWVJbXBvcnRJblBsYWNlIHwgZG9udEF1dG9GaWxlTW92aWVJ
bXBvcnQ7Ci0KLSAgICAgICAgLy8gbG9vayBhdCB0aG9zZSByZWdpc3RlcmVkIGJ5IEhGUyBmaWxl
IHR5cGVzIHRoZSBmaXJzdCB0aW1lIHRocm91Z2gsIGJ5IGZpbGUgZXh0ZW5zaW9uIHRoZSBzZWNv
bmQgdGltZQotICAgICAgICBmaW5kQ0QuY29tcG9uZW50RmxhZ3MgPSBjYW5Nb3ZpZUltcG9ydElu
UGxhY2UgfCAoaW5kZXggPyBtb3ZpZUltcG9ydFN1YlR5cGVJc0ZpbGVFeHRlbnNpb24gOiAwKTsK
LSAgICAgICAgCi0gICAgICAgIGxvbmcgY29tcG9uZW50Q291bnQgPSBDb3VudENvbXBvbmVudHMo
JmZpbmRDRCk7Ci0gICAgICAgIGlmICghY29tcG9uZW50Q291bnQpCi0gICAgICAgICAgICBjb250
aW51ZTsKLQotICAgICAgICBDb21wb25lbnQgY29tcCA9IDA7Ci0gICAgICAgIHdoaWxlIChjb21w
ID0gRmluZE5leHRDb21wb25lbnQoY29tcCwgJmZpbmRDRCkpIHsKLSAgICAgICAgICAgIC8vIERv
ZXMgdGhpcyBjb21wb25lbnQgaGF2ZSBhIE1JTUUgdHlwZSBjb250YWluZXI/Ci0gICAgICAgICAg
ICBDb21wb25lbnREZXNjcmlwdGlvbiBpbmZvQ0Q7Ci0gICAgICAgICAgICBPU0VyciBlcnIgPSBH
ZXRDb21wb25lbnRJbmZvKGNvbXAsICZpbmZvQ0QsIG5pbCAvKm5hbWUqLywgbmlsIC8qaW5mbyov
LCBuaWwgLyppY29uKi8pOwotICAgICAgICAgICAgaWYgKGVycikKLSAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgIGlmICghKGluZm9DRC5jb21wb25lbnRGbGFncyAmIGhhc01v
dmllSW1wb3J0TUlNRUxpc3QpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgUVRBdG9tQ29udGFpbmVyIG1pbWVMaXN0ID0gMDsKLSAgICAgICAgICAgIGVyciA9IE1vdmll
SW1wb3J0R2V0TUlNRVR5cGVMaXN0KChDb21wb25lbnRJbnN0YW5jZSljb21wLCAmbWltZUxpc3Qp
OwotICAgICAgICAgICAgaWYgKGVyciB8fCAhbWltZUxpc3QpCi0gICAgICAgICAgICAgICAgY29u
dGludWU7Ci0KLSAgICAgICAgICAgIC8vIEdyYWIgZXZlcnkgdHlwZSBmcm9tIHRoZSBjb250YWlu
ZXIuCi0gICAgICAgICAgICBRVExvY2tDb250YWluZXIobWltZUxpc3QpOwotICAgICAgICAgICAg
aW50IHR5cGVDb3VudCA9IFFUQ291bnRDaGlsZHJlbk9mVHlwZShtaW1lTGlzdCwga1BhcmVudEF0
b21Jc0NvbnRhaW5lciwga01pbWVJbmZvTWltZVR5cGVUYWcpOwotICAgICAgICAgICAgZm9yIChp
bnQgdHlwZUluZGV4ID0gMTsgdHlwZUluZGV4IDw9IHR5cGVDb3VudDsgdHlwZUluZGV4KyspIHsK
LSAgICAgICAgICAgICAgICBRVEF0b20gbWltZVRhZyA9IFFURmluZENoaWxkQnlJbmRleChtaW1l
TGlzdCwgMCwga01pbWVJbmZvTWltZVR5cGVUYWcsIHR5cGVJbmRleCwgMCk7Ci0gICAgICAgICAg
ICAgICAgaWYgKCFtaW1lVGFnKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgICAgICBjaGFyKiBhdG9tRGF0YTsKLSAgICAgICAgICAgICAgICBsb25nIHR5cGVMZW5n
dGg7Ci0gICAgICAgICAgICAgICAgaWYgKG5vRXJyICE9IFFUR2V0QXRvbURhdGFQdHIobWltZUxp
c3QsIG1pbWVUYWcsICZ0eXBlTGVuZ3RoLCAmYXRvbURhdGEpKQotICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLQotICAgICAgICAgICAgICAgIGNoYXIgdHlwZUJ1ZmZlclsyNTZdOwotICAg
ICAgICAgICAgICAgIGlmICh0eXBlTGVuZ3RoID49IHNpemVvZih0eXBlQnVmZmVyKSkKLSAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgbWVtY3B5KHR5cGVCdWZm
ZXIsIGF0b21EYXRhLCB0eXBlTGVuZ3RoKTsKLSAgICAgICAgICAgICAgICB0eXBlQnVmZmVyW3R5
cGVMZW5ndGhdID0gMDsKLQotICAgICAgICAgICAgICAgIC8vIE9ubHkgYWRkICJhdWRpby8uLi4i
IGFuZCAidmlkZW8vLi4uIiB0eXBlcy4KLSAgICAgICAgICAgICAgICBpZiAoc3RybmNtcCh0eXBl
QnVmZmVyLCAiYXVkaW8vIiwgNikgJiYgc3RybmNtcCh0eXBlQnVmZmVyLCAidmlkZW8vIiwgNikp
Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAgICAgQ0ZTdHJp
bmdSZWYgY2ZNaW1lVHlwZSA9IENGU3RyaW5nQ3JlYXRlV2l0aENTdHJpbmcoMCwgdHlwZUJ1ZmZl
ciwga0NGU3RyaW5nRW5jb2RpbmdVVEY4KTsKLSAgICAgICAgICAgICAgICBpZiAoIWNmTWltZVR5
cGUpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAgICAgLy8g
T25seSBhZGQgZWFjaCB0eXBlIG9uY2UuCi0gICAgICAgICAgICAgICAgYm9vbCBhbHJlYWR5QWRk
ZWQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBhZGRlZEluZGV4ID0gMDsgYWRk
ZWRJbmRleCA8IGdTdXBwb3J0ZWRUeXBlcy0+c2l6ZSgpOyBhZGRlZEluZGV4KyspIHsKLSAgICAg
ICAgICAgICAgICAgICAgQ0ZTdHJpbmdSZWYgdHlwZSA9IGdTdXBwb3J0ZWRUeXBlcy0+YXQoYWRk
ZWRJbmRleCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChrQ0ZDb21wYXJlRXF1YWxUbyA9PSBD
RlN0cmluZ0NvbXBhcmUoY2ZNaW1lVHlwZSwgdHlwZSwga0NGQ29tcGFyZUNhc2VJbnNlbnNpdGl2
ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFscmVhZHlBZGRlZCA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoIWFscmVhZHlBZGRlZCkKLSAgICAgICAg
ICAgICAgICAgICAgZ1N1cHBvcnRlZFR5cGVzLT5hcHBlbmQoY2ZNaW1lVHlwZSk7Ci0gICAgICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBDRlJlbGVhc2UoY2ZNaW1lVHlwZSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBEaXNwb3NlSGFuZGxlKG1pbWVMaXN0KTsKLSAg
ICAgICAgfQotICAgIH0KLX0KLQotdW5zaWduZWQgUVRNb3ZpZVdpbjo6Y291bnRTdXBwb3J0ZWRU
eXBlcygpCi17Ci0gICAgaW5pdGlhbGl6ZVN1cHBvcnRlZFR5cGVzKCk7Ci0gICAgcmV0dXJuIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihnU3VwcG9ydGVkVHlwZXMtPnNpemUoKSk7Ci19Ci0KLXZvaWQg
UVRNb3ZpZVdpbjo6Z2V0U3VwcG9ydGVkVHlwZSh1bnNpZ25lZCBpbmRleCwgY29uc3QgVUNoYXIq
JiBzdHIsIHVuc2lnbmVkJiBsZW4pCi17Ci0gICAgaW5pdGlhbGl6ZVN1cHBvcnRlZFR5cGVzKCk7
Ci0gICAgQVNTRVJUKGluZGV4IDwgZ1N1cHBvcnRlZFR5cGVzLT5zaXplKCkpOwotCi0gICAgLy8g
QWxsb2NhdGUgc3VmZmljaWVudCBidWZmZXIgdG8gaG9sZCBhbnkgTUlNRSB0eXBlCi0gICAgc3Rh
dGljIFVuaUNoYXIqIHN0YXRpY0J1ZmZlciA9IDA7Ci0gICAgaWYgKCFzdGF0aWNCdWZmZXIpCi0g
ICAgICAgIHN0YXRpY0J1ZmZlciA9IG5ldyBVbmlDaGFyWzMyXTsKLQotICAgIENGU3RyaW5nUmVm
IGNmc3RyID0gZ1N1cHBvcnRlZFR5cGVzLT5hdChpbmRleCk7Ci0gICAgbGVuID0gQ0ZTdHJpbmdH
ZXRMZW5ndGgoY2ZzdHIpOwotICAgIENGUmFuZ2UgcmFuZ2UgPSB7IDAsIGxlbiB9OwotICAgIENG
U3RyaW5nR2V0Q2hhcmFjdGVycyhjZnN0ciwgcmFuZ2UsIHN0YXRpY0J1ZmZlcik7Ci0gICAgc3Ry
ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KHN0YXRpY0J1ZmZlcik7Ci0gICAgCi19
Ci0KLXZvaWQgUVRNb3ZpZVdpbjo6c2V0VGFza1RpbWVyRnVuY3MoU2V0VGFza1RpbWVyRGVsYXlG
dW5jIHNldFRhc2tUaW1lckRlbGF5LCBTdG9wVGFza1RpbWVyRnVuYyBzdG9wVGFza1RpbWVyKQot
ewotICAgIGdTZXRUYXNrVGltZXJEZWxheSA9IHNldFRhc2tUaW1lckRlbGF5OwotICAgIGdTdG9w
VGFza1RpbWVyID0gc3RvcFRhc2tUaW1lcjsKLX0KLQotYm9vbCBRVE1vdmllV2luOjppbml0aWFs
aXplUXVpY2tUaW1lKCkgCi17Ci0gICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQgPSBmYWxzZTsK
LSAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXphdGlvblN1Y2NlZWRlZCA9IGZhbHNlOwotICAgIGlm
ICghaW5pdGlhbGl6ZWQpIHsKLSAgICAgICAgaW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgICAgICAv
LyBJbml0aWFsaXplIGFuZCBjaGVjayBRdWlja1RpbWUgdmVyc2lvbgotICAgICAgICBPU0VyciBy
ZXN1bHQgPSBJbml0aWFsaXplUVRNTChrSW5pdGlhbGl6ZVFUTUxFbmFibGVEb3VibGVCdWZmZXJl
ZFN1cmZhY2UpOwotICAgICAgICBpZiAocmVzdWx0ID09IG5vRXJyKQotICAgICAgICAgICAgcmVz
dWx0ID0gR2VzdGFsdChnZXN0YWx0UXVpY2tUaW1lLCAmcXVpY2tUaW1lVmVyc2lvbik7Ci0gICAg
ICAgIGlmIChyZXN1bHQgIT0gbm9FcnIpIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiTm8gUXVp
Y2tUaW1lIGF2YWlsYWJsZS4gRGlzYWJsaW5nIDx2aWRlbz4gYW5kIDxhdWRpbz4gc3VwcG9ydC4i
KTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBpZiAocXVp
Y2tUaW1lVmVyc2lvbiA8IG1pbmltdW1RdWlja1RpbWVWZXJzaW9uKSB7Ci0gICAgICAgICAgICBM
T0dfRVJST1IoIlF1aWNrVGltZSB2ZXJzaW9uICV4IGRldGVjdGVkLCBhdCBsZWFzdCAleCByZXF1
aXJlZC4gRGlzYWJsaW5nIDx2aWRlbz4gYW5kIDxhdWRpbz4gc3VwcG9ydC4iLCBxdWlja1RpbWVW
ZXJzaW9uLCBtaW5pbXVtUXVpY2tUaW1lVmVyc2lvbik7Ci0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIH0KLSAgICAgICAgRW50ZXJNb3ZpZXMoKTsKLSAgICAgICAgZ01vdmllRHJh
d2luZ0NvbXBsZXRlVVBQID0gTmV3TW92aWVEcmF3aW5nQ29tcGxldGVVUFAobW92aWVEcmF3aW5n
Q29tcGxldGVQcm9jKTsKLSAgICAgICAgaW5pdGlhbGl6YXRpb25TdWNjZWVkZWQgPSB0cnVlOwot
ICAgIH0KLSAgICByZXR1cm4gaW5pdGlhbGl6YXRpb25TdWNjZWVkZWQ7Ci19Ci0KIExSRVNVTFQg
UVRNb3ZpZVdpbjo6ZnVsbHNjcmVlblduZFByb2MoSFdORCB3bmQsIFVJTlQgbWVzc2FnZSwgV1BB
UkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKIHsKICAgICBRVE1vdmllV2luKiBtb3ZpZSA9IHN0
YXRpY19jYXN0PFFUTW92aWVXaW4qPihHZXRQcm9wKHduZCwgZnVsbHNjcmVlblFUTW92aWVXaW5Q
b2ludGVyUHJvcCkpOwpAQCAtMTE2MywxNiArNDY1LDI1IEBACiAgICAgbV9wcml2YXRlLT5tX2Z1
bGxzY3JlZW5XaW5kb3cgPSAwOwogfQogCi1CT09MIFdJTkFQSSBEbGxNYWluKEhJTlNUQU5DRSBo
aW5zdERMTCwgRFdPUkQgZmR3UmVhc29uLCBMUFZPSUQgbHB2UmVzZXJ2ZWQpCit2b2lkIFFUTW92
aWVXaW46OnNldE1vdmllKFJlZlB0cjxRVE1vdmllPiBtb3ZpZSkKIHsKLSAgICBzd2l0Y2ggKGZk
d1JlYXNvbikgewotICAgIGNhc2UgRExMX1BST0NFU1NfQVRUQUNIOgotICAgICAgICByZXR1cm4g
VFJVRTsKLSAgICBjYXNlIERMTF9QUk9DRVNTX0RFVEFDSDoKLSAgICBjYXNlIERMTF9USFJFQURf
QVRUQUNIOgotICAgIGNhc2UgRExMX1RIUkVBRF9ERVRBQ0g6Ci0gICAgICAgIHJldHVybiBGQUxT
RTsKKyAgICBpZiAobV9wcml2YXRlLT5tX3F0TW92aWUpIHsKKyAgICAgICAgbV9wcml2YXRlLT51
bnJlZ2lzdGVyRHJhd2luZ0NhbGxiYWNrKCk7CisgICAgICAgIG1fcHJpdmF0ZS0+bV9xdE1vdmll
LT5yZW1vdmVDbGllbnQobV9wcml2YXRlKTsKKyAgICAgICAgbV9wcml2YXRlLT5tX3F0TW92aWUg
PSAwOworICAgICAgICBtX3ByaXZhdGUtPm1fbW92aWUgPSAwOwogICAgIH0KLSAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gRkFMU0U7CisKKyAgICBtX3ByaXZhdGUtPm1fcXRN
b3ZpZSA9IG1vdmllOworCisgICAgaWYgKG1fcHJpdmF0ZS0+bV9xdE1vdmllKSB7CisgICAgICAg
IG1fcHJpdmF0ZS0+bV9xdE1vdmllLT5hZGRDbGllbnQobV9wcml2YXRlKTsKKyAgICAgICAgbV9w
cml2YXRlLT5tX21vdmllID0gbV9wcml2YXRlLT5tX3F0TW92aWUtPmdldE1vdmllSGFuZGxlKCk7
CisgICAgICAgIG1fcHJpdmF0ZS0+cmVnaXN0ZXJEcmF3aW5nQ2FsbGJhY2soKTsKKyAgICB9CiB9
CisKK1JlZlB0cjxRVE1vdmllPiBRVE1vdmllV2luOjptb3ZpZSgpIGNvbnN0IAoreworICAgIHJl
dHVybiBtX3ByaXZhdGUtPm1fcXRNb3ZpZTsKK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL1FUTW92aWVXaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9RVE1vdmllV2luLmgJKHJldmlzaW9uIDU4MTg3KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vUVRNb3ZpZVdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsy
NiwxMSBAQAogI2lmbmRlZiBRVE1vdmllV2luX2gKICNkZWZpbmUgUVRNb3ZpZVdpbl9oCiAKKwor
I2luY2x1ZGUgIlFUTW92aWUuaCIKICNpbmNsdWRlIDxVbmljb2RlLmg+CisjaW5jbHVkZSA8V1RG
L1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDxXVEYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d2luZG93
cy5oPgogCiAjaWZkZWYgUVRNT1ZJRVdJTl9FWFBPUlRTCkBAIC00MCw5ICs0NCw2IEBACiAKIGNs
YXNzIFFUTW92aWVXaW5DbGllbnQgewogcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBtb3ZpZUVu
ZGVkKFFUTW92aWVXaW4qKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIG1vdmllTG9hZFN0YXRlQ2hh
bmdlZChRVE1vdmllV2luKikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBtb3ZpZVRpbWVDaGFuZ2Vk
KFFUTW92aWVXaW4qKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIG1vdmllTmV3SW1hZ2VBdmFpbGFi
bGUoUVRNb3ZpZVdpbiopID0gMDsKIH07CiAKQEAgLTUxLDQ3ICs1MiwxMSBAQAogICAgIHZpcnR1
YWwgTFJFU1VMVCBmdWxsc2NyZWVuQ2xpZW50V25kUHJvYyhIV05ELCBVSU5UIG1lc3NhZ2UsIFdQ
QVJBTSwgTFBBUkFNKSA9IDA7CiB9OwogCi1lbnVtIHsKLSAgICBRVE1vdmllTG9hZFN0YXRlRXJy
b3IgPSAtMUwsCi0gICAgUVRNb3ZpZUxvYWRTdGF0ZUxvYWRlZCAgPSAyMDAwTCwKLSAgICBRVE1v
dmllTG9hZFN0YXRlUGxheWFibGUgPSAxMDAwMEwsCi0gICAgUVRNb3ZpZUxvYWRTdGF0ZVBsYXl0
aHJvdWdoT0sgPSAyMDAwMEwsCi0gICAgUVRNb3ZpZUxvYWRTdGF0ZUNvbXBsZXRlID0gMTAwMDAw
TAotfTsKLQotdHlwZWRlZiBjb25zdCBzdHJ1Y3QgX19DRlVSTCAqIENGVVJMUmVmOwotCi1jbGFz
cyBRVE1PVklFV0lOX0FQSSBRVE1vdmllV2luIHsKK2NsYXNzIFFUTU9WSUVXSU5fQVBJIFFUTW92
aWVXaW4gOiBwdWJsaWMgUmVmQ291bnRlZDxRVE1vdmllV2luPiB7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIGJvb2wgaW5pdGlhbGl6ZVF1aWNrVGltZSgpOwotCi0gICAgdHlwZWRlZiB2b2lkICgqU2V0
VGFza1RpbWVyRGVsYXlGdW5jKShkb3VibGUpOwotICAgIHR5cGVkZWYgdm9pZCAoKlN0b3BUYXNr
VGltZXJGdW5jKSgpOwotICAgIHN0YXRpYyB2b2lkIHNldFRhc2tUaW1lckZ1bmNzKFNldFRhc2tU
aW1lckRlbGF5RnVuYywgU3RvcFRhc2tUaW1lckZ1bmMpOwotICAgIHN0YXRpYyB2b2lkIHRhc2tU
aW1lckZpcmVkKCk7Ci0KICAgICBRVE1vdmllV2luKFFUTW92aWVXaW5DbGllbnQqKTsKICAgICB+
UVRNb3ZpZVdpbigpOwogCi0gICAgdm9pZCBsb2FkKGNvbnN0IFVDaGFyKiB1cmwsIGludCBsZW4s
IGJvb2wgcHJlc2VydmVzUGl0Y2gpOwotICAgIGxvbmcgbG9hZFN0YXRlKCkgY29uc3Q7Ci0gICAg
ZmxvYXQgbWF4VGltZUxvYWRlZCgpIGNvbnN0OwotCi0gICAgdm9pZCBwbGF5KCk7Ci0gICAgdm9p
ZCBwYXVzZSgpOwotCi0gICAgZmxvYXQgcmF0ZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0UmF0ZShm
bG9hdCk7Ci0KLSAgICBmbG9hdCBkdXJhdGlvbigpIGNvbnN0OwotICAgIGZsb2F0IGN1cnJlbnRU
aW1lKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRDdXJyZW50VGltZShmbG9hdCkgY29uc3Q7Ci0KLSAg
ICB2b2lkIHNldFZvbHVtZShmbG9hdCk7Ci0gICAgdm9pZCBzZXRQcmVzZXJ2ZXNQaXRjaChib29s
KTsKLQotICAgIHVuc2lnbmVkIGRhdGFTaXplKCkgY29uc3Q7Ci0KICAgICB2b2lkIGdldE5hdHVy
YWxTaXplKGludCYgd2lkdGgsIGludCYgaGVpZ2h0KTsKICAgICB2b2lkIHNldFNpemUoaW50IHdp
ZHRoLCBpbnQgaGVpZ2h0KTsKIApAQCAtOTksMjggKzY0LDIwIEBACiAgICAgdm9pZCBwYWludChI
REMsIGludCB4LCBpbnQgeSk7CiAgICAgdm9pZCBnZXRDdXJyZW50RnJhbWVJbmZvKHZvaWQqJiBi
dWZmZXIsIHVuc2lnbmVkJiBiaXRzUGVyUGl4ZWwsIHVuc2lnbmVkJiByb3dCeXRlcywgdW5zaWdu
ZWQmIHdpZHRoLCB1bnNpZ25lZCYgaGVpZ2h0KTsKIAotICAgIHZvaWQgZGlzYWJsZVVuc3VwcG9y
dGVkVHJhY2tzKHVuc2lnbmVkJiBlbmFibGVkVHJhY2tDb3VudCwgdW5zaWduZWQmIHRvdGFsVHJh
Y2tDb3VudCk7CiAgICAgdm9pZCBzZXREaXNhYmxlZChib29sKTsKKyAgICBib29sIGlzRGlzYWJs
ZWQoKSBjb25zdDsKIAotICAgIGJvb2wgaGFzVmlkZW8oKSBjb25zdDsKLSAgICBib29sIGhhc0F1
ZGlvKCkgY29uc3Q7Ci0KLSAgICBib29sIGhhc0Nsb3NlZENhcHRpb25zKCkgY29uc3Q7Ci0gICAg
dm9pZCBzZXRDbG9zZWRDYXB0aW9uc1Zpc2libGUoYm9vbCk7Ci0KLSAgICBzdGF0aWMgdW5zaWdu
ZWQgY291bnRTdXBwb3J0ZWRUeXBlcygpOwotICAgIHN0YXRpYyB2b2lkIGdldFN1cHBvcnRlZFR5
cGUodW5zaWduZWQgaW5kZXgsIGNvbnN0IFVDaGFyKiYgc3RyLCB1bnNpZ25lZCYgbGVuKTsKLQog
ICAgIC8vIFJldHVybnMgdGhlIGZ1bGwtc2NyZWVuIHdpbmRvdyBjcmVhdGVkCiAgICAgSFdORCBl
bnRlckZ1bGxzY3JlZW4oUVRNb3ZpZVdpbkZ1bGxzY3JlZW5DbGllbnQqKTsKICAgICB2b2lkIGV4
aXRGdWxsc2NyZWVuKCk7CiAKKyAgICB2b2lkIHNldE1vdmllKFJlZlB0cjxRVE1vdmllPik7Cisg
ICAgUmVmUHRyPFFUTW92aWU+IG1vdmllKCkgY29uc3Q7CisKIHByaXZhdGU6Ci0gICAgdm9pZCBs
b2FkKENGVVJMUmVmLCBib29sIHByZXNlcnZlc1BpdGNoKTsKICAgICBzdGF0aWMgTFJFU1VMVCBm
dWxsc2NyZWVuV25kUHJvYyhIV05ELCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSwgTFBBUkFNKTsKIAog
ICAgIFFUTW92aWVXaW5Qcml2YXRlKiBtX3ByaXZhdGU7Ci0gICAgYm9vbCBtX2Rpc2FibGVkOwog
ICAgIGZyaWVuZCBjbGFzcyBRVE1vdmllV2luUHJpdmF0ZTsKIH07CiAKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWUuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRNb3ZpZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsODUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEFw
cGxlLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaW5jbHVkZSAiUVRNb3ZpZS5oIgorCisvLyBQdXQgTW92aWVzLmggZmlyc3Qgc28gYnVp
bGQgZmFpbHVyZXMgaGVyZSBwb2ludCBjbGVhcmx5IHRvIFF1aWNrVGltZQorI2luY2x1ZGUgPE1v
dmllcy5oPgorCisjaW5jbHVkZSAiUVRNb3ZpZVRhc2suaCIKKyNpbmNsdWRlICJRVE1vdmllV2lu
VGltZXIuaCIKKyNpbmNsdWRlIDxHWE1hdGguaD4KKyNpbmNsdWRlIDxRVE1MLmg+CisjaW5jbHVk
ZSA8UXVpY2tUaW1lQ29tcG9uZW50cy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Cisj
aW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCit1
c2luZyBuYW1lc3BhY2Ugc3RkOworCitzdGF0aWMgY29uc3QgbG9uZyBtaW5pbXVtUXVpY2tUaW1l
VmVyc2lvbiA9IDB4MDczMDAwMDA7IC8vIDcuMworCitzdGF0aWMgY29uc3QgbG9uZyBjbG9zZWRD
YXB0aW9uVHJhY2tUeXBlID0gJ2NsY3AnOworc3RhdGljIGNvbnN0IGxvbmcgc3ViVGl0bGVUcmFj
a1R5cGUgPSAnc2J0bCc7CitzdGF0aWMgY29uc3QgbG9uZyBtcGVnNE9iamVjdERlc2NyaXB0aW9u
VHJhY2tUeXBlID0gJ29kc20nOworc3RhdGljIGNvbnN0IGxvbmcgbXBlZzRTY2VuZURlc2NyaXB0
aW9uVHJhY2tUeXBlID0gJ3Nkc20nOworc3RhdGljIGNvbnN0IGxvbmcgY2xvc2VkQ2FwdGlvbkRp
c3BsYXlQcm9wZXJ0eUlEID0gJ2Rpc3AnOworc3RhdGljIExQQ1RTVFIgZnVsbHNjcmVlblFUTW92
aWVQb2ludGVyUHJvcCA9IFRFWFQoImZ1bGxzY3JlZW5RVE1vdmllUG9pbnRlciIpOworCisvLyBS
ZXNpemluZyBHV29ybGRzIGlzIHNsb3csIGdpdmUgdGhlbSBhIG1pbmltdW0gc2l6ZSBzbyBzaXpl
IG9mIHNtYWxsIAorLy8gdmlkZW9zIGNhbiBiZSBhbmltYXRlZCBzbW9vdGhseQorc3RhdGljIGNv
bnN0IGludCBjR1dvcmxkTWluV2lkdGggPSA2NDA7CitzdGF0aWMgY29uc3QgaW50IGNHV29ybGRN
aW5IZWlnaHQgPSAzNjA7CisKK3N0YXRpYyBjb25zdCBmbG9hdCBjTm9uQ29udGludW91c1RpbWVD
aGFuZ2UgPSAwLjJmOworCit1bmlvbiBVcHBQYXJhbSB7CisgICAgbG9uZyBsb25nVmFsdWU7Cisg
ICAgdm9pZCogcHRyOworfTsKKworc3RhdGljIFZlY3RvcjxDRlN0cmluZ1JlZj4qIGdTdXBwb3J0
ZWRUeXBlcyA9IDA7CitzdGF0aWMgU0ludDMyIHF1aWNrVGltZVZlcnNpb24gPSAwOworCitjbGFz
cyBRVE1vdmllUHJpdmF0ZSA6IHB1YmxpYyBOb25jb3B5YWJsZSwgcHVibGljIFFUTW92aWVUYXNr
Q2xpZW50IHsKK3B1YmxpYzoKKyAgICBRVE1vdmllUHJpdmF0ZSgpOworICAgIH5RVE1vdmllUHJp
dmF0ZSgpOworICAgIHZvaWQgdGFzaygpOworICAgIHZvaWQgc3RhcnRUYXNrKCk7CisgICAgdm9p
ZCBlbmRUYXNrKCk7CisKKyAgICB2b2lkIGNyZWF0ZU1vdmllQ29udHJvbGxlcigpOworCisgICAg
UVRNb3ZpZSogbV9tb3ZpZVdpbjsKKyAgICBNb3ZpZSBtX21vdmllOworICAgIE1vdmllQ29udHJv
bGxlciBtX21vdmllQ29udHJvbGxlcjsKKyAgICBib29sIG1fdGFza2luZzsKKyAgICBib29sIG1f
ZGlzYWJsZWQ7CisgICAgVmVjdG9yPFFUTW92aWVDbGllbnQqPiBtX2NsaWVudHM7CisgICAgbG9u
ZyBtX2xvYWRTdGF0ZTsKKyAgICBib29sIG1fZW5kZWQ7CisgICAgYm9vbCBtX3NlZWtpbmc7Cisg
ICAgZmxvYXQgbV9sYXN0TWVkaWFUaW1lOworICAgIGRvdWJsZSBtX2xhc3RMb2FkU3RhdGVDaGVj
a1RpbWU7CisgICAgaW50IG1fd2lkdGg7CisgICAgaW50IG1faGVpZ2h0OworICAgIGJvb2wgbV92
aXNpYmxlOworICAgIGxvbmcgbV9sb2FkRXJyb3I7CisgICAgZmxvYXQgbV93aWR0aFNjYWxlRmFj
dG9yOworICAgIGZsb2F0IG1faGVpZ2h0U2NhbGVGYWN0b3I7CisgICAgQ0ZVUkxSZWYgbV9jdXJy
ZW50VVJMOworICAgIGZsb2F0IG1fdGltZVRvUmVzdG9yZTsKKyAgICBmbG9hdCBtX3JhdGVUb1Jl
c3RvcmU7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIGJvb2wgbV9zY2FsZUNhY2hlZDsKKyNl
bmRpZgorfTsKKworUVRNb3ZpZVByaXZhdGU6OlFUTW92aWVQcml2YXRlKCkKKyAgICA6IG1fbW92
aWVXaW4oMCkKKyAgICAsIG1fbW92aWUoMCkKKyAgICAsIG1fbW92aWVDb250cm9sbGVyKDApCisg
ICAgLCBtX3Rhc2tpbmcoZmFsc2UpCisgICAgLCBtX2xvYWRTdGF0ZSgwKQorICAgICwgbV9lbmRl
ZChmYWxzZSkKKyAgICAsIG1fc2Vla2luZyhmYWxzZSkKKyAgICAsIG1fbGFzdE1lZGlhVGltZSgw
KQorICAgICwgbV9sYXN0TG9hZFN0YXRlQ2hlY2tUaW1lKDApCisgICAgLCBtX3dpZHRoKDApCisg
ICAgLCBtX2hlaWdodCgwKQorICAgICwgbV92aXNpYmxlKGZhbHNlKQorICAgICwgbV9sb2FkRXJy
b3IoMCkKKyAgICAsIG1fd2lkdGhTY2FsZUZhY3RvcigxKQorICAgICwgbV9oZWlnaHRTY2FsZUZh
Y3RvcigxKQorICAgICwgbV9jdXJyZW50VVJMKDApCisgICAgLCBtX3RpbWVUb1Jlc3RvcmUoLTEu
MGYpCisgICAgLCBtX3JhdGVUb1Jlc3RvcmUoLTEuMGYpCisgICAgLCBtX2Rpc2FibGVkKGZhbHNl
KQorI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAsIG1fc2NhbGVDYWNoZWQoZmFsc2UpCisjZW5k
aWYKK3sKK30KKworUVRNb3ZpZVByaXZhdGU6On5RVE1vdmllUHJpdmF0ZSgpCit7CisgICAgZW5k
VGFzaygpOworICAgIGlmIChtX21vdmllQ29udHJvbGxlcikKKyAgICAgICAgRGlzcG9zZU1vdmll
Q29udHJvbGxlcihtX21vdmllQ29udHJvbGxlcik7CisgICAgaWYgKG1fbW92aWUpCisgICAgICAg
IERpc3Bvc2VNb3ZpZShtX21vdmllKTsKKyAgICBpZiAobV9jdXJyZW50VVJMKQorICAgICAgICBD
RlJlbGVhc2UobV9jdXJyZW50VVJMKTsKK30KKwordm9pZCBRVE1vdmllUHJpdmF0ZTo6c3RhcnRU
YXNrKCkgCit7CisgICAgaWYgKCFtX3Rhc2tpbmcpIHsKKyAgICAgICAgUVRNb3ZpZVRhc2s6OnNo
YXJlZFRhc2soKS0+YWRkVGFza0NsaWVudCh0aGlzKTsKKyAgICAgICAgbV90YXNraW5nID0gdHJ1
ZTsKKyAgICB9CisgICAgUVRNb3ZpZVRhc2s6OnNoYXJlZFRhc2soKS0+dXBkYXRlVGFza1RpbWVy
KCk7Cit9CisKK3ZvaWQgUVRNb3ZpZVByaXZhdGU6OmVuZFRhc2soKSAKK3sKKyAgICBpZiAobV90
YXNraW5nKSB7CisgICAgICAgIFFUTW92aWVUYXNrOjpzaGFyZWRUYXNrKCktPnJlbW92ZVRhc2tD
bGllbnQodGhpcyk7CisgICAgICAgIG1fdGFza2luZyA9IGZhbHNlOworICAgIH0KKyAgICBRVE1v
dmllVGFzazo6c2hhcmVkVGFzaygpLT51cGRhdGVUYXNrVGltZXIoKTsKK30KKwordm9pZCBRVE1v
dmllUHJpdmF0ZTo6dGFzaygpIAoreworICAgIEFTU0VSVChtX3Rhc2tpbmcpOworCisgICAgaWYg
KCFtX2xvYWRFcnJvcikgeworICAgICAgICBpZiAobV9tb3ZpZUNvbnRyb2xsZXIpCisgICAgICAg
ICAgICBNQ0lkbGUobV9tb3ZpZUNvbnRyb2xsZXIpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBNb3ZpZXNUYXNrKG1fbW92aWUsIDApOworICAgIH0KKworICAgIC8vIEdldE1vdmllTG9hZFN0
YXRlIGRvY3VtZW50YXRpb24gc2F5cyB0aGF0IHlvdSBzaG91bGQgbm90IGNhbGwgaXQgbW9yZSBv
ZnRlbiB0aGFuIGV2ZXJ5IHF1YXJ0ZXIgb2YgYSBzZWNvbmQuCisgICAgaWYgKHN5c3RlbVRpbWUo
KSA+PSBtX2xhc3RMb2FkU3RhdGVDaGVja1RpbWUgKyAwLjI1IHx8IG1fbG9hZEVycm9yKSB7IAor
ICAgICAgICAvLyBJZiBsb2FkIGZhaWxzIFFUJ3MgbG9hZCBzdGF0ZSBpcyBRVE1vdmllTG9hZFN0
YXRlQ29tcGxldGUuCisgICAgICAgIC8vIFRoaXMgaXMgZGlmZmVyZW50IGZyb20gUVRLaXQgQVBJ
IGFuZCBzZWVtcyBzdHJhbmdlLgorICAgICAgICBsb25nIGxvYWRTdGF0ZSA9IG1fbG9hZEVycm9y
ID8gUVRNb3ZpZUxvYWRTdGF0ZUVycm9yIDogR2V0TW92aWVMb2FkU3RhdGUobV9tb3ZpZSk7Cisg
ICAgICAgIGlmIChsb2FkU3RhdGUgIT0gbV9sb2FkU3RhdGUpIHsKKyAgICAgICAgICAgIC8vIHdl
IG9ubHkgbmVlZCB0byBlcmFzZSB0aGUgbW92aWUgZ3dvcmxkIHdoZW4gdGhlIGxvYWQgc3RhdGUg
Y2hhbmdlcyB0byBsb2FkZWQgd2hpbGUgaXQKKyAgICAgICAgICAgIC8vICBpcyB2aXNpYmxlIGFz
IHRoZSBnd29ybGQgaXMgZGVzdHJveWVkL2NyZWF0ZWQgd2hlbiB2aXNpYmlsaXR5IGNoYW5nZXMK
KyAgICAgICAgICAgIGJvb2wgc2hvdWxkUmVzdG9yZVBsYXliYWNrU3RhdGUgPSBmYWxzZTsKKyAg
ICAgICAgICAgIGJvb2wgbW92aWVOZXdseVBsYXlhYmxlID0gbG9hZFN0YXRlID49IFFUTW92aWVM
b2FkU3RhdGVMb2FkZWQgJiYgbV9sb2FkU3RhdGUgPCBRVE1vdmllTG9hZFN0YXRlTG9hZGVkOwor
ICAgICAgICAgICAgbV9sb2FkU3RhdGUgPSBsb2FkU3RhdGU7CisgICAgICAgICAgICBpZiAobW92
aWVOZXdseVBsYXlhYmxlKQorICAgICAgICAgICAgICAgIHNob3VsZFJlc3RvcmVQbGF5YmFja1N0
YXRlID0gdHJ1ZTsKKworICAgICAgICAgICAgaWYgKCFtX21vdmllQ29udHJvbGxlciAmJiBtX2xv
YWRTdGF0ZSA+PSBRVE1vdmllTG9hZFN0YXRlTG9hZGVkKQorICAgICAgICAgICAgICAgIGNyZWF0
ZU1vdmllQ29udHJvbGxlcigpOworCisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fY2xpZW50cy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICBtX2NsaWVudHNbaV0tPm1v
dmllTG9hZFN0YXRlQ2hhbmdlZChtX21vdmllV2luKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgaWYgKHNob3VsZFJlc3RvcmVQbGF5YmFja1N0YXRlICYmIG1fdGltZVRvUmVzdG9yZSAhPSAt
MS4wZikgeworICAgICAgICAgICAgICAgIG1fbW92aWVXaW4tPnNldEN1cnJlbnRUaW1lKG1fdGlt
ZVRvUmVzdG9yZSk7CisgICAgICAgICAgICAgICAgbV90aW1lVG9SZXN0b3JlID0gLTEuMGY7Cisg
ICAgICAgICAgICAgICAgbV9tb3ZpZVdpbi0+c2V0UmF0ZShtX3JhdGVUb1Jlc3RvcmUpOworICAg
ICAgICAgICAgICAgIG1fcmF0ZVRvUmVzdG9yZSA9IC0xLjBmOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAobV9kaXNhYmxlZCkgeworICAgICAgICAgICAgICAgIGVuZFRhc2soKTsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgbV9sYXN0TG9hZFN0YXRlQ2hlY2tUaW1lID0gc3lzdGVtVGltZSgpOworICAgIH0KKworICAg
IGJvb2wgZW5kZWQgPSAhIUlzTW92aWVEb25lKG1fbW92aWUpOworICAgIGlmIChlbmRlZCAhPSBt
X2VuZGVkKSB7CisgICAgICAgIG1fZW5kZWQgPSBlbmRlZDsKKyAgICAgICAgaWYgKGVuZGVkKSB7
CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY2xpZW50cy5zaXplKCk7ICsr
aSkKKyAgICAgICAgICAgICAgIG1fY2xpZW50c1tpXS0+bW92aWVFbmRlZChtX21vdmllV2luKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGZsb2F0IHRpbWUgPSBtX21vdmllV2luLT5jdXJyZW50
VGltZSgpOworICAgIGlmICh0aW1lIDwgbV9sYXN0TWVkaWFUaW1lIHx8IHRpbWUgPj0gbV9sYXN0
TWVkaWFUaW1lICsgY05vbkNvbnRpbnVvdXNUaW1lQ2hhbmdlIHx8IG1fc2Vla2luZykgeworICAg
ICAgICBtX3NlZWtpbmcgPSBmYWxzZTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X2NsaWVudHMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBtX2NsaWVudHNbaV0tPm1vdmllVGlt
ZUNoYW5nZWQobV9tb3ZpZVdpbik7CisgICAgfQorICAgIG1fbGFzdE1lZGlhVGltZSA9IHRpbWU7
CisKKyAgICBpZiAobV9sb2FkRXJyb3IpCisgICAgICAgIGVuZFRhc2soKTsKKyAgICBlbHNlCisg
ICAgICAgIFFUTW92aWVUYXNrOjpzaGFyZWRUYXNrKCktPnVwZGF0ZVRhc2tUaW1lcigpOworfQor
Cit2b2lkIFFUTW92aWVQcml2YXRlOjpjcmVhdGVNb3ZpZUNvbnRyb2xsZXIoKQoreworICAgIFJl
Y3QgYm91bmRzOworICAgIGxvbmcgZmxhZ3M7CisKKyAgICBpZiAoIW1fbW92aWUpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmIChtX21vdmllQ29udHJvbGxlcikKKyAgICAgICAgRGlzcG9zZU1v
dmllQ29udHJvbGxlcihtX21vdmllQ29udHJvbGxlcik7CisKKyAgICBHZXRNb3ZpZUJveChtX21v
dmllLCAmYm91bmRzKTsKKyAgICBmbGFncyA9IG1jVG9wTGVmdE1vdmllIHwgbWNOb3RWaXNpYmxl
OworICAgIG1fbW92aWVDb250cm9sbGVyID0gTmV3TW92aWVDb250cm9sbGVyKG1fbW92aWUsICZi
b3VuZHMsIGZsYWdzKTsKKyAgICBpZiAoIW1fbW92aWVDb250cm9sbGVyKQorICAgICAgICByZXR1
cm47Cit9CisKK1FUTW92aWU6OlFUTW92aWUoUVRNb3ZpZUNsaWVudCogY2xpZW50KQorICAgIDog
bV9wcml2YXRlKG5ldyBRVE1vdmllUHJpdmF0ZSgpKQoreworICAgIG1fcHJpdmF0ZS0+bV9tb3Zp
ZVdpbiA9IHRoaXM7CisgICAgaWYgKGNsaWVudCkKKyAgICAgICAgbV9wcml2YXRlLT5tX2NsaWVu
dHMuYXBwZW5kKGNsaWVudCk7CisgICAgaW5pdGlhbGl6ZVF1aWNrVGltZSgpOworfQorCitRVE1v
dmllOjp+UVRNb3ZpZSgpCit7CisgICAgZGVsZXRlIG1fcHJpdmF0ZTsKK30KKwordm9pZCBRVE1v
dmllOjphZGRDbGllbnQoUVRNb3ZpZUNsaWVudCogY2xpZW50KQoreworICAgIGlmIChjbGllbnQp
CisgICAgICAgIG1fcHJpdmF0ZS0+bV9jbGllbnRzLmFwcGVuZChjbGllbnQpOworfQorCit2b2lk
IFFUTW92aWU6OnJlbW92ZUNsaWVudChRVE1vdmllQ2xpZW50KiBjbGllbnQpCit7CisgICAgc2l6
ZV90IGluZGV4T2ZDbGllbnQgPSBtX3ByaXZhdGUtPm1fY2xpZW50cy5maW5kKGNsaWVudCk7Cisg
ICAgaWYgKGluZGV4T2ZDbGllbnQgPiAwKQorICAgICAgICBtX3ByaXZhdGUtPm1fY2xpZW50cy5y
ZW1vdmUoaW5kZXhPZkNsaWVudCk7Cit9CisKK3ZvaWQgUVRNb3ZpZTo6cGxheSgpCit7CisgICAg
bV9wcml2YXRlLT5tX3RpbWVUb1Jlc3RvcmUgPSAtMS4wZjsKKworICAgIGlmIChtX3ByaXZhdGUt
Pm1fbW92aWVDb250cm9sbGVyKQorICAgICAgICBNQ0RvQWN0aW9uKG1fcHJpdmF0ZS0+bV9tb3Zp
ZUNvbnRyb2xsZXIsIG1jQWN0aW9uUHJlcm9sbEFuZFBsYXksICh2b2lkICopR2V0TW92aWVQcmVm
ZXJyZWRSYXRlKG1fcHJpdmF0ZS0+bV9tb3ZpZSkpOworICAgIGVsc2UKKyAgICAgICAgU3RhcnRN
b3ZpZShtX3ByaXZhdGUtPm1fbW92aWUpOworICAgIG1fcHJpdmF0ZS0+c3RhcnRUYXNrKCk7Cit9
CisKK3ZvaWQgUVRNb3ZpZTo6cGF1c2UoKQoreworICAgIG1fcHJpdmF0ZS0+bV90aW1lVG9SZXN0
b3JlID0gLTEuMGY7CisKKyAgICBpZiAobV9wcml2YXRlLT5tX21vdmllQ29udHJvbGxlcikKKyAg
ICAgICAgTUNEb0FjdGlvbihtX3ByaXZhdGUtPm1fbW92aWVDb250cm9sbGVyLCBtY0FjdGlvblBs
YXksIDApOworICAgIGVsc2UKKyAgICAgICAgU3RvcE1vdmllKG1fcHJpdmF0ZS0+bV9tb3ZpZSk7
CisgICAgUVRNb3ZpZVRhc2s6OnNoYXJlZFRhc2soKS0+dXBkYXRlVGFza1RpbWVyKCk7Cit9CisK
K2Zsb2F0IFFUTW92aWU6OnJhdGUoKSBjb25zdAoreworICAgIGlmICghbV9wcml2YXRlLT5tX21v
dmllKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gRml4ZWRUb0Zsb2F0KEdldE1vdmll
UmF0ZShtX3ByaXZhdGUtPm1fbW92aWUpKTsKK30KKwordm9pZCBRVE1vdmllOjpzZXRSYXRlKGZs
b2F0IHJhdGUpCit7CisgICAgaWYgKCFtX3ByaXZhdGUtPm1fbW92aWUpCisgICAgICAgIHJldHVy
bjsgICAgCisgICAgbV9wcml2YXRlLT5tX3RpbWVUb1Jlc3RvcmUgPSAtMS4wZjsKKyAgICAKKyAg
ICBpZiAobV9wcml2YXRlLT5tX21vdmllQ29udHJvbGxlcikKKyAgICAgICAgTUNEb0FjdGlvbiht
X3ByaXZhdGUtPm1fbW92aWVDb250cm9sbGVyLCBtY0FjdGlvblByZXJvbGxBbmRQbGF5LCAodm9p
ZCAqKUZsb2F0VG9GaXhlZChyYXRlKSk7CisgICAgZWxzZQorICAgICAgICBTZXRNb3ZpZVJhdGUo
bV9wcml2YXRlLT5tX21vdmllLCBGbG9hdFRvRml4ZWQocmF0ZSkpOworICAgIFFUTW92aWVUYXNr
OjpzaGFyZWRUYXNrKCktPnVwZGF0ZVRhc2tUaW1lcigpOworfQorCitmbG9hdCBRVE1vdmllOjpk
dXJhdGlvbigpIGNvbnN0Cit7CisgICAgaWYgKCFtX3ByaXZhdGUtPm1fbW92aWUpCisgICAgICAg
IHJldHVybiAwOworICAgIFRpbWVWYWx1ZSB2YWwgPSBHZXRNb3ZpZUR1cmF0aW9uKG1fcHJpdmF0
ZS0+bV9tb3ZpZSk7CisgICAgVGltZVNjYWxlIHNjYWxlID0gR2V0TW92aWVUaW1lU2NhbGUobV9w
cml2YXRlLT5tX21vdmllKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZhbCkgLyBz
Y2FsZTsKK30KKworZmxvYXQgUVRNb3ZpZTo6Y3VycmVudFRpbWUoKSBjb25zdAoreworICAgIGlm
ICghbV9wcml2YXRlLT5tX21vdmllKQorICAgICAgICByZXR1cm4gMDsKKyAgICBUaW1lVmFsdWUg
dmFsID0gR2V0TW92aWVUaW1lKG1fcHJpdmF0ZS0+bV9tb3ZpZSwgMCk7CisgICAgVGltZVNjYWxl
IHNjYWxlID0gR2V0TW92aWVUaW1lU2NhbGUobV9wcml2YXRlLT5tX21vdmllKTsKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZhbCkgLyBzY2FsZTsKK30KKwordm9pZCBRVE1vdmllOjpz
ZXRDdXJyZW50VGltZShmbG9hdCB0aW1lKSBjb25zdAoreworICAgIGlmICghbV9wcml2YXRlLT5t
X21vdmllKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3ByaXZhdGUtPm1fdGltZVRvUmVzdG9y
ZSA9IC0xLjBmOworICAgIAorICAgIG1fcHJpdmF0ZS0+bV9zZWVraW5nID0gdHJ1ZTsKKyAgICBU
aW1lU2NhbGUgc2NhbGUgPSBHZXRNb3ZpZVRpbWVTY2FsZShtX3ByaXZhdGUtPm1fbW92aWUpOwor
ICAgIGlmIChtX3ByaXZhdGUtPm1fbW92aWVDb250cm9sbGVyKSB7CisgICAgICAgIFFUUmVzdGFy
dEF0VGltZVJlY29yZCByZXN0YXJ0ID0geyB0aW1lICogc2NhbGUgLCAwIH07CisgICAgICAgIE1D
RG9BY3Rpb24obV9wcml2YXRlLT5tX21vdmllQ29udHJvbGxlciwgbWNBY3Rpb25SZXN0YXJ0QXRU
aW1lLCAodm9pZCAqKSZyZXN0YXJ0KTsKKyAgICB9IGVsc2UKKyAgICAgICAgU2V0TW92aWVUaW1l
VmFsdWUobV9wcml2YXRlLT5tX21vdmllLCBUaW1lVmFsdWUodGltZSAqIHNjYWxlKSk7CisgICAg
UVRNb3ZpZVRhc2s6OnNoYXJlZFRhc2soKS0+dXBkYXRlVGFza1RpbWVyKCk7Cit9CisKK3ZvaWQg
UVRNb3ZpZTo6c2V0Vm9sdW1lKGZsb2F0IHZvbHVtZSkKK3sKKyAgICBpZiAoIW1fcHJpdmF0ZS0+
bV9tb3ZpZSkKKyAgICAgICAgcmV0dXJuOworICAgIFNldE1vdmllVm9sdW1lKG1fcHJpdmF0ZS0+
bV9tb3ZpZSwgc3RhdGljX2Nhc3Q8c2hvcnQ+KHZvbHVtZSAqIDI1NikpOworfQorCit2b2lkIFFU
TW92aWU6OnNldFByZXNlcnZlc1BpdGNoKGJvb2wgcHJlc2VydmVzUGl0Y2gpCit7CisgICAgaWYg
KCFtX3ByaXZhdGUtPm1fbW92aWUgfHwgIW1fcHJpdmF0ZS0+bV9jdXJyZW50VVJMKQorICAgICAg
ICByZXR1cm47CisKKyAgICBPU0VyciBlcnJvcjsKKyAgICBib29sIHByb3AgPSBmYWxzZTsKKwor
ICAgIGVycm9yID0gUVRHZXRNb3ZpZVByb3BlcnR5KG1fcHJpdmF0ZS0+bV9tb3ZpZSwga1FUUHJv
cGVydHlDbGFzc19BdWRpbywga1FUQXVkaW9Qcm9wZXJ0eUlEX1JhdGVDaGFuZ2VzUHJlc2VydmVQ
aXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoa1FUQXVkaW9Qcm9w
ZXJ0eUlEX1JhdGVDaGFuZ2VzUHJlc2VydmVQaXRjaCksIHN0YXRpY19jYXN0PFFUUHJvcGVydHlW
YWx1ZVB0cj4oJnByb3ApLCAwKTsKKworICAgIGlmIChlcnJvciB8fCBwcm9wID09IHByZXNlcnZl
c1BpdGNoKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3ByaXZhdGUtPm1fdGltZVRvUmVzdG9y
ZSA9IGN1cnJlbnRUaW1lKCk7CisgICAgbV9wcml2YXRlLT5tX3JhdGVUb1Jlc3RvcmUgPSByYXRl
KCk7CisgICAgbG9hZChtX3ByaXZhdGUtPm1fY3VycmVudFVSTCwgcHJlc2VydmVzUGl0Y2gpOwor
fQorCit1bnNpZ25lZCBRVE1vdmllOjpkYXRhU2l6ZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3By
aXZhdGUtPm1fbW92aWUpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBHZXRNb3ZpZURh
dGFTaXplKG1fcHJpdmF0ZS0+bV9tb3ZpZSwgMCwgR2V0TW92aWVEdXJhdGlvbihtX3ByaXZhdGUt
Pm1fbW92aWUpKTsKK30KKworZmxvYXQgUVRNb3ZpZTo6bWF4VGltZUxvYWRlZCgpIGNvbnN0Cit7
CisgICAgaWYgKCFtX3ByaXZhdGUtPm1fbW92aWUpCisgICAgICAgIHJldHVybiAwOworICAgIFRp
bWVWYWx1ZSB2YWw7CisgICAgR2V0TWF4TG9hZGVkVGltZUluTW92aWUobV9wcml2YXRlLT5tX21v
dmllLCAmdmFsKTsKKyAgICBUaW1lU2NhbGUgc2NhbGUgPSBHZXRNb3ZpZVRpbWVTY2FsZShtX3By
aXZhdGUtPm1fbW92aWUpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4odmFsKSAvIHNj
YWxlOworfQorCitsb25nIFFUTW92aWU6OmxvYWRTdGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fcHJpdmF0ZS0+bV9sb2FkU3RhdGU7Cit9CisKK3ZvaWQgUVRNb3ZpZTo6Z2V0TmF0dXJhbFNp
emUoaW50JiB3aWR0aCwgaW50JiBoZWlnaHQpCit7CisgICAgUmVjdCByZWN0ID0geyAwLCB9Owor
CisgICAgaWYgKG1fcHJpdmF0ZS0+bV9tb3ZpZSkKKyAgICAgICAgR2V0TW92aWVOYXR1cmFsQm91
bmRzUmVjdChtX3ByaXZhdGUtPm1fbW92aWUsICZyZWN0KTsKKyAgICB3aWR0aCA9IChyZWN0LnJp
Z2h0IC0gcmVjdC5sZWZ0KSAqIG1fcHJpdmF0ZS0+bV93aWR0aFNjYWxlRmFjdG9yOworICAgIGhl
aWdodCA9IChyZWN0LmJvdHRvbSAtIHJlY3QudG9wKSAqIG1fcHJpdmF0ZS0+bV9oZWlnaHRTY2Fs
ZUZhY3RvcjsKK30KKwordm9pZCBRVE1vdmllOjpsb2FkKGNvbnN0IFVDaGFyKiB1cmwsIGludCBs
ZW4sIGJvb2wgcHJlc2VydmVzUGl0Y2gpCit7CisgICAgQ0ZTdHJpbmdSZWYgdXJsU3RyaW5nUmVm
ID0gQ0ZTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCByZWlu
dGVycHJldF9jYXN0PGNvbnN0IFVuaUNoYXIqPih1cmwpLCBsZW4pOworICAgIENGVVJMUmVmIGNm
VVJMID0gQ0ZVUkxDcmVhdGVXaXRoU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIHVybFN0cmlu
Z1JlZiwgMCk7CisKKyAgICBsb2FkKGNmVVJMLCBwcmVzZXJ2ZXNQaXRjaCk7CisKKyAgICBDRlJl
bGVhc2UoY2ZVUkwpOworICAgIENGUmVsZWFzZSh1cmxTdHJpbmdSZWYpOworfQorCit2b2lkIFFU
TW92aWU6OmxvYWQoQ0ZVUkxSZWYgdXJsLCBib29sIHByZXNlcnZlc1BpdGNoKQoreworICAgIGlm
ICghdXJsKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9wcml2YXRlLT5tX21vdmllKSB7
CisgICAgICAgIG1fcHJpdmF0ZS0+ZW5kVGFzaygpOworICAgICAgICBpZiAobV9wcml2YXRlLT5t
X21vdmllQ29udHJvbGxlcikKKyAgICAgICAgICAgIERpc3Bvc2VNb3ZpZUNvbnRyb2xsZXIobV9w
cml2YXRlLT5tX21vdmllQ29udHJvbGxlcik7CisgICAgICAgIG1fcHJpdmF0ZS0+bV9tb3ZpZUNv
bnRyb2xsZXIgPSAwOworICAgICAgICBEaXNwb3NlTW92aWUobV9wcml2YXRlLT5tX21vdmllKTsK
KyAgICAgICAgbV9wcml2YXRlLT5tX21vdmllID0gMDsKKyAgICAgICAgbV9wcml2YXRlLT5tX2xv
YWRTdGF0ZSA9IDA7CisgICAgfSAgCisKKyAgICAvLyBEZWZpbmUgYSBwcm9wZXJ0eSBhcnJheSBm
b3IgTmV3TW92aWVGcm9tUHJvcGVydGllcy4gOCBzaG91bGQgYmUgZW5vdWdoIGZvciBvdXIgbmVl
ZHMuIAorICAgIFFUTmV3TW92aWVQcm9wZXJ0eUVsZW1lbnQgbW92aWVQcm9wc1s4XTsgCisgICAg
SXRlbUNvdW50IG1vdmllUHJvcENvdW50ID0gMDsgCisKKyAgICBib29sIGJvb2xUcnVlID0gdHJ1
ZTsKKyAgICAKKyAgICAvLyBEaXNhYmxlIHN0cmVhbWluZyBzdXBwb3J0IGZvciBub3cuIAorICAg
IENGU3RyaW5nUmVmIHNjaGVtZSA9IENGVVJMQ29weVNjaGVtZSh1cmwpOworICAgIGJvb2wgaXNS
VFNQID0gQ0ZTdHJpbmdIYXNQcmVmaXgoc2NoZW1lLCBDRlNUUigicnRzcDoiKSk7CisgICAgQ0ZS
ZWxlYXNlKHNjaGVtZSk7CisKKyAgICBpZiAoaXNSVFNQKSB7CisgICAgICAgIG1fcHJpdmF0ZS0+
bV9sb2FkRXJyb3IgPSBub01vdmllRm91bmQ7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0KKwor
ICAgIGlmIChtX3ByaXZhdGUtPm1fY3VycmVudFVSTCkgeworICAgICAgICBpZiAobV9wcml2YXRl
LT5tX2N1cnJlbnRVUkwgIT0gdXJsKSB7CisgICAgICAgICAgICBDRlJlbGVhc2UobV9wcml2YXRl
LT5tX2N1cnJlbnRVUkwpOworICAgICAgICAgICAgbV9wcml2YXRlLT5tX2N1cnJlbnRVUkwgPSB1
cmw7CisgICAgICAgICAgICBDRlJldGFpbih1cmwpOworICAgICAgICB9CisgICAgfSBlbHNlIHsK
KyAgICAgICAgbV9wcml2YXRlLT5tX2N1cnJlbnRVUkwgPSB1cmw7CisgICAgICAgIENGUmV0YWlu
KHVybCk7CisgICAgfQorCisgICAgLy8gQWRkIHRoZSBtb3ZpZSBkYXRhIGxvY2F0aW9uIHRvIHRo
ZSBwcm9wZXJ0eSBhcnJheSAKKyAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wQ2xh
c3MgPSBrUVRQcm9wZXJ0eUNsYXNzX0RhdGFMb2NhdGlvbjsgCisgICAgbW92aWVQcm9wc1ttb3Zp
ZVByb3BDb3VudF0ucHJvcElEID0ga1FURGF0YUxvY2F0aW9uUHJvcGVydHlJRF9DRlVSTDsgCisg
ICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcFZhbHVlU2l6ZSA9IHNpemVvZihtX3By
aXZhdGUtPm1fY3VycmVudFVSTCk7IAorICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnBy
b3BWYWx1ZUFkZHJlc3MgPSAmKG1fcHJpdmF0ZS0+bV9jdXJyZW50VVJMKTsgCisgICAgbW92aWVQ
cm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcFN0YXR1cyA9IDA7IAorICAgIG1vdmllUHJvcENvdW50
Kys7IAorCisgICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcENsYXNzID0ga1FUUHJv
cGVydHlDbGFzc19Nb3ZpZUluc3RhbnRpYXRpb247IAorICAgIG1vdmllUHJvcHNbbW92aWVQcm9w
Q291bnRdLnByb3BJRCA9IGtRVE1vdmllSW5zdGFudGlhdGlvblByb3BlcnR5SURfRG9udEFza1Vu
cmVzb2x2ZWREYXRhUmVmczsgCisgICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcFZh
bHVlU2l6ZSA9IHNpemVvZihib29sVHJ1ZSk7IAorICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291
bnRdLnByb3BWYWx1ZUFkZHJlc3MgPSAmYm9vbFRydWU7IAorICAgIG1vdmllUHJvcHNbbW92aWVQ
cm9wQ291bnRdLnByb3BTdGF0dXMgPSAwOyAKKyAgICBtb3ZpZVByb3BDb3VudCsrOyAKKworICAg
IG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BDbGFzcyA9IGtRVFByb3BlcnR5Q2xhc3Nf
TW92aWVJbnN0YW50aWF0aW9uOyAKKyAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9w
SUQgPSBrUVRNb3ZpZUluc3RhbnRpYXRpb25Qcm9wZXJ0eUlEX0FzeW5jT0s7IAorICAgIG1vdmll
UHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BWYWx1ZVNpemUgPSBzaXplb2YoYm9vbFRydWUpOyAK
KyAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wVmFsdWVBZGRyZXNzID0gJmJvb2xU
cnVlOyAKKyAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wU3RhdHVzID0gMDsgCisg
ICAgbW92aWVQcm9wQ291bnQrKzsgCisKKyAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5w
cm9wQ2xhc3MgPSBrUVRQcm9wZXJ0eUNsYXNzX05ld01vdmllUHJvcGVydHk7IAorICAgIG1vdmll
UHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BJRCA9IGtRVE5ld01vdmllUHJvcGVydHlJRF9BY3Rp
dmU7IAorICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BWYWx1ZVNpemUgPSBzaXpl
b2YoYm9vbFRydWUpOyAKKyAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wVmFsdWVB
ZGRyZXNzID0gJmJvb2xUcnVlOyAKKyAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9w
U3RhdHVzID0gMDsgCisgICAgbW92aWVQcm9wQ291bnQrKzsgCisKKyAgICBtb3ZpZVByb3BzW21v
dmllUHJvcENvdW50XS5wcm9wQ2xhc3MgPSBrUVRQcm9wZXJ0eUNsYXNzX05ld01vdmllUHJvcGVy
dHk7IAorICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BJRCA9IGtRVE5ld01vdmll
UHJvcGVydHlJRF9Eb250SW50ZXJhY3RXaXRoVXNlcjsgCisgICAgbW92aWVQcm9wc1ttb3ZpZVBy
b3BDb3VudF0ucHJvcFZhbHVlU2l6ZSA9IHNpemVvZihib29sVHJ1ZSk7IAorICAgIG1vdmllUHJv
cHNbbW92aWVQcm9wQ291bnRdLnByb3BWYWx1ZUFkZHJlc3MgPSAmYm9vbFRydWU7IAorICAgIG1v
dmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BTdGF0dXMgPSAwOyAKKyAgICBtb3ZpZVByb3BD
b3VudCsrOyAKKworICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BDbGFzcyA9IGtR
VFByb3BlcnR5Q2xhc3NfTW92aWVJbnN0YW50aWF0aW9uOworICAgIG1vdmllUHJvcHNbbW92aWVQ
cm9wQ291bnRdLnByb3BJRCA9ICchdXJsJzsKKyAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50
XS5wcm9wVmFsdWVTaXplID0gc2l6ZW9mKGJvb2xUcnVlKTsgCisgICAgbW92aWVQcm9wc1ttb3Zp
ZVByb3BDb3VudF0ucHJvcFZhbHVlQWRkcmVzcyA9ICZib29sVHJ1ZTsgCisgICAgbW92aWVQcm9w
c1ttb3ZpZVByb3BDb3VudF0ucHJvcFN0YXR1cyA9IDA7IAorICAgIG1vdmllUHJvcENvdW50Kys7
IAorCisgICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcENsYXNzID0ga1FUUHJvcGVy
dHlDbGFzc19Nb3ZpZUluc3RhbnRpYXRpb247IAorICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291
bnRdLnByb3BJRCA9ICdzaXRlJzsKKyAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9w
VmFsdWVTaXplID0gc2l6ZW9mKGJvb2xUcnVlKTsgCisgICAgbW92aWVQcm9wc1ttb3ZpZVByb3BD
b3VudF0ucHJvcFZhbHVlQWRkcmVzcyA9ICZib29sVHJ1ZTsgCisgICAgbW92aWVQcm9wc1ttb3Zp
ZVByb3BDb3VudF0ucHJvcFN0YXR1cyA9IDA7IAorICAgIG1vdmllUHJvcENvdW50Kys7CisKKyAg
ICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wQ2xhc3MgPSBrUVRQcm9wZXJ0eUNsYXNz
X0F1ZGlvOyAKKyAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wSUQgPSBrUVRBdWRp
b1Byb3BlcnR5SURfUmF0ZUNoYW5nZXNQcmVzZXJ2ZVBpdGNoOworICAgIG1vdmllUHJvcHNbbW92
aWVQcm9wQ291bnRdLnByb3BWYWx1ZVNpemUgPSBzaXplb2YocHJlc2VydmVzUGl0Y2gpOyAKKyAg
ICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wVmFsdWVBZGRyZXNzID0gJnByZXNlcnZl
c1BpdGNoOyAKKyAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wU3RhdHVzID0gMDsg
CisgICAgbW92aWVQcm9wQ291bnQrKzsgCisKKyAgICBBU1NFUlQobW92aWVQcm9wQ291bnQgPD0g
c2l6ZW9mKG1vdmllUHJvcHMpIC8gc2l6ZW9mKG1vdmllUHJvcHNbMF0pKTsKKyAgICBtX3ByaXZh
dGUtPm1fbG9hZEVycm9yID0gTmV3TW92aWVGcm9tUHJvcGVydGllcyhtb3ZpZVByb3BDb3VudCwg
bW92aWVQcm9wcywgMCwgMCwgJm1fcHJpdmF0ZS0+bV9tb3ZpZSk7CisKK2VuZDoKKyAgICBtX3By
aXZhdGUtPnN0YXJ0VGFzaygpOworICAgIC8vIGdldCB0aGUgbG9hZCBmYWlsIGNhbGxiYWNrIHF1
aWNrbHkgCisgICAgaWYgKG1fcHJpdmF0ZS0+bV9sb2FkRXJyb3IpCisgICAgICAgIFFUTW92aWVU
YXNrOjpzaGFyZWRUYXNrKCktPnVwZGF0ZVRhc2tUaW1lcigwKTsKKyAgICBlbHNlIHsKKyAgICAg
ICAgT1NUeXBlIG1vZGUgPSBrUVRBcGVydHVyZU1vZGVfQ2xlYW5BcGVydHVyZTsKKworICAgICAg
ICAvLyBTZXQgdGhlIGFwZXJ0dXJlIG1vZGUgcHJvcGVydHkgb24gYSBtb3ZpZSB0byBzaWduYWwg
dGhhdCB3ZSB3YW50IGFzcGVjdCByYXRpbworICAgICAgICAvLyBhbmQgY2xlYW4gYXBlcnR1cmUg
ZGltZW5zaW9ucy4gRG9uJ3Qgd29ycnkgYWJvdXQgZXJyb3JzLCB3ZSBjYW4ndCBkbyBhbnl0aGlu
ZyBpZgorICAgICAgICAvLyB0aGUgaW5zdGFsbGVkIHZlcnNpb24gb2YgUVQgZG9lc24ndCBzdXBw
b3J0IGl0IGFuZCBpdCBpc24ndCBzZXJpb3VzIGVub3VnaCB0byAKKyAgICAgICAgLy8gd2FycmFu
dCBmYWlsaW5nLgorICAgICAgICBRVFNldE1vdmllUHJvcGVydHkobV9wcml2YXRlLT5tX21vdmll
LCBrUVRQcm9wZXJ0eUNsYXNzX1Zpc3VhbCwga1FUVmlzdWFsUHJvcGVydHlJRF9BcGVydHVyZU1v
ZGUsIHNpemVvZihtb2RlKSwgJm1vZGUpOworICAgIH0KK30KKwordm9pZCBRVE1vdmllOjpkaXNh
YmxlVW5zdXBwb3J0ZWRUcmFja3ModW5zaWduZWQmIGVuYWJsZWRUcmFja0NvdW50LCB1bnNpZ25l
ZCYgdG90YWxUcmFja0NvdW50KQoreworICAgIGlmICghbV9wcml2YXRlLT5tX21vdmllKSB7Cisg
ICAgICAgIHRvdGFsVHJhY2tDb3VudCA9IDA7CisgICAgICAgIGVuYWJsZWRUcmFja0NvdW50ID0g
MDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHN0YXRpYyBIYXNoU2V0PE9TVHlwZT4q
IGFsbG93ZWRUcmFja1R5cGVzID0gMDsKKyAgICBpZiAoIWFsbG93ZWRUcmFja1R5cGVzKSB7Cisg
ICAgICAgIGFsbG93ZWRUcmFja1R5cGVzID0gbmV3IEhhc2hTZXQ8T1NUeXBlPjsKKyAgICAgICAg
YWxsb3dlZFRyYWNrVHlwZXMtPmFkZChWaWRlb01lZGlhVHlwZSk7CisgICAgICAgIGFsbG93ZWRU
cmFja1R5cGVzLT5hZGQoU291bmRNZWRpYVR5cGUpOworICAgICAgICBhbGxvd2VkVHJhY2tUeXBl
cy0+YWRkKFRleHRNZWRpYVR5cGUpOworICAgICAgICBhbGxvd2VkVHJhY2tUeXBlcy0+YWRkKEJh
c2VNZWRpYVR5cGUpOworICAgICAgICBhbGxvd2VkVHJhY2tUeXBlcy0+YWRkKGNsb3NlZENhcHRp
b25UcmFja1R5cGUpOworICAgICAgICBhbGxvd2VkVHJhY2tUeXBlcy0+YWRkKHN1YlRpdGxlVHJh
Y2tUeXBlKTsKKyAgICAgICAgYWxsb3dlZFRyYWNrVHlwZXMtPmFkZChtcGVnNE9iamVjdERlc2Ny
aXB0aW9uVHJhY2tUeXBlKTsKKyAgICAgICAgYWxsb3dlZFRyYWNrVHlwZXMtPmFkZChtcGVnNFNj
ZW5lRGVzY3JpcHRpb25UcmFja1R5cGUpOworICAgICAgICBhbGxvd2VkVHJhY2tUeXBlcy0+YWRk
KFRpbWVDb2RlTWVkaWFUeXBlKTsKKyAgICAgICAgYWxsb3dlZFRyYWNrVHlwZXMtPmFkZChUaW1l
Q29kZTY0TWVkaWFUeXBlKTsKKyAgICB9CisKKyAgICBsb25nIHRyYWNrQ291bnQgPSBHZXRNb3Zp
ZVRyYWNrQ291bnQobV9wcml2YXRlLT5tX21vdmllKTsKKyAgICBlbmFibGVkVHJhY2tDb3VudCA9
IHRyYWNrQ291bnQ7CisgICAgdG90YWxUcmFja0NvdW50ID0gdHJhY2tDb3VudDsKKworICAgIC8v
IFRyYWNrIGluZGV4ZXMgYXJlIDEtYmFzZWQuIHl1Y2suIFRoZXNlIHRoaW5ncyBtdXN0IGRlc2Nl
bmQgZnJvbSBvbGQtCisgICAgLy8gc2Nob29sIG1hYyByZXNvdXJjZXMgb3Igc29tZXRoaW5nLgor
ICAgIGZvciAobG9uZyB0cmFja0luZGV4ID0gMTsgdHJhY2tJbmRleCA8PSB0cmFja0NvdW50OyB0
cmFja0luZGV4KyspIHsKKyAgICAgICAgLy8gR3JhYiB0aGUgdHJhY2sgYXQgdGhlIGN1cnJlbnQg
aW5kZXguIElmIHRoZXJlIGlzbid0IG9uZSB0aGVyZSwgdGhlbgorICAgICAgICAvLyB3ZSBjYW4g
bW92ZSBvbnRvIHRoZSBuZXh0IG9uZS4KKyAgICAgICAgVHJhY2sgY3VycmVudFRyYWNrID0gR2V0
TW92aWVJbmRUcmFjayhtX3ByaXZhdGUtPm1fbW92aWUsIHRyYWNrSW5kZXgpOworICAgICAgICBp
ZiAoIWN1cnJlbnRUcmFjaykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAg
ICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSB0cmFjayBpcyBkaXNhYmxlZCBhbHJlYWR5LCB3ZSBz
aG91bGQgbW92ZSBhbG9uZy4KKyAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byByZS1kaXNhYmxl
IGl0LgorICAgICAgICBpZiAoIUdldFRyYWNrRW5hYmxlZChjdXJyZW50VHJhY2spKQorICAgICAg
ICAgICAgY29udGludWU7CisKKyAgICAgICAgLy8gR3JhYiB0aGUgdHJhY2sncyBtZWRpYS4gV2Un
cmUgZ29pbmcgdG8gY2hlY2sgdG8gc2VlIGlmIHdlIG5lZWQgdG8KKyAgICAgICAgLy8gZGlzYWJs
ZSB0aGUgdHJhY2tzLiBUaGV5IGNvdWxkIGJlIHVuc3VwcG9ydGVkLgorICAgICAgICBNZWRpYSB0
cmFja01lZGlhID0gR2V0VHJhY2tNZWRpYShjdXJyZW50VHJhY2spOworICAgICAgICBpZiAoIXRy
YWNrTWVkaWEpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIC8vIEdy
YWIgdGhlIG1lZGlhIHR5cGUgZm9yIHRoaXMgdHJhY2suIE1ha2Ugc3VyZSB0aGF0IHdlIGRvbid0
CisgICAgICAgIC8vIGdldCBhbiBlcnJvciBpbiBkb2luZyBzby4gSWYgd2UgZG8sIHRoZW4gc29t
ZXRoaW5nIHJlYWxseSBmdW5reSBpcworICAgICAgICAvLyB3cm9uZy4KKyAgICAgICAgT1NUeXBl
IG1lZGlhVHlwZTsKKyAgICAgICAgR2V0TWVkaWFIYW5kbGVyRGVzY3JpcHRpb24odHJhY2tNZWRp
YSwgJm1lZGlhVHlwZSwgbmlsLCBuaWwpOworICAgICAgICBPU0VyciBtZWRpYUVyciA9IEdldE1v
dmllc0Vycm9yKCk7ICAgIAorICAgICAgICBpZiAobWVkaWFFcnIgIT0gbm9FcnIpCisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIGlmICghYWxsb3dlZFRyYWNrVHlwZXMt
PmNvbnRhaW5zKG1lZGlhVHlwZSkpIHsKKworICAgICAgICAgICAgLy8gRGlmZmVyZW50IG1wZWcg
dmFyaWFudHMgaW1wb3J0IGFzIGRpZmZlcmVudCB0cmFjayB0eXBlcyBzbyBjaGVjayBmb3IgdGhl
ICJtcGVnIAorICAgICAgICAgICAgLy8gY2hhcmFjdGVyaXN0aWMiIGluc3RlYWQgb2YgaGFyZCBj
b2RpbmcgdGhlIChjdXJyZW50KSBsaXN0IG9mIG1wZWcgbWVkaWEgdHlwZXMuCisgICAgICAgICAg
ICBpZiAoR2V0TW92aWVJbmRUcmFja1R5cGUobV9wcml2YXRlLT5tX21vdmllLCAxLCAnbXBlZycs
IG1vdmllVHJhY2tDaGFyYWN0ZXJpc3RpYyB8IG1vdmllVHJhY2tFbmFibGVkT25seSkpCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIFNldFRyYWNrRW5hYmxlZChjdXJy
ZW50VHJhY2ssIGZhbHNlKTsKKyAgICAgICAgICAgIC0tZW5hYmxlZFRyYWNrQ291bnQ7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEdyYWIgdGhlIHRyYWNrIHJlZmVyZW5jZSBjb3Vu
dCBmb3IgY2hhcHRlcnMuIFRoaXMgd2lsbCB0ZWxsIHVzIGlmIGl0CisgICAgICAgIC8vIGhhcyBj
aGFwdGVyIHRyYWNrcyBpbiBpdC4gSWYgdGhlcmUgYXJlbid0IGFueSByZWZlcmVuY2VzLCB0aGVu
IHdlCisgICAgICAgIC8vIGNhbiBtb3ZlIG9uIHRoZSBuZXh0IHRyYWNrLgorICAgICAgICBsb25n
IHJlZmVyZW5jZUNvdW50ID0gR2V0VHJhY2tSZWZlcmVuY2VDb3VudChjdXJyZW50VHJhY2ssIGtU
cmFja1JlZmVyZW5jZUNoYXB0ZXJMaXN0KTsKKyAgICAgICAgaWYgKHJlZmVyZW5jZUNvdW50IDw9
IDApCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIGxvbmcgcmVmZXJl
bmNlSW5kZXggPSAwOyAgICAgICAgCisgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICAv
LyBJZiB3ZSBnZXQgbm90aGluZyBoZXJlLCB3ZSd2ZSBvdmVyc3RlcHBlZCBvdXIgYm91bmRzIGFu
ZCBjYW4gc3RvcAorICAgICAgICAgICAgLy8gbG9va2luZy4gQ2hhcHRlciBpbmRpY2VzIGhlcmUg
YXJlIDEtYmFzZWQgYXMgd2VsbCAtIGhlbmNlLCB0aGUKKyAgICAgICAgICAgIC8vIHByZS1pbmNy
ZW1lbnQuCisgICAgICAgICAgICByZWZlcmVuY2VJbmRleCsrOworICAgICAgICAgICAgVHJhY2sg
Y2hhcHRlclRyYWNrID0gR2V0VHJhY2tSZWZlcmVuY2UoY3VycmVudFRyYWNrLCBrVHJhY2tSZWZl
cmVuY2VDaGFwdGVyTGlzdCwgcmVmZXJlbmNlSW5kZXgpOworICAgICAgICAgICAgaWYgKCFjaGFw
dGVyVHJhY2spCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIC8vIFRyeSB0byBncmFiIHRoZSBtZWRpYSBmb3IgdGhlIHRyYWNrLgorICAgICAgICAgICAg
TWVkaWEgY2hhcHRlck1lZGlhID0gR2V0VHJhY2tNZWRpYShjaGFwdGVyVHJhY2spOworICAgICAg
ICAgICAgaWYgKCFjaGFwdGVyTWVkaWEpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIAorICAgICAgICAgICAgLy8gR3JhYiB0aGUgbWVkaWEgdHlwZSBmb3IgdGhpcyB0cmFjay4g
TWFrZSBzdXJlIHRoYXQgd2UgZG9uJ3QKKyAgICAgICAgICAgIC8vIGdldCBhbiBlcnJvciBpbiBk
b2luZyBzby4gSWYgd2UgZG8sIHRoZW4gc29tZXRoaW5nIHJlYWxseQorICAgICAgICAgICAgLy8g
ZnVua3kgaXMgd3JvbmcuCisgICAgICAgICAgICBPU1R5cGUgbWVkaWFUeXBlOworICAgICAgICAg
ICAgR2V0TWVkaWFIYW5kbGVyRGVzY3JpcHRpb24oY2hhcHRlck1lZGlhLCAmbWVkaWFUeXBlLCBu
aWwsIG5pbCk7CisgICAgICAgICAgICBPU0VyciBtZWRpYUVyciA9IEdldE1vdmllc0Vycm9yKCk7
CisgICAgICAgICAgICBpZiAobWVkaWFFcnIgIT0gbm9FcnIpCisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGUg
dHJhY2sgaXMgYSB2aWRlbyB0cmFjay4gV2UgZG9uJ3QgY2FyZSBhYm91dAorICAgICAgICAgICAg
Ly8gb3RoZXIgbm9uLXZpZGVvIHRyYWNrcy4KKyAgICAgICAgICAgIGlmIChtZWRpYVR5cGUgIT0g
VmlkZW9NZWRpYVR5cGUpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGUgdHJhY2sgaXMgYWxyZWFkeSBkaXNh
YmxlZC4gSWYgaXQgaXMsIHdlCisgICAgICAgICAgICAvLyBzaG91bGQgbW92ZSBhbG9uZy4KKyAg
ICAgICAgICAgIGlmICghR2V0VHJhY2tFbmFibGVkKGNoYXB0ZXJUcmFjaykpCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIERpc2FibGVkIHRo
ZSBldmlsLCBldmlsIHRyYWNrLgorICAgICAgICAgICAgU2V0VHJhY2tFbmFibGVkKGNoYXB0ZXJU
cmFjaywgZmFsc2UpOworICAgICAgICAgICAgLS1lbmFibGVkVHJhY2tDb3VudDsKKyAgICAgICAg
fQorICAgIH0KK30KKworYm9vbCBRVE1vdmllOjppc0Rpc2FibGVkKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9wcml2YXRlLT5tX2Rpc2FibGVkOworfQorCit2b2lkIFFUTW92aWU6OnNldERpc2Fi
bGVkKGJvb2wgYikKK3sKKyAgICBtX3ByaXZhdGUtPm1fZGlzYWJsZWQgPSBiOworfQorCisKK2Jv
b2wgUVRNb3ZpZTo6aGFzVmlkZW8oKSBjb25zdAoreworICAgIGlmICghbV9wcml2YXRlLT5tX21v
dmllKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIChHZXRNb3ZpZUluZFRyYWNr
VHlwZShtX3ByaXZhdGUtPm1fbW92aWUsIDEsIFZpc3VhbE1lZGlhQ2hhcmFjdGVyaXN0aWMsIG1v
dmllVHJhY2tDaGFyYWN0ZXJpc3RpYyB8IG1vdmllVHJhY2tFbmFibGVkT25seSkpOworfQorCiti
b29sIFFUTW92aWU6Omhhc0F1ZGlvKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcHJpdmF0ZS0+bV9t
b3ZpZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiAoR2V0TW92aWVJbmRUcmFj
a1R5cGUobV9wcml2YXRlLT5tX21vdmllLCAxLCBBdWRpb01lZGlhQ2hhcmFjdGVyaXN0aWMsIG1v
dmllVHJhY2tDaGFyYWN0ZXJpc3RpYyB8IG1vdmllVHJhY2tFbmFibGVkT25seSkpOworfQorCisK
K2Jvb2wgUVRNb3ZpZTo6aGFzQ2xvc2VkQ2FwdGlvbnMoKSBjb25zdCAKK3sKKyAgICBpZiAoIW1f
cHJpdmF0ZS0+bV9tb3ZpZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBHZXRN
b3ZpZUluZFRyYWNrVHlwZShtX3ByaXZhdGUtPm1fbW92aWUsIDEsIGNsb3NlZENhcHRpb25UcmFj
a1R5cGUsIG1vdmllVHJhY2tNZWRpYVR5cGUpOworfQorCit2b2lkIFFUTW92aWU6OnNldENsb3Nl
ZENhcHRpb25zVmlzaWJsZShib29sIHZpc2libGUpCit7CisgICAgaWYgKCFtX3ByaXZhdGUtPm1f
bW92aWUpCisgICAgICAgIHJldHVybjsKKworICAgIFRyYWNrIGNjVHJhY2sgPSBHZXRNb3ZpZUlu
ZFRyYWNrVHlwZShtX3ByaXZhdGUtPm1fbW92aWUsIDEsIGNsb3NlZENhcHRpb25UcmFja1R5cGUs
IG1vdmllVHJhY2tNZWRpYVR5cGUpOworICAgIGlmICghY2NUcmFjaykKKyAgICAgICAgcmV0dXJu
OworCisgICAgQm9vbGVhbiBkb0Rpc3BsYXkgPSB2aXNpYmxlOworICAgIFFUU2V0VHJhY2tQcm9w
ZXJ0eShjY1RyYWNrLCBjbG9zZWRDYXB0aW9uVHJhY2tUeXBlLCBjbG9zZWRDYXB0aW9uRGlzcGxh
eVByb3BlcnR5SUQsIHNpemVvZihkb0Rpc3BsYXkpLCAmZG9EaXNwbGF5KTsKK30KKworc3RhdGlj
IHZvaWQgaW5pdGlhbGl6ZVN1cHBvcnRlZFR5cGVzKCkgCit7CisgICAgaWYgKGdTdXBwb3J0ZWRU
eXBlcykKKyAgICAgICAgcmV0dXJuOworCisgICAgZ1N1cHBvcnRlZFR5cGVzID0gbmV3IFZlY3Rv
cjxDRlN0cmluZ1JlZj47CisgICAgaWYgKHF1aWNrVGltZVZlcnNpb24gPCBtaW5pbXVtUXVpY2tU
aW1lVmVyc2lvbikgeworICAgICAgICBMT0dfRVJST1IoIlF1aWNrVGltZSB2ZXJzaW9uICV4IGRl
dGVjdGVkLCBhdCBsZWFzdCAleCByZXF1aXJlZC4gUmV0dXJuaW5nIGVtcHR5IGxpc3Qgb2Ygc3Vw
cG9ydGVkIG1lZGlhIE1JTUUgdHlwZXMuIiwgcXVpY2tUaW1lVmVyc2lvbiwgbWluaW11bVF1aWNr
VGltZVZlcnNpb24pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gUXVpY2tUaW1l
IGRvZXNuJ3QgaGF2ZSBhbiBpbXBvcnRlciBmb3IgdmlkZW8vcXVpY2t0aW1lLiBBZGQgaXQgbWFu
dWFsbHkuCisgICAgZ1N1cHBvcnRlZFR5cGVzLT5hcHBlbmQoQ0ZTVFIoInZpZGVvL3F1aWNrdGlt
ZSIpKTsKKworICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCAyOyBpbmRleCsrKSB7Cisg
ICAgICAgIENvbXBvbmVudERlc2NyaXB0aW9uIGZpbmRDRDsKKworICAgICAgICAvLyBsb29rIGF0
IGFsbCBtb3ZpZSBpbXBvcnRlcnMgdGhhdCBjYW4gaW1wb3J0IGluIHBsYWNlIGFuZCBhcmUgaW5z
dGFsbGVkLiAKKyAgICAgICAgZmluZENELmNvbXBvbmVudFR5cGUgPSBNb3ZpZUltcG9ydFR5cGU7
CisgICAgICAgIGZpbmRDRC5jb21wb25lbnRTdWJUeXBlID0gMDsKKyAgICAgICAgZmluZENELmNv
bXBvbmVudE1hbnVmYWN0dXJlciA9IDA7CisgICAgICAgIGZpbmRDRC5jb21wb25lbnRGbGFnc01h
c2sgPSBjbXBJc01pc3NpbmcgfCBtb3ZpZUltcG9ydFN1YlR5cGVJc0ZpbGVFeHRlbnNpb24gfCBj
YW5Nb3ZpZUltcG9ydEluUGxhY2UgfCBkb250QXV0b0ZpbGVNb3ZpZUltcG9ydDsKKworICAgICAg
ICAvLyBsb29rIGF0IHRob3NlIHJlZ2lzdGVyZWQgYnkgSEZTIGZpbGUgdHlwZXMgdGhlIGZpcnN0
IHRpbWUgdGhyb3VnaCwgYnkgZmlsZSBleHRlbnNpb24gdGhlIHNlY29uZCB0aW1lCisgICAgICAg
IGZpbmRDRC5jb21wb25lbnRGbGFncyA9IGNhbk1vdmllSW1wb3J0SW5QbGFjZSB8IChpbmRleCA/
IG1vdmllSW1wb3J0U3ViVHlwZUlzRmlsZUV4dGVuc2lvbiA6IDApOworICAgICAgICAKKyAgICAg
ICAgbG9uZyBjb21wb25lbnRDb3VudCA9IENvdW50Q29tcG9uZW50cygmZmluZENEKTsKKyAgICAg
ICAgaWYgKCFjb21wb25lbnRDb3VudCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
IENvbXBvbmVudCBjb21wID0gMDsKKyAgICAgICAgd2hpbGUgKGNvbXAgPSBGaW5kTmV4dENvbXBv
bmVudChjb21wLCAmZmluZENEKSkgeworICAgICAgICAgICAgLy8gRG9lcyB0aGlzIGNvbXBvbmVu
dCBoYXZlIGEgTUlNRSB0eXBlIGNvbnRhaW5lcj8KKyAgICAgICAgICAgIENvbXBvbmVudERlc2Ny
aXB0aW9uIGluZm9DRDsKKyAgICAgICAgICAgIE9TRXJyIGVyciA9IEdldENvbXBvbmVudEluZm8o
Y29tcCwgJmluZm9DRCwgbmlsIC8qbmFtZSovLCBuaWwgLyppbmZvKi8sIG5pbCAvKmljb24qLyk7
CisgICAgICAgICAgICBpZiAoZXJyKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgaWYgKCEoaW5mb0NELmNvbXBvbmVudEZsYWdzICYgaGFzTW92aWVJbXBvcnRNSU1FTGlz
dCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBRVEF0b21Db250YWlu
ZXIgbWltZUxpc3QgPSAwOworICAgICAgICAgICAgZXJyID0gTW92aWVJbXBvcnRHZXRNSU1FVHlw
ZUxpc3QoKENvbXBvbmVudEluc3RhbmNlKWNvbXAsICZtaW1lTGlzdCk7CisgICAgICAgICAgICBp
ZiAoZXJyIHx8ICFtaW1lTGlzdCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICAgICAgLy8gR3JhYiBldmVyeSB0eXBlIGZyb20gdGhlIGNvbnRhaW5lci4KKyAgICAgICAgICAg
IFFUTG9ja0NvbnRhaW5lcihtaW1lTGlzdCk7CisgICAgICAgICAgICBpbnQgdHlwZUNvdW50ID0g
UVRDb3VudENoaWxkcmVuT2ZUeXBlKG1pbWVMaXN0LCBrUGFyZW50QXRvbUlzQ29udGFpbmVyLCBr
TWltZUluZm9NaW1lVHlwZVRhZyk7CisgICAgICAgICAgICBmb3IgKGludCB0eXBlSW5kZXggPSAx
OyB0eXBlSW5kZXggPD0gdHlwZUNvdW50OyB0eXBlSW5kZXgrKykgeworICAgICAgICAgICAgICAg
IFFUQXRvbSBtaW1lVGFnID0gUVRGaW5kQ2hpbGRCeUluZGV4KG1pbWVMaXN0LCAwLCBrTWltZUlu
Zm9NaW1lVHlwZVRhZywgdHlwZUluZGV4LCAwKTsKKyAgICAgICAgICAgICAgICBpZiAoIW1pbWVU
YWcpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGNoYXIq
IGF0b21EYXRhOworICAgICAgICAgICAgICAgIGxvbmcgdHlwZUxlbmd0aDsKKyAgICAgICAgICAg
ICAgICBpZiAobm9FcnIgIT0gUVRHZXRBdG9tRGF0YVB0cihtaW1lTGlzdCwgbWltZVRhZywgJnR5
cGVMZW5ndGgsICZhdG9tRGF0YSkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgICAgICAgICAgY2hhciB0eXBlQnVmZmVyWzI1Nl07CisgICAgICAgICAgICAgICAgaWYg
KHR5cGVMZW5ndGggPj0gc2l6ZW9mKHR5cGVCdWZmZXIpKQorICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgICAgICBtZW1jcHkodHlwZUJ1ZmZlciwgYXRvbURhdGEsIHR5
cGVMZW5ndGgpOworICAgICAgICAgICAgICAgIHR5cGVCdWZmZXJbdHlwZUxlbmd0aF0gPSAwOwor
CisgICAgICAgICAgICAgICAgLy8gT25seSBhZGQgImF1ZGlvLy4uLiIgYW5kICJ2aWRlby8uLi4i
IHR5cGVzLgorICAgICAgICAgICAgICAgIGlmIChzdHJuY21wKHR5cGVCdWZmZXIsICJhdWRpby8i
LCA2KSAmJiBzdHJuY21wKHR5cGVCdWZmZXIsICJ2aWRlby8iLCA2KSkKKyAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICBDRlN0cmluZ1JlZiBjZk1pbWVUeXBl
ID0gQ0ZTdHJpbmdDcmVhdGVXaXRoQ1N0cmluZygwLCB0eXBlQnVmZmVyLCBrQ0ZTdHJpbmdFbmNv
ZGluZ1VURjgpOworICAgICAgICAgICAgICAgIGlmICghY2ZNaW1lVHlwZSkKKyAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICAvLyBPbmx5IGFkZCBlYWNoIHR5
cGUgb25jZS4KKyAgICAgICAgICAgICAgICBib29sIGFscmVhZHlBZGRlZCA9IGZhbHNlOworICAg
ICAgICAgICAgICAgIGZvciAoaW50IGFkZGVkSW5kZXggPSAwOyBhZGRlZEluZGV4IDwgZ1N1cHBv
cnRlZFR5cGVzLT5zaXplKCk7IGFkZGVkSW5kZXgrKykgeworICAgICAgICAgICAgICAgICAgICBD
RlN0cmluZ1JlZiB0eXBlID0gZ1N1cHBvcnRlZFR5cGVzLT5hdChhZGRlZEluZGV4KTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGtDRkNvbXBhcmVFcXVhbFRvID09IENGU3RyaW5nQ29tcGFyZShj
Zk1pbWVUeXBlLCB0eXBlLCBrQ0ZDb21wYXJlQ2FzZUluc2Vuc2l0aXZlKSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgYWxyZWFkeUFkZGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGlmICghYWxyZWFkeUFkZGVkKQorICAgICAgICAgICAgICAgICAgICBnU3Vw
cG9ydGVkVHlwZXMtPmFwcGVuZChjZk1pbWVUeXBlKTsKKyAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgICAgIENGUmVsZWFzZShjZk1pbWVUeXBlKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIERpc3Bvc2VIYW5kbGUobWltZUxpc3QpOworICAgICAgICB9CisgICAgfQor
fQorCit1bnNpZ25lZCBRVE1vdmllOjpjb3VudFN1cHBvcnRlZFR5cGVzKCkKK3sKKyAgICBpbml0
aWFsaXplU3VwcG9ydGVkVHlwZXMoKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KGdTdXBwb3J0ZWRUeXBlcy0+c2l6ZSgpKTsKK30KKwordm9pZCBRVE1vdmllOjpnZXRTdXBwb3J0
ZWRUeXBlKHVuc2lnbmVkIGluZGV4LCBjb25zdCBVQ2hhciomIHN0ciwgdW5zaWduZWQmIGxlbikK
K3sKKyAgICBpbml0aWFsaXplU3VwcG9ydGVkVHlwZXMoKTsKKyAgICBBU1NFUlQoaW5kZXggPCBn
U3VwcG9ydGVkVHlwZXMtPnNpemUoKSk7CisKKyAgICAvLyBBbGxvY2F0ZSBzdWZmaWNpZW50IGJ1
ZmZlciB0byBob2xkIGFueSBNSU1FIHR5cGUKKyAgICBzdGF0aWMgVW5pQ2hhciogc3RhdGljQnVm
ZmVyID0gMDsKKyAgICBpZiAoIXN0YXRpY0J1ZmZlcikKKyAgICAgICAgc3RhdGljQnVmZmVyID0g
bmV3IFVuaUNoYXJbMzJdOworCisgICAgQ0ZTdHJpbmdSZWYgY2ZzdHIgPSBnU3VwcG9ydGVkVHlw
ZXMtPmF0KGluZGV4KTsKKyAgICBsZW4gPSBDRlN0cmluZ0dldExlbmd0aChjZnN0cik7CisgICAg
Q0ZSYW5nZSByYW5nZSA9IHsgMCwgbGVuIH07CisgICAgQ0ZTdHJpbmdHZXRDaGFyYWN0ZXJzKGNm
c3RyLCByYW5nZSwgc3RhdGljQnVmZmVyKTsKKyAgICBzdHIgPSByZWludGVycHJldF9jYXN0PGNv
bnN0IFVDaGFyKj4oc3RhdGljQnVmZmVyKTsKKyAgICAKK30KKworYm9vbCBRVE1vdmllOjppbml0
aWFsaXplUXVpY2tUaW1lKCkgCit7CisgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQgPSBmYWxz
ZTsKKyAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXphdGlvblN1Y2NlZWRlZCA9IGZhbHNlOworICAg
IGlmICghaW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgaW5pdGlhbGl6ZWQgPSB0cnVlOworICAgICAg
ICAvLyBJbml0aWFsaXplIGFuZCBjaGVjayBRdWlja1RpbWUgdmVyc2lvbgorICAgICAgICBPU0Vy
ciByZXN1bHQgPSBJbml0aWFsaXplUVRNTChrSW5pdGlhbGl6ZVFUTUxFbmFibGVEb3VibGVCdWZm
ZXJlZFN1cmZhY2UpOworICAgICAgICBpZiAocmVzdWx0ID09IG5vRXJyKQorICAgICAgICAgICAg
cmVzdWx0ID0gR2VzdGFsdChnZXN0YWx0UXVpY2tUaW1lLCAmcXVpY2tUaW1lVmVyc2lvbik7Cisg
ICAgICAgIGlmIChyZXN1bHQgIT0gbm9FcnIpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiTm8g
UXVpY2tUaW1lIGF2YWlsYWJsZS4gRGlzYWJsaW5nIDx2aWRlbz4gYW5kIDxhdWRpbz4gc3VwcG9y
dC4iKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
cXVpY2tUaW1lVmVyc2lvbiA8IG1pbmltdW1RdWlja1RpbWVWZXJzaW9uKSB7CisgICAgICAgICAg
ICBMT0dfRVJST1IoIlF1aWNrVGltZSB2ZXJzaW9uICV4IGRldGVjdGVkLCBhdCBsZWFzdCAleCBy
ZXF1aXJlZC4gRGlzYWJsaW5nIDx2aWRlbz4gYW5kIDxhdWRpbz4gc3VwcG9ydC4iLCBxdWlja1Rp
bWVWZXJzaW9uLCBtaW5pbXVtUXVpY2tUaW1lVmVyc2lvbik7CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgRW50ZXJNb3ZpZXMoKTsKKyAgICAgICAgaW5pdGlh
bGl6YXRpb25TdWNjZWVkZWQgPSB0cnVlOworICAgIH0KKyAgICByZXR1cm4gaW5pdGlhbGl6YXRp
b25TdWNjZWVkZWQ7Cit9CisKK01vdmllIFFUTW92aWU6OmdldE1vdmllSGFuZGxlKCkgY29uc3Qg
Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bV9tb3ZpZTsKK30KKworQk9PTCBXSU5BUEkgRGxs
TWFpbihISU5TVEFOQ0UgaGluc3RETEwsIERXT1JEIGZkd1JlYXNvbiwgTFBWT0lEIGxwdlJlc2Vy
dmVkKQoreworICAgIHN3aXRjaCAoZmR3UmVhc29uKSB7CisgICAgY2FzZSBETExfUFJPQ0VTU19B
VFRBQ0g6CisgICAgICAgIHJldHVybiBUUlVFOworICAgIGNhc2UgRExMX1BST0NFU1NfREVUQUNI
OgorICAgIGNhc2UgRExMX1RIUkVBRF9BVFRBQ0g6CisgICAgY2FzZSBETExfVEhSRUFEX0RFVEFD
SDoKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9RVE1vdmllLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vUVRNb3ZpZS5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vUVRNb3ZpZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExNSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSwgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBRVE1vdmllX2gKKyNkZWZpbmUgUVRNb3ZpZV9oCisK
KyNpbmNsdWRlIDxVbmljb2RlLmg+CisjaW5jbHVkZSA8d2luZG93cy5oPgorI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CisKKyNpZmRlZiBRVE1PVklFV0lOX0VYUE9SVFMKKyNkZWZpbmUgUVRN
T1ZJRVdJTl9BUEkgX19kZWNsc3BlYyhkbGxleHBvcnQpCisjZWxzZQorI2RlZmluZSBRVE1PVklF
V0lOX0FQSSBfX2RlY2xzcGVjKGRsbGltcG9ydCkKKyNlbmRpZgorCitjbGFzcyBRVE1vdmllOwor
Y2xhc3MgUVRNb3ZpZVByaXZhdGU7Cit0eXBlZGVmIHN0cnVjdCBNb3ZpZVR5cGUqKiBNb3ZpZTsK
KworY2xhc3MgUVRNb3ZpZUNsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIG1vdmll
RW5kZWQoUVRNb3ZpZSopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbW92aWVMb2FkU3RhdGVDaGFu
Z2VkKFFUTW92aWUqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIG1vdmllVGltZUNoYW5nZWQoUVRN
b3ZpZSopID0gMDsKK307CisKK2VudW0geworICAgIFFUTW92aWVMb2FkU3RhdGVFcnJvciA9IC0x
TCwKKyAgICBRVE1vdmllTG9hZFN0YXRlTG9hZGVkICA9IDIwMDBMLAorICAgIFFUTW92aWVMb2Fk
U3RhdGVQbGF5YWJsZSA9IDEwMDAwTCwKKyAgICBRVE1vdmllTG9hZFN0YXRlUGxheXRocm91Z2hP
SyA9IDIwMDAwTCwKKyAgICBRVE1vdmllTG9hZFN0YXRlQ29tcGxldGUgPSAxMDAwMDBMCit9Owor
Cit0eXBlZGVmIGNvbnN0IHN0cnVjdCBfX0NGVVJMICogQ0ZVUkxSZWY7CisKK2NsYXNzIFFUTU9W
SUVXSU5fQVBJIFFUTW92aWUgOiBwdWJsaWMgUmVmQ291bnRlZDxRVE1vdmllPiB7CitwdWJsaWM6
CisgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZVF1aWNrVGltZSgpOworICAgIHN0YXRpYyB2b2lk
IHRhc2tUaW1lckZpcmVkKCk7CisKKyAgICBRVE1vdmllKFFUTW92aWVDbGllbnQqKTsKKyAgICB+
UVRNb3ZpZSgpOworCisgICAgdm9pZCBhZGRDbGllbnQoUVRNb3ZpZUNsaWVudCopOworICAgIHZv
aWQgcmVtb3ZlQ2xpZW50KFFUTW92aWVDbGllbnQqKTsKKworICAgIHZvaWQgbG9hZChjb25zdCBV
Q2hhciogdXJsLCBpbnQgbGVuLCBib29sIHByZXNlcnZlc1BpdGNoKTsKKyAgICB2b2lkIGxvYWQo
Q0ZVUkxSZWYsIGJvb2wgcHJlc2VydmVzUGl0Y2gpOworCisgICAgbG9uZyBsb2FkU3RhdGUoKSBj
b25zdDsKKyAgICBmbG9hdCBtYXhUaW1lTG9hZGVkKCkgY29uc3Q7CisKKyAgICB2b2lkIHBsYXko
KTsKKyAgICB2b2lkIHBhdXNlKCk7CisKKyAgICBmbG9hdCByYXRlKCkgY29uc3Q7CisgICAgdm9p
ZCBzZXRSYXRlKGZsb2F0KTsKKworICAgIGZsb2F0IGR1cmF0aW9uKCkgY29uc3Q7CisgICAgZmxv
YXQgY3VycmVudFRpbWUoKSBjb25zdDsKKyAgICB2b2lkIHNldEN1cnJlbnRUaW1lKGZsb2F0KSBj
b25zdDsKKworICAgIHZvaWQgc2V0Vm9sdW1lKGZsb2F0KTsKKyAgICB2b2lkIHNldFByZXNlcnZl
c1BpdGNoKGJvb2wpOworCisgICAgdW5zaWduZWQgZGF0YVNpemUoKSBjb25zdDsKKworICAgIHZv
aWQgZ2V0TmF0dXJhbFNpemUoaW50JiB3aWR0aCwgaW50JiBoZWlnaHQpOworCisgICAgdm9pZCBk
aXNhYmxlVW5zdXBwb3J0ZWRUcmFja3ModW5zaWduZWQmIGVuYWJsZWRUcmFja0NvdW50LCB1bnNp
Z25lZCYgdG90YWxUcmFja0NvdW50KTsKKworICAgIGJvb2wgaXNEaXNhYmxlZCgpIGNvbnN0Owor
ICAgIHZvaWQgc2V0RGlzYWJsZWQoYm9vbCk7CisKKyAgICBib29sIGhhc1ZpZGVvKCkgY29uc3Q7
CisgICAgYm9vbCBoYXNBdWRpbygpIGNvbnN0OworCisgICAgYm9vbCBoYXNDbG9zZWRDYXB0aW9u
cygpIGNvbnN0OworICAgIHZvaWQgc2V0Q2xvc2VkQ2FwdGlvbnNWaXNpYmxlKGJvb2wpOworCisg
ICAgc3RhdGljIHVuc2lnbmVkIGNvdW50U3VwcG9ydGVkVHlwZXMoKTsKKyAgICBzdGF0aWMgdm9p
ZCBnZXRTdXBwb3J0ZWRUeXBlKHVuc2lnbmVkIGluZGV4LCBjb25zdCBVQ2hhciomIHN0ciwgdW5z
aWduZWQmIGxlbik7CisKKyAgICBNb3ZpZSBnZXRNb3ZpZUhhbmRsZSgpIGNvbnN0OworCitwcml2
YXRlOgorICAgIFFUTW92aWVQcml2YXRlKiBtX3ByaXZhdGU7CisgICAgZnJpZW5kIGNsYXNzIFFU
TW92aWVQcml2YXRlOworfTsKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9RVE1vdmllVGFzay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vUVRNb3ZpZVRhc2suY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vUVRNb3ZpZVRhc2suY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDEwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBs
ZSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2luY2x1ZGUgIlFUTW92aWVUYXNrLmgiCisKKy8vIFB1dCBNb3ZpZXMuaCBmaXJzdCBzbyBi
dWlsZCBmYWlsdXJlcyBoZXJlIHBvaW50IGNsZWFybHkgdG8gUXVpY2tUaW1lCisjaW5jbHVkZSA8
TW92aWVzLmg+CisKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorCitRVE1vdmllVGFzazo6UVRN
b3ZpZVRhc2soKSAKKyAgICA6IG1fc2V0VGFza1RpbWVyRGVsYXkoMCkKKyAgICAsIG1fc3RvcFRh
c2tUaW1lcigwKQoreworfQorCitRVE1vdmllVGFzazo6flFUTW92aWVUYXNrKCkKK3sKK30KKwor
UVRNb3ZpZVRhc2sqIFFUTW92aWVUYXNrOjpzaGFyZWRUYXNrKCkKK3sKKyAgICBzdGF0aWMgUVRN
b3ZpZVRhc2sqIHNfc2hhcmVkVGFzayA9IG5ldyBRVE1vdmllVGFzaygpOworICAgIHJldHVybiBz
X3NoYXJlZFRhc2s7Cit9CisKK3ZvaWQgUVRNb3ZpZVRhc2s6OnVwZGF0ZVRhc2tUaW1lcihkb3Vi
bGUgbWF4SW50ZXJ2YWwsIGRvdWJsZSBtaW5JbnRlcnZhbCkKK3sKKyAgICBBU1NFUlQobV9zZXRU
YXNrVGltZXJEZWxheSk7CisgICAgaWYgKCFtX3NldFRhc2tUaW1lckRlbGF5KQorICAgICAgICBy
ZXR1cm47CisKKyAgICBBU1NFUlQobV9zdG9wVGFza1RpbWVyKTsKKyAgICBpZiAoIW1fdGFza0xp
c3Quc2l6ZSgpICYmIG1fc3RvcFRhc2tUaW1lcikgeworICAgICAgICBtX3N0b3BUYXNrVGltZXIo
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBsb25nIGludGVydmFsSW5NUzsK
KyAgICBPU1N0YXR1cyBzdGF0dXMgPSBRVEdldFRpbWVVbnRpbE5leHRUYXNrKCZpbnRlcnZhbElu
TVMsIDEwMDApOworICAgIGRvdWJsZSBpbnRlcnZhbCA9IGludGVydmFsSW5NUyAvIDEwMDAuMDsK
KyAgICBpZiAoaW50ZXJ2YWwgPCBtaW5JbnRlcnZhbCkKKyAgICAgICAgaW50ZXJ2YWwgPSBtaW5J
bnRlcnZhbDsKKyAgICBpZiAoc3RhdHVzICE9IG5vRXJyICYmIGludGVydmFsID4gbWF4SW50ZXJ2
YWwpCisgICAgICAgIGludGVydmFsID0gbWF4SW50ZXJ2YWw7CisgICAgbV9zZXRUYXNrVGltZXJE
ZWxheShpbnRlcnZhbCk7Cit9CisKK3ZvaWQgUVRNb3ZpZVRhc2s6OmZpcmVUYXNrQ2xpZW50cygp
Cit7CisgICAgZm9yIChIYXNoU2V0PFFUTW92aWVUYXNrQ2xpZW50Kj46Oml0ZXJhdG9yIGkgPSBt
X3Rhc2tMaXN0LmJlZ2luKCk7IGkgIT0gbV90YXNrTGlzdC5lbmQoKTsgKytpKQorICAgICAgICAo
KmkpLT50YXNrKCk7Cit9CisKK3ZvaWQgUVRNb3ZpZVRhc2s6OmFkZFRhc2tDbGllbnQoUVRNb3Zp
ZVRhc2tDbGllbnQqIGNsaWVudCkgCit7CisgICAgQVNTRVJUKGNsaWVudCk7CisgICAgaWYgKCFj
bGllbnQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fdGFza0xpc3QuYWRkKGNsaWVudCk7Cit9
CisKK3ZvaWQgUVRNb3ZpZVRhc2s6OnJlbW92ZVRhc2tDbGllbnQoUVRNb3ZpZVRhc2tDbGllbnQq
IGNsaWVudCkKK3sKKyAgICBBU1NFUlQoY2xpZW50KTsKKyAgICBpZiAoIWNsaWVudCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbV90YXNrTGlzdC5yZW1vdmUoY2xpZW50KTsKK30KKwordm9pZCBR
VE1vdmllVGFzazo6c2V0VGFza1RpbWVyRnVuY3MoU2V0VGFza1RpbWVyRGVsYXlGdW5jIHNldFRh
c2tUaW1lckRlbGF5LCBTdG9wVGFza1RpbWVyRnVuYyBzdG9wVGFza1RpbWVyKQoreworICAgIG1f
c2V0VGFza1RpbWVyRGVsYXkgPSBzZXRUYXNrVGltZXJEZWxheTsKKyAgICBtX3N0b3BUYXNrVGlt
ZXIgPSBzdG9wVGFza1RpbWVyOworfQorCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9RVE1vdmllVGFzay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL1FUTW92aWVUYXNrLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9RVE1vdmllVGFzay5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlLCBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFFUTW92aWVUYXNrX2gKKyNkZWZp
bmUgUVRNb3ZpZVRhc2tfaAorCisjaW5jbHVkZSA8V1RGL0hhc2hTZXQuaD4KKworI2lmZGVmIFFU
TU9WSUVXSU5fRVhQT1JUUworI2RlZmluZSBRVE1PVklFV0lOX0FQSSBfX2RlY2xzcGVjKGRsbGV4
cG9ydCkKKyNlbHNlCisjZGVmaW5lIFFUTU9WSUVXSU5fQVBJIF9fZGVjbHNwZWMoZGxsaW1wb3J0
KQorI2VuZGlmCisKK2NsYXNzIFFUTW92aWVUYXNrQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0
dWFsIHZvaWQgdGFzaygpID0gMDsKK307CisKK3R5cGVkZWYgdm9pZCAoKlNldFRhc2tUaW1lckRl
bGF5RnVuYykoZG91YmxlKTsKK3R5cGVkZWYgdm9pZCAoKlN0b3BUYXNrVGltZXJGdW5jKSgpOwor
CitjbGFzcyBRVE1PVklFV0lOX0FQSSBRVE1vdmllVGFzayB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFFUTW92aWVUYXNrKiBzaGFyZWRUYXNrKCk7CisKKyAgICB2b2lkIGFkZFRhc2tDbGllbnQoUVRN
b3ZpZVRhc2tDbGllbnQqIGNsaWVudCk7CisgICAgdm9pZCByZW1vdmVUYXNrQ2xpZW50KFFUTW92
aWVUYXNrQ2xpZW50Kik7CisgICAgdm9pZCBmaXJlVGFza0NsaWVudHMoKTsKKworICAgIHZvaWQg
dXBkYXRlVGFza1RpbWVyKGRvdWJsZSBtYXhJbnRlcnZhbCA9IDEuMCwgZG91YmxlIG1pbkludGVy
dmFsID0gMS4wIC8gMzApOworICAgIHZvaWQgc2V0VGFza1RpbWVyRnVuY3MoU2V0VGFza1RpbWVy
RGVsYXlGdW5jIHNldFRhc2tUaW1lckRlbGF5LCBTdG9wVGFza1RpbWVyRnVuYyBzdG9wVGFza1Rp
bWVyKTsKKworcHJvdGVjdGVkOgorICAgIFFUTW92aWVUYXNrKCk7CisgICAgflFUTW92aWVUYXNr
KCk7CisKKyAgICBTZXRUYXNrVGltZXJEZWxheUZ1bmMgbV9zZXRUYXNrVGltZXJEZWxheTsKKyAg
ICBTdG9wVGFza1RpbWVyRnVuYyBtX3N0b3BUYXNrVGltZXI7CisgICAgSGFzaFNldDxRVE1vdmll
VGFza0NsaWVudCo+IG1fdGFza0xpc3Q7CisKK3ByaXZhdGU6CisgICAgUVRNb3ZpZVRhc2soY29u
c3QgUVRNb3ZpZVRhc2smKTsKKyAgICBRVE1vdmllVGFzayYgb3BlcmF0b3I9KGNvbnN0IFFUTW92
aWVUYXNrJik7Cit9OworCisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54580</attachid>
            <date>2010-04-28 10:52:04 -0700</date>
            <delta_ts>2010-04-28 11:44:08 -0700</delta_ts>
            <desc>Part 2: QTMovieWin: New Classes QTPixelBuffer, QTCFDictionary, and QTMovieVisualContext</desc>
            <filename>7569713-QTMovieWin-NewClasses.patch</filename>
            <type>text/plain</type>
            <size>27503</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWVWaXN1YWxDb250ZXh0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVE1vdmll
VmlzdWFsQ29udGV4dC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9RVE1vdmllVmlzdWFsQ29udGV4dC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MjUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxl
LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaW5jbHVkZSAiUVRNb3ZpZVZpc3VhbENvbnRleHQuaCIKKworI2luY2x1ZGUgIlFUTW92aWVU
YXNrLmgiCisjaW5jbHVkZSA8Q1ZCYXNlLmg+CisjaW5jbHVkZSA8Q1ZIb3N0VGltZS5oPgorI2lu
Y2x1ZGUgPEltYWdlQ29tcHJlc3Npb24uaD4KKyNpbmNsdWRlIDxNb3ZpZXMuaD4KKyNpbmNsdWRl
IDxkM2Q5dHlwZXMuaD4KKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKK3N0cnVjdCBRVENWVGltZVN0
YW1wIHsKKyAgICBDVlRpbWVTdGFtcCB0OworfTsKKworY2xhc3MgUVRNb3ZpZVZpc3VhbENvbnRl
eHRQcml2IHsKK3B1YmxpYzoKKyAgICBRVE1vdmllVmlzdWFsQ29udGV4dFByaXYoUVRNb3ZpZVZp
c3VhbENvbnRleHQqIHBhcmVudCwgUVRNb3ZpZVZpc3VhbENvbnRleHRDbGllbnQqIGNsaWVudCwg
Q0ZEaWN0aW9uYXJ5UmVmIG9wdGlvbnMpOworICAgIH5RVE1vdmllVmlzdWFsQ29udGV4dFByaXYo
KTsKKworICAgIGJvb2wgaXNJbWFnZUF2YWlsYWJsZUZvclRpbWUoY29uc3QgUVRDVlRpbWVTdGFt
cCopOworICAgIFFUUGl4ZWxCdWZmZXIgaW1hZ2VGb3JUaW1lKGNvbnN0IFFUQ1ZUaW1lU3RhbXAq
KTsKKyAgICB2b2lkIHRhc2soKTsKKworICAgIFFUVmlzdWFsQ29udGV4dFJlZiBnZXQoKTsKKwor
ICAgIGRvdWJsZSBnZXRDdXJyZW50SG9zdFRpbWUoKTsKKyAgICBkb3VibGUgZ2V0SG9zdENsb2Nr
RnJlcXVlbmN5KCk7CisKKyAgICB2b2lkIHNldE1vdmllKFJlZlB0cjxRVE1vdmllPik7CisgICAg
UmVmUHRyPFFUTW92aWU+IG1vdmllKCkgY29uc3Q7CisgICAgCisgICAgc3RhdGljIHZvaWQgaW1h
Z2VBdmFpbGFibGVDYWxsYmFjayhRVFZpc3VhbENvbnRleHRSZWYgdmlzdWFsQ29udGV4dCwgY29u
c3QgQ1ZUaW1lU3RhbXAgKnRpbWVTdGFtcCwgdm9pZCAqcmVmQ29uKTsKKworcHJpdmF0ZToKKyAg
ICBRVE1vdmllVmlzdWFsQ29udGV4dCogbV9wYXJlbnQ7CisgICAgUVRNb3ZpZVZpc3VhbENvbnRl
eHRDbGllbnQqIG1fY2xpZW50OworICAgIFFUVmlzdWFsQ29udGV4dFJlZiBtX3Zpc3VhbENvbnRl
eHQ7CisgICAgUmVmUHRyPFFUTW92aWU+IG1fbW92aWU7CisKK307CisKK1FUTW92aWVWaXN1YWxD
b250ZXh0UHJpdjo6UVRNb3ZpZVZpc3VhbENvbnRleHRQcml2KFFUTW92aWVWaXN1YWxDb250ZXh0
KiBwYXJlbnQsIFFUTW92aWVWaXN1YWxDb250ZXh0Q2xpZW50KiBjbGllbnQsIENGRGljdGlvbmFy
eVJlZiBvcHRpb25zKSAKKyAgICAgICAgOiBtX3BhcmVudChwYXJlbnQpCisgICAgICAgICwgbV9j
bGllbnQoY2xpZW50KQorICAgICAgICAsIG1fdmlzdWFsQ29udGV4dCgwKQoreworICAgIEhNT0RV
TEUgcXRtbERMTCA9IDo6TG9hZExpYnJhcnlXKEwiUVRNTENsaWVudC5kbGwiKTsKKyAgICBpZiAo
cXRtbERMTCkgeworICAgICAgICB0eXBlZGVmIE9TU3RhdHVzICggX19jZGVjbCAqcGZuUVRQaXhl
bEJ1ZmZlckNvbnRleHRDcmVhdGUpKENGQWxsb2NhdG9yUmVmLCBDRkRpY3Rpb25hcnlSZWYsIFFU
VmlzdWFsQ29udGV4dFJlZiopOworICAgICAgICBwZm5RVFBpeGVsQnVmZmVyQ29udGV4dENyZWF0
ZSBwUGl4ZWxCdWZmZXJDb250ZXh0Q3JlYXRlID0gcmVpbnRlcnByZXRfY2FzdDxwZm5RVFBpeGVs
QnVmZmVyQ29udGV4dENyZWF0ZT4oR2V0UHJvY0FkZHJlc3MocXRtbERMTCwgIlFUUGl4ZWxCdWZm
ZXJDb250ZXh0Q3JlYXRlIikpOworICAgICAgICBpZiAocFBpeGVsQnVmZmVyQ29udGV4dENyZWF0
ZSkgeworICAgICAgICAgICAgT1NTdGF0dXMgc3RhdHVzID0gcFBpeGVsQnVmZmVyQ29udGV4dENy
ZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBvcHRpb25zLCAmbV92aXN1YWxDb250ZXh0KTsKKyAg
ICAgICAgICAgIGlmIChzdGF0dXMgPT0gbm9FcnIgJiYgbV92aXN1YWxDb250ZXh0KQorICAgICAg
ICAgICAgICAgIFFUVmlzdWFsQ29udGV4dFNldEltYWdlQXZhaWxhYmxlQ2FsbGJhY2sobV92aXN1
YWxDb250ZXh0LCAmUVRNb3ZpZVZpc3VhbENvbnRleHRQcml2OjppbWFnZUF2YWlsYWJsZUNhbGxi
YWNrLCBzdGF0aWNfY2FzdDx2b2lkKj4odGhpcykpOworICAgICAgICB9CisgICAgfQorfQorCitR
VE1vdmllVmlzdWFsQ29udGV4dFByaXY6On5RVE1vdmllVmlzdWFsQ29udGV4dFByaXYoKQorewor
fQorCitib29sIFFUTW92aWVWaXN1YWxDb250ZXh0UHJpdjo6aXNJbWFnZUF2YWlsYWJsZUZvclRp
bWUoY29uc3QgUVRDVlRpbWVTdGFtcCogdGltZVN0YW1wKQoreworICAgIGlmICghbV92aXN1YWxD
b250ZXh0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gUVRWaXN1YWxDb250
ZXh0SXNOZXdJbWFnZUF2YWlsYWJsZShtX3Zpc3VhbENvbnRleHQsIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgQ1ZUaW1lU3RhbXAqPih0aW1lU3RhbXApKTsgCit9CisKK1FUUGl4ZWxCdWZmZXIgUVRN
b3ZpZVZpc3VhbENvbnRleHRQcml2OjppbWFnZUZvclRpbWUoY29uc3QgUVRDVlRpbWVTdGFtcCog
dGltZVN0YW1wKQoreworICAgIFFUUGl4ZWxCdWZmZXIgcGl4ZWxCdWZmZXI7CisgICAgaWYgKG1f
dmlzdWFsQ29udGV4dCkgeworICAgICAgICBDVkltYWdlQnVmZmVyUmVmIG5ld0ltYWdlID0gMDsK
KyAgICAgICAgT1NTdGF0dXMgc3RhdHVzID0gUVRWaXN1YWxDb250ZXh0Q29weUltYWdlRm9yVGlt
ZShtX3Zpc3VhbENvbnRleHQsIGtDRkFsbG9jYXRvckRlZmF1bHQsIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgQ1ZUaW1lU3RhbXAqPih0aW1lU3RhbXApLCAmbmV3SW1hZ2UpOworICAgICAgICBpZiAo
c3RhdHVzID09IG5vRXJyKSB7CisgICAgICAgICAgICBwaXhlbEJ1ZmZlci5zZXQobmV3SW1hZ2Up
OworICAgICAgICAgICAgQ1ZQaXhlbEJ1ZmZlclJlbGVhc2UobmV3SW1hZ2UpOworICAgICAgICB9
CisgICAgfQorICAgIHJldHVybiBwaXhlbEJ1ZmZlcjsKK30KKwordm9pZCBRVE1vdmllVmlzdWFs
Q29udGV4dFByaXY6OnRhc2soKQoreworICAgIGlmIChtX3Zpc3VhbENvbnRleHQpCisgICAgICAg
IFFUVmlzdWFsQ29udGV4dFRhc2sobV92aXN1YWxDb250ZXh0KTsKK30KKworUVRWaXN1YWxDb250
ZXh0UmVmIFFUTW92aWVWaXN1YWxDb250ZXh0UHJpdjo6Z2V0KCkgCit7CisgICAgcmV0dXJuIG1f
dmlzdWFsQ29udGV4dDsKK30KKwordm9pZCBRVE1vdmllVmlzdWFsQ29udGV4dFByaXY6OnNldE1v
dmllKFJlZlB0cjxRVE1vdmllPiBtb3ZpZSkKK3sKKyAgICBpZiAobV9tb3ZpZSkgeworICAgICAg
ICBTZXRNb3ZpZVZpc3VhbENvbnRleHQobV9tb3ZpZS0+Z2V0TW92aWVIYW5kbGUoKSwgMCk7Cisg
ICAgICAgIG1fbW92aWUgPSAwOworICAgIH0KKworICAgIGlmIChtb3ZpZSkKKyAgICAgICAgT1NT
dGF0dXMgc3RhdHVzID0gU2V0TW92aWVWaXN1YWxDb250ZXh0KG1vdmllLT5nZXRNb3ZpZUhhbmRs
ZSgpLCBtX3Zpc3VhbENvbnRleHQpOworICAgIAorICAgIG1fbW92aWUgPSBtb3ZpZTsKK30KKwor
UmVmUHRyPFFUTW92aWU+IFFUTW92aWVWaXN1YWxDb250ZXh0UHJpdjo6bW92aWUoKSBjb25zdAor
eworICAgIHJldHVybiBtX21vdmllOworfQorCit2b2lkIFFUTW92aWVWaXN1YWxDb250ZXh0UHJp
djo6aW1hZ2VBdmFpbGFibGVDYWxsYmFjayhRVFZpc3VhbENvbnRleHRSZWYgdmlzdWFsQ29udGV4
dCwgY29uc3QgQ1ZUaW1lU3RhbXAgKnRpbWVTdGFtcCwgdm9pZCAqcmVmQ29uKSAKK3sKKyAgICBp
ZiAoIXJlZkNvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgUVRNb3ZpZVZpc3VhbENvbnRleHRQ
cml2KiB2YyA9IHN0YXRpY19jYXN0PFFUTW92aWVWaXN1YWxDb250ZXh0UHJpdio+KHJlZkNvbik7
CisgICAgaWYgKCF2Yy0+bV9jbGllbnQpCisgICAgICAgIHJldHVybjsKKworICAgIHZjLT5tX2Ns
aWVudC0+aW1hZ2VBdmFpbGFibGVGb3JUaW1lKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgUVRDVlRp
bWVTdGFtcCo+KHRpbWVTdGFtcCkpOworfQorCitzdGF0aWMgT1NTdGF0dXMgU2V0TnVtYmVyVmFs
dWUoQ0ZNdXRhYmxlRGljdGlvbmFyeVJlZiBpbkRpY3QsIENGU3RyaW5nUmVmIGluS2V5LCBTSW50
MzIgaW5WYWx1ZSkKK3sKKyAgICBDRk51bWJlclJlZiBudW1iZXI7CisgCisgICAgbnVtYmVyID0g
Q0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga0NGTnVtYmVyU0ludDMyVHlwZSwg
JmluVmFsdWUpOworICAgIGlmICghbnVtYmVyKSAKKyAgICAgICAgcmV0dXJuIGNvcmVGb3VuZGF0
aW9uVW5rbm93bkVycjsKKyAKKyAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShpbkRpY3QsIGluS2V5
LCBudW1iZXIpOworIAorICAgIENGUmVsZWFzZShudW1iZXIpOworIAorICAgIHJldHVybiBub0Vy
cjsKK30KKworQ0ZEaWN0aW9uYXJ5UmVmIFFUTW92aWVWaXN1YWxDb250ZXh0OjpnZXRDR0ltYWdl
T3B0aW9ucygpCit7CisgICAgc3RhdGljIENGRGljdGlvbmFyeVJlZiBvcHRpb25zID0gMDsKKwor
ICAgIGlmICghb3B0aW9ucykgeworICAgICAgICBDRk11dGFibGVEaWN0aW9uYXJ5UmVmICBwaXhl
bEJ1ZmZlck9wdGlvbnMgPSAwOworICAgICAgICBDRk11dGFibGVEaWN0aW9uYXJ5UmVmICB2aXN1
YWxDb250ZXh0T3B0aW9ucyA9IDA7CisgICAgICAgIE9TU3RhdHVzICAgICAgICAgICAgICAgIHN0
YXR1cyA9IG5vRXJyOworICAgICAgICAKKyAgICAgICAgLy8gUGl4ZWwgQnVmZmVyIGF0dHJpYnV0
ZXMKKyAgICAgICAgcGl4ZWxCdWZmZXJPcHRpb25zID0gQ0ZEaWN0aW9uYXJ5Q3JlYXRlTXV0YWJs
ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
a0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcyk7CisKKyAgICAgICAgLy8gVXNlIHRoZSBr
MzJCR1JBUGl4ZWxGb3JtYXQsIGFzIFF1YXJ0ekNvcmUgd2lsbCBiZSBhYmxlIHRvIHVzZSB0aGUg
cGl4ZWxzIGRpcmVjdGx5LAorICAgICAgICAvLyB3aXRob3V0IG5lZWRpbmcgYW4gYWRpdGlvbmFs
IGNvcHkgb3IgcmVuZGVyaW5nIHBhc3M6cworICAgICAgICBTZXROdW1iZXJWYWx1ZShwaXhlbEJ1
ZmZlck9wdGlvbnMsIGtDVlBpeGVsQnVmZmVyUGl4ZWxGb3JtYXRUeXBlS2V5LCBrMzJCR1JBUGl4
ZWxGb3JtYXQpOworICAgICAgICAgICAgCisgICAgICAgIC8vIGFsaWdubWVudAorICAgICAgICBT
ZXROdW1iZXJWYWx1ZShwaXhlbEJ1ZmZlck9wdGlvbnMsIGtDVlBpeGVsQnVmZmVyQnl0ZXNQZXJS
b3dBbGlnbm1lbnRLZXksIDE2KTsKKworICAgICAgICAvLyBjb21wYXRhYmlsaXR5CisgICAgICAg
IFNldE51bWJlclZhbHVlKHBpeGVsQnVmZmVyT3B0aW9ucywga0NWUGl4ZWxCdWZmZXJDR0ltYWdl
Q29tcGF0aWJpbGl0eUtleSwgMSk7CisgICAgIAorICAgICAgICAvLyBRVCBWaXN1YWwgQ29udGV4
dCBhdHRyaWJ1dGVzCisgICAgICAgIHZpc3VhbENvbnRleHRPcHRpb25zID0gQ0ZEaWN0aW9uYXJ5
Q3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtDRlR5cGVEaWN0aW9uYXJ5
S2V5Q2FsbEJhY2tzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpOworICAgICAK
KyAgICAgICAgLy8gc2V0IHRoZSBwaXhlbCBidWZmZXIgYXR0cmlidXRlcyBmb3IgdGhlIHZpc3Vh
bCBjb250ZXh0CisgICAgICAgIENGRGljdGlvbmFyeVNldFZhbHVlKHZpc3VhbENvbnRleHRPcHRp
b25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrUVRWaXN1YWxDb250ZXh0UGl4ZWxC
dWZmZXJBdHRyaWJ1dGVzS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXhlbEJ1
ZmZlck9wdGlvbnMpOworCisgICAgICAgIGlmIChwaXhlbEJ1ZmZlck9wdGlvbnMpCisgICAgICAg
ICAgICBDRlJlbGVhc2UocGl4ZWxCdWZmZXJPcHRpb25zKTsKKyAgICAKKyAgICAgICAgb3B0aW9u
cyA9IHZpc3VhbENvbnRleHRPcHRpb25zOworICAgIH0KKworICAgIHJldHVybiBvcHRpb25zOwor
fQorCitRVE1vdmllVmlzdWFsQ29udGV4dDo6UVRNb3ZpZVZpc3VhbENvbnRleHQoUVRNb3ZpZVZp
c3VhbENvbnRleHRDbGllbnQqIGNsaWVudCwgQ0ZEaWN0aW9uYXJ5UmVmIG9wdGlvbnMpIAorICAg
IDogbV9wcml2YXRlKG5ldyBRVE1vdmllVmlzdWFsQ29udGV4dFByaXYodGhpcywgY2xpZW50LCBv
cHRpb25zKSkKK3sKK30KKworUVRNb3ZpZVZpc3VhbENvbnRleHQ6On5RVE1vdmllVmlzdWFsQ29u
dGV4dCgpCit7Cit9CisKK2Jvb2wgUVRNb3ZpZVZpc3VhbENvbnRleHQ6OmlzSW1hZ2VBdmFpbGFi
bGVGb3JUaW1lKGNvbnN0IFFUQ1ZUaW1lU3RhbXAqIHRpbWVTdGFtcCkKK3sKKyAgICByZXR1cm4g
bV9wcml2YXRlLT5pc0ltYWdlQXZhaWxhYmxlRm9yVGltZSh0aW1lU3RhbXApOworfQorCitRVFBp
eGVsQnVmZmVyIFFUTW92aWVWaXN1YWxDb250ZXh0OjppbWFnZUZvclRpbWUoY29uc3QgUVRDVlRp
bWVTdGFtcCogdGltZVN0YW1wKQoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmltYWdlRm9yVGlt
ZSh0aW1lU3RhbXApOworfQorCit2b2lkIFFUTW92aWVWaXN1YWxDb250ZXh0Ojp0YXNrKCkKK3sK
KyAgICBtX3ByaXZhdGUtPnRhc2soKTsKK30KKworUVRWaXN1YWxDb250ZXh0UmVmIFFUTW92aWVW
aXN1YWxDb250ZXh0OjpnZXQoKSAKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5nZXQoKTsKK30K
Kwordm9pZCBRVE1vdmllVmlzdWFsQ29udGV4dDo6c2V0TW92aWUoUmVmUHRyPFFUTW92aWU+IG1v
dmllKQoreworICAgIG1fcHJpdmF0ZS0+c2V0TW92aWUobW92aWUpOworfQorCitSZWZQdHI8UVRN
b3ZpZT4gUVRNb3ZpZVZpc3VhbENvbnRleHQ6Om1vdmllKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9wcml2YXRlLT5tb3ZpZSgpOworfQorCitkb3VibGUgUVRNb3ZpZVZpc3VhbENvbnRleHQ6OmN1
cnJlbnRIb3N0VGltZSgpCit7CisgICAgcmV0dXJuIENWR2V0Q3VycmVudEhvc3RUaW1lKCkgLyBD
VkdldEhvc3RDbG9ja0ZyZXF1ZW5jeSgpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWVWaXN1YWxDb250ZXh0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRNb3ZpZVZp
c3VhbENvbnRleHQuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL1FUTW92aWVWaXN1YWxDb250ZXh0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUsIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUVRNb3ZpZVZpc3VhbENvbnRl
eHRfaAorI2RlZmluZSBRVE1vdmllVmlzdWFsQ29udGV4dF9oCisKKyNpZmRlZiBRVE1PVklFV0lO
X0VYUE9SVFMKKyNkZWZpbmUgUVRNT1ZJRVdJTl9BUEkgX19kZWNsc3BlYyhkbGxleHBvcnQpCisj
ZWxzZQorI2RlZmluZSBRVE1PVklFV0lOX0FQSSBfX2RlY2xzcGVjKGRsbGltcG9ydCkKKyNlbmRp
ZgorCisjaW5jbHVkZSAiUVRNb3ZpZS5oIgorI2luY2x1ZGUgIlFUTW92aWVUYXNrLmgiCisjaW5j
bHVkZSAiUVRQaXhlbEJ1ZmZlci5oIgorI2luY2x1ZGUgPFdURi9Pd25QdHIuaD4KKyNpbmNsdWRl
IDxXVEYvUmVmQ291bnRlZC5oPgorCit0eXBlZGVmIHN0cnVjdCBPcGFxdWVRVFZpc3VhbENvbnRl
eHQqICAgUVRWaXN1YWxDb250ZXh0UmVmOworCisvLyBRVENWVGltZVN0YW1wIGlzIGEgc3RydWN0
IGNvbnRhaW5pbmcgb25seSBhIENWVGltZVN0YW1wLiAgVGhpcyBpcyB0byAKKy8vIHdvcmsgYXJv
dW5kIHRoZSBpbmFiaWxpdHkgb2YgQ1ZUaW1lU3RhbXAgdG8gYmUgZm9yd2FyZCBkZWNsYXJlZCwg
aW4gCisvLyBhZGRpdGlvbiB0byBpdCBiZWluZyBkZWNsYXJlZCBpbiBkaWZmZXJlbnQgaGVhZGVy
IGZpbGVzIHdoZW4gYnVpbGRpbmcKKy8vIHRoZSBRVE1vdmllV2luIGFuZCBXZWJDb3JlIHByb2pl
Y3RzLgorc3RydWN0IFFUQ1ZUaW1lU3RhbXA7CisKK2NsYXNzIFFUTW92aWVWaXN1YWxDb250ZXh0
Q2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgaW1hZ2VBdmFpbGFibGVGb3JUaW1l
KGNvbnN0IFFUQ1ZUaW1lU3RhbXAqKSA9IDA7Cit9OworCitjbGFzcyBRVE1PVklFV0lOX0FQSSBR
VE1vdmllVmlzdWFsQ29udGV4dCA6IHB1YmxpYyBSZWZDb3VudGVkPFFUTW92aWVWaXN1YWxDb250
ZXh0PiB7CitwdWJsaWM6CisgICAgUVRNb3ZpZVZpc3VhbENvbnRleHQoUVRNb3ZpZVZpc3VhbENv
bnRleHRDbGllbnQqLCBDRkRpY3Rpb25hcnlSZWYgb3B0aW9ucyA9IDApOworICAgIH5RVE1vdmll
VmlzdWFsQ29udGV4dCgpOworCisgICAgYm9vbCBpc0ltYWdlQXZhaWxhYmxlRm9yVGltZShjb25z
dCBRVENWVGltZVN0YW1wKik7CisgICAgUVRQaXhlbEJ1ZmZlciBpbWFnZUZvclRpbWUoY29uc3Qg
UVRDVlRpbWVTdGFtcCopOworICAgIHZvaWQgdGFzaygpOworCisgICAgUVRWaXN1YWxDb250ZXh0
UmVmIGdldCgpOworCisgICAgZG91YmxlIGdldEN1cnJlbnRIb3N0VGltZSgpOworICAgIGRvdWJs
ZSBnZXRIb3N0Q2xvY2tGcmVxdWVuY3koKTsKKworICAgIHZvaWQgc2V0TW92aWUoUmVmUHRyPFFU
TW92aWU+KTsKKyAgICBSZWZQdHI8UVRNb3ZpZT4gbW92aWUoKSBjb25zdDsKKworICAgIHN0YXRp
YyBDRkRpY3Rpb25hcnlSZWYgZ2V0Q0dJbWFnZU9wdGlvbnMoKTsKKyAgICBzdGF0aWMgZG91Ymxl
IGN1cnJlbnRIb3N0VGltZSgpOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBzZXR1cFZpc3VhbENv
bnRleHQoKTsKKworICAgIGZyaWVuZCBjbGFzcyBRVE1vdmllVmlzdWFsQ29udGV4dFByaXY7Cisg
ICAgT3duUHRyPFFUTW92aWVWaXN1YWxDb250ZXh0UHJpdj4gbV9wcml2YXRlOworfTsKKworI2Vu
ZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVFBpeGVsQnVmZmVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVFBpeGVsQnVm
ZmVyLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FU
UGl4ZWxCdWZmZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIwOSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSwgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlFUUGl4
ZWxCdWZmZXIuaCIKKworI2luY2x1ZGUgPFF1aWNrRHJhdy5oPgorI2luY2x1ZGUgPENGU3RyaW5n
Lmg+CisjaW5jbHVkZSA8Q0dDb2xvclNwYWNlLmg+CisjaW5jbHVkZSA8Q0dJbWFnZS5oPgorI2lu
Y2x1ZGUgPENWUGl4ZWxCdWZmZXIuaD4KKworUVRQaXhlbEJ1ZmZlcjo6UVRQaXhlbEJ1ZmZlcigp
IDogbV9waXhlbEJ1ZmZlcigwKSB7fQorCitRVFBpeGVsQnVmZmVyOjpRVFBpeGVsQnVmZmVyKGNv
bnN0IFFUUGl4ZWxCdWZmZXImIHApIDogbV9waXhlbEJ1ZmZlcihwLm1fcGl4ZWxCdWZmZXIpIAor
eworICAgIENWUGl4ZWxCdWZmZXJSZXRhaW4obV9waXhlbEJ1ZmZlcik7Cit9CisKK1FUUGl4ZWxC
dWZmZXI6OlFUUGl4ZWxCdWZmZXIoQ1ZQaXhlbEJ1ZmZlclJlZiByZWYpIDogbV9waXhlbEJ1ZmZl
cihyZWYpCit7CisgICAgQ1ZQaXhlbEJ1ZmZlclJldGFpbihtX3BpeGVsQnVmZmVyKTsKK30KKwor
UVRQaXhlbEJ1ZmZlcjo6flFUUGl4ZWxCdWZmZXIoKSAKK3sKKyAgICBjbGVhcigpOworfQorCitR
VFBpeGVsQnVmZmVyJiBRVFBpeGVsQnVmZmVyOjpvcGVyYXRvcj0oY29uc3QgUVRQaXhlbEJ1ZmZl
ciYgcCkgCit7CisgICAgc2V0KHAubV9waXhlbEJ1ZmZlcik7CisgICAgcmV0dXJuICp0aGlzOwor
fQorCit2b2lkIFFUUGl4ZWxCdWZmZXI6OnNldChDVlBpeGVsQnVmZmVyUmVmIHJlZikKK3sKKyAg
ICBDVlBpeGVsQnVmZmVyUmV0YWluKHJlZik7CisgICAgQ1ZQaXhlbEJ1ZmZlclJlbGVhc2UobV9w
aXhlbEJ1ZmZlcik7CisgICAgbV9waXhlbEJ1ZmZlciA9IHJlZjsKK30KKworQ1ZQaXhlbEJ1ZmZl
clJlZiBRVFBpeGVsQnVmZmVyOjpnZXQoKQoreworICAgIHJldHVybiBtX3BpeGVsQnVmZmVyOwor
fQorCit2b2lkIFFUUGl4ZWxCdWZmZXI6OmNsZWFyKCkKK3sKKyAgICBDVlBpeGVsQnVmZmVyUmVs
ZWFzZShtX3BpeGVsQnVmZmVyKTsKKyAgICBtX3BpeGVsQnVmZmVyID0gMDsKK30KKworQ1ZSZXR1
cm4gUVRQaXhlbEJ1ZmZlcjo6bG9ja0Jhc2VBZGRyZXNzKCkKK3sKKyAgICByZXR1cm4gQ1ZQaXhl
bEJ1ZmZlckxvY2tCYXNlQWRkcmVzcyhtX3BpeGVsQnVmZmVyLCAwKTsKK30KKworQ1ZSZXR1cm4g
UVRQaXhlbEJ1ZmZlcjo6dW5sb2NrQmFzZUFkZHJlc3MoKQoreworICAgIHJldHVybiBDVlBpeGVs
QnVmZmVyVW5sb2NrQmFzZUFkZHJlc3MobV9waXhlbEJ1ZmZlciwgMCk7Cit9CisKK3NpemVfdCBR
VFBpeGVsQnVmZmVyOjp3aWR0aCgpCit7CisgICAgcmV0dXJuIENWUGl4ZWxCdWZmZXJHZXRXaWR0
aChtX3BpeGVsQnVmZmVyKTsKK30KKworc2l6ZV90IFFUUGl4ZWxCdWZmZXI6OmhlaWdodCgpCit7
CisgICAgcmV0dXJuIENWUGl4ZWxCdWZmZXJHZXRIZWlnaHQobV9waXhlbEJ1ZmZlcik7Cit9CisK
K3Vuc2lnbmVkIGxvbmcgUVRQaXhlbEJ1ZmZlcjo6cGl4ZWxGb3JtYXRUeXBlKCkKK3sKKyAgICBP
U1R5cGUgcGl4ZWxGb3JtYXRUeXBlID0gQ1ZQaXhlbEJ1ZmZlckdldFBpeGVsRm9ybWF0VHlwZSht
X3BpeGVsQnVmZmVyKTsKKyAgICByZXR1cm4gcGl4ZWxGb3JtYXRUeXBlOworfQorCitib29sIFFU
UGl4ZWxCdWZmZXI6OnBpeGVsRm9ybWF0SXMzMkFSR0IoKQoreworICAgIHJldHVybiBDVlBpeGVs
QnVmZmVyR2V0UGl4ZWxGb3JtYXRUeXBlKG1fcGl4ZWxCdWZmZXIpID09IGszMkFSR0JQaXhlbEZv
cm1hdDsKK30KKworYm9vbCBRVFBpeGVsQnVmZmVyOjpwaXhlbEZvcm1hdElzMzJCR1JBKCkKK3sK
KyAgICByZXR1cm4gQ1ZQaXhlbEJ1ZmZlckdldFBpeGVsRm9ybWF0VHlwZShtX3BpeGVsQnVmZmVy
KSA9PSBrMzJCR1JBUGl4ZWxGb3JtYXQ7Cit9CisKK3ZvaWQqIFFUUGl4ZWxCdWZmZXI6OmJhc2VB
ZGRyZXNzKCkKK3sKKyAgICByZXR1cm4gQ1ZQaXhlbEJ1ZmZlckdldEJhc2VBZGRyZXNzKG1fcGl4
ZWxCdWZmZXIpOworfQorCitzaXplX3QgUVRQaXhlbEJ1ZmZlcjo6Ynl0ZXNQZXJSb3coKQorewor
ICAgIHJldHVybiBDVlBpeGVsQnVmZmVyR2V0Qnl0ZXNQZXJSb3cobV9waXhlbEJ1ZmZlcik7Cit9
CisKK3NpemVfdCBRVFBpeGVsQnVmZmVyOjpkYXRhU2l6ZSgpCit7CisgICAgcmV0dXJuIENWUGl4
ZWxCdWZmZXJHZXREYXRhU2l6ZShtX3BpeGVsQnVmZmVyKTsKK30KKworCitib29sIFFUUGl4ZWxC
dWZmZXI6OmlzUGxhbmFyKCkKK3sKKyAgICByZXR1cm4gQ1ZQaXhlbEJ1ZmZlcklzUGxhbmFyKG1f
cGl4ZWxCdWZmZXIpOworfQorCitzaXplX3QgUVRQaXhlbEJ1ZmZlcjo6cGxhbmVDb3VudCgpCit7
CisgICAgcmV0dXJuIENWUGl4ZWxCdWZmZXJHZXRQbGFuZUNvdW50KG1fcGl4ZWxCdWZmZXIpOwor
fQorCitzaXplX3QgUVRQaXhlbEJ1ZmZlcjo6d2lkdGhPZlBsYW5lKHNpemVfdCBwbGFuZSkKK3sK
KyAgICByZXR1cm4gQ1ZQaXhlbEJ1ZmZlckdldFdpZHRoT2ZQbGFuZShtX3BpeGVsQnVmZmVyLCBw
bGFuZSk7Cit9CisKK3NpemVfdCBRVFBpeGVsQnVmZmVyOjpoZWlnaHRPZlBsYW5lKHNpemVfdCBw
bGFuZSkKK3sKKyAgICByZXR1cm4gQ1ZQaXhlbEJ1ZmZlckdldEhlaWdodE9mUGxhbmUobV9waXhl
bEJ1ZmZlciwgcGxhbmUpOworfQorCit2b2lkKiBRVFBpeGVsQnVmZmVyOjpiYXNlQWRkcmVzc09m
UGxhbmUoc2l6ZV90IHBsYW5lKQoreworICAgIHJldHVybiBDVlBpeGVsQnVmZmVyR2V0QmFzZUFk
ZHJlc3NPZlBsYW5lKG1fcGl4ZWxCdWZmZXIsIHBsYW5lKTsKK30KKworc2l6ZV90IFFUUGl4ZWxC
dWZmZXI6OmJ5dGVzUGVyUm93T2ZQbGFuZShzaXplX3QgcGxhbmUpCit7CisgICAgcmV0dXJuIENW
UGl4ZWxCdWZmZXJHZXRCeXRlc1BlclJvd09mUGxhbmUobV9waXhlbEJ1ZmZlciwgcGxhbmUpOwor
fQorCit2b2lkIFFUUGl4ZWxCdWZmZXI6OmdldEV4dGVuZGVkUGl4ZWxzKHNpemVfdCogbGVmdCwg
c2l6ZV90KiByaWdodCwgc2l6ZV90KiB0b3AsIHNpemVfdCogYm90dG9tKQoreworICAgIHJldHVy
biBDVlBpeGVsQnVmZmVyR2V0RXh0ZW5kZWRQaXhlbHMobV9waXhlbEJ1ZmZlciwgbGVmdCwgcmln
aHQsIHRvcCwgYm90dG9tKTsKK30KKworQ0ZEaWN0aW9uYXJ5UmVmIFFUUGl4ZWxCdWZmZXI6OmF0
dGFjaG1lbnRzKCkKK3sKKyAgICBDRkRpY3Rpb25hcnlSZWYgcHJvcG9nYXRlZCA9IENWQnVmZmVy
R2V0QXR0YWNobWVudHMobV9waXhlbEJ1ZmZlciwga0NWQXR0YWNobWVudE1vZGVfU2hvdWxkUHJv
cGFnYXRlKTsKKyAgICByZXR1cm4gcHJvcG9nYXRlZDsKK30KKwordm9pZCBRVFBpeGVsQnVmZmVy
OjpyZXRhaW5DYWxsYmFjayh2b2lkKiByZWZjb24pCit7CisgICAgQ1ZQaXhlbEJ1ZmZlclJldGFp
bihzdGF0aWNfY2FzdDxDVlBpeGVsQnVmZmVyUmVmPihyZWZjb24pKTsKK30KKwordm9pZCBRVFBp
eGVsQnVmZmVyOjpyZWxlYXNlQ2FsbGJhY2sodm9pZCogcmVmY29uKQoreworICAgIENWUGl4ZWxC
dWZmZXJSZWxlYXNlKHN0YXRpY19jYXN0PENWUGl4ZWxCdWZmZXJSZWY+KHJlZmNvbikpOworfQor
Cit2b2lkIFFUUGl4ZWxCdWZmZXI6OmltYWdlUXVldWVSZWxlYXNlQ2FsbGJhY2sodW5zaWduZWQg
aW50IHR5cGUsIHVpbnQ2NF90IGlkLCB2b2lkKiByZWZjb24pCit7CisgICAgQ1ZQaXhlbEJ1ZmZl
clJlbGVhc2Uoc3RhdGljX2Nhc3Q8Q1ZQaXhlbEJ1ZmZlclJlZj4ocmVmY29uKSk7Cit9CisKK3Zv
aWQgUVRQaXhlbEJ1ZmZlcjo6ZGF0YVByb3ZpZGVyUmVsZWFzZUJ5dGVQb2ludGVyQ2FsbGJhY2so
dm9pZCogcmVmY29uLCBjb25zdCB2b2lkKiBwb2ludGVyKQoreworICAgIENWUGl4ZWxCdWZmZXJV
bmxvY2tCYXNlQWRkcmVzcyhzdGF0aWNfY2FzdDxDVlBpeGVsQnVmZmVyUmVmPihyZWZjb24pLCAw
KTsKK30KKworY29uc3Qgdm9pZCogUVRQaXhlbEJ1ZmZlcjo6ZGF0YVByb3ZpZGVyR2V0Qnl0ZVBv
aW50ZXJDYWxsYmFjayh2b2lkKiByZWZjb24pCit7CisgICAgQ1ZQaXhlbEJ1ZmZlckxvY2tCYXNl
QWRkcmVzcyhzdGF0aWNfY2FzdDxDVlBpeGVsQnVmZmVyUmVmPihyZWZjb24pLCAwKTsKKyAgICBy
ZXR1cm4gQ1ZQaXhlbEJ1ZmZlckdldEJhc2VBZGRyZXNzKHN0YXRpY19jYXN0PENWUGl4ZWxCdWZm
ZXJSZWY+KHJlZmNvbikpOworfQorCitzaXplX3QgUVRQaXhlbEJ1ZmZlcjo6ZGF0YVByb3ZpZGVy
R2V0Qnl0ZXNBdFBvc2l0aW9uQ2FsbGJhY2sodm9pZCogcmVmY29uLCB2b2lkKiBidWZmZXIsIHNp
emVfdCBwb3NpdGlvbiwgc2l6ZV90IGNvdW50KQoreworICAgIGNoYXIqIGRhdGEgPSAoY2hhciop
Q1ZQaXhlbEJ1ZmZlckdldEJhc2VBZGRyZXNzKHN0YXRpY19jYXN0PENWUGl4ZWxCdWZmZXJSZWY+
KHJlZmNvbikpOworICAgIHNpemVfdCBzaXplID0gQ1ZQaXhlbEJ1ZmZlckdldERhdGFTaXplKHN0
YXRpY19jYXN0PENWUGl4ZWxCdWZmZXJSZWY+KHJlZmNvbikpOworICAgIGlmIChzaXplIC0gcG9z
aXRpb24gPCBjb3VudCkKKyAgICAgICAgY291bnQgPSBzaXplIC0gcG9zaXRpb247CisKKyAgICBt
ZW1jcHkoYnVmZmVyLCBkYXRhK3Bvc2l0aW9uLCBjb3VudCk7CisgICAgcmV0dXJuIGNvdW50Owor
fQorCit2b2lkIFFUUGl4ZWxCdWZmZXI6OmRhdGFQcm92aWRlclJlbGVhc2VJbmZvQ2FsbGJhY2so
dm9pZCogcmVmY29uKQoreworICAgIENWUGl4ZWxCdWZmZXJSZWxlYXNlKHN0YXRpY19jYXN0PENW
UGl4ZWxCdWZmZXJSZWY+KHJlZmNvbikpOworfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vUVRQaXhlbEJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL1FUUGl4ZWxCdWZmZXIuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL1FUUGl4ZWxCdWZmZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBs
ZSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBRVFBpeGVsQnVm
ZmVyX2gKKyNkZWZpbmUgUVRQaXhlbEJ1ZmZlcl9oCisKKyNpZmRlZiBRVE1PVklFV0lOX0VYUE9S
VFMKKyNkZWZpbmUgUVRNT1ZJRVdJTl9BUEkgX19kZWNsc3BlYyhkbGxleHBvcnQpCisjZWxzZQor
I2RlZmluZSBRVE1PVklFV0lOX0FQSSBfX2RlY2xzcGVjKGRsbGltcG9ydCkKKyNlbmRpZgorCisj
aW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKwordHlwZWRl
ZiBzdHJ1Y3QgX19DVkJ1ZmZlciAqQ1ZCdWZmZXJSZWY7Cit0eXBlZGVmIENWQnVmZmVyUmVmIENW
UGl4ZWxCdWZmZXJSZWY7Cit0eXBlZGVmIHN0cnVjdCBDR0ltYWdlKiBDR0ltYWdlUmVmOwordHlw
ZWRlZiBpbnQzMl90IENWUmV0dXJuOwordHlwZWRlZiBjb25zdCBzdHJ1Y3QgX19DRkRpY3Rpb25h
cnkgKiBDRkRpY3Rpb25hcnlSZWY7CisKKy8vIFFUUGl4ZWxCdWZmZXIgd3JhcHMgUXVpY2tUaW1l
J3MgaW1wbGVtZW50YXRpb24gb2YgQ1ZQaXhlbEJ1ZmZlciwgc28gaXRzIGZ1bmN0aW9ucyBhcmUK
Ky8vIHNhZmUgdG8gY2FsbCB3aXRoaW4gV2ViS2l0LgorY2xhc3MgUVRNT1ZJRVdJTl9BUEkgUVRQ
aXhlbEJ1ZmZlciA6IFJlZkNvdW50ZWQ8UVRQaXhlbEJ1ZmZlcj4geworcHVibGljOgorICAgIFFU
UGl4ZWxCdWZmZXIoKTsKKyAgICBRVFBpeGVsQnVmZmVyKGNvbnN0IFFUUGl4ZWxCdWZmZXImKTsK
KyAgICBRVFBpeGVsQnVmZmVyKENWUGl4ZWxCdWZmZXJSZWYpOworICAgIFFUUGl4ZWxCdWZmZXIm
IG9wZXJhdG9yPShjb25zdCBRVFBpeGVsQnVmZmVyJik7CisgICAgflFUUGl4ZWxCdWZmZXIoKTsK
KworICAgIHZvaWQgc2V0KENWUGl4ZWxCdWZmZXJSZWYpOworICAgIENWUGl4ZWxCdWZmZXJSZWYg
Z2V0KCk7CisgICAgdm9pZCBjbGVhcigpOworCisgICAgQ1ZSZXR1cm4gbG9ja0Jhc2VBZGRyZXNz
KCk7CisgICAgQ1ZSZXR1cm4gdW5sb2NrQmFzZUFkZHJlc3MoKTsKKyAgICBzaXplX3Qgd2lkdGgo
KTsKKyAgICBzaXplX3QgaGVpZ2h0KCk7CisKKyAgICB1bnNpZ25lZCBsb25nIHBpeGVsRm9ybWF0
VHlwZSgpOworICAgIGJvb2wgcGl4ZWxGb3JtYXRJczMyQVJHQigpOworICAgIGJvb2wgcGl4ZWxG
b3JtYXRJczMyQkdSQSgpOworICAgIHZvaWQqIGJhc2VBZGRyZXNzKCk7CisgICAgc2l6ZV90IGJ5
dGVzUGVyUm93KCk7CisgICAgc2l6ZV90IGRhdGFTaXplKCk7CisKKyAgICBib29sIGlzUGxhbmFy
KCk7CisgICAgc2l6ZV90IHBsYW5lQ291bnQoKTsKKyAgICBzaXplX3Qgd2lkdGhPZlBsYW5lKHNp
emVfdCk7CisgICAgc2l6ZV90IGhlaWdodE9mUGxhbmUoc2l6ZV90KTsKKyAgICB2b2lkKiBiYXNl
QWRkcmVzc09mUGxhbmUoc2l6ZV90KTsKKyAgICBzaXplX3QgYnl0ZXNQZXJSb3dPZlBsYW5lKHNp
emVfdCk7CisKKyAgICB2b2lkIGdldEV4dGVuZGVkUGl4ZWxzKHNpemVfdCogbGVmdCwgc2l6ZV90
KiByaWdodCwgc2l6ZV90KiB0b3AsIHNpemVfdCogYm90dG9tKTsKKyAgICBDRkRpY3Rpb25hcnlS
ZWYgYXR0YWNobWVudHMoKTsKKworICAgIC8vIEdlbmVyaWMgQ0ZSZXRhaW4vQ0ZSZWxlYXNlIGNh
bGxiYWNrcworICAgIHN0YXRpYyB2b2lkIHJlbGVhc2VDYWxsYmFjayh2b2lkKiByZWZjb24pOwor
ICAgIHN0YXRpYyB2b2lkIHJldGFpbkNhbGxiYWNrKHZvaWQqIHJlZmNvbik7CisKKyAgICAvLyBD
QUltYWdlUXVldWUgY2FsbGJhY2tzCisgICAgc3RhdGljIHZvaWQgaW1hZ2VRdWV1ZVJlbGVhc2VD
YWxsYmFjayh1bnNpZ25lZCBpbnQgdHlwZSwgdWludDY0X3QgaWQsIHZvaWQqIHJlZmNvbik7CisK
KyAgICAvLyBDR0RhdGFQcm92aWRlciBjYWxsYmFja3MKKyAgICBzdGF0aWMgdm9pZCBkYXRhUHJv
dmlkZXJSZWxlYXNlQnl0ZVBvaW50ZXJDYWxsYmFjayh2b2lkKiByZWZjb24sIGNvbnN0IHZvaWQq
IHBvaW50ZXIpOworICAgIHN0YXRpYyBjb25zdCB2b2lkKiBkYXRhUHJvdmlkZXJHZXRCeXRlUG9p
bnRlckNhbGxiYWNrKHZvaWQqIHJlZmNvbik7CisgICAgc3RhdGljIHNpemVfdCBkYXRhUHJvdmlk
ZXJHZXRCeXRlc0F0UG9zaXRpb25DYWxsYmFjayh2b2lkKiByZWZjb24sIHZvaWQqIGJ1ZmZlciwg
c2l6ZV90IHBvc2l0aW9uLCBzaXplX3QgY291bnQpOworICAgIHN0YXRpYyB2b2lkIGRhdGFQcm92
aWRlclJlbGVhc2VJbmZvQ2FsbGJhY2sodm9pZCogcmVmY29uKTsKKworcHJpdmF0ZToKKyAgICBD
VlBpeGVsQnVmZmVyUmVmIG1fcGl4ZWxCdWZmZXI7Cit9OworCisjZW5kaWYKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUQ0ZEaWN0aW9uYXJ5LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVENGRGljdGlvbmFyeS5jcHAJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVENGRGljdGlvbmFyeS5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlFUQ0ZEaWN0aW9uYXJ5Lmgi
CisKKyNpbmNsdWRlIDxDRkRhdGEuaD4KKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKK0NGRGF0YVJl
ZiBRVENGUHJvcGVydHlMaXN0Q3JlYXRlWE1MRGF0YShDRkFsbG9jYXRvclJlZiBhbGxvY2F0b3Is
IENGUHJvcGVydHlMaXN0UmVmIHByb3BlcnR5TGlzdCkKK3sKKworICAgIHR5cGVkZWYgQ0ZEYXRh
UmVmICgqIHBmbkNGUHJvcGVydHlMaXN0Q3JlYXRlWE1MRGF0YSkoQ0ZBbGxvY2F0b3JSZWYgYWxs
b2NhdG9yLCBDRlByb3BlcnR5TGlzdFJlZiBwcm9wZXJ0eUxpc3QpOworICAgIHN0YXRpYyBwZm5D
RlByb3BlcnR5TGlzdENyZWF0ZVhNTERhdGEgcENGUHJvcGVydHlMaXN0Q3JlYXRlWE1MRGF0YSA9
IDA7CisgICAgaWYgKCFwQ0ZQcm9wZXJ0eUxpc3RDcmVhdGVYTUxEYXRhKSB7CisgICAgICAgIEhN
T0RVTEUgcXRjZkRMTCA9IExvYWRMaWJyYXJ5VyhMIlFUQ0YuZGxsIik7CisgICAgICAgIGlmIChx
dGNmRExMKQorICAgICAgICAgICAgcENGUHJvcGVydHlMaXN0Q3JlYXRlWE1MRGF0YSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8cGZuQ0ZQcm9wZXJ0eUxpc3RDcmVhdGVYTUxEYXRhPihHZXRQcm9jQWRkcmVz
cyhxdGNmRExMLCAiUVRDRl9DRlByb3BlcnR5TGlzdENyZWF0ZVhNTERhdGEiKSk7CisgICAgfQor
CisgICAgaWYgKHBDRlByb3BlcnR5TGlzdENyZWF0ZVhNTERhdGEpCisgICAgICAgIHJldHVybiBw
Q0ZQcm9wZXJ0eUxpc3RDcmVhdGVYTUxEYXRhKGFsbG9jYXRvciwgcHJvcGVydHlMaXN0KTsKKyAg
ICByZXR1cm4gMDsKK30KKworQ0ZEaWN0aW9uYXJ5UmVmIFFUQ0ZEaWN0aW9uYXJ5Q3JlYXRlQ29w
eVdpdGhEYXRhQ2FsbGJhY2soQ0ZBbGxvY2F0b3JSZWYgYWxsb2NhdG9yLCBDRkRpY3Rpb25hcnlS
ZWYgZGljdGlvbmFyeSwgUVRDRkRpY3RvbmFyeUNyZWF0ZUZyb21EYXRhQ2FsbGJhY2sgY2FsbGJh
Y2spIAoreworICAgIEFTU0VSVChkaWN0aW9uYXJ5KTsKKyAgICBBU1NFUlQoY2FsbGJhY2spOwor
CisgICAgQ0ZEYXRhUmVmIGRhdGEgPSBRVENGUHJvcGVydHlMaXN0Q3JlYXRlWE1MRGF0YShrQ0ZB
bGxvY2F0b3JEZWZhdWx0LCBkaWN0aW9uYXJ5KTsKKyAgICBDRkRpY3Rpb25hcnlSZWYgb3V0cHV0
RGljdGlvbmFyeSA9IGNhbGxiYWNrKGFsbG9jYXRvciwgQ0ZEYXRhR2V0Qnl0ZVB0cihkYXRhKSwg
Q0ZEYXRhR2V0TGVuZ3RoKGRhdGEpKTsKKyAgICBpZiAoZGF0YSkKKyAgICAgICAgQ0ZSZWxlYXNl
KGRhdGEpOworCisgICAgcmV0dXJuIG91dHB1dERpY3Rpb25hcnk7Cit9CkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVENGRGljdGlvbmFyeS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUQ0ZEaWN0aW9uYXJ5LmgJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVENGRGljdGlvbmFyeS5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4
LCAyMDA5LCAyMDEwIEFwcGxlLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIFFUQ0ZEaWN0aW9uYXJ5X2gKKyNkZWZpbmUgUVRDRkRpY3Rpb25hcnlfaAorCisjaWZk
ZWYgUVRNT1ZJRVdJTl9FWFBPUlRTCisjZGVmaW5lIFFUTU9WSUVXSU5fQVBJIF9fZGVjbHNwZWMo
ZGxsZXhwb3J0KQorI2Vsc2UKKyNkZWZpbmUgUVRNT1ZJRVdJTl9BUEkgX19kZWNsc3BlYyhkbGxp
bXBvcnQpCisjZW5kaWYKKworI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NGQmFzZS5oPgorCit0
eXBlZGVmIGNvbnN0IHN0cnVjdCBfX0NGRGljdGlvbmFyeSAqIENGRGljdGlvbmFyeVJlZjsKK3R5
cGVkZWYgY29uc3Qgc3RydWN0IF9fQ0ZBbGxvY2F0b3IgKiBDRkFsbG9jYXRvclJlZjsKKwordHlw
ZWRlZiBDRkRpY3Rpb25hcnlSZWYgKCogUVRDRkRpY3RvbmFyeUNyZWF0ZUZyb21EYXRhQ2FsbGJh
Y2spKENGQWxsb2NhdG9yUmVmLCBjb25zdCBVSW50OCosIENGSW5kZXgpOworCitRVE1PVklFV0lO
X0FQSSBDRkRpY3Rpb25hcnlSZWYgUVRDRkRpY3Rpb25hcnlDcmVhdGVDb3B5V2l0aERhdGFDYWxs
YmFjayhDRkFsbG9jYXRvclJlZiwgQ0ZEaWN0aW9uYXJ5UmVmLCBRVENGRGljdG9uYXJ5Q3JlYXRl
RnJvbURhdGFDYWxsYmFjayk7CisKKyNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54581</attachid>
            <date>2010-04-28 10:53:41 -0700</date>
            <delta_ts>2010-04-29 16:53:18 -0700</delta_ts>
            <desc>Part 1.2: WebCore: The breakup of MediaPlayerPrivateQuickTimeWin</desc>
            <filename>7569713-MediaPlayerPrivateQuickTimeWin.patch</filename>
            <type>text/plain</type>
            <size>12684</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1
aWNrVGltZVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lV2luLmNwcAkocmV2aXNpb24gNTgxODcpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVRdWlja1Rp
bWVXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw4IEBACiAjaW5jbHVkZSAiRnJh
bWVWaWV3LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiS1VSTC5o
IgotI2luY2x1ZGUgIlFUTW92aWVXaW4uaCIKKyNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVU
YXNrVGltZXIuaCIKKyNpbmNsdWRlICJRVE1vdmllVGFzay5oIgogI2luY2x1ZGUgIlNjcm9sbFZp
ZXcuaCIKICNpbmNsdWRlICJTb2Z0TGlua2luZy5oIgogI2luY2x1ZGUgIlN0cmluZ0J1aWxkZXIu
aCIKQEAgLTUzLDEwICs1NCw4IEBACiAjZW5kaWYKIAogI2lmIERSQVdfRlJBTUVfUkFURQotI2lu
Y2x1ZGUgIkZvbnQuaCIKLSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJGcmFtZS5o
IgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIlJl
bmRlck9iamVjdC5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiV2luZG93
cy5oIgpAQCAtMTA0LDYgKzEwMyw3IEBACiBNZWRpYVBsYXllclByaXZhdGU6On5NZWRpYVBsYXll
clByaXZhdGUoKQogewogICAgIHRlYXJEb3duVmlkZW9SZW5kZXJpbmcoKTsKKyAgICBtX3F0TW92
aWVXaW4tPnNldE1vdmllKDApOwogfQogCiBib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6c3VwcG9y
dHNGdWxsc2NyZWVuKCkgY29uc3QKQEAgLTEyNSw1MCArMTI1LDYgQEAKIH0KICNlbmRpZgogCi1j
bGFzcyBUYXNrVGltZXIgOiBUaW1lckJhc2UgewotcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGlu
aXRpYWxpemUoKTsKLSAgICAKLXByaXZhdGU6Ci0gICAgc3RhdGljIHZvaWQgc2V0VGFza1RpbWVy
RGVsYXkoZG91YmxlKTsKLSAgICBzdGF0aWMgdm9pZCBzdG9wVGFza1RpbWVyKCk7Ci0KLSAgICB2
b2lkIGZpcmVkKCk7Ci0KLSAgICBzdGF0aWMgVGFza1RpbWVyKiBzX3RpbWVyOwotfTsKLQotVGFz
a1RpbWVyKiBUYXNrVGltZXI6OnNfdGltZXIgPSAwOwotCi12b2lkIFRhc2tUaW1lcjo6aW5pdGlh
bGl6ZSgpCi17Ci0gICAgaWYgKHNfdGltZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNfdGlt
ZXIgPSBuZXcgVGFza1RpbWVyOwotCi0gICAgUVRNb3ZpZVdpbjo6c2V0VGFza1RpbWVyRnVuY3Mo
c2V0VGFza1RpbWVyRGVsYXksIHN0b3BUYXNrVGltZXIpOwotfQotCi12b2lkIFRhc2tUaW1lcjo6
c2V0VGFza1RpbWVyRGVsYXkoZG91YmxlIGRlbGF5SW5TZWNvbmRzKQotewotICAgIEFTU0VSVChz
X3RpbWVyKTsKLQotICAgIHNfdGltZXItPnN0YXJ0T25lU2hvdChkZWxheUluU2Vjb25kcyk7Ci19
Ci0KLXZvaWQgVGFza1RpbWVyOjpzdG9wVGFza1RpbWVyKCkKLXsKLSAgICBBU1NFUlQoc190aW1l
cik7Ci0KLSAgICBzX3RpbWVyLT5zdG9wKCk7Ci19Ci0KLXZvaWQgVGFza1RpbWVyOjpmaXJlZCgp
Ci17Ci0gICAgUVRNb3ZpZVdpbjo6dGFza1RpbWVyRmlyZWQoKTsKLX0KLQogU3RyaW5nIE1lZGlh
UGxheWVyUHJpdmF0ZTo6cmZjMjYxNkRhdGVTdHJpbmdGcm9tVGltZShDRkFic29sdXRlVGltZSB0
aW1lKQogewogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBkYXlTdHJpbmdzW10gPSB7ICJN
b24iLCAiVHVlIiwgIldlZCIsICJUaHUiLCAiRnJpIiwgIlNhdCIsICJTdW4iIH07CkBAIC0yNjIs
NyArMjE4LDcgQEAKIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmxvYWQoY29uc3QgU3RyaW5n
JiB1cmwpCiB7Ci0gICAgaWYgKCFRVE1vdmllV2luOjppbml0aWFsaXplUXVpY2tUaW1lKCkpIHsK
KyAgICBpZiAoIVFUTW92aWU6OmluaXRpYWxpemVRdWlja1RpbWUoKSkgewogICAgICAgICAvLyBG
SVhNRTogaXMgdGhpcyB0aGUgcmlnaHQgZXJyb3IgdG8gcmV0dXJuPwogICAgICAgICBtX25ldHdv
cmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpEZWNvZGVFcnJvcjsgCiAgICAgICAgIG1fcGxheWVyLT5u
ZXR3b3JrU3RhdGVDaGFuZ2VkKCk7CkBAIC0yNzAsNyArMjI2LDcgQEAKICAgICB9CiAKICAgICAv
LyBJbml0aWFsaXplIHRoZSB0YXNrIHRpbWVyLgotICAgIFRhc2tUaW1lcjo6aW5pdGlhbGl6ZSgp
OworICAgIE1lZGlhUGxheWVyUHJpdmF0ZVRhc2tUaW1lcjo6aW5pdGlhbGl6ZSgpOwogCiAgICAg
aWYgKG1fbmV0d29ya1N0YXRlICE9IE1lZGlhUGxheWVyOjpMb2FkaW5nKSB7CiAgICAgICAgIG1f
bmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkxvYWRpbmc7CkBAIC0yODQsMTAgKzI0MCwxMyBA
QAogCiAgICAgc2V0VXBDb29raWVzRm9yUXVpY2tUaW1lKHVybCk7CiAKLSAgICBtX3F0TW92aWUu
c2V0KG5ldyBRVE1vdmllV2luKHRoaXMpKTsKKyAgICBtX3F0TW92aWUgPSBhZG9wdFJlZihuZXcg
UVRNb3ZpZSh0aGlzKSk7CiAgICAgbV9xdE1vdmllLT5sb2FkKHVybC5jaGFyYWN0ZXJzKCksIHVy
bC5sZW5ndGgoKSwgbV9wbGF5ZXItPnByZXNlcnZlc1BpdGNoKCkpOwogICAgIG1fcXRNb3ZpZS0+
c2V0Vm9sdW1lKG1fcGxheWVyLT52b2x1bWUoKSk7Ci0gICAgbV9xdE1vdmllLT5zZXRWaXNpYmxl
KG1fcGxheWVyLT52aXNpYmxlKCkpOworCisgICAgbV9xdE1vdmllV2luID0gYWRvcHRSZWYobmV3
IFFUTW92aWVXaW4odGhpcykpOworICAgIG1fcXRNb3ZpZVdpbi0+c2V0TW92aWUobV9xdE1vdmll
LmdldCgpKTsKKyAgICBtX3F0TW92aWVXaW4tPnNldFZpc2libGUobV9wbGF5ZXItPnZpc2libGUo
KSk7CiB9CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpwbGF5KCkKQEAgLTM4OCw3ICszNDcs
NyBAQAogewogICAgIGlmICghbV9xdE1vdmllKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBy
ZXR1cm4gbV9xdE1vdmllLT5yYXRlKCkgPT0gMC4wZjsKKyAgICByZXR1cm4gKCFtX3F0TW92aWUt
PnJhdGUoKSk7CiB9CiAKIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZWVraW5nKCkgY29uc3QK
QEAgLTYxMiw3ICs1NzEsNyBAQAogICAgIGlmIChtX2hhc1Vuc3VwcG9ydGVkVHJhY2tzIHx8ICFt
X3F0TW92aWUgfHwgbV9zaXplID09IHNpemUpCiAgICAgICAgIHJldHVybjsKICAgICBtX3NpemUg
PSBzaXplOwotICAgIG1fcXRNb3ZpZS0+c2V0U2l6ZShzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0
KCkpOworICAgIG1fcXRNb3ZpZVdpbi0+c2V0U2l6ZShzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0
KCkpOwogfQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0VmlzaWJsZShib29sIHZpc2li
bGUpCkBAIC02MjAsNyArNTc5LDcgQEAKICAgICBpZiAobV9oYXNVbnN1cHBvcnRlZFRyYWNrcyB8
fCAhbV9xdE1vdmllIHx8IG1fdmlzaWJsZSA9PSB2aXNpYmxlKQogICAgICAgICByZXR1cm47CiAK
LSAgICBtX3F0TW92aWUtPnNldFZpc2libGUodmlzaWJsZSk7CisgICAgbV9xdE1vdmllV2luLT5z
ZXRWaXNpYmxlKHZpc2libGUpOwogICAgIG1fdmlzaWJsZSA9IHZpc2libGU7CiAgICAgaWYgKG1f
dmlzaWJsZSkgewogICAgICAgICBpZiAoaXNSZWFkeUZvclJlbmRlcmluZygpKQpAQCAtNjU5LDcg
KzYxOCw3IEBACiAgICAgICAgIFNldFdvcmxkVHJhbnNmb3JtKGhkYywgJnhmb3JtKTsKICAgICB9
CiAKLSAgICBtX3F0TW92aWUtPnBhaW50KGhkYywgci54KCksIHIueSgpKTsKKyAgICBtX3F0TW92
aWVXaW4tPnBhaW50KGhkYywgci54KCksIHIueSgpKTsKICAgICBpZiAodXNpbmdUZW1wQml0bWFw
KQogICAgICAgICBwLT5kcmF3V2luZG93c0JpdG1hcChiaXRtYXAuZ2V0KCksIHIudG9wTGVmdCgp
KTsKICAgICBlbHNlCkBAIC03MTksMTEgKzY3OCwxMSBAQAogICAgIHN0YXRpYyBib29sIHR5cGVM
aXN0SW5pdGlhbGl6ZWQgPSBmYWxzZTsKIAogICAgIGlmICghdHlwZUxpc3RJbml0aWFsaXplZCkg
ewotICAgICAgICB1bnNpZ25lZCBjb3VudCA9IFFUTW92aWVXaW46OmNvdW50U3VwcG9ydGVkVHlw
ZXMoKTsKKyAgICAgICAgdW5zaWduZWQgY291bnQgPSBRVE1vdmllOjpjb3VudFN1cHBvcnRlZFR5
cGVzKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCBjb3VudDsgbisrKSB7CiAg
ICAgICAgICAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVyOwogICAgICAgICAgICAgdW5zaWduZWQg
bGVuOwotICAgICAgICAgICAgUVRNb3ZpZVdpbjo6Z2V0U3VwcG9ydGVkVHlwZShuLCBjaGFyYWN0
ZXIsIGxlbik7CisgICAgICAgICAgICBRVE1vdmllOjpnZXRTdXBwb3J0ZWRUeXBlKG4sIGNoYXJh
Y3RlciwgbGVuKTsKICAgICAgICAgICAgIGlmIChsZW4pCiAgICAgICAgICAgICAgICAgdHlwZUNh
Y2hlLmFkZChTdHJpbmcoY2hhcmFjdGVyLCBsZW4pKTsKICAgICAgICAgfQpAQCAtNzQxLDcgKzcw
MCw3IEBACiAKIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlOjppc0F2YWlsYWJsZSgpCiB7Ci0gICAg
cmV0dXJuIFFUTW92aWVXaW46OmluaXRpYWxpemVRdWlja1RpbWUoKTsKKyAgICByZXR1cm4gUVRN
b3ZpZTo6aW5pdGlhbGl6ZVF1aWNrVGltZSgpOwogfQogCiBNZWRpYVBsYXllcjo6U3VwcG9ydHNU
eXBlIE1lZGlhUGxheWVyUHJpdmF0ZTo6c3VwcG9ydHNUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSwg
Y29uc3QgU3RyaW5nJiBjb2RlY3MpCkBAIC03NTEsNyArNzEwLDcgQEAKICAgICByZXR1cm4gbWlt
ZVR5cGVDYWNoZSgpLmNvbnRhaW5zKHR5cGUpID8gKGNvZGVjcy5pc0VtcHR5KCkgPyBNZWRpYVBs
YXllcjo6TWF5QmVTdXBwb3J0ZWQgOiBNZWRpYVBsYXllcjo6SXNTdXBwb3J0ZWQpIDogTWVkaWFQ
bGF5ZXI6OklzTm90U3VwcG9ydGVkOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6bW92
aWVFbmRlZChRVE1vdmllV2luKiBtb3ZpZSkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjptb3Zp
ZUVuZGVkKFFUTW92aWUqIG1vdmllKQogewogICAgIGlmIChtX2hhc1Vuc3VwcG9ydGVkVHJhY2tz
KQogICAgICAgICByZXR1cm47CkBAIC03NjAsNyArNzE5LDcgQEAKICAgICBkaWRFbmQoKTsKIH0K
IAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6Om1vdmllTG9hZFN0YXRlQ2hhbmdlZChRVE1vdmll
V2luKiBtb3ZpZSkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjptb3ZpZUxvYWRTdGF0ZUNoYW5n
ZWQoUVRNb3ZpZSogbW92aWUpCiB7CiAgICAgaWYgKG1faGFzVW5zdXBwb3J0ZWRUcmFja3MpCiAg
ICAgICAgIHJldHVybjsKQEAgLTc2OSw3ICs3MjgsNyBAQAogICAgIHVwZGF0ZVN0YXRlcygpOwog
fQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6bW92aWVUaW1lQ2hhbmdlZChRVE1vdmllV2lu
KiBtb3ZpZSkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjptb3ZpZVRpbWVDaGFuZ2VkKFFUTW92
aWUqIG1vdmllKQogewogICAgIGlmIChtX2hhc1Vuc3VwcG9ydGVkVHJhY2tzKQogICAgICAgICBy
ZXR1cm47CkBAIC03ODQsNyArNzQzLDcgQEAKICAgICBpZiAobV9oYXNVbnN1cHBvcnRlZFRyYWNr
cykKICAgICAgICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKG1fcXRNb3ZpZS5nZXQoKSA9PSBtb3Zp
ZSk7CisgICAgQVNTRVJUKG1fcXRNb3ZpZVdpbi5nZXQoKSA9PSBtb3ZpZSk7CiAjaWYgRFJBV19G
UkFNRV9SQVRFCiAgICAgaWYgKG1fc3RhcnRlZFBsYXlpbmcpIHsKICAgICAgICAgbV9mcmFtZUNv
dW50V2hpbGVQbGF5aW5nKys7CkBAIC05MDAsOSArODU5LDkgQEAKICAgICB1bnNpZ25lZCB3aWR0
aDsKICAgICB1bnNpZ25lZCBoZWlnaHQ7CiAKLSAgICBtX3F0TW92aWUtPmdldEN1cnJlbnRGcmFt
ZUluZm8oYnVmZmVyLCBiaXRzUGVyUGl4ZWwsIHJvd0J5dGVzLCB3aWR0aCwgaGVpZ2h0KTsKKyAg
ICBtX3F0TW92aWVXaW4tPmdldEN1cnJlbnRGcmFtZUluZm8oYnVmZmVyLCBiaXRzUGVyUGl4ZWws
IHJvd0J5dGVzLCB3aWR0aCwgaGVpZ2h0KTsKICAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0
dXJuIDsKKyAgICAgICAgcmV0dXJuOwogCiAgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gZGF0YShB
ZG9wdENGLCBDRkRhdGFDcmVhdGVXaXRoQnl0ZXNOb0NvcHkoMCwgc3RhdGljX2Nhc3Q8VUludDgq
PihidWZmZXIpLCByb3dCeXRlcyAqIGhlaWdodCwga0NGQWxsb2NhdG9yTnVsbCkpOwogICAgIFJl
dGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4gcHJvdmlkZXIoQWRvcHRDRiwgQ0dEYXRhUHJvdmlk
ZXJDcmVhdGVXaXRoQ0ZEYXRhKGRhdGEuZ2V0KCkpKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVdpbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNr
VGltZVdpbi5oCShyZXZpc2lvbiA1ODE4NykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MywxMyArMjMsMTQgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgTWVkaWFQbGF5
ZXJQcml2YXRlUVRLaXRfaAotI2RlZmluZSBNZWRpYVBsYXllclByaXZhdGVRVEtpdF9oCisjaWZu
ZGVmIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVdpbl9oCisjZGVmaW5lIE1lZGlhUGxheWVy
UHJpdmF0ZVF1aWNrVGltZVdpbl9oCiAKICNpZiBFTkFCTEUoVklERU8pCiAKICNpbmNsdWRlICJN
ZWRpYVBsYXllclByaXZhdGUuaCIKICNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgPFFUTW92
aWUuaD4KICNpbmNsdWRlIDxRVE1vdmllV2luLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgog
I2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KQEAgLTUxLDcgKzUyLDcgQEAKIGNsYXNzIEludFJl
Y3Q7CiBjbGFzcyBTdHJpbmc7CiAKLWNsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZSA6IHB1YmxpYyBN
ZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2UsIHB1YmxpYyBRVE1vdmllV2luQ2xpZW50IAorY2xh
c3MgTWVkaWFQbGF5ZXJQcml2YXRlIDogcHVibGljIE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFj
ZSwgcHVibGljIFFUTW92aWVDbGllbnQsIHB1YmxpYyBRVE1vdmllV2luQ2xpZW50IAogI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICAgICAgLCBwdWJsaWMgR3JhcGhpY3NMYXll
ckNsaWVudAogI2VuZGlmIApAQCAtMTMwLDkgKzEzMSw5IEBACiAgICAgZmxvYXQgbWF4VGltZUxv
YWRlZCgpIGNvbnN0OwogICAgIHZvaWQgc2F3VW5zdXBwb3J0ZWRUcmFja3MoKTsKIAotICAgIHZp
cnR1YWwgdm9pZCBtb3ZpZUVuZGVkKFFUTW92aWVXaW4qKTsKLSAgICB2aXJ0dWFsIHZvaWQgbW92
aWVMb2FkU3RhdGVDaGFuZ2VkKFFUTW92aWVXaW4qKTsKLSAgICB2aXJ0dWFsIHZvaWQgbW92aWVU
aW1lQ2hhbmdlZChRVE1vdmllV2luKik7CisgICAgdmlydHVhbCB2b2lkIG1vdmllRW5kZWQoUVRN
b3ZpZSopOworICAgIHZpcnR1YWwgdm9pZCBtb3ZpZUxvYWRTdGF0ZUNoYW5nZWQoUVRNb3ZpZSop
OworICAgIHZpcnR1YWwgdm9pZCBtb3ZpZVRpbWVDaGFuZ2VkKFFUTW92aWUqKTsKICAgICB2aXJ0
dWFsIHZvaWQgbW92aWVOZXdJbWFnZUF2YWlsYWJsZShRVE1vdmllV2luKik7CiAKICAgICAvLyBl
bmdpbmUgc3VwcG9ydApAQCAtMTYyLDcgKzE2Myw4IEBACiAgICAgU3RyaW5nIHJmYzI2MTZEYXRl
U3RyaW5nRnJvbVRpbWUoQ0ZBYnNvbHV0ZVRpbWUpOwogCiAgICAgTWVkaWFQbGF5ZXIqIG1fcGxh
eWVyOwotICAgIE93blB0cjxRVE1vdmllV2luPiBtX3F0TW92aWU7CisgICAgUmVmUHRyPFFUTW92
aWU+IG1fcXRNb3ZpZTsKKyAgICBSZWZQdHI8UVRNb3ZpZVdpbj4gbV9xdE1vdmllV2luOwogI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICBPd25QdHI8R3JhcGhpY3NMYXllcj4g
bV9xdFZpZGVvTGF5ZXI7CiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL01lZGlhUGxheWVyUHJpdmF0ZVRhc2tUaW1lci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlVGFza1RpbWVyLmNwcAko
cmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVy
UHJpdmF0ZVRhc2tUaW1lci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZVRhc2tUaW1lci5o
IgorCisjaW5jbHVkZSAiUVRNb3ZpZVRhc2suaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitN
ZWRpYVBsYXllclByaXZhdGVUYXNrVGltZXIqIE1lZGlhUGxheWVyUHJpdmF0ZVRhc2tUaW1lcjo6
c190aW1lciA9IDA7CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlVGFza1RpbWVyOjppbml0aWFs
aXplKCkKK3sKKyAgICBpZiAoc190aW1lcikKKyAgICAgICAgcmV0dXJuOworCisgICAgc190aW1l
ciA9IG5ldyBNZWRpYVBsYXllclByaXZhdGVUYXNrVGltZXI7CisKKyAgICBRVE1vdmllVGFzazo6
c2hhcmVkVGFzaygpLT5zZXRUYXNrVGltZXJGdW5jcyhzZXREZWxheSwgc3RvcFRhc2tUaW1lcik7
Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlVGFza1RpbWVyOjpzZXREZWxheShkb3VibGUg
ZGVsYXlJblNlY29uZHMpCit7CisgICAgQVNTRVJUKHNfdGltZXIpOworCisgICAgc190aW1lci0+
c3RhcnRPbmVTaG90KGRlbGF5SW5TZWNvbmRzKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZh
dGVUYXNrVGltZXI6OnN0b3BUYXNrVGltZXIoKQoreworICAgIEFTU0VSVChzX3RpbWVyKTsKKwor
ICAgIHNfdGltZXItPnN0b3AoKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVUYXNrVGlt
ZXI6OmZpcmVkKCkKK3sKKyAgICBRVE1vdmllVGFzazo6c2hhcmVkVGFzaygpLT5maXJlVGFza0Ns
aWVudHMoKTsKK30KKworfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVk
aWFQbGF5ZXJQcml2YXRlVGFza1RpbWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlVGFza1RpbWVyLmgJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVUYXNr
VGltZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBNZWRpYVBsYXll
clByaXZhdGVUYXNrVGltZXJfaAorI2RlZmluZSBNZWRpYVBsYXllclByaXZhdGVUYXNrVGltZXJf
aAorCisjaW5jbHVkZSAiVGltZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBN
ZWRpYVBsYXllclByaXZhdGVUYXNrVGltZXIgOiBUaW1lckJhc2UgeworcHVibGljOgorICAgIHN0
YXRpYyB2b2lkIGluaXRpYWxpemUoKTsKKyAgICAKK3ByaXZhdGU6CisgICAgc3RhdGljIHZvaWQg
c2V0RGVsYXkoZG91YmxlKTsKKyAgICBzdGF0aWMgdm9pZCBzdG9wVGFza1RpbWVyKCk7CisKKyAg
ICB2b2lkIGZpcmVkKCk7CisKKyAgICBzdGF0aWMgTWVkaWFQbGF5ZXJQcml2YXRlVGFza1RpbWVy
KiBzX3RpbWVyOworfTsKKworfQorCisjZW5kaWYK
</data>
<flag name="review"
          id="38609"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54582</attachid>
            <date>2010-04-28 10:55:05 -0700</date>
            <delta_ts>2010-04-28 11:30:07 -0700</delta_ts>
            <desc>Part 4: WebCore: New class MediaPlayerPrivateQuickTimeVisualContext</desc>
            <filename>7569713-MediaPlayerPrivateQuickTimeVisualContext.patch</filename>
            <type>text/plain</type>
            <size>38694</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1
aWNrVGltZVZpc3VhbENvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQuY3Bw
CShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5
ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsOTU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEFw
cGxlLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpZiBFTkFCTEUoVklERU8pCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlUXVp
Y2tUaW1lVmlzdWFsQ29udGV4dC5oIgorCisjaW5jbHVkZSAiQ29va2llLmgiCisjaW5jbHVkZSAi
Q29va2llSmFyLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIK
KyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVk
ZSAiTWVkaWFQbGF5ZXJQcml2YXRlVGFza1RpbWVyLmgiCisjaW5jbHVkZSAiUVRDRkRpY3Rpb25h
cnkuaCIKKyNpbmNsdWRlICJRVE1vdmllLmgiCisjaW5jbHVkZSAiUVRNb3ZpZVRhc2suaCIKKyNp
bmNsdWRlICJRVE1vdmllVmlzdWFsQ29udGV4dC5oIgorI2luY2x1ZGUgIlNjcm9sbFZpZXcuaCIK
KyNpbmNsdWRlICJTb2Z0TGlua2luZy5oIgorI2luY2x1ZGUgIlN0cmluZ0J1aWxkZXIuaCIKKyNp
bmNsdWRlICJTdHJpbmdIYXNoLmgiCisjaW5jbHVkZSAiVGltZVJhbmdlcy5oIgorI2luY2x1ZGUg
IlRpbWVyLmgiCisjaW5jbHVkZSA8V2luaW5ldC5oPgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGlt
ZS5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQu
aD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRy
YXMuaD4KKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNpbmNsdWRlICJHcmFw
aGljc0xheWVyQ0FDRi5oIgorI2luY2x1ZGUgIldLQ0FDRkxheWVyLmgiCisjZW5kaWYKKwordXNp
bmcgbmFtZXNwYWNlIHN0ZDsKKworY29uc3QgQ0ZTdHJpbmdSZWYga01pblF1YXJ0ekNvcmVWZXJz
aW9uID0gQ0ZTVFIoIjEuMC40My4wIik7Citjb25zdCBDRlN0cmluZ1JlZiBrTWluQ29yZVZpZGVv
VmVyc2lvbiA9IENGU1RSKCIxLjAuMC4yIik7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU09G
VF9MSU5LX0xJQlJBUlkoV2luaW5ldCkKK1NPRlRfTElOSyhXaW5pbmV0LCBJbnRlcm5ldFNldENv
b2tpZUV4VywgRFdPUkQsIFdJTkFQSSwgKExQQ1dTVFIgbHBzelVybCwgTFBDV1NUUiBscHN6Q29v
a2llTmFtZSwgTFBDV1NUUiBscHN6Q29va2llRGF0YSwgRFdPUkQgZHdGbGFncywgRFdPUkRfUFRS
IGR3UmVzZXJ2ZWQpLCAobHBzelVybCwgbHBzekNvb2tpZU5hbWUsIGxwc3pDb29raWVEYXRhLCBk
d0ZsYWdzLCBkd1Jlc2VydmVkKSkKKworLy8gSW50ZXJmYWNlIGRlY2xhcmF0aW9uIGZvciBNZWRp
YVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0J3MgUVRNb3ZpZUNsaWVudCBhZ2dy
ZWdhdGUKK2NsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6Ok1v
dmllQ2xpZW50IDogcHVibGljIFFUTW92aWVDbGllbnQgeworcHVibGljOgorICAgIE1vdmllQ2xp
ZW50KE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQqIHBhcmVudCkgOiBt
X3BhcmVudChwYXJlbnQpIHt9CisgICAgdmlydHVhbCB+TW92aWVDbGllbnQoKSB7IG1fcGFyZW50
ID0gMDsgfQorICAgIHZpcnR1YWwgdm9pZCBtb3ZpZUVuZGVkKFFUTW92aWUqKTsKKyAgICB2aXJ0
dWFsIHZvaWQgbW92aWVMb2FkU3RhdGVDaGFuZ2VkKFFUTW92aWUqKTsKKyAgICB2aXJ0dWFsIHZv
aWQgbW92aWVUaW1lQ2hhbmdlZChRVE1vdmllKik7Citwcml2YXRlOgorICAgIE1lZGlhUGxheWVy
UHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQqIG1fcGFyZW50OworfTsKKworLy8gSW50ZXJm
YWNlIGRlY2xhcmF0aW9uIGZvciBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250
ZXh0J3MgR3JhcGhpY3NMYXllckNsaWVudCBhZ2dyZWdhdGUKK2NsYXNzIE1lZGlhUGxheWVyUHJp
dmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OkxheWVyQ2xpZW50IDogcHVibGljIEdyYXBoaWNz
TGF5ZXJDbGllbnQgeworcHVibGljOgorICAgIExheWVyQ2xpZW50KE1lZGlhUGxheWVyUHJpdmF0
ZVF1aWNrVGltZVZpc3VhbENvbnRleHQqIHBhcmVudCkgOiBtX3BhcmVudChwYXJlbnQpIHt9Cisg
ICAgdmlydHVhbCB+TGF5ZXJDbGllbnQoKSB7IG1fcGFyZW50ID0gMDsgfQorICAgIHZpcnR1YWwg
dm9pZCBwYWludENvbnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGljc0NvbnRleHQm
LCBHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgSW50UmVjdCYgaW5DbGlwKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgbm90aWZ5QW5pbWF0aW9uU3RhcnRlZChjb25zdCBHcmFwaGljc0xheWVy
KiwgZG91YmxlIHRpbWUpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBub3RpZnlTeW5jUmVxdWlyZWQo
Y29uc3QgR3JhcGhpY3NMYXllciopIHsgfQorICAgIHZpcnR1YWwgYm9vbCBzaG93RGVidWdCb3Jk
ZXJzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2hvd1JlcGFp
bnRDb3VudGVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KK3ByaXZhdGU6CisgICAgTWVkaWFQ
bGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dCogbV9wYXJlbnQ7Cit9OworCitjbGFz
cyBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpWaXN1YWxDb250ZXh0
Q2xpZW50IDogcHVibGljIFFUTW92aWVWaXN1YWxDb250ZXh0Q2xpZW50IHsKK3B1YmxpYzoKKyAg
ICBWaXN1YWxDb250ZXh0Q2xpZW50KE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENv
bnRleHQqIHBhcmVudCkgOiBtX3BhcmVudChwYXJlbnQpIHt9CisgICAgdmlydHVhbCB+VmlzdWFs
Q29udGV4dENsaWVudCgpIHsgbV9wYXJlbnQgPSAwOyB9CisgICAgdm9pZCBpbWFnZUF2YWlsYWJs
ZUZvclRpbWUoY29uc3QgUVRDVlRpbWVTdGFtcCopOworICAgIHN0YXRpYyB2b2lkIHJldHJpZXZl
Q3VycmVudEltYWdlUHJvYyh2b2lkKik7Citwcml2YXRlOgorICAgIE1lZGlhUGxheWVyUHJpdmF0
ZVF1aWNrVGltZVZpc3VhbENvbnRleHQqIG1fcGFyZW50OworfTsKKworTWVkaWFQbGF5ZXJQcml2
YXRlSW50ZXJmYWNlKiBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0Ojpj
cmVhdGUoTWVkaWFQbGF5ZXIqIHBsYXllcikgCit7IAorICAgIHJldHVybiBuZXcgTWVkaWFQbGF5
ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dChwbGF5ZXIpOworfQorCit2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OnJlZ2lzdGVyTWVkaWFFbmdpbmUo
TWVkaWFFbmdpbmVSZWdpc3RyYXIgcmVnaXN0cmFyKQoreworICAgIGlmIChpc0F2YWlsYWJsZSgp
KQorICAgICAgICByZWdpc3RyYXIoY3JlYXRlLCBnZXRTdXBwb3J0ZWRUeXBlcywgc3VwcG9ydHNU
eXBlKTsKK30KKworTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6TWVk
aWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dChNZWRpYVBsYXllciogcGxheWVy
KQorICAgIDogbV9wbGF5ZXIocGxheWVyKQorICAgICwgbV9zZWVrVG8oLTEpCisgICAgLCBtX3Nl
ZWtUaW1lcih0aGlzLCAmTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6
c2Vla1RpbWVyRmlyZWQpCisgICAgLCBtX3Zpc3VhbENvbnRleHRUaW1lcih0aGlzLCAmTWVkaWFQ
bGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6dmlzdWFsQ29udGV4dFRpbWVyRmly
ZWQpCisgICAgLCBtX25ldHdvcmtTdGF0ZShNZWRpYVBsYXllcjo6RW1wdHkpCisgICAgLCBtX3Jl
YWR5U3RhdGUoTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nKQorICAgICwgbV9lbmFibGVkVHJhY2tD
b3VudCgwKQorICAgICwgbV90b3RhbFRyYWNrQ291bnQoMCkKKyAgICAsIG1faGFzVW5zdXBwb3J0
ZWRUcmFja3MoZmFsc2UpCisgICAgLCBtX3N0YXJ0ZWRQbGF5aW5nKGZhbHNlKQorICAgICwgbV9p
c1N0cmVhbWluZyhmYWxzZSkKKyAgICAsIG1fdmlzaWJsZShmYWxzZSkKKyAgICAsIG1fbmV3RnJh
bWVBdmFpbGFibGUoZmFsc2UpCisgICAgLCBtX21vdmllQ2xpZW50KG5ldyBNZWRpYVBsYXllclBy
aXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpNb3ZpZUNsaWVudCh0aGlzKSkKKyAgICAsIG1f
bGF5ZXJDbGllbnQobmV3IE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6
OkxheWVyQ2xpZW50KHRoaXMpKQorICAgICwgbV92aXN1YWxDb250ZXh0Q2xpZW50KG5ldyBNZWRp
YVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpWaXN1YWxDb250ZXh0Q2xpZW50
KHRoaXMpKQoreworfQorCitNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0
Ojp+TWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dCgpCit7CisgICAgdGVh
ckRvd25WaWRlb1JlbmRlcmluZygpOworICAgIGNhbmNlbENhbGxPbk1haW5UaHJlYWQoJlZpc3Vh
bENvbnRleHRDbGllbnQ6OnJldHJpZXZlQ3VycmVudEltYWdlUHJvYywgdGhpcyk7Cit9CisKK2Jv
b2wgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6c3VwcG9ydHNGdWxs
c2NyZWVuKCkgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworUGxhdGZvcm1NZWRpYSBN
ZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpwbGF0Zm9ybU1lZGlhKCkg
Y29uc3QKK3sKKyAgICBQbGF0Zm9ybU1lZGlhIHA7CisgICAgcC5xdE1vdmllID0gcmVpbnRlcnBy
ZXRfY2FzdDxRVE1vdmllKj4obV9tb3ZpZS5nZXQoKSk7CisgICAgcmV0dXJuIHA7Cit9CisKKyNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCitQbGF0Zm9ybUxheWVyKiBNZWRpYVBsYXll
clByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9xdFZpZGVvTGF5ZXIgPyBtX3F0VmlkZW9MYXllci0+cGxhdGZvcm1MYXll
cigpIDogMDsKK30KKyNlbmRpZgorCitTdHJpbmcgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1l
VmlzdWFsQ29udGV4dDo6cmZjMjYxNkRhdGVTdHJpbmdGcm9tVGltZShDRkFic29sdXRlVGltZSB0
aW1lKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBkYXlTdHJpbmdzW10gPSB7ICJN
b24iLCAiVHVlIiwgIldlZCIsICJUaHUiLCAiRnJpIiwgIlNhdCIsICJTdW4iIH07CisgICAgc3Rh
dGljIGNvbnN0IGNoYXIqIGNvbnN0IG1vbnRoU3RyaW5nc1tdID0geyAiSmFuIiwgIkZlYiIsICJN
YXIiLCAiQXByIiwgIk1heSIsICJKdW4iLCAiSnVsIiwgIkF1ZyIsICJTZXAiLCAiT2N0IiwgIk5v
diIsICJEZWMiIH07CisgICAgc3RhdGljIGNvbnN0IENGU3RyaW5nUmVmIGRhdGVGb3JtYXRTdHJp
bmcgPSBDRlNUUigiJXMsICUwMmQgJXMgJTA0ZCAlMDJkOiUwMmQ6JTAyZCBHTVQiKTsKKyAgICBz
dGF0aWMgQ0ZUaW1lWm9uZVJlZiBnbXRUaW1lWm9uZTsKKyAgICBpZiAoIWdtdFRpbWVab25lKQor
ICAgICAgICBnbXRUaW1lWm9uZSA9IENGVGltZVpvbmVDb3B5RGVmYXVsdCgpOworCisgICAgQ0ZH
cmVnb3JpYW5EYXRlIGRhdGVWYWx1ZSA9IENGQWJzb2x1dGVUaW1lR2V0R3JlZ29yaWFuRGF0ZSh0
aW1lLCBnbXRUaW1lWm9uZSk7IAorICAgIGlmICghQ0ZHcmVnb3JpYW5EYXRlSXNWYWxpZChkYXRl
VmFsdWUsIGtDRkdyZWdvcmlhbkFsbFVuaXRzKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOwor
CisgICAgdGltZSA9IENGR3JlZ29yaWFuRGF0ZUdldEFic29sdXRlVGltZShkYXRlVmFsdWUsIGdt
dFRpbWVab25lKTsKKyAgICBTSW50MzIgZGF5ID0gQ0ZBYnNvbHV0ZVRpbWVHZXREYXlPZldlZWso
dGltZSwgMCk7CisKKyAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGRhdGVDRlN0cmluZyhBZG9w
dENGLCBDRlN0cmluZ0NyZWF0ZVdpdGhGb3JtYXQoMCwgMCwgZGF0ZUZvcm1hdFN0cmluZywgZGF5
U3RyaW5nc1tkYXkgLSAxXSwgZGF0ZVZhbHVlLmRheSwgCisgICAgICAgIG1vbnRoU3RyaW5nc1tk
YXRlVmFsdWUubW9udGggLSAxXSwgZGF0ZVZhbHVlLnllYXIsIGRhdGVWYWx1ZS5ob3VyLCBkYXRl
VmFsdWUubWludXRlLCAoaW50KWRhdGVWYWx1ZS5zZWNvbmQpKTsKKyAgICByZXR1cm4gZGF0ZUNG
U3RyaW5nLmdldCgpOworfQorCitzdGF0aWMgdm9pZCBhZGRDb29raWVQYXJhbShTdHJpbmdCdWls
ZGVyJiBjb29raWVCdWlsZGVyLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFs
dWUpCit7CisgICAgaWYgKG5hbWUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyBJZiB0aGlzIGlzbid0IHRoZSBmaXJzdCBwYXJhbWV0ZXIgYWRkZWQsIHRlcm1pbmF0ZSB0aGUg
cHJldmlvdXMgb25lLgorICAgIGlmIChjb29raWVCdWlsZGVyLmxlbmd0aCgpKQorICAgICAgICBj
b29raWVCdWlsZGVyLmFwcGVuZCgiOyAiKTsKKworICAgIC8vIEFkZCBwYXJhbWV0ZXIgbmFtZSwg
YW5kIHZhbHVlIGlmIHRoZXJlIGlzIG9uZS4KKyAgICBjb29raWVCdWlsZGVyLmFwcGVuZChuYW1l
KTsKKyAgICBpZiAoIXZhbHVlLmlzRW1wdHkoKSkgeworICAgICAgICBjb29raWVCdWlsZGVyLmFw
cGVuZCgiPSIpOworICAgICAgICBjb29raWVCdWlsZGVyLmFwcGVuZCh2YWx1ZSk7CisgICAgfQor
fQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OnNldFVw
Q29va2llc0ZvclF1aWNrVGltZShjb25zdCBTdHJpbmcmIHVybCkKK3sKKyAgICAvLyBXZWJDb3Jl
IGxvYWRlZCB0aGUgcGFnZSB3aXRoIHRoZSBtb3ZpZSBVUkwgd2l0aCBDRk5ldHdvcmsgYnV0IFF1
aWNrVGltZSB3aWxsIAorICAgIC8vIHVzZSBXaW5JTmV0IHRvIGRvd25sb2FkIHRoZSBtb3ZpZSwg
c28gd2UgbmVlZCB0byBjb3B5IGFueSBjb29raWVzIG5lZWRlZCB0bworICAgIC8vIGRvd25sb2Fk
IHRoZSBtb3ZpZSBpbnRvIFdpbkluZXQgYmVmb3JlIGFza2luZyBRdWlja1RpbWUgdG8gb3BlbiBp
dC4KKyAgICBGcmFtZSogZnJhbWUgPSBtX3BsYXllci0+ZnJhbWVWaWV3KCkgPyBtX3BsYXllci0+
ZnJhbWVWaWV3KCktPmZyYW1lKCkgOiAwOworICAgIGlmICghZnJhbWUgfHwgIWZyYW1lLT5wYWdl
KCkgfHwgIWZyYW1lLT5wYWdlKCktPmNvb2tpZUVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgS1VSTCBtb3ZpZVVSTCA9IEtVUkwoS1VSTCgpLCB1cmwpOworICAgIFZlY3RvcjxDb29r
aWU+IGRvY3VtZW50Q29va2llczsKKyAgICBpZiAoIWdldFJhd0Nvb2tpZXMoZnJhbWUtPmRvY3Vt
ZW50KCksIG1vdmllVVJMLCBkb2N1bWVudENvb2tpZXMpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBmb3IgKHNpemVfdCBuZHggPSAwOyBuZHggPCBkb2N1bWVudENvb2tpZXMuc2l6ZSgpOyBuZHgr
KykgeworICAgICAgICBjb25zdCBDb29raWUmIGNvb2tpZSA9IGRvY3VtZW50Q29va2llc1tuZHhd
OworCisgICAgICAgIGlmIChjb29raWUubmFtZS5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICAvLyBCdWlsZCB1cCB0aGUgY29va2llIHN0cmluZyB3aXRoIGFzIG11
Y2ggaW5mb3JtYXRpb24gYXMgd2UgY2FuIGdldCBzbyBXaW5JTmV0CisgICAgICAgIC8vIGtub3dz
IHdoYXQgdG8gZG8gd2l0aCBpdC4KKyAgICAgICAgU3RyaW5nQnVpbGRlciBjb29raWVCdWlsZGVy
OworICAgICAgICBhZGRDb29raWVQYXJhbShjb29raWVCdWlsZGVyLCBjb29raWUubmFtZSwgY29v
a2llLnZhbHVlKTsKKyAgICAgICAgYWRkQ29va2llUGFyYW0oY29va2llQnVpbGRlciwgInBhdGgi
LCBjb29raWUucGF0aCk7CisgICAgICAgIGlmIChjb29raWUuZXhwaXJlcykgCisgICAgICAgICAg
ICBhZGRDb29raWVQYXJhbShjb29raWVCdWlsZGVyLCAiZXhwaXJlcyIsIHJmYzI2MTZEYXRlU3Ry
aW5nRnJvbVRpbWUoY29va2llLmV4cGlyZXMpKTsKKyAgICAgICAgaWYgKGNvb2tpZS5odHRwT25s
eSkgCisgICAgICAgICAgICBhZGRDb29raWVQYXJhbShjb29raWVCdWlsZGVyLCAiaHR0cE9ubHki
LCBTdHJpbmcoKSk7CisgICAgICAgIGNvb2tpZUJ1aWxkZXIuYXBwZW5kKCI7Iik7CisKKyAgICAg
ICAgU3RyaW5nIGNvb2tpZVVSTDsKKyAgICAgICAgaWYgKCFjb29raWUuZG9tYWluLmlzRW1wdHko
KSkgeworICAgICAgICAgICAgU3RyaW5nQnVpbGRlciB1cmxCdWlsZGVyOworCisgICAgICAgICAg
ICB1cmxCdWlsZGVyLmFwcGVuZChtb3ZpZVVSTC5wcm90b2NvbCgpKTsKKyAgICAgICAgICAgIHVy
bEJ1aWxkZXIuYXBwZW5kKCI6Ly8iKTsKKyAgICAgICAgICAgIGlmIChjb29raWUuZG9tYWluWzBd
ID09ICcuJykKKyAgICAgICAgICAgICAgICB1cmxCdWlsZGVyLmFwcGVuZChjb29raWUuZG9tYWlu
LnN1YnN0cmluZygxKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgdXJsQnVp
bGRlci5hcHBlbmQoY29va2llLmRvbWFpbik7CisgICAgICAgICAgICBpZiAoY29va2llLnBhdGgu
bGVuZ3RoKCkgPiAxKQorICAgICAgICAgICAgICAgIHVybEJ1aWxkZXIuYXBwZW5kKGNvb2tpZS5w
YXRoKTsKKworICAgICAgICAgICAgY29va2llVVJMID0gdXJsQnVpbGRlci50b1N0cmluZygpOwor
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGNvb2tpZVVSTCA9IG1vdmllVVJMOworCisgICAg
ICAgIEludGVybmV0U2V0Q29va2llRXhXKGNvb2tpZVVSTC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJt
aW5hdGlvbigpLCAwLCBjb29raWVCdWlsZGVyLnRvU3RyaW5nKCkuY2hhcmFjdGVyc1dpdGhOdWxs
VGVybWluYXRpb24oKSwgMCwgMCk7CisgICAgfQorfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OmxvYWQoY29uc3QgU3RyaW5nJiB1cmwpCit7CisgICAg
aWYgKCFRVE1vdmllOjppbml0aWFsaXplUXVpY2tUaW1lKCkpIHsKKyAgICAgICAgLy8gRklYTUU6
IGlzIHRoaXMgdGhlIHJpZ2h0IGVycm9yIHRvIHJldHVybj8KKyAgICAgICAgbV9uZXR3b3JrU3Rh
dGUgPSBNZWRpYVBsYXllcjo6RGVjb2RlRXJyb3I7IAorICAgICAgICBtX3BsYXllci0+bmV0d29y
a1N0YXRlQ2hhbmdlZCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gSW5pdGlh
bGl6ZSB0aGUgdGFzayB0aW1lci4KKyAgICBNZWRpYVBsYXllclByaXZhdGVUYXNrVGltZXI6Omlu
aXRpYWxpemUoKTsKKworICAgIGlmIChtX25ldHdvcmtTdGF0ZSAhPSBNZWRpYVBsYXllcjo6TG9h
ZGluZykgeworICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpMb2FkaW5nOwor
ICAgICAgICBtX3BsYXllci0+bmV0d29ya1N0YXRlQ2hhbmdlZCgpOworICAgIH0KKyAgICBpZiAo
bV9yZWFkeVN0YXRlICE9IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZykgeworICAgICAgICBtX3Jl
YWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmc7CisgICAgICAgIG1fcGxheWVyLT5y
ZWFkeVN0YXRlQ2hhbmdlZCgpOworICAgIH0KKyAgICBjYW5jZWxTZWVrKCk7CisKKyAgICBzZXRV
cENvb2tpZXNGb3JRdWlja1RpbWUodXJsKTsKKworICAgIG1fbW92aWUgPSBhZG9wdFJlZihuZXcg
UVRNb3ZpZShtX21vdmllQ2xpZW50LmdldCgpKSk7CisgICAgbV9tb3ZpZS0+bG9hZCh1cmwuY2hh
cmFjdGVycygpLCB1cmwubGVuZ3RoKCksIG1fcGxheWVyLT5wcmVzZXJ2ZXNQaXRjaCgpKTsKKyAg
ICBtX21vdmllLT5zZXRWb2x1bWUobV9wbGF5ZXItPnZvbHVtZSgpKTsKKworICAgIENGRGljdGlv
bmFyeVJlZiBvcHRpb25zID0gUVRNb3ZpZVZpc3VhbENvbnRleHQ6OmdldENHSW1hZ2VPcHRpb25z
KCk7CisgICAgbV92aXN1YWxDb250ZXh0ID0gYWRvcHRSZWYobmV3IFFUTW92aWVWaXN1YWxDb250
ZXh0KG1fdmlzdWFsQ29udGV4dENsaWVudC5nZXQoKSwgb3B0aW9ucykpOworfQorCit2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OnBsYXkoKQoreworICAgIGlm
ICghbV9tb3ZpZSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fc3RhcnRlZFBsYXlpbmcgPSB0cnVl
OworCisgICAgbV9tb3ZpZS0+cGxheSgpOworICAgIG1fdmlzdWFsQ29udGV4dFRpbWVyLnN0YXJ0
UmVwZWF0aW5nKDEuMCAvIDMwKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVRdWlja1Rp
bWVWaXN1YWxDb250ZXh0OjpwYXVzZSgpCit7CisgICAgaWYgKCFtX21vdmllKQorICAgICAgICBy
ZXR1cm47CisgICAgbV9zdGFydGVkUGxheWluZyA9IGZhbHNlOworCisgICAgbV9tb3ZpZS0+cGF1
c2UoKTsKKyAgICBtX3Zpc3VhbENvbnRleHRUaW1lci5zdG9wKCk7Cit9CisKK2Zsb2F0IE1lZGlh
UGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OmR1cmF0aW9uKCkgY29uc3QKK3sK
KyAgICBpZiAoIW1fbW92aWUpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBtX21vdmll
LT5kdXJhdGlvbigpOworfQorCitmbG9hdCBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1
YWxDb250ZXh0OjpjdXJyZW50VGltZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX21vdmllKQorICAg
ICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbV9tb3ZpZS0+Y3VycmVudFRpbWUoKTsKK30KKwor
dm9pZCBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpzZWVrKGZsb2F0
IHRpbWUpCit7CisgICAgY2FuY2VsU2VlaygpOworICAgIAorICAgIGlmICghbV9tb3ZpZSkKKyAg
ICAgICAgcmV0dXJuOworICAgIAorICAgIGlmICh0aW1lID4gZHVyYXRpb24oKSkKKyAgICAgICAg
dGltZSA9IGR1cmF0aW9uKCk7CisgICAgCisgICAgbV9zZWVrVG8gPSB0aW1lOworICAgIGlmICht
YXhUaW1lTG9hZGVkKCkgPj0gbV9zZWVrVG8pCisgICAgICAgIGRvU2VlaygpOworICAgIGVsc2Ug
CisgICAgICAgIG1fc2Vla1RpbWVyLnN0YXJ0KDAsIDAuNWYpOworfQorICAgIAordm9pZCBNZWRp
YVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0Ojpkb1NlZWsoKSAKK3sKKyAgICBm
bG9hdCBvbGRSYXRlID0gbV9tb3ZpZS0+cmF0ZSgpOworICAgIGlmIChvbGRSYXRlKQorICAgICAg
ICBtX21vdmllLT5zZXRSYXRlKDApOworICAgIG1fbW92aWUtPnNldEN1cnJlbnRUaW1lKG1fc2Vl
a1RvKTsKKyAgICBmbG9hdCB0aW1lQWZ0ZXJTZWVrID0gY3VycmVudFRpbWUoKTsKKyAgICAvLyBy
ZXN0b3JlIHBsYXliYWNrIG9ubHkgaWYgbm90IGF0IGVuZCwgb3RoZXdpc2UgUVRNb3ZpZSB3aWxs
IGxvb3AKKyAgICBpZiAob2xkUmF0ZSAmJiB0aW1lQWZ0ZXJTZWVrIDwgZHVyYXRpb24oKSkKKyAg
ICAgICAgbV9tb3ZpZS0+c2V0UmF0ZShvbGRSYXRlKTsKKyAgICBjYW5jZWxTZWVrKCk7Cit9CisK
K3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6Y2FuY2VsU2Vl
aygpCit7CisgICAgbV9zZWVrVG8gPSAtMTsKKyAgICBtX3NlZWtUaW1lci5zdG9wKCk7Cit9CisK
K3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6c2Vla1RpbWVy
RmlyZWQoVGltZXI8TWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dD4qKQor
eyAgICAgICAgCisgICAgaWYgKCFtX21vdmllIHx8ICFzZWVraW5nKCkgfHwgY3VycmVudFRpbWUo
KSA9PSBtX3NlZWtUbykgeworICAgICAgICBjYW5jZWxTZWVrKCk7CisgICAgICAgIHVwZGF0ZVN0
YXRlcygpOworICAgICAgICBtX3BsYXllci0+dGltZUNoYW5nZWQoKTsgCisgICAgICAgIHJldHVy
bjsKKyAgICB9IAorICAgIAorICAgIGlmIChtYXhUaW1lTG9hZGVkKCkgPj0gbV9zZWVrVG8pCisg
ICAgICAgIGRvU2VlaygpOworICAgIGVsc2UgeworICAgICAgICBNZWRpYVBsYXllcjo6TmV0d29y
a1N0YXRlIHN0YXRlID0gbmV0d29ya1N0YXRlKCk7CisgICAgICAgIGlmIChzdGF0ZSA9PSBNZWRp
YVBsYXllcjo6RW1wdHkgfHwgc3RhdGUgPT0gTWVkaWFQbGF5ZXI6OkxvYWRlZCkgeworICAgICAg
ICAgICAgY2FuY2VsU2VlaygpOworICAgICAgICAgICAgdXBkYXRlU3RhdGVzKCk7CisgICAgICAg
ICAgICBtX3BsYXllci0+dGltZUNoYW5nZWQoKTsKKyAgICAgICAgfQorICAgIH0KK30KKworYm9v
bCBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpwYXVzZWQoKSBjb25z
dAoreworICAgIGlmICghbV9tb3ZpZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJu
ICghbV9tb3ZpZS0+cmF0ZSgpKTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVRdWlja1Rp
bWVWaXN1YWxDb250ZXh0OjpzZWVraW5nKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fbW92aWUpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gbV9zZWVrVG8gPj0gMDsKK30KKworSW50
U2l6ZSBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpuYXR1cmFsU2l6
ZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX21vdmllKQorICAgICAgICByZXR1cm4gSW50U2l6ZSgp
OworICAgIGludCB3aWR0aDsKKyAgICBpbnQgaGVpZ2h0OworICAgIG1fbW92aWUtPmdldE5hdHVy
YWxTaXplKHdpZHRoLCBoZWlnaHQpOworICAgIHJldHVybiBJbnRTaXplKHdpZHRoLCBoZWlnaHQp
OworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6Omhh
c1ZpZGVvKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fbW92aWUpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICByZXR1cm4gbV9tb3ZpZS0+aGFzVmlkZW8oKTsKK30KKworYm9vbCBNZWRpYVBsYXll
clByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpoYXNBdWRpbygpIGNvbnN0Cit7CisgICAg
aWYgKCFtX21vdmllKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG1fbW92aWUt
Pmhhc0F1ZGlvKCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFs
Q29udGV4dDo6c2V0Vm9sdW1lKGZsb2F0IHZvbHVtZSkKK3sKKyAgICBpZiAoIW1fbW92aWUpCisg
ICAgICAgIHJldHVybjsKKyAgICBtX21vdmllLT5zZXRWb2x1bWUodm9sdW1lKTsKK30KKwordm9p
ZCBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpzZXRSYXRlKGZsb2F0
IHJhdGUpCit7CisgICAgaWYgKCFtX21vdmllKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBE
byBub3QgY2FsbCBzZXRSYXRlKC4uLikgdW5sZXNzIHdlIGhhdmUgc3RhcnRlZCBwbGF5aW5nOyBv
dGhlcndpc2UKKyAgICAvLyBRdWlja1RpbWUncyBWaXN1YWxDb250ZXh0IGNhbiBnZXQgd2VkZ2Vk
IHdhaXRpbmcgZm9yIGEgcmF0ZSBjaGFuZ2UKKyAgICAvLyBjYWxsIHdoaWNoIHdpbGwgbmV2ZXIg
Y29tZS4KKyAgICBpZiAobV9zdGFydGVkUGxheWluZykKKyAgICAgICAgbV9tb3ZpZS0+c2V0UmF0
ZShyYXRlKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250
ZXh0OjpzZXRQcmVzZXJ2ZXNQaXRjaChib29sIHByZXNlcnZlc1BpdGNoKQoreworICAgIGlmICgh
bV9tb3ZpZSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fbW92aWUtPnNldFByZXNlcnZlc1BpdGNo
KHByZXNlcnZlc1BpdGNoKTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVW
aXN1YWxDb250ZXh0OjpoYXNDbG9zZWRDYXB0aW9ucygpIGNvbnN0Cit7CisgICAgaWYgKCFtX21v
dmllKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG1fbW92aWUtPmhhc0Nsb3Nl
ZENhcHRpb25zKCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFs
Q29udGV4dDo6c2V0Q2xvc2VkQ2FwdGlvbnNWaXNpYmxlKGJvb2wgdmlzaWJsZSkKK3sKKyAgICBp
ZiAoIW1fbW92aWUpCisgICAgICAgIHJldHVybjsKKyAgICBtX21vdmllLT5zZXRDbG9zZWRDYXB0
aW9uc1Zpc2libGUodmlzaWJsZSk7Cit9CisKK1Bhc3NSZWZQdHI8VGltZVJhbmdlcz4gTWVkaWFQ
bGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6YnVmZmVyZWQoKSBjb25zdAorewor
ICAgIFJlZlB0cjxUaW1lUmFuZ2VzPiB0aW1lUmFuZ2VzID0gVGltZVJhbmdlczo6Y3JlYXRlKCk7
CisgICAgZmxvYXQgbG9hZGVkID0gbWF4VGltZUxvYWRlZCgpOworICAgIC8vIHJ0c3Agc3RyZWFt
cyBhcmUgbm90IGJ1ZmZlcmVkCisgICAgaWYgKCFtX2lzU3RyZWFtaW5nICYmIGxvYWRlZCA+IDAp
CisgICAgICAgIHRpbWVSYW5nZXMtPmFkZCgwLCBsb2FkZWQpOworICAgIHJldHVybiB0aW1lUmFu
Z2VzLnJlbGVhc2UoKTsKK30KKworZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlz
dWFsQ29udGV4dDo6bWF4VGltZVNlZWthYmxlKCkgY29uc3QKK3sKKyAgICAvLyBpbmZpbml0ZSBk
dXJhdGlvbiBtZWFucyBsaXZlIHN0cmVhbQorICAgIHJldHVybiAhaXNmaW5pdGUoZHVyYXRpb24o
KSkgPyAwIDogbWF4VGltZUxvYWRlZCgpOworfQorCitmbG9hdCBNZWRpYVBsYXllclByaXZhdGVR
dWlja1RpbWVWaXN1YWxDb250ZXh0OjptYXhUaW1lTG9hZGVkKCkgY29uc3QKK3sKKyAgICBpZiAo
IW1fbW92aWUpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBtX21vdmllLT5tYXhUaW1l
TG9hZGVkKCk7IAorfQorCit1bnNpZ25lZCBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1
YWxDb250ZXh0OjpieXRlc0xvYWRlZCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX21vdmllKQorICAg
ICAgICByZXR1cm4gMDsKKyAgICBmbG9hdCBkdXIgPSBkdXJhdGlvbigpOworICAgIGZsb2F0IG1h
eFRpbWUgPSBtYXhUaW1lTG9hZGVkKCk7CisgICAgaWYgKCFkdXIpCisgICAgICAgIHJldHVybiAw
OworICAgIHJldHVybiB0b3RhbEJ5dGVzKCkgKiBtYXhUaW1lIC8gZHVyOworfQorCit1bnNpZ25l
ZCBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0Ojp0b3RhbEJ5dGVzKCkg
Y29uc3QKK3sKKyAgICBpZiAoIW1fbW92aWUpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVy
biBtX21vdmllLT5kYXRhU2l6ZSgpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNr
VGltZVZpc3VhbENvbnRleHQ6OmNhbmNlbExvYWQoKQoreworICAgIGlmIChtX25ldHdvcmtTdGF0
ZSA8IE1lZGlhUGxheWVyOjpMb2FkaW5nIHx8IG1fbmV0d29ya1N0YXRlID09IE1lZGlhUGxheWVy
OjpMb2FkZWQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICB0ZWFyRG93blZpZGVvUmVuZGVy
aW5nKCk7CisKKyAgICAvLyBDYW5jZWwgdGhlIGxvYWQgYnkgZGVzdHJveWluZyB0aGUgbW92aWUu
CisgICAgbV9tb3ZpZS5jbGVhcigpOworCisgICAgdXBkYXRlU3RhdGVzKCk7Cit9CisKK3ZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6dXBkYXRlU3RhdGVzKCkK
K3sKKyAgICBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIG9sZE5ldHdvcmtTdGF0ZSA9IG1fbmV0
d29ya1N0YXRlOworICAgIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIG9sZFJlYWR5U3RhdGUgPSBt
X3JlYWR5U3RhdGU7CisgIAorICAgIGxvbmcgbG9hZFN0YXRlID0gbV9tb3ZpZSA/IG1fbW92aWUt
PmxvYWRTdGF0ZSgpIDogUVRNb3ZpZUxvYWRTdGF0ZUVycm9yOworCisgICAgaWYgKGxvYWRTdGF0
ZSA+PSBRVE1vdmllTG9hZFN0YXRlTG9hZGVkICYmIG1fcmVhZHlTdGF0ZSA8IE1lZGlhUGxheWVy
OjpIYXZlTWV0YWRhdGEpIHsKKyAgICAgICAgbV9tb3ZpZS0+ZGlzYWJsZVVuc3VwcG9ydGVkVHJh
Y2tzKG1fZW5hYmxlZFRyYWNrQ291bnQsIG1fdG90YWxUcmFja0NvdW50KTsKKyAgICAgICAgaWYg
KG1fcGxheWVyLT5pbk1lZGlhRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgaWYgKCFtX2VuYWJs
ZWRUcmFja0NvdW50IHx8IG1fZW5hYmxlZFRyYWNrQ291bnQgIT0gbV90b3RhbFRyYWNrQ291bnQp
IHsKKyAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgdHlwZSBvZiBtZWRpYSB0aGF0IHdlIGRv
IG5vdCBoYW5kbGUgZGlyZWN0bHkgd2l0aCBhIDx2aWRlbz4gCisgICAgICAgICAgICAgICAgLy8g
ZWxlbWVudCwgZWcuIFF1aWNrVGltZSBWUiwgYSBtb3ZpZSB3aXRoIGEgc3ByaXRlIHRyYWNrLCBl
dGMuIFRlbGwgdGhlIAorICAgICAgICAgICAgICAgIC8vIE1lZGlhUGxheWVyQ2xpZW50IHRoYXQg
d2Ugd29uJ3Qgc3VwcG9ydCBpdC4KKyAgICAgICAgICAgICAgICBzYXdVbnN1cHBvcnRlZFRyYWNr
cygpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBl
bHNlIGlmICghbV9lbmFibGVkVHJhY2tDb3VudCkKKyAgICAgICAgICAgIGxvYWRTdGF0ZSA9IFFU
TW92aWVMb2FkU3RhdGVFcnJvcjsKKyAgICB9CisKKyAgICAvLyAiTG9hZGVkIiBpcyByZXNlcnZl
ZCBmb3IgZnVsbHkgYnVmZmVyZWQgbW92aWVzLCBuZXZlciB0aGUgY2FzZSB3aGVuIHN0cmVhbWlu
ZworICAgIGlmIChsb2FkU3RhdGUgPj0gUVRNb3ZpZUxvYWRTdGF0ZUNvbXBsZXRlICYmICFtX2lz
U3RyZWFtaW5nKSB7CisgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkxvYWRl
ZDsKKyAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVFbm91Z2hEYXRhOwor
ICAgIH0gZWxzZSBpZiAobG9hZFN0YXRlID49IFFUTW92aWVMb2FkU3RhdGVQbGF5dGhyb3VnaE9L
KSB7CisgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlRW5vdWdoRGF0YTsK
KyAgICB9IGVsc2UgaWYgKGxvYWRTdGF0ZSA+PSBRVE1vdmllTG9hZFN0YXRlUGxheWFibGUpIHsK
KyAgICAgICAgLy8gRklYTUU6IFRoaXMgbWlnaHQgbm90IHdvcmsgY29ycmVjdGx5IGluIHN0cmVh
bWluZyBjYXNlLCA8cmRhcjovL3Byb2JsZW0vNTY5Mzk2Nz4KKyAgICAgICAgbV9yZWFkeVN0YXRl
ID0gY3VycmVudFRpbWUoKSA8IG1heFRpbWVMb2FkZWQoKSA/IE1lZGlhUGxheWVyOjpIYXZlRnV0
dXJlRGF0YSA6IE1lZGlhUGxheWVyOjpIYXZlQ3VycmVudERhdGE7CisgICAgfSBlbHNlIGlmIChs
b2FkU3RhdGUgPj0gUVRNb3ZpZUxvYWRTdGF0ZUxvYWRlZCkgeworICAgICAgICBtX3JlYWR5U3Rh
dGUgPSBNZWRpYVBsYXllcjo6SGF2ZU1ldGFkYXRhOworICAgIH0gZWxzZSBpZiAobG9hZFN0YXRl
ID4gUVRNb3ZpZUxvYWRTdGF0ZUVycm9yKSB7CisgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVk
aWFQbGF5ZXI6OkxvYWRpbmc7CisgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpI
YXZlTm90aGluZzsgICAgICAgIAorICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChtX3BsYXllci0+
aW5NZWRpYURvY3VtZW50KCkpIHsKKyAgICAgICAgICAgIC8vIFNvbWV0aGluZyB3ZW50IHdyb25n
IGluIHRoZSBsb2FkaW5nIG9mIG1lZGlhIHdpdGhpbiBhIHN0YW5kYWxvbmUgZmlsZS4gCisgICAg
ICAgICAgICAvLyBUaGlzIGNhbiBvY2N1ciB3aXRoIGNoYWluZWQgcmVmIG1vdmllcyB0aGF0IGV2
ZW50dWFsbHkgcmVzb2x2ZSB0byBhCisgICAgICAgICAgICAvLyBmaWxlIHdlIGRvbid0IHN1cHBv
cnQuCisgICAgICAgICAgICBzYXdVbnN1cHBvcnRlZFRyYWNrcygpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgZmxvYXQgbG9hZGVkID0gbWF4VGltZUxvYWRlZCgp
OworICAgICAgICBpZiAoIWxvYWRlZCkKKyAgICAgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlh
UGxheWVyOjpIYXZlTm90aGluZzsKKworICAgICAgICBpZiAoIW1fZW5hYmxlZFRyYWNrQ291bnQp
CisgICAgICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpGb3JtYXRFcnJvcjsK
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGRpZmZlcmVu
dGlhdGUgYmV0d2VlbiBsb2FkL25ldHdvcmsgZXJyb3JzIGFuZCBkZWNvZGUgZXJyb3JzIDxyZGFy
Oi8vcHJvYmxlbS81NjA1NjkyPgorICAgICAgICAgICAgaWYgKGxvYWRlZCA+IDApCisgICAgICAg
ICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6RGVjb2RlRXJyb3I7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6
OkhhdmVOb3RoaW5nOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGlzUmVhZHlGb3JSZW5k
ZXJpbmcoKSAmJiAhaGFzU2V0VXBWaWRlb1JlbmRlcmluZygpKQorICAgICAgICBzZXRVcFZpZGVv
UmVuZGVyaW5nKCk7CisKKyAgICBpZiAoc2Vla2luZygpKQorICAgICAgICBtX3JlYWR5U3RhdGUg
PSBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmc7CisgICAgCisgICAgaWYgKG1fbmV0d29ya1N0YXRl
ICE9IG9sZE5ldHdvcmtTdGF0ZSkKKyAgICAgICAgbV9wbGF5ZXItPm5ldHdvcmtTdGF0ZUNoYW5n
ZWQoKTsKKyAgICBpZiAobV9yZWFkeVN0YXRlICE9IG9sZFJlYWR5U3RhdGUpCisgICAgICAgIG1f
cGxheWVyLT5yZWFkeVN0YXRlQ2hhbmdlZCgpOworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0
ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OmlzUmVhZHlGb3JSZW5kZXJpbmcoKSBjb25zdAorewor
ICAgIHJldHVybiBtX3JlYWR5U3RhdGUgPj0gTWVkaWFQbGF5ZXI6OkhhdmVNZXRhZGF0YSAmJiBt
X3BsYXllci0+dmlzaWJsZSgpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGlt
ZVZpc3VhbENvbnRleHQ6OnNhd1Vuc3VwcG9ydGVkVHJhY2tzKCkKK3sKKyAgICBtX21vdmllLT5z
ZXREaXNhYmxlZCh0cnVlKTsKKyAgICBtX2hhc1Vuc3VwcG9ydGVkVHJhY2tzID0gdHJ1ZTsKKyAg
ICBtX3BsYXllci0+bWVkaWFQbGF5ZXJDbGllbnQoKS0+bWVkaWFQbGF5ZXJTYXdVbnN1cHBvcnRl
ZFRyYWNrcyhtX3BsYXllcik7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1l
VmlzdWFsQ29udGV4dDo6ZGlkRW5kKCkKK3sKKyAgICBpZiAobV9oYXNVbnN1cHBvcnRlZFRyYWNr
cykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zdGFydGVkUGxheWluZyA9IGZhbHNlOworCisg
ICAgdXBkYXRlU3RhdGVzKCk7CisgICAgbV9wbGF5ZXItPnRpbWVDaGFuZ2VkKCk7Cit9CisKK3Zv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6c2V0U2l6ZShjb25z
dCBJbnRTaXplJiBzaXplKSAKK3sgCisgICAgaWYgKG1faGFzVW5zdXBwb3J0ZWRUcmFja3MgfHwg
IW1fbW92aWUgfHwgbV9zaXplID09IHNpemUpCisgICAgICAgIHJldHVybjsKKyAgICBtX3NpemUg
PSBzaXplOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRl
eHQ6OnNldFZpc2libGUoYm9vbCB2aXNpYmxlKQoreworICAgIGlmIChtX2hhc1Vuc3VwcG9ydGVk
VHJhY2tzIHx8ICFtX21vdmllIHx8IG1fdmlzaWJsZSA9PSB2aXNpYmxlKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX3Zpc2libGUgPSB2aXNpYmxlOworICAgIGlmIChtX3Zpc2libGUpIHsKKyAg
ICAgICAgaWYgKGlzUmVhZHlGb3JSZW5kZXJpbmcoKSkKKyAgICAgICAgICAgIHNldFVwVmlkZW9S
ZW5kZXJpbmcoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgdGVhckRvd25WaWRlb1JlbmRlcmluZygp
OworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OnBh
aW50KEdyYXBoaWNzQ29udGV4dCogcCwgY29uc3QgSW50UmVjdCYgcikKK3sKKyNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgaWYgKG1fcXRWaWRlb0xheWVyKQorICAgICAgICBy
ZXR1cm47CisjZW5kaWYKKworICAgIHBhaW50Q29tcGxldGVkKCpwLCByKTsKK30KKwordm9pZCBN
ZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpwYWludENvbXBsZXRlZChH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgbV9u
ZXdGcmFtZUF2YWlsYWJsZSA9IGZhbHNlOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF1
aWNrVGltZVZpc3VhbENvbnRleHQ6OlZpc3VhbENvbnRleHRDbGllbnQ6OnJldHJpZXZlQ3VycmVu
dEltYWdlUHJvYyh2b2lkKiByZWZjb24pCit7CisgICAgc3RhdGljX2Nhc3Q8TWVkaWFQbGF5ZXJQ
cml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dCo+KHJlZmNvbiktPnJldHJpZXZlQ3VycmVudElt
YWdlKCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4
dDo6VmlzdWFsQ29udGV4dENsaWVudDo6aW1hZ2VBdmFpbGFibGVGb3JUaW1lKGNvbnN0IFFUQ1ZU
aW1lU3RhbXAqIHRpbWVTdGFtcCkKK3sKKyAgICAvLyBUaGlzIGNhbGwgbWF5IGNvbWUgaW4gb24g
YW5vdGhlciB0aHJlYWQsIHNvIG1hcnNoYWxsIHRvIHRoZSBtYWluIHRocmVhZCBmaXJzdDoKKyAg
ICBjYWxsT25NYWluVGhyZWFkKCZyZXRyaWV2ZUN1cnJlbnRJbWFnZVByb2MsIG1fcGFyZW50KTsK
KworICAgIC8vIGNhbGxPbk1haW5UaHJlYWQgbXVzdCBiZSBwYWlyZWQgd2l0aCBjYW5jZWxDYWxs
T25NYWluVGhyZWFkIGluIHRoZSBkZXN0cnVjdG9yLAorICAgIC8vIGluIGNhc2UgdGhpcyBvYmpl
Y3QgaXMgZGVsZXRlZCBiZWZvcmUgdGhlIG1haW4gdGhyZWFkIHJlcXVlc3QgaXMgaGFuZGxlZC4K
K30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0Ojp2aXN1
YWxDb250ZXh0VGltZXJGaXJlZChUaW1lcjxNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1
YWxDb250ZXh0PiopCit7CisgICAgcmV0cmlldmVDdXJyZW50SW1hZ2UoKTsKK30KKworc3RhdGlj
IENGRGljdGlvbmFyeVJlZiBRVENGRGljdGlvbmFyeUNyZWF0ZVdpdGhEYXRhQ2FsbGJhY2soQ0ZB
bGxvY2F0b3JSZWYgYWxsb2NhdG9yLCBjb25zdCBVSW50OCogYnl0ZXMsIENGSW5kZXggbGVuZ3Ro
KQoreworICAgIENGRGF0YVJlZiBkYXRhID0gQ0ZEYXRhQ3JlYXRlV2l0aEJ5dGVzTm9Db3B5KGFs
bG9jYXRvciwgYnl0ZXMsIGxlbmd0aCwgMCk7CisgICAgaWYgKCFkYXRhKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PENGRGljdGlvbmFyeVJlZj4oQ0ZQ
cm9wZXJ0eUxpc3RDcmVhdGVGcm9tWE1MRGF0YShhbGxvY2F0b3IsIGRhdGEsIGtDRlByb3BlcnR5
TGlzdEltbXV0YWJsZSwgMCkpOworfQorCitzdGF0aWMgQ0dJbWFnZVJlZiBDcmVhdGVDR0ltYWdl
RnJvbVBpeGVsQnVmZmVyKFFUUGl4ZWxCdWZmZXIgYnVmZmVyKQoreworICAgIENHRGF0YVByb3Zp
ZGVyUmVmIHByb3ZpZGVyID0gMDsKKyAgICBDR0NvbG9yU3BhY2VSZWYgY29sb3JTcGFjZSA9IDA7
CisgICAgQ0dJbWFnZVJlZiBpbWFnZSA9IDA7CisKKyAgICBzaXplX3QgYml0c1BlckNvbXBvbmVu
dCA9IDA7CisgICAgc2l6ZV90IGJpdHNQZXJQaXhlbCA9IDA7CisgICAgQ0dJbWFnZUFscGhhSW5m
byBhbHBoYUluZm8gPSBrQ0dJbWFnZUFscGhhTm9uZTsKKyAgICAgICAgCisgICAgaWYgKGJ1ZmZl
ci5waXhlbEZvcm1hdElzMzJCR1JBKCkpIHsKKyAgICAgICAgYml0c1BlckNvbXBvbmVudCA9IDg7
CisgICAgICAgIGJpdHNQZXJQaXhlbCA9IDMyOworICAgICAgICBhbHBoYUluZm8gPSAoQ0dJbWFn
ZUFscGhhSW5mbykoa0NHSW1hZ2VBbHBoYU5vbmVTa2lwRmlyc3QgfCBrQ0dCaXRtYXBCeXRlT3Jk
ZXIzMkxpdHRsZSk7CisgICAgfSBlbHNlIGlmIChidWZmZXIucGl4ZWxGb3JtYXRJczMyQVJHQigp
KSB7CisgICAgICAgIGJpdHNQZXJDb21wb25lbnQgPSA4OworICAgICAgICBiaXRzUGVyUGl4ZWwg
PSAzMjsKKyAgICAgICAgYWxwaGFJbmZvID0gKENHSW1hZ2VBbHBoYUluZm8pKGtDR0ltYWdlQWxw
aGFOb25lU2tpcExhc3QgfCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkJpZyk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgLy8gQWxsIG90aGVyIHBpeGVsIGZvcm1hdHMgYXJlIGN1cnJlbnRseSB1bnN1cHBv
cnRlZDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgQ0dEYXRh
UHJvdmlkZXJEaXJlY3RBY2Nlc3NDYWxsYmFja3MgY2FsbGJhY2tzID0geworICAgICAgICAmUVRQ
aXhlbEJ1ZmZlcjo6ZGF0YVByb3ZpZGVyR2V0Qnl0ZVBvaW50ZXJDYWxsYmFjaywKKyAgICAgICAg
JlFUUGl4ZWxCdWZmZXI6OmRhdGFQcm92aWRlclJlbGVhc2VCeXRlUG9pbnRlckNhbGxiYWNrLAor
ICAgICAgICAmUVRQaXhlbEJ1ZmZlcjo6ZGF0YVByb3ZpZGVyR2V0Qnl0ZXNBdFBvc2l0aW9uQ2Fs
bGJhY2ssCisgICAgICAgICZRVFBpeGVsQnVmZmVyOjpkYXRhUHJvdmlkZXJSZWxlYXNlSW5mb0Nh
bGxiYWNrLAorICAgIH07CisgICAgCisgICAgLy8gQ29sb3JzcGFjZSBzaG91bGQgYmUgZGV2aWNl
LCBzbyB0aGF0IFF1YXJ0eiBkb2VzIG5vdCBoYXZlIHRvIGRvIGFuIGV4dHJhIHJlbmRlci4KKyAg
ICBjb2xvclNwYWNlID0gQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdCKCk7CisgICAgcmVxdWly
ZShjb2xvclNwYWNlLCBCYWlsKTsKKyAgICAgICAgICAgIAorICAgIHByb3ZpZGVyID0gQ0dEYXRh
UHJvdmlkZXJDcmVhdGVEaXJlY3RBY2Nlc3MoYnVmZmVyLmdldCgpLCBidWZmZXIuZGF0YVNpemUo
KSwgJmNhbGxiYWNrcyk7CisgICAgcmVxdWlyZShwcm92aWRlciwgQmFpbCk7CisKKyAgICAvLyBD
R0RhdGFQcm92aWRlciBkb2VzIG5vdCByZXRhaW4gdGhlIGJ1ZmZlciwgYnV0IGl0IHdpbGwgcmVs
ZWFzZSBpdCBsYXRlciwgc28gZG8gYW4gZXh0cmEgcmV0YWluIGhlcmU6CisgICAgUVRQaXhlbEJ1
ZmZlcjo6cmV0YWluQ2FsbGJhY2soYnVmZmVyLmdldCgpKTsKKyAgICAgICAgCisgICAgaW1hZ2Ug
PSBDR0ltYWdlQ3JlYXRlKGJ1ZmZlci53aWR0aCgpLCBidWZmZXIuaGVpZ2h0KCksIGJpdHNQZXJD
b21wb25lbnQsIGJpdHNQZXJQaXhlbCwgYnVmZmVyLmJ5dGVzUGVyUm93KCksIGNvbG9yU3BhY2Us
IGFscGhhSW5mbywgcHJvdmlkZXIsIDAsIGZhbHNlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0
KTsKKyAKK0JhaWw6CisgICAgLy8gT25jZSB0aGUgaW1hZ2UgaXMgY3JlYXRlZCB3ZSBjYW4gcmVs
ZWFzZSBvdXIgcmVmZXJlbmNlIHRvIHRoZSBwcm92aWRlciBhbmQgdGhlIGNvbG9yc3BhY2UsIHRo
ZXkgYXJlIHJldGFpbmVkIGJ5IHRoZSBpbWFnZQorICAgIGlmIChwcm92aWRlcikKKyAgICAgICAg
Q0dEYXRhUHJvdmlkZXJSZWxlYXNlKHByb3ZpZGVyKTsKKyAgICBpZiAoY29sb3JTcGFjZSkKKyAg
ICAgICAgQ0dDb2xvclNwYWNlUmVsZWFzZShjb2xvclNwYWNlKTsKKyAKKyAgICByZXR1cm4gaW1h
Z2U7Cit9CisKKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0
OjpyZXRyaWV2ZUN1cnJlbnRJbWFnZSgpCit7CisgICAgaWYgKCFtX3Zpc3VhbENvbnRleHQpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9xdFZpZGVvTGF5ZXIpCisgICAgICAgIHJldHVy
bjsKKworICAgIFFUUGl4ZWxCdWZmZXIgYnVmZmVyID0gbV92aXN1YWxDb250ZXh0LT5pbWFnZUZv
clRpbWUoMCk7CisgICAgaWYgKCFidWZmZXIuZ2V0KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IFdLQ0FDRkxheWVyKiBsYXllciA9IHN0YXRpY19jYXN0PFdLQ0FDRkxheWVyKj4obV9xdFZpZGVv
TGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSk7CisKKyAgICBpZiAoIWJ1ZmZlci5sb2NrQmFzZUFkZHJl
c3MoKSkgeworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgLy8gRGVidWcgUXVpY2tUaW1lIGxpbmtz
IGFnYWluc3QgYSBub24tRGVidWcgdmVyc2lvbiBvZiBDb3JlRm91bmRhdGlvbiwgc28gdGhlIENG
RGljdGlvbmFyeSBhdHRhY2hlZCB0byB0aGUgQ1ZQaXhlbEJ1ZmZlciBjYW5ub3QgYmUgZGlyZWN0
bHkgcGFzc2VkIG9uIGludG8gdGhlIENBSW1hZ2VRdWV1ZSB3aXRob3V0IGJlaW5nIGNvbnZlcnRl
ZCB0byBhIG5vbi1EZWJ1ZyBDRkRpY3Rpb25hcnk6CisgICAgICAgIENGRGljdGlvbmFyeVJlZiBh
dHRhY2htZW50cyA9IFFUQ0ZEaWN0aW9uYXJ5Q3JlYXRlQ29weVdpdGhEYXRhQ2FsbGJhY2soa0NG
QWxsb2NhdG9yRGVmYXVsdCwgYnVmZmVyLmF0dGFjaG1lbnRzKCksICZRVENGRGljdGlvbmFyeUNy
ZWF0ZVdpdGhEYXRhQ2FsbGJhY2spOworI2Vsc2UKKyAgICAgICAgLy8gSG93ZXZlciwgdGhpcyBp
cyB1bm5lY3NzZXNhcnkgaW4gdGhlIG5vbi1EZWJ1ZyBjYXNlOgorICAgICAgICBDRkRpY3Rpb25h
cnlSZWYgYXR0YWNobWVudHMgPSBzdGF0aWNfY2FzdDxDRkRpY3Rpb25hcnlSZWY+KENGUmV0YWlu
KGJ1ZmZlci5hdHRhY2htZW50cygpKSk7CisjZW5kaWYKKworICAgICAgICBDRlRpbWVJbnRlcnZh
bCBpbWFnZVRpbWUgPSBRVE1vdmllVmlzdWFsQ29udGV4dDo6Y3VycmVudEhvc3RUaW1lKCk7CisK
KyAgICAgICAgQ0dJbWFnZVJlZiBpbWFnZSA9IENyZWF0ZUNHSW1hZ2VGcm9tUGl4ZWxCdWZmZXIo
YnVmZmVyKTsKKyAgICAgICAgbGF5ZXItPnNldENvbnRlbnRzKGltYWdlKTsKKyAgICAgICAgQ0dJ
bWFnZVJlbGVhc2UoaW1hZ2UpOworCisgICAgICAgIGlmIChhdHRhY2htZW50cykKKyAgICAgICAg
ICAgIENGUmVsZWFzZShhdHRhY2htZW50cyk7CisKKyAgICAgICAgYnVmZmVyLnVubG9ja0Jhc2VB
ZGRyZXNzKCk7CisgICAgICAgIGxheWVyLT5yb290TGF5ZXIoKS0+c2V0TmVlZHNSZW5kZXIoKTsK
KyAgICB9CisgICAgbV92aXN1YWxDb250ZXh0LT50YXNrKCk7Cit9CisKK3N0YXRpYyBIYXNoU2V0
PFN0cmluZz4gbWltZVR5cGVDYWNoZSgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNo
U2V0PFN0cmluZz4sIHR5cGVDYWNoZSwgKCkpOworICAgIHN0YXRpYyBib29sIHR5cGVMaXN0SW5p
dGlhbGl6ZWQgPSBmYWxzZTsKKworICAgIGlmICghdHlwZUxpc3RJbml0aWFsaXplZCkgeworICAg
ICAgICB1bnNpZ25lZCBjb3VudCA9IFFUTW92aWU6OmNvdW50U3VwcG9ydGVkVHlwZXMoKTsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IGNvdW50OyBuKyspIHsKKyAgICAgICAgICAg
IGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXI7CisgICAgICAgICAgICB1bnNpZ25lZCBsZW47CisgICAg
ICAgICAgICBRVE1vdmllOjpnZXRTdXBwb3J0ZWRUeXBlKG4sIGNoYXJhY3RlciwgbGVuKTsKKyAg
ICAgICAgICAgIGlmIChsZW4pCisgICAgICAgICAgICAgICAgdHlwZUNhY2hlLmFkZChTdHJpbmco
Y2hhcmFjdGVyLCBsZW4pKTsKKyAgICAgICAgfQorCisgICAgICAgIHR5cGVMaXN0SW5pdGlhbGl6
ZWQgPSB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHlwZUNhY2hlOworfQorCit2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OmdldFN1cHBvcnRlZFR5
cGVzKEhhc2hTZXQ8U3RyaW5nPiYgdHlwZXMpCit7CisgICAgdHlwZXMgPSBtaW1lVHlwZUNhY2hl
KCk7Cit9IAorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6
OmlzQXZhaWxhYmxlKCkKK3sKKyAgICByZXR1cm4gUVRNb3ZpZTo6aW5pdGlhbGl6ZVF1aWNrVGlt
ZSgpOworfQorCitNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIE1lZGlhUGxheWVyUHJpdmF0ZVF1
aWNrVGltZVZpc3VhbENvbnRleHQ6OnN1cHBvcnRzVHlwZShjb25zdCBTdHJpbmcmIHR5cGUsIGNv
bnN0IFN0cmluZyYgY29kZWNzKQoreworICAgIC8vIG9ubHkgcmV0dXJuICJJc1N1cHBvcnRlZCIg
aWYgdGhlcmUgaXMgbm8gY29kZWNzIHBhcmFtZXRlciBmb3Igbm93IGFzIHRoZXJlIGlzIG5vIHdh
eSB0byBhc2sgUVQgaWYgaXQgc3VwcG9ydHMgYW4KKyAgICAvLyAgZXh0ZW5kZWQgTUlNRSB0eXBl
CisgICAgcmV0dXJuIG1pbWVUeXBlQ2FjaGUoKS5jb250YWlucyh0eXBlKSA/IChjb2RlY3MuaXNF
bXB0eSgpID8gTWVkaWFQbGF5ZXI6Ok1heUJlU3VwcG9ydGVkIDogTWVkaWFQbGF5ZXI6OklzU3Vw
cG9ydGVkKSA6IE1lZGlhUGxheWVyOjpJc05vdFN1cHBvcnRlZDsKK30KKwordm9pZCBNZWRpYVBs
YXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpNb3ZpZUNsaWVudDo6bW92aWVFbmRl
ZChRVE1vdmllKiBtb3ZpZSkKK3sKKyAgICBpZiAobV9wYXJlbnQtPm1faGFzVW5zdXBwb3J0ZWRU
cmFja3MpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcGFyZW50LT5tX3Zpc3VhbENvbnRleHRU
aW1lci5zdG9wKCk7CisKKyAgICBBU1NFUlQobV9wYXJlbnQtPm1fbW92aWUuZ2V0KCkgPT0gbW92
aWUpOworICAgIG1fcGFyZW50LT5kaWRFbmQoKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZh
dGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpNb3ZpZUNsaWVudDo6bW92aWVMb2FkU3RhdGVDaGFu
Z2VkKFFUTW92aWUqIG1vdmllKQoreworICAgIGlmIChtX3BhcmVudC0+bV9oYXNVbnN1cHBvcnRl
ZFRyYWNrcykKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1fcGFyZW50LT5tX21vdmll
LmdldCgpID09IG1vdmllKTsKKyAgICBtX3BhcmVudC0+dXBkYXRlU3RhdGVzKCk7Cit9CisKK3Zv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6TW92aWVDbGllbnQ6
Om1vdmllVGltZUNoYW5nZWQoUVRNb3ZpZSogbW92aWUpCit7CisgICAgaWYgKG1fcGFyZW50LT5t
X2hhc1Vuc3VwcG9ydGVkVHJhY2tzKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobV9w
YXJlbnQtPm1fbW92aWUuZ2V0KCkgPT0gbW92aWUpOworICAgIG1fcGFyZW50LT51cGRhdGVTdGF0
ZXMoKTsKKyAgICBtX3BhcmVudC0+bV9wbGF5ZXItPnRpbWVDaGFuZ2VkKCk7Cit9CisKK2Jvb2wg
TWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6aGFzU2luZ2xlU2VjdXJp
dHlPcmlnaW4oKSBjb25zdAoreworICAgIC8vIFdlIHRlbGwgcXVpY2t0aW1lIHRvIGRpc2FsbG93
IHJlc291cmNlcyB0aGF0IGNvbWUgZnJvbSBkaWZmZXJlbnQgb3JpZ2lucworICAgIC8vIHNvIHdl
IGFsbCBtZWRpYSBpcyBzaW5nbGUgb3JpZ2luLgorICAgIHJldHVybiB0cnVlOworfQorCitNZWRp
YVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpNZWRpYVJlbmRlcmluZ01vZGUg
TWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6Y3VycmVudFJlbmRlcmlu
Z01vZGUoKSBjb25zdAoreworICAgIGlmICghbV9tb3ZpZSkKKyAgICAgICAgcmV0dXJuIE1lZGlh
UmVuZGVyaW5nTm9uZTsKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICBp
ZiAobV9xdFZpZGVvTGF5ZXIpCisgICAgICAgIHJldHVybiBNZWRpYVJlbmRlcmluZ01vdmllTGF5
ZXI7CisjZW5kaWYKKworICAgIHJldHVybiBNZWRpYVJlbmRlcmluZ1NvZnR3YXJlUmVuZGVyZXI7
Cit9CisKK01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6Ok1lZGlhUmVu
ZGVyaW5nTW9kZSBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpwcmVm
ZXJyZWRSZW5kZXJpbmdNb2RlKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcGxheWVyLT5mcmFtZVZp
ZXcoKSB8fCAhbV9tb3ZpZSkKKyAgICAgICAgcmV0dXJuIE1lZGlhUmVuZGVyaW5nTm9uZTsKKwor
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICBpZiAoc3VwcG9ydHNBY2NlbGVy
YXRlZFJlbmRlcmluZygpICYmIG1fcGxheWVyLT5tZWRpYVBsYXllckNsaWVudCgpLT5tZWRpYVBs
YXllclJlbmRlcmluZ0NhbkJlQWNjZWxlcmF0ZWQobV9wbGF5ZXIpKQorICAgICAgICByZXR1cm4g
TWVkaWFSZW5kZXJpbmdNb3ZpZUxheWVyOworI2VuZGlmCisKKyAgICByZXR1cm4gTWVkaWFSZW5k
ZXJpbmdTb2Z0d2FyZVJlbmRlcmVyOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNr
VGltZVZpc3VhbENvbnRleHQ6OnNldFVwVmlkZW9SZW5kZXJpbmcoKQoreworICAgIE1lZGlhUmVu
ZGVyaW5nTW9kZSBjdXJyZW50TW9kZSA9IGN1cnJlbnRSZW5kZXJpbmdNb2RlKCk7CisgICAgTWVk
aWFSZW5kZXJpbmdNb2RlIHByZWZlcnJlZE1vZGUgPSBwcmVmZXJyZWRSZW5kZXJpbmdNb2RlKCk7
CisKKyNpZiAhVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIEFTU0VSVChwcmVmZXJy
ZWRNb2RlICE9IE1lZGlhUmVuZGVyaW5nTW92aWVMYXllcik7CisjZW5kaWYKKworICAgIGlmIChj
dXJyZW50TW9kZSA9PSBwcmVmZXJyZWRNb2RlICYmIGN1cnJlbnRNb2RlICE9IE1lZGlhUmVuZGVy
aW5nTm9uZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGN1cnJlbnRNb2RlICE9IE1lZGlh
UmVuZGVyaW5nTm9uZSkgIAorICAgICAgICB0ZWFyRG93blZpZGVvUmVuZGVyaW5nKCk7CisKKyAg
ICBpZiAocHJlZmVycmVkTW9kZSA9PSBNZWRpYVJlbmRlcmluZ01vdmllTGF5ZXIpCisgICAgICAg
IGNyZWF0ZUxheWVyRm9yTW92aWUoKTsKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKKyAgICBpZiAoY3VycmVudE1vZGUgPT0gTWVkaWFSZW5kZXJpbmdNb3ZpZUxheWVyIHx8IHBy
ZWZlcnJlZE1vZGUgPT0gTWVkaWFSZW5kZXJpbmdNb3ZpZUxheWVyKQorICAgICAgICBtX3BsYXll
ci0+bWVkaWFQbGF5ZXJDbGllbnQoKS0+bWVkaWFQbGF5ZXJSZW5kZXJpbmdNb2RlQ2hhbmdlZCht
X3BsYXllcik7CisjZW5kaWYKKworICAgIG1fdmlzdWFsQ29udGV4dC0+c2V0TW92aWUobV9tb3Zp
ZS5nZXQoKSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29u
dGV4dDo6dGVhckRvd25WaWRlb1JlbmRlcmluZygpCit7CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQorICAgIGlmIChtX3F0VmlkZW9MYXllcikKKyAgICAgICAgZGVzdHJveUxheWVy
Rm9yTW92aWUoKTsKKyNlbmRpZgorCisgICAgbV92aXN1YWxDb250ZXh0LT5zZXRNb3ZpZSgwKTsK
K30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpoYXNT
ZXRVcFZpZGVvUmVuZGVyaW5nKCkgY29uc3QKK3sKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCisgICAgcmV0dXJuIG1fcXRWaWRlb0xheWVyIHx8IGN1cnJlbnRSZW5kZXJpbmdNb2Rl
KCkgIT0gTWVkaWFSZW5kZXJpbmdNb3ZpZUxheWVyOworI2Vsc2UKKyAgICByZXR1cm4gdHJ1ZTsK
KyNlbmRpZgorfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRl
eHQ6OmNyZWF0ZUxheWVyRm9yTW92aWUoKQoreworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKKyAgICBBU1NFUlQoc3VwcG9ydHNBY2NlbGVyYXRlZFJlbmRlcmluZygpKTsKKworICAg
IGlmICghbV9tb3ZpZSB8fCBtX3F0VmlkZW9MYXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAg
Ly8gQ3JlYXRlIGEgR3JhcGhpY3NMYXllciB0aGF0IHdvbid0IGJlIGluc2VydGVkIGRpcmVjdGx5
IGludG8gdGhlIHJlbmRlciB0cmVlLCBidXQgd2lsbCB1c2VkIAorICAgIC8vIGFzIGEgd3JhcHBl
ciBmb3IgYSBXS0NBQ0ZMYXllciB3aGljaCBnZXRzIGluc2VydGVkIGFzIHRoZSBjb250ZW50IGxh
eWVyIG9mIHRoZSB2aWRlbyAKKyAgICAvLyByZW5kZXJlcidzIEdyYXBoaWNzTGF5ZXIuCisgICAg
bV9xdFZpZGVvTGF5ZXIuc2V0KG5ldyBHcmFwaGljc0xheWVyQ0FDRihtX2xheWVyQ2xpZW50Lmdl
dCgpKSk7CisgICAgaWYgKCFtX3F0VmlkZW9MYXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAg
Ly8gTWFyayB0aGUgbGF5ZXIgYXMgZHJhd2luZyBpdHNlbGYsIGFuY2hvcmVkIGluIHRoZSB0b3Ag
bGVmdCwgYW5kIGJvdHRvbS11cC4KKyAgICBtX3F0VmlkZW9MYXllci0+c2V0RHJhd3NDb250ZW50
KHRydWUpOworICAgIG1fcXRWaWRlb0xheWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50M0Qo
KSk7CisgICAgbV9xdFZpZGVvTGF5ZXItPnNldENvbnRlbnRzT3JpZW50YXRpb24oR3JhcGhpY3NM
YXllcjo6Q29tcG9zaXRpbmdDb29yZGluYXRlc0JvdHRvbVVwKTsKKyNpZm5kZWYgTkRFQlVHCisg
ICAgbV9xdFZpZGVvTGF5ZXItPnNldE5hbWUoIlZpZGVvIGxheWVyIik7CisjZW5kaWYKKyAgICAv
LyBUaGUgbGF5ZXIgd2lsbCBnZXQgaG9va2VkIHVwIHZpYSBSZW5kZXJMYXllckJhY2tpbmc6OnVw
ZGF0ZUdyYXBoaWNzTGF5ZXJDb25maWd1cmF0aW9uKCkuCisjZW5kaWYKK30KKwordm9pZCBNZWRp
YVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpkZXN0cm95TGF5ZXJGb3JNb3Zp
ZSgpCit7CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIGlmICghbV9xdFZp
ZGVvTGF5ZXIpCisgICAgICAgIHJldHVybjsKKyAgICBtX3F0VmlkZW9MYXllciA9IDA7CisjZW5k
aWYKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpM
YXllckNsaWVudDo6cGFpbnRDb250ZW50cyhjb25zdCBHcmFwaGljc0xheWVyKiwgR3JhcGhpY3ND
b250ZXh0JiwgR3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IEludFJlY3QmIGluQ2xp
cCkKK3sKK30KKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKK2Jvb2wgTWVkaWFQ
bGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6c3VwcG9ydHNBY2NlbGVyYXRlZFJl
bmRlcmluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlzUmVhZHlGb3JSZW5kZXJpbmcoKTsKK30K
Kwordm9pZCBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjphY2NlbGVy
YXRlZFJlbmRlcmluZ1N0YXRlQ2hhbmdlZCgpCit7CisgICAgLy8gU2V0IHVwIG9yIGNoYW5nZSB0
aGUgcmVuZGVyaW5nIHBhdGggaWYgbmVjZXNzYXJ5LgorICAgIHNldFVwVmlkZW9SZW5kZXJpbmco
KTsKK30KKworI2VuZGlmCisKKworfQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclBy
aXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250
ZXh0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTgyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0
X2gKKyNkZWZpbmUgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dF9oCisK
KyNpZiBFTkFCTEUoVklERU8pCisKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyQ2xpZW50LmgiCisj
aW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNs
dWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCisjaWZuZGVm
IERSQVdfRlJBTUVfUkFURQorI2RlZmluZSBEUkFXX0ZSQU1FX1JBVEUgMAorI2VuZGlmCisKK3R5
cGVkZWYgc3RydWN0IENHSW1hZ2UgKkNHSW1hZ2VSZWY7CitjbGFzcyBRVE1vdmllOworY2xhc3Mg
UVRNb3ZpZVZpc3VhbENvbnRleHQ7CitjbGFzcyBXS0NBSW1hZ2VRdWV1ZTsKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBHcmFwaGljc0NvbnRleHQ7CitjbGFzcyBJbnRTaXplOworY2xh
c3MgSW50UmVjdDsKK2NsYXNzIFN0cmluZzsKKworY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlUXVp
Y2tUaW1lVmlzdWFsQ29udGV4dCA6IHB1YmxpYyBNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2Ug
eworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyTWVkaWFFbmdpbmUoTWVkaWFFbmdp
bmVSZWdpc3RyYXIpOworCisgICAgfk1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENv
bnRleHQoKTsKKworcHJpdmF0ZToKKyAgICBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1
YWxDb250ZXh0KE1lZGlhUGxheWVyKik7CisKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGdWxs
c2NyZWVuKCkgY29uc3Q7CisgICAgdmlydHVhbCBQbGF0Zm9ybU1lZGlhIHBsYXRmb3JtTWVkaWEo
KSBjb25zdDsKKyAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Q7CisKKyAg
ICBJbnRTaXplIG5hdHVyYWxTaXplKCkgY29uc3Q7CisgICAgYm9vbCBoYXNWaWRlbygpIGNvbnN0
OworICAgIGJvb2wgaGFzQXVkaW8oKSBjb25zdDsKKworICAgIHZvaWQgbG9hZChjb25zdCBTdHJp
bmcmIHVybCk7CisgICAgdm9pZCBjYW5jZWxMb2FkKCk7CisgICAgCisgICAgdm9pZCBwbGF5KCk7
CisgICAgdm9pZCBwYXVzZSgpOyAgICAKKyAgICAKKyAgICBib29sIHBhdXNlZCgpIGNvbnN0Owor
ICAgIGJvb2wgc2Vla2luZygpIGNvbnN0OworICAgIAorICAgIGZsb2F0IGR1cmF0aW9uKCkgY29u
c3Q7CisgICAgZmxvYXQgY3VycmVudFRpbWUoKSBjb25zdDsKKyAgICB2b2lkIHNlZWsoZmxvYXQg
dGltZSk7CisgICAgCisgICAgdm9pZCBzZXRSYXRlKGZsb2F0KTsKKyAgICB2b2lkIHNldFZvbHVt
ZShmbG9hdCk7CisgICAgdm9pZCBzZXRQcmVzZXJ2ZXNQaXRjaChib29sKTsKKyAgICAKKyAgICBN
ZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIG5ldHdvcmtTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bmV0d29ya1N0YXRlOyB9CisgICAgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgcmVhZHlTdGF0ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fcmVhZHlTdGF0ZTsgfQorICAgIAorICAgIFBhc3NSZWZQdHI8VGlt
ZVJhbmdlcz4gYnVmZmVyZWQoKSBjb25zdDsKKyAgICBmbG9hdCBtYXhUaW1lU2Vla2FibGUoKSBj
b25zdDsKKyAgICB1bnNpZ25lZCBieXRlc0xvYWRlZCgpIGNvbnN0OworICAgIHVuc2lnbmVkIHRv
dGFsQnl0ZXMoKSBjb25zdDsKKyAgICAKKyAgICB2b2lkIHNldFZpc2libGUoYm9vbCk7CisgICAg
dm9pZCBzZXRTaXplKGNvbnN0IEludFNpemUmKTsKKyAgICAKKyAgICB2b2lkIGxvYWRTdGF0ZUNo
YW5nZWQoKTsKKyAgICB2b2lkIGRpZEVuZCgpOworICAgIAorICAgIHZvaWQgcGFpbnQoR3JhcGhp
Y3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOworICAgIHZvaWQgcGFpbnRDb21wbGV0ZWQoR3Jh
cGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYpOworCisgICAgYm9vbCBoYXNTaW5nbGVTZWN1
cml0eU9yaWdpbigpIGNvbnN0OworCisgICAgYm9vbCBoYXNDbG9zZWRDYXB0aW9ucygpIGNvbnN0
OworICAgIHZvaWQgc2V0Q2xvc2VkQ2FwdGlvbnNWaXNpYmxlKGJvb2wpOworCisgICAgdm9pZCB1
cGRhdGVTdGF0ZXMoKTsKKyAgICB2b2lkIGRvU2VlaygpOworICAgIHZvaWQgY2FuY2VsU2Vlaygp
OworICAgIHZvaWQgc2Vla1RpbWVyRmlyZWQoVGltZXI8TWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tU
aW1lVmlzdWFsQ29udGV4dD4qKTsKKyAgICBmbG9hdCBtYXhUaW1lTG9hZGVkKCkgY29uc3Q7Cisg
ICAgdm9pZCBzYXdVbnN1cHBvcnRlZFRyYWNrcygpOworCisgICAgLy8gZW5naW5lIHN1cHBvcnQK
KyAgICBzdGF0aWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlKiBjcmVhdGUoTWVkaWFQbGF5
ZXIqKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZz4m
IHR5cGVzKTsKKyAgICBzdGF0aWMgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBzdXBwb3J0c1R5
cGUoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGNvZGVjcyk7CisgICAgc3RhdGlj
IGJvb2wgaXNBdmFpbGFibGUoKTsKKworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0FjY2VsZXJh
dGVkUmVuZGVyaW5nKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFjY2VsZXJhdGVkUmVuZGVy
aW5nU3RhdGVDaGFuZ2VkKCk7CisKKyAgICBlbnVtIE1lZGlhUmVuZGVyaW5nTW9kZSB7IE1lZGlh
UmVuZGVyaW5nTm9uZSwgTWVkaWFSZW5kZXJpbmdTb2Z0d2FyZVJlbmRlcmVyLCBNZWRpYVJlbmRl
cmluZ01vdmllTGF5ZXIgfTsKKyAgICBNZWRpYVJlbmRlcmluZ01vZGUgY3VycmVudFJlbmRlcmlu
Z01vZGUoKSBjb25zdDsKKyAgICBNZWRpYVJlbmRlcmluZ01vZGUgcHJlZmVycmVkUmVuZGVyaW5n
TW9kZSgpIGNvbnN0OworICAgIGJvb2wgaXNSZWFkeUZvclJlbmRlcmluZygpIGNvbnN0OworCisg
ICAgdm9pZCBzZXRVcFZpZGVvUmVuZGVyaW5nKCk7CisgICAgdm9pZCB0ZWFyRG93blZpZGVvUmVu
ZGVyaW5nKCk7CisgICAgYm9vbCBoYXNTZXRVcFZpZGVvUmVuZGVyaW5nKCkgY29uc3Q7CisKKyAg
ICB2b2lkIGNyZWF0ZUxheWVyRm9yTW92aWUoKTsKKyAgICB2b2lkIGRlc3Ryb3lMYXllckZvck1v
dmllKCk7CisKKyAgICB2b2lkIHNldFVwQ29va2llc0ZvclF1aWNrVGltZShjb25zdCBTdHJpbmcm
IHVybCk7CisgICAgU3RyaW5nIHJmYzI2MTZEYXRlU3RyaW5nRnJvbVRpbWUoQ0ZBYnNvbHV0ZVRp
bWUpOworCisgICAgdm9pZCB2aXN1YWxDb250ZXh0VGltZXJGaXJlZChUaW1lcjxNZWRpYVBsYXll
clByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0PiopOworICAgIHZvaWQgcmV0cmlldmVDdXJy
ZW50SW1hZ2UoKTsKKworICAgIGNsYXNzIE1vdmllQ2xpZW50OworICAgIGZyaWVuZCBjbGFzcyBN
b3ZpZUNsaWVudDsKKyAgICBPd25QdHI8TW92aWVDbGllbnQ+IG1fbW92aWVDbGllbnQ7CisKKyAg
ICBjbGFzcyBMYXllckNsaWVudDsKKyAgICBmcmllbmQgY2xhc3MgTGF5ZXJDbGllbnQ7CisgICAg
T3duUHRyPExheWVyQ2xpZW50PiBtX2xheWVyQ2xpZW50OworCisgICAgY2xhc3MgVmlzdWFsQ29u
dGV4dENsaWVudDsKKyAgICBmcmllbmQgY2xhc3MgVmlzdWFsQ29udGV4dENsaWVudDsKKyAgICBP
d25QdHI8VmlzdWFsQ29udGV4dENsaWVudD4gbV92aXN1YWxDb250ZXh0Q2xpZW50OworCisgICAg
TWVkaWFQbGF5ZXIqIG1fcGxheWVyOworICAgIFJlZlB0cjxRVE1vdmllPiBtX21vdmllOworICAg
IE93blB0cjxHcmFwaGljc0xheWVyPiBtX3F0VmlkZW9MYXllcjsKKyAgICBSZWZQdHI8UVRNb3Zp
ZVZpc3VhbENvbnRleHQ+IG1fdmlzdWFsQ29udGV4dDsKKyAgICBmbG9hdCBtX3NlZWtUbzsKKyAg
ICBUaW1lcjxNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0PiBtX3NlZWtU
aW1lcjsKKyAgICBUaW1lcjxNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0
PiBtX3Zpc3VhbENvbnRleHRUaW1lcjsKKyAgICBJbnRTaXplIG1fc2l6ZTsKKyAgICBNZWRpYVBs
YXllcjo6TmV0d29ya1N0YXRlIG1fbmV0d29ya1N0YXRlOworICAgIE1lZGlhUGxheWVyOjpSZWFk
eVN0YXRlIG1fcmVhZHlTdGF0ZTsKKyAgICB1bnNpZ25lZCBtX2VuYWJsZWRUcmFja0NvdW50Owor
ICAgIHVuc2lnbmVkIG1fdG90YWxUcmFja0NvdW50OworICAgIGJvb2wgbV9oYXNVbnN1cHBvcnRl
ZFRyYWNrczsKKyAgICBib29sIG1fc3RhcnRlZFBsYXlpbmc7CisgICAgYm9vbCBtX2lzU3RyZWFt
aW5nOworICAgIGJvb2wgbV92aXNpYmxlOworICAgIGJvb2wgbV9uZXdGcmFtZUF2YWlsYWJsZTsK
KyNpZiBEUkFXX0ZSQU1FX1JBVEUKKyAgICBkb3VibGUgbV9mcmFtZUNvdW50V2hpbGVQbGF5aW5n
OworICAgIGRvdWJsZSBtX3RpbWVTdGFydGVkUGxheWluZzsKKyAgICBkb3VibGUgbV90aW1lU3Rv
cHBlZFBsYXlpbmc7CisjZW5kaWYKK307CisKK30KKworI2VuZGlmCisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54583</attachid>
            <date>2010-04-28 10:56:25 -0700</date>
            <delta_ts>2010-04-29 22:10:21 -0700</delta_ts>
            <desc>Part 5: WebCore: MediaPlayer adds MediaPlayerQuickTimeVisualContext to its list of MediaPlayerPrivates</desc>
            <filename>7569713-MediaPlayer.patch</filename>
            <type>text/plain</type>
            <size>979</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCShyZXZpc2lv
biA1ODE4NykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw4IEBACiAjZWxpZiBPUyhXSU5DRSkgJiYgIVBMQVRG
T1JNKFFUKQogI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZVdpbmNlLmgiCiAjZWxpZiBQTEFU
Rk9STShXSU4pCi0jaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lV2luLmgiCisj
aW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dC5oIgorI2lu
Y2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrdGltZVdpbi5oIgogI2VsaWYgUExBVEZPUk0o
R1RLKQogI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oIgogI2VsaWYgUExB
VEZPUk0oUVQpCkBAIC0xNjIsNiArMTYzLDkgQEAKICNpZiBVU0UoR1NUUkVBTUVSKQogICAgICAg
ICBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnJlZ2lzdGVyTWVkaWFFbmdpbmUoYWRkTWVk
aWFFbmdpbmUpOwogI2Vsc2UKKyNpZiBQTEFURk9STShXSU4pCisgICAgICAgIE1lZGlhUGxheWVy
UHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OnJlZ2lzdGVyTWVkaWFFbmdpbmUoYWRkTWVk
aWFFbmdpbmUpOworI2VuZGlmCiAgICAgICAgIC8vIEZJWE1FOiBjdXJyZW50bHkgYWxsIHRoZSBN
ZWRpYUVuZ2luZXMgYXJlIG5hbWVkCiAgICAgICAgIC8vIE1lZGlhUGxheWVyUHJpdmF0ZS4gVGhp
cyBjb2RlIHdpbGwgbmVlZCBhbiB1cGRhdGUgd2hlbiBidWcKICAgICAgICAgLy8gMzY2NjMgaXMg
YWRyZXNzZWQuCg==
</data>
<flag name="review"
          id="38610"
          type_id="1"
          status="+"
          setter="eric.carlson"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54584</attachid>
            <date>2010-04-28 10:57:41 -0700</date>
            <delta_ts>2010-04-29 22:14:22 -0700</delta_ts>
            <desc>Part 6: VCProj project file changes</desc>
            <filename>7569713-VCProj.patch</filename>
            <type>text/plain</type>
            <size>24624</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvV2ViY29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9XZWJjb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gNTgxODcp
CisrKyBXZWJDb3JlL1dlYmNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDQgKzEsNCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0x
MjUyIj8+DQorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0xMjUxIj8+DQog
PFZpc3VhbFN0dWRpb1Byb2plY3QNCiAJUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQogCVZlcnNp
b249IjguMDAiDQpAQCAtODE0MSw2MiArODE0MSw2IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJ
CQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9IiQoV2ViS2l0T3V0cHV0RGlyKVxvYmpcJChQcm9q
ZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNcSlNTdHlsZU1lZGlhLmNwcCINCi0JCQkJPg0KLQkJCQk8
RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCQkJRXhjbHVk
ZWRGcm9tQnVpbGQ9InRydWUiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZD
Q0xDb21waWxlclRvb2wiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJ
CQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJCQlF
eGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFt
ZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+
DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWdfSW50ZXJuYWx8V2lu
MzIiDQotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCi0JCQkJCT4NCi0JCQkJCTxUb29s
DQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNv
bmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWdf
Q2Fpcm98V2luMzIiDQotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCi0JCQkJCT4NCi0J
CQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCS8+DQotCQkJ
CTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFt
ZT0iUmVsZWFzZV9DYWlyb3xXaW4zMiINCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0K
LQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJ
CQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9u
DQotCQkJCQlOYW1lPSJEZWJ1Z19BbGx8V2luMzIiDQotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0i
dHJ1ZSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9v
bCINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJPC9GaWxlPg0KLQkJ
CTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iJChXZWJLaXRPdXRwdXREaXIpXG9ialwkKFByb2pl
Y3ROYW1lKVxEZXJpdmVkU291cmNlc1xKU1N0eWxlTWVkaWEuaCINCi0JCQkJPg0KLQkJCTwvRmls
ZT4NCi0JCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9IiQoV2ViS2l0T3V0cHV0RGlyKVxvYmpc
JChQcm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNcSlNNZWRpYUVycm9yLmNwcCINCiAJCQkJPg0K
IAkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCkBAIC04Mzg5LDcgKzgzMzMsNiBAQAogCQkJCQk+DQog
CQkJCQk8VG9vbA0KIAkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotDQogCQkJCQkvPg0K
IAkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KIAkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCkBAIC0x
MDM4Miw2ICsxMDMyNSw2MiBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJ
UmVsYXRpdmVQYXRoPSIkKFdlYktpdE91dHB1dERpcilcb2JqXCQoUHJvamVjdE5hbWUpXERlcml2
ZWRTb3VyY2VzXEpTU3R5bGVNZWRpYS5jcHAiDQorCQkJCT4NCisJCQkJPEZpbGVDb25maWd1cmF0
aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0
cnVlIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29s
Ig0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1
cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJRXhjbHVkZWRGcm9tQnVp
bGQ9InRydWUiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxl
clRvb2wiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNv
bmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnX0ludGVybmFsfFdpbjMyIg0KKwkJCQkJRXhj
bHVkZWRGcm9tQnVpbGQ9InRydWUiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9
IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0K
KwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnX0NhaXJvfFdpbjMyIg0K
KwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJ
CQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1
cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2VfQ2Fp
cm98V2luMzIiDQorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCisJCQkJCT4NCisJCQkJ
CTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCS8+DQorCQkJCTwv
RmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0i
RGVidWdfQWxsfFdpbjMyIg0KKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQorCQkJCQk+
DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkvPg0K
KwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlS
ZWxhdGl2ZVBhdGg9IiQoV2ViS2l0T3V0cHV0RGlyKVxvYmpcJChQcm9qZWN0TmFtZSlcRGVyaXZl
ZFNvdXJjZXNcSlNTdHlsZU1lZGlhLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUN
CiAJCQkJUmVsYXRpdmVQYXRoPSIkKFdlYktpdE91dHB1dERpcilcb2JqXCQoUHJvamVjdE5hbWUp
XERlcml2ZWRTb3VyY2VzXEpTU3R5bGVTaGVldC5jcHAiDQogCQkJCT4NCiAJCQkJPEZpbGVDb25m
aWd1cmF0aW9uDQpAQCAtMTg4MzQsNyArMTg4MzMsNiBAQAogCQkJCTwvRmlsZUNvbmZpZ3VyYXRp
b24+DQogCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KIAkJCQkJTmFtZT0iRGVidWdfQWxsfFdpbjMy
Ig0KLQ0KIAkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQogCQkJCQk+DQogCQkJCQk8VG9v
bA0KQEAgLTIxNDU1LDE5ICsyMTQ1MywxOSBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZp
bGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxsb2FkZXJcRG9jdW1lbnRXcml0ZXIuY3BwIg0KKwkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXGxvYWRlclxEb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwIg0K
IAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cbG9h
ZGVyXERvY3VtZW50V3JpdGVyLmgiDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cbG9hZGVyXERvY3Vt
ZW50VGhyZWFkYWJsZUxvYWRlci5oIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQot
CQkJCVJlbGF0aXZlUGF0aD0iLi5cbG9hZGVyXERvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5jcHAi
DQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cbG9hZGVyXERvY3VtZW50V3JpdGVyLmNwcCINCiAJCQkJ
Pg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGxvYWRlclxE
b2N1bWVudFRocmVhZGFibGVMb2FkZXIuaCINCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxsb2FkZXJc
RG9jdW1lbnRXcml0ZXIuaCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KQEAgLTIy
ODM0LDE5ICsyMjgzMiwxOSBAQAogCQkJCQk+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCi0J
CQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcR2x5cGhQYWdlVHJlZU5vZGUu
Y3BwIg0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xHbHlwaE1ldHJp
Y3NNYXAuY3BwIg0KIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQotCQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEdseXBoUGFnZVRyZWVOb2RlLmgiDQorCQkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEdseXBoTWV0cmljc01hcC5oIg0K
IAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XHBsYXRmb3JtXGdyYXBoaWNzXEdseXBoTWV0cmljc01hcC5jcHAiDQorCQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEdseXBoUGFnZVRyZWVOb2RlLmNwcCINCiAJCQkJCT4N
CiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9y
bVxncmFwaGljc1xHbHlwaE1ldHJpY3NNYXAuaCINCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxh
dGZvcm1cZ3JhcGhpY3NcR2x5cGhQYWdlVHJlZU5vZGUuaCINCiAJCQkJCT4NCiAJCQkJPC9GaWxl
Pg0KIAkJCQk8RmlsZQ0KQEAgLTIzNDM3LDYgKzIzNDM1LDE0IEBACiAJCQkJCQk+DQogCQkJCQk8
L0ZpbGU+DQogCQkJCQk8RmlsZQ0KKwkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3Jh
cGhpY3Ncd2luXE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQuY3BwIg0K
KwkJCQkJCT4NCisJCQkJCTwvRmlsZT4NCisJCQkJCTxGaWxlDQorCQkJCQkJUmVsYXRpdmVQYXRo
PSIuLlxwbGF0Zm9ybVxncmFwaGljc1x3aW5cTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlz
dWFsQ29udGV4dC5oIg0KKwkJCQkJCT4NCisJCQkJCTwvRmlsZT4NCisJCQkJCTxGaWxlDQogCQkJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1x3aW5cTWVkaWFQbGF5ZXJQcml2
YXRlUXVpY2tUaW1lV2luLmNwcCINCiAJCQkJCQk+DQogCQkJCQkJPEZpbGVDb25maWd1cmF0aW9u
DQpAQCAtMjM0NzcsNiArMjM0ODMsMTQgQEAKIAkJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQog
CQkJCQk8L0ZpbGU+DQogCQkJCQk8RmlsZQ0KKwkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZv
cm1cZ3JhcGhpY3Ncd2luXE1lZGlhUGxheWVyUHJpdmF0ZVRhc2tUaW1lci5jcHAiDQorCQkJCQkJ
Pg0KKwkJCQkJPC9GaWxlPg0KKwkJCQkJPEZpbGUNCisJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBs
YXRmb3JtXGdyYXBoaWNzXHdpblxNZWRpYVBsYXllclByaXZhdGVUYXNrVGltZXIuaCINCisJCQkJ
CQk+DQorCQkJCQk8L0ZpbGU+DQorCQkJCQk8RmlsZQ0KIAkJCQkJCVJlbGF0aXZlUGF0aD0iLi5c
cGxhdGZvcm1cZ3JhcGhpY3Ncb3BlbnR5cGVcT3BlblR5cGVVdGlsaXRpZXMuY3BwIg0KIAkJCQkJ
CT4NCiAJCQkJCTwvRmlsZT4NCkBAIC0yNTczOCwxNSArMjU3NTIsMTUgQEAKIAkJCQkJPg0KIAkJ
CQk8L0ZpbGU+DQogCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXHRl
eHRcU3VmZml4VHJlZS5oIg0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGlj
c1xTdHJpbmdUcnVuY2F0b3IuY3BwIg0KIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxl
DQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXFN0cmluZ1RydW5jYXRv
ci5jcHAiDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXFN0cmluZ1Ry
dW5jYXRvci5oIg0KIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQotCQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXFN0cmluZ1RydW5jYXRvci5oIg0KKwkJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVx0ZXh0XFN1ZmZpeFRyZWUuaCINCiAJCQkJCT4NCiAJ
CQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KQEAgLTI3MTUxLDE0ICsyNzE2NSw2IEBACiAJCQkJPg0K
IAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGNzc1xTdHlsZU1l
ZGlhLmNwcCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXGNzc1xTdHlsZU1lZGlhLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUN
CiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxjc3NcbWVkaWFDb250cm9scy5jc3MiDQogCQkJCT4NCiAJ
CQk8L0ZpbGU+DQpAQCAtMjcyNDcsNiArMjcyNTMsMTQgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0K
IAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cY3NzXFN0eWxlTWVkaWEuY3BwIg0KKwkJ
CQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cY3NzXFN0
eWxlTWVkaWEuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXGNzc1xTdHlsZVNoZWV0LmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCkBAIC0z
MTc4NSw3ICszMTc5OSw2IEBACiAJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KIAkJCQkJ
Lz4NCiAJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUN
CiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEhUTUxGb3JtRWxlbWVudC5oIg0KQEAgLTM5MDcx
LDcgKzM5MDg0LDcgQEAKIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQotCQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXEpTU2hhcmVkV29ya2VyQ29uc3RydWN0b3IuY3Bw
Ig0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxiaW5kaW5nc1xqc1xKU1NjcmlwdFByb2ZpbGVOb2Rl
Q3VzdG9tLmNwcCINCiAJCQkJCT4NCiAJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KIAkJCQkJCU5h
bWU9IkRlYnVnfFdpbjMyIg0KQEAgLTM5MTIzLDEyICszOTEzNiw4IEBACiAJCQkJCTwvRmlsZUNv
bmZpZ3VyYXRpb24+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0
aD0iLi5cYmluZGluZ3NcanNcSlNTaGFyZWRXb3JrZXJDb25zdHJ1Y3Rvci5oIg0KKwkJCQkJUmVs
YXRpdmVQYXRoPSIuLlxiaW5kaW5nc1xqc1xKU1NoYXJlZFdvcmtlckNvbnN0cnVjdG9yLmNwcCIN
CiAJCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIu
LlxiaW5kaW5nc1xqc1xKU1NoYXJlZFdvcmtlckN1c3RvbS5jcHAiDQotCQkJCQk+DQogCQkJCQk8
RmlsZUNvbmZpZ3VyYXRpb24NCiAJCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCiAJCQkJCQlFeGNs
dWRlZEZyb21CdWlsZD0idHJ1ZSINCkBAIC0zOTE3OSw4ICszOTE4OCwxMiBAQAogCQkJCQk8L0Zp
bGVDb25maWd1cmF0aW9uPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXEpTU1FMUmVzdWx0U2V0Um93TGlzdEN1c3RvbS5jcHAiDQor
CQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXEpTU2hhcmVkV29ya2VyQ29uc3RydWN0
b3IuaCINCiAJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxiaW5kaW5nc1xqc1xKU1NoYXJlZFdvcmtlckN1c3RvbS5jcHAiDQorCQkJCQk+DQog
CQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCiAJCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCiAJCQkJ
CQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCkBAIC0zOTIzMSw3ICszOTI0NCw3IEBACiAJCQkJ
CTwvRmlsZUNvbmZpZ3VyYXRpb24+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCi0JCQkJCVJl
bGF0aXZlUGF0aD0iLi5cYmluZGluZ3NcanNcSlNTUUxUcmFuc2FjdGlvbkN1c3RvbS5jcHAiDQor
CQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXEpTU1FMUmVzdWx0U2V0Um93TGlzdEN1
c3RvbS5jcHAiDQogCQkJCQk+DQogCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCiAJCQkJCQlOYW1l
PSJEZWJ1Z3xXaW4zMiINCkBAIC0zOTI4Myw3ICszOTI5Niw3IEBACiAJCQkJCTwvRmlsZUNvbmZp
Z3VyYXRpb24+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0i
Li5cYmluZGluZ3NcanNcSlNTdG9yYWdlQ3VzdG9tLmNwcCINCisJCQkJCVJlbGF0aXZlUGF0aD0i
Li5cYmluZGluZ3NcanNcSlNTUUxUcmFuc2FjdGlvbkN1c3RvbS5jcHAiDQogCQkJCQk+DQogCQkJ
CQk8RmlsZUNvbmZpZ3VyYXRpb24NCiAJCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCkBAIC0zOTMz
NSw3ICszOTM0OCw3IEBACiAJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQogCQkJCTwvRmlsZT4N
CiAJCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cYmluZGluZ3NcanNcSlNTdHlsZVNo
ZWV0Q3VzdG9tLmNwcCINCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cYmluZGluZ3NcanNcSlNTdG9y
YWdlQ3VzdG9tLmNwcCINCiAJCQkJCT4NCiAJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KIAkJCQkJ
CU5hbWU9IkRlYnVnfFdpbjMyIg0KQEAgLTM5Mzg3LDcgKzM5NDAwLDcgQEAKIAkJCQkJPC9GaWxl
Q29uZmlndXJhdGlvbj4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxiaW5kaW5nc1xqc1xKU1N0eWxlU2hlZXRMaXN0Q3VzdG9tLmNwcCINCisJCQkJCVJl
bGF0aXZlUGF0aD0iLi5cYmluZGluZ3NcanNcSlNTdHlsZVNoZWV0Q3VzdG9tLmNwcCINCiAJCQkJ
CT4NCiAJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KIAkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0K
QEAgLTM5NDM5LDEyICszOTQ1Miw4IEBACiAJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQogCQkJ
CTwvRmlsZT4NCiAJCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cYmluZGluZ3NcanNc
SlNTVkdDb250ZXh0Q2FjaGUuaCINCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cYmluZGluZ3NcanNc
SlNTdHlsZVNoZWV0TGlzdEN1c3RvbS5jcHAiDQogCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJ
PEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cYmluZGluZ3NcanNcSlNTVkdFbGVtZW50SW5z
dGFuY2VDdXN0b20uY3BwIg0KLQkJCQkJPg0KIAkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQogCQkJ
CQkJTmFtZT0iRGVidWd8V2luMzIiDQogCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQpA
QCAtMzk0OTUsOCArMzk1MDQsMTIgQEAKIAkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCiAJCQkJ
PC9GaWxlPg0KIAkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxiaW5kaW5nc1xqc1xK
U1NWR0xlbmd0aEN1c3RvbS5jcHAiDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpz
XEpTU1ZHQ29udGV4dENhY2hlLmgiDQogCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUN
CisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cYmluZGluZ3NcanNcSlNTVkdFbGVtZW50SW5zdGFuY2VD
dXN0b20uY3BwIg0KKwkJCQkJPg0KIAkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQogCQkJCQkJTmFt
ZT0iRGVidWd8V2luMzIiDQogCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQpAQCAtMzk1
NDcsNyArMzk1NjAsNyBAQAogCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KIAkJCQk8L0ZpbGU+
DQogCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXEpTU1ZHTWF0
cml4Q3VzdG9tLmNwcCINCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cYmluZGluZ3NcanNcSlNTVkdM
ZW5ndGhDdXN0b20uY3BwIg0KIAkJCQkJPg0KIAkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQogCQkJ
CQkJTmFtZT0iRGVidWd8V2luMzIiDQpAQCAtMzk1OTksNyArMzk2MTIsNyBAQAogCQkJCQk8L0Zp
bGVDb25maWd1cmF0aW9uPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXEpTU1ZHUGF0aFNlZ0N1c3RvbS5jcHAiDQorCQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXEpTU1ZHTWF0cml4Q3VzdG9tLmNwcCINCiAJCQkJCT4N
CiAJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KIAkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KQEAg
LTM5NjUxLDcgKzM5NjY0LDcgQEAKIAkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCiAJCQkJPC9G
aWxlPg0KIAkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxiaW5kaW5nc1xqc1xKU1NW
R1BhdGhTZWdMaXN0Q3VzdG9tLmNwcCINCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cYmluZGluZ3Nc
anNcSlNTVkdQYXRoU2VnQ3VzdG9tLmNwcCINCiAJCQkJCT4NCiAJCQkJCTxGaWxlQ29uZmlndXJh
dGlvbg0KIAkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KQEAgLTM5NzAzLDE2ICszOTcxNiw4IEBA
CiAJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCi0J
CQkJCVJlbGF0aXZlUGF0aD0iLi5cYmluZGluZ3NcanNcSlNTVkdQT0RMaXN0Q3VzdG9tLmgiDQor
CQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXEpTU1ZHUGF0aFNlZ0xpc3RDdXN0b20u
Y3BwIg0KIAkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXGJpbmRpbmdzXGpzXEpTU1ZHUE9EVHlwZVdyYXBwZXIuaCINCi0JCQkJCT4NCi0JCQkJ
PC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxiaW5kaW5nc1xqc1xK
U1NjcmlwdFByb2ZpbGVOb2RlQ3VzdG9tLmNwcCINCi0JCQkJCT4NCiAJCQkJCTxGaWxlQ29uZmln
dXJhdGlvbg0KIAkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KIAkJCQkJCUV4Y2x1ZGVkRnJvbUJ1
aWxkPSJ0cnVlIg0KQEAgLTM5NzYzLDYgKzM5NzY4LDE0IEBACiAJCQkJCTwvRmlsZUNvbmZpZ3Vy
YXRpb24+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5c
YmluZGluZ3NcanNcSlNTVkdQT0RMaXN0Q3VzdG9tLmgiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4N
CisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cYmluZGluZ3NcanNcSlNTVkdQT0RU
eXBlV3JhcHBlci5oIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQogCQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXEpTVGV4dEN1c3RvbS5jcHAiDQogCQkJCQk+DQog
CQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCkBAIC00MDI1MSw3ICs0MDI2NCw4IEBACiAJCQkJCTwv
RmlsZUNvbmZpZ3VyYXRpb24+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCi0JCQkJCVJlbGF0
aXZlUGF0aD0iLi5cYmluZGluZ3NcanNcSlNXb3JrZXJDb250ZXh0RXJyb3JIYW5kbGVyLmNwcCIg
Pg0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxiaW5kaW5nc1xqc1xKU1dvcmtlckNvbnRleHRFcnJv
ckhhbmRsZXIuY3BwIg0KKwkJCQkJPg0KIAkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQogCQkJCQkJ
TmFtZT0iRGVidWd8V2luMzIiDQogCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQpJbmRl
eDogV2ViQ29yZS9XZWJjb3JlLnZjcHJvai9RVE1vdmllV2luLnZjcHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL1dlYmNvcmUudmNwcm9qL1FUTW92aWVXaW4udmNwcm9qCShyZXZpc2lvbiA1ODE4
NykKKysrIFdlYkNvcmUvV2ViY29yZS52Y3Byb2ovUVRNb3ZpZVdpbi52Y3Byb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTU1LDcgKzU1LDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNM
aW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJRVE1MQ2xpZW50LmxpYiBX
VEYkKFdlYktpdENvbmZpZ1N1ZmZpeCkubGliIHdpbm1tLmxpYiBwdGhyZWFkVkMyJChMaWJyYXJ5
Q29uZmlnU3VmZml4KS5saWIgTXNpbWczMi5saWIgdXNlcjMyLmxpYiBhZHZhcGkzMi5saWIiDQor
CQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IlFUTUxDbGllbnQubGliIENWQ2xpZW50LmxpYiBX
VEYkKFdlYktpdENvbmZpZ1N1ZmZpeCkubGliIHdpbm1tLmxpYiBwdGhyZWFkVkMyJChMaWJyYXJ5
Q29uZmlnU3VmZml4KS5saWIgTXNpbWczMi5saWIgdXNlcjMyLmxpYiBhZHZhcGkzMi5saWIiDQog
CQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVwkKFByb2plY3ROYW1lKSQoV2ViS2l0Q29uZmlnU3Vm
Zml4KS5kbGwiDQogCQkJCUFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM9IiZxdW90OyQoV2Vi
S2l0TGlicmFyaWVzRGlyKVxRVEludGVybmFsU0RLXExpYnJhcmllcyZxdW90OzsmcXVvdDskKFdl
YktpdExpYnJhcmllc0RpcilcUXVpY2tUaW1lIFNES1xMaWJyYXJpZXMmcXVvdDs7JnF1b3Q7JChQ
cm9ncmFtRmlsZXMpXFF1aWNrVGltZSBTREtcTGlicmFyaWVzJnF1b3Q7Ig0KIAkJCQlJZ25vcmVE
ZWZhdWx0TGlicmFyeU5hbWVzPSJMSUJDTVQiDQpAQCAtODQsNyArODQsNyBAQAogCQkJLz4NCiAJ
CQk8VG9vbA0KIAkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExp
bmU9Im1rZGlyIDImZ3Q7TlVMICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXFFUTW92
aWVXaW4mcXVvdDsmI3gwRDsmI3gwQTt4Y29weSAveSAvZCAmcXVvdDskKFByb2plY3REaXIpLi5c
cGxhdGZvcm1cZ3JhcGhpY3Ncd2luXFFUTW92aWVXaW4uaCZxdW90OyAmcXVvdDskKFdlYktpdE91
dHB1dERpcilcaW5jbHVkZVxRVE1vdmllV2luJnF1b3Q7JiN4MEQ7JiN4MEE7JiN4MEQ7JiN4MEE7
aWYgZXhpc3QgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGJ1aWxkZmFpbGVkJnF1b3Q7IGRlbCAm
cXVvdDskKFdlYktpdE91dHB1dERpcilcYnVpbGRmYWlsZWQmcXVvdDsmI3gwRDsmI3gwQTsiDQor
CQkJCUNvbW1hbmRMaW5lPSJta2RpciAyJmd0O05VTCAmcXVvdDskKFdlYktpdE91dHB1dERpcilc
aW5jbHVkZVxRVE1vdmllV2luJnF1b3Q7JiN4MEQ7JiN4MEE7eGNvcHkgL3kgL2QgJnF1b3Q7JChQ
cm9qZWN0RGlyKS4uXHBsYXRmb3JtXGdyYXBoaWNzXHdpblxRVENGRGljdGlvbmFyeS5oJnF1b3Q7
ICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXFFUTW92aWVXaW4mcXVvdDsmI3gwRDsm
I3gwQTt4Y29weSAveSAvZCAmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cZ3JhcGhpY3Nc
d2luXFFUTW92aWUuaCZxdW90OyAmcXVvdDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxRVE1v
dmllV2luJnF1b3Q7JiN4MEQ7JiN4MEE7eGNvcHkgL3kgL2QgJnF1b3Q7JChQcm9qZWN0RGlyKS4u
XHBsYXRmb3JtXGdyYXBoaWNzXHdpblxRVE1vdmllVGFzay5oJnF1b3Q7ICZxdW90OyQoV2ViS2l0
T3V0cHV0RGlyKVxpbmNsdWRlXFFUTW92aWVXaW4mcXVvdDsmI3gwRDsmI3gwQTt4Y29weSAveSAv
ZCAmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2luXFFUTW92aWVWaXN1
YWxDb250ZXh0LmgmcXVvdDsgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVcUVRNb3Zp
ZVdpbiZxdW90OyYjeDBEOyYjeDBBO3hjb3B5IC95IC9kICZxdW90OyQoUHJvamVjdERpcikuLlxw
bGF0Zm9ybVxncmFwaGljc1x3aW5cUVRNb3ZpZVdpbi5oJnF1b3Q7ICZxdW90OyQoV2ViS2l0T3V0
cHV0RGlyKVxpbmNsdWRlXFFUTW92aWVXaW4mcXVvdDsmI3gwRDsmI3gwQTt4Y29weSAveSAvZCAm
cXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2luXFFUUGl4ZWxCdWZmZXIu
aCZxdW90OyAmcXVvdDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxRVE1vdmllV2luJnF1b3Q7
JiN4MEQ7JiN4MEE7JiN4MEQ7JiN4MEE7aWYgZXhpc3QgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIp
XGJ1aWxkZmFpbGVkJnF1b3Q7IGRlbCAmcXVvdDskKFdlYktpdE91dHB1dERpcilcYnVpbGRmYWls
ZWQmcXVvdDsmI3gwRDsmI3gwQTsiDQogCQkJLz4NCiAJCTwvQ29uZmlndXJhdGlvbj4NCiAJCTxD
b25maWd1cmF0aW9uDQpAQCAtMTI4LDcgKzEyOCw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJ
CU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iUVRNTENs
aWVudC5saWIgV1RGJChXZWJLaXRDb25maWdTdWZmaXgpLmxpYiB3aW5tbS5saWIgcHRocmVhZFZD
MiQoTGlicmFyeUNvbmZpZ1N1ZmZpeCkubGliIE1zaW1nMzIubGliIHVzZXIzMi5saWIgYWR2YXBp
MzIubGliIg0KKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJRVE1MQ2xpZW50LmxpYiBDVkNs
aWVudC5saWIgV1RGJChXZWJLaXRDb25maWdTdWZmaXgpLmxpYiB3aW5tbS5saWIgcHRocmVhZFZD
MiQoTGlicmFyeUNvbmZpZ1N1ZmZpeCkubGliIE1zaW1nMzIubGliIHVzZXIzMi5saWIgYWR2YXBp
MzIubGliIg0KIAkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcJChQcm9qZWN0TmFtZSkkKFdlYktp
dENvbmZpZ1N1ZmZpeCkuZGxsIg0KIAkJCQlBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPSIm
cXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcUVRJbnRlcm5hbFNES1xMaWJyYXJpZXMmcXVvdDs7
JnF1b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIpXFF1aWNrVGltZSBTREtcTGlicmFyaWVzJnF1b3Q7
OyZxdW90OyQoUHJvZ3JhbUZpbGVzKVxRdWlja1RpbWUgU0RLXExpYnJhcmllcyZxdW90OyINCiAJ
CQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0iTElCQ01UIg0KQEAgLTE1Nyw3ICsxNTcsNyBA
QAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0J
CQkJQ29tbWFuZExpbmU9Im1rZGlyIDImZ3Q7TlVMICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxp
bmNsdWRlXFFUTW92aWVXaW4mcXVvdDsmI3gwRDsmI3gwQTt4Y29weSAveSAvZCAmcXVvdDskKFBy
b2plY3REaXIpLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2luXFFUTW92aWVXaW4uaCZxdW90OyAmcXVv
dDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxRVE1vdmllV2luJnF1b3Q7JiN4MEQ7JiN4MEE7
JiN4MEQ7JiN4MEE7aWYgZXhpc3QgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGJ1aWxkZmFpbGVk
JnF1b3Q7IGRlbCAmcXVvdDskKFdlYktpdE91dHB1dERpcilcYnVpbGRmYWlsZWQmcXVvdDsmI3gw
RDsmI3gwQTsiDQorCQkJCUNvbW1hbmRMaW5lPSJta2RpciAyJmd0O05VTCAmcXVvdDskKFdlYktp
dE91dHB1dERpcilcaW5jbHVkZVxRVE1vdmllV2luJnF1b3Q7JiN4MEQ7JiN4MEE7eGNvcHkgL3kg
L2QgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXGdyYXBoaWNzXHdpblxRVENGRGljdGlv
bmFyeS5oJnF1b3Q7ICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXFFUTW92aWVXaW4m
cXVvdDsmI3gwRDsmI3gwQTt4Y29weSAveSAvZCAmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZv
cm1cZ3JhcGhpY3Ncd2luXFFUTW92aWUuaCZxdW90OyAmcXVvdDskKFdlYktpdE91dHB1dERpcilc
aW5jbHVkZVxRVE1vdmllV2luJnF1b3Q7JiN4MEQ7JiN4MEE7eGNvcHkgL3kgL2QgJnF1b3Q7JChQ
cm9qZWN0RGlyKS4uXHBsYXRmb3JtXGdyYXBoaWNzXHdpblxRVE1vdmllVGFzay5oJnF1b3Q7ICZx
dW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXFFUTW92aWVXaW4mcXVvdDsmI3gwRDsmI3gw
QTt4Y29weSAveSAvZCAmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2lu
XFFUTW92aWVWaXN1YWxDb250ZXh0LmgmcXVvdDsgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGlu
Y2x1ZGVcUVRNb3ZpZVdpbiZxdW90OyYjeDBEOyYjeDBBO3hjb3B5IC95IC9kICZxdW90OyQoUHJv
amVjdERpcikuLlxwbGF0Zm9ybVxncmFwaGljc1x3aW5cUVRNb3ZpZVdpbi5oJnF1b3Q7ICZxdW90
OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXFFUTW92aWVXaW4mcXVvdDsmI3gwRDsmI3gwQTt4
Y29weSAveSAvZCAmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2luXFFU
UGl4ZWxCdWZmZXIuaCZxdW90OyAmcXVvdDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxRVE1v
dmllV2luJnF1b3Q7JiN4MEQ7JiN4MEE7JiN4MEQ7JiN4MEE7aWYgZXhpc3QgJnF1b3Q7JChXZWJL
aXRPdXRwdXREaXIpXGJ1aWxkZmFpbGVkJnF1b3Q7IGRlbCAmcXVvdDskKFdlYktpdE91dHB1dERp
cilcYnVpbGRmYWlsZWQmcXVvdDsmI3gwRDsmI3gwQTsiDQogCQkJLz4NCiAJCTwvQ29uZmlndXJh
dGlvbj4NCiAJCTxDb25maWd1cmF0aW9uDQpAQCAtMjAwLDcgKzIwMCw3IEBACiAJCQkvPg0KIAkJ
CTxUb29sDQogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVu
Y2llcz0iUVRNTENsaWVudC5saWIgV1RGJChXZWJLaXRDb25maWdTdWZmaXgpLmxpYiB3aW5tbS5s
aWIgcHRocmVhZFZDMiQoTGlicmFyeUNvbmZpZ1N1ZmZpeCkubGliIE1zaW1nMzIubGliIHVzZXIz
Mi5saWIgYWR2YXBpMzIubGliIg0KKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJRVE1MQ2xp
ZW50LmxpYiBDVkNsaWVudC5saWIgV1RGJChXZWJLaXRDb25maWdTdWZmaXgpLmxpYiB3aW5tbS5s
aWIgcHRocmVhZFZDMiQoTGlicmFyeUNvbmZpZ1N1ZmZpeCkubGliIE1zaW1nMzIubGliIHVzZXIz
Mi5saWIgYWR2YXBpMzIubGliIg0KIAkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcJChQcm9qZWN0
TmFtZSkkKFdlYktpdENvbmZpZ1N1ZmZpeCkuZGxsIg0KIAkJCQlBZGRpdGlvbmFsTGlicmFyeURp
cmVjdG9yaWVzPSImcXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcUVRJbnRlcm5hbFNES1xMaWJy
YXJpZXMmcXVvdDs7JnF1b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIpXFF1aWNrVGltZSBTREtcTGli
cmFyaWVzJnF1b3Q7OyZxdW90OyQoUHJvZ3JhbUZpbGVzKVxRdWlja1RpbWUgU0RLXExpYnJhcmll
cyZxdW90OyINCiAJCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0iTElCQ01UIg0KQEAgLTIy
OSw3ICsyMjksNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2
ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9Im1rZGlyIDImZ3Q7TlVMICZxdW90OyQoV2ViS2l0
T3V0cHV0RGlyKVxpbmNsdWRlXFFUTW92aWVXaW4mcXVvdDsmI3gwRDsmI3gwQTt4Y29weSAveSAv
ZCAmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2luXFFUTW92aWVXaW4u
aCZxdW90OyAmcXVvdDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxRVE1vdmllV2luJnF1b3Q7
JiN4MEQ7JiN4MEE7JiN4MEQ7JiN4MEE7aWYgZXhpc3QgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIp
XGJ1aWxkZmFpbGVkJnF1b3Q7IGRlbCAmcXVvdDskKFdlYktpdE91dHB1dERpcilcYnVpbGRmYWls
ZWQmcXVvdDsmI3gwRDsmI3gwQTsiDQorCQkJCUNvbW1hbmRMaW5lPSJta2RpciAyJmd0O05VTCAm
cXVvdDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxRVE1vdmllV2luJnF1b3Q7JiN4MEQ7JiN4
MEE7eGNvcHkgL3kgL2QgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXGdyYXBoaWNzXHdp
blxRVENGRGljdGlvbmFyeS5oJnF1b3Q7ICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRl
XFFUTW92aWVXaW4mcXVvdDsmI3gwRDsmI3gwQTt4Y29weSAveSAvZCAmcXVvdDskKFByb2plY3RE
aXIpLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2luXFFUTW92aWUuaCZxdW90OyAmcXVvdDskKFdlYktp
dE91dHB1dERpcilcaW5jbHVkZVxRVE1vdmllV2luJnF1b3Q7JiN4MEQ7JiN4MEE7eGNvcHkgL3kg
L2QgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXGdyYXBoaWNzXHdpblxRVE1vdmllVGFz
ay5oJnF1b3Q7ICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXFFUTW92aWVXaW4mcXVv
dDsmI3gwRDsmI3gwQTt4Y29weSAveSAvZCAmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1c
Z3JhcGhpY3Ncd2luXFFUTW92aWVWaXN1YWxDb250ZXh0LmgmcXVvdDsgJnF1b3Q7JChXZWJLaXRP
dXRwdXREaXIpXGluY2x1ZGVcUVRNb3ZpZVdpbiZxdW90OyYjeDBEOyYjeDBBO3hjb3B5IC95IC9k
ICZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxncmFwaGljc1x3aW5cUVRNb3ZpZVdpbi5o
JnF1b3Q7ICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXFFUTW92aWVXaW4mcXVvdDsm
I3gwRDsmI3gwQTt4Y29weSAveSAvZCAmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cZ3Jh
cGhpY3Ncd2luXFFUUGl4ZWxCdWZmZXIuaCZxdW90OyAmcXVvdDskKFdlYktpdE91dHB1dERpcilc
aW5jbHVkZVxRVE1vdmllV2luJnF1b3Q7JiN4MEQ7JiN4MEE7JiN4MEQ7JiN4MEE7aWYgZXhpc3Qg
JnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGJ1aWxkZmFpbGVkJnF1b3Q7IGRlbCAmcXVvdDskKFdl
YktpdE91dHB1dERpcilcYnVpbGRmYWlsZWQmcXVvdDsmI3gwRDsmI3gwQTsiDQogCQkJLz4NCiAJ
CTwvQ29uZmlndXJhdGlvbj4NCiAJCTxDb25maWd1cmF0aW9uDQpAQCAtMjU2LDcgKzI1Niw3IEBA
CiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFk
ZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiZxdW90OyQoUHJvamVjdERpcikuLlwmcXVvdDs7
JnF1b3Q7JChQcm9qZWN0RGlyKS4uXEZvcndhcmRpbmdIZWFkZXJzJnF1b3Q7OyZxdW90OyQoV2Vi
S2l0TGlicmFyaWVzRGlyKVxJbmNsdWRlXEphdmFTY3JpcHRDb3JlJnF1b3Q7OyZxdW90OyQoV2Vi
S2l0TGlicmFyaWVzRGlyKVxpbmNsdWRlXHByaXZhdGVcSmF2YVNjcmlwdENvcmUmcXVvdDs7JnF1
b3Q7JChXZWJLaXRPdXRwdXREaXIpXEluY2x1ZGVcSmF2YVNjcmlwdENvcmUmcXVvdDs7JnF1b3Q7
JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVccHJpdmF0ZVxKYXZhU2NyaXB0Q29yZSZxdW90Ozsm
cXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcSW5jbHVkZVxXZWJDb3JlXEZvcndhcmRpbmdIZWFk
ZXJzJnF1b3Q7OyZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxJbmNsdWRlXFdlYkNvcmVcRm9yd2Fy
ZGluZ0hlYWRlcnMmcXVvdDs7JnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXEluY2x1ZGUmcXVvdDs7
JnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXEluY2x1ZGVccHJpdmF0ZSZxdW90OzsmcXVvdDskKFdl
YktpdExpYnJhcmllc0RpcilcUVRJbnRlcm5hbFNES1xDSW5jbHVkZXMmcXVvdDs7JnF1b3Q7JChX
ZWJLaXRMaWJyYXJpZXNEaXIpXFF1aWNrVGltZSBTREtcQ0luY2x1ZGVzJnF1b3Q7OyZxdW90OyQo
UHJvZ3JhbUZpbGVzKS9RdWlja1RpbWUgU0RLL2NpbmNsdWRlcyZxdW90OzsmcXVvdDskKFdlYktp
dExpYnJhcmllc0RpcilcaW5jbHVkZSZxdW90OzsmcXVvdDskKFdlYktpdExpYnJhcmllc0Rpcilc
aW5jbHVkZVxwcml2YXRlJnF1b3Q7Ig0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVz
PSImcXVvdDskKFByb2plY3REaXIpLi5cJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxGb3J3
YXJkaW5nSGVhZGVycyZxdW90OzsmcXVvdDskKFByb2dyYW1GaWxlcykvUXVpY2tUaW1lIFNESy9j
aW5jbHVkZXMmcXVvdDs7JnF1b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIpXEluY2x1ZGVcSmF2YVNj
cmlwdENvcmUmcXVvdDs7JnF1b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIpXGluY2x1ZGVccHJpdmF0
ZVxKYXZhU2NyaXB0Q29yZSZxdW90OzsmcXVvdDskKFdlYktpdE91dHB1dERpcilcSW5jbHVkZVxK
YXZhU2NyaXB0Q29yZSZxdW90OzsmcXVvdDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxwcml2
YXRlXEphdmFTY3JpcHRDb3JlJnF1b3Q7OyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxJbmNs
dWRlXFdlYkNvcmVcRm9yd2FyZGluZ0hlYWRlcnMmcXVvdDs7JnF1b3Q7JChXZWJLaXRPdXRwdXRE
aXIpXEluY2x1ZGVcV2ViQ29yZVxGb3J3YXJkaW5nSGVhZGVycyZxdW90OzsmcXVvdDskKFdlYktp
dE91dHB1dERpcilcSW5jbHVkZSZxdW90OzsmcXVvdDskKFdlYktpdE91dHB1dERpcilcSW5jbHVk
ZVxwcml2YXRlJnF1b3Q7OyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxRVEludGVybmFsU0RL
XENJbmNsdWRlcyZxdW90OzsmcXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcUXVpY2tUaW1lIFNE
S1xDSW5jbHVkZXMmcXVvdDs7JnF1b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIpXGluY2x1ZGUmcXVv
dDs7JnF1b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIpXGluY2x1ZGVccHJpdmF0ZSZxdW90OyINCiAJ
CQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9VU1JETEw7UVRNT1ZJRVdJTl9FWFBPUlRTIg0K
IAkJCQlEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz0iNDgxOSINCiAJCQkvPg0KQEAgLTI3Miw3ICsy
NzIsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJ
CUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IlFUTUxDbGllbnQubGliIFdURiQoV2ViS2l0Q29uZmln
U3VmZml4KS5saWIgd2lubW0ubGliIHB0aHJlYWRWQzIkKExpYnJhcnlDb25maWdTdWZmaXgpLmxp
YiBNc2ltZzMyLmxpYiB1c2VyMzIubGliIGFkdmFwaTMyLmxpYiINCisJCQkJQWRkaXRpb25hbERl
cGVuZGVuY2llcz0iUVRNTENsaWVudC5saWIgQ1ZDbGllbnQubGliIENvcmVHcmFwaGljcy5saWIg
V1RGJChXZWJLaXRDb25maWdTdWZmaXgpLmxpYiB3aW5tbS5saWIgcHRocmVhZFZDMiQoTGlicmFy
eUNvbmZpZ1N1ZmZpeCkubGliIE1zaW1nMzIubGliIHVzZXIzMi5saWIgYWR2YXBpMzIubGliIg0K
IAkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcJChQcm9qZWN0TmFtZSkkKFdlYktpdENvbmZpZ1N1
ZmZpeCkuZGxsIg0KIAkJCQlBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPSImcXVvdDskKFdl
YktpdExpYnJhcmllc0RpcilcUVRJbnRlcm5hbFNES1xMaWJyYXJpZXMmcXVvdDs7JnF1b3Q7JChX
ZWJLaXRMaWJyYXJpZXNEaXIpXFF1aWNrVGltZSBTREtcTGlicmFyaWVzJnF1b3Q7OyZxdW90OyQo
UHJvZ3JhbUZpbGVzKVxRdWlja1RpbWUgU0RLXExpYnJhcmllcyZxdW90OyINCiAJCQkJSWdub3Jl
RGVmYXVsdExpYnJhcnlOYW1lcz0iTElCQ01UIg0KQEAgLTMwMSw3ICszMDEsNyBAQAogCQkJLz4N
CiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkJQ29tbWFu
ZExpbmU9Im1rZGlyIDImZ3Q7TlVMICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXFFU
TW92aWVXaW4mcXVvdDsmI3gwRDsmI3gwQTt4Y29weSAveSAvZCAmcXVvdDskKFByb2plY3REaXIp
Li5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2luXFFUTW92aWVXaW4uaCZxdW90OyAmcXVvdDskKFdlYktp
dE91dHB1dERpcilcaW5jbHVkZVxRVE1vdmllV2luJnF1b3Q7JiN4MEQ7JiN4MEE7JiN4MEQ7JiN4
MEE7aWYgZXhpc3QgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGJ1aWxkZmFpbGVkJnF1b3Q7IGRl
bCAmcXVvdDskKFdlYktpdE91dHB1dERpcilcYnVpbGRmYWlsZWQmcXVvdDsmI3gwRDsmI3gwQTsi
DQorCQkJCUNvbW1hbmRMaW5lPSJta2RpciAyJmd0O05VTCAmcXVvdDskKFdlYktpdE91dHB1dERp
cilcaW5jbHVkZVxRVE1vdmllV2luJnF1b3Q7JiN4MEQ7JiN4MEE7eGNvcHkgL3kgL2QgJnF1b3Q7
JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXGdyYXBoaWNzXHdpblxRVENGRGljdGlvbmFyeS5oJnF1
b3Q7ICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXFFUTW92aWVXaW4mcXVvdDsmI3gw
RDsmI3gwQTt4Y29weSAveSAvZCAmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cZ3JhcGhp
Y3Ncd2luXFFUTW92aWUuaCZxdW90OyAmcXVvdDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxR
VE1vdmllV2luJnF1b3Q7JiN4MEQ7JiN4MEE7eGNvcHkgL3kgL2QgJnF1b3Q7JChQcm9qZWN0RGly
KS4uXHBsYXRmb3JtXGdyYXBoaWNzXHdpblxRVE1vdmllVGFzay5oJnF1b3Q7ICZxdW90OyQoV2Vi
S2l0T3V0cHV0RGlyKVxpbmNsdWRlXFFUTW92aWVXaW4mcXVvdDsmI3gwRDsmI3gwQTt4Y29weSAv
eSAvZCAmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2luXFFUTW92aWVW
aXN1YWxDb250ZXh0LmgmcXVvdDsgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVcUVRN
b3ZpZVdpbiZxdW90OyYjeDBEOyYjeDBBO3hjb3B5IC95IC9kICZxdW90OyQoUHJvamVjdERpciku
LlxwbGF0Zm9ybVxncmFwaGljc1x3aW5cUVRNb3ZpZVdpbi5oJnF1b3Q7ICZxdW90OyQoV2ViS2l0
T3V0cHV0RGlyKVxpbmNsdWRlXFFUTW92aWVXaW4mcXVvdDsmI3gwRDsmI3gwQTt4Y29weSAveSAv
ZCAmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2luXFFUUGl4ZWxCdWZm
ZXIuaCZxdW90OyAmcXVvdDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxRVE1vdmllV2luJnF1
b3Q7JiN4MEQ7JiN4MEE7JiN4MEQ7JiN4MEE7aWYgZXhpc3QgJnF1b3Q7JChXZWJLaXRPdXRwdXRE
aXIpXGJ1aWxkZmFpbGVkJnF1b3Q7IGRlbCAmcXVvdDskKFdlYktpdE91dHB1dERpcilcYnVpbGRm
YWlsZWQmcXVvdDsmI3gwRDsmI3gwQTsiDQogCQkJLz4NCiAJCTwvQ29uZmlndXJhdGlvbj4NCiAJ
PC9Db25maWd1cmF0aW9ucz4NCkBAIC0zMTQsNiArMzE0LDIyIEBACiAJCQlVbmlxdWVJZGVudGlm
aWVyPSJ7NEZDNzM3RjEtQzdBNS00Mzc2LUEwNjYtMkEzMkQ3NTJBMkZGfSINCiAJCQk+DQogCQkJ
PEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1x3aW5cUVRDRkRp
Y3Rpb25hcnkuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0
aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2luXFFUTW92aWUuY3BwIg0KKwkJCQk+DQor
CQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3Jh
cGhpY3Ncd2luXFFUTW92aWVUYXNrLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8Rmls
ZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXHdpblxRVE1vdmllVmlz
dWFsQ29udGV4dC5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVs
YXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1x3aW5cUVRNb3ZpZVdpbi5jcHAiDQogCQkJ
CT4NCiAJCQk8L0ZpbGU+DQpAQCAtMzIxLDYgKzMzNywxMCBAQAogCQkJCVJlbGF0aXZlUGF0aD0i
Li5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2luXFFUTW92aWVXaW5UaW1lci5jcHAiDQogCQkJCT4NCiAJ
CQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFw
aGljc1x3aW5cUVRQaXhlbEJ1ZmZlci5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQogCQk8L0Zp
bHRlcj4NCiAJCTxGaWx0ZXINCiAJCQlOYW1lPSJIZWFkZXIgRmlsZXMiDQpAQCAtMzI4LDYgKzM0
OCwyMiBAQAogCQkJVW5pcXVlSWRlbnRpZmllcj0iezkzOTk1MzgwLTg5QkQtNGIwNC04OEVCLTYy
NUZCRTUyRUJGQn0iDQogCQkJPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxh
dGZvcm1cZ3JhcGhpY3Ncd2luXFFUQ0ZEaWN0aW9uYXJ5LmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+
DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1x3aW5c
UVRNb3ZpZS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZl
UGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2luXFFUTW92aWVUYXNrLmgiDQorCQkJCT4NCisJ
CQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFw
aGljc1x3aW5cUVRNb3ZpZVZpc3VhbENvbnRleHQuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJ
CQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXHdpblxRVE1v
dmllV2luLmgiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpAQCAtMzM1LDYgKzM3MSwxMCBAQAogCQkJ
CVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2luXFFUTW92aWVXaW5UaW1lci5o
Ig0KIAkJCQk+DQogCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5c
cGxhdGZvcm1cZ3JhcGhpY3Ncd2luXFFUUGl4ZWxCdWZmZXIuaCINCisJCQkJPg0KKwkJCTwvRmls
ZT4NCiAJCTwvRmlsdGVyPg0KIAkJPEZpbHRlcg0KIAkJCU5hbWU9IlJlc291cmNlIEZpbGVzIg0K
</data>
<flag name="review"
          id="38611"
          type_id="1"
          status="+"
          setter="eric.carlson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54594</attachid>
            <date>2010-04-28 11:29:18 -0700</date>
            <delta_ts>2010-04-28 11:44:40 -0700</delta_ts>
            <desc>Part 1.1: QTMovieWin: The breakup of QTMovieWin</desc>
            <filename>7569713-QTMovieWin-Breakup.patch</filename>
            <type>text/plain</type>
            <size>119831</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWUuY3BwCShyZXZpc2lv
biA1ODE4NykJKGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRNb3ZpZVdpbi5j
cHA6NTgxODcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVE1vdmllLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJRVE1vdmllV2luLmgiCisKKy8v
IFB1dCBNb3ZpZXMuaCBmaXJzdCBzbyBidWlsZCBmYWlsdXJlcyBoZXJlIHBvaW50IGNsZWFybHkg
dG8gUXVpY2tUaW1lCisjaW5jbHVkZSA8TW92aWVzLmg+CisKKyNpbmNsdWRlICJRVE1vdmllV2lu
VGltZXIuaCIKKyNpbmNsdWRlIDxHWE1hdGguaD4KKyNpbmNsdWRlIDxRVE1MLmg+CisjaW5jbHVk
ZSA8UXVpY2tUaW1lQ29tcG9uZW50cy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Cisj
aW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK3N0YXRpYyBj
b25zdCBsb25nIG1pbmltdW1RdWlja1RpbWVWZXJzaW9uID0gMHgwNzMwMDAwMDsgLy8gNy4zCisK
K3N0YXRpYyBjb25zdCBsb25nIGNsb3NlZENhcHRpb25UcmFja1R5cGUgPSAnY2xjcCc7CitzdGF0
aWMgY29uc3QgbG9uZyBzdWJUaXRsZVRyYWNrVHlwZSA9ICdzYnRsJzsKK3N0YXRpYyBjb25zdCBs
b25nIG1wZWc0T2JqZWN0RGVzY3JpcHRpb25UcmFja1R5cGUgPSAnb2RzbSc7CitzdGF0aWMgY29u
c3QgbG9uZyBtcGVnNFNjZW5lRGVzY3JpcHRpb25UcmFja1R5cGUgPSAnc2RzbSc7CitzdGF0aWMg
Y29uc3QgbG9uZyBjbG9zZWRDYXB0aW9uRGlzcGxheVByb3BlcnR5SUQgPSAnZGlzcCc7CitzdGF0
aWMgTFBDVFNUUiBmdWxsc2NyZWVuUVRNb3ZpZVdpblBvaW50ZXJQcm9wID0gVEVYVCgiZnVsbHNj
cmVlblFUTW92aWVXaW5Qb2ludGVyIik7CisKKy8vIFJlc2l6aW5nIEdXb3JsZHMgaXMgc2xvdywg
Z2l2ZSB0aGVtIGEgbWluaW11bSBzaXplIHNvIHNpemUgb2Ygc21hbGwgCisvLyB2aWRlb3MgY2Fu
IGJlIGFuaW1hdGVkIHNtb290aGx5CitzdGF0aWMgY29uc3QgaW50IGNHV29ybGRNaW5XaWR0aCA9
IDY0MDsKK3N0YXRpYyBjb25zdCBpbnQgY0dXb3JsZE1pbkhlaWdodCA9IDM2MDsKKworc3RhdGlj
IGNvbnN0IGZsb2F0IGNOb25Db250aW51b3VzVGltZUNoYW5nZSA9IDAuMmY7CisKK3VuaW9uIFVw
cFBhcmFtIHsKKyAgICBsb25nIGxvbmdWYWx1ZTsKKyAgICB2b2lkKiBwdHI7Cit9OworCitzdGF0
aWMgTW92aWVEcmF3aW5nQ29tcGxldGVVUFAgZ01vdmllRHJhd2luZ0NvbXBsZXRlVVBQID0gMDsK
K3N0YXRpYyBIYXNoU2V0PFFUTW92aWVXaW5Qcml2YXRlKj4qIGdUYXNrTGlzdDsKK3N0YXRpYyBW
ZWN0b3I8Q0ZTdHJpbmdSZWY+KiBnU3VwcG9ydGVkVHlwZXMgPSAwOworc3RhdGljIFNJbnQzMiBx
dWlja1RpbWVWZXJzaW9uID0gMDsKKworc3RhdGljIFFUTW92aWVXaW46OlNldFRhc2tUaW1lckRl
bGF5RnVuYyBnU2V0VGFza1RpbWVyRGVsYXkgPSAwOworc3RhdGljIFFUTW92aWVXaW46OlN0b3BU
YXNrVGltZXJGdW5jIGdTdG9wVGFza1RpbWVyID0gMDsKKworc3RhdGljIHZvaWQgdXBkYXRlVGFz
a1RpbWVyKGludCBtYXhJbnRlcnZhbCA9IDEwMDApCit7CisgICAgaWYgKCFnVGFza0xpc3QtPnNp
emUoKSkgeworICAgICAgICBnU3RvcFRhc2tUaW1lcigpOworICAgICAgICByZXR1cm47ICAgIAor
ICAgIH0KKyAgICAKKyAgICBsb25nIGludGVydmFsSW5NUzsKKyAgICBRVEdldFRpbWVVbnRpbE5l
eHRUYXNrKCZpbnRlcnZhbEluTVMsIDEwMDApOworICAgIGlmIChpbnRlcnZhbEluTVMgPiBtYXhJ
bnRlcnZhbCkKKyAgICAgICAgaW50ZXJ2YWxJbk1TID0gbWF4SW50ZXJ2YWw7CisgICAgZ1NldFRh
c2tUaW1lckRlbGF5KHN0YXRpY19jYXN0PGZsb2F0PihpbnRlcnZhbEluTVMpIC8gMTAwMCk7Cit9
CisKK2NsYXNzIFFUTW92aWVXaW5Qcml2YXRlIDogcHVibGljIE5vbmNvcHlhYmxlIHsKK3B1Ymxp
YzoKKyAgICBRVE1vdmllV2luUHJpdmF0ZSgpOworICAgIH5RVE1vdmllV2luUHJpdmF0ZSgpOwor
ICAgIHZvaWQgdGFzaygpOworICAgIHZvaWQgc3RhcnRUYXNrKCk7CisgICAgdm9pZCBlbmRUYXNr
KCk7CisKKyAgICB2b2lkIGNyZWF0ZU1vdmllQ29udHJvbGxlcigpOworICAgIHZvaWQgcmVnaXN0
ZXJEcmF3aW5nQ2FsbGJhY2soKTsKKyAgICB2b2lkIGRyYXdpbmdDb21wbGV0ZSgpOworICAgIHZv
aWQgdXBkYXRlR1dvcmxkKCk7CisgICAgdm9pZCBjcmVhdGVHV29ybGQoKTsKKyAgICB2b2lkIGRl
bGV0ZUdXb3JsZCgpOworICAgIHZvaWQgY2xlYXJHV29ybGQoKTsKKyAgICB2b2lkIGNhY2hlTW92
aWVTY2FsZSgpOworICAgIHZvaWQgdXBkYXRlTW92aWVTaXplKCk7CisKKyAgICB2b2lkIHNldFNp
emUoaW50LCBpbnQpOworCisgICAgUVRNb3ZpZVdpbiogbV9tb3ZpZVdpbjsKKyAgICBNb3ZpZSBt
X21vdmllOworICAgIE1vdmllQ29udHJvbGxlciBtX21vdmllQ29udHJvbGxlcjsKKyAgICBib29s
IG1fdGFza2luZzsKKyAgICBRVE1vdmllV2luQ2xpZW50KiBtX2NsaWVudDsKKyAgICBsb25nIG1f
bG9hZFN0YXRlOworICAgIGJvb2wgbV9lbmRlZDsKKyAgICBib29sIG1fc2Vla2luZzsKKyAgICBm
bG9hdCBtX2xhc3RNZWRpYVRpbWU7CisgICAgZG91YmxlIG1fbGFzdExvYWRTdGF0ZUNoZWNrVGlt
ZTsKKyAgICBpbnQgbV93aWR0aDsKKyAgICBpbnQgbV9oZWlnaHQ7CisgICAgYm9vbCBtX3Zpc2li
bGU7CisgICAgR1dvcmxkUHRyIG1fZ1dvcmxkOworICAgIGludCBtX2dXb3JsZFdpZHRoOworICAg
IGludCBtX2dXb3JsZEhlaWdodDsKKyAgICBHV29ybGRQdHIgbV9zYXZlZEdXb3JsZDsKKyAgICBs
b25nIG1fbG9hZEVycm9yOworICAgIGZsb2F0IG1fd2lkdGhTY2FsZUZhY3RvcjsKKyAgICBmbG9h
dCBtX2hlaWdodFNjYWxlRmFjdG9yOworICAgIENGVVJMUmVmIG1fY3VycmVudFVSTDsKKyAgICBm
bG9hdCBtX3RpbWVUb1Jlc3RvcmU7CisgICAgZmxvYXQgbV9yYXRlVG9SZXN0b3JlOworI2lmICFB
U1NFUlRfRElTQUJMRUQKKyAgICBib29sIG1fc2NhbGVDYWNoZWQ7CisjZW5kaWYKKyAgICBXaW5k
b3dQdHIgbV9mdWxsc2NyZWVuV2luZG93OworICAgIEdXb3JsZFB0ciBtX2Z1bGxzY3JlZW5Pcmln
R1dvcmxkOworICAgIFJlY3QgbV9mdWxsc2NyZWVuUmVjdDsKKyAgICBRVE1vdmllV2luRnVsbHNj
cmVlbkNsaWVudCogbV9mdWxsc2NyZWVuQ2xpZW50OworICAgIGNoYXIqIG1fZnVsbHNjcmVlblJl
c3RvcmVTdGF0ZTsKK307CisKK1FUTW92aWVXaW5Qcml2YXRlOjpRVE1vdmllV2luUHJpdmF0ZSgp
CisgICAgOiBtX21vdmllV2luKDApCisgICAgLCBtX21vdmllKDApCisgICAgLCBtX21vdmllQ29u
dHJvbGxlcigwKQorICAgICwgbV90YXNraW5nKGZhbHNlKQorICAgICwgbV9jbGllbnQoMCkKKyAg
ICAsIG1fbG9hZFN0YXRlKDApCisgICAgLCBtX2VuZGVkKGZhbHNlKQorICAgICwgbV9zZWVraW5n
KGZhbHNlKQorICAgICwgbV9sYXN0TWVkaWFUaW1lKDApCisgICAgLCBtX2xhc3RMb2FkU3RhdGVD
aGVja1RpbWUoMCkKKyAgICAsIG1fd2lkdGgoMCkKKyAgICAsIG1faGVpZ2h0KDApCisgICAgLCBt
X3Zpc2libGUoZmFsc2UpCisgICAgLCBtX2dXb3JsZCgwKQorICAgICwgbV9nV29ybGRXaWR0aCgw
KQorICAgICwgbV9nV29ybGRIZWlnaHQoMCkKKyAgICAsIG1fc2F2ZWRHV29ybGQoMCkKKyAgICAs
IG1fbG9hZEVycm9yKDApCisgICAgLCBtX3dpZHRoU2NhbGVGYWN0b3IoMSkKKyAgICAsIG1faGVp
Z2h0U2NhbGVGYWN0b3IoMSkKKyAgICAsIG1fY3VycmVudFVSTCgwKQorICAgICwgbV90aW1lVG9S
ZXN0b3JlKC0xLjBmKQorICAgICwgbV9yYXRlVG9SZXN0b3JlKC0xLjBmKQorI2lmICFBU1NFUlRf
RElTQUJMRUQKKyAgICAsIG1fc2NhbGVDYWNoZWQoZmFsc2UpCisjZW5kaWYKKyAgICAsIG1fZnVs
bHNjcmVlbldpbmRvdygwKQorICAgICwgbV9mdWxsc2NyZWVuT3JpZ0dXb3JsZCgwKQorICAgICwg
bV9mdWxsc2NyZWVuQ2xpZW50KDApCisgICAgLCBtX2Z1bGxzY3JlZW5SZXN0b3JlU3RhdGUoMCkK
K3sKKyAgICBSZWN0IHJlY3QgPSB7IDAsIDAsIDAsIDAgfTsKKyAgICBtX2Z1bGxzY3JlZW5SZWN0
ID0gcmVjdDsKK30KKworUVRNb3ZpZVdpblByaXZhdGU6On5RVE1vdmllV2luUHJpdmF0ZSgpCit7
CisgICAgQVNTRVJUKCFtX2Z1bGxzY3JlZW5XaW5kb3cpOworCisgICAgZW5kVGFzaygpOworICAg
IGlmIChtX2dXb3JsZCkKKyAgICAgICAgZGVsZXRlR1dvcmxkKCk7CisgICAgaWYgKG1fbW92aWVD
b250cm9sbGVyKQorICAgICAgICBEaXNwb3NlTW92aWVDb250cm9sbGVyKG1fbW92aWVDb250cm9s
bGVyKTsKKyAgICBpZiAobV9tb3ZpZSkKKyAgICAgICAgRGlzcG9zZU1vdmllKG1fbW92aWUpOwor
ICAgIGlmIChtX2N1cnJlbnRVUkwpCisgICAgICAgIENGUmVsZWFzZShtX2N1cnJlbnRVUkwpOwor
fQorCit2b2lkIFFUTW92aWVXaW46OnRhc2tUaW1lckZpcmVkKCkKK3sKKyAgICAvLyBUaGUgaGFz
aCBjb250ZW50IG1pZ2h0IGNoYW5nZSBkdXJpbmcgdGFzaygpCisgICAgVmVjdG9yPFFUTW92aWVX
aW5Qcml2YXRlKj4gdGFza3M7CisgICAgY29weVRvVmVjdG9yKCpnVGFza0xpc3QsIHRhc2tzKTsK
KyAgICBzaXplX3QgY291bnQgPSB0YXNrcy5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBuID0g
MDsgbiA8IGNvdW50OyArK24pCisgICAgICAgIHRhc2tzW25dLT50YXNrKCk7CisKKyAgICB1cGRh
dGVUYXNrVGltZXIoKTsKK30KKwordm9pZCBRVE1vdmllV2luUHJpdmF0ZTo6c3RhcnRUYXNrKCkg
Cit7CisgICAgaWYgKG1fdGFza2luZykKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghZ1Rhc2tM
aXN0KQorICAgICAgICBnVGFza0xpc3QgPSBuZXcgSGFzaFNldDxRVE1vdmllV2luUHJpdmF0ZSo+
OworICAgIGdUYXNrTGlzdC0+YWRkKHRoaXMpOworICAgIG1fdGFza2luZyA9IHRydWU7CisgICAg
dXBkYXRlVGFza1RpbWVyKCk7Cit9CisKK3ZvaWQgUVRNb3ZpZVdpblByaXZhdGU6OmVuZFRhc2so
KSAKK3sKKyAgICBpZiAoIW1fdGFza2luZykKKyAgICAgICAgcmV0dXJuOworICAgIGdUYXNrTGlz
dC0+cmVtb3ZlKHRoaXMpOworICAgIG1fdGFza2luZyA9IGZhbHNlOworICAgIHVwZGF0ZVRhc2tU
aW1lcigpOworfQorCit2b2lkIFFUTW92aWVXaW5Qcml2YXRlOjpjYWNoZU1vdmllU2NhbGUoKQor
eworICAgIFJlY3QgbmF0dXJhbFJlY3Q7CisgICAgUmVjdCBpbml0aWFsUmVjdDsKKworICAgIEdl
dE1vdmllTmF0dXJhbEJvdW5kc1JlY3QobV9tb3ZpZSwgJm5hdHVyYWxSZWN0KTsKKyAgICBHZXRN
b3ZpZUJveChtX21vdmllLCAmaW5pdGlhbFJlY3QpOworCisgICAgZmxvYXQgbmF0dXJhbFdpZHRo
ID0gbmF0dXJhbFJlY3QucmlnaHQgLSBuYXR1cmFsUmVjdC5sZWZ0OworICAgIGZsb2F0IG5hdHVy
YWxIZWlnaHQgPSBuYXR1cmFsUmVjdC5ib3R0b20gLSBuYXR1cmFsUmVjdC50b3A7CisKKyAgICBp
ZiAobmF0dXJhbFdpZHRoKQorICAgICAgICBtX3dpZHRoU2NhbGVGYWN0b3IgPSAoaW5pdGlhbFJl
Y3QucmlnaHQgLSBpbml0aWFsUmVjdC5sZWZ0KSAvIG5hdHVyYWxXaWR0aDsKKyAgICBpZiAobmF0
dXJhbEhlaWdodCkKKyAgICAgICAgbV9oZWlnaHRTY2FsZUZhY3RvciA9IChpbml0aWFsUmVjdC5i
b3R0b20gLSBpbml0aWFsUmVjdC50b3ApIC8gbmF0dXJhbEhlaWdodDsKKyNpZiAhQVNTRVJUX0RJ
U0FCTEVECisgICAgbV9zY2FsZUNhY2hlZCA9IHRydWU7OworI2VuZGlmCit9CisKK3ZvaWQgUVRN
b3ZpZVdpblByaXZhdGU6OnRhc2soKSAKK3sKKyAgICBBU1NFUlQobV90YXNraW5nKTsKKworICAg
IGlmICghbV9sb2FkRXJyb3IpIHsKKyAgICAgICAgaWYgKG1fbW92aWVDb250cm9sbGVyKQorICAg
ICAgICAgICAgTUNJZGxlKG1fbW92aWVDb250cm9sbGVyKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgTW92aWVzVGFzayhtX21vdmllLCAwKTsKKyAgICB9CisKKyAgICAvLyBHZXRNb3ZpZUxv
YWRTdGF0ZSBkb2N1bWVudGF0aW9uIHNheXMgdGhhdCB5b3Ugc2hvdWxkIG5vdCBjYWxsIGl0IG1v
cmUgb2Z0ZW4gdGhhbiBldmVyeSBxdWFydGVyIG9mIGEgc2Vjb25kLgorICAgIGlmIChzeXN0ZW1U
aW1lKCkgPj0gbV9sYXN0TG9hZFN0YXRlQ2hlY2tUaW1lICsgMC4yNSB8fCBtX2xvYWRFcnJvcikg
eyAKKyAgICAgICAgLy8gSWYgbG9hZCBmYWlscyBRVCdzIGxvYWQgc3RhdGUgaXMgUVRNb3ZpZUxv
YWRTdGF0ZUNvbXBsZXRlLgorICAgICAgICAvLyBUaGlzIGlzIGRpZmZlcmVudCBmcm9tIFFUS2l0
IEFQSSBhbmQgc2VlbXMgc3RyYW5nZS4KKyAgICAgICAgbG9uZyBsb2FkU3RhdGUgPSBtX2xvYWRF
cnJvciA/IFFUTW92aWVMb2FkU3RhdGVFcnJvciA6IEdldE1vdmllTG9hZFN0YXRlKG1fbW92aWUp
OworICAgICAgICBpZiAobG9hZFN0YXRlICE9IG1fbG9hZFN0YXRlKSB7CisKKyAgICAgICAgICAg
IC8vIHdlIG9ubHkgbmVlZCB0byBlcmFzZSB0aGUgbW92aWUgZ3dvcmxkIHdoZW4gdGhlIGxvYWQg
c3RhdGUgY2hhbmdlcyB0byBsb2FkZWQgd2hpbGUgaXQKKyAgICAgICAgICAgIC8vICBpcyB2aXNp
YmxlIGFzIHRoZSBnd29ybGQgaXMgZGVzdHJveWVkL2NyZWF0ZWQgd2hlbiB2aXNpYmlsaXR5IGNo
YW5nZXMKKyAgICAgICAgICAgIGJvb2wgc2hvdWxkUmVzdG9yZVBsYXliYWNrU3RhdGUgPSBmYWxz
ZTsKKyAgICAgICAgICAgIGJvb2wgbW92aWVOZXdseVBsYXlhYmxlID0gbG9hZFN0YXRlID49IFFU
TW92aWVMb2FkU3RhdGVMb2FkZWQgJiYgbV9sb2FkU3RhdGUgPCBRVE1vdmllTG9hZFN0YXRlTG9h
ZGVkOworICAgICAgICAgICAgbV9sb2FkU3RhdGUgPSBsb2FkU3RhdGU7CisgICAgICAgICAgICBp
ZiAobW92aWVOZXdseVBsYXlhYmxlKSB7CisgICAgICAgICAgICAgICAgY2FjaGVNb3ZpZVNjYWxl
KCk7CisgICAgICAgICAgICAgICAgdXBkYXRlTW92aWVTaXplKCk7CisgICAgICAgICAgICAgICAg
aWYgKG1fdmlzaWJsZSkKKyAgICAgICAgICAgICAgICAgICAgY2xlYXJHV29ybGQoKTsKKyAgICAg
ICAgICAgICAgICBzaG91bGRSZXN0b3JlUGxheWJhY2tTdGF0ZSA9IHRydWU7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmICghbV9tb3ZpZUNvbnRyb2xsZXIgJiYgbV9sb2FkU3RhdGUg
Pj0gUVRNb3ZpZUxvYWRTdGF0ZUxvYWRlZCkKKyAgICAgICAgICAgICAgICBjcmVhdGVNb3ZpZUNv
bnRyb2xsZXIoKTsKKyAgICAgICAgICAgIG1fY2xpZW50LT5tb3ZpZUxvYWRTdGF0ZUNoYW5nZWQo
bV9tb3ZpZVdpbik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChzaG91bGRSZXN0b3Jl
UGxheWJhY2tTdGF0ZSAmJiBtX3RpbWVUb1Jlc3RvcmUgIT0gLTEuMGYpIHsKKyAgICAgICAgICAg
ICAgICBtX21vdmllV2luLT5zZXRDdXJyZW50VGltZShtX3RpbWVUb1Jlc3RvcmUpOworICAgICAg
ICAgICAgICAgIG1fdGltZVRvUmVzdG9yZSA9IC0xLjBmOworICAgICAgICAgICAgICAgIG1fbW92
aWVXaW4tPnNldFJhdGUobV9yYXRlVG9SZXN0b3JlKTsKKyAgICAgICAgICAgICAgICBtX3JhdGVU
b1Jlc3RvcmUgPSAtMS4wZjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG1fbW92
aWVXaW4tPm1fZGlzYWJsZWQpIHsKKyAgICAgICAgICAgICAgICBlbmRUYXNrKCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIG1fbGFz
dExvYWRTdGF0ZUNoZWNrVGltZSA9IHN5c3RlbVRpbWUoKTsKKyAgICB9CisKKyAgICBib29sIGVu
ZGVkID0gISFJc01vdmllRG9uZShtX21vdmllKTsKKyAgICBpZiAoZW5kZWQgIT0gbV9lbmRlZCkg
eworICAgICAgICBtX2VuZGVkID0gZW5kZWQ7CisgICAgICAgIGlmIChtX2NsaWVudCAmJiBlbmRl
ZCkKKyAgICAgICAgICAgIG1fY2xpZW50LT5tb3ZpZUVuZGVkKG1fbW92aWVXaW4pOworICAgIH0K
KworICAgIGZsb2F0IHRpbWUgPSBtX21vdmllV2luLT5jdXJyZW50VGltZSgpOworICAgIGlmICh0
aW1lIDwgbV9sYXN0TWVkaWFUaW1lIHx8IHRpbWUgPj0gbV9sYXN0TWVkaWFUaW1lICsgY05vbkNv
bnRpbnVvdXNUaW1lQ2hhbmdlIHx8IG1fc2Vla2luZykgeworICAgICAgICBtX3NlZWtpbmcgPSBm
YWxzZTsKKyAgICAgICAgaWYgKG1fY2xpZW50KQorICAgICAgICAgICAgbV9jbGllbnQtPm1vdmll
VGltZUNoYW5nZWQobV9tb3ZpZVdpbik7CisgICAgfQorICAgIG1fbGFzdE1lZGlhVGltZSA9IHRp
bWU7CisKKyAgICBpZiAobV9sb2FkRXJyb3IpCisgICAgICAgIGVuZFRhc2soKTsKK30KKwordm9p
ZCBRVE1vdmllV2luUHJpdmF0ZTo6Y3JlYXRlTW92aWVDb250cm9sbGVyKCkKK3sKKyAgICBSZWN0
IGJvdW5kczsKKyAgICBsb25nIGZsYWdzOworCisgICAgaWYgKCFtX21vdmllKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAobV9tb3ZpZUNvbnRyb2xsZXIpCisgICAgICAgIERpc3Bvc2VNb3Zp
ZUNvbnRyb2xsZXIobV9tb3ZpZUNvbnRyb2xsZXIpOworCisgICAgR2V0TW92aWVCb3gobV9tb3Zp
ZSwgJmJvdW5kcyk7CisgICAgZmxhZ3MgPSBtY1RvcExlZnRNb3ZpZSB8IG1jTm90VmlzaWJsZTsK
KyAgICBtX21vdmllQ29udHJvbGxlciA9IE5ld01vdmllQ29udHJvbGxlcihtX21vdmllLCAmYm91
bmRzLCBmbGFncyk7CisgICAgaWYgKCFtX21vdmllQ29udHJvbGxlcikKKyAgICAgICAgcmV0dXJu
OworCisgICAgTUNTZXRDb250cm9sbGVyUG9ydChtX21vdmllQ29udHJvbGxlciwgbV9nV29ybGQp
OworICAgIE1DU2V0Q29udHJvbGxlckF0dGFjaGVkKG1fbW92aWVDb250cm9sbGVyLCBmYWxzZSk7
Cit9CisKK3ZvaWQgUVRNb3ZpZVdpblByaXZhdGU6OnJlZ2lzdGVyRHJhd2luZ0NhbGxiYWNrKCkK
K3sKKyAgICBVcHBQYXJhbSBwYXJhbTsKKyAgICBwYXJhbS5wdHIgPSB0aGlzOworICAgIFNldE1v
dmllRHJhd2luZ0NvbXBsZXRlUHJvYyhtX21vdmllLCBtb3ZpZURyYXdpbmdDYWxsV2hlbkNoYW5n
ZWQsIGdNb3ZpZURyYXdpbmdDb21wbGV0ZVVQUCwgcGFyYW0ubG9uZ1ZhbHVlKTsKK30KKwordm9p
ZCBRVE1vdmllV2luUHJpdmF0ZTo6ZHJhd2luZ0NvbXBsZXRlKCkKK3sKKyAgICBpZiAoIW1fZ1dv
cmxkIHx8IG1fbW92aWVXaW4tPm1fZGlzYWJsZWQgfHwgbV9sb2FkU3RhdGUgPCBRVE1vdmllTG9h
ZFN0YXRlTG9hZGVkKQorICAgICAgICByZXR1cm47CisgICAgbV9jbGllbnQtPm1vdmllTmV3SW1h
Z2VBdmFpbGFibGUobV9tb3ZpZVdpbik7Cit9CisKK3ZvaWQgUVRNb3ZpZVdpblByaXZhdGU6OnVw
ZGF0ZUdXb3JsZCgpCit7CisgICAgYm9vbCBzaG91bGRCZVZpc2libGUgPSBtX3Zpc2libGU7Cisg
ICAgaWYgKCFtX2hlaWdodCB8fCAhbV93aWR0aCkKKyAgICAgICAgc2hvdWxkQmVWaXNpYmxlID0g
ZmFsc2U7CisKKyAgICBpZiAoc2hvdWxkQmVWaXNpYmxlICYmICFtX2dXb3JsZCkKKyAgICAgICAg
Y3JlYXRlR1dvcmxkKCk7CisgICAgZWxzZSBpZiAoIXNob3VsZEJlVmlzaWJsZSAmJiBtX2dXb3Js
ZCkKKyAgICAgICAgZGVsZXRlR1dvcmxkKCk7CisgICAgZWxzZSBpZiAobV9nV29ybGQgJiYgKG1f
d2lkdGggPiBtX2dXb3JsZFdpZHRoIHx8IG1faGVpZ2h0ID4gbV9nV29ybGRIZWlnaHQpKSB7Cisg
ICAgICAgIC8vIG5lZWQgYSBiaWdnZXIsIGJldHRlciBnV29ybGQKKyAgICAgICAgZGVsZXRlR1dv
cmxkKCk7CisgICAgICAgIGNyZWF0ZUdXb3JsZCgpOworICAgIH0KK30KKwordm9pZCBRVE1vdmll
V2luUHJpdmF0ZTo6Y3JlYXRlR1dvcmxkKCkKK3sKKyAgICBBU1NFUlQoIW1fZ1dvcmxkKTsKKyAg
ICBpZiAoIW1fbW92aWUgfHwgbV9sb2FkU3RhdGUgPCBRVE1vdmllTG9hZFN0YXRlTG9hZGVkKQor
ICAgICAgICByZXR1cm47CisKKyAgICBtX2dXb3JsZFdpZHRoID0gbWF4KGNHV29ybGRNaW5XaWR0
aCwgbV93aWR0aCk7CisgICAgbV9nV29ybGRIZWlnaHQgPSBtYXgoY0dXb3JsZE1pbkhlaWdodCwg
bV9oZWlnaHQpOworICAgIFJlY3QgYm91bmRzOyAKKyAgICBib3VuZHMudG9wID0gMDsKKyAgICBi
b3VuZHMubGVmdCA9IDA7IAorICAgIGJvdW5kcy5yaWdodCA9IG1fZ1dvcmxkV2lkdGg7CisgICAg
Ym91bmRzLmJvdHRvbSA9IG1fZ1dvcmxkSGVpZ2h0OworICAgIE9TRXJyIGVyciA9IFFUTmV3R1dv
cmxkKCZtX2dXb3JsZCwgazMyQkdSQVBpeGVsRm9ybWF0LCAmYm91bmRzLCAwLCAwLCAwKTsgCisg
ICAgaWYgKGVycikgCisgICAgICAgIHJldHVybjsKKyAgICBHZXRNb3ZpZUdXb3JsZChtX21vdmll
LCAmbV9zYXZlZEdXb3JsZCwgMCk7CisgICAgaWYgKG1fbW92aWVDb250cm9sbGVyKQorICAgICAg
ICBNQ1NldENvbnRyb2xsZXJQb3J0KG1fbW92aWVDb250cm9sbGVyLCBtX2dXb3JsZCk7CisgICAg
U2V0TW92aWVHV29ybGQobV9tb3ZpZSwgbV9nV29ybGQsIDApOworICAgIGJvdW5kcy5yaWdodCA9
IG1fd2lkdGg7CisgICAgYm91bmRzLmJvdHRvbSA9IG1faGVpZ2h0OworICAgIGlmIChtX21vdmll
Q29udHJvbGxlcikKKyAgICAgICAgTUNTZXRDb250cm9sbGVyQm91bmRzUmVjdChtX21vdmllQ29u
dHJvbGxlciwgJmJvdW5kcyk7CisgICAgU2V0TW92aWVCb3gobV9tb3ZpZSwgJmJvdW5kcyk7Cit9
CisKK3ZvaWQgUVRNb3ZpZVdpblByaXZhdGU6OmNsZWFyR1dvcmxkKCkKK3sKKyAgICBpZiAoIW1f
bW92aWV8fCFtX2dXb3JsZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhZlB0ciBzYXZlUG9y
dDsKKyAgICBHZXRQb3J0KCZzYXZlUG9ydCk7IAorICAgIE1hY1NldFBvcnQoKEdyYWZQdHIpbV9n
V29ybGQpOworCisgICAgUmVjdCBib3VuZHM7IAorICAgIGJvdW5kcy50b3AgPSAwOworICAgIGJv
dW5kcy5sZWZ0ID0gMDsgCisgICAgYm91bmRzLnJpZ2h0ID0gbV9nV29ybGRXaWR0aDsKKyAgICBi
b3VuZHMuYm90dG9tID0gbV9nV29ybGRIZWlnaHQ7CisgICAgRXJhc2VSZWN0KCZib3VuZHMpOwor
CisgICAgTWFjU2V0UG9ydChzYXZlUG9ydCk7Cit9CisKK3ZvaWQgUVRNb3ZpZVdpblByaXZhdGU6
OnNldFNpemUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworICAgIGlmIChtX3dpZHRoID09IHdp
ZHRoICYmIG1faGVpZ2h0ID09IGhlaWdodCkKKyAgICAgICAgcmV0dXJuOworICAgIG1fd2lkdGgg
PSB3aWR0aDsKKyAgICBtX2hlaWdodCA9IGhlaWdodDsKKworICAgIC8vIERvIG5vdCBjaGFuZ2Ug
bW92aWUgYm94IGJlZm9yZSByZWFjaGluZyBsb2FkIHN0YXRlIGxvYWRlZCBhcyB3ZSBncmFiCisg
ICAgLy8gdGhlIGluaXRpYWwgc2l6ZSB3aGVuIHRhc2soKSBzZWVzIHRoYXQgc3RhdGUgZm9yIHRo
ZSBmaXJzdCB0aW1lLCBhbmQKKyAgICAvLyB3ZSBuZWVkIHRoZSBpbml0aWFsIHNpemUgdG8gYmUg
YWJsZSB0byBzY2FsZSBtb3ZpZSBwcm9wZXJseS4gCisgICAgaWYgKCFtX21vdmllIHx8IG1fbG9h
ZFN0YXRlIDwgUVRNb3ZpZUxvYWRTdGF0ZUxvYWRlZCkKKyAgICAgICAgcmV0dXJuOworCisjaWYg
IUFTU0VSVF9ESVNBQkxFRAorICAgIEFTU0VSVChtX3NjYWxlQ2FjaGVkKTsKKyNlbmRpZgorCisg
ICAgdXBkYXRlTW92aWVTaXplKCk7Cit9CisKK3ZvaWQgUVRNb3ZpZVdpblByaXZhdGU6OnVwZGF0
ZU1vdmllU2l6ZSgpCit7CisgICAgaWYgKCFtX21vdmllIHx8IG1fbG9hZFN0YXRlIDwgUVRNb3Zp
ZUxvYWRTdGF0ZUxvYWRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVjdCBib3VuZHM7IAor
ICAgIGJvdW5kcy50b3AgPSAwOworICAgIGJvdW5kcy5sZWZ0ID0gMDsgCisgICAgYm91bmRzLnJp
Z2h0ID0gbV93aWR0aDsKKyAgICBib3VuZHMuYm90dG9tID0gbV9oZWlnaHQ7CisgICAgaWYgKG1f
bW92aWVDb250cm9sbGVyKQorICAgICAgICBNQ1NldENvbnRyb2xsZXJCb3VuZHNSZWN0KG1fbW92
aWVDb250cm9sbGVyLCAmYm91bmRzKTsKKyAgICBTZXRNb3ZpZUJveChtX21vdmllLCAmYm91bmRz
KTsKKyAgICB1cGRhdGVHV29ybGQoKTsKK30KKworCit2b2lkIFFUTW92aWVXaW5Qcml2YXRlOjpk
ZWxldGVHV29ybGQoKQoreworICAgIEFTU0VSVChtX2dXb3JsZCk7CisgICAgaWYgKG1fbW92aWVD
b250cm9sbGVyKQorICAgICAgICBNQ1NldENvbnRyb2xsZXJQb3J0KG1fbW92aWVDb250cm9sbGVy
LCBtX3NhdmVkR1dvcmxkKTsKKyAgICBpZiAobV9tb3ZpZSkKKyAgICAgICAgU2V0TW92aWVHV29y
bGQobV9tb3ZpZSwgbV9zYXZlZEdXb3JsZCwgMCk7CisgICAgbV9zYXZlZEdXb3JsZCA9IDA7Cisg
ICAgRGlzcG9zZUdXb3JsZChtX2dXb3JsZCk7IAorICAgIG1fZ1dvcmxkID0gMDsKKyAgICBtX2dX
b3JsZFdpZHRoID0gMDsKKyAgICBtX2dXb3JsZEhlaWdodCA9IDA7Cit9CisKKworUVRNb3ZpZVdp
bjo6UVRNb3ZpZVdpbihRVE1vdmllV2luQ2xpZW50KiBjbGllbnQpCisgICAgOiBtX3ByaXZhdGUo
bmV3IFFUTW92aWVXaW5Qcml2YXRlKCkpCisgICAgLCBtX2Rpc2FibGVkKGZhbHNlKQoreworICAg
IG1fcHJpdmF0ZS0+bV9tb3ZpZVdpbiA9IHRoaXM7CisgICAgbV9wcml2YXRlLT5tX2NsaWVudCA9
IGNsaWVudDsKKyAgICBpbml0aWFsaXplUXVpY2tUaW1lKCk7Cit9CisKK1FUTW92aWVXaW46On5R
VE1vdmllV2luKCkKK3sKKyAgICBkZWxldGUgbV9wcml2YXRlOworfQorCit2b2lkIFFUTW92aWVX
aW46OnBsYXkoKQoreworICAgIG1fcHJpdmF0ZS0+bV90aW1lVG9SZXN0b3JlID0gLTEuMGY7CisK
KyAgICBpZiAobV9wcml2YXRlLT5tX21vdmllQ29udHJvbGxlcikKKyAgICAgICAgTUNEb0FjdGlv
bihtX3ByaXZhdGUtPm1fbW92aWVDb250cm9sbGVyLCBtY0FjdGlvblByZXJvbGxBbmRQbGF5LCAo
dm9pZCAqKUdldE1vdmllUHJlZmVycmVkUmF0ZShtX3ByaXZhdGUtPm1fbW92aWUpKTsKKyAgICBl
bHNlCisgICAgICAgIFN0YXJ0TW92aWUobV9wcml2YXRlLT5tX21vdmllKTsKKyAgICBtX3ByaXZh
dGUtPnN0YXJ0VGFzaygpOworfQorCit2b2lkIFFUTW92aWVXaW46OnBhdXNlKCkKK3sKKyAgICBt
X3ByaXZhdGUtPm1fdGltZVRvUmVzdG9yZSA9IC0xLjBmOworCisgICAgaWYgKG1fcHJpdmF0ZS0+
bV9tb3ZpZUNvbnRyb2xsZXIpCisgICAgICAgIE1DRG9BY3Rpb24obV9wcml2YXRlLT5tX21vdmll
Q29udHJvbGxlciwgbWNBY3Rpb25QbGF5LCAwKTsKKyAgICBlbHNlCisgICAgICAgIFN0b3BNb3Zp
ZShtX3ByaXZhdGUtPm1fbW92aWUpOworICAgIHVwZGF0ZVRhc2tUaW1lcigpOworfQorCitmbG9h
dCBRVE1vdmllV2luOjpyYXRlKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcHJpdmF0ZS0+bV9tb3Zp
ZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIEZpeGVkVG9GbG9hdChHZXRNb3ZpZVJh
dGUobV9wcml2YXRlLT5tX21vdmllKSk7Cit9CisKK3ZvaWQgUVRNb3ZpZVdpbjo6c2V0UmF0ZShm
bG9hdCByYXRlKQoreworICAgIGlmICghbV9wcml2YXRlLT5tX21vdmllKQorICAgICAgICByZXR1
cm47ICAgIAorICAgIG1fcHJpdmF0ZS0+bV90aW1lVG9SZXN0b3JlID0gLTEuMGY7CisgICAgCisg
ICAgaWYgKG1fcHJpdmF0ZS0+bV9tb3ZpZUNvbnRyb2xsZXIpCisgICAgICAgIE1DRG9BY3Rpb24o
bV9wcml2YXRlLT5tX21vdmllQ29udHJvbGxlciwgbWNBY3Rpb25QcmVyb2xsQW5kUGxheSwgKHZv
aWQgKilGbG9hdFRvRml4ZWQocmF0ZSkpOworICAgIGVsc2UKKyAgICAgICAgU2V0TW92aWVSYXRl
KG1fcHJpdmF0ZS0+bV9tb3ZpZSwgRmxvYXRUb0ZpeGVkKHJhdGUpKTsKKyAgICB1cGRhdGVUYXNr
VGltZXIoKTsKK30KKworZmxvYXQgUVRNb3ZpZVdpbjo6ZHVyYXRpb24oKSBjb25zdAoreworICAg
IGlmICghbV9wcml2YXRlLT5tX21vdmllKQorICAgICAgICByZXR1cm4gMDsKKyAgICBUaW1lVmFs
dWUgdmFsID0gR2V0TW92aWVEdXJhdGlvbihtX3ByaXZhdGUtPm1fbW92aWUpOworICAgIFRpbWVT
Y2FsZSBzY2FsZSA9IEdldE1vdmllVGltZVNjYWxlKG1fcHJpdmF0ZS0+bV9tb3ZpZSk7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih2YWwpIC8gc2NhbGU7Cit9CisKK2Zsb2F0IFFUTW92
aWVXaW46OmN1cnJlbnRUaW1lKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcHJpdmF0ZS0+bV9tb3Zp
ZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgVGltZVZhbHVlIHZhbCA9IEdldE1vdmllVGltZSht
X3ByaXZhdGUtPm1fbW92aWUsIDApOworICAgIFRpbWVTY2FsZSBzY2FsZSA9IEdldE1vdmllVGlt
ZVNjYWxlKG1fcHJpdmF0ZS0+bV9tb3ZpZSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0
Pih2YWwpIC8gc2NhbGU7Cit9CisKK3ZvaWQgUVRNb3ZpZVdpbjo6c2V0Q3VycmVudFRpbWUoZmxv
YXQgdGltZSkgY29uc3QKK3sKKyAgICBpZiAoIW1fcHJpdmF0ZS0+bV9tb3ZpZSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV9wcml2YXRlLT5tX3RpbWVUb1Jlc3RvcmUgPSAtMS4wZjsKKyAgICAK
KyAgICBtX3ByaXZhdGUtPm1fc2Vla2luZyA9IHRydWU7CisgICAgVGltZVNjYWxlIHNjYWxlID0g
R2V0TW92aWVUaW1lU2NhbGUobV9wcml2YXRlLT5tX21vdmllKTsKKyAgICBpZiAobV9wcml2YXRl
LT5tX21vdmllQ29udHJvbGxlcil7CisgICAgICAgIFFUUmVzdGFydEF0VGltZVJlY29yZCByZXN0
YXJ0ID0geyB0aW1lICogc2NhbGUgLCAwIH07CisgICAgICAgIE1DRG9BY3Rpb24obV9wcml2YXRl
LT5tX21vdmllQ29udHJvbGxlciwgbWNBY3Rpb25SZXN0YXJ0QXRUaW1lLCAodm9pZCAqKSZyZXN0
YXJ0KTsKKyAgICB9IGVsc2UKKyAgICAgICAgU2V0TW92aWVUaW1lVmFsdWUobV9wcml2YXRlLT5t
X21vdmllLCBUaW1lVmFsdWUodGltZSAqIHNjYWxlKSk7CisgICAgdXBkYXRlVGFza1RpbWVyKCk7
Cit9CisKK3ZvaWQgUVRNb3ZpZVdpbjo6c2V0Vm9sdW1lKGZsb2F0IHZvbHVtZSkKK3sKKyAgICBp
ZiAoIW1fcHJpdmF0ZS0+bV9tb3ZpZSkKKyAgICAgICAgcmV0dXJuOworICAgIFNldE1vdmllVm9s
dW1lKG1fcHJpdmF0ZS0+bV9tb3ZpZSwgc3RhdGljX2Nhc3Q8c2hvcnQ+KHZvbHVtZSAqIDI1Nikp
OworfQorCit2b2lkIFFUTW92aWVXaW46OnNldFByZXNlcnZlc1BpdGNoKGJvb2wgcHJlc2VydmVz
UGl0Y2gpCit7CisgICAgaWYgKCFtX3ByaXZhdGUtPm1fbW92aWUgfHwgIW1fcHJpdmF0ZS0+bV9j
dXJyZW50VVJMKQorICAgICAgICByZXR1cm47CisKKyAgICBPU0VyciBlcnJvcjsKKyAgICBib29s
IHByb3AgPSBmYWxzZTsKKworICAgIGVycm9yID0gUVRHZXRNb3ZpZVByb3BlcnR5KG1fcHJpdmF0
ZS0+bV9tb3ZpZSwga1FUUHJvcGVydHlDbGFzc19BdWRpbywga1FUQXVkaW9Qcm9wZXJ0eUlEX1Jh
dGVDaGFuZ2VzUHJlc2VydmVQaXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
aXplb2Yoa1FUQXVkaW9Qcm9wZXJ0eUlEX1JhdGVDaGFuZ2VzUHJlc2VydmVQaXRjaCksIHN0YXRp
Y19jYXN0PFFUUHJvcGVydHlWYWx1ZVB0cj4oJnByb3ApLCAwKTsKKworICAgIGlmIChlcnJvciB8
fCBwcm9wID09IHByZXNlcnZlc1BpdGNoKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3ByaXZh
dGUtPm1fdGltZVRvUmVzdG9yZSA9IGN1cnJlbnRUaW1lKCk7CisgICAgbV9wcml2YXRlLT5tX3Jh
dGVUb1Jlc3RvcmUgPSByYXRlKCk7CisgICAgbG9hZChtX3ByaXZhdGUtPm1fY3VycmVudFVSTCwg
cHJlc2VydmVzUGl0Y2gpOworfQorCit1bnNpZ25lZCBRVE1vdmllV2luOjpkYXRhU2l6ZSgpIGNv
bnN0Cit7CisgICAgaWYgKCFtX3ByaXZhdGUtPm1fbW92aWUpCisgICAgICAgIHJldHVybiAwOwor
ICAgIHJldHVybiBHZXRNb3ZpZURhdGFTaXplKG1fcHJpdmF0ZS0+bV9tb3ZpZSwgMCwgR2V0TW92
aWVEdXJhdGlvbihtX3ByaXZhdGUtPm1fbW92aWUpKTsKK30KKworZmxvYXQgUVRNb3ZpZVdpbjo6
bWF4VGltZUxvYWRlZCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3ByaXZhdGUtPm1fbW92aWUpCisg
ICAgICAgIHJldHVybiAwOworICAgIFRpbWVWYWx1ZSB2YWw7CisgICAgR2V0TWF4TG9hZGVkVGlt
ZUluTW92aWUobV9wcml2YXRlLT5tX21vdmllLCAmdmFsKTsKKyAgICBUaW1lU2NhbGUgc2NhbGUg
PSBHZXRNb3ZpZVRpbWVTY2FsZShtX3ByaXZhdGUtPm1fbW92aWUpOworICAgIHJldHVybiBzdGF0
aWNfY2FzdDxmbG9hdD4odmFsKSAvIHNjYWxlOworfQorCitsb25nIFFUTW92aWVXaW46OmxvYWRT
dGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bV9sb2FkU3RhdGU7Cit9CisK
K3ZvaWQgUVRNb3ZpZVdpbjo6Z2V0TmF0dXJhbFNpemUoaW50JiB3aWR0aCwgaW50JiBoZWlnaHQp
Cit7CisgICAgUmVjdCByZWN0ID0geyAwLCB9OworCisgICAgaWYgKG1fcHJpdmF0ZS0+bV9tb3Zp
ZSkKKyAgICAgICAgR2V0TW92aWVOYXR1cmFsQm91bmRzUmVjdChtX3ByaXZhdGUtPm1fbW92aWUs
ICZyZWN0KTsKKyAgICB3aWR0aCA9IChyZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0KSAqIG1fcHJpdmF0
ZS0+bV93aWR0aFNjYWxlRmFjdG9yOworICAgIGhlaWdodCA9IChyZWN0LmJvdHRvbSAtIHJlY3Qu
dG9wKSAqIG1fcHJpdmF0ZS0+bV9oZWlnaHRTY2FsZUZhY3RvcjsKK30KKwordm9pZCBRVE1vdmll
V2luOjpzZXRTaXplKGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKyAgICBtX3ByaXZhdGUtPnNl
dFNpemUod2lkdGgsIGhlaWdodCk7CisgICAgdXBkYXRlVGFza1RpbWVyKDApOworfQorCit2b2lk
IFFUTW92aWVXaW46OnNldFZpc2libGUoYm9vbCBiKQoreworICAgIG1fcHJpdmF0ZS0+bV92aXNp
YmxlID0gYjsKKyAgICBtX3ByaXZhdGUtPnVwZGF0ZUdXb3JsZCgpOworfQorCit2b2lkIFFUTW92
aWVXaW46OmdldEN1cnJlbnRGcmFtZUluZm8odm9pZComIGJ1ZmZlciwgdW5zaWduZWQmIGJpdHNQ
ZXJQaXhlbCwgdW5zaWduZWQmIHJvd0J5dGVzLCB1bnNpZ25lZCYgd2lkdGgsIHVuc2lnbmVkJiBo
ZWlnaHQpCit7CisgICAgaWYgKCFtX3ByaXZhdGUtPm1fZ1dvcmxkKSB7CisgICAgICAgIGJ1ZmZl
ciA9IDA7CisgICAgICAgIGJpdHNQZXJQaXhlbCA9IDA7CisgICAgICAgIHJvd0J5dGVzID0gMDsK
KyAgICAgICAgd2lkdGggPSAwOworICAgICAgICBoZWlnaHQgPSAwOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIFBpeE1hcEhhbmRsZSBvZmZzY3JlZW5QaXhNYXAgPSBHZXRHV29ybGRQaXhN
YXAobV9wcml2YXRlLT5tX2dXb3JsZCk7CisgICAgYnVmZmVyID0gKCpvZmZzY3JlZW5QaXhNYXAp
LT5iYXNlQWRkcjsKKyAgICBiaXRzUGVyUGl4ZWwgPSAoKm9mZnNjcmVlblBpeE1hcCktPnBpeGVs
U2l6ZTsKKyAgICByb3dCeXRlcyA9ICgqb2Zmc2NyZWVuUGl4TWFwKS0+cm93Qnl0ZXMgJiAweDNG
RkY7CisgICAgd2lkdGggPSBtX3ByaXZhdGUtPm1fd2lkdGg7CisgICAgaGVpZ2h0ID0gbV9wcml2
YXRlLT5tX2hlaWdodDsKK30KKwordm9pZCBRVE1vdmllV2luOjpwYWludChIREMgaGRjLCBpbnQg
eCwgaW50IHkpCit7CisgICAgaWYgKCFtX3ByaXZhdGUtPm1fZ1dvcmxkKQorICAgICAgICByZXR1
cm47CisKKyAgICBIREMgaGRjU3JjID0gc3RhdGljX2Nhc3Q8SERDPihHZXRQb3J0SERDKHJlaW50
ZXJwcmV0X2Nhc3Q8R3JhZlB0cj4obV9wcml2YXRlLT5tX2dXb3JsZCkpKTsgCisgICAgaWYgKCFo
ZGNTcmMpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEZJWE1FOiBJZiB3ZSBjb3VsZCBkZXRl
cm1pbmUgdGhlIG1vdmllIGhhcyBubyBhbHBoYSwgd2UgY291bGQgdXNlIEJpdEJsdCBmb3IgdGhv
c2UgY2FzZXMsIHdoaWNoIG1pZ2h0IGJlIGZhc3Rlci4KKyAgICBCTEVOREZVTkNUSU9OIGJsZW5k
RnVuY3Rpb247IAorICAgIGJsZW5kRnVuY3Rpb24uQmxlbmRPcCA9IEFDX1NSQ19PVkVSOworICAg
IGJsZW5kRnVuY3Rpb24uQmxlbmRGbGFncyA9IDA7CisgICAgYmxlbmRGdW5jdGlvbi5Tb3VyY2VD
b25zdGFudEFscGhhID0gMjU1OworICAgIGJsZW5kRnVuY3Rpb24uQWxwaGFGb3JtYXQgPSBBQ19T
UkNfQUxQSEE7CisgICAgQWxwaGFCbGVuZChoZGMsIHgsIHksIG1fcHJpdmF0ZS0+bV93aWR0aCwg
bV9wcml2YXRlLT5tX2hlaWdodCwgaGRjU3JjLCAKKyAgICAgICAgIDAsIDAsIG1fcHJpdmF0ZS0+
bV93aWR0aCwgbV9wcml2YXRlLT5tX2hlaWdodCwgYmxlbmRGdW5jdGlvbik7Cit9CisKK3ZvaWQg
UVRNb3ZpZVdpbjo6bG9hZChjb25zdCBVQ2hhciogdXJsLCBpbnQgbGVuLCBib29sIHByZXNlcnZl
c1BpdGNoKQoreworICAgIENGU3RyaW5nUmVmIHVybFN0cmluZ1JlZiA9IENGU3RyaW5nQ3JlYXRl
V2l0aENoYXJhY3RlcnMoa0NGQWxsb2NhdG9yRGVmYXVsdCwgcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBVbmlDaGFyKj4odXJsKSwgbGVuKTsKKyAgICBDRlVSTFJlZiBjZlVSTCA9IENGVVJMQ3JlYXRl
V2l0aFN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCB1cmxTdHJpbmdSZWYsIDApOworCisgICAg
bG9hZChjZlVSTCwgcHJlc2VydmVzUGl0Y2gpOworCisgICAgQ0ZSZWxlYXNlKGNmVVJMKTsKKyAg
ICBDRlJlbGVhc2UodXJsU3RyaW5nUmVmKTsKK30KKwordm9pZCBRVE1vdmllV2luOjpsb2FkKENG
VVJMUmVmIHVybCwgYm9vbCBwcmVzZXJ2ZXNQaXRjaCkKK3sKKyAgICBpZiAoIXVybCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKG1fcHJpdmF0ZS0+bV9tb3ZpZSkgeworICAgICAgICBtX3By
aXZhdGUtPmVuZFRhc2soKTsKKyAgICAgICAgaWYgKG1fcHJpdmF0ZS0+bV9nV29ybGQpCisgICAg
ICAgICAgICBtX3ByaXZhdGUtPmRlbGV0ZUdXb3JsZCgpOworICAgICAgICBpZiAobV9wcml2YXRl
LT5tX21vdmllQ29udHJvbGxlcikKKyAgICAgICAgICAgIERpc3Bvc2VNb3ZpZUNvbnRyb2xsZXIo
bV9wcml2YXRlLT5tX21vdmllQ29udHJvbGxlcik7CisgICAgICAgIG1fcHJpdmF0ZS0+bV9tb3Zp
ZUNvbnRyb2xsZXIgPSAwOworICAgICAgICBEaXNwb3NlTW92aWUobV9wcml2YXRlLT5tX21vdmll
KTsKKyAgICAgICAgbV9wcml2YXRlLT5tX21vdmllID0gMDsKKyAgICAgICAgbV9wcml2YXRlLT5t
X2xvYWRTdGF0ZSA9IDA7CisgICAgfSAgCisKKyAgICAvLyBEZWZpbmUgYSBwcm9wZXJ0eSBhcnJh
eSBmb3IgTmV3TW92aWVGcm9tUHJvcGVydGllcy4gOCBzaG91bGQgYmUgZW5vdWdoIGZvciBvdXIg
bmVlZHMuIAorICAgIFFUTmV3TW92aWVQcm9wZXJ0eUVsZW1lbnQgbW92aWVQcm9wc1s4XTsgCisg
ICAgSXRlbUNvdW50IG1vdmllUHJvcENvdW50ID0gMDsgCisKKyAgICBib29sIGJvb2xUcnVlID0g
dHJ1ZTsKKyAgICAKKyAgICAvLyBEaXNhYmxlIHN0cmVhbWluZyBzdXBwb3J0IGZvciBub3cuIAor
ICAgIENGU3RyaW5nUmVmIHNjaGVtZSA9IENGVVJMQ29weVNjaGVtZSh1cmwpOworICAgIGJvb2wg
aXNSVFNQID0gQ0ZTdHJpbmdIYXNQcmVmaXgoc2NoZW1lLCBDRlNUUigicnRzcDoiKSk7CisgICAg
Q0ZSZWxlYXNlKHNjaGVtZSk7CisKKyAgICBpZiAoaXNSVFNQKSB7CisgICAgICAgIG1fcHJpdmF0
ZS0+bV9sb2FkRXJyb3IgPSBub01vdmllRm91bmQ7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0K
KworICAgIGlmIChtX3ByaXZhdGUtPm1fY3VycmVudFVSTCkgeworICAgICAgICBpZiAobV9wcml2
YXRlLT5tX2N1cnJlbnRVUkwgIT0gdXJsKSB7CisgICAgICAgICAgICBDRlJlbGVhc2UobV9wcml2
YXRlLT5tX2N1cnJlbnRVUkwpOworICAgICAgICAgICAgbV9wcml2YXRlLT5tX2N1cnJlbnRVUkwg
PSB1cmw7CisgICAgICAgICAgICBDRlJldGFpbih1cmwpOworICAgICAgICB9CisgICAgfSBlbHNl
IHsKKyAgICAgICAgbV9wcml2YXRlLT5tX2N1cnJlbnRVUkwgPSB1cmw7CisgICAgICAgIENGUmV0
YWluKHVybCk7CisgICAgfQorCisgICAgLy8gQWRkIHRoZSBtb3ZpZSBkYXRhIGxvY2F0aW9uIHRv
IHRoZSBwcm9wZXJ0eSBhcnJheSAKKyAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9w
Q2xhc3MgPSBrUVRQcm9wZXJ0eUNsYXNzX0RhdGFMb2NhdGlvbjsgCisgICAgbW92aWVQcm9wc1tt
b3ZpZVByb3BDb3VudF0ucHJvcElEID0ga1FURGF0YUxvY2F0aW9uUHJvcGVydHlJRF9DRlVSTDsg
CisgICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcFZhbHVlU2l6ZSA9IHNpemVvZiht
X3ByaXZhdGUtPm1fY3VycmVudFVSTCk7IAorICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRd
LnByb3BWYWx1ZUFkZHJlc3MgPSAmKG1fcHJpdmF0ZS0+bV9jdXJyZW50VVJMKTsgCisgICAgbW92
aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcFN0YXR1cyA9IDA7IAorICAgIG1vdmllUHJvcENv
dW50Kys7IAorCisgICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcENsYXNzID0ga1FU
UHJvcGVydHlDbGFzc19Nb3ZpZUluc3RhbnRpYXRpb247IAorICAgIG1vdmllUHJvcHNbbW92aWVQ
cm9wQ291bnRdLnByb3BJRCA9IGtRVE1vdmllSW5zdGFudGlhdGlvblByb3BlcnR5SURfRG9udEFz
a1VucmVzb2x2ZWREYXRhUmVmczsgCisgICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJv
cFZhbHVlU2l6ZSA9IHNpemVvZihib29sVHJ1ZSk7IAorICAgIG1vdmllUHJvcHNbbW92aWVQcm9w
Q291bnRdLnByb3BWYWx1ZUFkZHJlc3MgPSAmYm9vbFRydWU7IAorICAgIG1vdmllUHJvcHNbbW92
aWVQcm9wQ291bnRdLnByb3BTdGF0dXMgPSAwOyAKKyAgICBtb3ZpZVByb3BDb3VudCsrOyAKKwor
ICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BDbGFzcyA9IGtRVFByb3BlcnR5Q2xh
c3NfTW92aWVJbnN0YW50aWF0aW9uOyAKKyAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5w
cm9wSUQgPSBrUVRNb3ZpZUluc3RhbnRpYXRpb25Qcm9wZXJ0eUlEX0FzeW5jT0s7IAorICAgIG1v
dmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BWYWx1ZVNpemUgPSBzaXplb2YoYm9vbFRydWUp
OyAKKyAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wVmFsdWVBZGRyZXNzID0gJmJv
b2xUcnVlOyAKKyAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wU3RhdHVzID0gMDsg
CisgICAgbW92aWVQcm9wQ291bnQrKzsgCisKKyAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50
XS5wcm9wQ2xhc3MgPSBrUVRQcm9wZXJ0eUNsYXNzX05ld01vdmllUHJvcGVydHk7IAorICAgIG1v
dmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BJRCA9IGtRVE5ld01vdmllUHJvcGVydHlJRF9B
Y3RpdmU7IAorICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BWYWx1ZVNpemUgPSBz
aXplb2YoYm9vbFRydWUpOyAKKyAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wVmFs
dWVBZGRyZXNzID0gJmJvb2xUcnVlOyAKKyAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5w
cm9wU3RhdHVzID0gMDsgCisgICAgbW92aWVQcm9wQ291bnQrKzsgCisKKyAgICBtb3ZpZVByb3Bz
W21vdmllUHJvcENvdW50XS5wcm9wQ2xhc3MgPSBrUVRQcm9wZXJ0eUNsYXNzX05ld01vdmllUHJv
cGVydHk7IAorICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BJRCA9IGtRVE5ld01v
dmllUHJvcGVydHlJRF9Eb250SW50ZXJhY3RXaXRoVXNlcjsgCisgICAgbW92aWVQcm9wc1ttb3Zp
ZVByb3BDb3VudF0ucHJvcFZhbHVlU2l6ZSA9IHNpemVvZihib29sVHJ1ZSk7IAorICAgIG1vdmll
UHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BWYWx1ZUFkZHJlc3MgPSAmYm9vbFRydWU7IAorICAg
IG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BTdGF0dXMgPSAwOyAKKyAgICBtb3ZpZVBy
b3BDb3VudCsrOyAKKworICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BDbGFzcyA9
IGtRVFByb3BlcnR5Q2xhc3NfTW92aWVJbnN0YW50aWF0aW9uOworICAgIG1vdmllUHJvcHNbbW92
aWVQcm9wQ291bnRdLnByb3BJRCA9ICchdXJsJzsKKyAgICBtb3ZpZVByb3BzW21vdmllUHJvcENv
dW50XS5wcm9wVmFsdWVTaXplID0gc2l6ZW9mKGJvb2xUcnVlKTsgCisgICAgbW92aWVQcm9wc1tt
b3ZpZVByb3BDb3VudF0ucHJvcFZhbHVlQWRkcmVzcyA9ICZib29sVHJ1ZTsgCisgICAgbW92aWVQ
cm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcFN0YXR1cyA9IDA7IAorICAgIG1vdmllUHJvcENvdW50
Kys7IAorCisgICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcENsYXNzID0ga1FUUHJv
cGVydHlDbGFzc19Nb3ZpZUluc3RhbnRpYXRpb247IAorICAgIG1vdmllUHJvcHNbbW92aWVQcm9w
Q291bnRdLnByb3BJRCA9ICdzaXRlJzsKKyAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5w
cm9wVmFsdWVTaXplID0gc2l6ZW9mKGJvb2xUcnVlKTsgCisgICAgbW92aWVQcm9wc1ttb3ZpZVBy
b3BDb3VudF0ucHJvcFZhbHVlQWRkcmVzcyA9ICZib29sVHJ1ZTsgCisgICAgbW92aWVQcm9wc1tt
b3ZpZVByb3BDb3VudF0ucHJvcFN0YXR1cyA9IDA7IAorICAgIG1vdmllUHJvcENvdW50Kys7CisK
KyAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wQ2xhc3MgPSBrUVRQcm9wZXJ0eUNs
YXNzX0F1ZGlvOyAKKyAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wSUQgPSBrUVRB
dWRpb1Byb3BlcnR5SURfUmF0ZUNoYW5nZXNQcmVzZXJ2ZVBpdGNoOworICAgIG1vdmllUHJvcHNb
bW92aWVQcm9wQ291bnRdLnByb3BWYWx1ZVNpemUgPSBzaXplb2YocHJlc2VydmVzUGl0Y2gpOyAK
KyAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wVmFsdWVBZGRyZXNzID0gJnByZXNl
cnZlc1BpdGNoOyAKKyAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wU3RhdHVzID0g
MDsgCisgICAgbW92aWVQcm9wQ291bnQrKzsgCisKKyAgICBBU1NFUlQobW92aWVQcm9wQ291bnQg
PD0gc2l6ZW9mKG1vdmllUHJvcHMpL3NpemVvZihtb3ZpZVByb3BzWzBdKSk7CisgICAgbV9wcml2
YXRlLT5tX2xvYWRFcnJvciA9IE5ld01vdmllRnJvbVByb3BlcnRpZXMobW92aWVQcm9wQ291bnQs
IG1vdmllUHJvcHMsIDAsIDAsICZtX3ByaXZhdGUtPm1fbW92aWUpOworCitlbmQ6CisgICAgbV9w
cml2YXRlLT5zdGFydFRhc2soKTsKKyAgICAvLyBnZXQgdGhlIGxvYWQgZmFpbCBjYWxsYmFjayBx
dWlja2x5IAorICAgIGlmIChtX3ByaXZhdGUtPm1fbG9hZEVycm9yKQorICAgICAgICB1cGRhdGVU
YXNrVGltZXIoMCk7CisgICAgZWxzZSB7CisgICAgICAgIE9TVHlwZSBtb2RlID0ga1FUQXBlcnR1
cmVNb2RlX0NsZWFuQXBlcnR1cmU7CisKKyAgICAgICAgLy8gU2V0IHRoZSBhcGVydHVyZSBtb2Rl
IHByb3BlcnR5IG9uIGEgbW92aWUgdG8gc2lnbmFsIHRoYXQgd2Ugd2FudCBhc3BlY3QgcmF0aW8K
KyAgICAgICAgLy8gYW5kIGNsZWFuIGFwZXJ0dXJlIGRpbWVuc2lvbnMuIERvbid0IHdvcnJ5IGFi
b3V0IGVycm9ycywgd2UgY2FuJ3QgZG8gYW55dGhpbmcgaWYKKyAgICAgICAgLy8gdGhlIGluc3Rh
bGxlZCB2ZXJzaW9uIG9mIFFUIGRvZXNuJ3Qgc3VwcG9ydCBpdCBhbmQgaXQgaXNuJ3Qgc2VyaW91
cyBlbm91Z2ggdG8gCisgICAgICAgIC8vIHdhcnJhbnQgZmFpbGluZy4KKyAgICAgICAgUVRTZXRN
b3ZpZVByb3BlcnR5KG1fcHJpdmF0ZS0+bV9tb3ZpZSwga1FUUHJvcGVydHlDbGFzc19WaXN1YWws
IGtRVFZpc3VhbFByb3BlcnR5SURfQXBlcnR1cmVNb2RlLCBzaXplb2YobW9kZSksICZtb2RlKTsK
KyAgICAgICAgbV9wcml2YXRlLT5yZWdpc3RlckRyYXdpbmdDYWxsYmFjaygpOworICAgIH0KK30K
Kwordm9pZCBRVE1vdmllV2luOjpkaXNhYmxlVW5zdXBwb3J0ZWRUcmFja3ModW5zaWduZWQmIGVu
YWJsZWRUcmFja0NvdW50LCB1bnNpZ25lZCYgdG90YWxUcmFja0NvdW50KQoreworICAgIGlmICgh
bV9wcml2YXRlLT5tX21vdmllKSB7CisgICAgICAgIHRvdGFsVHJhY2tDb3VudCA9IDA7CisgICAg
ICAgIGVuYWJsZWRUcmFja0NvdW50ID0gMDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IHN0YXRpYyBIYXNoU2V0PE9TVHlwZT4qIGFsbG93ZWRUcmFja1R5cGVzID0gMDsKKyAgICBpZiAo
IWFsbG93ZWRUcmFja1R5cGVzKSB7CisgICAgICAgIGFsbG93ZWRUcmFja1R5cGVzID0gbmV3IEhh
c2hTZXQ8T1NUeXBlPjsKKyAgICAgICAgYWxsb3dlZFRyYWNrVHlwZXMtPmFkZChWaWRlb01lZGlh
VHlwZSk7CisgICAgICAgIGFsbG93ZWRUcmFja1R5cGVzLT5hZGQoU291bmRNZWRpYVR5cGUpOwor
ICAgICAgICBhbGxvd2VkVHJhY2tUeXBlcy0+YWRkKFRleHRNZWRpYVR5cGUpOworICAgICAgICBh
bGxvd2VkVHJhY2tUeXBlcy0+YWRkKEJhc2VNZWRpYVR5cGUpOworICAgICAgICBhbGxvd2VkVHJh
Y2tUeXBlcy0+YWRkKGNsb3NlZENhcHRpb25UcmFja1R5cGUpOworICAgICAgICBhbGxvd2VkVHJh
Y2tUeXBlcy0+YWRkKHN1YlRpdGxlVHJhY2tUeXBlKTsKKyAgICAgICAgYWxsb3dlZFRyYWNrVHlw
ZXMtPmFkZChtcGVnNE9iamVjdERlc2NyaXB0aW9uVHJhY2tUeXBlKTsKKyAgICAgICAgYWxsb3dl
ZFRyYWNrVHlwZXMtPmFkZChtcGVnNFNjZW5lRGVzY3JpcHRpb25UcmFja1R5cGUpOworICAgICAg
ICBhbGxvd2VkVHJhY2tUeXBlcy0+YWRkKFRpbWVDb2RlTWVkaWFUeXBlKTsKKyAgICAgICAgYWxs
b3dlZFRyYWNrVHlwZXMtPmFkZChUaW1lQ29kZTY0TWVkaWFUeXBlKTsKKyAgICB9CisKKyAgICBs
b25nIHRyYWNrQ291bnQgPSBHZXRNb3ZpZVRyYWNrQ291bnQobV9wcml2YXRlLT5tX21vdmllKTsK
KyAgICBlbmFibGVkVHJhY2tDb3VudCA9IHRyYWNrQ291bnQ7CisgICAgdG90YWxUcmFja0NvdW50
ID0gdHJhY2tDb3VudDsKKworICAgIC8vIFRyYWNrIGluZGV4ZXMgYXJlIDEtYmFzZWQuIHl1Y2su
IFRoZXNlIHRoaW5ncyBtdXN0IGRlc2NlbmQgZnJvbSBvbGQtCisgICAgLy8gc2Nob29sIG1hYyBy
ZXNvdXJjZXMgb3Igc29tZXRoaW5nLgorICAgIGZvciAobG9uZyB0cmFja0luZGV4ID0gMTsgdHJh
Y2tJbmRleCA8PSB0cmFja0NvdW50OyB0cmFja0luZGV4KyspIHsKKyAgICAgICAgLy8gR3JhYiB0
aGUgdHJhY2sgYXQgdGhlIGN1cnJlbnQgaW5kZXguIElmIHRoZXJlIGlzbid0IG9uZSB0aGVyZSwg
dGhlbgorICAgICAgICAvLyB3ZSBjYW4gbW92ZSBvbnRvIHRoZSBuZXh0IG9uZS4KKyAgICAgICAg
VHJhY2sgY3VycmVudFRyYWNrID0gR2V0TW92aWVJbmRUcmFjayhtX3ByaXZhdGUtPm1fbW92aWUs
IHRyYWNrSW5kZXgpOworICAgICAgICBpZiAoIWN1cnJlbnRUcmFjaykKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAKKyAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSB0cmFjayBp
cyBkaXNhYmxlZCBhbHJlYWR5LCB3ZSBzaG91bGQgbW92ZSBhbG9uZy4KKyAgICAgICAgLy8gV2Ug
ZG9uJ3QgbmVlZCB0byByZS1kaXNhYmxlIGl0LgorICAgICAgICBpZiAoIUdldFRyYWNrRW5hYmxl
ZChjdXJyZW50VHJhY2spKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLy8gR3Jh
YiB0aGUgdHJhY2sncyBtZWRpYS4gV2UncmUgZ29pbmcgdG8gY2hlY2sgdG8gc2VlIGlmIHdlIG5l
ZWQgdG8KKyAgICAgICAgLy8gZGlzYWJsZSB0aGUgdHJhY2tzLiBUaGV5IGNvdWxkIGJlIHVuc3Vw
cG9ydGVkLgorICAgICAgICBNZWRpYSB0cmFja01lZGlhID0gR2V0VHJhY2tNZWRpYShjdXJyZW50
VHJhY2spOworICAgICAgICBpZiAoIXRyYWNrTWVkaWEpCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgCisgICAgICAgIC8vIEdyYWIgdGhlIG1lZGlhIHR5cGUgZm9yIHRoaXMgdHJhY2su
IE1ha2Ugc3VyZSB0aGF0IHdlIGRvbid0CisgICAgICAgIC8vIGdldCBhbiBlcnJvciBpbiBkb2lu
ZyBzby4gSWYgd2UgZG8sIHRoZW4gc29tZXRoaW5nIHJlYWxseSBmdW5reSBpcworICAgICAgICAv
LyB3cm9uZy4KKyAgICAgICAgT1NUeXBlIG1lZGlhVHlwZTsKKyAgICAgICAgR2V0TWVkaWFIYW5k
bGVyRGVzY3JpcHRpb24odHJhY2tNZWRpYSwgJm1lZGlhVHlwZSwgbmlsLCBuaWwpOworICAgICAg
ICBPU0VyciBtZWRpYUVyciA9IEdldE1vdmllc0Vycm9yKCk7ICAgIAorICAgICAgICBpZiAobWVk
aWFFcnIgIT0gbm9FcnIpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAg
IGlmICghYWxsb3dlZFRyYWNrVHlwZXMtPmNvbnRhaW5zKG1lZGlhVHlwZSkpIHsKKworICAgICAg
ICAgICAgLy8gRGlmZmVyZW50IG1wZWcgdmFyaWFudHMgaW1wb3J0IGFzIGRpZmZlcmVudCB0cmFj
ayB0eXBlcyBzbyBjaGVjayBmb3IgdGhlICJtcGVnIAorICAgICAgICAgICAgLy8gY2hhcmFjdGVy
aXN0aWMiIGluc3RlYWQgb2YgaGFyZCBjb2RpbmcgdGhlIChjdXJyZW50KSBsaXN0IG9mIG1wZWcg
bWVkaWEgdHlwZXMuCisgICAgICAgICAgICBpZiAoR2V0TW92aWVJbmRUcmFja1R5cGUobV9wcml2
YXRlLT5tX21vdmllLCAxLCAnbXBlZycsIG1vdmllVHJhY2tDaGFyYWN0ZXJpc3RpYyB8IG1vdmll
VHJhY2tFbmFibGVkT25seSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
ICAgIFNldFRyYWNrRW5hYmxlZChjdXJyZW50VHJhY2ssIGZhbHNlKTsKKyAgICAgICAgICAgIC0t
ZW5hYmxlZFRyYWNrQ291bnQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEdyYWIg
dGhlIHRyYWNrIHJlZmVyZW5jZSBjb3VudCBmb3IgY2hhcHRlcnMuIFRoaXMgd2lsbCB0ZWxsIHVz
IGlmIGl0CisgICAgICAgIC8vIGhhcyBjaGFwdGVyIHRyYWNrcyBpbiBpdC4gSWYgdGhlcmUgYXJl
bid0IGFueSByZWZlcmVuY2VzLCB0aGVuIHdlCisgICAgICAgIC8vIGNhbiBtb3ZlIG9uIHRoZSBu
ZXh0IHRyYWNrLgorICAgICAgICBsb25nIHJlZmVyZW5jZUNvdW50ID0gR2V0VHJhY2tSZWZlcmVu
Y2VDb3VudChjdXJyZW50VHJhY2ssIGtUcmFja1JlZmVyZW5jZUNoYXB0ZXJMaXN0KTsKKyAgICAg
ICAgaWYgKHJlZmVyZW5jZUNvdW50IDw9IDApCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgCisgICAgICAgIGxvbmcgcmVmZXJlbmNlSW5kZXggPSAwOyAgICAgICAgCisgICAgICAgIHdo
aWxlICgxKSB7CisgICAgICAgICAgICAvLyBJZiB3ZSBnZXQgbm90aGluZyBoZXJlLCB3ZSd2ZSBv
dmVyc3RlcHBlZCBvdXIgYm91bmRzIGFuZCBjYW4gc3RvcAorICAgICAgICAgICAgLy8gbG9va2lu
Zy4gQ2hhcHRlciBpbmRpY2VzIGhlcmUgYXJlIDEtYmFzZWQgYXMgd2VsbCAtIGhlbmNlLCB0aGUK
KyAgICAgICAgICAgIC8vIHByZS1pbmNyZW1lbnQuCisgICAgICAgICAgICByZWZlcmVuY2VJbmRl
eCsrOworICAgICAgICAgICAgVHJhY2sgY2hhcHRlclRyYWNrID0gR2V0VHJhY2tSZWZlcmVuY2Uo
Y3VycmVudFRyYWNrLCBrVHJhY2tSZWZlcmVuY2VDaGFwdGVyTGlzdCwgcmVmZXJlbmNlSW5kZXgp
OworICAgICAgICAgICAgaWYgKCFjaGFwdGVyVHJhY2spCisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFRyeSB0byBncmFiIHRoZSBtZWRpYSBmb3Ig
dGhlIHRyYWNrLgorICAgICAgICAgICAgTWVkaWEgY2hhcHRlck1lZGlhID0gR2V0VHJhY2tNZWRp
YShjaGFwdGVyVHJhY2spOworICAgICAgICAgICAgaWYgKCFjaGFwdGVyTWVkaWEpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICAgICAgLy8gR3JhYiB0aGUgbWVk
aWEgdHlwZSBmb3IgdGhpcyB0cmFjay4gTWFrZSBzdXJlIHRoYXQgd2UgZG9uJ3QKKyAgICAgICAg
ICAgIC8vIGdldCBhbiBlcnJvciBpbiBkb2luZyBzby4gSWYgd2UgZG8sIHRoZW4gc29tZXRoaW5n
IHJlYWxseQorICAgICAgICAgICAgLy8gZnVua3kgaXMgd3JvbmcuCisgICAgICAgICAgICBPU1R5
cGUgbWVkaWFUeXBlOworICAgICAgICAgICAgR2V0TWVkaWFIYW5kbGVyRGVzY3JpcHRpb24oY2hh
cHRlck1lZGlhLCAmbWVkaWFUeXBlLCBuaWwsIG5pbCk7CisgICAgICAgICAgICBPU0VyciBtZWRp
YUVyciA9IEdldE1vdmllc0Vycm9yKCk7CisgICAgICAgICAgICBpZiAobWVkaWFFcnIgIT0gbm9F
cnIpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IC8vIENoZWNrIHRvIHNlZSBpZiB0aGUgdHJhY2sgaXMgYSB2aWRlbyB0cmFjay4gV2UgZG9uJ3Qg
Y2FyZSBhYm91dAorICAgICAgICAgICAgLy8gb3RoZXIgbm9uLXZpZGVvIHRyYWNrcy4KKyAgICAg
ICAgICAgIGlmIChtZWRpYVR5cGUgIT0gVmlkZW9NZWRpYVR5cGUpCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0
aGUgdHJhY2sgaXMgYWxyZWFkeSBkaXNhYmxlZC4gSWYgaXQgaXMsIHdlCisgICAgICAgICAgICAv
LyBzaG91bGQgbW92ZSBhbG9uZy4KKyAgICAgICAgICAgIGlmICghR2V0VHJhY2tFbmFibGVkKGNo
YXB0ZXJUcmFjaykpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIC8vIERpc2FibGVkIHRoZSBldmlsLCBldmlsIHRyYWNrLgorICAgICAgICAgICAg
U2V0VHJhY2tFbmFibGVkKGNoYXB0ZXJUcmFjaywgZmFsc2UpOworICAgICAgICAgICAgLS1lbmFi
bGVkVHJhY2tDb3VudDsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBRVE1vdmllV2luOjpz
ZXREaXNhYmxlZChib29sIGIpCit7CisgICAgbV9kaXNhYmxlZCA9IGI7Cit9CisKKworYm9vbCBR
VE1vdmllV2luOjpoYXNWaWRlbygpIGNvbnN0Cit7CisgICAgaWYgKCFtX3ByaXZhdGUtPm1fbW92
aWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gKEdldE1vdmllSW5kVHJhY2tU
eXBlKG1fcHJpdmF0ZS0+bV9tb3ZpZSwgMSwgVmlzdWFsTWVkaWFDaGFyYWN0ZXJpc3RpYywgbW92
aWVUcmFja0NoYXJhY3RlcmlzdGljIHwgbW92aWVUcmFja0VuYWJsZWRPbmx5KSk7Cit9CisKK2Jv
b2wgUVRNb3ZpZVdpbjo6aGFzQXVkaW8oKSBjb25zdAoreworICAgIGlmICghbV9wcml2YXRlLT5t
X21vdmllKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIChHZXRNb3ZpZUluZFRy
YWNrVHlwZShtX3ByaXZhdGUtPm1fbW92aWUsIDEsIEF1ZGlvTWVkaWFDaGFyYWN0ZXJpc3RpYywg
bW92aWVUcmFja0NoYXJhY3RlcmlzdGljIHwgbW92aWVUcmFja0VuYWJsZWRPbmx5KSk7Cit9CisK
KworYm9vbCBRVE1vdmllV2luOjpoYXNDbG9zZWRDYXB0aW9ucygpIGNvbnN0IAoreworICAgIGlm
ICghbV9wcml2YXRlLT5tX21vdmllKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJu
IEdldE1vdmllSW5kVHJhY2tUeXBlKG1fcHJpdmF0ZS0+bV9tb3ZpZSwgMSwgY2xvc2VkQ2FwdGlv
blRyYWNrVHlwZSwgbW92aWVUcmFja01lZGlhVHlwZSk7Cit9CisKK3ZvaWQgUVRNb3ZpZVdpbjo6
c2V0Q2xvc2VkQ2FwdGlvbnNWaXNpYmxlKGJvb2wgdmlzaWJsZSkKK3sKKyAgICBpZiAoIW1fcHJp
dmF0ZS0+bV9tb3ZpZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVHJhY2sgY2NUcmFjayA9IEdl
dE1vdmllSW5kVHJhY2tUeXBlKG1fcHJpdmF0ZS0+bV9tb3ZpZSwgMSwgY2xvc2VkQ2FwdGlvblRy
YWNrVHlwZSwgbW92aWVUcmFja01lZGlhVHlwZSk7CisgICAgaWYgKCFjY1RyYWNrKQorICAgICAg
ICByZXR1cm47CisKKyAgICBCb29sZWFuIGRvRGlzcGxheSA9IHZpc2libGU7CisgICAgUVRTZXRU
cmFja1Byb3BlcnR5KGNjVHJhY2ssIGNsb3NlZENhcHRpb25UcmFja1R5cGUsIGNsb3NlZENhcHRp
b25EaXNwbGF5UHJvcGVydHlJRCwgc2l6ZW9mKGRvRGlzcGxheSksICZkb0Rpc3BsYXkpOworfQor
CitwYXNjYWwgT1NFcnIgbW92aWVEcmF3aW5nQ29tcGxldGVQcm9jKE1vdmllIG1vdmllLCBsb25n
IGRhdGEpCit7CisgICAgVXBwUGFyYW0gcGFyYW07CisgICAgcGFyYW0ubG9uZ1ZhbHVlID0gZGF0
YTsKKyAgICBRVE1vdmllV2luUHJpdmF0ZSogbXAgPSBzdGF0aWNfY2FzdDxRVE1vdmllV2luUHJp
dmF0ZSo+KHBhcmFtLnB0cik7CisgICAgaWYgKG1wKQorICAgICAgICBtcC0+ZHJhd2luZ0NvbXBs
ZXRlKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGluaXRpYWxpemVTdXBwb3J0
ZWRUeXBlcygpIAoreworICAgIGlmIChnU3VwcG9ydGVkVHlwZXMpCisgICAgICAgIHJldHVybjsK
KworICAgIGdTdXBwb3J0ZWRUeXBlcyA9IG5ldyBWZWN0b3I8Q0ZTdHJpbmdSZWY+OworICAgIGlm
IChxdWlja1RpbWVWZXJzaW9uIDwgbWluaW11bVF1aWNrVGltZVZlcnNpb24pIHsKKyAgICAgICAg
TE9HX0VSUk9SKCJRdWlja1RpbWUgdmVyc2lvbiAleCBkZXRlY3RlZCwgYXQgbGVhc3QgJXggcmVx
dWlyZWQuIFJldHVybmluZyBlbXB0eSBsaXN0IG9mIHN1cHBvcnRlZCBtZWRpYSBNSU1FIHR5cGVz
LiIsIHF1aWNrVGltZVZlcnNpb24sIG1pbmltdW1RdWlja1RpbWVWZXJzaW9uKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIC8vIFF1aWNrVGltZSBkb2Vzbid0IGhhdmUgYW4gaW1wb3J0
ZXIgZm9yIHZpZGVvL3F1aWNrdGltZS4gQWRkIGl0IG1hbnVhbGx5LgorICAgIGdTdXBwb3J0ZWRU
eXBlcy0+YXBwZW5kKENGU1RSKCJ2aWRlby9xdWlja3RpbWUiKSk7CisKKyAgICBmb3IgKGludCBp
bmRleCA9IDA7IGluZGV4IDwgMjsgaW5kZXgrKykgeworICAgICAgICBDb21wb25lbnREZXNjcmlw
dGlvbiBmaW5kQ0Q7CisKKyAgICAgICAgLy8gbG9vayBhdCBhbGwgbW92aWUgaW1wb3J0ZXJzIHRo
YXQgY2FuIGltcG9ydCBpbiBwbGFjZSBhbmQgYXJlIGluc3RhbGxlZC4gCisgICAgICAgIGZpbmRD
RC5jb21wb25lbnRUeXBlID0gTW92aWVJbXBvcnRUeXBlOworICAgICAgICBmaW5kQ0QuY29tcG9u
ZW50U3ViVHlwZSA9IDA7CisgICAgICAgIGZpbmRDRC5jb21wb25lbnRNYW51ZmFjdHVyZXIgPSAw
OworICAgICAgICBmaW5kQ0QuY29tcG9uZW50RmxhZ3NNYXNrID0gY21wSXNNaXNzaW5nIHwgbW92
aWVJbXBvcnRTdWJUeXBlSXNGaWxlRXh0ZW5zaW9uIHwgY2FuTW92aWVJbXBvcnRJblBsYWNlIHwg
ZG9udEF1dG9GaWxlTW92aWVJbXBvcnQ7CisKKyAgICAgICAgLy8gbG9vayBhdCB0aG9zZSByZWdp
c3RlcmVkIGJ5IEhGUyBmaWxlIHR5cGVzIHRoZSBmaXJzdCB0aW1lIHRocm91Z2gsIGJ5IGZpbGUg
ZXh0ZW5zaW9uIHRoZSBzZWNvbmQgdGltZQorICAgICAgICBmaW5kQ0QuY29tcG9uZW50RmxhZ3Mg
PSBjYW5Nb3ZpZUltcG9ydEluUGxhY2UgfCAoaW5kZXggPyBtb3ZpZUltcG9ydFN1YlR5cGVJc0Zp
bGVFeHRlbnNpb24gOiAwKTsKKyAgICAgICAgCisgICAgICAgIGxvbmcgY29tcG9uZW50Q291bnQg
PSBDb3VudENvbXBvbmVudHMoJmZpbmRDRCk7CisgICAgICAgIGlmICghY29tcG9uZW50Q291bnQp
CisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBDb21wb25lbnQgY29tcCA9IDA7Cisg
ICAgICAgIHdoaWxlIChjb21wID0gRmluZE5leHRDb21wb25lbnQoY29tcCwgJmZpbmRDRCkpIHsK
KyAgICAgICAgICAgIC8vIERvZXMgdGhpcyBjb21wb25lbnQgaGF2ZSBhIE1JTUUgdHlwZSBjb250
YWluZXI/CisgICAgICAgICAgICBDb21wb25lbnREZXNjcmlwdGlvbiBpbmZvQ0Q7CisgICAgICAg
ICAgICBPU0VyciBlcnIgPSBHZXRDb21wb25lbnRJbmZvKGNvbXAsICZpbmZvQ0QsIG5pbCAvKm5h
bWUqLywgbmlsIC8qaW5mbyovLCBuaWwgLyppY29uKi8pOworICAgICAgICAgICAgaWYgKGVycikK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmICghKGluZm9DRC5jb21w
b25lbnRGbGFncyAmIGhhc01vdmllSW1wb3J0TUlNRUxpc3QpKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgUVRBdG9tQ29udGFpbmVyIG1pbWVMaXN0ID0gMDsKKyAgICAg
ICAgICAgIGVyciA9IE1vdmllSW1wb3J0R2V0TUlNRVR5cGVMaXN0KChDb21wb25lbnRJbnN0YW5j
ZSljb21wLCAmbWltZUxpc3QpOworICAgICAgICAgICAgaWYgKGVyciB8fCAhbWltZUxpc3QpCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIC8vIEdyYWIgZXZlcnkgdHlw
ZSBmcm9tIHRoZSBjb250YWluZXIuCisgICAgICAgICAgICBRVExvY2tDb250YWluZXIobWltZUxp
c3QpOworICAgICAgICAgICAgaW50IHR5cGVDb3VudCA9IFFUQ291bnRDaGlsZHJlbk9mVHlwZSht
aW1lTGlzdCwga1BhcmVudEF0b21Jc0NvbnRhaW5lciwga01pbWVJbmZvTWltZVR5cGVUYWcpOwor
ICAgICAgICAgICAgZm9yIChpbnQgdHlwZUluZGV4ID0gMTsgdHlwZUluZGV4IDw9IHR5cGVDb3Vu
dDsgdHlwZUluZGV4KyspIHsKKyAgICAgICAgICAgICAgICBRVEF0b20gbWltZVRhZyA9IFFURmlu
ZENoaWxkQnlJbmRleChtaW1lTGlzdCwgMCwga01pbWVJbmZvTWltZVR5cGVUYWcsIHR5cGVJbmRl
eCwgMCk7CisgICAgICAgICAgICAgICAgaWYgKCFtaW1lVGFnKQorICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBjaGFyKiBhdG9tRGF0YTsKKyAgICAgICAgICAg
ICAgICBsb25nIHR5cGVMZW5ndGg7CisgICAgICAgICAgICAgICAgaWYgKG5vRXJyICE9IFFUR2V0
QXRvbURhdGFQdHIobWltZUxpc3QsIG1pbWVUYWcsICZ0eXBlTGVuZ3RoLCAmYXRvbURhdGEpKQor
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIGNoYXIgdHlw
ZUJ1ZmZlclsyNTZdOworICAgICAgICAgICAgICAgIGlmICh0eXBlTGVuZ3RoID49IHNpemVvZih0
eXBlQnVmZmVyKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAg
ICAgbWVtY3B5KHR5cGVCdWZmZXIsIGF0b21EYXRhLCB0eXBlTGVuZ3RoKTsKKyAgICAgICAgICAg
ICAgICB0eXBlQnVmZmVyW3R5cGVMZW5ndGhdID0gMDsKKworICAgICAgICAgICAgICAgIC8vIE9u
bHkgYWRkICJhdWRpby8uLi4iIGFuZCAidmlkZW8vLi4uIiB0eXBlcy4KKyAgICAgICAgICAgICAg
ICBpZiAoc3RybmNtcCh0eXBlQnVmZmVyLCAiYXVkaW8vIiwgNikgJiYgc3RybmNtcCh0eXBlQnVm
ZmVyLCAidmlkZW8vIiwgNikpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgICAgICAgICAgQ0ZTdHJpbmdSZWYgY2ZNaW1lVHlwZSA9IENGU3RyaW5nQ3JlYXRlV2l0aENT
dHJpbmcoMCwgdHlwZUJ1ZmZlciwga0NGU3RyaW5nRW5jb2RpbmdVVEY4KTsKKyAgICAgICAgICAg
ICAgICBpZiAoIWNmTWltZVR5cGUpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgICAgICAgICAgLy8gT25seSBhZGQgZWFjaCB0eXBlIG9uY2UuCisgICAgICAgICAgICAg
ICAgYm9vbCBhbHJlYWR5QWRkZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBh
ZGRlZEluZGV4ID0gMDsgYWRkZWRJbmRleCA8IGdTdXBwb3J0ZWRUeXBlcy0+c2l6ZSgpOyBhZGRl
ZEluZGV4KyspIHsKKyAgICAgICAgICAgICAgICAgICAgQ0ZTdHJpbmdSZWYgdHlwZSA9IGdTdXBw
b3J0ZWRUeXBlcy0+YXQoYWRkZWRJbmRleCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChrQ0ZD
b21wYXJlRXF1YWxUbyA9PSBDRlN0cmluZ0NvbXBhcmUoY2ZNaW1lVHlwZSwgdHlwZSwga0NGQ29t
cGFyZUNhc2VJbnNlbnNpdGl2ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFscmVhZHlB
ZGRlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIWFscmVh
ZHlBZGRlZCkKKyAgICAgICAgICAgICAgICAgICAgZ1N1cHBvcnRlZFR5cGVzLT5hcHBlbmQoY2ZN
aW1lVHlwZSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBDRlJl
bGVhc2UoY2ZNaW1lVHlwZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBEaXNwb3NlSGFu
ZGxlKG1pbWVMaXN0KTsKKyAgICAgICAgfQorICAgIH0KK30KKwordW5zaWduZWQgUVRNb3ZpZVdp
bjo6Y291bnRTdXBwb3J0ZWRUeXBlcygpCit7CisgICAgaW5pdGlhbGl6ZVN1cHBvcnRlZFR5cGVz
KCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihnU3VwcG9ydGVkVHlwZXMtPnNp
emUoKSk7Cit9CisKK3ZvaWQgUVRNb3ZpZVdpbjo6Z2V0U3VwcG9ydGVkVHlwZSh1bnNpZ25lZCBp
bmRleCwgY29uc3QgVUNoYXIqJiBzdHIsIHVuc2lnbmVkJiBsZW4pCit7CisgICAgaW5pdGlhbGl6
ZVN1cHBvcnRlZFR5cGVzKCk7CisgICAgQVNTRVJUKGluZGV4IDwgZ1N1cHBvcnRlZFR5cGVzLT5z
aXplKCkpOworCisgICAgLy8gQWxsb2NhdGUgc3VmZmljaWVudCBidWZmZXIgdG8gaG9sZCBhbnkg
TUlNRSB0eXBlCisgICAgc3RhdGljIFVuaUNoYXIqIHN0YXRpY0J1ZmZlciA9IDA7CisgICAgaWYg
KCFzdGF0aWNCdWZmZXIpCisgICAgICAgIHN0YXRpY0J1ZmZlciA9IG5ldyBVbmlDaGFyWzMyXTsK
KworICAgIENGU3RyaW5nUmVmIGNmc3RyID0gZ1N1cHBvcnRlZFR5cGVzLT5hdChpbmRleCk7Cisg
ICAgbGVuID0gQ0ZTdHJpbmdHZXRMZW5ndGgoY2ZzdHIpOworICAgIENGUmFuZ2UgcmFuZ2UgPSB7
IDAsIGxlbiB9OworICAgIENGU3RyaW5nR2V0Q2hhcmFjdGVycyhjZnN0ciwgcmFuZ2UsIHN0YXRp
Y0J1ZmZlcik7CisgICAgc3RyID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KHN0YXRp
Y0J1ZmZlcik7CisgICAgCit9CisKK3ZvaWQgUVRNb3ZpZVdpbjo6c2V0VGFza1RpbWVyRnVuY3Mo
U2V0VGFza1RpbWVyRGVsYXlGdW5jIHNldFRhc2tUaW1lckRlbGF5LCBTdG9wVGFza1RpbWVyRnVu
YyBzdG9wVGFza1RpbWVyKQoreworICAgIGdTZXRUYXNrVGltZXJEZWxheSA9IHNldFRhc2tUaW1l
ckRlbGF5OworICAgIGdTdG9wVGFza1RpbWVyID0gc3RvcFRhc2tUaW1lcjsKK30KKworYm9vbCBR
VE1vdmllV2luOjppbml0aWFsaXplUXVpY2tUaW1lKCkgCit7CisgICAgc3RhdGljIGJvb2wgaW5p
dGlhbGl6ZWQgPSBmYWxzZTsKKyAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXphdGlvblN1Y2NlZWRl
ZCA9IGZhbHNlOworICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgaW5pdGlhbGl6ZWQg
PSB0cnVlOworICAgICAgICAvLyBJbml0aWFsaXplIGFuZCBjaGVjayBRdWlja1RpbWUgdmVyc2lv
bgorICAgICAgICBPU0VyciByZXN1bHQgPSBJbml0aWFsaXplUVRNTChrSW5pdGlhbGl6ZVFUTUxF
bmFibGVEb3VibGVCdWZmZXJlZFN1cmZhY2UpOworICAgICAgICBpZiAocmVzdWx0ID09IG5vRXJy
KQorICAgICAgICAgICAgcmVzdWx0ID0gR2VzdGFsdChnZXN0YWx0UXVpY2tUaW1lLCAmcXVpY2tU
aW1lVmVyc2lvbik7CisgICAgICAgIGlmIChyZXN1bHQgIT0gbm9FcnIpIHsKKyAgICAgICAgICAg
IExPR19FUlJPUigiTm8gUXVpY2tUaW1lIGF2YWlsYWJsZS4gRGlzYWJsaW5nIDx2aWRlbz4gYW5k
IDxhdWRpbz4gc3VwcG9ydC4iKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgICAgICBpZiAocXVpY2tUaW1lVmVyc2lvbiA8IG1pbmltdW1RdWlja1RpbWVWZXJzaW9u
KSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIlF1aWNrVGltZSB2ZXJzaW9uICV4IGRldGVjdGVk
LCBhdCBsZWFzdCAleCByZXF1aXJlZC4gRGlzYWJsaW5nIDx2aWRlbz4gYW5kIDxhdWRpbz4gc3Vw
cG9ydC4iLCBxdWlja1RpbWVWZXJzaW9uLCBtaW5pbXVtUXVpY2tUaW1lVmVyc2lvbik7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgRW50ZXJNb3ZpZXMoKTsK
KyAgICAgICAgZ01vdmllRHJhd2luZ0NvbXBsZXRlVVBQID0gTmV3TW92aWVEcmF3aW5nQ29tcGxl
dGVVUFAobW92aWVEcmF3aW5nQ29tcGxldGVQcm9jKTsKKyAgICAgICAgaW5pdGlhbGl6YXRpb25T
dWNjZWVkZWQgPSB0cnVlOworICAgIH0KKyAgICByZXR1cm4gaW5pdGlhbGl6YXRpb25TdWNjZWVk
ZWQ7Cit9CisKK0xSRVNVTFQgUVRNb3ZpZVdpbjo6ZnVsbHNjcmVlblduZFByb2MoSFdORCB3bmQs
IFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3sKKyAgICBRVE1v
dmllV2luKiBtb3ZpZSA9IHN0YXRpY19jYXN0PFFUTW92aWVXaW4qPihHZXRQcm9wKHduZCwgZnVs
bHNjcmVlblFUTW92aWVXaW5Qb2ludGVyUHJvcCkpOworCisgICAgaWYgKG1lc3NhZ2UgPT0gV01f
REVTVFJPWSkKKyAgICAgICAgUmVtb3ZlUHJvcCh3bmQsIGZ1bGxzY3JlZW5RVE1vdmllV2luUG9p
bnRlclByb3ApOworCisgICAgaWYgKCFtb3ZpZSkKKyAgICAgICAgcmV0dXJuIERlZldpbmRvd1By
b2Mod25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7CisKKyAgICByZXR1cm4gbW92aWUtPm1f
cHJpdmF0ZS0+bV9mdWxsc2NyZWVuQ2xpZW50LT5mdWxsc2NyZWVuQ2xpZW50V25kUHJvYyh3bmQs
IG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtKTsKK30KKworSFdORCBRVE1vdmllV2luOjplbnRlckZ1
bGxzY3JlZW4oUVRNb3ZpZVdpbkZ1bGxzY3JlZW5DbGllbnQqIGNsaWVudCkKK3sKKyAgICBtX3By
aXZhdGUtPm1fZnVsbHNjcmVlbkNsaWVudCA9IGNsaWVudDsKKyAgICAKKyAgICBCZWdpbkZ1bGxT
Y3JlZW4oJm1fcHJpdmF0ZS0+bV9mdWxsc2NyZWVuUmVzdG9yZVN0YXRlLCAwLCAwLCAwLCAmbV9w
cml2YXRlLT5tX2Z1bGxzY3JlZW5XaW5kb3csIDAsIGZ1bGxTY3JlZW5BbGxvd0V2ZW50cyk7IAor
ICAgIFFUTUxTZXRXaW5kb3dXbmRQcm9jKG1fcHJpdmF0ZS0+bV9mdWxsc2NyZWVuV2luZG93LCBm
dWxsc2NyZWVuV25kUHJvYyk7CisgICAgQ3JlYXRlUG9ydEFzc29jaWF0aW9uKEdldFBvcnROYXRp
dmVXaW5kb3cobV9wcml2YXRlLT5tX2Z1bGxzY3JlZW5XaW5kb3cpLCAwLCAwKTsKKworICAgIEdl
dE1vdmllQm94KG1fcHJpdmF0ZS0+bV9tb3ZpZSwgJm1fcHJpdmF0ZS0+bV9mdWxsc2NyZWVuUmVj
dCk7CisgICAgR2V0TW92aWVHV29ybGQobV9wcml2YXRlLT5tX21vdmllLCAmbV9wcml2YXRlLT5t
X2Z1bGxzY3JlZW5PcmlnR1dvcmxkLCAwKTsKKyAgICBTZXRNb3ZpZUdXb3JsZChtX3ByaXZhdGUt
Pm1fbW92aWUsIHJlaW50ZXJwcmV0X2Nhc3Q8Q0dyYWZQdHI+KG1fcHJpdmF0ZS0+bV9mdWxsc2Ny
ZWVuV2luZG93KSwgR2V0R1dvcmxkRGV2aWNlKHJlaW50ZXJwcmV0X2Nhc3Q8Q0dyYWZQdHI+KG1f
cHJpdmF0ZS0+bV9mdWxsc2NyZWVuV2luZG93KSkpOworCisgICAgLy8gU2V0IHRoZSBzaXplIG9m
IHRoZSBib3ggdG8gcHJlc2VydmUgYXNwZWN0IHJhdGlvCisgICAgUmVjdCByZWN0ID0gbV9wcml2
YXRlLT5tX2Z1bGxzY3JlZW5XaW5kb3ctPnBvcnRSZWN0OworCisgICAgZmxvYXQgbW92aWVSYXRp
byA9IHN0YXRpY19jYXN0PGZsb2F0PihtX3ByaXZhdGUtPm1fd2lkdGgpIC8gbV9wcml2YXRlLT5t
X2hlaWdodDsKKyAgICBpbnQgd2luZG93V2lkdGggPSAgcmVjdC5yaWdodCAtIHJlY3QubGVmdDsK
KyAgICBpbnQgd2luZG93SGVpZ2h0ID0gcmVjdC5ib3R0b20gLSByZWN0LnRvcDsKKyAgICBmbG9h
dCB3aW5kb3dSYXRpbyA9IHN0YXRpY19jYXN0PGZsb2F0Pih3aW5kb3dXaWR0aCkgLyB3aW5kb3dI
ZWlnaHQ7CisgICAgaW50IGFjdHVhbFdpZHRoID0gKHdpbmRvd1JhdGlvID4gbW92aWVSYXRpbykg
PyAod2luZG93SGVpZ2h0ICogbW92aWVSYXRpbykgOiB3aW5kb3dXaWR0aDsKKyAgICBpbnQgYWN0
dWFsSGVpZ2h0ID0gKHdpbmRvd1JhdGlvIDwgbW92aWVSYXRpbykgPyAod2luZG93V2lkdGggLyBt
b3ZpZVJhdGlvKSA6IHdpbmRvd0hlaWdodDsKKyAgICBpbnQgb2Zmc2V0WCA9ICh3aW5kb3dXaWR0
aCAtIGFjdHVhbFdpZHRoKSAvIDI7CisgICAgaW50IG9mZnNldFkgPSAod2luZG93SGVpZ2h0IC0g
YWN0dWFsSGVpZ2h0KSAvIDI7CisKKyAgICByZWN0LmxlZnQgPSBvZmZzZXRYOworICAgIHJlY3Qu
cmlnaHQgPSBvZmZzZXRYICsgYWN0dWFsV2lkdGg7CisgICAgcmVjdC50b3AgPSBvZmZzZXRZOwor
ICAgIHJlY3QuYm90dG9tID0gb2Zmc2V0WSArIGFjdHVhbEhlaWdodDsKKworICAgIFNldE1vdmll
Qm94KG1fcHJpdmF0ZS0+bV9tb3ZpZSwgJnJlY3QpOworICAgIFNob3dIaWRlVGFza0Jhcih0cnVl
KTsKKworICAgIC8vIFNldCB0aGUgJ3RoaXMnIHBvaW50ZXIgb24gdGhlIEhXTkQKKyAgICBIV05E
IHduZCA9IHN0YXRpY19jYXN0PEhXTkQ+KEdldFBvcnROYXRpdmVXaW5kb3cobV9wcml2YXRlLT5t
X2Z1bGxzY3JlZW5XaW5kb3cpKTsKKyAgICBTZXRQcm9wKHduZCwgZnVsbHNjcmVlblFUTW92aWVX
aW5Qb2ludGVyUHJvcCwgc3RhdGljX2Nhc3Q8SEFORExFPih0aGlzKSk7CisKKyAgICByZXR1cm4g
d25kOworfQorCit2b2lkIFFUTW92aWVXaW46OmV4aXRGdWxsc2NyZWVuKCkKK3sKKyAgICBpZiAo
IW1fcHJpdmF0ZS0+bV9mdWxsc2NyZWVuV2luZG93KQorICAgICAgICByZXR1cm47CisKKyAgICBI
V05EIHduZCA9IHN0YXRpY19jYXN0PEhXTkQ+KEdldFBvcnROYXRpdmVXaW5kb3cobV9wcml2YXRl
LT5tX2Z1bGxzY3JlZW5XaW5kb3cpKTsKKyAgICBEZXN0cm95UG9ydEFzc29jaWF0aW9uKHJlaW50
ZXJwcmV0X2Nhc3Q8Q0dyYWZQdHI+KG1fcHJpdmF0ZS0+bV9mdWxsc2NyZWVuV2luZG93KSk7Cisg
ICAgU2V0TW92aWVHV29ybGQobV9wcml2YXRlLT5tX21vdmllLCBtX3ByaXZhdGUtPm1fZnVsbHNj
cmVlbk9yaWdHV29ybGQsIDApOworICAgIEVuZEZ1bGxTY3JlZW4obV9wcml2YXRlLT5tX2Z1bGxz
Y3JlZW5SZXN0b3JlU3RhdGUsIDBMKTsKKyAgICBTZXRNb3ZpZUJveChtX3ByaXZhdGUtPm1fbW92
aWUsICZtX3ByaXZhdGUtPm1fZnVsbHNjcmVlblJlY3QpOworICAgIG1fcHJpdmF0ZS0+bV9mdWxs
c2NyZWVuV2luZG93ID0gMDsKK30KKworQk9PTCBXSU5BUEkgRGxsTWFpbihISU5TVEFOQ0UgaGlu
c3RETEwsIERXT1JEIGZkd1JlYXNvbiwgTFBWT0lEIGxwdlJlc2VydmVkKQoreworICAgIHN3aXRj
aCAoZmR3UmVhc29uKSB7CisgICAgY2FzZSBETExfUFJPQ0VTU19BVFRBQ0g6CisgICAgICAgIHJl
dHVybiBUUlVFOworICAgIGNhc2UgRExMX1BST0NFU1NfREVUQUNIOgorICAgIGNhc2UgRExMX1RI
UkVBRF9BVFRBQ0g6CisgICAgY2FzZSBETExfVEhSRUFEX0RFVEFDSDoKKyAgICAgICAgcmV0dXJu
IEZBTFNFOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gRkFM
U0U7Cit9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVE1vdmllLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVE1vdmllLmNwcAko
cmV2aXNpb24gNTgxODcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVE1vdmll
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsMTcgKzI0LDE3IEBACiAgKi8KICNpbmNsdWRlICJj
b25maWcuaCIKIAotI2luY2x1ZGUgIlFUTW92aWVXaW4uaCIKKyNpbmNsdWRlICJRVE1vdmllLmgi
CiAKIC8vIFB1dCBNb3ZpZXMuaCBmaXJzdCBzbyBidWlsZCBmYWlsdXJlcyBoZXJlIHBvaW50IGNs
ZWFybHkgdG8gUXVpY2tUaW1lCiAjaW5jbHVkZSA8TW92aWVzLmg+CiAKKyNpbmNsdWRlICJRVE1v
dmllVGFzay5oIgogI2luY2x1ZGUgIlFUTW92aWVXaW5UaW1lci5oIgogI2luY2x1ZGUgPEdYTWF0
aC5oPgogI2luY2x1ZGUgPFFUTUwuaD4KICNpbmNsdWRlIDxRdWlja1RpbWVDb21wb25lbnRzLmg+
CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgog
I2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApA
QCAtNDcsNyArNDcsNyBAQCBzdGF0aWMgY29uc3QgbG9uZyBzdWJUaXRsZVRyYWNrVHlwZSA9ICdz
CiBzdGF0aWMgY29uc3QgbG9uZyBtcGVnNE9iamVjdERlc2NyaXB0aW9uVHJhY2tUeXBlID0gJ29k
c20nOwogc3RhdGljIGNvbnN0IGxvbmcgbXBlZzRTY2VuZURlc2NyaXB0aW9uVHJhY2tUeXBlID0g
J3Nkc20nOwogc3RhdGljIGNvbnN0IGxvbmcgY2xvc2VkQ2FwdGlvbkRpc3BsYXlQcm9wZXJ0eUlE
ID0gJ2Rpc3AnOwotc3RhdGljIExQQ1RTVFIgZnVsbHNjcmVlblFUTW92aWVXaW5Qb2ludGVyUHJv
cCA9IFRFWFQoImZ1bGxzY3JlZW5RVE1vdmllV2luUG9pbnRlciIpOworc3RhdGljIExQQ1RTVFIg
ZnVsbHNjcmVlblFUTW92aWVQb2ludGVyUHJvcCA9IFRFWFQoImZ1bGxzY3JlZW5RVE1vdmllUG9p
bnRlciIpOwogCiAvLyBSZXNpemluZyBHV29ybGRzIGlzIHNsb3csIGdpdmUgdGhlbSBhIG1pbmlt
dW0gc2l6ZSBzbyBzaXplIG9mIHNtYWxsIAogLy8gdmlkZW9zIGNhbiBiZSBhbmltYXRlZCBzbW9v
dGhseQpAQCAtNjEsNTMgKzYxLDI1IEBAIHVuaW9uIFVwcFBhcmFtIHsKICAgICB2b2lkKiBwdHI7
CiB9OwogCi1zdGF0aWMgTW92aWVEcmF3aW5nQ29tcGxldGVVUFAgZ01vdmllRHJhd2luZ0NvbXBs
ZXRlVVBQID0gMDsKLXN0YXRpYyBIYXNoU2V0PFFUTW92aWVXaW5Qcml2YXRlKj4qIGdUYXNrTGlz
dDsKIHN0YXRpYyBWZWN0b3I8Q0ZTdHJpbmdSZWY+KiBnU3VwcG9ydGVkVHlwZXMgPSAwOwogc3Rh
dGljIFNJbnQzMiBxdWlja1RpbWVWZXJzaW9uID0gMDsKIAotc3RhdGljIFFUTW92aWVXaW46OlNl
dFRhc2tUaW1lckRlbGF5RnVuYyBnU2V0VGFza1RpbWVyRGVsYXkgPSAwOwotc3RhdGljIFFUTW92
aWVXaW46OlN0b3BUYXNrVGltZXJGdW5jIGdTdG9wVGFza1RpbWVyID0gMDsKLQotc3RhdGljIHZv
aWQgdXBkYXRlVGFza1RpbWVyKGludCBtYXhJbnRlcnZhbCA9IDEwMDApCi17Ci0gICAgaWYgKCFn
VGFza0xpc3QtPnNpemUoKSkgewotICAgICAgICBnU3RvcFRhc2tUaW1lcigpOwotICAgICAgICBy
ZXR1cm47ICAgIAotICAgIH0KLSAgICAKLSAgICBsb25nIGludGVydmFsSW5NUzsKLSAgICBRVEdl
dFRpbWVVbnRpbE5leHRUYXNrKCZpbnRlcnZhbEluTVMsIDEwMDApOwotICAgIGlmIChpbnRlcnZh
bEluTVMgPiBtYXhJbnRlcnZhbCkKLSAgICAgICAgaW50ZXJ2YWxJbk1TID0gbWF4SW50ZXJ2YWw7
Ci0gICAgZ1NldFRhc2tUaW1lckRlbGF5KHN0YXRpY19jYXN0PGZsb2F0PihpbnRlcnZhbEluTVMp
IC8gMTAwMCk7Ci19Ci0KLWNsYXNzIFFUTW92aWVXaW5Qcml2YXRlIDogcHVibGljIE5vbmNvcHlh
YmxlIHsKK2NsYXNzIFFUTW92aWVQcml2YXRlIDogcHVibGljIE5vbmNvcHlhYmxlLCBwdWJsaWMg
UVRNb3ZpZVRhc2tDbGllbnQgewogcHVibGljOgotICAgIFFUTW92aWVXaW5Qcml2YXRlKCk7Ci0g
ICAgflFUTW92aWVXaW5Qcml2YXRlKCk7CisgICAgUVRNb3ZpZVByaXZhdGUoKTsKKyAgICB+UVRN
b3ZpZVByaXZhdGUoKTsKICAgICB2b2lkIHRhc2soKTsKICAgICB2b2lkIHN0YXJ0VGFzaygpOwog
ICAgIHZvaWQgZW5kVGFzaygpOwogCiAgICAgdm9pZCBjcmVhdGVNb3ZpZUNvbnRyb2xsZXIoKTsK
LSAgICB2b2lkIHJlZ2lzdGVyRHJhd2luZ0NhbGxiYWNrKCk7Ci0gICAgdm9pZCBkcmF3aW5nQ29t
cGxldGUoKTsKLSAgICB2b2lkIHVwZGF0ZUdXb3JsZCgpOwotICAgIHZvaWQgY3JlYXRlR1dvcmxk
KCk7Ci0gICAgdm9pZCBkZWxldGVHV29ybGQoKTsKLSAgICB2b2lkIGNsZWFyR1dvcmxkKCk7Ci0g
ICAgdm9pZCBjYWNoZU1vdmllU2NhbGUoKTsKLSAgICB2b2lkIHVwZGF0ZU1vdmllU2l6ZSgpOwot
Ci0gICAgdm9pZCBzZXRTaXplKGludCwgaW50KTsKIAotICAgIFFUTW92aWVXaW4qIG1fbW92aWVX
aW47CisgICAgUVRNb3ZpZSogbV9tb3ZpZVdpbjsKICAgICBNb3ZpZSBtX21vdmllOwogICAgIE1v
dmllQ29udHJvbGxlciBtX21vdmllQ29udHJvbGxlcjsKICAgICBib29sIG1fdGFza2luZzsKLSAg
ICBRVE1vdmllV2luQ2xpZW50KiBtX2NsaWVudDsKKyAgICBib29sIG1fZGlzYWJsZWQ7CisgICAg
VmVjdG9yPFFUTW92aWVDbGllbnQqPiBtX2NsaWVudHM7CiAgICAgbG9uZyBtX2xvYWRTdGF0ZTsK
ICAgICBib29sIG1fZW5kZWQ7CiAgICAgYm9vbCBtX3NlZWtpbmc7CkBAIC0xMTYsMTAgKzg4LDYg
QEAgcHVibGljOgogICAgIGludCBtX3dpZHRoOwogICAgIGludCBtX2hlaWdodDsKICAgICBib29s
IG1fdmlzaWJsZTsKLSAgICBHV29ybGRQdHIgbV9nV29ybGQ7Ci0gICAgaW50IG1fZ1dvcmxkV2lk
dGg7Ci0gICAgaW50IG1fZ1dvcmxkSGVpZ2h0OwotICAgIEdXb3JsZFB0ciBtX3NhdmVkR1dvcmxk
OwogICAgIGxvbmcgbV9sb2FkRXJyb3I7CiAgICAgZmxvYXQgbV93aWR0aFNjYWxlRmFjdG9yOwog
ICAgIGZsb2F0IG1faGVpZ2h0U2NhbGVGYWN0b3I7CkBAIC0xMjksMTkgKzk3LDEzIEBAIHB1Ymxp
YzoKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgYm9vbCBtX3NjYWxlQ2FjaGVkOwogI2VuZGlm
Ci0gICAgV2luZG93UHRyIG1fZnVsbHNjcmVlbldpbmRvdzsKLSAgICBHV29ybGRQdHIgbV9mdWxs
c2NyZWVuT3JpZ0dXb3JsZDsKLSAgICBSZWN0IG1fZnVsbHNjcmVlblJlY3Q7Ci0gICAgUVRNb3Zp
ZVdpbkZ1bGxzY3JlZW5DbGllbnQqIG1fZnVsbHNjcmVlbkNsaWVudDsKLSAgICBjaGFyKiBtX2Z1
bGxzY3JlZW5SZXN0b3JlU3RhdGU7CiB9OwogCi1RVE1vdmllV2luUHJpdmF0ZTo6UVRNb3ZpZVdp
blByaXZhdGUoKQorUVRNb3ZpZVByaXZhdGU6OlFUTW92aWVQcml2YXRlKCkKICAgICA6IG1fbW92
aWVXaW4oMCkKICAgICAsIG1fbW92aWUoMCkKICAgICAsIG1fbW92aWVDb250cm9sbGVyKDApCiAg
ICAgLCBtX3Rhc2tpbmcoZmFsc2UpCi0gICAgLCBtX2NsaWVudCgwKQogICAgICwgbV9sb2FkU3Rh
dGUoMCkKICAgICAsIG1fZW5kZWQoZmFsc2UpCiAgICAgLCBtX3NlZWtpbmcoZmFsc2UpCkBAIC0x
NTAsMzUgKzExMiwyMiBAQCBRVE1vdmllV2luUHJpdmF0ZTo6UVRNb3ZpZVdpblByaXZhdGUoKQog
ICAgICwgbV93aWR0aCgwKQogICAgICwgbV9oZWlnaHQoMCkKICAgICAsIG1fdmlzaWJsZShmYWxz
ZSkKLSAgICAsIG1fZ1dvcmxkKDApCi0gICAgLCBtX2dXb3JsZFdpZHRoKDApCi0gICAgLCBtX2dX
b3JsZEhlaWdodCgwKQotICAgICwgbV9zYXZlZEdXb3JsZCgwKQogICAgICwgbV9sb2FkRXJyb3Io
MCkKICAgICAsIG1fd2lkdGhTY2FsZUZhY3RvcigxKQogICAgICwgbV9oZWlnaHRTY2FsZUZhY3Rv
cigxKQogICAgICwgbV9jdXJyZW50VVJMKDApCiAgICAgLCBtX3RpbWVUb1Jlc3RvcmUoLTEuMGYp
CiAgICAgLCBtX3JhdGVUb1Jlc3RvcmUoLTEuMGYpCisgICAgLCBtX2Rpc2FibGVkKGZhbHNlKQog
I2lmICFBU1NFUlRfRElTQUJMRUQKICAgICAsIG1fc2NhbGVDYWNoZWQoZmFsc2UpCiAjZW5kaWYK
LSAgICAsIG1fZnVsbHNjcmVlbldpbmRvdygwKQotICAgICwgbV9mdWxsc2NyZWVuT3JpZ0dXb3Js
ZCgwKQotICAgICwgbV9mdWxsc2NyZWVuQ2xpZW50KDApCi0gICAgLCBtX2Z1bGxzY3JlZW5SZXN0
b3JlU3RhdGUoMCkKIHsKLSAgICBSZWN0IHJlY3QgPSB7IDAsIDAsIDAsIDAgfTsKLSAgICBtX2Z1
bGxzY3JlZW5SZWN0ID0gcmVjdDsKIH0KIAotUVRNb3ZpZVdpblByaXZhdGU6On5RVE1vdmllV2lu
UHJpdmF0ZSgpCitRVE1vdmllUHJpdmF0ZTo6flFUTW92aWVQcml2YXRlKCkKIHsKLSAgICBBU1NF
UlQoIW1fZnVsbHNjcmVlbldpbmRvdyk7Ci0KICAgICBlbmRUYXNrKCk7Ci0gICAgaWYgKG1fZ1dv
cmxkKQotICAgICAgICBkZWxldGVHV29ybGQoKTsKICAgICBpZiAobV9tb3ZpZUNvbnRyb2xsZXIp
CiAgICAgICAgIERpc3Bvc2VNb3ZpZUNvbnRyb2xsZXIobV9tb3ZpZUNvbnRyb2xsZXIpOwogICAg
IGlmIChtX21vdmllKQpAQCAtMTg3LDU5ICsxMzYsMjUgQEAgUVRNb3ZpZVdpblByaXZhdGU6On5R
VE1vdmllV2luUHJpdmF0ZSgpCiAgICAgICAgIENGUmVsZWFzZShtX2N1cnJlbnRVUkwpOwogfQog
Ci12b2lkIFFUTW92aWVXaW46OnRhc2tUaW1lckZpcmVkKCkKLXsKLSAgICAvLyBUaGUgaGFzaCBj
b250ZW50IG1pZ2h0IGNoYW5nZSBkdXJpbmcgdGFzaygpCi0gICAgVmVjdG9yPFFUTW92aWVXaW5Q
cml2YXRlKj4gdGFza3M7Ci0gICAgY29weVRvVmVjdG9yKCpnVGFza0xpc3QsIHRhc2tzKTsKLSAg
ICBzaXplX3QgY291bnQgPSB0YXNrcy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBuID0gMDsg
biA8IGNvdW50OyArK24pCi0gICAgICAgIHRhc2tzW25dLT50YXNrKCk7Ci0KLSAgICB1cGRhdGVU
YXNrVGltZXIoKTsKLX0KLQotdm9pZCBRVE1vdmllV2luUHJpdmF0ZTo6c3RhcnRUYXNrKCkgCi17
Ci0gICAgaWYgKG1fdGFza2luZykKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghZ1Rhc2tMaXN0
KQotICAgICAgICBnVGFza0xpc3QgPSBuZXcgSGFzaFNldDxRVE1vdmllV2luUHJpdmF0ZSo+Owot
ICAgIGdUYXNrTGlzdC0+YWRkKHRoaXMpOwotICAgIG1fdGFza2luZyA9IHRydWU7Ci0gICAgdXBk
YXRlVGFza1RpbWVyKCk7Ci19Ci0KLXZvaWQgUVRNb3ZpZVdpblByaXZhdGU6OmVuZFRhc2soKSAK
K3ZvaWQgUVRNb3ZpZVByaXZhdGU6OnN0YXJ0VGFzaygpIAogewotICAgIGlmICghbV90YXNraW5n
KQotICAgICAgICByZXR1cm47Ci0gICAgZ1Rhc2tMaXN0LT5yZW1vdmUodGhpcyk7Ci0gICAgbV90
YXNraW5nID0gZmFsc2U7Ci0gICAgdXBkYXRlVGFza1RpbWVyKCk7CisgICAgaWYgKCFtX3Rhc2tp
bmcpIHsKKyAgICAgICAgUVRNb3ZpZVRhc2s6OnNoYXJlZFRhc2soKS0+YWRkVGFza0NsaWVudCh0
aGlzKTsKKyAgICAgICAgbV90YXNraW5nID0gdHJ1ZTsKKyAgICB9CisgICAgUVRNb3ZpZVRhc2s6
OnNoYXJlZFRhc2soKS0+dXBkYXRlVGFza1RpbWVyKCk7CiB9CiAKLXZvaWQgUVRNb3ZpZVdpblBy
aXZhdGU6OmNhY2hlTW92aWVTY2FsZSgpCit2b2lkIFFUTW92aWVQcml2YXRlOjplbmRUYXNrKCkg
CiB7Ci0gICAgUmVjdCBuYXR1cmFsUmVjdDsKLSAgICBSZWN0IGluaXRpYWxSZWN0OwotCi0gICAg
R2V0TW92aWVOYXR1cmFsQm91bmRzUmVjdChtX21vdmllLCAmbmF0dXJhbFJlY3QpOwotICAgIEdl
dE1vdmllQm94KG1fbW92aWUsICZpbml0aWFsUmVjdCk7Ci0KLSAgICBmbG9hdCBuYXR1cmFsV2lk
dGggPSBuYXR1cmFsUmVjdC5yaWdodCAtIG5hdHVyYWxSZWN0LmxlZnQ7Ci0gICAgZmxvYXQgbmF0
dXJhbEhlaWdodCA9IG5hdHVyYWxSZWN0LmJvdHRvbSAtIG5hdHVyYWxSZWN0LnRvcDsKLQotICAg
IGlmIChuYXR1cmFsV2lkdGgpCi0gICAgICAgIG1fd2lkdGhTY2FsZUZhY3RvciA9IChpbml0aWFs
UmVjdC5yaWdodCAtIGluaXRpYWxSZWN0LmxlZnQpIC8gbmF0dXJhbFdpZHRoOwotICAgIGlmIChu
YXR1cmFsSGVpZ2h0KQotICAgICAgICBtX2hlaWdodFNjYWxlRmFjdG9yID0gKGluaXRpYWxSZWN0
LmJvdHRvbSAtIGluaXRpYWxSZWN0LnRvcCkgLyBuYXR1cmFsSGVpZ2h0OwotI2lmICFBU1NFUlRf
RElTQUJMRUQKLSAgICBtX3NjYWxlQ2FjaGVkID0gdHJ1ZTs7Ci0jZW5kaWYKKyAgICBpZiAobV90
YXNraW5nKSB7CisgICAgICAgIFFUTW92aWVUYXNrOjpzaGFyZWRUYXNrKCktPnJlbW92ZVRhc2tD
bGllbnQodGhpcyk7CisgICAgICAgIG1fdGFza2luZyA9IGZhbHNlOworICAgIH0KKyAgICBRVE1v
dmllVGFzazo6c2hhcmVkVGFzaygpLT51cGRhdGVUYXNrVGltZXIoKTsKIH0KIAotdm9pZCBRVE1v
dmllV2luUHJpdmF0ZTo6dGFzaygpIAordm9pZCBRVE1vdmllUHJpdmF0ZTo6dGFzaygpIAogewog
ICAgIEFTU0VSVChtX3Rhc2tpbmcpOwogCkBAIC0yNTYsMjMgKzE3MSwxOSBAQCB2b2lkIFFUTW92
aWVXaW5Qcml2YXRlOjp0YXNrKCkgCiAgICAgICAgIC8vIFRoaXMgaXMgZGlmZmVyZW50IGZyb20g
UVRLaXQgQVBJIGFuZCBzZWVtcyBzdHJhbmdlLgogICAgICAgICBsb25nIGxvYWRTdGF0ZSA9IG1f
bG9hZEVycm9yID8gUVRNb3ZpZUxvYWRTdGF0ZUVycm9yIDogR2V0TW92aWVMb2FkU3RhdGUobV9t
b3ZpZSk7CiAgICAgICAgIGlmIChsb2FkU3RhdGUgIT0gbV9sb2FkU3RhdGUpIHsKLQogICAgICAg
ICAgICAgLy8gd2Ugb25seSBuZWVkIHRvIGVyYXNlIHRoZSBtb3ZpZSBnd29ybGQgd2hlbiB0aGUg
bG9hZCBzdGF0ZSBjaGFuZ2VzIHRvIGxvYWRlZCB3aGlsZSBpdAogICAgICAgICAgICAgLy8gIGlz
IHZpc2libGUgYXMgdGhlIGd3b3JsZCBpcyBkZXN0cm95ZWQvY3JlYXRlZCB3aGVuIHZpc2liaWxp
dHkgY2hhbmdlcwogICAgICAgICAgICAgYm9vbCBzaG91bGRSZXN0b3JlUGxheWJhY2tTdGF0ZSA9
IGZhbHNlOwogICAgICAgICAgICAgYm9vbCBtb3ZpZU5ld2x5UGxheWFibGUgPSBsb2FkU3RhdGUg
Pj0gUVRNb3ZpZUxvYWRTdGF0ZUxvYWRlZCAmJiBtX2xvYWRTdGF0ZSA8IFFUTW92aWVMb2FkU3Rh
dGVMb2FkZWQ7CiAgICAgICAgICAgICBtX2xvYWRTdGF0ZSA9IGxvYWRTdGF0ZTsKLSAgICAgICAg
ICAgIGlmIChtb3ZpZU5ld2x5UGxheWFibGUpIHsKLSAgICAgICAgICAgICAgICBjYWNoZU1vdmll
U2NhbGUoKTsKLSAgICAgICAgICAgICAgICB1cGRhdGVNb3ZpZVNpemUoKTsKLSAgICAgICAgICAg
ICAgICBpZiAobV92aXNpYmxlKQotICAgICAgICAgICAgICAgICAgICBjbGVhckdXb3JsZCgpOwor
ICAgICAgICAgICAgaWYgKG1vdmllTmV3bHlQbGF5YWJsZSkKICAgICAgICAgICAgICAgICBzaG91
bGRSZXN0b3JlUGxheWJhY2tTdGF0ZSA9IHRydWU7Ci0gICAgICAgICAgICB9CiAKICAgICAgICAg
ICAgIGlmICghbV9tb3ZpZUNvbnRyb2xsZXIgJiYgbV9sb2FkU3RhdGUgPj0gUVRNb3ZpZUxvYWRT
dGF0ZUxvYWRlZCkKICAgICAgICAgICAgICAgICBjcmVhdGVNb3ZpZUNvbnRyb2xsZXIoKTsKLSAg
ICAgICAgICAgIG1fY2xpZW50LT5tb3ZpZUxvYWRTdGF0ZUNoYW5nZWQobV9tb3ZpZVdpbik7CisK
KyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jbGllbnRzLnNpemUoKTsgKytp
KQorICAgICAgICAgICAgICAgIG1fY2xpZW50c1tpXS0+bW92aWVMb2FkU3RhdGVDaGFuZ2VkKG1f
bW92aWVXaW4pOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoc2hvdWxkUmVzdG9yZVBs
YXliYWNrU3RhdGUgJiYgbV90aW1lVG9SZXN0b3JlICE9IC0xLjBmKSB7CiAgICAgICAgICAgICAg
ICAgbV9tb3ZpZVdpbi0+c2V0Q3VycmVudFRpbWUobV90aW1lVG9SZXN0b3JlKTsKQEAgLTI4MSw3
ICsxOTIsNyBAQCB2b2lkIFFUTW92aWVXaW5Qcml2YXRlOjp0YXNrKCkgCiAgICAgICAgICAgICAg
ICAgbV9yYXRlVG9SZXN0b3JlID0gLTEuMGY7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IGlmIChtX21vdmllV2luLT5tX2Rpc2FibGVkKSB7CisgICAgICAgICAgICBpZiAobV9kaXNhYmxl
ZCkgewogICAgICAgICAgICAgICAgIGVuZFRhc2soKTsKICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICB9CkBAIC0yOTIsMjMgKzIwMywyNyBAQCB2b2lkIFFUTW92aWVXaW5Qcml2
YXRlOjp0YXNrKCkgCiAgICAgYm9vbCBlbmRlZCA9ICEhSXNNb3ZpZURvbmUobV9tb3ZpZSk7CiAg
ICAgaWYgKGVuZGVkICE9IG1fZW5kZWQpIHsKICAgICAgICAgbV9lbmRlZCA9IGVuZGVkOwotICAg
ICAgICBpZiAobV9jbGllbnQgJiYgZW5kZWQpCi0gICAgICAgICAgICBtX2NsaWVudC0+bW92aWVF
bmRlZChtX21vdmllV2luKTsKKyAgICAgICAgaWYgKGVuZGVkKSB7CisgICAgICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fY2xpZW50cy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAg
IG1fY2xpZW50c1tpXS0+bW92aWVFbmRlZChtX21vdmllV2luKTsKKyAgICAgICAgfQogICAgIH0K
IAogICAgIGZsb2F0IHRpbWUgPSBtX21vdmllV2luLT5jdXJyZW50VGltZSgpOwogICAgIGlmICh0
aW1lIDwgbV9sYXN0TWVkaWFUaW1lIHx8IHRpbWUgPj0gbV9sYXN0TWVkaWFUaW1lICsgY05vbkNv
bnRpbnVvdXNUaW1lQ2hhbmdlIHx8IG1fc2Vla2luZykgewogICAgICAgICBtX3NlZWtpbmcgPSBm
YWxzZTsKLSAgICAgICAgaWYgKG1fY2xpZW50KQotICAgICAgICAgICAgbV9jbGllbnQtPm1vdmll
VGltZUNoYW5nZWQobV9tb3ZpZVdpbik7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9jbGllbnRzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgbV9jbGllbnRzW2ldLT5tb3ZpZVRp
bWVDaGFuZ2VkKG1fbW92aWVXaW4pOwogICAgIH0KICAgICBtX2xhc3RNZWRpYVRpbWUgPSB0aW1l
OwogCiAgICAgaWYgKG1fbG9hZEVycm9yKQogICAgICAgICBlbmRUYXNrKCk7CisgICAgZWxzZQor
ICAgICAgICBRVE1vdmllVGFzazo6c2hhcmVkVGFzaygpLT51cGRhdGVUYXNrVGltZXIoKTsKIH0K
IAotdm9pZCBRVE1vdmllV2luUHJpdmF0ZTo6Y3JlYXRlTW92aWVDb250cm9sbGVyKCkKK3ZvaWQg
UVRNb3ZpZVByaXZhdGU6OmNyZWF0ZU1vdmllQ29udHJvbGxlcigpCiB7CiAgICAgUmVjdCBib3Vu
ZHM7CiAgICAgbG9uZyBmbGFnczsKQEAgLTMyNCwxNTUgKzIzOSwzNiBAQCB2b2lkIFFUTW92aWVX
aW5Qcml2YXRlOjpjcmVhdGVNb3ZpZUNvbnRyCiAgICAgbV9tb3ZpZUNvbnRyb2xsZXIgPSBOZXdN
b3ZpZUNvbnRyb2xsZXIobV9tb3ZpZSwgJmJvdW5kcywgZmxhZ3MpOwogICAgIGlmICghbV9tb3Zp
ZUNvbnRyb2xsZXIpCiAgICAgICAgIHJldHVybjsKLQotICAgIE1DU2V0Q29udHJvbGxlclBvcnQo
bV9tb3ZpZUNvbnRyb2xsZXIsIG1fZ1dvcmxkKTsKLSAgICBNQ1NldENvbnRyb2xsZXJBdHRhY2hl
ZChtX21vdmllQ29udHJvbGxlciwgZmFsc2UpOwotfQotCi12b2lkIFFUTW92aWVXaW5Qcml2YXRl
OjpyZWdpc3RlckRyYXdpbmdDYWxsYmFjaygpCi17Ci0gICAgVXBwUGFyYW0gcGFyYW07Ci0gICAg
cGFyYW0ucHRyID0gdGhpczsKLSAgICBTZXRNb3ZpZURyYXdpbmdDb21wbGV0ZVByb2MobV9tb3Zp
ZSwgbW92aWVEcmF3aW5nQ2FsbFdoZW5DaGFuZ2VkLCBnTW92aWVEcmF3aW5nQ29tcGxldGVVUFAs
IHBhcmFtLmxvbmdWYWx1ZSk7Ci19Ci0KLXZvaWQgUVRNb3ZpZVdpblByaXZhdGU6OmRyYXdpbmdD
b21wbGV0ZSgpCi17Ci0gICAgaWYgKCFtX2dXb3JsZCB8fCBtX21vdmllV2luLT5tX2Rpc2FibGVk
IHx8IG1fbG9hZFN0YXRlIDwgUVRNb3ZpZUxvYWRTdGF0ZUxvYWRlZCkKLSAgICAgICAgcmV0dXJu
OwotICAgIG1fY2xpZW50LT5tb3ZpZU5ld0ltYWdlQXZhaWxhYmxlKG1fbW92aWVXaW4pOwotfQot
Ci12b2lkIFFUTW92aWVXaW5Qcml2YXRlOjp1cGRhdGVHV29ybGQoKQotewotICAgIGJvb2wgc2hv
dWxkQmVWaXNpYmxlID0gbV92aXNpYmxlOwotICAgIGlmICghbV9oZWlnaHQgfHwgIW1fd2lkdGgp
Ci0gICAgICAgIHNob3VsZEJlVmlzaWJsZSA9IGZhbHNlOwotCi0gICAgaWYgKHNob3VsZEJlVmlz
aWJsZSAmJiAhbV9nV29ybGQpCi0gICAgICAgIGNyZWF0ZUdXb3JsZCgpOwotICAgIGVsc2UgaWYg
KCFzaG91bGRCZVZpc2libGUgJiYgbV9nV29ybGQpCi0gICAgICAgIGRlbGV0ZUdXb3JsZCgpOwot
ICAgIGVsc2UgaWYgKG1fZ1dvcmxkICYmIChtX3dpZHRoID4gbV9nV29ybGRXaWR0aCB8fCBtX2hl
aWdodCA+IG1fZ1dvcmxkSGVpZ2h0KSkgewotICAgICAgICAvLyBuZWVkIGEgYmlnZ2VyLCBiZXR0
ZXIgZ1dvcmxkCi0gICAgICAgIGRlbGV0ZUdXb3JsZCgpOwotICAgICAgICBjcmVhdGVHV29ybGQo
KTsKLSAgICB9Ci19Ci0KLXZvaWQgUVRNb3ZpZVdpblByaXZhdGU6OmNyZWF0ZUdXb3JsZCgpCi17
Ci0gICAgQVNTRVJUKCFtX2dXb3JsZCk7Ci0gICAgaWYgKCFtX21vdmllIHx8IG1fbG9hZFN0YXRl
IDwgUVRNb3ZpZUxvYWRTdGF0ZUxvYWRlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9nV29y
bGRXaWR0aCA9IG1heChjR1dvcmxkTWluV2lkdGgsIG1fd2lkdGgpOwotICAgIG1fZ1dvcmxkSGVp
Z2h0ID0gbWF4KGNHV29ybGRNaW5IZWlnaHQsIG1faGVpZ2h0KTsKLSAgICBSZWN0IGJvdW5kczsg
Ci0gICAgYm91bmRzLnRvcCA9IDA7Ci0gICAgYm91bmRzLmxlZnQgPSAwOyAKLSAgICBib3VuZHMu
cmlnaHQgPSBtX2dXb3JsZFdpZHRoOwotICAgIGJvdW5kcy5ib3R0b20gPSBtX2dXb3JsZEhlaWdo
dDsKLSAgICBPU0VyciBlcnIgPSBRVE5ld0dXb3JsZCgmbV9nV29ybGQsIGszMkJHUkFQaXhlbEZv
cm1hdCwgJmJvdW5kcywgMCwgMCwgMCk7IAotICAgIGlmIChlcnIpIAotICAgICAgICByZXR1cm47
Ci0gICAgR2V0TW92aWVHV29ybGQobV9tb3ZpZSwgJm1fc2F2ZWRHV29ybGQsIDApOwotICAgIGlm
IChtX21vdmllQ29udHJvbGxlcikKLSAgICAgICAgTUNTZXRDb250cm9sbGVyUG9ydChtX21vdmll
Q29udHJvbGxlciwgbV9nV29ybGQpOwotICAgIFNldE1vdmllR1dvcmxkKG1fbW92aWUsIG1fZ1dv
cmxkLCAwKTsKLSAgICBib3VuZHMucmlnaHQgPSBtX3dpZHRoOwotICAgIGJvdW5kcy5ib3R0b20g
PSBtX2hlaWdodDsKLSAgICBpZiAobV9tb3ZpZUNvbnRyb2xsZXIpCi0gICAgICAgIE1DU2V0Q29u
dHJvbGxlckJvdW5kc1JlY3QobV9tb3ZpZUNvbnRyb2xsZXIsICZib3VuZHMpOwotICAgIFNldE1v
dmllQm94KG1fbW92aWUsICZib3VuZHMpOwotfQotCi12b2lkIFFUTW92aWVXaW5Qcml2YXRlOjpj
bGVhckdXb3JsZCgpCi17Ci0gICAgaWYgKCFtX21vdmllfHwhbV9nV29ybGQpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIEdyYWZQdHIgc2F2ZVBvcnQ7Ci0gICAgR2V0UG9ydCgmc2F2ZVBvcnQpOyAK
LSAgICBNYWNTZXRQb3J0KChHcmFmUHRyKW1fZ1dvcmxkKTsKLQotICAgIFJlY3QgYm91bmRzOyAK
LSAgICBib3VuZHMudG9wID0gMDsKLSAgICBib3VuZHMubGVmdCA9IDA7IAotICAgIGJvdW5kcy5y
aWdodCA9IG1fZ1dvcmxkV2lkdGg7Ci0gICAgYm91bmRzLmJvdHRvbSA9IG1fZ1dvcmxkSGVpZ2h0
OwotICAgIEVyYXNlUmVjdCgmYm91bmRzKTsKLQotICAgIE1hY1NldFBvcnQoc2F2ZVBvcnQpOwot
fQotCi12b2lkIFFUTW92aWVXaW5Qcml2YXRlOjpzZXRTaXplKGludCB3aWR0aCwgaW50IGhlaWdo
dCkKLXsKLSAgICBpZiAobV93aWR0aCA9PSB3aWR0aCAmJiBtX2hlaWdodCA9PSBoZWlnaHQpCi0g
ICAgICAgIHJldHVybjsKLSAgICBtX3dpZHRoID0gd2lkdGg7Ci0gICAgbV9oZWlnaHQgPSBoZWln
aHQ7Ci0KLSAgICAvLyBEbyBub3QgY2hhbmdlIG1vdmllIGJveCBiZWZvcmUgcmVhY2hpbmcgbG9h
ZCBzdGF0ZSBsb2FkZWQgYXMgd2UgZ3JhYgotICAgIC8vIHRoZSBpbml0aWFsIHNpemUgd2hlbiB0
YXNrKCkgc2VlcyB0aGF0IHN0YXRlIGZvciB0aGUgZmlyc3QgdGltZSwgYW5kCi0gICAgLy8gd2Ug
bmVlZCB0aGUgaW5pdGlhbCBzaXplIHRvIGJlIGFibGUgdG8gc2NhbGUgbW92aWUgcHJvcGVybHku
IAotICAgIGlmICghbV9tb3ZpZSB8fCBtX2xvYWRTdGF0ZSA8IFFUTW92aWVMb2FkU3RhdGVMb2Fk
ZWQpCi0gICAgICAgIHJldHVybjsKLQotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICBBU1NFUlQo
bV9zY2FsZUNhY2hlZCk7Ci0jZW5kaWYKLQotICAgIHVwZGF0ZU1vdmllU2l6ZSgpOwogfQogCi12
b2lkIFFUTW92aWVXaW5Qcml2YXRlOjp1cGRhdGVNb3ZpZVNpemUoKQorUVRNb3ZpZTo6UVRNb3Zp
ZShRVE1vdmllQ2xpZW50KiBjbGllbnQpCisgICAgOiBtX3ByaXZhdGUobmV3IFFUTW92aWVQcml2
YXRlKCkpCiB7Ci0gICAgaWYgKCFtX21vdmllIHx8IG1fbG9hZFN0YXRlIDwgUVRNb3ZpZUxvYWRT
dGF0ZUxvYWRlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVjdCBib3VuZHM7IAotICAgIGJv
dW5kcy50b3AgPSAwOwotICAgIGJvdW5kcy5sZWZ0ID0gMDsgCi0gICAgYm91bmRzLnJpZ2h0ID0g
bV93aWR0aDsKLSAgICBib3VuZHMuYm90dG9tID0gbV9oZWlnaHQ7Ci0gICAgaWYgKG1fbW92aWVD
b250cm9sbGVyKQotICAgICAgICBNQ1NldENvbnRyb2xsZXJCb3VuZHNSZWN0KG1fbW92aWVDb250
cm9sbGVyLCAmYm91bmRzKTsKLSAgICBTZXRNb3ZpZUJveChtX21vdmllLCAmYm91bmRzKTsKLSAg
ICB1cGRhdGVHV29ybGQoKTsKKyAgICBtX3ByaXZhdGUtPm1fbW92aWVXaW4gPSB0aGlzOworICAg
IGlmIChjbGllbnQpCisgICAgICAgIG1fcHJpdmF0ZS0+bV9jbGllbnRzLmFwcGVuZChjbGllbnQp
OworICAgIGluaXRpYWxpemVRdWlja1RpbWUoKTsKIH0KIAotCi12b2lkIFFUTW92aWVXaW5Qcml2
YXRlOjpkZWxldGVHV29ybGQoKQorUVRNb3ZpZTo6flFUTW92aWUoKQogewotICAgIEFTU0VSVCht
X2dXb3JsZCk7Ci0gICAgaWYgKG1fbW92aWVDb250cm9sbGVyKQotICAgICAgICBNQ1NldENvbnRy
b2xsZXJQb3J0KG1fbW92aWVDb250cm9sbGVyLCBtX3NhdmVkR1dvcmxkKTsKLSAgICBpZiAobV9t
b3ZpZSkKLSAgICAgICAgU2V0TW92aWVHV29ybGQobV9tb3ZpZSwgbV9zYXZlZEdXb3JsZCwgMCk7
Ci0gICAgbV9zYXZlZEdXb3JsZCA9IDA7Ci0gICAgRGlzcG9zZUdXb3JsZChtX2dXb3JsZCk7IAot
ICAgIG1fZ1dvcmxkID0gMDsKLSAgICBtX2dXb3JsZFdpZHRoID0gMDsKLSAgICBtX2dXb3JsZEhl
aWdodCA9IDA7CisgICAgZGVsZXRlIG1fcHJpdmF0ZTsKIH0KIAotCi1RVE1vdmllV2luOjpRVE1v
dmllV2luKFFUTW92aWVXaW5DbGllbnQqIGNsaWVudCkKLSAgICA6IG1fcHJpdmF0ZShuZXcgUVRN
b3ZpZVdpblByaXZhdGUoKSkKLSAgICAsIG1fZGlzYWJsZWQoZmFsc2UpCit2b2lkIFFUTW92aWU6
OmFkZENsaWVudChRVE1vdmllQ2xpZW50KiBjbGllbnQpCiB7Ci0gICAgbV9wcml2YXRlLT5tX21v
dmllV2luID0gdGhpczsKLSAgICBtX3ByaXZhdGUtPm1fY2xpZW50ID0gY2xpZW50OwotICAgIGlu
aXRpYWxpemVRdWlja1RpbWUoKTsKKyAgICBpZiAoY2xpZW50KQorICAgICAgICBtX3ByaXZhdGUt
Pm1fY2xpZW50cy5hcHBlbmQoY2xpZW50KTsKIH0KIAotUVRNb3ZpZVdpbjo6flFUTW92aWVXaW4o
KQordm9pZCBRVE1vdmllOjpyZW1vdmVDbGllbnQoUVRNb3ZpZUNsaWVudCogY2xpZW50KQogewot
ICAgIGRlbGV0ZSBtX3ByaXZhdGU7CisgICAgc2l6ZV90IGluZGV4T2ZDbGllbnQgPSBtX3ByaXZh
dGUtPm1fY2xpZW50cy5maW5kKGNsaWVudCk7CisgICAgaWYgKGluZGV4T2ZDbGllbnQgPiAwKQor
ICAgICAgICBtX3ByaXZhdGUtPm1fY2xpZW50cy5yZW1vdmUoaW5kZXhPZkNsaWVudCk7CiB9CiAK
LXZvaWQgUVRNb3ZpZVdpbjo6cGxheSgpCit2b2lkIFFUTW92aWU6OnBsYXkoKQogewogICAgIG1f
cHJpdmF0ZS0+bV90aW1lVG9SZXN0b3JlID0gLTEuMGY7CiAKQEAgLTQ4Myw3ICsyNzksNyBAQCB2
b2lkIFFUTW92aWVXaW46OnBsYXkoKQogICAgIG1fcHJpdmF0ZS0+c3RhcnRUYXNrKCk7CiB9CiAK
LXZvaWQgUVRNb3ZpZVdpbjo6cGF1c2UoKQordm9pZCBRVE1vdmllOjpwYXVzZSgpCiB7CiAgICAg
bV9wcml2YXRlLT5tX3RpbWVUb1Jlc3RvcmUgPSAtMS4wZjsKIApAQCAtNDkxLDE3ICsyODcsMTcg
QEAgdm9pZCBRVE1vdmllV2luOjpwYXVzZSgpCiAgICAgICAgIE1DRG9BY3Rpb24obV9wcml2YXRl
LT5tX21vdmllQ29udHJvbGxlciwgbWNBY3Rpb25QbGF5LCAwKTsKICAgICBlbHNlCiAgICAgICAg
IFN0b3BNb3ZpZShtX3ByaXZhdGUtPm1fbW92aWUpOwotICAgIHVwZGF0ZVRhc2tUaW1lcigpOwor
ICAgIFFUTW92aWVUYXNrOjpzaGFyZWRUYXNrKCktPnVwZGF0ZVRhc2tUaW1lcigpOwogfQogCi1m
bG9hdCBRVE1vdmllV2luOjpyYXRlKCkgY29uc3QKK2Zsb2F0IFFUTW92aWU6OnJhdGUoKSBjb25z
dAogewogICAgIGlmICghbV9wcml2YXRlLT5tX21vdmllKQogICAgICAgICByZXR1cm4gMDsKICAg
ICByZXR1cm4gRml4ZWRUb0Zsb2F0KEdldE1vdmllUmF0ZShtX3ByaXZhdGUtPm1fbW92aWUpKTsK
IH0KIAotdm9pZCBRVE1vdmllV2luOjpzZXRSYXRlKGZsb2F0IHJhdGUpCit2b2lkIFFUTW92aWU6
OnNldFJhdGUoZmxvYXQgcmF0ZSkKIHsKICAgICBpZiAoIW1fcHJpdmF0ZS0+bV9tb3ZpZSkKICAg
ICAgICAgcmV0dXJuOyAgICAKQEAgLTUxMSwxMCArMzA3LDEwIEBAIHZvaWQgUVRNb3ZpZVdpbjo6
c2V0UmF0ZShmbG9hdCByYXRlKQogICAgICAgICBNQ0RvQWN0aW9uKG1fcHJpdmF0ZS0+bV9tb3Zp
ZUNvbnRyb2xsZXIsIG1jQWN0aW9uUHJlcm9sbEFuZFBsYXksICh2b2lkICopRmxvYXRUb0ZpeGVk
KHJhdGUpKTsKICAgICBlbHNlCiAgICAgICAgIFNldE1vdmllUmF0ZShtX3ByaXZhdGUtPm1fbW92
aWUsIEZsb2F0VG9GaXhlZChyYXRlKSk7Ci0gICAgdXBkYXRlVGFza1RpbWVyKCk7CisgICAgUVRN
b3ZpZVRhc2s6OnNoYXJlZFRhc2soKS0+dXBkYXRlVGFza1RpbWVyKCk7CiB9CiAKLWZsb2F0IFFU
TW92aWVXaW46OmR1cmF0aW9uKCkgY29uc3QKK2Zsb2F0IFFUTW92aWU6OmR1cmF0aW9uKCkgY29u
c3QKIHsKICAgICBpZiAoIW1fcHJpdmF0ZS0+bV9tb3ZpZSkKICAgICAgICAgcmV0dXJuIDA7CkBA
IC01MjMsNyArMzE5LDcgQEAgZmxvYXQgUVRNb3ZpZVdpbjo6ZHVyYXRpb24oKSBjb25zdAogICAg
IHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4odmFsKSAvIHNjYWxlOwogfQogCi1mbG9hdCBRVE1v
dmllV2luOjpjdXJyZW50VGltZSgpIGNvbnN0CitmbG9hdCBRVE1vdmllOjpjdXJyZW50VGltZSgp
IGNvbnN0CiB7CiAgICAgaWYgKCFtX3ByaXZhdGUtPm1fbW92aWUpCiAgICAgICAgIHJldHVybiAw
OwpAQCAtNTMyLDcgKzMyOCw3IEBAIGZsb2F0IFFUTW92aWVXaW46OmN1cnJlbnRUaW1lKCkgY29u
c3QKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZhbCkgLyBzY2FsZTsKIH0KIAotdm9p
ZCBRVE1vdmllV2luOjpzZXRDdXJyZW50VGltZShmbG9hdCB0aW1lKSBjb25zdAordm9pZCBRVE1v
dmllOjpzZXRDdXJyZW50VGltZShmbG9hdCB0aW1lKSBjb25zdAogewogICAgIGlmICghbV9wcml2
YXRlLT5tX21vdmllKQogICAgICAgICByZXR1cm47CkBAIC01NDEsMjIgKzMzNywyMiBAQCB2b2lk
IFFUTW92aWVXaW46OnNldEN1cnJlbnRUaW1lKGZsb2F0IHRpCiAgICAgCiAgICAgbV9wcml2YXRl
LT5tX3NlZWtpbmcgPSB0cnVlOwogICAgIFRpbWVTY2FsZSBzY2FsZSA9IEdldE1vdmllVGltZVNj
YWxlKG1fcHJpdmF0ZS0+bV9tb3ZpZSk7Ci0gICAgaWYgKG1fcHJpdmF0ZS0+bV9tb3ZpZUNvbnRy
b2xsZXIpeworICAgIGlmIChtX3ByaXZhdGUtPm1fbW92aWVDb250cm9sbGVyKSB7CiAgICAgICAg
IFFUUmVzdGFydEF0VGltZVJlY29yZCByZXN0YXJ0ID0geyB0aW1lICogc2NhbGUgLCAwIH07CiAg
ICAgICAgIE1DRG9BY3Rpb24obV9wcml2YXRlLT5tX21vdmllQ29udHJvbGxlciwgbWNBY3Rpb25S
ZXN0YXJ0QXRUaW1lLCAodm9pZCAqKSZyZXN0YXJ0KTsKICAgICB9IGVsc2UKICAgICAgICAgU2V0
TW92aWVUaW1lVmFsdWUobV9wcml2YXRlLT5tX21vdmllLCBUaW1lVmFsdWUodGltZSAqIHNjYWxl
KSk7Ci0gICAgdXBkYXRlVGFza1RpbWVyKCk7CisgICAgUVRNb3ZpZVRhc2s6OnNoYXJlZFRhc2so
KS0+dXBkYXRlVGFza1RpbWVyKCk7CiB9CiAKLXZvaWQgUVRNb3ZpZVdpbjo6c2V0Vm9sdW1lKGZs
b2F0IHZvbHVtZSkKK3ZvaWQgUVRNb3ZpZTo6c2V0Vm9sdW1lKGZsb2F0IHZvbHVtZSkKIHsKICAg
ICBpZiAoIW1fcHJpdmF0ZS0+bV9tb3ZpZSkKICAgICAgICAgcmV0dXJuOwogICAgIFNldE1vdmll
Vm9sdW1lKG1fcHJpdmF0ZS0+bV9tb3ZpZSwgc3RhdGljX2Nhc3Q8c2hvcnQ+KHZvbHVtZSAqIDI1
NikpOwogfQogCi12b2lkIFFUTW92aWVXaW46OnNldFByZXNlcnZlc1BpdGNoKGJvb2wgcHJlc2Vy
dmVzUGl0Y2gpCit2b2lkIFFUTW92aWU6OnNldFByZXNlcnZlc1BpdGNoKGJvb2wgcHJlc2VydmVz
UGl0Y2gpCiB7CiAgICAgaWYgKCFtX3ByaXZhdGUtPm1fbW92aWUgfHwgIW1fcHJpdmF0ZS0+bV9j
dXJyZW50VVJMKQogICAgICAgICByZXR1cm47CkBAIC01NzUsMTQgKzM3MSwxNCBAQCB2b2lkIFFU
TW92aWVXaW46OnNldFByZXNlcnZlc1BpdGNoKGJvb2wgCiAgICAgbG9hZChtX3ByaXZhdGUtPm1f
Y3VycmVudFVSTCwgcHJlc2VydmVzUGl0Y2gpOwogfQogCi11bnNpZ25lZCBRVE1vdmllV2luOjpk
YXRhU2l6ZSgpIGNvbnN0Cit1bnNpZ25lZCBRVE1vdmllOjpkYXRhU2l6ZSgpIGNvbnN0CiB7CiAg
ICAgaWYgKCFtX3ByaXZhdGUtPm1fbW92aWUpCiAgICAgICAgIHJldHVybiAwOwogICAgIHJldHVy
biBHZXRNb3ZpZURhdGFTaXplKG1fcHJpdmF0ZS0+bV9tb3ZpZSwgMCwgR2V0TW92aWVEdXJhdGlv
bihtX3ByaXZhdGUtPm1fbW92aWUpKTsKIH0KIAotZmxvYXQgUVRNb3ZpZVdpbjo6bWF4VGltZUxv
YWRlZCgpIGNvbnN0CitmbG9hdCBRVE1vdmllOjptYXhUaW1lTG9hZGVkKCkgY29uc3QKIHsKICAg
ICBpZiAoIW1fcHJpdmF0ZS0+bV9tb3ZpZSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC01OTIsMTIg
KzM4OCwxMiBAQCBmbG9hdCBRVE1vdmllV2luOjptYXhUaW1lTG9hZGVkKCkgY29uc3QKICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZhbCkgLyBzY2FsZTsKIH0KIAotbG9uZyBRVE1vdmll
V2luOjpsb2FkU3RhdGUoKSBjb25zdAorbG9uZyBRVE1vdmllOjpsb2FkU3RhdGUoKSBjb25zdAog
ewogICAgIHJldHVybiBtX3ByaXZhdGUtPm1fbG9hZFN0YXRlOwogfQogCi12b2lkIFFUTW92aWVX
aW46OmdldE5hdHVyYWxTaXplKGludCYgd2lkdGgsIGludCYgaGVpZ2h0KQordm9pZCBRVE1vdmll
OjpnZXROYXR1cmFsU2l6ZShpbnQmIHdpZHRoLCBpbnQmIGhlaWdodCkKIHsKICAgICBSZWN0IHJl
Y3QgPSB7IDAsIH07CiAKQEAgLTYwNyw1NiArNDAzLDcgQEAgdm9pZCBRVE1vdmllV2luOjpnZXRO
YXR1cmFsU2l6ZShpbnQmIHdpZAogICAgIGhlaWdodCA9IChyZWN0LmJvdHRvbSAtIHJlY3QudG9w
KSAqIG1fcHJpdmF0ZS0+bV9oZWlnaHRTY2FsZUZhY3RvcjsKIH0KIAotdm9pZCBRVE1vdmllV2lu
OjpzZXRTaXplKGludCB3aWR0aCwgaW50IGhlaWdodCkKLXsKLSAgICBtX3ByaXZhdGUtPnNldFNp
emUod2lkdGgsIGhlaWdodCk7Ci0gICAgdXBkYXRlVGFza1RpbWVyKDApOwotfQotCi12b2lkIFFU
TW92aWVXaW46OnNldFZpc2libGUoYm9vbCBiKQotewotICAgIG1fcHJpdmF0ZS0+bV92aXNpYmxl
ID0gYjsKLSAgICBtX3ByaXZhdGUtPnVwZGF0ZUdXb3JsZCgpOwotfQotCi12b2lkIFFUTW92aWVX
aW46OmdldEN1cnJlbnRGcmFtZUluZm8odm9pZComIGJ1ZmZlciwgdW5zaWduZWQmIGJpdHNQZXJQ
aXhlbCwgdW5zaWduZWQmIHJvd0J5dGVzLCB1bnNpZ25lZCYgd2lkdGgsIHVuc2lnbmVkJiBoZWln
aHQpCi17Ci0gICAgaWYgKCFtX3ByaXZhdGUtPm1fZ1dvcmxkKSB7Ci0gICAgICAgIGJ1ZmZlciA9
IDA7Ci0gICAgICAgIGJpdHNQZXJQaXhlbCA9IDA7Ci0gICAgICAgIHJvd0J5dGVzID0gMDsKLSAg
ICAgICAgd2lkdGggPSAwOwotICAgICAgICBoZWlnaHQgPSAwOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIFBpeE1hcEhhbmRsZSBvZmZzY3JlZW5QaXhNYXAgPSBHZXRHV29ybGRQaXhNYXAo
bV9wcml2YXRlLT5tX2dXb3JsZCk7Ci0gICAgYnVmZmVyID0gKCpvZmZzY3JlZW5QaXhNYXApLT5i
YXNlQWRkcjsKLSAgICBiaXRzUGVyUGl4ZWwgPSAoKm9mZnNjcmVlblBpeE1hcCktPnBpeGVsU2l6
ZTsKLSAgICByb3dCeXRlcyA9ICgqb2Zmc2NyZWVuUGl4TWFwKS0+cm93Qnl0ZXMgJiAweDNGRkY7
Ci0gICAgd2lkdGggPSBtX3ByaXZhdGUtPm1fd2lkdGg7Ci0gICAgaGVpZ2h0ID0gbV9wcml2YXRl
LT5tX2hlaWdodDsKLX0KLQotdm9pZCBRVE1vdmllV2luOjpwYWludChIREMgaGRjLCBpbnQgeCwg
aW50IHkpCi17Ci0gICAgaWYgKCFtX3ByaXZhdGUtPm1fZ1dvcmxkKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBIREMgaGRjU3JjID0gc3RhdGljX2Nhc3Q8SERDPihHZXRQb3J0SERDKHJlaW50ZXJw
cmV0X2Nhc3Q8R3JhZlB0cj4obV9wcml2YXRlLT5tX2dXb3JsZCkpKTsgCi0gICAgaWYgKCFoZGNT
cmMpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEZJWE1FOiBJZiB3ZSBjb3VsZCBkZXRlcm1p
bmUgdGhlIG1vdmllIGhhcyBubyBhbHBoYSwgd2UgY291bGQgdXNlIEJpdEJsdCBmb3IgdGhvc2Ug
Y2FzZXMsIHdoaWNoIG1pZ2h0IGJlIGZhc3Rlci4KLSAgICBCTEVOREZVTkNUSU9OIGJsZW5kRnVu
Y3Rpb247IAotICAgIGJsZW5kRnVuY3Rpb24uQmxlbmRPcCA9IEFDX1NSQ19PVkVSOwotICAgIGJs
ZW5kRnVuY3Rpb24uQmxlbmRGbGFncyA9IDA7Ci0gICAgYmxlbmRGdW5jdGlvbi5Tb3VyY2VDb25z
dGFudEFscGhhID0gMjU1OwotICAgIGJsZW5kRnVuY3Rpb24uQWxwaGFGb3JtYXQgPSBBQ19TUkNf
QUxQSEE7Ci0gICAgQWxwaGFCbGVuZChoZGMsIHgsIHksIG1fcHJpdmF0ZS0+bV93aWR0aCwgbV9w
cml2YXRlLT5tX2hlaWdodCwgaGRjU3JjLCAKLSAgICAgICAgIDAsIDAsIG1fcHJpdmF0ZS0+bV93
aWR0aCwgbV9wcml2YXRlLT5tX2hlaWdodCwgYmxlbmRGdW5jdGlvbik7Ci19Ci0KLXZvaWQgUVRN
b3ZpZVdpbjo6bG9hZChjb25zdCBVQ2hhciogdXJsLCBpbnQgbGVuLCBib29sIHByZXNlcnZlc1Bp
dGNoKQordm9pZCBRVE1vdmllOjpsb2FkKGNvbnN0IFVDaGFyKiB1cmwsIGludCBsZW4sIGJvb2wg
cHJlc2VydmVzUGl0Y2gpCiB7CiAgICAgQ0ZTdHJpbmdSZWYgdXJsU3RyaW5nUmVmID0gQ0ZTdHJp
bmdDcmVhdGVXaXRoQ2hhcmFjdGVycyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCByZWludGVycHJldF9j
YXN0PGNvbnN0IFVuaUNoYXIqPih1cmwpLCBsZW4pOwogICAgIENGVVJMUmVmIGNmVVJMID0gQ0ZV
UkxDcmVhdGVXaXRoU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIHVybFN0cmluZ1JlZiwgMCk7
CkBAIC02NjcsMTUgKzQxNCwxMyBAQCB2b2lkIFFUTW92aWVXaW46OmxvYWQoY29uc3QgVUNoYXIq
IHVybCwgCiAgICAgQ0ZSZWxlYXNlKHVybFN0cmluZ1JlZik7CiB9CiAKLXZvaWQgUVRNb3ZpZVdp
bjo6bG9hZChDRlVSTFJlZiB1cmwsIGJvb2wgcHJlc2VydmVzUGl0Y2gpCit2b2lkIFFUTW92aWU6
OmxvYWQoQ0ZVUkxSZWYgdXJsLCBib29sIHByZXNlcnZlc1BpdGNoKQogewogICAgIGlmICghdXJs
KQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV9wcml2YXRlLT5tX21vdmllKSB7CiAgICAg
ICAgIG1fcHJpdmF0ZS0+ZW5kVGFzaygpOwotICAgICAgICBpZiAobV9wcml2YXRlLT5tX2dXb3Js
ZCkKLSAgICAgICAgICAgIG1fcHJpdmF0ZS0+ZGVsZXRlR1dvcmxkKCk7CiAgICAgICAgIGlmICht
X3ByaXZhdGUtPm1fbW92aWVDb250cm9sbGVyKQogICAgICAgICAgICAgRGlzcG9zZU1vdmllQ29u
dHJvbGxlcihtX3ByaXZhdGUtPm1fbW92aWVDb250cm9sbGVyKTsKICAgICAgICAgbV9wcml2YXRl
LT5tX21vdmllQ29udHJvbGxlciA9IDA7CkBAIC03NjgsMTQgKzUxMywxNCBAQCB2b2lkIFFUTW92
aWVXaW46OmxvYWQoQ0ZVUkxSZWYgdXJsLCBib29sCiAgICAgbW92aWVQcm9wc1ttb3ZpZVByb3BD
b3VudF0ucHJvcFN0YXR1cyA9IDA7IAogICAgIG1vdmllUHJvcENvdW50Kys7IAogCi0gICAgQVNT
RVJUKG1vdmllUHJvcENvdW50IDw9IHNpemVvZihtb3ZpZVByb3BzKS9zaXplb2YobW92aWVQcm9w
c1swXSkpOworICAgIEFTU0VSVChtb3ZpZVByb3BDb3VudCA8PSBzaXplb2YobW92aWVQcm9wcykg
LyBzaXplb2YobW92aWVQcm9wc1swXSkpOwogICAgIG1fcHJpdmF0ZS0+bV9sb2FkRXJyb3IgPSBO
ZXdNb3ZpZUZyb21Qcm9wZXJ0aWVzKG1vdmllUHJvcENvdW50LCBtb3ZpZVByb3BzLCAwLCAwLCAm
bV9wcml2YXRlLT5tX21vdmllKTsKIAogZW5kOgogICAgIG1fcHJpdmF0ZS0+c3RhcnRUYXNrKCk7
CiAgICAgLy8gZ2V0IHRoZSBsb2FkIGZhaWwgY2FsbGJhY2sgcXVpY2tseSAKICAgICBpZiAobV9w
cml2YXRlLT5tX2xvYWRFcnJvcikKLSAgICAgICAgdXBkYXRlVGFza1RpbWVyKDApOworICAgICAg
ICBRVE1vdmllVGFzazo6c2hhcmVkVGFzaygpLT51cGRhdGVUYXNrVGltZXIoMCk7CiAgICAgZWxz
ZSB7CiAgICAgICAgIE9TVHlwZSBtb2RlID0ga1FUQXBlcnR1cmVNb2RlX0NsZWFuQXBlcnR1cmU7
CiAKQEAgLTc4NCwxMSArNTI5LDEwIEBAIGVuZDoKICAgICAgICAgLy8gdGhlIGluc3RhbGxlZCB2
ZXJzaW9uIG9mIFFUIGRvZXNuJ3Qgc3VwcG9ydCBpdCBhbmQgaXQgaXNuJ3Qgc2VyaW91cyBlbm91
Z2ggdG8gCiAgICAgICAgIC8vIHdhcnJhbnQgZmFpbGluZy4KICAgICAgICAgUVRTZXRNb3ZpZVBy
b3BlcnR5KG1fcHJpdmF0ZS0+bV9tb3ZpZSwga1FUUHJvcGVydHlDbGFzc19WaXN1YWwsIGtRVFZp
c3VhbFByb3BlcnR5SURfQXBlcnR1cmVNb2RlLCBzaXplb2YobW9kZSksICZtb2RlKTsKLSAgICAg
ICAgbV9wcml2YXRlLT5yZWdpc3RlckRyYXdpbmdDYWxsYmFjaygpOwogICAgIH0KIH0KIAotdm9p
ZCBRVE1vdmllV2luOjpkaXNhYmxlVW5zdXBwb3J0ZWRUcmFja3ModW5zaWduZWQmIGVuYWJsZWRU
cmFja0NvdW50LCB1bnNpZ25lZCYgdG90YWxUcmFja0NvdW50KQordm9pZCBRVE1vdmllOjpkaXNh
YmxlVW5zdXBwb3J0ZWRUcmFja3ModW5zaWduZWQmIGVuYWJsZWRUcmFja0NvdW50LCB1bnNpZ25l
ZCYgdG90YWxUcmFja0NvdW50KQogewogICAgIGlmICghbV9wcml2YXRlLT5tX21vdmllKSB7CiAg
ICAgICAgIHRvdGFsVHJhY2tDb3VudCA9IDA7CkBAIC05MDMsMjAgKzY0NywyNSBAQCB2b2lkIFFU
TW92aWVXaW46OmRpc2FibGVVbnN1cHBvcnRlZFRyYWNrCiAgICAgfQogfQogCi12b2lkIFFUTW92
aWVXaW46OnNldERpc2FibGVkKGJvb2wgYikKK2Jvb2wgUVRNb3ZpZTo6aXNEaXNhYmxlZCgpIGNv
bnN0CiB7Ci0gICAgbV9kaXNhYmxlZCA9IGI7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bV9kaXNh
YmxlZDsKIH0KIAordm9pZCBRVE1vdmllOjpzZXREaXNhYmxlZChib29sIGIpCit7CisgICAgbV9w
cml2YXRlLT5tX2Rpc2FibGVkID0gYjsKK30KIAotYm9vbCBRVE1vdmllV2luOjpoYXNWaWRlbygp
IGNvbnN0CisKK2Jvb2wgUVRNb3ZpZTo6aGFzVmlkZW8oKSBjb25zdAogewogICAgIGlmICghbV9w
cml2YXRlLT5tX21vdmllKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIChHZXRN
b3ZpZUluZFRyYWNrVHlwZShtX3ByaXZhdGUtPm1fbW92aWUsIDEsIFZpc3VhbE1lZGlhQ2hhcmFj
dGVyaXN0aWMsIG1vdmllVHJhY2tDaGFyYWN0ZXJpc3RpYyB8IG1vdmllVHJhY2tFbmFibGVkT25s
eSkpOwogfQogCi1ib29sIFFUTW92aWVXaW46Omhhc0F1ZGlvKCkgY29uc3QKK2Jvb2wgUVRNb3Zp
ZTo6aGFzQXVkaW8oKSBjb25zdAogewogICAgIGlmICghbV9wcml2YXRlLT5tX21vdmllKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CkBAIC05MjQsMTQgKzY3MywxNCBAQCBib29sIFFUTW92aWVXaW46
Omhhc0F1ZGlvKCkgY29uc3QKIH0KIAogCi1ib29sIFFUTW92aWVXaW46Omhhc0Nsb3NlZENhcHRp
b25zKCkgY29uc3QgCitib29sIFFUTW92aWU6Omhhc0Nsb3NlZENhcHRpb25zKCkgY29uc3QgCiB7
CiAgICAgaWYgKCFtX3ByaXZhdGUtPm1fbW92aWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICByZXR1cm4gR2V0TW92aWVJbmRUcmFja1R5cGUobV9wcml2YXRlLT5tX21vdmllLCAxLCBjbG9z
ZWRDYXB0aW9uVHJhY2tUeXBlLCBtb3ZpZVRyYWNrTWVkaWFUeXBlKTsKIH0KIAotdm9pZCBRVE1v
dmllV2luOjpzZXRDbG9zZWRDYXB0aW9uc1Zpc2libGUoYm9vbCB2aXNpYmxlKQordm9pZCBRVE1v
dmllOjpzZXRDbG9zZWRDYXB0aW9uc1Zpc2libGUoYm9vbCB2aXNpYmxlKQogewogICAgIGlmICgh
bV9wcml2YXRlLT5tX21vdmllKQogICAgICAgICByZXR1cm47CkBAIC05NDQsMTYgKzY5Myw2IEBA
IHZvaWQgUVRNb3ZpZVdpbjo6c2V0Q2xvc2VkQ2FwdGlvbnNWaXNpYmwKICAgICBRVFNldFRyYWNr
UHJvcGVydHkoY2NUcmFjaywgY2xvc2VkQ2FwdGlvblRyYWNrVHlwZSwgY2xvc2VkQ2FwdGlvbkRp
c3BsYXlQcm9wZXJ0eUlELCBzaXplb2YoZG9EaXNwbGF5KSwgJmRvRGlzcGxheSk7CiB9CiAKLXBh
c2NhbCBPU0VyciBtb3ZpZURyYXdpbmdDb21wbGV0ZVByb2MoTW92aWUgbW92aWUsIGxvbmcgZGF0
YSkKLXsKLSAgICBVcHBQYXJhbSBwYXJhbTsKLSAgICBwYXJhbS5sb25nVmFsdWUgPSBkYXRhOwot
ICAgIFFUTW92aWVXaW5Qcml2YXRlKiBtcCA9IHN0YXRpY19jYXN0PFFUTW92aWVXaW5Qcml2YXRl
Kj4ocGFyYW0ucHRyKTsKLSAgICBpZiAobXApCi0gICAgICAgIG1wLT5kcmF3aW5nQ29tcGxldGUo
KTsKLSAgICByZXR1cm4gMDsKLX0KLQogc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVN1cHBvcnRlZFR5
cGVzKCkgCiB7CiAgICAgaWYgKGdTdXBwb3J0ZWRUeXBlcykKQEAgLTEwNDMsMTMgKzc4MiwxMyBA
QCBzdGF0aWMgdm9pZCBpbml0aWFsaXplU3VwcG9ydGVkVHlwZXMoKSAKICAgICB9CiB9CiAKLXVu
c2lnbmVkIFFUTW92aWVXaW46OmNvdW50U3VwcG9ydGVkVHlwZXMoKQordW5zaWduZWQgUVRNb3Zp
ZTo6Y291bnRTdXBwb3J0ZWRUeXBlcygpCiB7CiAgICAgaW5pdGlhbGl6ZVN1cHBvcnRlZFR5cGVz
KCk7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihnU3VwcG9ydGVkVHlwZXMtPnNp
emUoKSk7CiB9CiAKLXZvaWQgUVRNb3ZpZVdpbjo6Z2V0U3VwcG9ydGVkVHlwZSh1bnNpZ25lZCBp
bmRleCwgY29uc3QgVUNoYXIqJiBzdHIsIHVuc2lnbmVkJiBsZW4pCit2b2lkIFFUTW92aWU6Omdl
dFN1cHBvcnRlZFR5cGUodW5zaWduZWQgaW5kZXgsIGNvbnN0IFVDaGFyKiYgc3RyLCB1bnNpZ25l
ZCYgbGVuKQogewogICAgIGluaXRpYWxpemVTdXBwb3J0ZWRUeXBlcygpOwogICAgIEFTU0VSVChp
bmRleCA8IGdTdXBwb3J0ZWRUeXBlcy0+c2l6ZSgpKTsKQEAgLTEwNjcsMTMgKzgwNiw3IEBAIHZv
aWQgUVRNb3ZpZVdpbjo6Z2V0U3VwcG9ydGVkVHlwZSh1bnNpZ24KICAgICAKIH0KIAotdm9pZCBR
VE1vdmllV2luOjpzZXRUYXNrVGltZXJGdW5jcyhTZXRUYXNrVGltZXJEZWxheUZ1bmMgc2V0VGFz
a1RpbWVyRGVsYXksIFN0b3BUYXNrVGltZXJGdW5jIHN0b3BUYXNrVGltZXIpCi17Ci0gICAgZ1Nl
dFRhc2tUaW1lckRlbGF5ID0gc2V0VGFza1RpbWVyRGVsYXk7Ci0gICAgZ1N0b3BUYXNrVGltZXIg
PSBzdG9wVGFza1RpbWVyOwotfQotCi1ib29sIFFUTW92aWVXaW46OmluaXRpYWxpemVRdWlja1Rp
bWUoKSAKK2Jvb2wgUVRNb3ZpZTo6aW5pdGlhbGl6ZVF1aWNrVGltZSgpIAogewogICAgIHN0YXRp
YyBib29sIGluaXRpYWxpemVkID0gZmFsc2U7CiAgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6YXRp
b25TdWNjZWVkZWQgPSBmYWxzZTsKQEAgLTEwOTIsNzUgKzgyNSwxNCBAQCBib29sIFFUTW92aWVX
aW46OmluaXRpYWxpemVRdWlja1RpbWUoKSAKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgfQogICAgICAgICBFbnRlck1vdmllcygpOwotICAgICAgICBnTW92aWVEcmF3aW5nQ29t
cGxldGVVUFAgPSBOZXdNb3ZpZURyYXdpbmdDb21wbGV0ZVVQUChtb3ZpZURyYXdpbmdDb21wbGV0
ZVByb2MpOwogICAgICAgICBpbml0aWFsaXphdGlvblN1Y2NlZWRlZCA9IHRydWU7CiAgICAgfQog
ICAgIHJldHVybiBpbml0aWFsaXphdGlvblN1Y2NlZWRlZDsKIH0KIAotTFJFU1VMVCBRVE1vdmll
V2luOjpmdWxsc2NyZWVuV25kUHJvYyhIV05EIHduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1Bh
cmFtLCBMUEFSQU0gbFBhcmFtKQotewotICAgIFFUTW92aWVXaW4qIG1vdmllID0gc3RhdGljX2Nh
c3Q8UVRNb3ZpZVdpbio+KEdldFByb3Aod25kLCBmdWxsc2NyZWVuUVRNb3ZpZVdpblBvaW50ZXJQ
cm9wKSk7Ci0KLSAgICBpZiAobWVzc2FnZSA9PSBXTV9ERVNUUk9ZKQotICAgICAgICBSZW1vdmVQ
cm9wKHduZCwgZnVsbHNjcmVlblFUTW92aWVXaW5Qb2ludGVyUHJvcCk7Ci0KLSAgICBpZiAoIW1v
dmllKQotICAgICAgICByZXR1cm4gRGVmV2luZG93UHJvYyh3bmQsIG1lc3NhZ2UsIHdQYXJhbSwg
bFBhcmFtKTsKLQotICAgIHJldHVybiBtb3ZpZS0+bV9wcml2YXRlLT5tX2Z1bGxzY3JlZW5DbGll
bnQtPmZ1bGxzY3JlZW5DbGllbnRXbmRQcm9jKHduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0p
OwotfQotCi1IV05EIFFUTW92aWVXaW46OmVudGVyRnVsbHNjcmVlbihRVE1vdmllV2luRnVsbHNj
cmVlbkNsaWVudCogY2xpZW50KQotewotICAgIG1fcHJpdmF0ZS0+bV9mdWxsc2NyZWVuQ2xpZW50
ID0gY2xpZW50OwotICAgIAotICAgIEJlZ2luRnVsbFNjcmVlbigmbV9wcml2YXRlLT5tX2Z1bGxz
Y3JlZW5SZXN0b3JlU3RhdGUsIDAsIDAsIDAsICZtX3ByaXZhdGUtPm1fZnVsbHNjcmVlbldpbmRv
dywgMCwgZnVsbFNjcmVlbkFsbG93RXZlbnRzKTsgCi0gICAgUVRNTFNldFdpbmRvd1duZFByb2Mo
bV9wcml2YXRlLT5tX2Z1bGxzY3JlZW5XaW5kb3csIGZ1bGxzY3JlZW5XbmRQcm9jKTsKLSAgICBD
cmVhdGVQb3J0QXNzb2NpYXRpb24oR2V0UG9ydE5hdGl2ZVdpbmRvdyhtX3ByaXZhdGUtPm1fZnVs
bHNjcmVlbldpbmRvdyksIDAsIDApOwotCi0gICAgR2V0TW92aWVCb3gobV9wcml2YXRlLT5tX21v
dmllLCAmbV9wcml2YXRlLT5tX2Z1bGxzY3JlZW5SZWN0KTsKLSAgICBHZXRNb3ZpZUdXb3JsZCht
X3ByaXZhdGUtPm1fbW92aWUsICZtX3ByaXZhdGUtPm1fZnVsbHNjcmVlbk9yaWdHV29ybGQsIDAp
OwotICAgIFNldE1vdmllR1dvcmxkKG1fcHJpdmF0ZS0+bV9tb3ZpZSwgcmVpbnRlcnByZXRfY2Fz
dDxDR3JhZlB0cj4obV9wcml2YXRlLT5tX2Z1bGxzY3JlZW5XaW5kb3cpLCBHZXRHV29ybGREZXZp
Y2UocmVpbnRlcnByZXRfY2FzdDxDR3JhZlB0cj4obV9wcml2YXRlLT5tX2Z1bGxzY3JlZW5XaW5k
b3cpKSk7Ci0KLSAgICAvLyBTZXQgdGhlIHNpemUgb2YgdGhlIGJveCB0byBwcmVzZXJ2ZSBhc3Bl
Y3QgcmF0aW8KLSAgICBSZWN0IHJlY3QgPSBtX3ByaXZhdGUtPm1fZnVsbHNjcmVlbldpbmRvdy0+
cG9ydFJlY3Q7Ci0KLSAgICBmbG9hdCBtb3ZpZVJhdGlvID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1f
cHJpdmF0ZS0+bV93aWR0aCkgLyBtX3ByaXZhdGUtPm1faGVpZ2h0OwotICAgIGludCB3aW5kb3dX
aWR0aCA9ICByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0OwotICAgIGludCB3aW5kb3dIZWlnaHQgPSBy
ZWN0LmJvdHRvbSAtIHJlY3QudG9wOwotICAgIGZsb2F0IHdpbmRvd1JhdGlvID0gc3RhdGljX2Nh
c3Q8ZmxvYXQ+KHdpbmRvd1dpZHRoKSAvIHdpbmRvd0hlaWdodDsKLSAgICBpbnQgYWN0dWFsV2lk
dGggPSAod2luZG93UmF0aW8gPiBtb3ZpZVJhdGlvKSA/ICh3aW5kb3dIZWlnaHQgKiBtb3ZpZVJh
dGlvKSA6IHdpbmRvd1dpZHRoOwotICAgIGludCBhY3R1YWxIZWlnaHQgPSAod2luZG93UmF0aW8g
PCBtb3ZpZVJhdGlvKSA/ICh3aW5kb3dXaWR0aCAvIG1vdmllUmF0aW8pIDogd2luZG93SGVpZ2h0
OwotICAgIGludCBvZmZzZXRYID0gKHdpbmRvd1dpZHRoIC0gYWN0dWFsV2lkdGgpIC8gMjsKLSAg
ICBpbnQgb2Zmc2V0WSA9ICh3aW5kb3dIZWlnaHQgLSBhY3R1YWxIZWlnaHQpIC8gMjsKLQotICAg
IHJlY3QubGVmdCA9IG9mZnNldFg7Ci0gICAgcmVjdC5yaWdodCA9IG9mZnNldFggKyBhY3R1YWxX
aWR0aDsKLSAgICByZWN0LnRvcCA9IG9mZnNldFk7Ci0gICAgcmVjdC5ib3R0b20gPSBvZmZzZXRZ
ICsgYWN0dWFsSGVpZ2h0OwotCi0gICAgU2V0TW92aWVCb3gobV9wcml2YXRlLT5tX21vdmllLCAm
cmVjdCk7Ci0gICAgU2hvd0hpZGVUYXNrQmFyKHRydWUpOwotCi0gICAgLy8gU2V0IHRoZSAndGhp
cycgcG9pbnRlciBvbiB0aGUgSFdORAotICAgIEhXTkQgd25kID0gc3RhdGljX2Nhc3Q8SFdORD4o
R2V0UG9ydE5hdGl2ZVdpbmRvdyhtX3ByaXZhdGUtPm1fZnVsbHNjcmVlbldpbmRvdykpOwotICAg
IFNldFByb3Aod25kLCBmdWxsc2NyZWVuUVRNb3ZpZVdpblBvaW50ZXJQcm9wLCBzdGF0aWNfY2Fz
dDxIQU5ETEU+KHRoaXMpKTsKLQotICAgIHJldHVybiB3bmQ7Ci19Ci0KLXZvaWQgUVRNb3ZpZVdp
bjo6ZXhpdEZ1bGxzY3JlZW4oKQorTW92aWUgUVRNb3ZpZTo6Z2V0TW92aWVIYW5kbGUoKSBjb25z
dCAKIHsKLSAgICBpZiAoIW1fcHJpdmF0ZS0+bV9mdWxsc2NyZWVuV2luZG93KQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBIV05EIHduZCA9IHN0YXRpY19jYXN0PEhXTkQ+KEdldFBvcnROYXRpdmVX
aW5kb3cobV9wcml2YXRlLT5tX2Z1bGxzY3JlZW5XaW5kb3cpKTsKLSAgICBEZXN0cm95UG9ydEFz
c29jaWF0aW9uKHJlaW50ZXJwcmV0X2Nhc3Q8Q0dyYWZQdHI+KG1fcHJpdmF0ZS0+bV9mdWxsc2Ny
ZWVuV2luZG93KSk7Ci0gICAgU2V0TW92aWVHV29ybGQobV9wcml2YXRlLT5tX21vdmllLCBtX3By
aXZhdGUtPm1fZnVsbHNjcmVlbk9yaWdHV29ybGQsIDApOwotICAgIEVuZEZ1bGxTY3JlZW4obV9w
cml2YXRlLT5tX2Z1bGxzY3JlZW5SZXN0b3JlU3RhdGUsIDBMKTsKLSAgICBTZXRNb3ZpZUJveCht
X3ByaXZhdGUtPm1fbW92aWUsICZtX3ByaXZhdGUtPm1fZnVsbHNjcmVlblJlY3QpOwotICAgIG1f
cHJpdmF0ZS0+bV9mdWxsc2NyZWVuV2luZG93ID0gMDsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5t
X21vdmllOwogfQogCiBCT09MIFdJTkFQSSBEbGxNYWluKEhJTlNUQU5DRSBoaW5zdERMTCwgRFdP
UkQgZmR3UmVhc29uLCBMUFZPSUQgbHB2UmVzZXJ2ZWQpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9RVE1vdmllLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vUVRNb3ZpZS5oCShyZXZpc2lvbiA1ODE4NykJKGZyb20gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vUVRNb3ZpZVdpbi5oOjU4MTg3KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vUVRNb3ZpZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlLCBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFFUTW92aWVXaW5faAorI2Rl
ZmluZSBRVE1vdmllV2luX2gKKworI2luY2x1ZGUgPFVuaWNvZGUuaD4KKyNpbmNsdWRlIDx3aW5k
b3dzLmg+CisKKyNpZmRlZiBRVE1PVklFV0lOX0VYUE9SVFMKKyNkZWZpbmUgUVRNT1ZJRVdJTl9B
UEkgX19kZWNsc3BlYyhkbGxleHBvcnQpCisjZWxzZQorI2RlZmluZSBRVE1PVklFV0lOX0FQSSBf
X2RlY2xzcGVjKGRsbGltcG9ydCkKKyNlbmRpZgorCitjbGFzcyBRVE1vdmllV2luOworY2xhc3Mg
UVRNb3ZpZVdpblByaXZhdGU7CisKK2NsYXNzIFFUTW92aWVXaW5DbGllbnQgeworcHVibGljOgor
ICAgIHZpcnR1YWwgdm9pZCBtb3ZpZUVuZGVkKFFUTW92aWVXaW4qKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIG1vdmllTG9hZFN0YXRlQ2hhbmdlZChRVE1vdmllV2luKikgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBtb3ZpZVRpbWVDaGFuZ2VkKFFUTW92aWVXaW4qKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIG1vdmllTmV3SW1hZ2VBdmFpbGFibGUoUVRNb3ZpZVdpbiopID0gMDsKK307CisKK2NsYXNz
IFFUTW92aWVXaW5GdWxsc2NyZWVuQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIExSRVNV
TFQgZnVsbHNjcmVlbkNsaWVudFduZFByb2MoSFdORCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0sIExQ
QVJBTSkgPSAwOworfTsKKworZW51bSB7CisgICAgUVRNb3ZpZUxvYWRTdGF0ZUVycm9yID0gLTFM
LAorICAgIFFUTW92aWVMb2FkU3RhdGVMb2FkZWQgID0gMjAwMEwsCisgICAgUVRNb3ZpZUxvYWRT
dGF0ZVBsYXlhYmxlID0gMTAwMDBMLAorICAgIFFUTW92aWVMb2FkU3RhdGVQbGF5dGhyb3VnaE9L
ID0gMjAwMDBMLAorICAgIFFUTW92aWVMb2FkU3RhdGVDb21wbGV0ZSA9IDEwMDAwMEwKK307CisK
K3R5cGVkZWYgY29uc3Qgc3RydWN0IF9fQ0ZVUkwgKiBDRlVSTFJlZjsKKworY2xhc3MgUVRNT1ZJ
RVdJTl9BUEkgUVRNb3ZpZVdpbiB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6
ZVF1aWNrVGltZSgpOworCisgICAgdHlwZWRlZiB2b2lkICgqU2V0VGFza1RpbWVyRGVsYXlGdW5j
KShkb3VibGUpOworICAgIHR5cGVkZWYgdm9pZCAoKlN0b3BUYXNrVGltZXJGdW5jKSgpOworICAg
IHN0YXRpYyB2b2lkIHNldFRhc2tUaW1lckZ1bmNzKFNldFRhc2tUaW1lckRlbGF5RnVuYywgU3Rv
cFRhc2tUaW1lckZ1bmMpOworICAgIHN0YXRpYyB2b2lkIHRhc2tUaW1lckZpcmVkKCk7CisKKyAg
ICBRVE1vdmllV2luKFFUTW92aWVXaW5DbGllbnQqKTsKKyAgICB+UVRNb3ZpZVdpbigpOworCisg
ICAgdm9pZCBsb2FkKGNvbnN0IFVDaGFyKiB1cmwsIGludCBsZW4sIGJvb2wgcHJlc2VydmVzUGl0
Y2gpOworICAgIGxvbmcgbG9hZFN0YXRlKCkgY29uc3Q7CisgICAgZmxvYXQgbWF4VGltZUxvYWRl
ZCgpIGNvbnN0OworCisgICAgdm9pZCBwbGF5KCk7CisgICAgdm9pZCBwYXVzZSgpOworCisgICAg
ZmxvYXQgcmF0ZSgpIGNvbnN0OworICAgIHZvaWQgc2V0UmF0ZShmbG9hdCk7CisKKyAgICBmbG9h
dCBkdXJhdGlvbigpIGNvbnN0OworICAgIGZsb2F0IGN1cnJlbnRUaW1lKCkgY29uc3Q7CisgICAg
dm9pZCBzZXRDdXJyZW50VGltZShmbG9hdCkgY29uc3Q7CisKKyAgICB2b2lkIHNldFZvbHVtZShm
bG9hdCk7CisgICAgdm9pZCBzZXRQcmVzZXJ2ZXNQaXRjaChib29sKTsKKworICAgIHVuc2lnbmVk
IGRhdGFTaXplKCkgY29uc3Q7CisKKyAgICB2b2lkIGdldE5hdHVyYWxTaXplKGludCYgd2lkdGgs
IGludCYgaGVpZ2h0KTsKKyAgICB2b2lkIHNldFNpemUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsK
KworICAgIHZvaWQgc2V0VmlzaWJsZShib29sKTsKKyAgICB2b2lkIHBhaW50KEhEQywgaW50IHgs
IGludCB5KTsKKyAgICB2b2lkIGdldEN1cnJlbnRGcmFtZUluZm8odm9pZComIGJ1ZmZlciwgdW5z
aWduZWQmIGJpdHNQZXJQaXhlbCwgdW5zaWduZWQmIHJvd0J5dGVzLCB1bnNpZ25lZCYgd2lkdGgs
IHVuc2lnbmVkJiBoZWlnaHQpOworCisgICAgdm9pZCBkaXNhYmxlVW5zdXBwb3J0ZWRUcmFja3Mo
dW5zaWduZWQmIGVuYWJsZWRUcmFja0NvdW50LCB1bnNpZ25lZCYgdG90YWxUcmFja0NvdW50KTsK
KyAgICB2b2lkIHNldERpc2FibGVkKGJvb2wpOworCisgICAgYm9vbCBoYXNWaWRlbygpIGNvbnN0
OworICAgIGJvb2wgaGFzQXVkaW8oKSBjb25zdDsKKworICAgIGJvb2wgaGFzQ2xvc2VkQ2FwdGlv
bnMoKSBjb25zdDsKKyAgICB2b2lkIHNldENsb3NlZENhcHRpb25zVmlzaWJsZShib29sKTsKKwor
ICAgIHN0YXRpYyB1bnNpZ25lZCBjb3VudFN1cHBvcnRlZFR5cGVzKCk7CisgICAgc3RhdGljIHZv
aWQgZ2V0U3VwcG9ydGVkVHlwZSh1bnNpZ25lZCBpbmRleCwgY29uc3QgVUNoYXIqJiBzdHIsIHVu
c2lnbmVkJiBsZW4pOworCisgICAgLy8gUmV0dXJucyB0aGUgZnVsbC1zY3JlZW4gd2luZG93IGNy
ZWF0ZWQKKyAgICBIV05EIGVudGVyRnVsbHNjcmVlbihRVE1vdmllV2luRnVsbHNjcmVlbkNsaWVu
dCopOworICAgIHZvaWQgZXhpdEZ1bGxzY3JlZW4oKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGxv
YWQoQ0ZVUkxSZWYsIGJvb2wgcHJlc2VydmVzUGl0Y2gpOworICAgIHN0YXRpYyBMUkVTVUxUIGZ1
bGxzY3JlZW5XbmRQcm9jKEhXTkQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNLCBMUEFSQU0pOworCisg
ICAgUVRNb3ZpZVdpblByaXZhdGUqIG1fcHJpdmF0ZTsKKyAgICBib29sIG1fZGlzYWJsZWQ7Cisg
ICAgZnJpZW5kIGNsYXNzIFFUTW92aWVXaW5Qcml2YXRlOworfTsKKworI2VuZGlmCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVE1vdmllLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRNb3ZpZS5oCShyZXZpc2lvbiA1ODE4NykKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWUuaAkod29ya2luZyBjb3B5KQpA
QCAtMjMsMTEgKzIzLDEyIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIFFUTW92
aWVXaW5faAotI2RlZmluZSBRVE1vdmllV2luX2gKKyNpZm5kZWYgUVRNb3ZpZV9oCisjZGVmaW5l
IFFUTW92aWVfaAogCiAjaW5jbHVkZSA8VW5pY29kZS5oPgogI2luY2x1ZGUgPHdpbmRvd3MuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCiAjaWZkZWYgUVRNT1ZJRVdJTl9FWFBPUlRT
CiAjZGVmaW5lIFFUTU9WSUVXSU5fQVBJIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQpAQCAtMzUsMjAg
KzM2LDE1IEBACiAjZGVmaW5lIFFUTU9WSUVXSU5fQVBJIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQog
I2VuZGlmCiAKLWNsYXNzIFFUTW92aWVXaW47Ci1jbGFzcyBRVE1vdmllV2luUHJpdmF0ZTsKK2Ns
YXNzIFFUTW92aWU7CitjbGFzcyBRVE1vdmllUHJpdmF0ZTsKK3R5cGVkZWYgc3RydWN0IE1vdmll
VHlwZSoqIE1vdmllOwogCi1jbGFzcyBRVE1vdmllV2luQ2xpZW50IHsKK2NsYXNzIFFUTW92aWVD
bGllbnQgewogcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBtb3ZpZUVuZGVkKFFUTW92aWVXaW4q
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIG1vdmllTG9hZFN0YXRlQ2hhbmdlZChRVE1vdmllV2lu
KikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBtb3ZpZVRpbWVDaGFuZ2VkKFFUTW92aWVXaW4qKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIG1vdmllTmV3SW1hZ2VBdmFpbGFibGUoUVRNb3ZpZVdpbiop
ID0gMDsKLX07Ci0KLWNsYXNzIFFUTW92aWVXaW5GdWxsc2NyZWVuQ2xpZW50IHsKLXB1YmxpYzoK
LSAgICB2aXJ0dWFsIExSRVNVTFQgZnVsbHNjcmVlbkNsaWVudFduZFByb2MoSFdORCwgVUlOVCBt
ZXNzYWdlLCBXUEFSQU0sIExQQVJBTSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBtb3ZpZUVuZGVk
KFFUTW92aWUqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIG1vdmllTG9hZFN0YXRlQ2hhbmdlZChR
VE1vdmllKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBtb3ZpZVRpbWVDaGFuZ2VkKFFUTW92aWUq
KSA9IDA7CiB9OwogCiBlbnVtIHsKQEAgLTYxLDE5ICs1NywyMCBAQCBlbnVtIHsKIAogdHlwZWRl
ZiBjb25zdCBzdHJ1Y3QgX19DRlVSTCAqIENGVVJMUmVmOwogCi1jbGFzcyBRVE1PVklFV0lOX0FQ
SSBRVE1vdmllV2luIHsKK2NsYXNzIFFUTU9WSUVXSU5fQVBJIFFUTW92aWUgOiBwdWJsaWMgUmVm
Q291bnRlZDxRVE1vdmllPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZVF1
aWNrVGltZSgpOwotCi0gICAgdHlwZWRlZiB2b2lkICgqU2V0VGFza1RpbWVyRGVsYXlGdW5jKShk
b3VibGUpOwotICAgIHR5cGVkZWYgdm9pZCAoKlN0b3BUYXNrVGltZXJGdW5jKSgpOwotICAgIHN0
YXRpYyB2b2lkIHNldFRhc2tUaW1lckZ1bmNzKFNldFRhc2tUaW1lckRlbGF5RnVuYywgU3RvcFRh
c2tUaW1lckZ1bmMpOwogICAgIHN0YXRpYyB2b2lkIHRhc2tUaW1lckZpcmVkKCk7CiAKLSAgICBR
VE1vdmllV2luKFFUTW92aWVXaW5DbGllbnQqKTsKLSAgICB+UVRNb3ZpZVdpbigpOworICAgIFFU
TW92aWUoUVRNb3ZpZUNsaWVudCopOworICAgIH5RVE1vdmllKCk7CisKKyAgICB2b2lkIGFkZENs
aWVudChRVE1vdmllQ2xpZW50Kik7CisgICAgdm9pZCByZW1vdmVDbGllbnQoUVRNb3ZpZUNsaWVu
dCopOwogCiAgICAgdm9pZCBsb2FkKGNvbnN0IFVDaGFyKiB1cmwsIGludCBsZW4sIGJvb2wgcHJl
c2VydmVzUGl0Y2gpOworICAgIHZvaWQgbG9hZChDRlVSTFJlZiwgYm9vbCBwcmVzZXJ2ZXNQaXRj
aCk7CisKICAgICBsb25nIGxvYWRTdGF0ZSgpIGNvbnN0OwogICAgIGZsb2F0IG1heFRpbWVMb2Fk
ZWQoKSBjb25zdDsKIApAQCAtOTMsMTMgKzkwLDEwIEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBk
YXRhU2l6ZSgpIGNvbnN0OwogCiAgICAgdm9pZCBnZXROYXR1cmFsU2l6ZShpbnQmIHdpZHRoLCBp
bnQmIGhlaWdodCk7Ci0gICAgdm9pZCBzZXRTaXplKGludCB3aWR0aCwgaW50IGhlaWdodCk7Ci0K
LSAgICB2b2lkIHNldFZpc2libGUoYm9vbCk7Ci0gICAgdm9pZCBwYWludChIREMsIGludCB4LCBp
bnQgeSk7Ci0gICAgdm9pZCBnZXRDdXJyZW50RnJhbWVJbmZvKHZvaWQqJiBidWZmZXIsIHVuc2ln
bmVkJiBiaXRzUGVyUGl4ZWwsIHVuc2lnbmVkJiByb3dCeXRlcywgdW5zaWduZWQmIHdpZHRoLCB1
bnNpZ25lZCYgaGVpZ2h0KTsKIAogICAgIHZvaWQgZGlzYWJsZVVuc3VwcG9ydGVkVHJhY2tzKHVu
c2lnbmVkJiBlbmFibGVkVHJhY2tDb3VudCwgdW5zaWduZWQmIHRvdGFsVHJhY2tDb3VudCk7CisK
KyAgICBib29sIGlzRGlzYWJsZWQoKSBjb25zdDsKICAgICB2b2lkIHNldERpc2FibGVkKGJvb2wp
OwogCiAgICAgYm9vbCBoYXNWaWRlbygpIGNvbnN0OwpAQCAtMTExLDE3ICsxMDUsMTEgQEAgcHVi
bGljOgogICAgIHN0YXRpYyB1bnNpZ25lZCBjb3VudFN1cHBvcnRlZFR5cGVzKCk7CiAgICAgc3Rh
dGljIHZvaWQgZ2V0U3VwcG9ydGVkVHlwZSh1bnNpZ25lZCBpbmRleCwgY29uc3QgVUNoYXIqJiBz
dHIsIHVuc2lnbmVkJiBsZW4pOwogCi0gICAgLy8gUmV0dXJucyB0aGUgZnVsbC1zY3JlZW4gd2lu
ZG93IGNyZWF0ZWQKLSAgICBIV05EIGVudGVyRnVsbHNjcmVlbihRVE1vdmllV2luRnVsbHNjcmVl
bkNsaWVudCopOwotICAgIHZvaWQgZXhpdEZ1bGxzY3JlZW4oKTsKKyAgICBNb3ZpZSBnZXRNb3Zp
ZUhhbmRsZSgpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIHZvaWQgbG9hZChDRlVSTFJlZiwgYm9v
bCBwcmVzZXJ2ZXNQaXRjaCk7Ci0gICAgc3RhdGljIExSRVNVTFQgZnVsbHNjcmVlblduZFByb2Mo
SFdORCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0sIExQQVJBTSk7Ci0KLSAgICBRVE1vdmllV2luUHJp
dmF0ZSogbV9wcml2YXRlOwotICAgIGJvb2wgbV9kaXNhYmxlZDsKLSAgICBmcmllbmQgY2xhc3Mg
UVRNb3ZpZVdpblByaXZhdGU7CisgICAgUVRNb3ZpZVByaXZhdGUqIG1fcHJpdmF0ZTsKKyAgICBm
cmllbmQgY2xhc3MgUVRNb3ZpZVByaXZhdGU7CiB9OwogCiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWVUYXNrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVE1vdmllVGFzay5jcHAJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVE1vdmllVGFzay5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAy
MDA5LCAyMDEwIEFwcGxlLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiUVRNb3ZpZVRhc2suaCIKKworLy8gUHV0IE1vdmll
cy5oIGZpcnN0IHNvIGJ1aWxkIGZhaWx1cmVzIGhlcmUgcG9pbnQgY2xlYXJseSB0byBRdWlja1Rp
bWUKKyNpbmNsdWRlIDxNb3ZpZXMuaD4KKworI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisKK1FU
TW92aWVUYXNrOjpRVE1vdmllVGFzaygpIAorICAgIDogbV9zZXRUYXNrVGltZXJEZWxheSgwKQor
ICAgICwgbV9zdG9wVGFza1RpbWVyKDApCit7Cit9CisKK1FUTW92aWVUYXNrOjp+UVRNb3ZpZVRh
c2soKQoreworfQorCitRVE1vdmllVGFzayogUVRNb3ZpZVRhc2s6OnNoYXJlZFRhc2soKQorewor
ICAgIHN0YXRpYyBRVE1vdmllVGFzayogc19zaGFyZWRUYXNrID0gbmV3IFFUTW92aWVUYXNrKCk7
CisgICAgcmV0dXJuIHNfc2hhcmVkVGFzazsKK30KKwordm9pZCBRVE1vdmllVGFzazo6dXBkYXRl
VGFza1RpbWVyKGRvdWJsZSBtYXhJbnRlcnZhbCwgZG91YmxlIG1pbkludGVydmFsKQoreworICAg
IEFTU0VSVChtX3NldFRhc2tUaW1lckRlbGF5KTsKKyAgICBpZiAoIW1fc2V0VGFza1RpbWVyRGVs
YXkpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChtX3N0b3BUYXNrVGltZXIpOworICAg
IGlmICghbV90YXNrTGlzdC5zaXplKCkgJiYgbV9zdG9wVGFza1RpbWVyKSB7CisgICAgICAgIG1f
c3RvcFRhc2tUaW1lcigpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGxvbmcg
aW50ZXJ2YWxJbk1TOworICAgIE9TU3RhdHVzIHN0YXR1cyA9IFFUR2V0VGltZVVudGlsTmV4dFRh
c2soJmludGVydmFsSW5NUywgMTAwMCk7CisgICAgZG91YmxlIGludGVydmFsID0gaW50ZXJ2YWxJ
bk1TIC8gMTAwMC4wOworICAgIGlmIChpbnRlcnZhbCA8IG1pbkludGVydmFsKQorICAgICAgICBp
bnRlcnZhbCA9IG1pbkludGVydmFsOworICAgIGlmIChzdGF0dXMgIT0gbm9FcnIgJiYgaW50ZXJ2
YWwgPiBtYXhJbnRlcnZhbCkKKyAgICAgICAgaW50ZXJ2YWwgPSBtYXhJbnRlcnZhbDsKKyAgICBt
X3NldFRhc2tUaW1lckRlbGF5KGludGVydmFsKTsKK30KKwordm9pZCBRVE1vdmllVGFzazo6Zmly
ZVRhc2tDbGllbnRzKCkKK3sKKyAgICBmb3IgKEhhc2hTZXQ8UVRNb3ZpZVRhc2tDbGllbnQqPjo6
aXRlcmF0b3IgaSA9IG1fdGFza0xpc3QuYmVnaW4oKTsgaSAhPSBtX3Rhc2tMaXN0LmVuZCgpOyAr
K2kpCisgICAgICAgICgqaSktPnRhc2soKTsKK30KKwordm9pZCBRVE1vdmllVGFzazo6YWRkVGFz
a0NsaWVudChRVE1vdmllVGFza0NsaWVudCogY2xpZW50KSAKK3sKKyAgICBBU1NFUlQoY2xpZW50
KTsKKyAgICBpZiAoIWNsaWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV90YXNrTGlzdC5h
ZGQoY2xpZW50KTsKK30KKwordm9pZCBRVE1vdmllVGFzazo6cmVtb3ZlVGFza0NsaWVudChRVE1v
dmllVGFza0NsaWVudCogY2xpZW50KQoreworICAgIEFTU0VSVChjbGllbnQpOworICAgIGlmICgh
Y2xpZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Rhc2tMaXN0LnJlbW92ZShjbGllbnQp
OworfQorCit2b2lkIFFUTW92aWVUYXNrOjpzZXRUYXNrVGltZXJGdW5jcyhTZXRUYXNrVGltZXJE
ZWxheUZ1bmMgc2V0VGFza1RpbWVyRGVsYXksIFN0b3BUYXNrVGltZXJGdW5jIHN0b3BUYXNrVGlt
ZXIpCit7CisgICAgbV9zZXRUYXNrVGltZXJEZWxheSA9IHNldFRhc2tUaW1lckRlbGF5OworICAg
IG1fc3RvcFRhc2tUaW1lciA9IHN0b3BUYXNrVGltZXI7Cit9CisKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWVUYXNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vUVRNb3ZpZVRhc2suaAkocmV2aXNpb24gMCkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWVUYXNrLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAg
QXBwbGUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUVRNb3Zp
ZVRhc2tfaAorI2RlZmluZSBRVE1vdmllVGFza19oCisKKyNpbmNsdWRlIDxXVEYvSGFzaFNldC5o
PgorCisjaWZkZWYgUVRNT1ZJRVdJTl9FWFBPUlRTCisjZGVmaW5lIFFUTU9WSUVXSU5fQVBJIF9f
ZGVjbHNwZWMoZGxsZXhwb3J0KQorI2Vsc2UKKyNkZWZpbmUgUVRNT1ZJRVdJTl9BUEkgX19kZWNs
c3BlYyhkbGxpbXBvcnQpCisjZW5kaWYKKworY2xhc3MgUVRNb3ZpZVRhc2tDbGllbnQgeworcHVi
bGljOgorICAgIHZpcnR1YWwgdm9pZCB0YXNrKCkgPSAwOworfTsKKwordHlwZWRlZiB2b2lkICgq
U2V0VGFza1RpbWVyRGVsYXlGdW5jKShkb3VibGUpOwordHlwZWRlZiB2b2lkICgqU3RvcFRhc2tU
aW1lckZ1bmMpKCk7CisKK2NsYXNzIFFUTU9WSUVXSU5fQVBJIFFUTW92aWVUYXNrIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUVRNb3ZpZVRhc2sqIHNoYXJlZFRhc2soKTsKKworICAgIHZvaWQgYWRk
VGFza0NsaWVudChRVE1vdmllVGFza0NsaWVudCogY2xpZW50KTsKKyAgICB2b2lkIHJlbW92ZVRh
c2tDbGllbnQoUVRNb3ZpZVRhc2tDbGllbnQqKTsKKyAgICB2b2lkIGZpcmVUYXNrQ2xpZW50cygp
OworCisgICAgdm9pZCB1cGRhdGVUYXNrVGltZXIoZG91YmxlIG1heEludGVydmFsID0gMS4wLCBk
b3VibGUgbWluSW50ZXJ2YWwgPSAxLjAgLyAzMCk7CisgICAgdm9pZCBzZXRUYXNrVGltZXJGdW5j
cyhTZXRUYXNrVGltZXJEZWxheUZ1bmMgc2V0VGFza1RpbWVyRGVsYXksIFN0b3BUYXNrVGltZXJG
dW5jIHN0b3BUYXNrVGltZXIpOworCitwcm90ZWN0ZWQ6CisgICAgUVRNb3ZpZVRhc2soKTsKKyAg
ICB+UVRNb3ZpZVRhc2soKTsKKworICAgIFNldFRhc2tUaW1lckRlbGF5RnVuYyBtX3NldFRhc2tU
aW1lckRlbGF5OworICAgIFN0b3BUYXNrVGltZXJGdW5jIG1fc3RvcFRhc2tUaW1lcjsKKyAgICBI
YXNoU2V0PFFUTW92aWVUYXNrQ2xpZW50Kj4gbV90YXNrTGlzdDsKKworcHJpdmF0ZToKKyAgICBR
VE1vdmllVGFzayhjb25zdCBRVE1vdmllVGFzayYpOworICAgIFFUTW92aWVUYXNrJiBvcGVyYXRv
cj0oY29uc3QgUVRNb3ZpZVRhc2smKTsKK307CisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vUVRNb3ZpZVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vUVRNb3ZpZVdpbi5jcHAJKHJldmlzaW9uIDU4MTg3KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRNb3ZpZVdpbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDcgKzI5LDcgQEAKIC8vIFB1dCBNb3ZpZXMuaCBmaXJzdCBzbyBidWlsZCBmYWls
dXJlcyBoZXJlIHBvaW50IGNsZWFybHkgdG8gUXVpY2tUaW1lCiAjaW5jbHVkZSA8TW92aWVzLmg+
CiAKLSNpbmNsdWRlICJRVE1vdmllV2luVGltZXIuaCIKKyNpbmNsdWRlICJRVE1vdmllVGFzay5o
IgogI2luY2x1ZGUgPEdYTWF0aC5oPgogI2luY2x1ZGUgPFFUTUwuaD4KICNpbmNsdWRlIDxRdWlj
a1RpbWVDb21wb25lbnRzLmg+CkBAIC00MiwxMSArNDIsNiBAQCB1c2luZyBuYW1lc3BhY2Ugc3Rk
OwogCiBzdGF0aWMgY29uc3QgbG9uZyBtaW5pbXVtUXVpY2tUaW1lVmVyc2lvbiA9IDB4MDczMDAw
MDA7IC8vIDcuMwogCi1zdGF0aWMgY29uc3QgbG9uZyBjbG9zZWRDYXB0aW9uVHJhY2tUeXBlID0g
J2NsY3AnOwotc3RhdGljIGNvbnN0IGxvbmcgc3ViVGl0bGVUcmFja1R5cGUgPSAnc2J0bCc7Ci1z
dGF0aWMgY29uc3QgbG9uZyBtcGVnNE9iamVjdERlc2NyaXB0aW9uVHJhY2tUeXBlID0gJ29kc20n
Owotc3RhdGljIGNvbnN0IGxvbmcgbXBlZzRTY2VuZURlc2NyaXB0aW9uVHJhY2tUeXBlID0gJ3Nk
c20nOwotc3RhdGljIGNvbnN0IGxvbmcgY2xvc2VkQ2FwdGlvbkRpc3BsYXlQcm9wZXJ0eUlEID0g
J2Rpc3AnOwogc3RhdGljIExQQ1RTVFIgZnVsbHNjcmVlblFUTW92aWVXaW5Qb2ludGVyUHJvcCA9
IFRFWFQoImZ1bGxzY3JlZW5RVE1vdmllV2luUG9pbnRlciIpOwogCiAvLyBSZXNpemluZyBHV29y
bGRzIGlzIHNsb3csIGdpdmUgdGhlbSBhIG1pbmltdW0gc2l6ZSBzbyBzaXplIG9mIHNtYWxsIApA
QCAtNjYsMzMgKzYxLDEzIEBAIHN0YXRpYyBIYXNoU2V0PFFUTW92aWVXaW5Qcml2YXRlKj4qIGdU
YXMKIHN0YXRpYyBWZWN0b3I8Q0ZTdHJpbmdSZWY+KiBnU3VwcG9ydGVkVHlwZXMgPSAwOwogc3Rh
dGljIFNJbnQzMiBxdWlja1RpbWVWZXJzaW9uID0gMDsKIAotc3RhdGljIFFUTW92aWVXaW46OlNl
dFRhc2tUaW1lckRlbGF5RnVuYyBnU2V0VGFza1RpbWVyRGVsYXkgPSAwOwotc3RhdGljIFFUTW92
aWVXaW46OlN0b3BUYXNrVGltZXJGdW5jIGdTdG9wVGFza1RpbWVyID0gMDsKLQotc3RhdGljIHZv
aWQgdXBkYXRlVGFza1RpbWVyKGludCBtYXhJbnRlcnZhbCA9IDEwMDApCi17Ci0gICAgaWYgKCFn
VGFza0xpc3QtPnNpemUoKSkgewotICAgICAgICBnU3RvcFRhc2tUaW1lcigpOwotICAgICAgICBy
ZXR1cm47ICAgIAotICAgIH0KLSAgICAKLSAgICBsb25nIGludGVydmFsSW5NUzsKLSAgICBRVEdl
dFRpbWVVbnRpbE5leHRUYXNrKCZpbnRlcnZhbEluTVMsIDEwMDApOwotICAgIGlmIChpbnRlcnZh
bEluTVMgPiBtYXhJbnRlcnZhbCkKLSAgICAgICAgaW50ZXJ2YWxJbk1TID0gbWF4SW50ZXJ2YWw7
Ci0gICAgZ1NldFRhc2tUaW1lckRlbGF5KHN0YXRpY19jYXN0PGZsb2F0PihpbnRlcnZhbEluTVMp
IC8gMTAwMCk7Ci19Ci0KLWNsYXNzIFFUTW92aWVXaW5Qcml2YXRlIDogcHVibGljIE5vbmNvcHlh
YmxlIHsKK2NsYXNzIFFUTW92aWVXaW5Qcml2YXRlIDogcHVibGljIFFUTW92aWVDbGllbnQgewog
cHVibGljOgotICAgIFFUTW92aWVXaW5Qcml2YXRlKCk7Ci0gICAgflFUTW92aWVXaW5Qcml2YXRl
KCk7Ci0gICAgdm9pZCB0YXNrKCk7Ci0gICAgdm9pZCBzdGFydFRhc2soKTsKLSAgICB2b2lkIGVu
ZFRhc2soKTsKKyAgICBRVE1vdmllV2luUHJpdmF0ZShRVE1vdmllV2luKiBtb3ZpZVdpbik7Cisg
ICAgdmlydHVhbCB+UVRNb3ZpZVdpblByaXZhdGUoKTsKIAotICAgIHZvaWQgY3JlYXRlTW92aWVD
b250cm9sbGVyKCk7CiAgICAgdm9pZCByZWdpc3RlckRyYXdpbmdDYWxsYmFjaygpOworICAgIHZv
aWQgdW5yZWdpc3RlckRyYXdpbmdDYWxsYmFjaygpOwogICAgIHZvaWQgZHJhd2luZ0NvbXBsZXRl
KCk7CiAgICAgdm9pZCB1cGRhdGVHV29ybGQoKTsKICAgICB2b2lkIGNyZWF0ZUdXb3JsZCgpOwpA
QCAtMTAzLDE2ICs3OCwxNSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldFNpemUoaW50LCBpbnQp
OwogCisgICAgdmlydHVhbCB2b2lkIG1vdmllRW5kZWQoUVRNb3ZpZSopOworICAgIHZpcnR1YWwg
dm9pZCBtb3ZpZUxvYWRTdGF0ZUNoYW5nZWQoUVRNb3ZpZSopOworICAgIHZpcnR1YWwgdm9pZCBt
b3ZpZVRpbWVDaGFuZ2VkKFFUTW92aWUqKTsKKwogICAgIFFUTW92aWVXaW4qIG1fbW92aWVXaW47
CisgICAgUmVmUHRyPFFUTW92aWU+IG1fcXRNb3ZpZTsKICAgICBNb3ZpZSBtX21vdmllOwotICAg
IE1vdmllQ29udHJvbGxlciBtX21vdmllQ29udHJvbGxlcjsKLSAgICBib29sIG1fdGFza2luZzsK
ICAgICBRVE1vdmllV2luQ2xpZW50KiBtX2NsaWVudDsKICAgICBsb25nIG1fbG9hZFN0YXRlOwot
ICAgIGJvb2wgbV9lbmRlZDsKLSAgICBib29sIG1fc2Vla2luZzsKLSAgICBmbG9hdCBtX2xhc3RN
ZWRpYVRpbWU7Ci0gICAgZG91YmxlIG1fbGFzdExvYWRTdGF0ZUNoZWNrVGltZTsKICAgICBpbnQg
bV93aWR0aDsKICAgICBpbnQgbV9oZWlnaHQ7CiAgICAgYm9vbCBtX3Zpc2libGU7CkBAIC0xMjAs
MTIgKzk0LDggQEAgcHVibGljOgogICAgIGludCBtX2dXb3JsZFdpZHRoOwogICAgIGludCBtX2dX
b3JsZEhlaWdodDsKICAgICBHV29ybGRQdHIgbV9zYXZlZEdXb3JsZDsKLSAgICBsb25nIG1fbG9h
ZEVycm9yOwogICAgIGZsb2F0IG1fd2lkdGhTY2FsZUZhY3RvcjsKICAgICBmbG9hdCBtX2hlaWdo
dFNjYWxlRmFjdG9yOwotICAgIENGVVJMUmVmIG1fY3VycmVudFVSTDsKLSAgICBmbG9hdCBtX3Rp
bWVUb1Jlc3RvcmU7Ci0gICAgZmxvYXQgbV9yYXRlVG9SZXN0b3JlOwogI2lmICFBU1NFUlRfRElT
QUJMRUQKICAgICBib29sIG1fc2NhbGVDYWNoZWQ7CiAjZW5kaWYKQEAgLTEzNCwxOSArMTA0LDE0
IEBAIHB1YmxpYzoKICAgICBSZWN0IG1fZnVsbHNjcmVlblJlY3Q7CiAgICAgUVRNb3ZpZVdpbkZ1
bGxzY3JlZW5DbGllbnQqIG1fZnVsbHNjcmVlbkNsaWVudDsKICAgICBjaGFyKiBtX2Z1bGxzY3Jl
ZW5SZXN0b3JlU3RhdGU7CisgICAgYm9vbCBtX2Rpc2FibGVkOwogfTsKIAotUVRNb3ZpZVdpblBy
aXZhdGU6OlFUTW92aWVXaW5Qcml2YXRlKCkKLSAgICA6IG1fbW92aWVXaW4oMCkKK1FUTW92aWVX
aW5Qcml2YXRlOjpRVE1vdmllV2luUHJpdmF0ZShRVE1vdmllV2luKiBtb3ZpZVdpbikKKyAgICA6
IG1fbW92aWVXaW4obW92aWVXaW4pCiAgICAgLCBtX21vdmllKDApCi0gICAgLCBtX21vdmllQ29u
dHJvbGxlcigwKQotICAgICwgbV90YXNraW5nKGZhbHNlKQogICAgICwgbV9jbGllbnQoMCkKICAg
ICAsIG1fbG9hZFN0YXRlKDApCi0gICAgLCBtX2VuZGVkKGZhbHNlKQotICAgICwgbV9zZWVraW5n
KGZhbHNlKQotICAgICwgbV9sYXN0TWVkaWFUaW1lKDApCi0gICAgLCBtX2xhc3RMb2FkU3RhdGVD
aGVja1RpbWUoMCkKICAgICAsIG1fd2lkdGgoMCkKICAgICAsIG1faGVpZ2h0KDApCiAgICAgLCBt
X3Zpc2libGUoZmFsc2UpCkBAIC0xNTQsMTIgKzExOSw4IEBAIFFUTW92aWVXaW5Qcml2YXRlOjpR
VE1vdmllV2luUHJpdmF0ZSgpCiAgICAgLCBtX2dXb3JsZFdpZHRoKDApCiAgICAgLCBtX2dXb3Js
ZEhlaWdodCgwKQogICAgICwgbV9zYXZlZEdXb3JsZCgwKQotICAgICwgbV9sb2FkRXJyb3IoMCkK
ICAgICAsIG1fd2lkdGhTY2FsZUZhY3RvcigxKQogICAgICwgbV9oZWlnaHRTY2FsZUZhY3Rvcigx
KQotICAgICwgbV9jdXJyZW50VVJMKDApCi0gICAgLCBtX3RpbWVUb1Jlc3RvcmUoLTEuMGYpCi0g
ICAgLCBtX3JhdGVUb1Jlc3RvcmUoLTEuMGYpCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgICwg
bV9zY2FsZUNhY2hlZChmYWxzZSkKICNlbmRpZgpAQCAtMTY3LDYgKzEyOCw4IEBAIFFUTW92aWVX
aW5Qcml2YXRlOjpRVE1vdmllV2luUHJpdmF0ZSgpCiAgICAgLCBtX2Z1bGxzY3JlZW5PcmlnR1dv
cmxkKDApCiAgICAgLCBtX2Z1bGxzY3JlZW5DbGllbnQoMCkKICAgICAsIG1fZnVsbHNjcmVlblJl
c3RvcmVTdGF0ZSgwKQorICAgICwgbV9kaXNhYmxlZChmYWxzZSkKKyAgICAsIG1fcXRNb3ZpZSgw
KQogewogICAgIFJlY3QgcmVjdCA9IHsgMCwgMCwgMCwgMCB9OwogICAgIG1fZnVsbHNjcmVlblJl
Y3QgPSByZWN0OwpAQCAtMTc2LDQ3ICsxMzksOCBAQCBRVE1vdmllV2luUHJpdmF0ZTo6flFUTW92
aWVXaW5Qcml2YXRlKCkKIHsKICAgICBBU1NFUlQoIW1fZnVsbHNjcmVlbldpbmRvdyk7CiAKLSAg
ICBlbmRUYXNrKCk7CiAgICAgaWYgKG1fZ1dvcmxkKQogICAgICAgICBkZWxldGVHV29ybGQoKTsK
LSAgICBpZiAobV9tb3ZpZUNvbnRyb2xsZXIpCi0gICAgICAgIERpc3Bvc2VNb3ZpZUNvbnRyb2xs
ZXIobV9tb3ZpZUNvbnRyb2xsZXIpOwotICAgIGlmIChtX21vdmllKQotICAgICAgICBEaXNwb3Nl
TW92aWUobV9tb3ZpZSk7Ci0gICAgaWYgKG1fY3VycmVudFVSTCkKLSAgICAgICAgQ0ZSZWxlYXNl
KG1fY3VycmVudFVSTCk7Ci19Ci0KLXZvaWQgUVRNb3ZpZVdpbjo6dGFza1RpbWVyRmlyZWQoKQot
ewotICAgIC8vIFRoZSBoYXNoIGNvbnRlbnQgbWlnaHQgY2hhbmdlIGR1cmluZyB0YXNrKCkKLSAg
ICBWZWN0b3I8UVRNb3ZpZVdpblByaXZhdGUqPiB0YXNrczsKLSAgICBjb3B5VG9WZWN0b3IoKmdU
YXNrTGlzdCwgdGFza3MpOwotICAgIHNpemVfdCBjb3VudCA9IHRhc2tzLnNpemUoKTsKLSAgICBm
b3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgY291bnQ7ICsrbikKLSAgICAgICAgdGFza3Nbbl0tPnRh
c2soKTsKLQotICAgIHVwZGF0ZVRhc2tUaW1lcigpOwotfQotCi12b2lkIFFUTW92aWVXaW5Qcml2
YXRlOjpzdGFydFRhc2soKSAKLXsKLSAgICBpZiAobV90YXNraW5nKQotICAgICAgICByZXR1cm47
Ci0gICAgaWYgKCFnVGFza0xpc3QpCi0gICAgICAgIGdUYXNrTGlzdCA9IG5ldyBIYXNoU2V0PFFU
TW92aWVXaW5Qcml2YXRlKj47Ci0gICAgZ1Rhc2tMaXN0LT5hZGQodGhpcyk7Ci0gICAgbV90YXNr
aW5nID0gdHJ1ZTsKLSAgICB1cGRhdGVUYXNrVGltZXIoKTsKLX0KLQotdm9pZCBRVE1vdmllV2lu
UHJpdmF0ZTo6ZW5kVGFzaygpIAotewotICAgIGlmICghbV90YXNraW5nKQotICAgICAgICByZXR1
cm47Ci0gICAgZ1Rhc2tMaXN0LT5yZW1vdmUodGhpcyk7Ci0gICAgbV90YXNraW5nID0gZmFsc2U7
Ci0gICAgdXBkYXRlVGFza1RpbWVyKCk7CiB9CiAKIHZvaWQgUVRNb3ZpZVdpblByaXZhdGU6OmNh
Y2hlTW92aWVTY2FsZSgpCkBAIC0yMzUsMTEwICsxNTksMzggQEAgdm9pZCBRVE1vdmllV2luUHJp
dmF0ZTo6Y2FjaGVNb3ZpZVNjYWxlKAogICAgIGlmIChuYXR1cmFsSGVpZ2h0KQogICAgICAgICBt
X2hlaWdodFNjYWxlRmFjdG9yID0gKGluaXRpYWxSZWN0LmJvdHRvbSAtIGluaXRpYWxSZWN0LnRv
cCkgLyBuYXR1cmFsSGVpZ2h0OwogI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICBtX3NjYWxlQ2Fj
aGVkID0gdHJ1ZTs7CisgICAgbV9zY2FsZUNhY2hlZCA9IHRydWU7CiAjZW5kaWYKIH0KIAotdm9p
ZCBRVE1vdmllV2luUHJpdmF0ZTo6dGFzaygpIAotewotICAgIEFTU0VSVChtX3Rhc2tpbmcpOwot
Ci0gICAgaWYgKCFtX2xvYWRFcnJvcikgewotICAgICAgICBpZiAobV9tb3ZpZUNvbnRyb2xsZXIp
Ci0gICAgICAgICAgICBNQ0lkbGUobV9tb3ZpZUNvbnRyb2xsZXIpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBNb3ZpZXNUYXNrKG1fbW92aWUsIDApOwotICAgIH0KLQotICAgIC8vIEdldE1v
dmllTG9hZFN0YXRlIGRvY3VtZW50YXRpb24gc2F5cyB0aGF0IHlvdSBzaG91bGQgbm90IGNhbGwg
aXQgbW9yZSBvZnRlbiB0aGFuIGV2ZXJ5IHF1YXJ0ZXIgb2YgYSBzZWNvbmQuCi0gICAgaWYgKHN5
c3RlbVRpbWUoKSA+PSBtX2xhc3RMb2FkU3RhdGVDaGVja1RpbWUgKyAwLjI1IHx8IG1fbG9hZEVy
cm9yKSB7IAotICAgICAgICAvLyBJZiBsb2FkIGZhaWxzIFFUJ3MgbG9hZCBzdGF0ZSBpcyBRVE1v
dmllTG9hZFN0YXRlQ29tcGxldGUuCi0gICAgICAgIC8vIFRoaXMgaXMgZGlmZmVyZW50IGZyb20g
UVRLaXQgQVBJIGFuZCBzZWVtcyBzdHJhbmdlLgotICAgICAgICBsb25nIGxvYWRTdGF0ZSA9IG1f
bG9hZEVycm9yID8gUVRNb3ZpZUxvYWRTdGF0ZUVycm9yIDogR2V0TW92aWVMb2FkU3RhdGUobV9t
b3ZpZSk7Ci0gICAgICAgIGlmIChsb2FkU3RhdGUgIT0gbV9sb2FkU3RhdGUpIHsKLQotICAgICAg
ICAgICAgLy8gd2Ugb25seSBuZWVkIHRvIGVyYXNlIHRoZSBtb3ZpZSBnd29ybGQgd2hlbiB0aGUg
bG9hZCBzdGF0ZSBjaGFuZ2VzIHRvIGxvYWRlZCB3aGlsZSBpdAotICAgICAgICAgICAgLy8gIGlz
IHZpc2libGUgYXMgdGhlIGd3b3JsZCBpcyBkZXN0cm95ZWQvY3JlYXRlZCB3aGVuIHZpc2liaWxp
dHkgY2hhbmdlcwotICAgICAgICAgICAgYm9vbCBzaG91bGRSZXN0b3JlUGxheWJhY2tTdGF0ZSA9
IGZhbHNlOwotICAgICAgICAgICAgYm9vbCBtb3ZpZU5ld2x5UGxheWFibGUgPSBsb2FkU3RhdGUg
Pj0gUVRNb3ZpZUxvYWRTdGF0ZUxvYWRlZCAmJiBtX2xvYWRTdGF0ZSA8IFFUTW92aWVMb2FkU3Rh
dGVMb2FkZWQ7Ci0gICAgICAgICAgICBtX2xvYWRTdGF0ZSA9IGxvYWRTdGF0ZTsKLSAgICAgICAg
ICAgIGlmIChtb3ZpZU5ld2x5UGxheWFibGUpIHsKLSAgICAgICAgICAgICAgICBjYWNoZU1vdmll
U2NhbGUoKTsKLSAgICAgICAgICAgICAgICB1cGRhdGVNb3ZpZVNpemUoKTsKLSAgICAgICAgICAg
ICAgICBpZiAobV92aXNpYmxlKQotICAgICAgICAgICAgICAgICAgICBjbGVhckdXb3JsZCgpOwot
ICAgICAgICAgICAgICAgIHNob3VsZFJlc3RvcmVQbGF5YmFja1N0YXRlID0gdHJ1ZTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFtX21vdmllQ29udHJvbGxlciAmJiBtX2xvYWRT
dGF0ZSA+PSBRVE1vdmllTG9hZFN0YXRlTG9hZGVkKQotICAgICAgICAgICAgICAgIGNyZWF0ZU1v
dmllQ29udHJvbGxlcigpOwotICAgICAgICAgICAgbV9jbGllbnQtPm1vdmllTG9hZFN0YXRlQ2hh
bmdlZChtX21vdmllV2luKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHNob3VsZFJl
c3RvcmVQbGF5YmFja1N0YXRlICYmIG1fdGltZVRvUmVzdG9yZSAhPSAtMS4wZikgewotICAgICAg
ICAgICAgICAgIG1fbW92aWVXaW4tPnNldEN1cnJlbnRUaW1lKG1fdGltZVRvUmVzdG9yZSk7Ci0g
ICAgICAgICAgICAgICAgbV90aW1lVG9SZXN0b3JlID0gLTEuMGY7Ci0gICAgICAgICAgICAgICAg
bV9tb3ZpZVdpbi0+c2V0UmF0ZShtX3JhdGVUb1Jlc3RvcmUpOwotICAgICAgICAgICAgICAgIG1f
cmF0ZVRvUmVzdG9yZSA9IC0xLjBmOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAo
bV9tb3ZpZVdpbi0+bV9kaXNhYmxlZCkgewotICAgICAgICAgICAgICAgIGVuZFRhc2soKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAg
bV9sYXN0TG9hZFN0YXRlQ2hlY2tUaW1lID0gc3lzdGVtVGltZSgpOwotICAgIH0KLQotICAgIGJv
b2wgZW5kZWQgPSAhIUlzTW92aWVEb25lKG1fbW92aWUpOwotICAgIGlmIChlbmRlZCAhPSBtX2Vu
ZGVkKSB7Ci0gICAgICAgIG1fZW5kZWQgPSBlbmRlZDsKLSAgICAgICAgaWYgKG1fY2xpZW50ICYm
IGVuZGVkKQotICAgICAgICAgICAgbV9jbGllbnQtPm1vdmllRW5kZWQobV9tb3ZpZVdpbik7Ci0g
ICAgfQotCi0gICAgZmxvYXQgdGltZSA9IG1fbW92aWVXaW4tPmN1cnJlbnRUaW1lKCk7Ci0gICAg
aWYgKHRpbWUgPCBtX2xhc3RNZWRpYVRpbWUgfHwgdGltZSA+PSBtX2xhc3RNZWRpYVRpbWUgKyBj
Tm9uQ29udGludW91c1RpbWVDaGFuZ2UgfHwgbV9zZWVraW5nKSB7Ci0gICAgICAgIG1fc2Vla2lu
ZyA9IGZhbHNlOwotICAgICAgICBpZiAobV9jbGllbnQpCi0gICAgICAgICAgICBtX2NsaWVudC0+
bW92aWVUaW1lQ2hhbmdlZChtX21vdmllV2luKTsKLSAgICB9Ci0gICAgbV9sYXN0TWVkaWFUaW1l
ID0gdGltZTsKLQotICAgIGlmIChtX2xvYWRFcnJvcikKLSAgICAgICAgZW5kVGFzaygpOwotfQot
Ci12b2lkIFFUTW92aWVXaW5Qcml2YXRlOjpjcmVhdGVNb3ZpZUNvbnRyb2xsZXIoKQorcGFzY2Fs
IE9TRXJyIG1vdmllRHJhd2luZ0NvbXBsZXRlUHJvYyhNb3ZpZSBtb3ZpZSwgbG9uZyBkYXRhKQog
ewotICAgIFJlY3QgYm91bmRzOwotICAgIGxvbmcgZmxhZ3M7Ci0KLSAgICBpZiAoIW1fbW92aWUp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX21vdmllQ29udHJvbGxlcikKLSAgICAgICAg
RGlzcG9zZU1vdmllQ29udHJvbGxlcihtX21vdmllQ29udHJvbGxlcik7Ci0KLSAgICBHZXRNb3Zp
ZUJveChtX21vdmllLCAmYm91bmRzKTsKLSAgICBmbGFncyA9IG1jVG9wTGVmdE1vdmllIHwgbWNO
b3RWaXNpYmxlOwotICAgIG1fbW92aWVDb250cm9sbGVyID0gTmV3TW92aWVDb250cm9sbGVyKG1f
bW92aWUsICZib3VuZHMsIGZsYWdzKTsKLSAgICBpZiAoIW1fbW92aWVDb250cm9sbGVyKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBNQ1NldENvbnRyb2xsZXJQb3J0KG1fbW92aWVDb250cm9sbGVy
LCBtX2dXb3JsZCk7Ci0gICAgTUNTZXRDb250cm9sbGVyQXR0YWNoZWQobV9tb3ZpZUNvbnRyb2xs
ZXIsIGZhbHNlKTsKKyAgICBVcHBQYXJhbSBwYXJhbTsKKyAgICBwYXJhbS5sb25nVmFsdWUgPSBk
YXRhOworICAgIFFUTW92aWVXaW5Qcml2YXRlKiBtcCA9IHN0YXRpY19jYXN0PFFUTW92aWVXaW5Q
cml2YXRlKj4ocGFyYW0ucHRyKTsKKyAgICBpZiAobXApCisgICAgICAgIG1wLT5kcmF3aW5nQ29t
cGxldGUoKTsKKyAgICByZXR1cm4gMDsKIH0KIAogdm9pZCBRVE1vdmllV2luUHJpdmF0ZTo6cmVn
aXN0ZXJEcmF3aW5nQ2FsbGJhY2soKQogeworICAgIGlmICghZ01vdmllRHJhd2luZ0NvbXBsZXRl
VVBQKQorICAgICAgICBnTW92aWVEcmF3aW5nQ29tcGxldGVVUFAgPSBOZXdNb3ZpZURyYXdpbmdD
b21wbGV0ZVVQUChtb3ZpZURyYXdpbmdDb21wbGV0ZVByb2MpOworCiAgICAgVXBwUGFyYW0gcGFy
YW07CiAgICAgcGFyYW0ucHRyID0gdGhpczsKICAgICBTZXRNb3ZpZURyYXdpbmdDb21wbGV0ZVBy
b2MobV9tb3ZpZSwgbW92aWVEcmF3aW5nQ2FsbFdoZW5DaGFuZ2VkLCBnTW92aWVEcmF3aW5nQ29t
cGxldGVVUFAsIHBhcmFtLmxvbmdWYWx1ZSk7CiB9CiAKK3ZvaWQgUVRNb3ZpZVdpblByaXZhdGU6
OnVucmVnaXN0ZXJEcmF3aW5nQ2FsbGJhY2soKQoreworICAgIFNldE1vdmllRHJhd2luZ0NvbXBs
ZXRlUHJvYyhtX21vdmllLCBtb3ZpZURyYXdpbmdDYWxsV2hlbkNoYW5nZWQsIDAsIDApOworfQor
CiB2b2lkIFFUTW92aWVXaW5Qcml2YXRlOjpkcmF3aW5nQ29tcGxldGUoKQogewotICAgIGlmICgh
bV9nV29ybGQgfHwgbV9tb3ZpZVdpbi0+bV9kaXNhYmxlZCB8fCBtX2xvYWRTdGF0ZSA8IFFUTW92
aWVMb2FkU3RhdGVMb2FkZWQpCisgICAgaWYgKCFtX2dXb3JsZCB8fCBtX21vdmllV2luLT5tX3By
aXZhdGUtPm1fZGlzYWJsZWQgfHwgbV9sb2FkU3RhdGUgPCBRVE1vdmllTG9hZFN0YXRlTG9hZGVk
KQogICAgICAgICByZXR1cm47CiAgICAgbV9jbGllbnQtPm1vdmllTmV3SW1hZ2VBdmFpbGFibGUo
bV9tb3ZpZVdpbik7CiB9CkBAIC0zNzcsMTkgKzIyOSwxNSBAQCB2b2lkIFFUTW92aWVXaW5Qcml2
YXRlOjpjcmVhdGVHV29ybGQoKQogICAgIGlmIChlcnIpIAogICAgICAgICByZXR1cm47CiAgICAg
R2V0TW92aWVHV29ybGQobV9tb3ZpZSwgJm1fc2F2ZWRHV29ybGQsIDApOwotICAgIGlmIChtX21v
dmllQ29udHJvbGxlcikKLSAgICAgICAgTUNTZXRDb250cm9sbGVyUG9ydChtX21vdmllQ29udHJv
bGxlciwgbV9nV29ybGQpOwogICAgIFNldE1vdmllR1dvcmxkKG1fbW92aWUsIG1fZ1dvcmxkLCAw
KTsKICAgICBib3VuZHMucmlnaHQgPSBtX3dpZHRoOwogICAgIGJvdW5kcy5ib3R0b20gPSBtX2hl
aWdodDsKLSAgICBpZiAobV9tb3ZpZUNvbnRyb2xsZXIpCi0gICAgICAgIE1DU2V0Q29udHJvbGxl
ckJvdW5kc1JlY3QobV9tb3ZpZUNvbnRyb2xsZXIsICZib3VuZHMpOwogICAgIFNldE1vdmllQm94
KG1fbW92aWUsICZib3VuZHMpOwogfQogCiB2b2lkIFFUTW92aWVXaW5Qcml2YXRlOjpjbGVhckdX
b3JsZCgpCiB7Ci0gICAgaWYgKCFtX21vdmllfHwhbV9nV29ybGQpCisgICAgaWYgKCFtX21vdmll
IHx8ICFtX2dXb3JsZCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgR3JhZlB0ciBzYXZlUG9ydDsK
QEAgLTQzNiw4ICsyODQsNiBAQCB2b2lkIFFUTW92aWVXaW5Qcml2YXRlOjp1cGRhdGVNb3ZpZVNp
emUoCiAgICAgYm91bmRzLmxlZnQgPSAwOyAKICAgICBib3VuZHMucmlnaHQgPSBtX3dpZHRoOwog
ICAgIGJvdW5kcy5ib3R0b20gPSBtX2hlaWdodDsKLSAgICBpZiAobV9tb3ZpZUNvbnRyb2xsZXIp
Ci0gICAgICAgIE1DU2V0Q29udHJvbGxlckJvdW5kc1JlY3QobV9tb3ZpZUNvbnRyb2xsZXIsICZi
b3VuZHMpOwogICAgIFNldE1vdmllQm94KG1fbW92aWUsICZib3VuZHMpOwogICAgIHVwZGF0ZUdX
b3JsZCgpOwogfQpAQCAtNDQ2LDggKzI5Miw2IEBAIHZvaWQgUVRNb3ZpZVdpblByaXZhdGU6OnVw
ZGF0ZU1vdmllU2l6ZSgKIHZvaWQgUVRNb3ZpZVdpblByaXZhdGU6OmRlbGV0ZUdXb3JsZCgpCiB7
CiAgICAgQVNTRVJUKG1fZ1dvcmxkKTsKLSAgICBpZiAobV9tb3ZpZUNvbnRyb2xsZXIpCi0gICAg
ICAgIE1DU2V0Q29udHJvbGxlclBvcnQobV9tb3ZpZUNvbnRyb2xsZXIsIG1fc2F2ZWRHV29ybGQp
OwogICAgIGlmIChtX21vdmllKQogICAgICAgICBTZXRNb3ZpZUdXb3JsZChtX21vdmllLCBtX3Nh
dmVkR1dvcmxkLCAwKTsKICAgICBtX3NhdmVkR1dvcmxkID0gMDsKQEAgLTQ1NywxNjAgKzMwMSw1
MCBAQCB2b2lkIFFUTW92aWVXaW5Qcml2YXRlOjpkZWxldGVHV29ybGQoKQogICAgIG1fZ1dvcmxk
SGVpZ2h0ID0gMDsKIH0KIAotCi1RVE1vdmllV2luOjpRVE1vdmllV2luKFFUTW92aWVXaW5DbGll
bnQqIGNsaWVudCkKLSAgICA6IG1fcHJpdmF0ZShuZXcgUVRNb3ZpZVdpblByaXZhdGUoKSkKLSAg
ICAsIG1fZGlzYWJsZWQoZmFsc2UpCi17Ci0gICAgbV9wcml2YXRlLT5tX21vdmllV2luID0gdGhp
czsKLSAgICBtX3ByaXZhdGUtPm1fY2xpZW50ID0gY2xpZW50OwotICAgIGluaXRpYWxpemVRdWlj
a1RpbWUoKTsKLX0KLQotUVRNb3ZpZVdpbjo6flFUTW92aWVXaW4oKQotewotICAgIGRlbGV0ZSBt
X3ByaXZhdGU7Ci19Ci0KLXZvaWQgUVRNb3ZpZVdpbjo6cGxheSgpCit2b2lkIFFUTW92aWVXaW5Q
cml2YXRlOjptb3ZpZUVuZGVkKFFUTW92aWUqKQogewotICAgIG1fcHJpdmF0ZS0+bV90aW1lVG9S
ZXN0b3JlID0gLTEuMGY7Ci0KLSAgICBpZiAobV9wcml2YXRlLT5tX21vdmllQ29udHJvbGxlcikK
LSAgICAgICAgTUNEb0FjdGlvbihtX3ByaXZhdGUtPm1fbW92aWVDb250cm9sbGVyLCBtY0FjdGlv
blByZXJvbGxBbmRQbGF5LCAodm9pZCAqKUdldE1vdmllUHJlZmVycmVkUmF0ZShtX3ByaXZhdGUt
Pm1fbW92aWUpKTsKLSAgICBlbHNlCi0gICAgICAgIFN0YXJ0TW92aWUobV9wcml2YXRlLT5tX21v
dmllKTsKLSAgICBtX3ByaXZhdGUtPnN0YXJ0VGFzaygpOworICAgIC8vIERvIG5vdGhpbmcKIH0K
IAotdm9pZCBRVE1vdmllV2luOjpwYXVzZSgpCit2b2lkIFFUTW92aWVXaW5Qcml2YXRlOjptb3Zp
ZUxvYWRTdGF0ZUNoYW5nZWQoUVRNb3ZpZSogbW92aWUpCiB7Ci0gICAgbV9wcml2YXRlLT5tX3Rp
bWVUb1Jlc3RvcmUgPSAtMS4wZjsKKyAgICBsb25nIGxvYWRTdGF0ZSA9IEdldE1vdmllTG9hZFN0
YXRlKG1vdmllLT5nZXRNb3ZpZUhhbmRsZSgpKTsKKyAgICBpZiAobG9hZFN0YXRlICE9IG1fbG9h
ZFN0YXRlKSB7CiAKLSAgICBpZiAobV9wcml2YXRlLT5tX21vdmllQ29udHJvbGxlcikKLSAgICAg
ICAgTUNEb0FjdGlvbihtX3ByaXZhdGUtPm1fbW92aWVDb250cm9sbGVyLCBtY0FjdGlvblBsYXks
IDApOwotICAgIGVsc2UKLSAgICAgICAgU3RvcE1vdmllKG1fcHJpdmF0ZS0+bV9tb3ZpZSk7Ci0g
ICAgdXBkYXRlVGFza1RpbWVyKCk7Ci19CisgICAgICAgIC8vIHdlIG9ubHkgbmVlZCB0byBlcmFz
ZSB0aGUgbW92aWUgZ3dvcmxkIHdoZW4gdGhlIGxvYWQgc3RhdGUgY2hhbmdlcyB0byBsb2FkZWQg
d2hpbGUgaXQKKyAgICAgICAgLy8gIGlzIHZpc2libGUgYXMgdGhlIGd3b3JsZCBpcyBkZXN0cm95
ZWQvY3JlYXRlZCB3aGVuIHZpc2liaWxpdHkgY2hhbmdlcworICAgICAgICBib29sIG1vdmllTmV3
bHlQbGF5YWJsZSA9IGxvYWRTdGF0ZSA+PSBRVE1vdmllTG9hZFN0YXRlTG9hZGVkICYmIG1fbG9h
ZFN0YXRlIDwgUVRNb3ZpZUxvYWRTdGF0ZUxvYWRlZDsKKyAgICAgICAgbV9sb2FkU3RhdGUgPSBs
b2FkU3RhdGU7CiAKLWZsb2F0IFFUTW92aWVXaW46OnJhdGUoKSBjb25zdAotewotICAgIGlmICgh
bV9wcml2YXRlLT5tX21vdmllKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gRml4ZWRU
b0Zsb2F0KEdldE1vdmllUmF0ZShtX3ByaXZhdGUtPm1fbW92aWUpKTsKLX0KLQotdm9pZCBRVE1v
dmllV2luOjpzZXRSYXRlKGZsb2F0IHJhdGUpCi17Ci0gICAgaWYgKCFtX3ByaXZhdGUtPm1fbW92
aWUpCi0gICAgICAgIHJldHVybjsgICAgCi0gICAgbV9wcml2YXRlLT5tX3RpbWVUb1Jlc3RvcmUg
PSAtMS4wZjsKLSAgICAKLSAgICBpZiAobV9wcml2YXRlLT5tX21vdmllQ29udHJvbGxlcikKLSAg
ICAgICAgTUNEb0FjdGlvbihtX3ByaXZhdGUtPm1fbW92aWVDb250cm9sbGVyLCBtY0FjdGlvblBy
ZXJvbGxBbmRQbGF5LCAodm9pZCAqKUZsb2F0VG9GaXhlZChyYXRlKSk7Ci0gICAgZWxzZQotICAg
ICAgICBTZXRNb3ZpZVJhdGUobV9wcml2YXRlLT5tX21vdmllLCBGbG9hdFRvRml4ZWQocmF0ZSkp
OwotICAgIHVwZGF0ZVRhc2tUaW1lcigpOwotfQotCi1mbG9hdCBRVE1vdmllV2luOjpkdXJhdGlv
bigpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3ByaXZhdGUtPm1fbW92aWUpCi0gICAgICAgIHJldHVy
biAwOwotICAgIFRpbWVWYWx1ZSB2YWwgPSBHZXRNb3ZpZUR1cmF0aW9uKG1fcHJpdmF0ZS0+bV9t
b3ZpZSk7Ci0gICAgVGltZVNjYWxlIHNjYWxlID0gR2V0TW92aWVUaW1lU2NhbGUobV9wcml2YXRl
LT5tX21vdmllKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZhbCkgLyBzY2FsZTsK
LX0KLQotZmxvYXQgUVRNb3ZpZVdpbjo6Y3VycmVudFRpbWUoKSBjb25zdAotewotICAgIGlmICgh
bV9wcml2YXRlLT5tX21vdmllKQotICAgICAgICByZXR1cm4gMDsKLSAgICBUaW1lVmFsdWUgdmFs
ID0gR2V0TW92aWVUaW1lKG1fcHJpdmF0ZS0+bV9tb3ZpZSwgMCk7Ci0gICAgVGltZVNjYWxlIHNj
YWxlID0gR2V0TW92aWVUaW1lU2NhbGUobV9wcml2YXRlLT5tX21vdmllKTsKLSAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KHZhbCkgLyBzY2FsZTsKLX0KLQotdm9pZCBRVE1vdmllV2luOjpz
ZXRDdXJyZW50VGltZShmbG9hdCB0aW1lKSBjb25zdAotewotICAgIGlmICghbV9wcml2YXRlLT5t
X21vdmllKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3ByaXZhdGUtPm1fdGltZVRvUmVzdG9y
ZSA9IC0xLjBmOwotICAgIAotICAgIG1fcHJpdmF0ZS0+bV9zZWVraW5nID0gdHJ1ZTsKLSAgICBU
aW1lU2NhbGUgc2NhbGUgPSBHZXRNb3ZpZVRpbWVTY2FsZShtX3ByaXZhdGUtPm1fbW92aWUpOwot
ICAgIGlmIChtX3ByaXZhdGUtPm1fbW92aWVDb250cm9sbGVyKXsKLSAgICAgICAgUVRSZXN0YXJ0
QXRUaW1lUmVjb3JkIHJlc3RhcnQgPSB7IHRpbWUgKiBzY2FsZSAsIDAgfTsKLSAgICAgICAgTUNE
b0FjdGlvbihtX3ByaXZhdGUtPm1fbW92aWVDb250cm9sbGVyLCBtY0FjdGlvblJlc3RhcnRBdFRp
bWUsICh2b2lkICopJnJlc3RhcnQpOwotICAgIH0gZWxzZQotICAgICAgICBTZXRNb3ZpZVRpbWVW
YWx1ZShtX3ByaXZhdGUtPm1fbW92aWUsIFRpbWVWYWx1ZSh0aW1lICogc2NhbGUpKTsKLSAgICB1
cGRhdGVUYXNrVGltZXIoKTsKLX0KLQotdm9pZCBRVE1vdmllV2luOjpzZXRWb2x1bWUoZmxvYXQg
dm9sdW1lKQotewotICAgIGlmICghbV9wcml2YXRlLT5tX21vdmllKQotICAgICAgICByZXR1cm47
Ci0gICAgU2V0TW92aWVWb2x1bWUobV9wcml2YXRlLT5tX21vdmllLCBzdGF0aWNfY2FzdDxzaG9y
dD4odm9sdW1lICogMjU2KSk7Ci19Ci0KLXZvaWQgUVRNb3ZpZVdpbjo6c2V0UHJlc2VydmVzUGl0
Y2goYm9vbCBwcmVzZXJ2ZXNQaXRjaCkKLXsKLSAgICBpZiAoIW1fcHJpdmF0ZS0+bV9tb3ZpZSB8
fCAhbV9wcml2YXRlLT5tX2N1cnJlbnRVUkwpCi0gICAgICAgIHJldHVybjsKLQotICAgIE9TRXJy
IGVycm9yOwotICAgIGJvb2wgcHJvcCA9IGZhbHNlOwotCi0gICAgZXJyb3IgPSBRVEdldE1vdmll
UHJvcGVydHkobV9wcml2YXRlLT5tX21vdmllLCBrUVRQcm9wZXJ0eUNsYXNzX0F1ZGlvLCBrUVRB
dWRpb1Byb3BlcnR5SURfUmF0ZUNoYW5nZXNQcmVzZXJ2ZVBpdGNoLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNpemVvZihrUVRBdWRpb1Byb3BlcnR5SURfUmF0ZUNoYW5nZXNQcmVz
ZXJ2ZVBpdGNoKSwgc3RhdGljX2Nhc3Q8UVRQcm9wZXJ0eVZhbHVlUHRyPigmcHJvcCksIDApOwot
Ci0gICAgaWYgKGVycm9yIHx8IHByb3AgPT0gcHJlc2VydmVzUGl0Y2gpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fcHJpdmF0ZS0+bV90aW1lVG9SZXN0b3JlID0gY3VycmVudFRpbWUoKTsKLSAg
ICBtX3ByaXZhdGUtPm1fcmF0ZVRvUmVzdG9yZSA9IHJhdGUoKTsKLSAgICBsb2FkKG1fcHJpdmF0
ZS0+bV9jdXJyZW50VVJMLCBwcmVzZXJ2ZXNQaXRjaCk7Ci19Ci0KLXVuc2lnbmVkIFFUTW92aWVX
aW46OmRhdGFTaXplKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fcHJpdmF0ZS0+bV9tb3ZpZSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIEdldE1vdmllRGF0YVNpemUobV9wcml2YXRlLT5t
X21vdmllLCAwLCBHZXRNb3ZpZUR1cmF0aW9uKG1fcHJpdmF0ZS0+bV9tb3ZpZSkpOworICAgICAg
ICBpZiAobW92aWVOZXdseVBsYXlhYmxlKSB7CisgICAgICAgICAgICBjYWNoZU1vdmllU2NhbGUo
KTsKKyAgICAgICAgICAgIHVwZGF0ZU1vdmllU2l6ZSgpOworICAgICAgICAgICAgaWYgKG1fdmlz
aWJsZSkKKyAgICAgICAgICAgICAgICBjbGVhckdXb3JsZCgpOworICAgICAgICB9CisgICAgfQog
fQogCi1mbG9hdCBRVE1vdmllV2luOjptYXhUaW1lTG9hZGVkKCkgY29uc3QKK3ZvaWQgUVRNb3Zp
ZVdpblByaXZhdGU6Om1vdmllVGltZUNoYW5nZWQoUVRNb3ZpZSopCiB7Ci0gICAgaWYgKCFtX3By
aXZhdGUtPm1fbW92aWUpCi0gICAgICAgIHJldHVybiAwOwotICAgIFRpbWVWYWx1ZSB2YWw7Ci0g
ICAgR2V0TWF4TG9hZGVkVGltZUluTW92aWUobV9wcml2YXRlLT5tX21vdmllLCAmdmFsKTsKLSAg
ICBUaW1lU2NhbGUgc2NhbGUgPSBHZXRNb3ZpZVRpbWVTY2FsZShtX3ByaXZhdGUtPm1fbW92aWUp
OwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4odmFsKSAvIHNjYWxlOworICAgIC8vIERv
IG5vdGhpbmcKIH0KIAotbG9uZyBRVE1vdmllV2luOjpsb2FkU3RhdGUoKSBjb25zdAorUVRNb3Zp
ZVdpbjo6UVRNb3ZpZVdpbihRVE1vdmllV2luQ2xpZW50KiBjbGllbnQpCisgICAgOiBtX3ByaXZh
dGUobmV3IFFUTW92aWVXaW5Qcml2YXRlKHRoaXMpKQogewotICAgIHJldHVybiBtX3ByaXZhdGUt
Pm1fbG9hZFN0YXRlOworICAgIG1fcHJpdmF0ZS0+bV9jbGllbnQgPSBjbGllbnQ7CiB9CiAKLXZv
aWQgUVRNb3ZpZVdpbjo6Z2V0TmF0dXJhbFNpemUoaW50JiB3aWR0aCwgaW50JiBoZWlnaHQpCitR
VE1vdmllV2luOjp+UVRNb3ZpZVdpbigpCiB7Ci0gICAgUmVjdCByZWN0ID0geyAwLCB9OwotCi0g
ICAgaWYgKG1fcHJpdmF0ZS0+bV9tb3ZpZSkKLSAgICAgICAgR2V0TW92aWVOYXR1cmFsQm91bmRz
UmVjdChtX3ByaXZhdGUtPm1fbW92aWUsICZyZWN0KTsKLSAgICB3aWR0aCA9IChyZWN0LnJpZ2h0
IC0gcmVjdC5sZWZ0KSAqIG1fcHJpdmF0ZS0+bV93aWR0aFNjYWxlRmFjdG9yOwotICAgIGhlaWdo
dCA9IChyZWN0LmJvdHRvbSAtIHJlY3QudG9wKSAqIG1fcHJpdmF0ZS0+bV9oZWlnaHRTY2FsZUZh
Y3RvcjsKKyAgICBkZWxldGUgbV9wcml2YXRlOwogfQogCiB2b2lkIFFUTW92aWVXaW46OnNldFNp
emUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogewogICAgIG1fcHJpdmF0ZS0+c2V0U2l6ZSh3aWR0
aCwgaGVpZ2h0KTsKLSAgICB1cGRhdGVUYXNrVGltZXIoMCk7CisgICAgUVRNb3ZpZVRhc2s6OnNo
YXJlZFRhc2soKS0+dXBkYXRlVGFza1RpbWVyKCk7CiB9CiAKIHZvaWQgUVRNb3ZpZVdpbjo6c2V0
VmlzaWJsZShib29sIGIpCkBAIC02NTYsNDQ2ICszOTAsMTQgQEAgdm9pZCBRVE1vdmllV2luOjpw
YWludChIREMgaGRjLCBpbnQgeCwgaQogICAgICAgICAgMCwgMCwgbV9wcml2YXRlLT5tX3dpZHRo
LCBtX3ByaXZhdGUtPm1faGVpZ2h0LCBibGVuZEZ1bmN0aW9uKTsKIH0KIAotdm9pZCBRVE1vdmll
V2luOjpsb2FkKGNvbnN0IFVDaGFyKiB1cmwsIGludCBsZW4sIGJvb2wgcHJlc2VydmVzUGl0Y2gp
Ci17Ci0gICAgQ0ZTdHJpbmdSZWYgdXJsU3RyaW5nUmVmID0gQ0ZTdHJpbmdDcmVhdGVXaXRoQ2hh
cmFjdGVycyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCByZWludGVycHJldF9jYXN0PGNvbnN0IFVuaUNo
YXIqPih1cmwpLCBsZW4pOwotICAgIENGVVJMUmVmIGNmVVJMID0gQ0ZVUkxDcmVhdGVXaXRoU3Ry
aW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIHVybFN0cmluZ1JlZiwgMCk7Ci0KLSAgICBsb2FkKGNm
VVJMLCBwcmVzZXJ2ZXNQaXRjaCk7Ci0KLSAgICBDRlJlbGVhc2UoY2ZVUkwpOwotICAgIENGUmVs
ZWFzZSh1cmxTdHJpbmdSZWYpOwotfQotCi12b2lkIFFUTW92aWVXaW46OmxvYWQoQ0ZVUkxSZWYg
dXJsLCBib29sIHByZXNlcnZlc1BpdGNoKQotewotICAgIGlmICghdXJsKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAobV9wcml2YXRlLT5tX21vdmllKSB7Ci0gICAgICAgIG1fcHJpdmF0ZS0+
ZW5kVGFzaygpOwotICAgICAgICBpZiAobV9wcml2YXRlLT5tX2dXb3JsZCkKLSAgICAgICAgICAg
IG1fcHJpdmF0ZS0+ZGVsZXRlR1dvcmxkKCk7Ci0gICAgICAgIGlmIChtX3ByaXZhdGUtPm1fbW92
aWVDb250cm9sbGVyKQotICAgICAgICAgICAgRGlzcG9zZU1vdmllQ29udHJvbGxlcihtX3ByaXZh
dGUtPm1fbW92aWVDb250cm9sbGVyKTsKLSAgICAgICAgbV9wcml2YXRlLT5tX21vdmllQ29udHJv
bGxlciA9IDA7Ci0gICAgICAgIERpc3Bvc2VNb3ZpZShtX3ByaXZhdGUtPm1fbW92aWUpOwotICAg
ICAgICBtX3ByaXZhdGUtPm1fbW92aWUgPSAwOwotICAgICAgICBtX3ByaXZhdGUtPm1fbG9hZFN0
YXRlID0gMDsKLSAgICB9ICAKLQotICAgIC8vIERlZmluZSBhIHByb3BlcnR5IGFycmF5IGZvciBO
ZXdNb3ZpZUZyb21Qcm9wZXJ0aWVzLiA4IHNob3VsZCBiZSBlbm91Z2ggZm9yIG91ciBuZWVkcy4g
Ci0gICAgUVROZXdNb3ZpZVByb3BlcnR5RWxlbWVudCBtb3ZpZVByb3BzWzhdOyAKLSAgICBJdGVt
Q291bnQgbW92aWVQcm9wQ291bnQgPSAwOyAKLQotICAgIGJvb2wgYm9vbFRydWUgPSB0cnVlOwot
ICAgIAotICAgIC8vIERpc2FibGUgc3RyZWFtaW5nIHN1cHBvcnQgZm9yIG5vdy4gCi0gICAgQ0ZT
dHJpbmdSZWYgc2NoZW1lID0gQ0ZVUkxDb3B5U2NoZW1lKHVybCk7Ci0gICAgYm9vbCBpc1JUU1Ag
PSBDRlN0cmluZ0hhc1ByZWZpeChzY2hlbWUsIENGU1RSKCJydHNwOiIpKTsKLSAgICBDRlJlbGVh
c2Uoc2NoZW1lKTsKLQotICAgIGlmIChpc1JUU1ApIHsKLSAgICAgICAgbV9wcml2YXRlLT5tX2xv
YWRFcnJvciA9IG5vTW92aWVGb3VuZDsKLSAgICAgICAgZ290byBlbmQ7Ci0gICAgfQotCi0gICAg
aWYgKG1fcHJpdmF0ZS0+bV9jdXJyZW50VVJMKSB7Ci0gICAgICAgIGlmIChtX3ByaXZhdGUtPm1f
Y3VycmVudFVSTCAhPSB1cmwpIHsKLSAgICAgICAgICAgIENGUmVsZWFzZShtX3ByaXZhdGUtPm1f
Y3VycmVudFVSTCk7Ci0gICAgICAgICAgICBtX3ByaXZhdGUtPm1fY3VycmVudFVSTCA9IHVybDsK
LSAgICAgICAgICAgIENGUmV0YWluKHVybCk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAg
ICAgICBtX3ByaXZhdGUtPm1fY3VycmVudFVSTCA9IHVybDsKLSAgICAgICAgQ0ZSZXRhaW4odXJs
KTsKLSAgICB9Ci0KLSAgICAvLyBBZGQgdGhlIG1vdmllIGRhdGEgbG9jYXRpb24gdG8gdGhlIHBy
b3BlcnR5IGFycmF5IAotICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BDbGFzcyA9
IGtRVFByb3BlcnR5Q2xhc3NfRGF0YUxvY2F0aW9uOyAKLSAgICBtb3ZpZVByb3BzW21vdmllUHJv
cENvdW50XS5wcm9wSUQgPSBrUVREYXRhTG9jYXRpb25Qcm9wZXJ0eUlEX0NGVVJMOyAKLSAgICBt
b3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wVmFsdWVTaXplID0gc2l6ZW9mKG1fcHJpdmF0
ZS0+bV9jdXJyZW50VVJMKTsgCi0gICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcFZh
bHVlQWRkcmVzcyA9ICYobV9wcml2YXRlLT5tX2N1cnJlbnRVUkwpOyAKLSAgICBtb3ZpZVByb3Bz
W21vdmllUHJvcENvdW50XS5wcm9wU3RhdHVzID0gMDsgCi0gICAgbW92aWVQcm9wQ291bnQrKzsg
Ci0KLSAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wQ2xhc3MgPSBrUVRQcm9wZXJ0
eUNsYXNzX01vdmllSW5zdGFudGlhdGlvbjsgCi0gICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3Vu
dF0ucHJvcElEID0ga1FUTW92aWVJbnN0YW50aWF0aW9uUHJvcGVydHlJRF9Eb250QXNrVW5yZXNv
bHZlZERhdGFSZWZzOyAKLSAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wVmFsdWVT
aXplID0gc2l6ZW9mKGJvb2xUcnVlKTsgCi0gICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0u
cHJvcFZhbHVlQWRkcmVzcyA9ICZib29sVHJ1ZTsgCi0gICAgbW92aWVQcm9wc1ttb3ZpZVByb3BD
b3VudF0ucHJvcFN0YXR1cyA9IDA7IAotICAgIG1vdmllUHJvcENvdW50Kys7IAotCi0gICAgbW92
aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcENsYXNzID0ga1FUUHJvcGVydHlDbGFzc19Nb3Zp
ZUluc3RhbnRpYXRpb247IAotICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BJRCA9
IGtRVE1vdmllSW5zdGFudGlhdGlvblByb3BlcnR5SURfQXN5bmNPSzsgCi0gICAgbW92aWVQcm9w
c1ttb3ZpZVByb3BDb3VudF0ucHJvcFZhbHVlU2l6ZSA9IHNpemVvZihib29sVHJ1ZSk7IAotICAg
IG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BWYWx1ZUFkZHJlc3MgPSAmYm9vbFRydWU7
IAotICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BTdGF0dXMgPSAwOyAKLSAgICBt
b3ZpZVByb3BDb3VudCsrOyAKLQotICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BD
bGFzcyA9IGtRVFByb3BlcnR5Q2xhc3NfTmV3TW92aWVQcm9wZXJ0eTsgCi0gICAgbW92aWVQcm9w
c1ttb3ZpZVByb3BDb3VudF0ucHJvcElEID0ga1FUTmV3TW92aWVQcm9wZXJ0eUlEX0FjdGl2ZTsg
Ci0gICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcFZhbHVlU2l6ZSA9IHNpemVvZihi
b29sVHJ1ZSk7IAotICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BWYWx1ZUFkZHJl
c3MgPSAmYm9vbFRydWU7IAotICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BTdGF0
dXMgPSAwOyAKLSAgICBtb3ZpZVByb3BDb3VudCsrOyAKLQotICAgIG1vdmllUHJvcHNbbW92aWVQ
cm9wQ291bnRdLnByb3BDbGFzcyA9IGtRVFByb3BlcnR5Q2xhc3NfTmV3TW92aWVQcm9wZXJ0eTsg
Ci0gICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcElEID0ga1FUTmV3TW92aWVQcm9w
ZXJ0eUlEX0RvbnRJbnRlcmFjdFdpdGhVc2VyOyAKLSAgICBtb3ZpZVByb3BzW21vdmllUHJvcENv
dW50XS5wcm9wVmFsdWVTaXplID0gc2l6ZW9mKGJvb2xUcnVlKTsgCi0gICAgbW92aWVQcm9wc1tt
b3ZpZVByb3BDb3VudF0ucHJvcFZhbHVlQWRkcmVzcyA9ICZib29sVHJ1ZTsgCi0gICAgbW92aWVQ
cm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcFN0YXR1cyA9IDA7IAotICAgIG1vdmllUHJvcENvdW50
Kys7IAotCi0gICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcENsYXNzID0ga1FUUHJv
cGVydHlDbGFzc19Nb3ZpZUluc3RhbnRpYXRpb247Ci0gICAgbW92aWVQcm9wc1ttb3ZpZVByb3BD
b3VudF0ucHJvcElEID0gJyF1cmwnOwotICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnBy
b3BWYWx1ZVNpemUgPSBzaXplb2YoYm9vbFRydWUpOyAKLSAgICBtb3ZpZVByb3BzW21vdmllUHJv
cENvdW50XS5wcm9wVmFsdWVBZGRyZXNzID0gJmJvb2xUcnVlOyAKLSAgICBtb3ZpZVByb3BzW21v
dmllUHJvcENvdW50XS5wcm9wU3RhdHVzID0gMDsgCi0gICAgbW92aWVQcm9wQ291bnQrKzsgCi0K
LSAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wQ2xhc3MgPSBrUVRQcm9wZXJ0eUNs
YXNzX01vdmllSW5zdGFudGlhdGlvbjsgCi0gICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0u
cHJvcElEID0gJ3NpdGUnOwotICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BWYWx1
ZVNpemUgPSBzaXplb2YoYm9vbFRydWUpOyAKLSAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50
XS5wcm9wVmFsdWVBZGRyZXNzID0gJmJvb2xUcnVlOyAKLSAgICBtb3ZpZVByb3BzW21vdmllUHJv
cENvdW50XS5wcm9wU3RhdHVzID0gMDsgCi0gICAgbW92aWVQcm9wQ291bnQrKzsKLQotICAgIG1v
dmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BDbGFzcyA9IGtRVFByb3BlcnR5Q2xhc3NfQXVk
aW87IAotICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BJRCA9IGtRVEF1ZGlvUHJv
cGVydHlJRF9SYXRlQ2hhbmdlc1ByZXNlcnZlUGl0Y2g7Ci0gICAgbW92aWVQcm9wc1ttb3ZpZVBy
b3BDb3VudF0ucHJvcFZhbHVlU2l6ZSA9IHNpemVvZihwcmVzZXJ2ZXNQaXRjaCk7IAotICAgIG1v
dmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BWYWx1ZUFkZHJlc3MgPSAmcHJlc2VydmVzUGl0
Y2g7IAotICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BTdGF0dXMgPSAwOyAKLSAg
ICBtb3ZpZVByb3BDb3VudCsrOyAKLQotICAgIEFTU0VSVChtb3ZpZVByb3BDb3VudCA8PSBzaXpl
b2YobW92aWVQcm9wcykvc2l6ZW9mKG1vdmllUHJvcHNbMF0pKTsKLSAgICBtX3ByaXZhdGUtPm1f
bG9hZEVycm9yID0gTmV3TW92aWVGcm9tUHJvcGVydGllcyhtb3ZpZVByb3BDb3VudCwgbW92aWVQ
cm9wcywgMCwgMCwgJm1fcHJpdmF0ZS0+bV9tb3ZpZSk7Ci0KLWVuZDoKLSAgICBtX3ByaXZhdGUt
PnN0YXJ0VGFzaygpOwotICAgIC8vIGdldCB0aGUgbG9hZCBmYWlsIGNhbGxiYWNrIHF1aWNrbHkg
Ci0gICAgaWYgKG1fcHJpdmF0ZS0+bV9sb2FkRXJyb3IpCi0gICAgICAgIHVwZGF0ZVRhc2tUaW1l
cigwKTsKLSAgICBlbHNlIHsKLSAgICAgICAgT1NUeXBlIG1vZGUgPSBrUVRBcGVydHVyZU1vZGVf
Q2xlYW5BcGVydHVyZTsKLQotICAgICAgICAvLyBTZXQgdGhlIGFwZXJ0dXJlIG1vZGUgcHJvcGVy
dHkgb24gYSBtb3ZpZSB0byBzaWduYWwgdGhhdCB3ZSB3YW50IGFzcGVjdCByYXRpbwotICAgICAg
ICAvLyBhbmQgY2xlYW4gYXBlcnR1cmUgZGltZW5zaW9ucy4gRG9uJ3Qgd29ycnkgYWJvdXQgZXJy
b3JzLCB3ZSBjYW4ndCBkbyBhbnl0aGluZyBpZgotICAgICAgICAvLyB0aGUgaW5zdGFsbGVkIHZl
cnNpb24gb2YgUVQgZG9lc24ndCBzdXBwb3J0IGl0IGFuZCBpdCBpc24ndCBzZXJpb3VzIGVub3Vn
aCB0byAKLSAgICAgICAgLy8gd2FycmFudCBmYWlsaW5nLgotICAgICAgICBRVFNldE1vdmllUHJv
cGVydHkobV9wcml2YXRlLT5tX21vdmllLCBrUVRQcm9wZXJ0eUNsYXNzX1Zpc3VhbCwga1FUVmlz
dWFsUHJvcGVydHlJRF9BcGVydHVyZU1vZGUsIHNpemVvZihtb2RlKSwgJm1vZGUpOwotICAgICAg
ICBtX3ByaXZhdGUtPnJlZ2lzdGVyRHJhd2luZ0NhbGxiYWNrKCk7Ci0gICAgfQotfQotCi12b2lk
IFFUTW92aWVXaW46OmRpc2FibGVVbnN1cHBvcnRlZFRyYWNrcyh1bnNpZ25lZCYgZW5hYmxlZFRy
YWNrQ291bnQsIHVuc2lnbmVkJiB0b3RhbFRyYWNrQ291bnQpCi17Ci0gICAgaWYgKCFtX3ByaXZh
dGUtPm1fbW92aWUpIHsKLSAgICAgICAgdG90YWxUcmFja0NvdW50ID0gMDsKLSAgICAgICAgZW5h
YmxlZFRyYWNrQ291bnQgPSAwOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc3RhdGlj
IEhhc2hTZXQ8T1NUeXBlPiogYWxsb3dlZFRyYWNrVHlwZXMgPSAwOwotICAgIGlmICghYWxsb3dl
ZFRyYWNrVHlwZXMpIHsKLSAgICAgICAgYWxsb3dlZFRyYWNrVHlwZXMgPSBuZXcgSGFzaFNldDxP
U1R5cGU+OwotICAgICAgICBhbGxvd2VkVHJhY2tUeXBlcy0+YWRkKFZpZGVvTWVkaWFUeXBlKTsK
LSAgICAgICAgYWxsb3dlZFRyYWNrVHlwZXMtPmFkZChTb3VuZE1lZGlhVHlwZSk7Ci0gICAgICAg
IGFsbG93ZWRUcmFja1R5cGVzLT5hZGQoVGV4dE1lZGlhVHlwZSk7Ci0gICAgICAgIGFsbG93ZWRU
cmFja1R5cGVzLT5hZGQoQmFzZU1lZGlhVHlwZSk7Ci0gICAgICAgIGFsbG93ZWRUcmFja1R5cGVz
LT5hZGQoY2xvc2VkQ2FwdGlvblRyYWNrVHlwZSk7Ci0gICAgICAgIGFsbG93ZWRUcmFja1R5cGVz
LT5hZGQoc3ViVGl0bGVUcmFja1R5cGUpOwotICAgICAgICBhbGxvd2VkVHJhY2tUeXBlcy0+YWRk
KG1wZWc0T2JqZWN0RGVzY3JpcHRpb25UcmFja1R5cGUpOwotICAgICAgICBhbGxvd2VkVHJhY2tU
eXBlcy0+YWRkKG1wZWc0U2NlbmVEZXNjcmlwdGlvblRyYWNrVHlwZSk7Ci0gICAgICAgIGFsbG93
ZWRUcmFja1R5cGVzLT5hZGQoVGltZUNvZGVNZWRpYVR5cGUpOwotICAgICAgICBhbGxvd2VkVHJh
Y2tUeXBlcy0+YWRkKFRpbWVDb2RlNjRNZWRpYVR5cGUpOwotICAgIH0KLQotICAgIGxvbmcgdHJh
Y2tDb3VudCA9IEdldE1vdmllVHJhY2tDb3VudChtX3ByaXZhdGUtPm1fbW92aWUpOwotICAgIGVu
YWJsZWRUcmFja0NvdW50ID0gdHJhY2tDb3VudDsKLSAgICB0b3RhbFRyYWNrQ291bnQgPSB0cmFj
a0NvdW50OwotCi0gICAgLy8gVHJhY2sgaW5kZXhlcyBhcmUgMS1iYXNlZC4geXVjay4gVGhlc2Ug
dGhpbmdzIG11c3QgZGVzY2VuZCBmcm9tIG9sZC0KLSAgICAvLyBzY2hvb2wgbWFjIHJlc291cmNl
cyBvciBzb21ldGhpbmcuCi0gICAgZm9yIChsb25nIHRyYWNrSW5kZXggPSAxOyB0cmFja0luZGV4
IDw9IHRyYWNrQ291bnQ7IHRyYWNrSW5kZXgrKykgewotICAgICAgICAvLyBHcmFiIHRoZSB0cmFj
ayBhdCB0aGUgY3VycmVudCBpbmRleC4gSWYgdGhlcmUgaXNuJ3Qgb25lIHRoZXJlLCB0aGVuCi0g
ICAgICAgIC8vIHdlIGNhbiBtb3ZlIG9udG8gdGhlIG5leHQgb25lLgotICAgICAgICBUcmFjayBj
dXJyZW50VHJhY2sgPSBHZXRNb3ZpZUluZFRyYWNrKG1fcHJpdmF0ZS0+bV9tb3ZpZSwgdHJhY2tJ
bmRleCk7Ci0gICAgICAgIGlmICghY3VycmVudFRyYWNrKQotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIAotICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIHRyYWNrIGlzIGRpc2Fi
bGVkIGFscmVhZHksIHdlIHNob3VsZCBtb3ZlIGFsb25nLgotICAgICAgICAvLyBXZSBkb24ndCBu
ZWVkIHRvIHJlLWRpc2FibGUgaXQuCi0gICAgICAgIGlmICghR2V0VHJhY2tFbmFibGVkKGN1cnJl
bnRUcmFjaykpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAvLyBHcmFiIHRoZSB0
cmFjaydzIG1lZGlhLiBXZSdyZSBnb2luZyB0byBjaGVjayB0byBzZWUgaWYgd2UgbmVlZCB0bwot
ICAgICAgICAvLyBkaXNhYmxlIHRoZSB0cmFja3MuIFRoZXkgY291bGQgYmUgdW5zdXBwb3J0ZWQu
Ci0gICAgICAgIE1lZGlhIHRyYWNrTWVkaWEgPSBHZXRUcmFja01lZGlhKGN1cnJlbnRUcmFjayk7
Ci0gICAgICAgIGlmICghdHJhY2tNZWRpYSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAKLSAgICAgICAgLy8gR3JhYiB0aGUgbWVkaWEgdHlwZSBmb3IgdGhpcyB0cmFjay4gTWFrZSBz
dXJlIHRoYXQgd2UgZG9uJ3QKLSAgICAgICAgLy8gZ2V0IGFuIGVycm9yIGluIGRvaW5nIHNvLiBJ
ZiB3ZSBkbywgdGhlbiBzb21ldGhpbmcgcmVhbGx5IGZ1bmt5IGlzCi0gICAgICAgIC8vIHdyb25n
LgotICAgICAgICBPU1R5cGUgbWVkaWFUeXBlOwotICAgICAgICBHZXRNZWRpYUhhbmRsZXJEZXNj
cmlwdGlvbih0cmFja01lZGlhLCAmbWVkaWFUeXBlLCBuaWwsIG5pbCk7Ci0gICAgICAgIE9TRXJy
IG1lZGlhRXJyID0gR2V0TW92aWVzRXJyb3IoKTsgICAgCi0gICAgICAgIGlmIChtZWRpYUVyciAh
PSBub0VycikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAKLSAgICAgICAgaWYgKCFh
bGxvd2VkVHJhY2tUeXBlcy0+Y29udGFpbnMobWVkaWFUeXBlKSkgewotCi0gICAgICAgICAgICAv
LyBEaWZmZXJlbnQgbXBlZyB2YXJpYW50cyBpbXBvcnQgYXMgZGlmZmVyZW50IHRyYWNrIHR5cGVz
IHNvIGNoZWNrIGZvciB0aGUgIm1wZWcgCi0gICAgICAgICAgICAvLyBjaGFyYWN0ZXJpc3RpYyIg
aW5zdGVhZCBvZiBoYXJkIGNvZGluZyB0aGUgKGN1cnJlbnQpIGxpc3Qgb2YgbXBlZyBtZWRpYSB0
eXBlcy4KLSAgICAgICAgICAgIGlmIChHZXRNb3ZpZUluZFRyYWNrVHlwZShtX3ByaXZhdGUtPm1f
bW92aWUsIDEsICdtcGVnJywgbW92aWVUcmFja0NoYXJhY3RlcmlzdGljIHwgbW92aWVUcmFja0Vu
YWJsZWRPbmx5KSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgU2V0
VHJhY2tFbmFibGVkKGN1cnJlbnRUcmFjaywgZmFsc2UpOwotICAgICAgICAgICAgLS1lbmFibGVk
VHJhY2tDb3VudDsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gR3JhYiB0aGUgdHJh
Y2sgcmVmZXJlbmNlIGNvdW50IGZvciBjaGFwdGVycy4gVGhpcyB3aWxsIHRlbGwgdXMgaWYgaXQK
LSAgICAgICAgLy8gaGFzIGNoYXB0ZXIgdHJhY2tzIGluIGl0LiBJZiB0aGVyZSBhcmVuJ3QgYW55
IHJlZmVyZW5jZXMsIHRoZW4gd2UKLSAgICAgICAgLy8gY2FuIG1vdmUgb24gdGhlIG5leHQgdHJh
Y2suCi0gICAgICAgIGxvbmcgcmVmZXJlbmNlQ291bnQgPSBHZXRUcmFja1JlZmVyZW5jZUNvdW50
KGN1cnJlbnRUcmFjaywga1RyYWNrUmVmZXJlbmNlQ2hhcHRlckxpc3QpOwotICAgICAgICBpZiAo
cmVmZXJlbmNlQ291bnQgPD0gMCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAKLSAg
ICAgICAgbG9uZyByZWZlcmVuY2VJbmRleCA9IDA7ICAgICAgICAKLSAgICAgICAgd2hpbGUgKDEp
IHsKLSAgICAgICAgICAgIC8vIElmIHdlIGdldCBub3RoaW5nIGhlcmUsIHdlJ3ZlIG92ZXJzdGVw
cGVkIG91ciBib3VuZHMgYW5kIGNhbiBzdG9wCi0gICAgICAgICAgICAvLyBsb29raW5nLiBDaGFw
dGVyIGluZGljZXMgaGVyZSBhcmUgMS1iYXNlZCBhcyB3ZWxsIC0gaGVuY2UsIHRoZQotICAgICAg
ICAgICAgLy8gcHJlLWluY3JlbWVudC4KLSAgICAgICAgICAgIHJlZmVyZW5jZUluZGV4Kys7Ci0g
ICAgICAgICAgICBUcmFjayBjaGFwdGVyVHJhY2sgPSBHZXRUcmFja1JlZmVyZW5jZShjdXJyZW50
VHJhY2ssIGtUcmFja1JlZmVyZW5jZUNoYXB0ZXJMaXN0LCByZWZlcmVuY2VJbmRleCk7Ci0gICAg
ICAgICAgICBpZiAoIWNoYXB0ZXJUcmFjaykKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgLy8gVHJ5IHRvIGdyYWIgdGhlIG1lZGlhIGZvciB0aGUgdHJh
Y2suCi0gICAgICAgICAgICBNZWRpYSBjaGFwdGVyTWVkaWEgPSBHZXRUcmFja01lZGlhKGNoYXB0
ZXJUcmFjayk7Ci0gICAgICAgICAgICBpZiAoIWNoYXB0ZXJNZWRpYSkKLSAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgCi0gICAgICAgICAgICAvLyBHcmFiIHRoZSBtZWRpYSB0eXBl
IGZvciB0aGlzIHRyYWNrLiBNYWtlIHN1cmUgdGhhdCB3ZSBkb24ndAotICAgICAgICAgICAgLy8g
Z2V0IGFuIGVycm9yIGluIGRvaW5nIHNvLiBJZiB3ZSBkbywgdGhlbiBzb21ldGhpbmcgcmVhbGx5
Ci0gICAgICAgICAgICAvLyBmdW5reSBpcyB3cm9uZy4KLSAgICAgICAgICAgIE9TVHlwZSBtZWRp
YVR5cGU7Ci0gICAgICAgICAgICBHZXRNZWRpYUhhbmRsZXJEZXNjcmlwdGlvbihjaGFwdGVyTWVk
aWEsICZtZWRpYVR5cGUsIG5pbCwgbmlsKTsKLSAgICAgICAgICAgIE9TRXJyIG1lZGlhRXJyID0g
R2V0TW92aWVzRXJyb3IoKTsKLSAgICAgICAgICAgIGlmIChtZWRpYUVyciAhPSBub0VycikKLSAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gQ2hl
Y2sgdG8gc2VlIGlmIHRoZSB0cmFjayBpcyBhIHZpZGVvIHRyYWNrLiBXZSBkb24ndCBjYXJlIGFi
b3V0Ci0gICAgICAgICAgICAvLyBvdGhlciBub24tdmlkZW8gdHJhY2tzLgotICAgICAgICAgICAg
aWYgKG1lZGlhVHlwZSAhPSBWaWRlb01lZGlhVHlwZSkKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSB0cmFj
ayBpcyBhbHJlYWR5IGRpc2FibGVkLiBJZiBpdCBpcywgd2UKLSAgICAgICAgICAgIC8vIHNob3Vs
ZCBtb3ZlIGFsb25nLgotICAgICAgICAgICAgaWYgKCFHZXRUcmFja0VuYWJsZWQoY2hhcHRlclRy
YWNrKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgLy8gRGlzYWJsZWQgdGhlIGV2aWwsIGV2aWwgdHJhY2suCi0gICAgICAgICAgICBTZXRUcmFj
a0VuYWJsZWQoY2hhcHRlclRyYWNrLCBmYWxzZSk7Ci0gICAgICAgICAgICAtLWVuYWJsZWRUcmFj
a0NvdW50OwotICAgICAgICB9Ci0gICAgfQotfQotCiB2b2lkIFFUTW92aWVXaW46OnNldERpc2Fi
bGVkKGJvb2wgYikKIHsKLSAgICBtX2Rpc2FibGVkID0gYjsKKyAgICBtX3ByaXZhdGUtPm1fZGlz
YWJsZWQgPSBiOwogfQogCi0KLWJvb2wgUVRNb3ZpZVdpbjo6aGFzVmlkZW8oKSBjb25zdAorYm9v
bCBRVE1vdmllV2luOjppc0Rpc2FibGVkKCkgY29uc3QKIHsKLSAgICBpZiAoIW1fcHJpdmF0ZS0+
bV9tb3ZpZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiAoR2V0TW92aWVJbmRU
cmFja1R5cGUobV9wcml2YXRlLT5tX21vdmllLCAxLCBWaXN1YWxNZWRpYUNoYXJhY3RlcmlzdGlj
LCBtb3ZpZVRyYWNrQ2hhcmFjdGVyaXN0aWMgfCBtb3ZpZVRyYWNrRW5hYmxlZE9ubHkpKTsKLX0K
LQotYm9vbCBRVE1vdmllV2luOjpoYXNBdWRpbygpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3ByaXZh
dGUtPm1fbW92aWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gKEdldE1vdmll
SW5kVHJhY2tUeXBlKG1fcHJpdmF0ZS0+bV9tb3ZpZSwgMSwgQXVkaW9NZWRpYUNoYXJhY3Rlcmlz
dGljLCBtb3ZpZVRyYWNrQ2hhcmFjdGVyaXN0aWMgfCBtb3ZpZVRyYWNrRW5hYmxlZE9ubHkpKTsK
LX0KLQotCi1ib29sIFFUTW92aWVXaW46Omhhc0Nsb3NlZENhcHRpb25zKCkgY29uc3QgCi17Ci0g
ICAgaWYgKCFtX3ByaXZhdGUtPm1fbW92aWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBy
ZXR1cm4gR2V0TW92aWVJbmRUcmFja1R5cGUobV9wcml2YXRlLT5tX21vdmllLCAxLCBjbG9zZWRD
YXB0aW9uVHJhY2tUeXBlLCBtb3ZpZVRyYWNrTWVkaWFUeXBlKTsKLX0KLQotdm9pZCBRVE1vdmll
V2luOjpzZXRDbG9zZWRDYXB0aW9uc1Zpc2libGUoYm9vbCB2aXNpYmxlKQotewotICAgIGlmICgh
bV9wcml2YXRlLT5tX21vdmllKQotICAgICAgICByZXR1cm47Ci0KLSAgICBUcmFjayBjY1RyYWNr
ID0gR2V0TW92aWVJbmRUcmFja1R5cGUobV9wcml2YXRlLT5tX21vdmllLCAxLCBjbG9zZWRDYXB0
aW9uVHJhY2tUeXBlLCBtb3ZpZVRyYWNrTWVkaWFUeXBlKTsKLSAgICBpZiAoIWNjVHJhY2spCi0g
ICAgICAgIHJldHVybjsKLQotICAgIEJvb2xlYW4gZG9EaXNwbGF5ID0gdmlzaWJsZTsKLSAgICBR
VFNldFRyYWNrUHJvcGVydHkoY2NUcmFjaywgY2xvc2VkQ2FwdGlvblRyYWNrVHlwZSwgY2xvc2Vk
Q2FwdGlvbkRpc3BsYXlQcm9wZXJ0eUlELCBzaXplb2YoZG9EaXNwbGF5KSwgJmRvRGlzcGxheSk7
Ci19Ci0KLXBhc2NhbCBPU0VyciBtb3ZpZURyYXdpbmdDb21wbGV0ZVByb2MoTW92aWUgbW92aWUs
IGxvbmcgZGF0YSkKLXsKLSAgICBVcHBQYXJhbSBwYXJhbTsKLSAgICBwYXJhbS5sb25nVmFsdWUg
PSBkYXRhOwotICAgIFFUTW92aWVXaW5Qcml2YXRlKiBtcCA9IHN0YXRpY19jYXN0PFFUTW92aWVX
aW5Qcml2YXRlKj4ocGFyYW0ucHRyKTsKLSAgICBpZiAobXApCi0gICAgICAgIG1wLT5kcmF3aW5n
Q29tcGxldGUoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVN1
cHBvcnRlZFR5cGVzKCkgCi17Ci0gICAgaWYgKGdTdXBwb3J0ZWRUeXBlcykKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgZ1N1cHBvcnRlZFR5cGVzID0gbmV3IFZlY3RvcjxDRlN0cmluZ1JlZj47Ci0g
ICAgaWYgKHF1aWNrVGltZVZlcnNpb24gPCBtaW5pbXVtUXVpY2tUaW1lVmVyc2lvbikgewotICAg
ICAgICBMT0dfRVJST1IoIlF1aWNrVGltZSB2ZXJzaW9uICV4IGRldGVjdGVkLCBhdCBsZWFzdCAl
eCByZXF1aXJlZC4gUmV0dXJuaW5nIGVtcHR5IGxpc3Qgb2Ygc3VwcG9ydGVkIG1lZGlhIE1JTUUg
dHlwZXMuIiwgcXVpY2tUaW1lVmVyc2lvbiwgbWluaW11bVF1aWNrVGltZVZlcnNpb24pOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gUXVpY2tUaW1lIGRvZXNuJ3QgaGF2ZSBhbiBp
bXBvcnRlciBmb3IgdmlkZW8vcXVpY2t0aW1lLiBBZGQgaXQgbWFudWFsbHkuCi0gICAgZ1N1cHBv
cnRlZFR5cGVzLT5hcHBlbmQoQ0ZTVFIoInZpZGVvL3F1aWNrdGltZSIpKTsKLQotICAgIGZvciAo
aW50IGluZGV4ID0gMDsgaW5kZXggPCAyOyBpbmRleCsrKSB7Ci0gICAgICAgIENvbXBvbmVudERl
c2NyaXB0aW9uIGZpbmRDRDsKLQotICAgICAgICAvLyBsb29rIGF0IGFsbCBtb3ZpZSBpbXBvcnRl
cnMgdGhhdCBjYW4gaW1wb3J0IGluIHBsYWNlIGFuZCBhcmUgaW5zdGFsbGVkLiAKLSAgICAgICAg
ZmluZENELmNvbXBvbmVudFR5cGUgPSBNb3ZpZUltcG9ydFR5cGU7Ci0gICAgICAgIGZpbmRDRC5j
b21wb25lbnRTdWJUeXBlID0gMDsKLSAgICAgICAgZmluZENELmNvbXBvbmVudE1hbnVmYWN0dXJl
ciA9IDA7Ci0gICAgICAgIGZpbmRDRC5jb21wb25lbnRGbGFnc01hc2sgPSBjbXBJc01pc3Npbmcg
fCBtb3ZpZUltcG9ydFN1YlR5cGVJc0ZpbGVFeHRlbnNpb24gfCBjYW5Nb3ZpZUltcG9ydEluUGxh
Y2UgfCBkb250QXV0b0ZpbGVNb3ZpZUltcG9ydDsKLQotICAgICAgICAvLyBsb29rIGF0IHRob3Nl
IHJlZ2lzdGVyZWQgYnkgSEZTIGZpbGUgdHlwZXMgdGhlIGZpcnN0IHRpbWUgdGhyb3VnaCwgYnkg
ZmlsZSBleHRlbnNpb24gdGhlIHNlY29uZCB0aW1lCi0gICAgICAgIGZpbmRDRC5jb21wb25lbnRG
bGFncyA9IGNhbk1vdmllSW1wb3J0SW5QbGFjZSB8IChpbmRleCA/IG1vdmllSW1wb3J0U3ViVHlw
ZUlzRmlsZUV4dGVuc2lvbiA6IDApOwotICAgICAgICAKLSAgICAgICAgbG9uZyBjb21wb25lbnRD
b3VudCA9IENvdW50Q29tcG9uZW50cygmZmluZENEKTsKLSAgICAgICAgaWYgKCFjb21wb25lbnRD
b3VudCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIENvbXBvbmVudCBjb21wID0g
MDsKLSAgICAgICAgd2hpbGUgKGNvbXAgPSBGaW5kTmV4dENvbXBvbmVudChjb21wLCAmZmluZENE
KSkgewotICAgICAgICAgICAgLy8gRG9lcyB0aGlzIGNvbXBvbmVudCBoYXZlIGEgTUlNRSB0eXBl
IGNvbnRhaW5lcj8KLSAgICAgICAgICAgIENvbXBvbmVudERlc2NyaXB0aW9uIGluZm9DRDsKLSAg
ICAgICAgICAgIE9TRXJyIGVyciA9IEdldENvbXBvbmVudEluZm8oY29tcCwgJmluZm9DRCwgbmls
IC8qbmFtZSovLCBuaWwgLyppbmZvKi8sIG5pbCAvKmljb24qLyk7Ci0gICAgICAgICAgICBpZiAo
ZXJyKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKCEoaW5mb0NE
LmNvbXBvbmVudEZsYWdzICYgaGFzTW92aWVJbXBvcnRNSU1FTGlzdCkpCi0gICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICBRVEF0b21Db250YWluZXIgbWltZUxpc3QgPSAwOwot
ICAgICAgICAgICAgZXJyID0gTW92aWVJbXBvcnRHZXRNSU1FVHlwZUxpc3QoKENvbXBvbmVudElu
c3RhbmNlKWNvbXAsICZtaW1lTGlzdCk7Ci0gICAgICAgICAgICBpZiAoZXJyIHx8ICFtaW1lTGlz
dCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgLy8gR3JhYiBldmVy
eSB0eXBlIGZyb20gdGhlIGNvbnRhaW5lci4KLSAgICAgICAgICAgIFFUTG9ja0NvbnRhaW5lciht
aW1lTGlzdCk7Ci0gICAgICAgICAgICBpbnQgdHlwZUNvdW50ID0gUVRDb3VudENoaWxkcmVuT2ZU
eXBlKG1pbWVMaXN0LCBrUGFyZW50QXRvbUlzQ29udGFpbmVyLCBrTWltZUluZm9NaW1lVHlwZVRh
Zyk7Ci0gICAgICAgICAgICBmb3IgKGludCB0eXBlSW5kZXggPSAxOyB0eXBlSW5kZXggPD0gdHlw
ZUNvdW50OyB0eXBlSW5kZXgrKykgewotICAgICAgICAgICAgICAgIFFUQXRvbSBtaW1lVGFnID0g
UVRGaW5kQ2hpbGRCeUluZGV4KG1pbWVMaXN0LCAwLCBrTWltZUluZm9NaW1lVHlwZVRhZywgdHlw
ZUluZGV4LCAwKTsKLSAgICAgICAgICAgICAgICBpZiAoIW1pbWVUYWcpCi0gICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGNoYXIqIGF0b21EYXRhOwotICAgICAg
ICAgICAgICAgIGxvbmcgdHlwZUxlbmd0aDsKLSAgICAgICAgICAgICAgICBpZiAobm9FcnIgIT0g
UVRHZXRBdG9tRGF0YVB0cihtaW1lTGlzdCwgbWltZVRhZywgJnR5cGVMZW5ndGgsICZhdG9tRGF0
YSkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAgICAgY2hh
ciB0eXBlQnVmZmVyWzI1Nl07Ci0gICAgICAgICAgICAgICAgaWYgKHR5cGVMZW5ndGggPj0gc2l6
ZW9mKHR5cGVCdWZmZXIpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgICAgICBtZW1jcHkodHlwZUJ1ZmZlciwgYXRvbURhdGEsIHR5cGVMZW5ndGgpOwotICAgICAg
ICAgICAgICAgIHR5cGVCdWZmZXJbdHlwZUxlbmd0aF0gPSAwOwotCi0gICAgICAgICAgICAgICAg
Ly8gT25seSBhZGQgImF1ZGlvLy4uLiIgYW5kICJ2aWRlby8uLi4iIHR5cGVzLgotICAgICAgICAg
ICAgICAgIGlmIChzdHJuY21wKHR5cGVCdWZmZXIsICJhdWRpby8iLCA2KSAmJiBzdHJuY21wKHR5
cGVCdWZmZXIsICJ2aWRlby8iLCA2KSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0K
LSAgICAgICAgICAgICAgICBDRlN0cmluZ1JlZiBjZk1pbWVUeXBlID0gQ0ZTdHJpbmdDcmVhdGVX
aXRoQ1N0cmluZygwLCB0eXBlQnVmZmVyLCBrQ0ZTdHJpbmdFbmNvZGluZ1VURjgpOwotICAgICAg
ICAgICAgICAgIGlmICghY2ZNaW1lVHlwZSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7
Ci0KLSAgICAgICAgICAgICAgICAvLyBPbmx5IGFkZCBlYWNoIHR5cGUgb25jZS4KLSAgICAgICAg
ICAgICAgICBib29sIGFscmVhZHlBZGRlZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGZvciAo
aW50IGFkZGVkSW5kZXggPSAwOyBhZGRlZEluZGV4IDwgZ1N1cHBvcnRlZFR5cGVzLT5zaXplKCk7
IGFkZGVkSW5kZXgrKykgewotICAgICAgICAgICAgICAgICAgICBDRlN0cmluZ1JlZiB0eXBlID0g
Z1N1cHBvcnRlZFR5cGVzLT5hdChhZGRlZEluZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KGtDRkNvbXBhcmVFcXVhbFRvID09IENGU3RyaW5nQ29tcGFyZShjZk1pbWVUeXBlLCB0eXBlLCBr
Q0ZDb21wYXJlQ2FzZUluc2Vuc2l0aXZlKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgYWxy
ZWFkeUFkZGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICgh
YWxyZWFkeUFkZGVkKQotICAgICAgICAgICAgICAgICAgICBnU3VwcG9ydGVkVHlwZXMtPmFwcGVu
ZChjZk1pbWVUeXBlKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg
IENGUmVsZWFzZShjZk1pbWVUeXBlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIERpc3Bv
c2VIYW5kbGUobWltZUxpc3QpOwotICAgICAgICB9Ci0gICAgfQotfQotCi11bnNpZ25lZCBRVE1v
dmllV2luOjpjb3VudFN1cHBvcnRlZFR5cGVzKCkKLXsKLSAgICBpbml0aWFsaXplU3VwcG9ydGVk
VHlwZXMoKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGdTdXBwb3J0ZWRUeXBl
cy0+c2l6ZSgpKTsKLX0KLQotdm9pZCBRVE1vdmllV2luOjpnZXRTdXBwb3J0ZWRUeXBlKHVuc2ln
bmVkIGluZGV4LCBjb25zdCBVQ2hhciomIHN0ciwgdW5zaWduZWQmIGxlbikKLXsKLSAgICBpbml0
aWFsaXplU3VwcG9ydGVkVHlwZXMoKTsKLSAgICBBU1NFUlQoaW5kZXggPCBnU3VwcG9ydGVkVHlw
ZXMtPnNpemUoKSk7Ci0KLSAgICAvLyBBbGxvY2F0ZSBzdWZmaWNpZW50IGJ1ZmZlciB0byBob2xk
IGFueSBNSU1FIHR5cGUKLSAgICBzdGF0aWMgVW5pQ2hhciogc3RhdGljQnVmZmVyID0gMDsKLSAg
ICBpZiAoIXN0YXRpY0J1ZmZlcikKLSAgICAgICAgc3RhdGljQnVmZmVyID0gbmV3IFVuaUNoYXJb
MzJdOwotCi0gICAgQ0ZTdHJpbmdSZWYgY2ZzdHIgPSBnU3VwcG9ydGVkVHlwZXMtPmF0KGluZGV4
KTsKLSAgICBsZW4gPSBDRlN0cmluZ0dldExlbmd0aChjZnN0cik7Ci0gICAgQ0ZSYW5nZSByYW5n
ZSA9IHsgMCwgbGVuIH07Ci0gICAgQ0ZTdHJpbmdHZXRDaGFyYWN0ZXJzKGNmc3RyLCByYW5nZSwg
c3RhdGljQnVmZmVyKTsKLSAgICBzdHIgPSByZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4o
c3RhdGljQnVmZmVyKTsKLSAgICAKLX0KLQotdm9pZCBRVE1vdmllV2luOjpzZXRUYXNrVGltZXJG
dW5jcyhTZXRUYXNrVGltZXJEZWxheUZ1bmMgc2V0VGFza1RpbWVyRGVsYXksIFN0b3BUYXNrVGlt
ZXJGdW5jIHN0b3BUYXNrVGltZXIpCi17Ci0gICAgZ1NldFRhc2tUaW1lckRlbGF5ID0gc2V0VGFz
a1RpbWVyRGVsYXk7Ci0gICAgZ1N0b3BUYXNrVGltZXIgPSBzdG9wVGFza1RpbWVyOwotfQotCi1i
b29sIFFUTW92aWVXaW46OmluaXRpYWxpemVRdWlja1RpbWUoKSAKLXsKLSAgICBzdGF0aWMgYm9v
bCBpbml0aWFsaXplZCA9IGZhbHNlOwotICAgIHN0YXRpYyBib29sIGluaXRpYWxpemF0aW9uU3Vj
Y2VlZGVkID0gZmFsc2U7Ci0gICAgaWYgKCFpbml0aWFsaXplZCkgewotICAgICAgICBpbml0aWFs
aXplZCA9IHRydWU7Ci0gICAgICAgIC8vIEluaXRpYWxpemUgYW5kIGNoZWNrIFF1aWNrVGltZSB2
ZXJzaW9uCi0gICAgICAgIE9TRXJyIHJlc3VsdCA9IEluaXRpYWxpemVRVE1MKGtJbml0aWFsaXpl
UVRNTEVuYWJsZURvdWJsZUJ1ZmZlcmVkU3VyZmFjZSk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0g
bm9FcnIpCi0gICAgICAgICAgICByZXN1bHQgPSBHZXN0YWx0KGdlc3RhbHRRdWlja1RpbWUsICZx
dWlja1RpbWVWZXJzaW9uKTsKLSAgICAgICAgaWYgKHJlc3VsdCAhPSBub0VycikgewotICAgICAg
ICAgICAgTE9HX0VSUk9SKCJObyBRdWlja1RpbWUgYXZhaWxhYmxlLiBEaXNhYmxpbmcgPHZpZGVv
PiBhbmQgPGF1ZGlvPiBzdXBwb3J0LiIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB9Ci0gICAgICAgIGlmIChxdWlja1RpbWVWZXJzaW9uIDwgbWluaW11bVF1aWNrVGltZVZl
cnNpb24pIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiUXVpY2tUaW1lIHZlcnNpb24gJXggZGV0
ZWN0ZWQsIGF0IGxlYXN0ICV4IHJlcXVpcmVkLiBEaXNhYmxpbmcgPHZpZGVvPiBhbmQgPGF1ZGlv
PiBzdXBwb3J0LiIsIHF1aWNrVGltZVZlcnNpb24sIG1pbmltdW1RdWlja1RpbWVWZXJzaW9uKTsK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBFbnRlck1vdmll
cygpOwotICAgICAgICBnTW92aWVEcmF3aW5nQ29tcGxldGVVUFAgPSBOZXdNb3ZpZURyYXdpbmdD
b21wbGV0ZVVQUChtb3ZpZURyYXdpbmdDb21wbGV0ZVByb2MpOwotICAgICAgICBpbml0aWFsaXph
dGlvblN1Y2NlZWRlZCA9IHRydWU7Ci0gICAgfQotICAgIHJldHVybiBpbml0aWFsaXphdGlvblN1
Y2NlZWRlZDsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5tX2Rpc2FibGVkOwogfQogCiBMUkVTVUxU
IFFUTW92aWVXaW46OmZ1bGxzY3JlZW5XbmRQcm9jKEhXTkQgd25kLCBVSU5UIG1lc3NhZ2UsIFdQ
QVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCkBAIC0xMTYzLDE2ICs0NjUsMjUgQEAgdm9pZCBR
VE1vdmllV2luOjpleGl0RnVsbHNjcmVlbigpCiAgICAgbV9wcml2YXRlLT5tX2Z1bGxzY3JlZW5X
aW5kb3cgPSAwOwogfQogCi1CT09MIFdJTkFQSSBEbGxNYWluKEhJTlNUQU5DRSBoaW5zdERMTCwg
RFdPUkQgZmR3UmVhc29uLCBMUFZPSUQgbHB2UmVzZXJ2ZWQpCit2b2lkIFFUTW92aWVXaW46OnNl
dE1vdmllKFJlZlB0cjxRVE1vdmllPiBtb3ZpZSkKIHsKLSAgICBzd2l0Y2ggKGZkd1JlYXNvbikg
ewotICAgIGNhc2UgRExMX1BST0NFU1NfQVRUQUNIOgotICAgICAgICByZXR1cm4gVFJVRTsKLSAg
ICBjYXNlIERMTF9QUk9DRVNTX0RFVEFDSDoKLSAgICBjYXNlIERMTF9USFJFQURfQVRUQUNIOgot
ICAgIGNhc2UgRExMX1RIUkVBRF9ERVRBQ0g6Ci0gICAgICAgIHJldHVybiBGQUxTRTsKKyAgICBp
ZiAobV9wcml2YXRlLT5tX3F0TW92aWUpIHsKKyAgICAgICAgbV9wcml2YXRlLT51bnJlZ2lzdGVy
RHJhd2luZ0NhbGxiYWNrKCk7CisgICAgICAgIG1fcHJpdmF0ZS0+bV9xdE1vdmllLT5yZW1vdmVD
bGllbnQobV9wcml2YXRlKTsKKyAgICAgICAgbV9wcml2YXRlLT5tX3F0TW92aWUgPSAwOworICAg
ICAgICBtX3ByaXZhdGUtPm1fbW92aWUgPSAwOworICAgIH0KKworICAgIG1fcHJpdmF0ZS0+bV9x
dE1vdmllID0gbW92aWU7CisKKyAgICBpZiAobV9wcml2YXRlLT5tX3F0TW92aWUpIHsKKyAgICAg
ICAgbV9wcml2YXRlLT5tX3F0TW92aWUtPmFkZENsaWVudChtX3ByaXZhdGUpOworICAgICAgICBt
X3ByaXZhdGUtPm1fbW92aWUgPSBtX3ByaXZhdGUtPm1fcXRNb3ZpZS0+Z2V0TW92aWVIYW5kbGUo
KTsKKyAgICAgICAgbV9wcml2YXRlLT5yZWdpc3RlckRyYXdpbmdDYWxsYmFjaygpOwogICAgIH0K
LSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gRkFMU0U7Cit9CisKK1JlZlB0
cjxRVE1vdmllPiBRVE1vdmllV2luOjptb3ZpZSgpIGNvbnN0IAoreworICAgIHJldHVybiBtX3By
aXZhdGUtPm1fcXRNb3ZpZTsKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L1FUTW92aWVXaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9RVE1vdmllV2luLmgJKHJldmlzaW9uIDU4MTg3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vUVRNb3ZpZVdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiwxMSBAQAog
I2lmbmRlZiBRVE1vdmllV2luX2gKICNkZWZpbmUgUVRNb3ZpZVdpbl9oCiAKKworI2luY2x1ZGUg
IlFUTW92aWUuaCIKICNpbmNsdWRlIDxVbmljb2RlLmg+CisjaW5jbHVkZSA8V1RGL1JlZkNvdW50
ZWQuaD4KKyNpbmNsdWRlIDxXVEYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d2luZG93cy5oPgogCiAj
aWZkZWYgUVRNT1ZJRVdJTl9FWFBPUlRTCkBAIC00MCw5ICs0NCw2IEBAIGNsYXNzIFFUTW92aWVX
aW5Qcml2YXRlOwogCiBjbGFzcyBRVE1vdmllV2luQ2xpZW50IHsKIHB1YmxpYzoKLSAgICB2aXJ0
dWFsIHZvaWQgbW92aWVFbmRlZChRVE1vdmllV2luKikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBt
b3ZpZUxvYWRTdGF0ZUNoYW5nZWQoUVRNb3ZpZVdpbiopID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
bW92aWVUaW1lQ2hhbmdlZChRVE1vdmllV2luKikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBtb3Zp
ZU5ld0ltYWdlQXZhaWxhYmxlKFFUTW92aWVXaW4qKSA9IDA7CiB9OwogCkBAIC01MSw0NyArNTIs
MTEgQEAgcHVibGljOgogICAgIHZpcnR1YWwgTFJFU1VMVCBmdWxsc2NyZWVuQ2xpZW50V25kUHJv
YyhIV05ELCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSwgTFBBUkFNKSA9IDA7CiB9OwogCi1lbnVtIHsK
LSAgICBRVE1vdmllTG9hZFN0YXRlRXJyb3IgPSAtMUwsCi0gICAgUVRNb3ZpZUxvYWRTdGF0ZUxv
YWRlZCAgPSAyMDAwTCwKLSAgICBRVE1vdmllTG9hZFN0YXRlUGxheWFibGUgPSAxMDAwMEwsCi0g
ICAgUVRNb3ZpZUxvYWRTdGF0ZVBsYXl0aHJvdWdoT0sgPSAyMDAwMEwsCi0gICAgUVRNb3ZpZUxv
YWRTdGF0ZUNvbXBsZXRlID0gMTAwMDAwTAotfTsKLQotdHlwZWRlZiBjb25zdCBzdHJ1Y3QgX19D
RlVSTCAqIENGVVJMUmVmOwotCi1jbGFzcyBRVE1PVklFV0lOX0FQSSBRVE1vdmllV2luIHsKK2Ns
YXNzIFFUTU9WSUVXSU5fQVBJIFFUTW92aWVXaW4gOiBwdWJsaWMgUmVmQ291bnRlZDxRVE1vdmll
V2luPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZVF1aWNrVGltZSgpOwot
Ci0gICAgdHlwZWRlZiB2b2lkICgqU2V0VGFza1RpbWVyRGVsYXlGdW5jKShkb3VibGUpOwotICAg
IHR5cGVkZWYgdm9pZCAoKlN0b3BUYXNrVGltZXJGdW5jKSgpOwotICAgIHN0YXRpYyB2b2lkIHNl
dFRhc2tUaW1lckZ1bmNzKFNldFRhc2tUaW1lckRlbGF5RnVuYywgU3RvcFRhc2tUaW1lckZ1bmMp
OwotICAgIHN0YXRpYyB2b2lkIHRhc2tUaW1lckZpcmVkKCk7Ci0KICAgICBRVE1vdmllV2luKFFU
TW92aWVXaW5DbGllbnQqKTsKICAgICB+UVRNb3ZpZVdpbigpOwogCi0gICAgdm9pZCBsb2FkKGNv
bnN0IFVDaGFyKiB1cmwsIGludCBsZW4sIGJvb2wgcHJlc2VydmVzUGl0Y2gpOwotICAgIGxvbmcg
bG9hZFN0YXRlKCkgY29uc3Q7Ci0gICAgZmxvYXQgbWF4VGltZUxvYWRlZCgpIGNvbnN0OwotCi0g
ICAgdm9pZCBwbGF5KCk7Ci0gICAgdm9pZCBwYXVzZSgpOwotCi0gICAgZmxvYXQgcmF0ZSgpIGNv
bnN0OwotICAgIHZvaWQgc2V0UmF0ZShmbG9hdCk7Ci0KLSAgICBmbG9hdCBkdXJhdGlvbigpIGNv
bnN0OwotICAgIGZsb2F0IGN1cnJlbnRUaW1lKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRDdXJyZW50
VGltZShmbG9hdCkgY29uc3Q7Ci0KLSAgICB2b2lkIHNldFZvbHVtZShmbG9hdCk7Ci0gICAgdm9p
ZCBzZXRQcmVzZXJ2ZXNQaXRjaChib29sKTsKLQotICAgIHVuc2lnbmVkIGRhdGFTaXplKCkgY29u
c3Q7Ci0KICAgICB2b2lkIGdldE5hdHVyYWxTaXplKGludCYgd2lkdGgsIGludCYgaGVpZ2h0KTsK
ICAgICB2b2lkIHNldFNpemUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKIApAQCAtOTksMjggKzY0
LDIwIEBAIHB1YmxpYzoKICAgICB2b2lkIHBhaW50KEhEQywgaW50IHgsIGludCB5KTsKICAgICB2
b2lkIGdldEN1cnJlbnRGcmFtZUluZm8odm9pZComIGJ1ZmZlciwgdW5zaWduZWQmIGJpdHNQZXJQ
aXhlbCwgdW5zaWduZWQmIHJvd0J5dGVzLCB1bnNpZ25lZCYgd2lkdGgsIHVuc2lnbmVkJiBoZWln
aHQpOwogCi0gICAgdm9pZCBkaXNhYmxlVW5zdXBwb3J0ZWRUcmFja3ModW5zaWduZWQmIGVuYWJs
ZWRUcmFja0NvdW50LCB1bnNpZ25lZCYgdG90YWxUcmFja0NvdW50KTsKICAgICB2b2lkIHNldERp
c2FibGVkKGJvb2wpOwotCi0gICAgYm9vbCBoYXNWaWRlbygpIGNvbnN0OwotICAgIGJvb2wgaGFz
QXVkaW8oKSBjb25zdDsKLQotICAgIGJvb2wgaGFzQ2xvc2VkQ2FwdGlvbnMoKSBjb25zdDsKLSAg
ICB2b2lkIHNldENsb3NlZENhcHRpb25zVmlzaWJsZShib29sKTsKLQotICAgIHN0YXRpYyB1bnNp
Z25lZCBjb3VudFN1cHBvcnRlZFR5cGVzKCk7Ci0gICAgc3RhdGljIHZvaWQgZ2V0U3VwcG9ydGVk
VHlwZSh1bnNpZ25lZCBpbmRleCwgY29uc3QgVUNoYXIqJiBzdHIsIHVuc2lnbmVkJiBsZW4pOwor
ICAgIGJvb2wgaXNEaXNhYmxlZCgpIGNvbnN0OwogCiAgICAgLy8gUmV0dXJucyB0aGUgZnVsbC1z
Y3JlZW4gd2luZG93IGNyZWF0ZWQKICAgICBIV05EIGVudGVyRnVsbHNjcmVlbihRVE1vdmllV2lu
RnVsbHNjcmVlbkNsaWVudCopOwogICAgIHZvaWQgZXhpdEZ1bGxzY3JlZW4oKTsKIAorICAgIHZv
aWQgc2V0TW92aWUoUmVmUHRyPFFUTW92aWU+KTsKKyAgICBSZWZQdHI8UVRNb3ZpZT4gbW92aWUo
KSBjb25zdDsKKwogcHJpdmF0ZToKLSAgICB2b2lkIGxvYWQoQ0ZVUkxSZWYsIGJvb2wgcHJlc2Vy
dmVzUGl0Y2gpOwogICAgIHN0YXRpYyBMUkVTVUxUIGZ1bGxzY3JlZW5XbmRQcm9jKEhXTkQsIFVJ
TlQgbWVzc2FnZSwgV1BBUkFNLCBMUEFSQU0pOwogCiAgICAgUVRNb3ZpZVdpblByaXZhdGUqIG1f
cHJpdmF0ZTsKLSAgICBib29sIG1fZGlzYWJsZWQ7CiAgICAgZnJpZW5kIGNsYXNzIFFUTW92aWVX
aW5Qcml2YXRlOwogfTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54595</attachid>
            <date>2010-04-28 11:30:07 -0700</date>
            <delta_ts>2010-04-28 11:46:03 -0700</delta_ts>
            <desc>Part 4: WebCore: New class MediaPlayerPrivateQuickTimeVisualContext</desc>
            <filename>7569713-MediaPlayerPrivateQuickTimeVisualContext.patch</filename>
            <type>text/plain</type>
            <size>44889</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1
aWNrVGltZVZpc3VhbENvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQuY3Bw
CShyZXZpc2lvbiA1ODE4NykJKGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVk
aWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lV2luLmNwcDo1ODE4NykKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTcyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoVklERU8pCisjaW5j
bHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lV2luLmgiCisKKyNpbmNsdWRlICJDb29r
aWUuaCIKKyNpbmNsdWRlICJDb29raWVKYXIuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1
ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUg
IktVUkwuaCIKKyNpbmNsdWRlICJRVE1vdmllV2luLmgiCisjaW5jbHVkZSAiU2Nyb2xsVmlldy5o
IgorI2luY2x1ZGUgIlNvZnRMaW5raW5nLmgiCisjaW5jbHVkZSAiU3RyaW5nQnVpbGRlci5oIgor
I2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKKyNpbmNsdWRlICJUaW1lUmFuZ2VzLmgiCisjaW5jbHVk
ZSAiVGltZXIuaCIKKyNpbmNsdWRlIDxXaW5pbmV0Lmg+CisjaW5jbHVkZSA8d3RmL0N1cnJlbnRU
aW1lLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJh
cy5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyQ0FDRi5oIgorI2luY2x1ZGUg
IldLQ0FDRkxheWVyLmgiCisjZW5kaWYKKworI2lmIERSQVdfRlJBTUVfUkFURQorI2luY2x1ZGUg
IkZvbnQuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAi
UmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJXaW5kb3dzLmgiCisjZW5kaWYKKwordXNpbmcgbmFt
ZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTT0ZUX0xJTktfTElCUkFSWShX
aW5pbmV0KQorU09GVF9MSU5LKFdpbmluZXQsIEludGVybmV0U2V0Q29va2llRXhXLCBEV09SRCwg
V0lOQVBJLCAoTFBDV1NUUiBscHN6VXJsLCBMUENXU1RSIGxwc3pDb29raWVOYW1lLCBMUENXU1RS
IGxwc3pDb29raWVEYXRhLCBEV09SRCBkd0ZsYWdzLCBEV09SRF9QVFIgZHdSZXNlcnZlZCksIChs
cHN6VXJsLCBscHN6Q29va2llTmFtZSwgbHBzekNvb2tpZURhdGEsIGR3RmxhZ3MsIGR3UmVzZXJ2
ZWQpKQorCitNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2UqIE1lZGlhUGxheWVyUHJpdmF0ZTo6
Y3JlYXRlKE1lZGlhUGxheWVyKiBwbGF5ZXIpIAoreyAKKyAgICByZXR1cm4gbmV3IE1lZGlhUGxh
eWVyUHJpdmF0ZShwbGF5ZXIpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6cmVnaXN0
ZXJNZWRpYUVuZ2luZShNZWRpYUVuZ2luZVJlZ2lzdHJhciByZWdpc3RyYXIpCit7CisgICAgaWYg
KGlzQXZhaWxhYmxlKCkpCisgICAgICAgIHJlZ2lzdHJhcihjcmVhdGUsIGdldFN1cHBvcnRlZFR5
cGVzLCBzdXBwb3J0c1R5cGUpOworfQorCitNZWRpYVBsYXllclByaXZhdGU6Ok1lZGlhUGxheWVy
UHJpdmF0ZShNZWRpYVBsYXllciogcGxheWVyKQorICAgIDogbV9wbGF5ZXIocGxheWVyKQorICAg
ICwgbV9zZWVrVG8oLTEpCisgICAgLCBtX3NlZWtUaW1lcih0aGlzLCAmTWVkaWFQbGF5ZXJQcml2
YXRlOjpzZWVrVGltZXJGaXJlZCkKKyAgICAsIG1fbmV0d29ya1N0YXRlKE1lZGlhUGxheWVyOjpF
bXB0eSkKKyAgICAsIG1fcmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmcpCisgICAg
LCBtX2VuYWJsZWRUcmFja0NvdW50KDApCisgICAgLCBtX3RvdGFsVHJhY2tDb3VudCgwKQorICAg
ICwgbV9oYXNVbnN1cHBvcnRlZFRyYWNrcyhmYWxzZSkKKyAgICAsIG1fc3RhcnRlZFBsYXlpbmco
ZmFsc2UpCisgICAgLCBtX2lzU3RyZWFtaW5nKGZhbHNlKQorICAgICwgbV92aXNpYmxlKGZhbHNl
KQorICAgICwgbV9uZXdGcmFtZUF2YWlsYWJsZShmYWxzZSkKKyNpZiBEUkFXX0ZSQU1FX1JBVEUK
KyAgICAsIG1fZnJhbWVDb3VudFdoaWxlUGxheWluZygwKQorICAgICwgbV90aW1lU3RhcnRlZFBs
YXlpbmcoMCkKKyAgICAsIG1fdGltZVN0b3BwZWRQbGF5aW5nKDApCisjZW5kaWYKK3sKK30KKwor
TWVkaWFQbGF5ZXJQcml2YXRlOjp+TWVkaWFQbGF5ZXJQcml2YXRlKCkKK3sKKyAgICB0ZWFyRG93
blZpZGVvUmVuZGVyaW5nKCk7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlOjpzdXBwb3J0
c0Z1bGxzY3JlZW4oKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCitQbGF0Zm9ybU1l
ZGlhIE1lZGlhUGxheWVyUHJpdmF0ZTo6cGxhdGZvcm1NZWRpYSgpIGNvbnN0Cit7CisgICAgUGxh
dGZvcm1NZWRpYSBwOworICAgIHAucXRNb3ZpZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8UVRNb3ZpZSo+
KG1fcXRNb3ZpZS5nZXQoKSk7CisgICAgcmV0dXJuIHA7Cit9CisKKyNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCitQbGF0Zm9ybUxheWVyKiBNZWRpYVBsYXllclByaXZhdGU6OnBsYXRm
b3JtTGF5ZXIoKSBjb25zdAoreworICAgIHJldHVybiBtX3F0VmlkZW9MYXllciA/IG1fcXRWaWRl
b0xheWVyLT5wbGF0Zm9ybUxheWVyKCkgOiAwOworfQorI2VuZGlmCisKK2NsYXNzIFRhc2tUaW1l
ciA6IFRpbWVyQmFzZSB7CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZSgpOwor
ICAgIAorcHJpdmF0ZToKKyAgICBzdGF0aWMgdm9pZCBzZXRUYXNrVGltZXJEZWxheShkb3VibGUp
OworICAgIHN0YXRpYyB2b2lkIHN0b3BUYXNrVGltZXIoKTsKKworICAgIHZvaWQgZmlyZWQoKTsK
KworICAgIHN0YXRpYyBUYXNrVGltZXIqIHNfdGltZXI7Cit9OworCitUYXNrVGltZXIqIFRhc2tU
aW1lcjo6c190aW1lciA9IDA7CisKK3ZvaWQgVGFza1RpbWVyOjppbml0aWFsaXplKCkKK3sKKyAg
ICBpZiAoc190aW1lcikKKyAgICAgICAgcmV0dXJuOworCisgICAgc190aW1lciA9IG5ldyBUYXNr
VGltZXI7CisKKyAgICBRVE1vdmllV2luOjpzZXRUYXNrVGltZXJGdW5jcyhzZXRUYXNrVGltZXJE
ZWxheSwgc3RvcFRhc2tUaW1lcik7Cit9CisKK3ZvaWQgVGFza1RpbWVyOjpzZXRUYXNrVGltZXJE
ZWxheShkb3VibGUgZGVsYXlJblNlY29uZHMpCit7CisgICAgQVNTRVJUKHNfdGltZXIpOworCisg
ICAgc190aW1lci0+c3RhcnRPbmVTaG90KGRlbGF5SW5TZWNvbmRzKTsKK30KKwordm9pZCBUYXNr
VGltZXI6OnN0b3BUYXNrVGltZXIoKQoreworICAgIEFTU0VSVChzX3RpbWVyKTsKKworICAgIHNf
dGltZXItPnN0b3AoKTsKK30KKwordm9pZCBUYXNrVGltZXI6OmZpcmVkKCkKK3sKKyAgICBRVE1v
dmllV2luOjp0YXNrVGltZXJGaXJlZCgpOworfQorCitTdHJpbmcgTWVkaWFQbGF5ZXJQcml2YXRl
OjpyZmMyNjE2RGF0ZVN0cmluZ0Zyb21UaW1lKENGQWJzb2x1dGVUaW1lIHRpbWUpCit7CisgICAg
c3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGRheVN0cmluZ3NbXSA9IHsgIk1vbiIsICJUdWUiLCAi
V2VkIiwgIlRodSIsICJGcmkiLCAiU2F0IiwgIlN1biIgfTsKKyAgICBzdGF0aWMgY29uc3QgY2hh
ciogY29uc3QgbW9udGhTdHJpbmdzW10gPSB7ICJKYW4iLCAiRmViIiwgIk1hciIsICJBcHIiLCAi
TWF5IiwgIkp1biIsICJKdWwiLCAiQXVnIiwgIlNlcCIsICJPY3QiLCAiTm92IiwgIkRlYyIgfTsK
KyAgICBzdGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYgZGF0ZUZvcm1hdFN0cmluZyA9IENGU1RSKCIl
cywgJTAyZCAlcyAlMDRkICUwMmQ6JTAyZDolMDJkIEdNVCIpOworICAgIHN0YXRpYyBDRlRpbWVa
b25lUmVmIGdtdFRpbWVab25lOworICAgIGlmICghZ210VGltZVpvbmUpCisgICAgICAgIGdtdFRp
bWVab25lID0gQ0ZUaW1lWm9uZUNvcHlEZWZhdWx0KCk7CisKKyAgICBDRkdyZWdvcmlhbkRhdGUg
ZGF0ZVZhbHVlID0gQ0ZBYnNvbHV0ZVRpbWVHZXRHcmVnb3JpYW5EYXRlKHRpbWUsIGdtdFRpbWVa
b25lKTsgCisgICAgaWYgKCFDRkdyZWdvcmlhbkRhdGVJc1ZhbGlkKGRhdGVWYWx1ZSwga0NGR3Jl
Z29yaWFuQWxsVW5pdHMpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICB0aW1lID0g
Q0ZHcmVnb3JpYW5EYXRlR2V0QWJzb2x1dGVUaW1lKGRhdGVWYWx1ZSwgZ210VGltZVpvbmUpOwor
ICAgIFNJbnQzMiBkYXkgPSBDRkFic29sdXRlVGltZUdldERheU9mV2Vlayh0aW1lLCAwKTsKKwor
ICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gZGF0ZUNGU3RyaW5nKEFkb3B0Q0YsIENGU3RyaW5n
Q3JlYXRlV2l0aEZvcm1hdCgwLCAwLCBkYXRlRm9ybWF0U3RyaW5nLCBkYXlTdHJpbmdzW2RheSAt
IDFdLCBkYXRlVmFsdWUuZGF5LCAKKyAgICAgICAgbW9udGhTdHJpbmdzW2RhdGVWYWx1ZS5tb250
aCAtIDFdLCBkYXRlVmFsdWUueWVhciwgZGF0ZVZhbHVlLmhvdXIsIGRhdGVWYWx1ZS5taW51dGUs
IChpbnQpZGF0ZVZhbHVlLnNlY29uZCkpOworICAgIHJldHVybiBkYXRlQ0ZTdHJpbmcuZ2V0KCk7
Cit9CisKK3N0YXRpYyB2b2lkIGFkZENvb2tpZVBhcmFtKFN0cmluZ0J1aWxkZXImIGNvb2tpZUJ1
aWxkZXIsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBp
ZiAobmFtZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIElmIHRoaXMgaXNu
J3QgdGhlIGZpcnN0IHBhcmFtZXRlciBhZGRlZCwgdGVybWluYXRlIHRoZSBwcmV2aW91cyBvbmUu
CisgICAgaWYgKGNvb2tpZUJ1aWxkZXIubGVuZ3RoKCkpCisgICAgICAgIGNvb2tpZUJ1aWxkZXIu
YXBwZW5kKCI7ICIpOworCisgICAgLy8gQWRkIHBhcmFtZXRlciBuYW1lLCBhbmQgdmFsdWUgaWYg
dGhlcmUgaXMgb25lLgorICAgIGNvb2tpZUJ1aWxkZXIuYXBwZW5kKG5hbWUpOworICAgIGlmICgh
dmFsdWUuaXNFbXB0eSgpKSB7CisgICAgICAgIGNvb2tpZUJ1aWxkZXIuYXBwZW5kKCI9Iik7Cisg
ICAgICAgIGNvb2tpZUJ1aWxkZXIuYXBwZW5kKHZhbHVlKTsKKyAgICB9Cit9CisKKwordm9pZCBN
ZWRpYVBsYXllclByaXZhdGU6OnNldFVwQ29va2llc0ZvclF1aWNrVGltZShjb25zdCBTdHJpbmcm
IHVybCkKK3sKKyAgICAvLyBXZWJDb3JlIGxvYWRlZCB0aGUgcGFnZSB3aXRoIHRoZSBtb3ZpZSBV
Ukwgd2l0aCBDRk5ldHdvcmsgYnV0IFF1aWNrVGltZSB3aWxsIAorICAgIC8vIHVzZSBXaW5JTmV0
IHRvIGRvd25sb2FkIHRoZSBtb3ZpZSwgc28gd2UgbmVlZCB0byBjb3B5IGFueSBjb29raWVzIG5l
ZWRlZCB0bworICAgIC8vIGRvd25sb2FkIHRoZSBtb3ZpZSBpbnRvIFdpbkluZXQgYmVmb3JlIGFz
a2luZyBRdWlja1RpbWUgdG8gb3BlbiBpdC4KKyAgICBGcmFtZSogZnJhbWUgPSBtX3BsYXllci0+
ZnJhbWVWaWV3KCkgPyBtX3BsYXllci0+ZnJhbWVWaWV3KCktPmZyYW1lKCkgOiAwOworICAgIGlm
ICghZnJhbWUgfHwgIWZyYW1lLT5wYWdlKCkgfHwgIWZyYW1lLT5wYWdlKCktPmNvb2tpZUVuYWJs
ZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgS1VSTCBtb3ZpZVVSTCA9IEtVUkwoS1VSTCgp
LCB1cmwpOworICAgIFZlY3RvcjxDb29raWU+IGRvY3VtZW50Q29va2llczsKKyAgICBpZiAoIWdl
dFJhd0Nvb2tpZXMoZnJhbWUtPmRvY3VtZW50KCksIG1vdmllVVJMLCBkb2N1bWVudENvb2tpZXMp
KQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKHNpemVfdCBuZHggPSAwOyBuZHggPCBkb2N1
bWVudENvb2tpZXMuc2l6ZSgpOyBuZHgrKykgeworICAgICAgICBjb25zdCBDb29raWUmIGNvb2tp
ZSA9IGRvY3VtZW50Q29va2llc1tuZHhdOworCisgICAgICAgIGlmIChjb29raWUubmFtZS5pc0Vt
cHR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvLyBCdWlsZCB1cCB0aGUg
Y29va2llIHN0cmluZyB3aXRoIGFzIG11Y2ggaW5mb3JtYXRpb24gYXMgd2UgY2FuIGdldCBzbyBX
aW5JTmV0CisgICAgICAgIC8vIGtub3dzIHdoYXQgdG8gZG8gd2l0aCBpdC4KKyAgICAgICAgU3Ry
aW5nQnVpbGRlciBjb29raWVCdWlsZGVyOworICAgICAgICBhZGRDb29raWVQYXJhbShjb29raWVC
dWlsZGVyLCBjb29raWUubmFtZSwgY29va2llLnZhbHVlKTsKKyAgICAgICAgYWRkQ29va2llUGFy
YW0oY29va2llQnVpbGRlciwgInBhdGgiLCBjb29raWUucGF0aCk7CisgICAgICAgIGlmIChjb29r
aWUuZXhwaXJlcykgCisgICAgICAgICAgICBhZGRDb29raWVQYXJhbShjb29raWVCdWlsZGVyLCAi
ZXhwaXJlcyIsIHJmYzI2MTZEYXRlU3RyaW5nRnJvbVRpbWUoY29va2llLmV4cGlyZXMpKTsKKyAg
ICAgICAgaWYgKGNvb2tpZS5odHRwT25seSkgCisgICAgICAgICAgICBhZGRDb29raWVQYXJhbShj
b29raWVCdWlsZGVyLCAiaHR0cE9ubHkiLCBTdHJpbmcoKSk7CisgICAgICAgIGNvb2tpZUJ1aWxk
ZXIuYXBwZW5kKCI7Iik7CisKKyAgICAgICAgU3RyaW5nIGNvb2tpZVVSTDsKKyAgICAgICAgaWYg
KCFjb29raWUuZG9tYWluLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgU3RyaW5nQnVpbGRlciB1
cmxCdWlsZGVyOworCisgICAgICAgICAgICB1cmxCdWlsZGVyLmFwcGVuZChtb3ZpZVVSTC5wcm90
b2NvbCgpKTsKKyAgICAgICAgICAgIHVybEJ1aWxkZXIuYXBwZW5kKCI6Ly8iKTsKKyAgICAgICAg
ICAgIGlmIChjb29raWUuZG9tYWluWzBdID09ICcuJykKKyAgICAgICAgICAgICAgICB1cmxCdWls
ZGVyLmFwcGVuZChjb29raWUuZG9tYWluLnN1YnN0cmluZygxKSk7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgdXJsQnVpbGRlci5hcHBlbmQoY29va2llLmRvbWFpbik7CisgICAg
ICAgICAgICBpZiAoY29va2llLnBhdGgubGVuZ3RoKCkgPiAxKQorICAgICAgICAgICAgICAgIHVy
bEJ1aWxkZXIuYXBwZW5kKGNvb2tpZS5wYXRoKTsKKworICAgICAgICAgICAgY29va2llVVJMID0g
dXJsQnVpbGRlci50b1N0cmluZygpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGNvb2tp
ZVVSTCA9IG1vdmllVVJMOworCisgICAgICAgIEludGVybmV0U2V0Q29va2llRXhXKGNvb2tpZVVS
TC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLCAwLCBjb29raWVCdWlsZGVyLnRvU3Ry
aW5nKCkuY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgMCwgMCk7CisgICAgfQorfQor
Cit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6bG9hZChjb25zdCBTdHJpbmcmIHVybCkKK3sKKyAg
ICBpZiAoIVFUTW92aWVXaW46OmluaXRpYWxpemVRdWlja1RpbWUoKSkgeworICAgICAgICAvLyBG
SVhNRTogaXMgdGhpcyB0aGUgcmlnaHQgZXJyb3IgdG8gcmV0dXJuPworICAgICAgICBtX25ldHdv
cmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpEZWNvZGVFcnJvcjsgCisgICAgICAgIG1fcGxheWVyLT5u
ZXR3b3JrU3RhdGVDaGFuZ2VkKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBJ
bml0aWFsaXplIHRoZSB0YXNrIHRpbWVyLgorICAgIFRhc2tUaW1lcjo6aW5pdGlhbGl6ZSgpOwor
CisgICAgaWYgKG1fbmV0d29ya1N0YXRlICE9IE1lZGlhUGxheWVyOjpMb2FkaW5nKSB7CisgICAg
ICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkxvYWRpbmc7CisgICAgICAgIG1fcGxh
eWVyLT5uZXR3b3JrU3RhdGVDaGFuZ2VkKCk7CisgICAgfQorICAgIGlmIChtX3JlYWR5U3RhdGUg
IT0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nKSB7CisgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1l
ZGlhUGxheWVyOjpIYXZlTm90aGluZzsKKyAgICAgICAgbV9wbGF5ZXItPnJlYWR5U3RhdGVDaGFu
Z2VkKCk7CisgICAgfQorICAgIGNhbmNlbFNlZWsoKTsKKworICAgIHNldFVwQ29va2llc0ZvclF1
aWNrVGltZSh1cmwpOworCisgICAgbV9xdE1vdmllLnNldChuZXcgUVRNb3ZpZVdpbih0aGlzKSk7
CisgICAgbV9xdE1vdmllLT5sb2FkKHVybC5jaGFyYWN0ZXJzKCksIHVybC5sZW5ndGgoKSwgbV9w
bGF5ZXItPnByZXNlcnZlc1BpdGNoKCkpOworICAgIG1fcXRNb3ZpZS0+c2V0Vm9sdW1lKG1fcGxh
eWVyLT52b2x1bWUoKSk7CisgICAgbV9xdE1vdmllLT5zZXRWaXNpYmxlKG1fcGxheWVyLT52aXNp
YmxlKCkpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6cGxheSgpCit7CisgICAgaWYg
KCFtX3F0TW92aWUpCisgICAgICAgIHJldHVybjsKKyAgICBtX3N0YXJ0ZWRQbGF5aW5nID0gdHJ1
ZTsKKyNpZiBEUkFXX0ZSQU1FX1JBVEUKKyAgICBtX2ZyYW1lQ291bnRXaGlsZVBsYXlpbmcgPSAw
OworI2VuZGlmCisKKyAgICBtX3F0TW92aWUtPnBsYXkoKTsKK30KKwordm9pZCBNZWRpYVBsYXll
clByaXZhdGU6OnBhdXNlKCkKK3sKKyAgICBpZiAoIW1fcXRNb3ZpZSkKKyAgICAgICAgcmV0dXJu
OworICAgIG1fc3RhcnRlZFBsYXlpbmcgPSBmYWxzZTsKKyNpZiBEUkFXX0ZSQU1FX1JBVEUKKyAg
ICBtX3RpbWVTdG9wcGVkUGxheWluZyA9IFdURjo6Y3VycmVudFRpbWUoKTsKKyNlbmRpZgorICAg
IG1fcXRNb3ZpZS0+cGF1c2UoKTsKK30KKworZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlOjpkdXJh
dGlvbigpIGNvbnN0Cit7CisgICAgaWYgKCFtX3F0TW92aWUpCisgICAgICAgIHJldHVybiAwOwor
ICAgIHJldHVybiBtX3F0TW92aWUtPmR1cmF0aW9uKCk7Cit9CisKK2Zsb2F0IE1lZGlhUGxheWVy
UHJpdmF0ZTo6Y3VycmVudFRpbWUoKSBjb25zdAoreworICAgIGlmICghbV9xdE1vdmllKQorICAg
ICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbV9xdE1vdmllLT5jdXJyZW50VGltZSgpOworfQor
Cit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2VlayhmbG9hdCB0aW1lKQoreworICAgIGNhbmNl
bFNlZWsoKTsKKyAgICAKKyAgICBpZiAoIW1fcXRNb3ZpZSkKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIGlmICh0aW1lID4gZHVyYXRpb24oKSkKKyAgICAgICAgdGltZSA9IGR1cmF0aW9uKCk7
CisgICAgCisgICAgbV9zZWVrVG8gPSB0aW1lOworICAgIGlmIChtYXhUaW1lTG9hZGVkKCkgPj0g
bV9zZWVrVG8pCisgICAgICAgIGRvU2VlaygpOworICAgIGVsc2UgCisgICAgICAgIG1fc2Vla1Rp
bWVyLnN0YXJ0KDAsIDAuNWYpOworfQorICAgIAordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmRv
U2VlaygpIAoreworICAgIGZsb2F0IG9sZFJhdGUgPSBtX3F0TW92aWUtPnJhdGUoKTsKKyAgICBp
ZiAob2xkUmF0ZSkKKyAgICAgICAgbV9xdE1vdmllLT5zZXRSYXRlKDApOworICAgIG1fcXRNb3Zp
ZS0+c2V0Q3VycmVudFRpbWUobV9zZWVrVG8pOworICAgIGZsb2F0IHRpbWVBZnRlclNlZWsgPSBj
dXJyZW50VGltZSgpOworICAgIC8vIHJlc3RvcmUgcGxheWJhY2sgb25seSBpZiBub3QgYXQgZW5k
LCBvdGhld2lzZSBRVE1vdmllIHdpbGwgbG9vcAorICAgIGlmIChvbGRSYXRlICYmIHRpbWVBZnRl
clNlZWsgPCBkdXJhdGlvbigpKQorICAgICAgICBtX3F0TW92aWUtPnNldFJhdGUob2xkUmF0ZSk7
CisgICAgY2FuY2VsU2VlaygpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6Y2FuY2Vs
U2VlaygpCit7CisgICAgbV9zZWVrVG8gPSAtMTsKKyAgICBtX3NlZWtUaW1lci5zdG9wKCk7Cit9
CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZWVrVGltZXJGaXJlZChUaW1lcjxNZWRpYVBs
YXllclByaXZhdGU+KikKK3sgICAgICAgIAorICAgIGlmICghbV9xdE1vdmllIHx8ICFzZWVraW5n
KCkgfHwgY3VycmVudFRpbWUoKSA9PSBtX3NlZWtUbykgeworICAgICAgICBjYW5jZWxTZWVrKCk7
CisgICAgICAgIHVwZGF0ZVN0YXRlcygpOworICAgICAgICBtX3BsYXllci0+dGltZUNoYW5nZWQo
KTsgCisgICAgICAgIHJldHVybjsKKyAgICB9IAorICAgIAorICAgIGlmIChtYXhUaW1lTG9hZGVk
KCkgPj0gbV9zZWVrVG8pCisgICAgICAgIGRvU2VlaygpOworICAgIGVsc2UgeworICAgICAgICBN
ZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIHN0YXRlID0gbmV0d29ya1N0YXRlKCk7CisgICAgICAg
IGlmIChzdGF0ZSA9PSBNZWRpYVBsYXllcjo6RW1wdHkgfHwgc3RhdGUgPT0gTWVkaWFQbGF5ZXI6
OkxvYWRlZCkgeworICAgICAgICAgICAgY2FuY2VsU2VlaygpOworICAgICAgICAgICAgdXBkYXRl
U3RhdGVzKCk7CisgICAgICAgICAgICBtX3BsYXllci0+dGltZUNoYW5nZWQoKTsKKyAgICAgICAg
fQorICAgIH0KK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGU6OnBhdXNlZCgpIGNvbnN0Cit7
CisgICAgaWYgKCFtX3F0TW92aWUpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBt
X3F0TW92aWUtPnJhdGUoKSA9PSAwLjBmOworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6
c2Vla2luZygpIGNvbnN0Cit7CisgICAgaWYgKCFtX3F0TW92aWUpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICByZXR1cm4gbV9zZWVrVG8gPj0gMDsKK30KKworSW50U2l6ZSBNZWRpYVBsYXll
clByaXZhdGU6Om5hdHVyYWxTaXplKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcXRNb3ZpZSkKKyAg
ICAgICAgcmV0dXJuIEludFNpemUoKTsKKyAgICBpbnQgd2lkdGg7CisgICAgaW50IGhlaWdodDsK
KyAgICBtX3F0TW92aWUtPmdldE5hdHVyYWxTaXplKHdpZHRoLCBoZWlnaHQpOworICAgIHJldHVy
biBJbnRTaXplKHdpZHRoLCBoZWlnaHQpOworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6
aGFzVmlkZW8oKSBjb25zdAoreworICAgIGlmICghbV9xdE1vdmllKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgcmV0dXJuIG1fcXRNb3ZpZS0+aGFzVmlkZW8oKTsKK30KKworYm9vbCBNZWRp
YVBsYXllclByaXZhdGU6Omhhc0F1ZGlvKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcXRNb3ZpZSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBtX3F0TW92aWUtPmhhc0F1ZGlvKCk7
Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRWb2x1bWUoZmxvYXQgdm9sdW1lKQor
eworICAgIGlmICghbV9xdE1vdmllKQorICAgICAgICByZXR1cm47CisgICAgbV9xdE1vdmllLT5z
ZXRWb2x1bWUodm9sdW1lKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNldFJhdGUo
ZmxvYXQgcmF0ZSkKK3sKKyAgICBpZiAoIW1fcXRNb3ZpZSkKKyAgICAgICAgcmV0dXJuOworICAg
IG1fcXRNb3ZpZS0+c2V0UmF0ZShyYXRlKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6
OnNldFByZXNlcnZlc1BpdGNoKGJvb2wgcHJlc2VydmVzUGl0Y2gpCit7CisgICAgaWYgKCFtX3F0
TW92aWUpCisgICAgICAgIHJldHVybjsKKyAgICBtX3F0TW92aWUtPnNldFByZXNlcnZlc1BpdGNo
KHByZXNlcnZlc1BpdGNoKTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGU6Omhhc0Nsb3Nl
ZENhcHRpb25zKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcXRNb3ZpZSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIHJldHVybiBtX3F0TW92aWUtPmhhc0Nsb3NlZENhcHRpb25zKCk7Cit9CisK
K3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRDbG9zZWRDYXB0aW9uc1Zpc2libGUoYm9vbCB2
aXNpYmxlKQoreworICAgIGlmICghbV9xdE1vdmllKQorICAgICAgICByZXR1cm47CisgICAgbV9x
dE1vdmllLT5zZXRDbG9zZWRDYXB0aW9uc1Zpc2libGUodmlzaWJsZSk7Cit9CisKK1Bhc3NSZWZQ
dHI8VGltZVJhbmdlcz4gTWVkaWFQbGF5ZXJQcml2YXRlOjpidWZmZXJlZCgpIGNvbnN0Cit7Cisg
ICAgUmVmUHRyPFRpbWVSYW5nZXM+IHRpbWVSYW5nZXMgPSBUaW1lUmFuZ2VzOjpjcmVhdGUoKTsK
KyAgICBmbG9hdCBsb2FkZWQgPSBtYXhUaW1lTG9hZGVkKCk7CisgICAgLy8gcnRzcCBzdHJlYW1z
IGFyZSBub3QgYnVmZmVyZWQKKyAgICBpZiAoIW1faXNTdHJlYW1pbmcgJiYgbG9hZGVkID4gMCkK
KyAgICAgICAgdGltZVJhbmdlcy0+YWRkKDAsIGxvYWRlZCk7CisgICAgcmV0dXJuIHRpbWVSYW5n
ZXMucmVsZWFzZSgpOworfQorCitmbG9hdCBNZWRpYVBsYXllclByaXZhdGU6Om1heFRpbWVTZWVr
YWJsZSgpIGNvbnN0Cit7CisgICAgLy8gaW5maW5pdGUgZHVyYXRpb24gbWVhbnMgbGl2ZSBzdHJl
YW0KKyAgICByZXR1cm4gIWlzZmluaXRlKGR1cmF0aW9uKCkpID8gMCA6IG1heFRpbWVMb2FkZWQo
KTsKK30KKworZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlOjptYXhUaW1lTG9hZGVkKCkgY29uc3QK
K3sKKyAgICBpZiAoIW1fcXRNb3ZpZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG1f
cXRNb3ZpZS0+bWF4VGltZUxvYWRlZCgpOyAKK30KKwordW5zaWduZWQgTWVkaWFQbGF5ZXJQcml2
YXRlOjpieXRlc0xvYWRlZCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3F0TW92aWUpCisgICAgICAg
IHJldHVybiAwOworICAgIGZsb2F0IGR1ciA9IGR1cmF0aW9uKCk7CisgICAgZmxvYXQgbWF4VGlt
ZSA9IG1heFRpbWVMb2FkZWQoKTsKKyAgICBpZiAoIWR1cikKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgcmV0dXJuIHRvdGFsQnl0ZXMoKSAqIG1heFRpbWUgLyBkdXI7Cit9CisKK3Vuc2lnbmVkIE1l
ZGlhUGxheWVyUHJpdmF0ZTo6dG90YWxCeXRlcygpIGNvbnN0Cit7CisgICAgaWYgKCFtX3F0TW92
aWUpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBtX3F0TW92aWUtPmRhdGFTaXplKCk7
Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpjYW5jZWxMb2FkKCkKK3sKKyAgICBpZiAo
bV9uZXR3b3JrU3RhdGUgPCBNZWRpYVBsYXllcjo6TG9hZGluZyB8fCBtX25ldHdvcmtTdGF0ZSA9
PSBNZWRpYVBsYXllcjo6TG9hZGVkKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgdGVhckRv
d25WaWRlb1JlbmRlcmluZygpOworCisgICAgLy8gQ2FuY2VsIHRoZSBsb2FkIGJ5IGRlc3Ryb3lp
bmcgdGhlIG1vdmllLgorICAgIG1fcXRNb3ZpZS5jbGVhcigpOworCisgICAgdXBkYXRlU3RhdGVz
KCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjp1cGRhdGVTdGF0ZXMoKQoreworICAg
IE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgb2xkTmV0d29ya1N0YXRlID0gbV9uZXR3b3JrU3Rh
dGU7CisgICAgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgb2xkUmVhZHlTdGF0ZSA9IG1fcmVhZHlT
dGF0ZTsKKyAgCisgICAgbG9uZyBsb2FkU3RhdGUgPSBtX3F0TW92aWUgPyBtX3F0TW92aWUtPmxv
YWRTdGF0ZSgpIDogUVRNb3ZpZUxvYWRTdGF0ZUVycm9yOworCisgICAgaWYgKGxvYWRTdGF0ZSA+
PSBRVE1vdmllTG9hZFN0YXRlTG9hZGVkICYmIG1fcmVhZHlTdGF0ZSA8IE1lZGlhUGxheWVyOjpI
YXZlTWV0YWRhdGEpIHsKKyAgICAgICAgbV9xdE1vdmllLT5kaXNhYmxlVW5zdXBwb3J0ZWRUcmFj
a3MobV9lbmFibGVkVHJhY2tDb3VudCwgbV90b3RhbFRyYWNrQ291bnQpOworICAgICAgICBpZiAo
bV9wbGF5ZXItPmluTWVkaWFEb2N1bWVudCgpKSB7CisgICAgICAgICAgICBpZiAoIW1fZW5hYmxl
ZFRyYWNrQ291bnQgfHwgbV9lbmFibGVkVHJhY2tDb3VudCAhPSBtX3RvdGFsVHJhY2tDb3VudCkg
eworICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSB0eXBlIG9mIG1lZGlhIHRoYXQgd2UgZG8g
bm90IGhhbmRsZSBkaXJlY3RseSB3aXRoIGEgPHZpZGVvPiAKKyAgICAgICAgICAgICAgICAvLyBl
bGVtZW50LCBlZy4gUXVpY2tUaW1lIFZSLCBhIG1vdmllIHdpdGggYSBzcHJpdGUgdHJhY2ssIGV0
Yy4gVGVsbCB0aGUgCisgICAgICAgICAgICAgICAgLy8gTWVkaWFQbGF5ZXJDbGllbnQgdGhhdCB3
ZSB3b24ndCBzdXBwb3J0IGl0LgorICAgICAgICAgICAgICAgIHNhd1Vuc3VwcG9ydGVkVHJhY2tz
KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9IGVs
c2UgaWYgKCFtX2VuYWJsZWRUcmFja0NvdW50KQorICAgICAgICAgICAgbG9hZFN0YXRlID0gUVRN
b3ZpZUxvYWRTdGF0ZUVycm9yOworICAgIH0KKworICAgIC8vICJMb2FkZWQiIGlzIHJlc2VydmVk
IGZvciBmdWxseSBidWZmZXJlZCBtb3ZpZXMsIG5ldmVyIHRoZSBjYXNlIHdoZW4gc3RyZWFtaW5n
CisgICAgaWYgKGxvYWRTdGF0ZSA+PSBRVE1vdmllTG9hZFN0YXRlQ29tcGxldGUgJiYgIW1faXNT
dHJlYW1pbmcpIHsKKyAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TG9hZGVk
OworICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUVub3VnaERhdGE7Cisg
ICAgfSBlbHNlIGlmIChsb2FkU3RhdGUgPj0gUVRNb3ZpZUxvYWRTdGF0ZVBsYXl0aHJvdWdoT0sp
IHsKKyAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVFbm91Z2hEYXRhOwor
ICAgIH0gZWxzZSBpZiAobG9hZFN0YXRlID49IFFUTW92aWVMb2FkU3RhdGVQbGF5YWJsZSkgewor
ICAgICAgICAvLyBGSVhNRTogVGhpcyBtaWdodCBub3Qgd29yayBjb3JyZWN0bHkgaW4gc3RyZWFt
aW5nIGNhc2UsIDxyZGFyOi8vcHJvYmxlbS81NjkzOTY3PgorICAgICAgICBtX3JlYWR5U3RhdGUg
PSBjdXJyZW50VGltZSgpIDwgbWF4VGltZUxvYWRlZCgpID8gTWVkaWFQbGF5ZXI6OkhhdmVGdXR1
cmVEYXRhIDogTWVkaWFQbGF5ZXI6OkhhdmVDdXJyZW50RGF0YTsKKyAgICB9IGVsc2UgaWYgKGxv
YWRTdGF0ZSA+PSBRVE1vdmllTG9hZFN0YXRlTG9hZGVkKSB7CisgICAgICAgIG1fcmVhZHlTdGF0
ZSA9IE1lZGlhUGxheWVyOjpIYXZlTWV0YWRhdGE7CisgICAgfSBlbHNlIGlmIChsb2FkU3RhdGUg
PiBRVE1vdmllTG9hZFN0YXRlRXJyb3IpIHsKKyAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRp
YVBsYXllcjo6TG9hZGluZzsKKyAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6Okhh
dmVOb3RoaW5nOyAgICAgICAgCisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG1fcGxheWVyLT5p
bk1lZGlhRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgLy8gU29tZXRoaW5nIHdlbnQgd3Jvbmcg
aW4gdGhlIGxvYWRpbmcgb2YgbWVkaWEgd2l0aGluIGEgc3RhbmRhbG9uZSBmaWxlLiAKKyAgICAg
ICAgICAgIC8vIFRoaXMgY2FuIG9jY3VyIHdpdGggY2hhaW5lZCByZWYgbW92aWVzIHRoYXQgZXZl
bnR1YWxseSByZXNvbHZlIHRvIGEKKyAgICAgICAgICAgIC8vIGZpbGUgd2UgZG9uJ3Qgc3VwcG9y
dC4KKyAgICAgICAgICAgIHNhd1Vuc3VwcG9ydGVkVHJhY2tzKCk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBmbG9hdCBsb2FkZWQgPSBtYXhUaW1lTG9hZGVkKCk7
CisgICAgICAgIGlmICghbG9hZGVkKQorICAgICAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQ
bGF5ZXI6OkhhdmVOb3RoaW5nOworCisgICAgICAgIGlmICghbV9lbmFibGVkVHJhY2tDb3VudCkK
KyAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkZvcm1hdEVycm9yOwor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZGlmZmVyZW50
aWF0ZSBiZXR3ZWVuIGxvYWQvbmV0d29yayBlcnJvcnMgYW5kIGRlY29kZSBlcnJvcnMgPHJkYXI6
Ly9wcm9ibGVtLzU2MDU2OTI+CisgICAgICAgICAgICBpZiAobG9hZGVkID4gMCkKKyAgICAgICAg
ICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpEZWNvZGVFcnJvcjsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6
SGF2ZU5vdGhpbmc7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoaXNSZWFkeUZvclJlbmRl
cmluZygpICYmICFoYXNTZXRVcFZpZGVvUmVuZGVyaW5nKCkpCisgICAgICAgIHNldFVwVmlkZW9S
ZW5kZXJpbmcoKTsKKworICAgIGlmIChzZWVraW5nKCkpCisgICAgICAgIG1fcmVhZHlTdGF0ZSA9
IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZzsKKyAgICAKKyAgICBpZiAobV9uZXR3b3JrU3RhdGUg
IT0gb2xkTmV0d29ya1N0YXRlKQorICAgICAgICBtX3BsYXllci0+bmV0d29ya1N0YXRlQ2hhbmdl
ZCgpOworICAgIGlmIChtX3JlYWR5U3RhdGUgIT0gb2xkUmVhZHlTdGF0ZSkKKyAgICAgICAgbV9w
bGF5ZXItPnJlYWR5U3RhdGVDaGFuZ2VkKCk7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRl
Ojppc1JlYWR5Rm9yUmVuZGVyaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9yZWFkeVN0YXRl
ID49IE1lZGlhUGxheWVyOjpIYXZlTWV0YWRhdGEgJiYgbV9wbGF5ZXItPnZpc2libGUoKTsKK30K
Kwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNhd1Vuc3VwcG9ydGVkVHJhY2tzKCkKK3sKKyAg
ICBtX3F0TW92aWUtPnNldERpc2FibGVkKHRydWUpOworICAgIG1faGFzVW5zdXBwb3J0ZWRUcmFj
a3MgPSB0cnVlOworICAgIG1fcGxheWVyLT5tZWRpYVBsYXllckNsaWVudCgpLT5tZWRpYVBsYXll
clNhd1Vuc3VwcG9ydGVkVHJhY2tzKG1fcGxheWVyKTsKK30KKwordm9pZCBNZWRpYVBsYXllclBy
aXZhdGU6OmRpZEVuZCgpCit7CisgICAgaWYgKG1faGFzVW5zdXBwb3J0ZWRUcmFja3MpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fc3RhcnRlZFBsYXlpbmcgPSBmYWxzZTsKKyNpZiBEUkFXX0ZS
QU1FX1JBVEUKKyAgICBtX3RpbWVTdG9wcGVkUGxheWluZyA9IFdURjo6Y3VycmVudFRpbWUoKTsK
KyNlbmRpZgorICAgIHVwZGF0ZVN0YXRlcygpOworICAgIG1fcGxheWVyLT50aW1lQ2hhbmdlZCgp
OworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0U2l6ZShjb25zdCBJbnRTaXplJiBz
aXplKSAKK3sgCisgICAgaWYgKG1faGFzVW5zdXBwb3J0ZWRUcmFja3MgfHwgIW1fcXRNb3ZpZSB8
fCBtX3NpemUgPT0gc2l6ZSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fc2l6ZSA9IHNpemU7Cisg
ICAgbV9xdE1vdmllLT5zZXRTaXplKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Cit9CisK
K3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKK3sKKyAg
ICBpZiAobV9oYXNVbnN1cHBvcnRlZFRyYWNrcyB8fCAhbV9xdE1vdmllIHx8IG1fdmlzaWJsZSA9
PSB2aXNpYmxlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3F0TW92aWUtPnNldFZpc2libGUo
dmlzaWJsZSk7CisgICAgbV92aXNpYmxlID0gdmlzaWJsZTsKKyAgICBpZiAobV92aXNpYmxlKSB7
CisgICAgICAgIGlmIChpc1JlYWR5Rm9yUmVuZGVyaW5nKCkpCisgICAgICAgICAgICBzZXRVcFZp
ZGVvUmVuZGVyaW5nKCk7CisgICAgfSBlbHNlCisgICAgICAgIHRlYXJEb3duVmlkZW9SZW5kZXJp
bmcoKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnBhaW50KEdyYXBoaWNzQ29udGV4
dCogcCwgY29uc3QgSW50UmVjdCYgcikKK3sKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCisgICAgaWYgKG1fcXRWaWRlb0xheWVyKQorICAgICAgICByZXR1cm47CisjZW5kaWYKKyAg
ICBpZiAocC0+cGFpbnRpbmdEaXNhYmxlZCgpIHx8ICFtX3F0TW92aWUgfHwgbV9oYXNVbnN1cHBv
cnRlZFRyYWNrcykKKyAgICAgICAgcmV0dXJuOworCisgICAgYm9vbCB1c2luZ1RlbXBCaXRtYXAg
PSBmYWxzZTsKKyAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0OjpXaW5kb3dzQml0bWFwPiBiaXRt
YXA7CisgICAgSERDIGhkYyA9IHAtPmdldFdpbmRvd3NDb250ZXh0KHIpOworICAgIGlmICghaGRj
KSB7CisgICAgICAgIC8vIFRoZSBncmFwaGljcyBjb250ZXh0IGRvZXNuJ3QgaGF2ZSBhbiBhc3Nv
Y2lhdGVkIEhEQyBzbyBjcmVhdGUgYSB0ZW1wb3JhcnkKKyAgICAgICAgLy8gYml0bWFwIHdoZXJl
IFFUTW92aWVXaW4gY2FuIGRyYXcgdGhlIGZyYW1lIGFuZCB3ZSBjYW4gY29weSBpdC4KKyAgICAg
ICAgdXNpbmdUZW1wQml0bWFwID0gdHJ1ZTsKKyAgICAgICAgYml0bWFwLnNldChwLT5jcmVhdGVX
aW5kb3dzQml0bWFwKHIuc2l6ZSgpKSk7CisgICAgICAgIGhkYyA9IGJpdG1hcC0+aGRjKCk7CisK
KyAgICAgICAgLy8gRklYTUU6IGlzIHRoaXMgbmVjZXNzYXJ5Pz8KKyAgICAgICAgWEZPUk0geGZv
cm07CisgICAgICAgIHhmb3JtLmVNMTEgPSAxLjBmOworICAgICAgICB4Zm9ybS5lTTEyID0gMC4w
ZjsKKyAgICAgICAgeGZvcm0uZU0yMSA9IDAuMGY7CisgICAgICAgIHhmb3JtLmVNMjIgPSAxLjBm
OworICAgICAgICB4Zm9ybS5lRHggPSAtci54KCk7CisgICAgICAgIHhmb3JtLmVEeSA9IC1yLnko
KTsKKyAgICAgICAgU2V0V29ybGRUcmFuc2Zvcm0oaGRjLCAmeGZvcm0pOworICAgIH0KKworICAg
IG1fcXRNb3ZpZS0+cGFpbnQoaGRjLCByLngoKSwgci55KCkpOworICAgIGlmICh1c2luZ1RlbXBC
aXRtYXApCisgICAgICAgIHAtPmRyYXdXaW5kb3dzQml0bWFwKGJpdG1hcC5nZXQoKSwgci50b3BM
ZWZ0KCkpOworICAgIGVsc2UKKyAgICAgICAgcC0+cmVsZWFzZVdpbmRvd3NDb250ZXh0KGhkYywg
cik7CisKKyAgICBwYWludENvbXBsZXRlZCgqcCwgcik7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlOjpwYWludENvbXBsZXRlZChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IElu
dFJlY3QmIHJlY3QpCit7CisgICAgbV9uZXdGcmFtZUF2YWlsYWJsZSA9IGZhbHNlOworCisjaWYg
RFJBV19GUkFNRV9SQVRFCisgICAgaWYgKG1fZnJhbWVDb3VudFdoaWxlUGxheWluZyA+IDEwKSB7
CisgICAgICAgIGRvdWJsZSBpbnRlcnZhbCA9ICBtX3N0YXJ0ZWRQbGF5aW5nID8gV1RGOjpjdXJy
ZW50VGltZSgpIC0gbV90aW1lU3RhcnRlZFBsYXlpbmcgOiBtX3RpbWVTdG9wcGVkUGxheWluZyAt
IG1fdGltZVN0YXJ0ZWRQbGF5aW5nOworICAgICAgICBkb3VibGUgZnJhbWVSYXRlID0gKG1fZnJh
bWVDb3VudFdoaWxlUGxheWluZyAtIDEpIC8gaW50ZXJ2YWw7CisgICAgICAgIENHQ29udGV4dFJl
ZiBjZ0NvbnRleHQgPSBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOworICAgICAgICBDR1JlY3Qg
ZHJhd1JlY3QgPSByZWN0OworCisgICAgICAgIGNoYXIgdGV4dFs4XTsKKyAgICAgICAgX3NucHJp
bnRmKHRleHQsIHNpemVvZih0ZXh0KSwgIiUxLjJmIiwgZnJhbWVSYXRlKTsKKworICAgICAgICBz
dGF0aWMgY29uc3QgaW50IGZvbnRTaXplID0gMjU7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQg
Zm9udENoYXJXaWR0aCA9IDEyOworICAgICAgICBzdGF0aWMgY29uc3QgaW50IGJveEhlaWdodCA9
IDI1OworICAgICAgICBzdGF0aWMgY29uc3QgaW50IGJveEJvcmRlcldpZHRoID0gNDsKKyAgICAg
ICAgZHJhd1JlY3Quc2l6ZS53aWR0aCA9IGJveEJvcmRlcldpZHRoICogMiArIGZvbnRDaGFyV2lk
dGggKiBzdHJsZW4odGV4dCk7CisgICAgICAgIGRyYXdSZWN0LnNpemUuaGVpZ2h0ID0gYm94SGVp
Z2h0OworCisgICAgICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY2dDb250ZXh0KTsKKyNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgICAgIGlmIChtX3F0VmlkZW9MYXllcikKKyAg
ICAgICAgICAgIENHQ29udGV4dFNjYWxlQ1RNKGNnQ29udGV4dCwgMSwgLTEpOworICAgICAgICBD
R0NvbnRleHRUcmFuc2xhdGVDVE0oY2dDb250ZXh0LCByZWN0LndpZHRoKCkgLSBkcmF3UmVjdC5z
aXplLndpZHRoLCBtX3F0VmlkZW9MYXllciA/IC1yZWN0LmhlaWdodCgpIDogMCk7CisjZWxzZQor
ICAgICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY2dDb250ZXh0LCByZWN0LndpZHRoKCkgLSBk
cmF3UmVjdC5zaXplLndpZHRoLCAwKTsKKyNlbmRpZgorICAgICAgICBzdGF0aWMgY29uc3QgQ0dG
bG9hdCBiYWNrZ3JvdW5kQ29sb3JbNF0gPSB7IDAuOTgsIDAuOTgsIDAuODIsIDAuOCB9OworICAg
ICAgICBDR0NvbnRleHRTZXRGaWxsQ29sb3IoY2dDb250ZXh0LCBiYWNrZ3JvdW5kQ29sb3IpOwor
ICAgICAgICBDR0NvbnRleHRGaWxsUmVjdChjZ0NvbnRleHQsIGRyYXdSZWN0KTsKKworICAgICAg
ICBzdGF0aWMgY29uc3QgQ0dGbG9hdCB0ZXh0Q29sb3JbNF0gPSB7IDAsIDAsIDAsIDEgfTsKKyAg
ICAgICAgQ0dDb250ZXh0U2V0RmlsbENvbG9yKGNnQ29udGV4dCwgdGV4dENvbG9yKTsKKyAgICAg
ICAgQ0dDb250ZXh0U2V0VGV4dE1hdHJpeChjZ0NvbnRleHQsIENHQWZmaW5lVHJhbnNmb3JtTWFr
ZVNjYWxlKDEsIC0xKSk7CisgICAgICAgIENHQ29udGV4dFNlbGVjdEZvbnQoY2dDb250ZXh0LCAi
SGVsdmV0aWNhIiwgZm9udFNpemUsIGtDR0VuY29kaW5nTWFjUm9tYW4pOworCisgICAgICAgIENH
Q29udGV4dFNob3dUZXh0QXRQb2ludChjZ0NvbnRleHQsIGRyYXdSZWN0Lm9yaWdpbi54ICsgYm94
Qm9yZGVyV2lkdGgsIGRyYXdSZWN0Lm9yaWdpbi55ICsgYm94SGVpZ2h0IC0gYm94Qm9yZGVyV2lk
dGgsIHRleHQsIHN0cmxlbih0ZXh0KSk7CisgICAgICAgIAorICAgICAgICBDR0NvbnRleHRSZXN0
b3JlR1N0YXRlKGNnQ29udGV4dCk7ICAgICAgICAKKyAgICB9CisjZW5kaWYKK30KKworc3RhdGlj
IEhhc2hTZXQ8U3RyaW5nPiBtaW1lVHlwZUNhY2hlKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKEhhc2hTZXQ8U3RyaW5nPiwgdHlwZUNhY2hlLCAoKSk7CisgICAgc3RhdGljIGJvb2wgdHlw
ZUxpc3RJbml0aWFsaXplZCA9IGZhbHNlOworCisgICAgaWYgKCF0eXBlTGlzdEluaXRpYWxpemVk
KSB7CisgICAgICAgIHVuc2lnbmVkIGNvdW50ID0gUVRNb3ZpZVdpbjo6Y291bnRTdXBwb3J0ZWRU
eXBlcygpOworICAgICAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgY291bnQ7IG4rKykgewor
ICAgICAgICAgICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcjsKKyAgICAgICAgICAgIHVuc2lnbmVk
IGxlbjsKKyAgICAgICAgICAgIFFUTW92aWVXaW46OmdldFN1cHBvcnRlZFR5cGUobiwgY2hhcmFj
dGVyLCBsZW4pOworICAgICAgICAgICAgaWYgKGxlbikKKyAgICAgICAgICAgICAgICB0eXBlQ2Fj
aGUuYWRkKFN0cmluZyhjaGFyYWN0ZXIsIGxlbikpOworICAgICAgICB9CisKKyAgICAgICAgdHlw
ZUxpc3RJbml0aWFsaXplZCA9IHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiB0eXBlQ2Fj
aGU7Cit9IAorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6Z2V0U3VwcG9ydGVkVHlwZXMoSGFz
aFNldDxTdHJpbmc+JiB0eXBlcykKK3sKKyAgICB0eXBlcyA9IG1pbWVUeXBlQ2FjaGUoKTsKK30g
CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlOjppc0F2YWlsYWJsZSgpCit7CisgICAgcmV0dXJu
IFFUTW92aWVXaW46OmluaXRpYWxpemVRdWlja1RpbWUoKTsKK30KKworTWVkaWFQbGF5ZXI6OlN1
cHBvcnRzVHlwZSBNZWRpYVBsYXllclByaXZhdGU6OnN1cHBvcnRzVHlwZShjb25zdCBTdHJpbmcm
IHR5cGUsIGNvbnN0IFN0cmluZyYgY29kZWNzKQoreworICAgIC8vIG9ubHkgcmV0dXJuICJJc1N1
cHBvcnRlZCIgaWYgdGhlcmUgaXMgbm8gY29kZWNzIHBhcmFtZXRlciBmb3Igbm93IGFzIHRoZXJl
IGlzIG5vIHdheSB0byBhc2sgUVQgaWYgaXQgc3VwcG9ydHMgYW4KKyAgICAvLyAgZXh0ZW5kZWQg
TUlNRSB0eXBlCisgICAgcmV0dXJuIG1pbWVUeXBlQ2FjaGUoKS5jb250YWlucyh0eXBlKSA/IChj
b2RlY3MuaXNFbXB0eSgpID8gTWVkaWFQbGF5ZXI6Ok1heUJlU3VwcG9ydGVkIDogTWVkaWFQbGF5
ZXI6OklzU3VwcG9ydGVkKSA6IE1lZGlhUGxheWVyOjpJc05vdFN1cHBvcnRlZDsKK30KKwordm9p
ZCBNZWRpYVBsYXllclByaXZhdGU6Om1vdmllRW5kZWQoUVRNb3ZpZVdpbiogbW92aWUpCit7Cisg
ICAgaWYgKG1faGFzVW5zdXBwb3J0ZWRUcmFja3MpCisgICAgICAgIHJldHVybjsKKworICAgIEFT
U0VSVChtX3F0TW92aWUuZ2V0KCkgPT0gbW92aWUpOworICAgIGRpZEVuZCgpOworfQorCit2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZTo6bW92aWVMb2FkU3RhdGVDaGFuZ2VkKFFUTW92aWVXaW4qIG1v
dmllKQoreworICAgIGlmIChtX2hhc1Vuc3VwcG9ydGVkVHJhY2tzKQorICAgICAgICByZXR1cm47
CisKKyAgICBBU1NFUlQobV9xdE1vdmllLmdldCgpID09IG1vdmllKTsKKyAgICB1cGRhdGVTdGF0
ZXMoKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6Om1vdmllVGltZUNoYW5nZWQoUVRN
b3ZpZVdpbiogbW92aWUpCit7CisgICAgaWYgKG1faGFzVW5zdXBwb3J0ZWRUcmFja3MpCisgICAg
ICAgIHJldHVybjsKKworICAgIEFTU0VSVChtX3F0TW92aWUuZ2V0KCkgPT0gbW92aWUpOworICAg
IHVwZGF0ZVN0YXRlcygpOworICAgIG1fcGxheWVyLT50aW1lQ2hhbmdlZCgpOworfQorCit2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZTo6bW92aWVOZXdJbWFnZUF2YWlsYWJsZShRVE1vdmllV2luKiBt
b3ZpZSkKK3sKKyAgICBpZiAobV9oYXNVbnN1cHBvcnRlZFRyYWNrcykKKyAgICAgICAgcmV0dXJu
OworCisgICAgQVNTRVJUKG1fcXRNb3ZpZS5nZXQoKSA9PSBtb3ZpZSk7CisjaWYgRFJBV19GUkFN
RV9SQVRFCisgICAgaWYgKG1fc3RhcnRlZFBsYXlpbmcpIHsKKyAgICAgICAgbV9mcmFtZUNvdW50
V2hpbGVQbGF5aW5nKys7CisgICAgICAgIC8vIFRvIGVsaW1pbmF0ZSBwcmVyb2xsIGNvc3RzIGZy
b20gb3VyIGNhbGN1bGF0aW9uLCBvdXIgZnJhbWUgcmF0ZSBjYWxjdWxhdGlvbiBleGNsdWRlcwor
ICAgICAgICAvLyB0aGUgZmlyc3QgZnJhbWUgZHJhd24gYWZ0ZXIgcGxheWJhY2sgc3RhcnRzLgor
ICAgICAgICBpZiAobV9mcmFtZUNvdW50V2hpbGVQbGF5aW5nID09IDEpCisgICAgICAgICAgICBt
X3RpbWVTdGFydGVkUGxheWluZyA9IFdURjo6Y3VycmVudFRpbWUoKTsKKyAgICB9CisjZW5kaWYK
KworICAgIG1fbmV3RnJhbWVBdmFpbGFibGUgPSB0cnVlOworCisjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQorICAgIGlmIChtX3F0VmlkZW9MYXllcikKKyAgICAgICAgbV9xdFZpZGVv
TGF5ZXItPnBsYXRmb3JtTGF5ZXIoKS0+c2V0TmVlZHNEaXNwbGF5KCk7CisgICAgZWxzZQorI2Vu
ZGlmCisgICAgICAgIG1fcGxheWVyLT5yZXBhaW50KCk7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQ
cml2YXRlOjpoYXNTaW5nbGVTZWN1cml0eU9yaWdpbigpIGNvbnN0Cit7CisgICAgLy8gV2UgdGVs
bCBxdWlja3RpbWUgdG8gZGlzYWxsb3cgcmVzb3VyY2VzIHRoYXQgY29tZSBmcm9tIGRpZmZlcmVu
dCBvcmlnaW5zCisgICAgLy8gc28gd2UgYWxsIG1lZGlhIGlzIHNpbmdsZSBvcmlnaW4uCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK01lZGlhUGxheWVyUHJpdmF0ZTo6TWVkaWFSZW5kZXJpbmdNb2Rl
IE1lZGlhUGxheWVyUHJpdmF0ZTo6Y3VycmVudFJlbmRlcmluZ01vZGUoKSBjb25zdAoreworICAg
IGlmICghbV9xdE1vdmllKQorICAgICAgICByZXR1cm4gTWVkaWFSZW5kZXJpbmdOb25lOworCisj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIGlmIChtX3F0VmlkZW9MYXllcikK
KyAgICAgICAgcmV0dXJuIE1lZGlhUmVuZGVyaW5nTW92aWVMYXllcjsKKyNlbmRpZgorCisgICAg
cmV0dXJuIE1lZGlhUmVuZGVyaW5nU29mdHdhcmVSZW5kZXJlcjsKK30KKworTWVkaWFQbGF5ZXJQ
cml2YXRlOjpNZWRpYVJlbmRlcmluZ01vZGUgTWVkaWFQbGF5ZXJQcml2YXRlOjpwcmVmZXJyZWRS
ZW5kZXJpbmdNb2RlKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcGxheWVyLT5mcmFtZVZpZXcoKSB8
fCAhbV9xdE1vdmllKQorICAgICAgICByZXR1cm4gTWVkaWFSZW5kZXJpbmdOb25lOworCisjaWYg
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIGlmIChzdXBwb3J0c0FjY2VsZXJhdGVk
UmVuZGVyaW5nKCkgJiYgbV9wbGF5ZXItPm1lZGlhUGxheWVyQ2xpZW50KCktPm1lZGlhUGxheWVy
UmVuZGVyaW5nQ2FuQmVBY2NlbGVyYXRlZChtX3BsYXllcikpCisgICAgICAgIHJldHVybiBNZWRp
YVJlbmRlcmluZ01vdmllTGF5ZXI7CisjZW5kaWYKKworICAgIHJldHVybiBNZWRpYVJlbmRlcmlu
Z1NvZnR3YXJlUmVuZGVyZXI7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRVcFZp
ZGVvUmVuZGVyaW5nKCkKK3sKKyAgICBNZWRpYVJlbmRlcmluZ01vZGUgY3VycmVudE1vZGUgPSBj
dXJyZW50UmVuZGVyaW5nTW9kZSgpOworICAgIE1lZGlhUmVuZGVyaW5nTW9kZSBwcmVmZXJyZWRN
b2RlID0gcHJlZmVycmVkUmVuZGVyaW5nTW9kZSgpOworCisjaWYgIVVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKKyAgICBBU1NFUlQocHJlZmVycmVkTW9kZSAhPSBNZWRpYVJlbmRlcmluZ01v
dmllTGF5ZXIpOworI2VuZGlmCisKKyAgICBpZiAoY3VycmVudE1vZGUgPT0gcHJlZmVycmVkTW9k
ZSAmJiBjdXJyZW50TW9kZSAhPSBNZWRpYVJlbmRlcmluZ05vbmUpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmIChjdXJyZW50TW9kZSAhPSBNZWRpYVJlbmRlcmluZ05vbmUpICAKKyAgICAgICAg
dGVhckRvd25WaWRlb1JlbmRlcmluZygpOworCisgICAgaWYgKHByZWZlcnJlZE1vZGUgPT0gTWVk
aWFSZW5kZXJpbmdNb3ZpZUxheWVyKQorICAgICAgICBjcmVhdGVMYXllckZvck1vdmllKCk7CisK
KyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgaWYgKGN1cnJlbnRNb2RlID09
IE1lZGlhUmVuZGVyaW5nTW92aWVMYXllciB8fCBwcmVmZXJyZWRNb2RlID09IE1lZGlhUmVuZGVy
aW5nTW92aWVMYXllcikKKyAgICAgICAgbV9wbGF5ZXItPm1lZGlhUGxheWVyQ2xpZW50KCktPm1l
ZGlhUGxheWVyUmVuZGVyaW5nTW9kZUNoYW5nZWQobV9wbGF5ZXIpOworI2VuZGlmCit9CisKK3Zv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlOjp0ZWFyRG93blZpZGVvUmVuZGVyaW5nKCkKK3sKKyNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgaWYgKG1fcXRWaWRlb0xheWVyKQorICAg
ICAgICBkZXN0cm95TGF5ZXJGb3JNb3ZpZSgpOworI2VuZGlmCit9CisKK2Jvb2wgTWVkaWFQbGF5
ZXJQcml2YXRlOjpoYXNTZXRVcFZpZGVvUmVuZGVyaW5nKCkgY29uc3QKK3sKKyNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgcmV0dXJuIG1fcXRWaWRlb0xheWVyIHx8IGN1cnJl
bnRSZW5kZXJpbmdNb2RlKCkgIT0gTWVkaWFSZW5kZXJpbmdNb3ZpZUxheWVyOworI2Vsc2UKKyAg
ICByZXR1cm4gdHJ1ZTsKKyNlbmRpZgorfQorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQorCisvLyBVcC1jYWxsIGZyb20gY29tcG9zaXRpbmcgbGF5ZXIgZHJhd2luZyBjYWxsYmFj
ay4KK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpwYWludENvbnRlbnRzKGNvbnN0IEdyYXBoaWNz
TGF5ZXIqLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIEdyYXBoaWNzTGF5ZXJQYWludGluZ1Bo
YXNlLCBjb25zdCBJbnRSZWN0JikKK3sKKyAgICAgaWYgKG1faGFzVW5zdXBwb3J0ZWRUcmFja3Mp
CisgICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQoc3VwcG9ydHNBY2NlbGVyYXRlZFJlbmRl
cmluZygpKTsKKworICAgIC8vIE5vIHJlYXNvbiB0byByZXBsYWNlIHRoZSBjdXJyZW50IGxheWVy
IGltYWdlIHVubGVzcyB3ZSBoYXZlIHNvbWV0aGluZyBuZXcgdG8gc2hvdy4KKyAgICBpZiAoIW1f
bmV3RnJhbWVBdmFpbGFibGUpCisgICAgICAgIHJldHVybjsKKworICAgIHN0YXRpYyBDR0NvbG9y
U3BhY2VSZWYgY29sb3JTcGFjZSA9IENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpOworICAg
IHZvaWQqIGJ1ZmZlcjsKKyAgICB1bnNpZ25lZCBiaXRzUGVyUGl4ZWw7CisgICAgdW5zaWduZWQg
cm93Qnl0ZXM7CisgICAgdW5zaWduZWQgd2lkdGg7CisgICAgdW5zaWduZWQgaGVpZ2h0OworCisg
ICAgbV9xdE1vdmllLT5nZXRDdXJyZW50RnJhbWVJbmZvKGJ1ZmZlciwgYml0c1BlclBpeGVsLCBy
b3dCeXRlcywgd2lkdGgsIGhlaWdodCk7CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVy
biA7CisKKyAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBkYXRhKEFkb3B0Q0YsIENGRGF0YUNyZWF0
ZVdpdGhCeXRlc05vQ29weSgwLCBzdGF0aWNfY2FzdDxVSW50OCo+KGJ1ZmZlciksIHJvd0J5dGVz
ICogaGVpZ2h0LCBrQ0ZBbGxvY2F0b3JOdWxsKSk7CisgICAgUmV0YWluUHRyPENHRGF0YVByb3Zp
ZGVyUmVmPiBwcm92aWRlcihBZG9wdENGLCBDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhDRkRhdGEo
ZGF0YS5nZXQoKSkpOworICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBmcmFtZUltYWdlKEFkb3B0
Q0YsIENHSW1hZ2VDcmVhdGUod2lkdGgsIGhlaWdodCwgOCwgYml0c1BlclBpeGVsLCByb3dCeXRl
cywgY29sb3JTcGFjZSwgCisgICAgICAgIGtDR0JpdG1hcEJ5dGVPcmRlcjMyTGl0dGxlIHwga0NH
SW1hZ2VBbHBoYUZpcnN0LCBwcm92aWRlci5nZXQoKSwgMCwgZmFsc2UsIGtDR1JlbmRlcmluZ0lu
dGVudERlZmF1bHQpKTsKKyAgICBpZiAoIWZyYW1lSW1hZ2UpCisgICAgICAgIHJldHVybjsKKwor
ICAgIEludFJlY3QgcmVjdCgwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsK
KyAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwg
ZnJhbWVJbWFnZS5nZXQoKSk7IAorICAgIHBhaW50Q29tcGxldGVkKGNvbnRleHQsIHJlY3QpOwor
fQorI2VuZGlmCisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpjcmVhdGVMYXllckZvck1vdmll
KCkKK3sKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgQVNTRVJUKHN1cHBv
cnRzQWNjZWxlcmF0ZWRSZW5kZXJpbmcoKSk7CisKKyAgICBpZiAoIW1fcXRNb3ZpZSB8fCBtX3F0
VmlkZW9MYXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gQ3JlYXRlIGEgR3JhcGhpY3NM
YXllciB0aGF0IHdvbid0IGJlIGluc2VydGVkIGRpcmVjdGx5IGludG8gdGhlIHJlbmRlciB0cmVl
LCBidXQgd2lsbCB1c2VkIAorICAgIC8vIGFzIGEgd3JhcHBlciBmb3IgYSBXS0NBQ0ZMYXllciB3
aGljaCBnZXRzIGluc2VydGVkIGFzIHRoZSBjb250ZW50IGxheWVyIG9mIHRoZSB2aWRlbyAKKyAg
ICAvLyByZW5kZXJlcidzIEdyYXBoaWNzTGF5ZXIuCisgICAgbV9xdFZpZGVvTGF5ZXIuc2V0KG5l
dyBHcmFwaGljc0xheWVyQ0FDRih0aGlzKSk7CisgICAgaWYgKCFtX3F0VmlkZW9MYXllcikKKyAg
ICAgICAgcmV0dXJuOworCisgICAgLy8gTWFyayB0aGUgbGF5ZXIgYXMgZHJhd2luZyBpdHNlbGYs
IGFuY2hvcmVkIGluIHRoZSB0b3AgbGVmdCwgYW5kIGJvdHRvbS11cC4KKyAgICBtX3F0VmlkZW9M
YXllci0+c2V0RHJhd3NDb250ZW50KHRydWUpOworICAgIG1fcXRWaWRlb0xheWVyLT5zZXRBbmNo
b3JQb2ludChGbG9hdFBvaW50M0QoKSk7CisgICAgbV9xdFZpZGVvTGF5ZXItPnNldENvbnRlbnRz
T3JpZW50YXRpb24oR3JhcGhpY3NMYXllcjo6Q29tcG9zaXRpbmdDb29yZGluYXRlc0JvdHRvbVVw
KTsKKyNpZm5kZWYgTkRFQlVHCisgICAgbV9xdFZpZGVvTGF5ZXItPnNldE5hbWUoIlZpZGVvIGxh
eWVyIik7CisjZW5kaWYKKyAgICAvLyBUaGUgbGF5ZXIgd2lsbCBnZXQgaG9va2VkIHVwIHZpYSBS
ZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdyYXBoaWNzTGF5ZXJDb25maWd1cmF0aW9uKCkuCisj
ZW5kaWYKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmRlc3Ryb3lMYXllckZvck1vdmll
KCkKK3sKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgaWYgKCFtX3F0Vmlk
ZW9MYXllcikKKyAgICAgICAgcmV0dXJuOworICAgIG1fcXRWaWRlb0xheWVyID0gMDsKKyNlbmRp
ZgorfQorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorYm9vbCBNZWRpYVBsYXll
clByaXZhdGU6OnN1cHBvcnRzQWNjZWxlcmF0ZWRSZW5kZXJpbmcoKSBjb25zdAoreworICAgIHJl
dHVybiBpc1JlYWR5Rm9yUmVuZGVyaW5nKCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
OjphY2NlbGVyYXRlZFJlbmRlcmluZ1N0YXRlQ2hhbmdlZCgpCit7CisgICAgLy8gU2V0IHVwIG9y
IGNoYW5nZSB0aGUgcmVuZGVyaW5nIHBhdGggaWYgbmVjZXNzYXJ5LgorICAgIHNldFVwVmlkZW9S
ZW5kZXJpbmcoKTsKK30KKworI2VuZGlmCisKKworfQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENv
bnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01l
ZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQuY3BwCShyZXZpc2lvbiA1ODE4
NykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1
aWNrVGltZVZpc3VhbENvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw4IEBA
CiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAj
aW5jbHVkZSAiS1VSTC5oIgotI2luY2x1ZGUgIlFUTW92aWVXaW4uaCIKKyNpbmNsdWRlICJNZWRp
YVBsYXllclByaXZhdGVUYXNrVGltZXIuaCIKKyNpbmNsdWRlICJRVE1vdmllVGFzay5oIgogI2lu
Y2x1ZGUgIlNjcm9sbFZpZXcuaCIKICNpbmNsdWRlICJTb2Z0TGlua2luZy5oIgogI2luY2x1ZGUg
IlN0cmluZ0J1aWxkZXIuaCIKQEAgLTUzLDEwICs1NCw4IEBACiAjZW5kaWYKIAogI2lmIERSQVdf
RlJBTUVfUkFURQotI2luY2x1ZGUgIkZvbnQuaCIKLSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNp
bmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRm9udC5o
IgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAj
aW5jbHVkZSAiV2luZG93cy5oIgpAQCAtMTA0LDYgKzEwMyw3IEBAIE1lZGlhUGxheWVyUHJpdmF0
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlKE0KIE1lZGlhUGxheWVyUHJpdmF0ZTo6fk1lZGlhUGxheWVy
UHJpdmF0ZSgpCiB7CiAgICAgdGVhckRvd25WaWRlb1JlbmRlcmluZygpOworICAgIG1fcXRNb3Zp
ZVdpbi0+c2V0TW92aWUoMCk7CiB9CiAKIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlOjpzdXBwb3J0
c0Z1bGxzY3JlZW4oKSBjb25zdApAQCAtMTI1LDUwICsxMjUsNiBAQCBQbGF0Zm9ybUxheWVyKiBN
ZWRpYVBsYXllclByaXZhdGU6OnBsYXRmCiB9CiAjZW5kaWYKIAotY2xhc3MgVGFza1RpbWVyIDog
VGltZXJCYXNlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplKCk7Ci0gICAg
Ci1wcml2YXRlOgotICAgIHN0YXRpYyB2b2lkIHNldFRhc2tUaW1lckRlbGF5KGRvdWJsZSk7Ci0g
ICAgc3RhdGljIHZvaWQgc3RvcFRhc2tUaW1lcigpOwotCi0gICAgdm9pZCBmaXJlZCgpOwotCi0g
ICAgc3RhdGljIFRhc2tUaW1lciogc190aW1lcjsKLX07Ci0KLVRhc2tUaW1lciogVGFza1RpbWVy
OjpzX3RpbWVyID0gMDsKLQotdm9pZCBUYXNrVGltZXI6OmluaXRpYWxpemUoKQotewotICAgIGlm
IChzX3RpbWVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzX3RpbWVyID0gbmV3IFRhc2tUaW1l
cjsKLQotICAgIFFUTW92aWVXaW46OnNldFRhc2tUaW1lckZ1bmNzKHNldFRhc2tUaW1lckRlbGF5
LCBzdG9wVGFza1RpbWVyKTsKLX0KLQotdm9pZCBUYXNrVGltZXI6OnNldFRhc2tUaW1lckRlbGF5
KGRvdWJsZSBkZWxheUluU2Vjb25kcykKLXsKLSAgICBBU1NFUlQoc190aW1lcik7Ci0KLSAgICBz
X3RpbWVyLT5zdGFydE9uZVNob3QoZGVsYXlJblNlY29uZHMpOwotfQotCi12b2lkIFRhc2tUaW1l
cjo6c3RvcFRhc2tUaW1lcigpCi17Ci0gICAgQVNTRVJUKHNfdGltZXIpOwotCi0gICAgc190aW1l
ci0+c3RvcCgpOwotfQotCi12b2lkIFRhc2tUaW1lcjo6ZmlyZWQoKQotewotICAgIFFUTW92aWVX
aW46OnRhc2tUaW1lckZpcmVkKCk7Ci19Ci0KIFN0cmluZyBNZWRpYVBsYXllclByaXZhdGU6OnJm
YzI2MTZEYXRlU3RyaW5nRnJvbVRpbWUoQ0ZBYnNvbHV0ZVRpbWUgdGltZSkKIHsKICAgICBzdGF0
aWMgY29uc3QgY2hhciogY29uc3QgZGF5U3RyaW5nc1tdID0geyAiTW9uIiwgIlR1ZSIsICJXZWQi
LCAiVGh1IiwgIkZyaSIsICJTYXQiLCAiU3VuIiB9OwpAQCAtMjYyLDcgKzIxOCw3IEBAIHZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRVcENvb2tpZXNGb3IKIAogdm9pZCBNZWRpYVBsYXllclBy
aXZhdGU6OmxvYWQoY29uc3QgU3RyaW5nJiB1cmwpCiB7Ci0gICAgaWYgKCFRVE1vdmllV2luOjpp
bml0aWFsaXplUXVpY2tUaW1lKCkpIHsKKyAgICBpZiAoIVFUTW92aWU6OmluaXRpYWxpemVRdWlj
a1RpbWUoKSkgewogICAgICAgICAvLyBGSVhNRTogaXMgdGhpcyB0aGUgcmlnaHQgZXJyb3IgdG8g
cmV0dXJuPwogICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpEZWNvZGVFcnJv
cjsgCiAgICAgICAgIG1fcGxheWVyLT5uZXR3b3JrU3RhdGVDaGFuZ2VkKCk7CkBAIC0yNzAsNyAr
MjI2LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmxvYWQoY29uc3QgU3RyaQogICAgIH0K
IAogICAgIC8vIEluaXRpYWxpemUgdGhlIHRhc2sgdGltZXIuCi0gICAgVGFza1RpbWVyOjppbml0
aWFsaXplKCk7CisgICAgTWVkaWFQbGF5ZXJQcml2YXRlVGFza1RpbWVyOjppbml0aWFsaXplKCk7
CiAKICAgICBpZiAobV9uZXR3b3JrU3RhdGUgIT0gTWVkaWFQbGF5ZXI6OkxvYWRpbmcpIHsKICAg
ICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TG9hZGluZzsKQEAgLTI4NCwxMCAr
MjQwLDEzIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpsb2FkKGNvbnN0IFN0cmkKIAogICAg
IHNldFVwQ29va2llc0ZvclF1aWNrVGltZSh1cmwpOwogCi0gICAgbV9xdE1vdmllLnNldChuZXcg
UVRNb3ZpZVdpbih0aGlzKSk7CisgICAgbV9xdE1vdmllID0gYWRvcHRSZWYobmV3IFFUTW92aWUo
dGhpcykpOwogICAgIG1fcXRNb3ZpZS0+bG9hZCh1cmwuY2hhcmFjdGVycygpLCB1cmwubGVuZ3Ro
KCksIG1fcGxheWVyLT5wcmVzZXJ2ZXNQaXRjaCgpKTsKICAgICBtX3F0TW92aWUtPnNldFZvbHVt
ZShtX3BsYXllci0+dm9sdW1lKCkpOwotICAgIG1fcXRNb3ZpZS0+c2V0VmlzaWJsZShtX3BsYXll
ci0+dmlzaWJsZSgpKTsKKworICAgIG1fcXRNb3ZpZVdpbiA9IGFkb3B0UmVmKG5ldyBRVE1vdmll
V2luKHRoaXMpKTsKKyAgICBtX3F0TW92aWVXaW4tPnNldE1vdmllKG1fcXRNb3ZpZS5nZXQoKSk7
CisgICAgbV9xdE1vdmllV2luLT5zZXRWaXNpYmxlKG1fcGxheWVyLT52aXNpYmxlKCkpOwogfQog
CiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6cGxheSgpCkBAIC0zODgsNyArMzQ3LDcgQEAgYm9v
bCBNZWRpYVBsYXllclByaXZhdGU6OnBhdXNlZCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3F0TW92
aWUpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBtX3F0TW92aWUtPnJhdGUoKSA9
PSAwLjBmOworICAgIHJldHVybiAoIW1fcXRNb3ZpZS0+cmF0ZSgpKTsKIH0KIAogYm9vbCBNZWRp
YVBsYXllclByaXZhdGU6OnNlZWtpbmcoKSBjb25zdApAQCAtNjEyLDcgKzU3MSw3IEBAIHZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRTaXplKGNvbnN0IEkKICAgICBpZiAobV9oYXNVbnN1cHBv
cnRlZFRyYWNrcyB8fCAhbV9xdE1vdmllIHx8IG1fc2l6ZSA9PSBzaXplKQogICAgICAgICByZXR1
cm47CiAgICAgbV9zaXplID0gc2l6ZTsKLSAgICBtX3F0TW92aWUtPnNldFNpemUoc2l6ZS53aWR0
aCgpLCBzaXplLmhlaWdodCgpKTsKKyAgICBtX3F0TW92aWVXaW4tPnNldFNpemUoc2l6ZS53aWR0
aCgpLCBzaXplLmhlaWdodCgpKTsKIH0KIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNldFZp
c2libGUoYm9vbCB2aXNpYmxlKQpAQCAtNjIwLDcgKzU3OSw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlOjpzZXRWaXNpYmxlKGJvb2wKICAgICBpZiAobV9oYXNVbnN1cHBvcnRlZFRyYWNrcyB8
fCAhbV9xdE1vdmllIHx8IG1fdmlzaWJsZSA9PSB2aXNpYmxlKQogICAgICAgICByZXR1cm47CiAK
LSAgICBtX3F0TW92aWUtPnNldFZpc2libGUodmlzaWJsZSk7CisgICAgbV9xdE1vdmllV2luLT5z
ZXRWaXNpYmxlKHZpc2libGUpOwogICAgIG1fdmlzaWJsZSA9IHZpc2libGU7CiAgICAgaWYgKG1f
dmlzaWJsZSkgewogICAgICAgICBpZiAoaXNSZWFkeUZvclJlbmRlcmluZygpKQpAQCAtNjU5LDcg
KzYxOCw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpwYWludChHcmFwaGljc0MKICAgICAg
ICAgU2V0V29ybGRUcmFuc2Zvcm0oaGRjLCAmeGZvcm0pOwogICAgIH0KIAotICAgIG1fcXRNb3Zp
ZS0+cGFpbnQoaGRjLCByLngoKSwgci55KCkpOworICAgIG1fcXRNb3ZpZVdpbi0+cGFpbnQoaGRj
LCByLngoKSwgci55KCkpOwogICAgIGlmICh1c2luZ1RlbXBCaXRtYXApCiAgICAgICAgIHAtPmRy
YXdXaW5kb3dzQml0bWFwKGJpdG1hcC5nZXQoKSwgci50b3BMZWZ0KCkpOwogICAgIGVsc2UKQEAg
LTcxOSwxMSArNjc4LDExIEBAIHN0YXRpYyBIYXNoU2V0PFN0cmluZz4gbWltZVR5cGVDYWNoZSgp
CiAgICAgc3RhdGljIGJvb2wgdHlwZUxpc3RJbml0aWFsaXplZCA9IGZhbHNlOwogCiAgICAgaWYg
KCF0eXBlTGlzdEluaXRpYWxpemVkKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNvdW50ID0gUVRNb3Zp
ZVdpbjo6Y291bnRTdXBwb3J0ZWRUeXBlcygpOworICAgICAgICB1bnNpZ25lZCBjb3VudCA9IFFU
TW92aWU6OmNvdW50U3VwcG9ydGVkVHlwZXMoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBuID0g
MDsgbiA8IGNvdW50OyBuKyspIHsKICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXI7
CiAgICAgICAgICAgICB1bnNpZ25lZCBsZW47Ci0gICAgICAgICAgICBRVE1vdmllV2luOjpnZXRT
dXBwb3J0ZWRUeXBlKG4sIGNoYXJhY3RlciwgbGVuKTsKKyAgICAgICAgICAgIFFUTW92aWU6Omdl
dFN1cHBvcnRlZFR5cGUobiwgY2hhcmFjdGVyLCBsZW4pOwogICAgICAgICAgICAgaWYgKGxlbikK
ICAgICAgICAgICAgICAgICB0eXBlQ2FjaGUuYWRkKFN0cmluZyhjaGFyYWN0ZXIsIGxlbikpOwog
ICAgICAgICB9CkBAIC03NDEsNyArNzAwLDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGU6Omdl
dFN1cHBvcnRlZFR5cAogCiBib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6aXNBdmFpbGFibGUoKQog
ewotICAgIHJldHVybiBRVE1vdmllV2luOjppbml0aWFsaXplUXVpY2tUaW1lKCk7CisgICAgcmV0
dXJuIFFUTW92aWU6OmluaXRpYWxpemVRdWlja1RpbWUoKTsKIH0KIAogTWVkaWFQbGF5ZXI6OlN1
cHBvcnRzVHlwZSBNZWRpYVBsYXllclByaXZhdGU6OnN1cHBvcnRzVHlwZShjb25zdCBTdHJpbmcm
IHR5cGUsIGNvbnN0IFN0cmluZyYgY29kZWNzKQpAQCAtNzUxLDcgKzcxMCw3IEBAIE1lZGlhUGxh
eWVyOjpTdXBwb3J0c1R5cGUgTWVkaWFQbGF5ZXJQcmkKICAgICByZXR1cm4gbWltZVR5cGVDYWNo
ZSgpLmNvbnRhaW5zKHR5cGUpID8gKGNvZGVjcy5pc0VtcHR5KCkgPyBNZWRpYVBsYXllcjo6TWF5
QmVTdXBwb3J0ZWQgOiBNZWRpYVBsYXllcjo6SXNTdXBwb3J0ZWQpIDogTWVkaWFQbGF5ZXI6Oklz
Tm90U3VwcG9ydGVkOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6bW92aWVFbmRlZChR
VE1vdmllV2luKiBtb3ZpZSkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjptb3ZpZUVuZGVkKFFU
TW92aWUqIG1vdmllKQogewogICAgIGlmIChtX2hhc1Vuc3VwcG9ydGVkVHJhY2tzKQogICAgICAg
ICByZXR1cm47CkBAIC03NjAsNyArNzE5LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGU6Om1v
dmllRW5kZWQoUVRNbwogICAgIGRpZEVuZCgpOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZTo6bW92aWVMb2FkU3RhdGVDaGFuZ2VkKFFUTW92aWVXaW4qIG1vdmllKQordm9pZCBNZWRpYVBs
YXllclByaXZhdGU6Om1vdmllTG9hZFN0YXRlQ2hhbmdlZChRVE1vdmllKiBtb3ZpZSkKIHsKICAg
ICBpZiAobV9oYXNVbnN1cHBvcnRlZFRyYWNrcykKICAgICAgICAgcmV0dXJuOwpAQCAtNzY5LDcg
KzcyOCw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjptb3ZpZUxvYWRTdGF0ZUMKICAgICB1
cGRhdGVTdGF0ZXMoKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6Om1vdmllVGltZUNo
YW5nZWQoUVRNb3ZpZVdpbiogbW92aWUpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6bW92aWVU
aW1lQ2hhbmdlZChRVE1vdmllKiBtb3ZpZSkKIHsKICAgICBpZiAobV9oYXNVbnN1cHBvcnRlZFRy
YWNrcykKICAgICAgICAgcmV0dXJuOwpAQCAtNzg0LDcgKzc0Myw3IEBAIHZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlOjptb3ZpZU5ld0ltYWdlQXYKICAgICBpZiAobV9oYXNVbnN1cHBvcnRlZFRyYWNr
cykKICAgICAgICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKG1fcXRNb3ZpZS5nZXQoKSA9PSBtb3Zp
ZSk7CisgICAgQVNTRVJUKG1fcXRNb3ZpZVdpbi5nZXQoKSA9PSBtb3ZpZSk7CiAjaWYgRFJBV19G
UkFNRV9SQVRFCiAgICAgaWYgKG1fc3RhcnRlZFBsYXlpbmcpIHsKICAgICAgICAgbV9mcmFtZUNv
dW50V2hpbGVQbGF5aW5nKys7CkBAIC05MDAsOSArODU5LDkgQEAgdm9pZCBNZWRpYVBsYXllclBy
aXZhdGU6OnBhaW50Q29udGVudHMoYwogICAgIHVuc2lnbmVkIHdpZHRoOwogICAgIHVuc2lnbmVk
IGhlaWdodDsKIAotICAgIG1fcXRNb3ZpZS0+Z2V0Q3VycmVudEZyYW1lSW5mbyhidWZmZXIsIGJp
dHNQZXJQaXhlbCwgcm93Qnl0ZXMsIHdpZHRoLCBoZWlnaHQpOworICAgIG1fcXRNb3ZpZVdpbi0+
Z2V0Q3VycmVudEZyYW1lSW5mbyhidWZmZXIsIGJpdHNQZXJQaXhlbCwgcm93Qnl0ZXMsIHdpZHRo
LCBoZWlnaHQpOwogICAgIGlmICghYnVmZmVyKQotICAgICAgICByZXR1cm4gOworICAgICAgICBy
ZXR1cm47CiAKICAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBkYXRhKEFkb3B0Q0YsIENGRGF0YUNy
ZWF0ZVdpdGhCeXRlc05vQ29weSgwLCBzdGF0aWNfY2FzdDxVSW50OCo+KGJ1ZmZlciksIHJvd0J5
dGVzICogaGVpZ2h0LCBrQ0ZBbGxvY2F0b3JOdWxsKSk7CiAgICAgUmV0YWluUHRyPENHRGF0YVBy
b3ZpZGVyUmVmPiBwcm92aWRlcihBZG9wdENGLCBDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhDRkRh
dGEoZGF0YS5nZXQoKSkpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVk
aWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZp
c3VhbENvbnRleHQuaAkocmV2aXNpb24gNTgxODcpCShmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVdpbi5oOjU4MTg3KQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlz
dWFsQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTkxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBNZWRpYVBsYXllclByaXZhdGVRVEtpdF9oCisjZGVm
aW5lIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0X2gKKworI2lmIEVOQUJMRShWSURFTykKKworI2lu
Y2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZS5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVk
ZSA8UVRNb3ZpZVdpbi5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYv
UmV0YWluUHRyLmg+CisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisjaW5jbHVk
ZSAiR3JhcGhpY3NMYXllckNsaWVudC5oIgorI2VuZGlmIAorCisjaWZuZGVmIERSQVdfRlJBTUVf
UkFURQorI2RlZmluZSBEUkFXX0ZSQU1FX1JBVEUgMAorI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0
IENHSW1hZ2UgKkNHSW1hZ2VSZWY7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR3Jh
cGhpY3NDb250ZXh0OworY2xhc3MgSW50U2l6ZTsKK2NsYXNzIEludFJlY3Q7CitjbGFzcyBTdHJp
bmc7CisKK2NsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZSA6IHB1YmxpYyBNZWRpYVBsYXllclByaXZh
dGVJbnRlcmZhY2UsIHB1YmxpYyBRVE1vdmllV2luQ2xpZW50IAorI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKKyAgICAgICAgLCBwdWJsaWMgR3JhcGhpY3NMYXllckNsaWVudAorI2Vu
ZGlmIAoreworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyTWVkaWFFbmdpbmUoTWVk
aWFFbmdpbmVSZWdpc3RyYXIpOworCisgICAgfk1lZGlhUGxheWVyUHJpdmF0ZSgpOworCitwcml2
YXRlOgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIC8vIEdyYXBoaWNz
TGF5ZXJDbGllbnQgbWV0aG9kcworICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKGNvbnN0
IEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGljc0NvbnRleHQmLCBHcmFwaGljc0xheWVyUGFpbnRpbmdQ
aGFzZSwgY29uc3QgSW50UmVjdCYgaW5DbGlwKTsKKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QW5p
bWF0aW9uU3RhcnRlZChjb25zdCBHcmFwaGljc0xheWVyKiwgZG91YmxlIHRpbWUpIHsgfQorICAg
IHZpcnR1YWwgdm9pZCBub3RpZnlTeW5jUmVxdWlyZWQoY29uc3QgR3JhcGhpY3NMYXllciopIHsg
fQorICAgIHZpcnR1YWwgYm9vbCBzaG93RGVidWdCb3JkZXJzKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2hvd1JlcGFpbnRDb3VudGVyKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KKyNlbmRpZiAKKworICAgIE1lZGlhUGxheWVyUHJpdmF0ZShNZWRpYVBsYXll
ciopOworCisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRnVsbHNjcmVlbigpIGNvbnN0OworICAg
IHZpcnR1YWwgUGxhdGZvcm1NZWRpYSBwbGF0Zm9ybU1lZGlhKCkgY29uc3Q7CisjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIo
KSBjb25zdDsKKyNlbmRpZgorCisgICAgSW50U2l6ZSBuYXR1cmFsU2l6ZSgpIGNvbnN0OworICAg
IGJvb2wgaGFzVmlkZW8oKSBjb25zdDsKKyAgICBib29sIGhhc0F1ZGlvKCkgY29uc3Q7CisKKyAg
ICB2b2lkIGxvYWQoY29uc3QgU3RyaW5nJiB1cmwpOworICAgIHZvaWQgY2FuY2VsTG9hZCgpOwor
ICAgIAorICAgIHZvaWQgcGxheSgpOworICAgIHZvaWQgcGF1c2UoKTsgICAgCisgICAgCisgICAg
Ym9vbCBwYXVzZWQoKSBjb25zdDsKKyAgICBib29sIHNlZWtpbmcoKSBjb25zdDsKKyAgICAKKyAg
ICBmbG9hdCBkdXJhdGlvbigpIGNvbnN0OworICAgIGZsb2F0IGN1cnJlbnRUaW1lKCkgY29uc3Q7
CisgICAgdm9pZCBzZWVrKGZsb2F0IHRpbWUpOworICAgIAorICAgIHZvaWQgc2V0UmF0ZShmbG9h
dCk7CisgICAgdm9pZCBzZXRWb2x1bWUoZmxvYXQpOworICAgIHZvaWQgc2V0UHJlc2VydmVzUGl0
Y2goYm9vbCk7CisgICAgCisgICAgTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBuZXR3b3JrU3Rh
dGUoKSBjb25zdCB7IHJldHVybiBtX25ldHdvcmtTdGF0ZTsgfQorICAgIE1lZGlhUGxheWVyOjpS
ZWFkeVN0YXRlIHJlYWR5U3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3JlYWR5U3RhdGU7IH0KKyAg
ICAKKyAgICBQYXNzUmVmUHRyPFRpbWVSYW5nZXM+IGJ1ZmZlcmVkKCkgY29uc3Q7CisgICAgZmxv
YXQgbWF4VGltZVNlZWthYmxlKCkgY29uc3Q7CisgICAgdW5zaWduZWQgYnl0ZXNMb2FkZWQoKSBj
b25zdDsKKyAgICB1bnNpZ25lZCB0b3RhbEJ5dGVzKCkgY29uc3Q7CisgICAgCisgICAgdm9pZCBz
ZXRWaXNpYmxlKGJvb2wpOworICAgIHZvaWQgc2V0U2l6ZShjb25zdCBJbnRTaXplJik7CisgICAg
CisgICAgdm9pZCBsb2FkU3RhdGVDaGFuZ2VkKCk7CisgICAgdm9pZCBkaWRFbmQoKTsKKyAgICAK
KyAgICB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKTsKKyAgICB2
b2lkIHBhaW50Q29tcGxldGVkKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmKTsKKwor
ICAgIGJvb2wgaGFzU2luZ2xlU2VjdXJpdHlPcmlnaW4oKSBjb25zdDsKKworICAgIGJvb2wgaGFz
Q2xvc2VkQ2FwdGlvbnMoKSBjb25zdDsKKyAgICB2b2lkIHNldENsb3NlZENhcHRpb25zVmlzaWJs
ZShib29sKTsKKworICAgIHZvaWQgdXBkYXRlU3RhdGVzKCk7CisgICAgdm9pZCBkb1NlZWsoKTsK
KyAgICB2b2lkIGNhbmNlbFNlZWsoKTsKKyAgICB2b2lkIHNlZWtUaW1lckZpcmVkKFRpbWVyPE1l
ZGlhUGxheWVyUHJpdmF0ZT4qKTsKKyAgICBmbG9hdCBtYXhUaW1lTG9hZGVkKCkgY29uc3Q7Cisg
ICAgdm9pZCBzYXdVbnN1cHBvcnRlZFRyYWNrcygpOworCisgICAgdmlydHVhbCB2b2lkIG1vdmll
RW5kZWQoUVRNb3ZpZVdpbiopOworICAgIHZpcnR1YWwgdm9pZCBtb3ZpZUxvYWRTdGF0ZUNoYW5n
ZWQoUVRNb3ZpZVdpbiopOworICAgIHZpcnR1YWwgdm9pZCBtb3ZpZVRpbWVDaGFuZ2VkKFFUTW92
aWVXaW4qKTsKKyAgICB2aXJ0dWFsIHZvaWQgbW92aWVOZXdJbWFnZUF2YWlsYWJsZShRVE1vdmll
V2luKik7CisKKyAgICAvLyBlbmdpbmUgc3VwcG9ydAorICAgIHN0YXRpYyBNZWRpYVBsYXllclBy
aXZhdGVJbnRlcmZhY2UqIGNyZWF0ZShNZWRpYVBsYXllciopOworICAgIHN0YXRpYyB2b2lkIGdl
dFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5nPiYgdHlwZXMpOworICAgIHN0YXRpYyBNZWRp
YVBsYXllcjo6U3VwcG9ydHNUeXBlIHN1cHBvcnRzVHlwZShjb25zdCBTdHJpbmcmIHR5cGUsIGNv
bnN0IFN0cmluZyYgY29kZWNzKTsKKyAgICBzdGF0aWMgYm9vbCBpc0F2YWlsYWJsZSgpOworCisj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0
c0FjY2VsZXJhdGVkUmVuZGVyaW5nKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFjY2VsZXJh
dGVkUmVuZGVyaW5nU3RhdGVDaGFuZ2VkKCk7CisjZW5kaWYKKworICAgIGVudW0gTWVkaWFSZW5k
ZXJpbmdNb2RlIHsgTWVkaWFSZW5kZXJpbmdOb25lLCBNZWRpYVJlbmRlcmluZ1NvZnR3YXJlUmVu
ZGVyZXIsIE1lZGlhUmVuZGVyaW5nTW92aWVMYXllciB9OworICAgIE1lZGlhUmVuZGVyaW5nTW9k
ZSBjdXJyZW50UmVuZGVyaW5nTW9kZSgpIGNvbnN0OworICAgIE1lZGlhUmVuZGVyaW5nTW9kZSBw
cmVmZXJyZWRSZW5kZXJpbmdNb2RlKCkgY29uc3Q7CisgICAgYm9vbCBpc1JlYWR5Rm9yUmVuZGVy
aW5nKCkgY29uc3Q7CisKKyAgICB2b2lkIHNldFVwVmlkZW9SZW5kZXJpbmcoKTsKKyAgICB2b2lk
IHRlYXJEb3duVmlkZW9SZW5kZXJpbmcoKTsKKyAgICBib29sIGhhc1NldFVwVmlkZW9SZW5kZXJp
bmcoKSBjb25zdDsKKworICAgIHZvaWQgY3JlYXRlTGF5ZXJGb3JNb3ZpZSgpOworICAgIHZvaWQg
ZGVzdHJveUxheWVyRm9yTW92aWUoKTsKKworICAgIHZvaWQgc2V0VXBDb29raWVzRm9yUXVpY2tU
aW1lKGNvbnN0IFN0cmluZyYgdXJsKTsKKyAgICBTdHJpbmcgcmZjMjYxNkRhdGVTdHJpbmdGcm9t
VGltZShDRkFic29sdXRlVGltZSk7CisKKyAgICBNZWRpYVBsYXllciogbV9wbGF5ZXI7CisgICAg
T3duUHRyPFFUTW92aWVXaW4+IG1fcXRNb3ZpZTsKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCisgICAgT3duUHRyPEdyYXBoaWNzTGF5ZXI+IG1fcXRWaWRlb0xheWVyOworI2VuZGlm
CisgICAgZmxvYXQgbV9zZWVrVG87CisgICAgVGltZXI8TWVkaWFQbGF5ZXJQcml2YXRlPiBtX3Nl
ZWtUaW1lcjsKKyAgICBJbnRTaXplIG1fc2l6ZTsKKyAgICBNZWRpYVBsYXllcjo6TmV0d29ya1N0
YXRlIG1fbmV0d29ya1N0YXRlOworICAgIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIG1fcmVhZHlT
dGF0ZTsKKyAgICB1bnNpZ25lZCBtX2VuYWJsZWRUcmFja0NvdW50OworICAgIHVuc2lnbmVkIG1f
dG90YWxUcmFja0NvdW50OworICAgIGJvb2wgbV9oYXNVbnN1cHBvcnRlZFRyYWNrczsKKyAgICBi
b29sIG1fc3RhcnRlZFBsYXlpbmc7CisgICAgYm9vbCBtX2lzU3RyZWFtaW5nOworICAgIGJvb2wg
bV92aXNpYmxlOworICAgIGJvb2wgbV9uZXdGcmFtZUF2YWlsYWJsZTsKKyNpZiBEUkFXX0ZSQU1F
X1JBVEUKKyAgICBkb3VibGUgbV9mcmFtZUNvdW50V2hpbGVQbGF5aW5nOworICAgIGRvdWJsZSBt
X3RpbWVTdGFydGVkUGxheWluZzsKKyAgICBkb3VibGUgbV90aW1lU3RvcHBlZFBsYXlpbmc7Cisj
ZW5kaWYKK307CisKK30KKworI2VuZGlmCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclBy
aXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0LmgJKHJldmlzaW9uIDU4MTg3KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFs
Q29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMywxMyArMjMsMTQgQEAKICAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAogICovCiAKLSNpZm5kZWYgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXRfaAotI2RlZmluZSBN
ZWRpYVBsYXllclByaXZhdGVRVEtpdF9oCisjaWZuZGVmIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNr
VGltZVdpbl9oCisjZGVmaW5lIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVdpbl9oCiAKICNp
ZiBFTkFCTEUoVklERU8pCiAKICNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGUuaCIKICNpbmNs
dWRlICJUaW1lci5oIgorI2luY2x1ZGUgPFFUTW92aWUuaD4KICNpbmNsdWRlIDxRVE1vdmllV2lu
Lmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4K
QEAgLTUxLDcgKzUyLDcgQEAgY2xhc3MgSW50U2l6ZTsKIGNsYXNzIEludFJlY3Q7CiBjbGFzcyBT
dHJpbmc7CiAKLWNsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZSA6IHB1YmxpYyBNZWRpYVBsYXllclBy
aXZhdGVJbnRlcmZhY2UsIHB1YmxpYyBRVE1vdmllV2luQ2xpZW50IAorY2xhc3MgTWVkaWFQbGF5
ZXJQcml2YXRlIDogcHVibGljIE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZSwgcHVibGljIFFU
TW92aWVDbGllbnQsIHB1YmxpYyBRVE1vdmllV2luQ2xpZW50IAogI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKICAgICAgICAgLCBwdWJsaWMgR3JhcGhpY3NMYXllckNsaWVudAogI2Vu
ZGlmIApAQCAtMTMwLDkgKzEzMSw5IEBAIHByaXZhdGU6CiAgICAgZmxvYXQgbWF4VGltZUxvYWRl
ZCgpIGNvbnN0OwogICAgIHZvaWQgc2F3VW5zdXBwb3J0ZWRUcmFja3MoKTsKIAotICAgIHZpcnR1
YWwgdm9pZCBtb3ZpZUVuZGVkKFFUTW92aWVXaW4qKTsKLSAgICB2aXJ0dWFsIHZvaWQgbW92aWVM
b2FkU3RhdGVDaGFuZ2VkKFFUTW92aWVXaW4qKTsKLSAgICB2aXJ0dWFsIHZvaWQgbW92aWVUaW1l
Q2hhbmdlZChRVE1vdmllV2luKik7CisgICAgdmlydHVhbCB2b2lkIG1vdmllRW5kZWQoUVRNb3Zp
ZSopOworICAgIHZpcnR1YWwgdm9pZCBtb3ZpZUxvYWRTdGF0ZUNoYW5nZWQoUVRNb3ZpZSopOwor
ICAgIHZpcnR1YWwgdm9pZCBtb3ZpZVRpbWVDaGFuZ2VkKFFUTW92aWUqKTsKICAgICB2aXJ0dWFs
IHZvaWQgbW92aWVOZXdJbWFnZUF2YWlsYWJsZShRVE1vdmllV2luKik7CiAKICAgICAvLyBlbmdp
bmUgc3VwcG9ydApAQCAtMTYyLDcgKzE2Myw4IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIHJmYzI2
MTZEYXRlU3RyaW5nRnJvbVRpbWUoQ0ZBYnNvbHV0ZVRpbWUpOwogCiAgICAgTWVkaWFQbGF5ZXIq
IG1fcGxheWVyOwotICAgIE93blB0cjxRVE1vdmllV2luPiBtX3F0TW92aWU7CisgICAgUmVmUHRy
PFFUTW92aWU+IG1fcXRNb3ZpZTsKKyAgICBSZWZQdHI8UVRNb3ZpZVdpbj4gbV9xdE1vdmllV2lu
OwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICBPd25QdHI8R3JhcGhpY3NM
YXllcj4gbV9xdFZpZGVvTGF5ZXI7CiAjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54599</attachid>
            <date>2010-04-28 11:44:08 -0700</date>
            <delta_ts>2010-05-04 15:32:43 -0700</delta_ts>
            <desc>Part 2: QTMovieWin: New Classes QTPixelBuffer, QTCFDictionary, and QTMovieVisualContext</desc>
            <filename>7569713-QTMovieWin-NewClasses.patch</filename>
            <type>text/plain</type>
            <size>27475</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUQ0ZEaWN0aW9uYXJ5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVENGRGljdGlvbmFy
eS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVENG
RGljdGlvbmFyeS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUsIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlFUQ0ZE
aWN0aW9uYXJ5LmgiCisKKyNpbmNsdWRlIDxDRkRhdGEuaD4KKyNpbmNsdWRlIDx3aW5kb3dzLmg+
CisKK0NGRGF0YVJlZiBRVENGUHJvcGVydHlMaXN0Q3JlYXRlWE1MRGF0YShDRkFsbG9jYXRvclJl
ZiBhbGxvY2F0b3IsIENGUHJvcGVydHlMaXN0UmVmIHByb3BlcnR5TGlzdCkKK3sKKworICAgIHR5
cGVkZWYgQ0ZEYXRhUmVmICgqIHBmbkNGUHJvcGVydHlMaXN0Q3JlYXRlWE1MRGF0YSkoQ0ZBbGxv
Y2F0b3JSZWYgYWxsb2NhdG9yLCBDRlByb3BlcnR5TGlzdFJlZiBwcm9wZXJ0eUxpc3QpOworICAg
IHN0YXRpYyBwZm5DRlByb3BlcnR5TGlzdENyZWF0ZVhNTERhdGEgcENGUHJvcGVydHlMaXN0Q3Jl
YXRlWE1MRGF0YSA9IDA7CisgICAgaWYgKCFwQ0ZQcm9wZXJ0eUxpc3RDcmVhdGVYTUxEYXRhKSB7
CisgICAgICAgIEhNT0RVTEUgcXRjZkRMTCA9IExvYWRMaWJyYXJ5VyhMIlFUQ0YuZGxsIik7Cisg
ICAgICAgIGlmIChxdGNmRExMKQorICAgICAgICAgICAgcENGUHJvcGVydHlMaXN0Q3JlYXRlWE1M
RGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8cGZuQ0ZQcm9wZXJ0eUxpc3RDcmVhdGVYTUxEYXRhPihH
ZXRQcm9jQWRkcmVzcyhxdGNmRExMLCAiUVRDRl9DRlByb3BlcnR5TGlzdENyZWF0ZVhNTERhdGEi
KSk7CisgICAgfQorCisgICAgaWYgKHBDRlByb3BlcnR5TGlzdENyZWF0ZVhNTERhdGEpCisgICAg
ICAgIHJldHVybiBwQ0ZQcm9wZXJ0eUxpc3RDcmVhdGVYTUxEYXRhKGFsbG9jYXRvciwgcHJvcGVy
dHlMaXN0KTsKKyAgICByZXR1cm4gMDsKK30KKworQ0ZEaWN0aW9uYXJ5UmVmIFFUQ0ZEaWN0aW9u
YXJ5Q3JlYXRlQ29weVdpdGhEYXRhQ2FsbGJhY2soQ0ZBbGxvY2F0b3JSZWYgYWxsb2NhdG9yLCBD
RkRpY3Rpb25hcnlSZWYgZGljdGlvbmFyeSwgUVRDRkRpY3RvbmFyeUNyZWF0ZUZyb21EYXRhQ2Fs
bGJhY2sgY2FsbGJhY2spIAoreworICAgIEFTU0VSVChkaWN0aW9uYXJ5KTsKKyAgICBBU1NFUlQo
Y2FsbGJhY2spOworCisgICAgQ0ZEYXRhUmVmIGRhdGEgPSBRVENGUHJvcGVydHlMaXN0Q3JlYXRl
WE1MRGF0YShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBkaWN0aW9uYXJ5KTsKKyAgICBDRkRpY3Rpb25h
cnlSZWYgb3V0cHV0RGljdGlvbmFyeSA9IGNhbGxiYWNrKGFsbG9jYXRvciwgQ0ZEYXRhR2V0Qnl0
ZVB0cihkYXRhKSwgQ0ZEYXRhR2V0TGVuZ3RoKGRhdGEpKTsKKyAgICBpZiAoZGF0YSkKKyAgICAg
ICAgQ0ZSZWxlYXNlKGRhdGEpOworCisgICAgcmV0dXJuIG91dHB1dERpY3Rpb25hcnk7Cit9Cklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVENGRGljdGlvbmFyeS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUQ0ZEaWN0aW9uYXJ5LmgJ
KHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVENGRGljdGlv
bmFyeS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIFFUQ0ZEaWN0aW9uYXJ5X2gKKyNkZWZpbmUgUVRDRkRpY3Rpb25h
cnlfaAorCisjaWZkZWYgUVRNT1ZJRVdJTl9FWFBPUlRTCisjZGVmaW5lIFFUTU9WSUVXSU5fQVBJ
IF9fZGVjbHNwZWMoZGxsZXhwb3J0KQorI2Vsc2UKKyNkZWZpbmUgUVRNT1ZJRVdJTl9BUEkgX19k
ZWNsc3BlYyhkbGxpbXBvcnQpCisjZW5kaWYKKworI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NG
QmFzZS5oPgorCit0eXBlZGVmIGNvbnN0IHN0cnVjdCBfX0NGRGljdGlvbmFyeSAqIENGRGljdGlv
bmFyeVJlZjsKK3R5cGVkZWYgY29uc3Qgc3RydWN0IF9fQ0ZBbGxvY2F0b3IgKiBDRkFsbG9jYXRv
clJlZjsKKwordHlwZWRlZiBDRkRpY3Rpb25hcnlSZWYgKCogUVRDRkRpY3RvbmFyeUNyZWF0ZUZy
b21EYXRhQ2FsbGJhY2spKENGQWxsb2NhdG9yUmVmLCBjb25zdCBVSW50OCosIENGSW5kZXgpOwor
CitRVE1PVklFV0lOX0FQSSBDRkRpY3Rpb25hcnlSZWYgUVRDRkRpY3Rpb25hcnlDcmVhdGVDb3B5
V2l0aERhdGFDYWxsYmFjayhDRkFsbG9jYXRvclJlZiwgQ0ZEaWN0aW9uYXJ5UmVmLCBRVENGRGlj
dG9uYXJ5Q3JlYXRlRnJvbURhdGFDYWxsYmFjayk7CisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vUVRNb3ZpZVZpc3VhbENvbnRleHQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWVWaXN1YWxDb250ZXh0LmNw
cAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWVW
aXN1YWxDb250ZXh0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNTIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUsIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJRVE1v
dmllVmlzdWFsQ29udGV4dC5oIgorCisjaW5jbHVkZSAiUVRNb3ZpZVRhc2suaCIKKyNpbmNsdWRl
IDxDVkJhc2UuaD4KKyNpbmNsdWRlIDxDVkhvc3RUaW1lLmg+CisjaW5jbHVkZSA8SW1hZ2VDb21w
cmVzc2lvbi5oPgorI2luY2x1ZGUgPE1vdmllcy5oPgorI2luY2x1ZGUgPGQzZDl0eXBlcy5oPgor
I2luY2x1ZGUgPHdpbmRvd3MuaD4KKworc3RydWN0IFFUQ1ZUaW1lU3RhbXAgeworICAgIENWVGlt
ZVN0YW1wIHQ7Cit9OworCitjbGFzcyBRVE1vdmllVmlzdWFsQ29udGV4dFByaXYgeworcHVibGlj
OgorICAgIFFUTW92aWVWaXN1YWxDb250ZXh0UHJpdihRVE1vdmllVmlzdWFsQ29udGV4dCogcGFy
ZW50LCBRVE1vdmllVmlzdWFsQ29udGV4dENsaWVudCogY2xpZW50LCBDRkRpY3Rpb25hcnlSZWYg
b3B0aW9ucyk7CisgICAgflFUTW92aWVWaXN1YWxDb250ZXh0UHJpdigpOworCisgICAgYm9vbCBp
c0ltYWdlQXZhaWxhYmxlRm9yVGltZShjb25zdCBRVENWVGltZVN0YW1wKik7CisgICAgUVRQaXhl
bEJ1ZmZlciBpbWFnZUZvclRpbWUoY29uc3QgUVRDVlRpbWVTdGFtcCopOworICAgIHZvaWQgdGFz
aygpOworCisgICAgUVRWaXN1YWxDb250ZXh0UmVmIGdldCgpOworCisgICAgZG91YmxlIGdldEN1
cnJlbnRIb3N0VGltZSgpOworICAgIGRvdWJsZSBnZXRIb3N0Q2xvY2tGcmVxdWVuY3koKTsKKwor
ICAgIHZvaWQgc2V0TW92aWUoUmVmUHRyPFFUTW92aWU+KTsKKyAgICBSZWZQdHI8UVRNb3ZpZT4g
bW92aWUoKSBjb25zdDsKKyAgICAKKyAgICBzdGF0aWMgdm9pZCBpbWFnZUF2YWlsYWJsZUNhbGxi
YWNrKFFUVmlzdWFsQ29udGV4dFJlZiB2aXN1YWxDb250ZXh0LCBjb25zdCBDVlRpbWVTdGFtcCAq
dGltZVN0YW1wLCB2b2lkICpyZWZDb24pOworCitwcml2YXRlOgorICAgIFFUTW92aWVWaXN1YWxD
b250ZXh0KiBtX3BhcmVudDsKKyAgICBRVE1vdmllVmlzdWFsQ29udGV4dENsaWVudCogbV9jbGll
bnQ7CisgICAgUVRWaXN1YWxDb250ZXh0UmVmIG1fdmlzdWFsQ29udGV4dDsKKyAgICBSZWZQdHI8
UVRNb3ZpZT4gbV9tb3ZpZTsKKworfTsKKworUVRNb3ZpZVZpc3VhbENvbnRleHRQcml2OjpRVE1v
dmllVmlzdWFsQ29udGV4dFByaXYoUVRNb3ZpZVZpc3VhbENvbnRleHQqIHBhcmVudCwgUVRNb3Zp
ZVZpc3VhbENvbnRleHRDbGllbnQqIGNsaWVudCwgQ0ZEaWN0aW9uYXJ5UmVmIG9wdGlvbnMpIAor
ICAgICAgICA6IG1fcGFyZW50KHBhcmVudCkKKyAgICAgICAgLCBtX2NsaWVudChjbGllbnQpCisg
ICAgICAgICwgbV92aXN1YWxDb250ZXh0KDApCit7CisgICAgSE1PRFVMRSBxdG1sRExMID0gOjpM
b2FkTGlicmFyeVcoTCJRVE1MQ2xpZW50LmRsbCIpOworICAgIGlmIChxdG1sRExMKSB7CisgICAg
ICAgIHR5cGVkZWYgT1NTdGF0dXMgKCBfX2NkZWNsICpwZm5RVFBpeGVsQnVmZmVyQ29udGV4dENy
ZWF0ZSkoQ0ZBbGxvY2F0b3JSZWYsIENGRGljdGlvbmFyeVJlZiwgUVRWaXN1YWxDb250ZXh0UmVm
Kik7CisgICAgICAgIHBmblFUUGl4ZWxCdWZmZXJDb250ZXh0Q3JlYXRlIHBQaXhlbEJ1ZmZlckNv
bnRleHRDcmVhdGUgPSByZWludGVycHJldF9jYXN0PHBmblFUUGl4ZWxCdWZmZXJDb250ZXh0Q3Jl
YXRlPihHZXRQcm9jQWRkcmVzcyhxdG1sRExMLCAiUVRQaXhlbEJ1ZmZlckNvbnRleHRDcmVhdGUi
KSk7CisgICAgICAgIGlmIChwUGl4ZWxCdWZmZXJDb250ZXh0Q3JlYXRlKSB7CisgICAgICAgICAg
ICBPU1N0YXR1cyBzdGF0dXMgPSBwUGl4ZWxCdWZmZXJDb250ZXh0Q3JlYXRlKGtDRkFsbG9jYXRv
ckRlZmF1bHQsIG9wdGlvbnMsICZtX3Zpc3VhbENvbnRleHQpOworICAgICAgICAgICAgaWYgKHN0
YXR1cyA9PSBub0VyciAmJiBtX3Zpc3VhbENvbnRleHQpCisgICAgICAgICAgICAgICAgUVRWaXN1
YWxDb250ZXh0U2V0SW1hZ2VBdmFpbGFibGVDYWxsYmFjayhtX3Zpc3VhbENvbnRleHQsICZRVE1v
dmllVmlzdWFsQ29udGV4dFByaXY6OmltYWdlQXZhaWxhYmxlQ2FsbGJhY2ssIHN0YXRpY19jYXN0
PHZvaWQqPih0aGlzKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK1FUTW92aWVWaXN1YWxDb250
ZXh0UHJpdjo6flFUTW92aWVWaXN1YWxDb250ZXh0UHJpdigpCit7Cit9CisKK2Jvb2wgUVRNb3Zp
ZVZpc3VhbENvbnRleHRQcml2Ojppc0ltYWdlQXZhaWxhYmxlRm9yVGltZShjb25zdCBRVENWVGlt
ZVN0YW1wKiB0aW1lU3RhbXApCit7CisgICAgaWYgKCFtX3Zpc3VhbENvbnRleHQpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBRVFZpc3VhbENvbnRleHRJc05ld0ltYWdlQXZh
aWxhYmxlKG1fdmlzdWFsQ29udGV4dCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBDVlRpbWVTdGFt
cCo+KHRpbWVTdGFtcCkpOyAKK30KKworUVRQaXhlbEJ1ZmZlciBRVE1vdmllVmlzdWFsQ29udGV4
dFByaXY6OmltYWdlRm9yVGltZShjb25zdCBRVENWVGltZVN0YW1wKiB0aW1lU3RhbXApCit7Cisg
ICAgUVRQaXhlbEJ1ZmZlciBwaXhlbEJ1ZmZlcjsKKyAgICBpZiAobV92aXN1YWxDb250ZXh0KSB7
CisgICAgICAgIENWSW1hZ2VCdWZmZXJSZWYgbmV3SW1hZ2UgPSAwOworICAgICAgICBPU1N0YXR1
cyBzdGF0dXMgPSBRVFZpc3VhbENvbnRleHRDb3B5SW1hZ2VGb3JUaW1lKG1fdmlzdWFsQ29udGV4
dCwga0NGQWxsb2NhdG9yRGVmYXVsdCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBDVlRpbWVTdGFt
cCo+KHRpbWVTdGFtcCksICZuZXdJbWFnZSk7CisgICAgICAgIGlmIChzdGF0dXMgPT0gbm9FcnIp
IHsKKyAgICAgICAgICAgIHBpeGVsQnVmZmVyLnNldChuZXdJbWFnZSk7CisgICAgICAgICAgICBD
VlBpeGVsQnVmZmVyUmVsZWFzZShuZXdJbWFnZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0
dXJuIHBpeGVsQnVmZmVyOworfQorCit2b2lkIFFUTW92aWVWaXN1YWxDb250ZXh0UHJpdjo6dGFz
aygpCit7CisgICAgaWYgKG1fdmlzdWFsQ29udGV4dCkKKyAgICAgICAgUVRWaXN1YWxDb250ZXh0
VGFzayhtX3Zpc3VhbENvbnRleHQpOworfQorCitRVFZpc3VhbENvbnRleHRSZWYgUVRNb3ZpZVZp
c3VhbENvbnRleHRQcml2OjpnZXQoKSAKK3sKKyAgICByZXR1cm4gbV92aXN1YWxDb250ZXh0Owor
fQorCit2b2lkIFFUTW92aWVWaXN1YWxDb250ZXh0UHJpdjo6c2V0TW92aWUoUmVmUHRyPFFUTW92
aWU+IG1vdmllKQoreworICAgIGlmIChtX21vdmllKSB7CisgICAgICAgIFNldE1vdmllVmlzdWFs
Q29udGV4dChtX21vdmllLT5nZXRNb3ZpZUhhbmRsZSgpLCAwKTsKKyAgICAgICAgbV9tb3ZpZSA9
IDA7CisgICAgfQorCisgICAgaWYgKG1vdmllKQorICAgICAgICBPU1N0YXR1cyBzdGF0dXMgPSBT
ZXRNb3ZpZVZpc3VhbENvbnRleHQobW92aWUtPmdldE1vdmllSGFuZGxlKCksIG1fdmlzdWFsQ29u
dGV4dCk7CisgICAgCisgICAgbV9tb3ZpZSA9IG1vdmllOworfQorCitSZWZQdHI8UVRNb3ZpZT4g
UVRNb3ZpZVZpc3VhbENvbnRleHRQcml2Ojptb3ZpZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
bW92aWU7Cit9CisKK3ZvaWQgUVRNb3ZpZVZpc3VhbENvbnRleHRQcml2OjppbWFnZUF2YWlsYWJs
ZUNhbGxiYWNrKFFUVmlzdWFsQ29udGV4dFJlZiB2aXN1YWxDb250ZXh0LCBjb25zdCBDVlRpbWVT
dGFtcCAqdGltZVN0YW1wLCB2b2lkICpyZWZDb24pIAoreworICAgIGlmICghcmVmQ29uKQorICAg
ICAgICByZXR1cm47CisKKyAgICBRVE1vdmllVmlzdWFsQ29udGV4dFByaXYqIHZjID0gc3RhdGlj
X2Nhc3Q8UVRNb3ZpZVZpc3VhbENvbnRleHRQcml2Kj4ocmVmQ29uKTsKKyAgICBpZiAoIXZjLT5t
X2NsaWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgdmMtPm1fY2xpZW50LT5pbWFnZUF2YWls
YWJsZUZvclRpbWUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBRVENWVGltZVN0YW1wKj4odGltZVN0
YW1wKSk7Cit9CisKK3N0YXRpYyBPU1N0YXR1cyBTZXROdW1iZXJWYWx1ZShDRk11dGFibGVEaWN0
aW9uYXJ5UmVmIGluRGljdCwgQ0ZTdHJpbmdSZWYgaW5LZXksIFNJbnQzMiBpblZhbHVlKQorewor
ICAgIENGTnVtYmVyUmVmIG51bWJlcjsKKyAKKyAgICBudW1iZXIgPSBDRk51bWJlckNyZWF0ZShr
Q0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJTSW50MzJUeXBlLCAmaW5WYWx1ZSk7CisgICAg
aWYgKCFudW1iZXIpIAorICAgICAgICByZXR1cm4gY29yZUZvdW5kYXRpb25Vbmtub3duRXJyOwor
IAorICAgIENGRGljdGlvbmFyeVNldFZhbHVlKGluRGljdCwgaW5LZXksIG51bWJlcik7CisgCisg
ICAgQ0ZSZWxlYXNlKG51bWJlcik7CisgCisgICAgcmV0dXJuIG5vRXJyOworfQorCitDRkRpY3Rp
b25hcnlSZWYgUVRNb3ZpZVZpc3VhbENvbnRleHQ6OmdldENHSW1hZ2VPcHRpb25zKCkKK3sKKyAg
ICBzdGF0aWMgQ0ZEaWN0aW9uYXJ5UmVmIG9wdGlvbnMgPSAwOworCisgICAgaWYgKCFvcHRpb25z
KSB7CisgICAgICAgIENGTXV0YWJsZURpY3Rpb25hcnlSZWYgIHBpeGVsQnVmZmVyT3B0aW9ucyA9
IDA7CisgICAgICAgIENGTXV0YWJsZURpY3Rpb25hcnlSZWYgIHZpc3VhbENvbnRleHRPcHRpb25z
ID0gMDsKKyAgICAgICAgT1NTdGF0dXMgICAgICAgICAgICAgICAgc3RhdHVzID0gbm9FcnI7Cisg
ICAgICAgIAorICAgICAgICAvLyBQaXhlbCBCdWZmZXIgYXR0cmlidXRlcworICAgICAgICBwaXhl
bEJ1ZmZlck9wdGlvbnMgPSBDRkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRl
ZmF1bHQsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrQ0ZUeXBlRGljdGlvbmFy
eVZhbHVlQ2FsbEJhY2tzKTsKKworICAgICAgICAvLyBVc2UgdGhlIGszMkJHUkFQaXhlbEZvcm1h
dCwgYXMgUXVhcnR6Q29yZSB3aWxsIGJlIGFibGUgdG8gdXNlIHRoZSBwaXhlbHMgZGlyZWN0bHks
CisgICAgICAgIC8vIHdpdGhvdXQgbmVlZGluZyBhbiBhZGl0aW9uYWwgY29weSBvciByZW5kZXJp
bmcgcGFzczpzCisgICAgICAgIFNldE51bWJlclZhbHVlKHBpeGVsQnVmZmVyT3B0aW9ucywga0NW
UGl4ZWxCdWZmZXJQaXhlbEZvcm1hdFR5cGVLZXksIGszMkJHUkFQaXhlbEZvcm1hdCk7CisgICAg
ICAgICAgICAKKyAgICAgICAgLy8gYWxpZ25tZW50CisgICAgICAgIFNldE51bWJlclZhbHVlKHBp
eGVsQnVmZmVyT3B0aW9ucywga0NWUGl4ZWxCdWZmZXJCeXRlc1BlclJvd0FsaWdubWVudEtleSwg
MTYpOworCisgICAgICAgIC8vIGNvbXBhdGFiaWxpdHkKKyAgICAgICAgU2V0TnVtYmVyVmFsdWUo
cGl4ZWxCdWZmZXJPcHRpb25zLCBrQ1ZQaXhlbEJ1ZmZlckNHSW1hZ2VDb21wYXRpYmlsaXR5S2V5
LCAxKTsKKyAgICAgCisgICAgICAgIC8vIFFUIFZpc3VhbCBDb250ZXh0IGF0dHJpYnV0ZXMKKyAg
ICAgICAgdmlzdWFsQ29udGV4dE9wdGlvbnMgPSBDRkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxlKGtD
RkFsbG9jYXRvckRlZmF1bHQsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
a0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcyk7CisgICAgIAorICAgICAgICAvLyBzZXQg
dGhlIHBpeGVsIGJ1ZmZlciBhdHRyaWJ1dGVzIGZvciB0aGUgdmlzdWFsIGNvbnRleHQKKyAgICAg
ICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUodmlzdWFsQ29udGV4dE9wdGlvbnMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGtRVFZpc3VhbENvbnRleHRQaXhlbEJ1ZmZlckF0dHJpYnV0ZXNL
ZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsQnVmZmVyT3B0aW9ucyk7CisK
KyAgICAgICAgaWYgKHBpeGVsQnVmZmVyT3B0aW9ucykKKyAgICAgICAgICAgIENGUmVsZWFzZShw
aXhlbEJ1ZmZlck9wdGlvbnMpOworICAgIAorICAgICAgICBvcHRpb25zID0gdmlzdWFsQ29udGV4
dE9wdGlvbnM7CisgICAgfQorCisgICAgcmV0dXJuIG9wdGlvbnM7Cit9CisKK1FUTW92aWVWaXN1
YWxDb250ZXh0OjpRVE1vdmllVmlzdWFsQ29udGV4dChRVE1vdmllVmlzdWFsQ29udGV4dENsaWVu
dCogY2xpZW50LCBDRkRpY3Rpb25hcnlSZWYgb3B0aW9ucykgCisgICAgOiBtX3ByaXZhdGUobmV3
IFFUTW92aWVWaXN1YWxDb250ZXh0UHJpdih0aGlzLCBjbGllbnQsIG9wdGlvbnMpKQoreworfQor
CitRVE1vdmllVmlzdWFsQ29udGV4dDo6flFUTW92aWVWaXN1YWxDb250ZXh0KCkKK3sKK30KKwor
Ym9vbCBRVE1vdmllVmlzdWFsQ29udGV4dDo6aXNJbWFnZUF2YWlsYWJsZUZvclRpbWUoY29uc3Qg
UVRDVlRpbWVTdGFtcCogdGltZVN0YW1wKQoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmlzSW1h
Z2VBdmFpbGFibGVGb3JUaW1lKHRpbWVTdGFtcCk7Cit9CisKK1FUUGl4ZWxCdWZmZXIgUVRNb3Zp
ZVZpc3VhbENvbnRleHQ6OmltYWdlRm9yVGltZShjb25zdCBRVENWVGltZVN0YW1wKiB0aW1lU3Rh
bXApCit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+aW1hZ2VGb3JUaW1lKHRpbWVTdGFtcCk7Cit9
CisKK3ZvaWQgUVRNb3ZpZVZpc3VhbENvbnRleHQ6OnRhc2soKQoreworICAgIG1fcHJpdmF0ZS0+
dGFzaygpOworfQorCitRVFZpc3VhbENvbnRleHRSZWYgUVRNb3ZpZVZpc3VhbENvbnRleHQ6Omdl
dCgpIAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmdldCgpOworfQorCit2b2lkIFFUTW92aWVW
aXN1YWxDb250ZXh0OjpzZXRNb3ZpZShSZWZQdHI8UVRNb3ZpZT4gbW92aWUpCit7CisgICAgbV9w
cml2YXRlLT5zZXRNb3ZpZShtb3ZpZSk7Cit9CisKK1JlZlB0cjxRVE1vdmllPiBRVE1vdmllVmlz
dWFsQ29udGV4dDo6bW92aWUoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPm1vdmll
KCk7Cit9CisKK2RvdWJsZSBRVE1vdmllVmlzdWFsQ29udGV4dDo6Y3VycmVudEhvc3RUaW1lKCkK
K3sKKyAgICByZXR1cm4gQ1ZHZXRDdXJyZW50SG9zdFRpbWUoKSAvIENWR2V0SG9zdENsb2NrRnJl
cXVlbmN5KCk7Cit9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVE1vdmll
VmlzdWFsQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL1FUTW92aWVWaXN1YWxDb250ZXh0LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9RVE1vdmllVmlzdWFsQ29udGV4dC5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5LCAyMDEw
IEFwcGxlLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFFUTW92
aWVWaXN1YWxDb250ZXh0X2gKKyNkZWZpbmUgUVRNb3ZpZVZpc3VhbENvbnRleHRfaAorCisjaWZk
ZWYgUVRNT1ZJRVdJTl9FWFBPUlRTCisjZGVmaW5lIFFUTU9WSUVXSU5fQVBJIF9fZGVjbHNwZWMo
ZGxsZXhwb3J0KQorI2Vsc2UKKyNkZWZpbmUgUVRNT1ZJRVdJTl9BUEkgX19kZWNsc3BlYyhkbGxp
bXBvcnQpCisjZW5kaWYKKworI2luY2x1ZGUgIlFUTW92aWUuaCIKKyNpbmNsdWRlICJRVE1vdmll
VGFzay5oIgorI2luY2x1ZGUgIlFUUGl4ZWxCdWZmZXIuaCIKKyNpbmNsdWRlIDxXVEYvT3duUHRy
Lmg+CisjaW5jbHVkZSA8V1RGL1JlZkNvdW50ZWQuaD4KKwordHlwZWRlZiBzdHJ1Y3QgT3BhcXVl
UVRWaXN1YWxDb250ZXh0KiAgIFFUVmlzdWFsQ29udGV4dFJlZjsKKworLy8gUVRDVlRpbWVTdGFt
cCBpcyBhIHN0cnVjdCBjb250YWluaW5nIG9ubHkgYSBDVlRpbWVTdGFtcC4gIFRoaXMgaXMgdG8g
CisvLyB3b3JrIGFyb3VuZCB0aGUgaW5hYmlsaXR5IG9mIENWVGltZVN0YW1wIHRvIGJlIGZvcndh
cmQgZGVjbGFyZWQsIGluIAorLy8gYWRkaXRpb24gdG8gaXQgYmVpbmcgZGVjbGFyZWQgaW4gZGlm
ZmVyZW50IGhlYWRlciBmaWxlcyB3aGVuIGJ1aWxkaW5nCisvLyB0aGUgUVRNb3ZpZVdpbiBhbmQg
V2ViQ29yZSBwcm9qZWN0cy4KK3N0cnVjdCBRVENWVGltZVN0YW1wOworCitjbGFzcyBRVE1vdmll
VmlzdWFsQ29udGV4dENsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIGltYWdlQXZh
aWxhYmxlRm9yVGltZShjb25zdCBRVENWVGltZVN0YW1wKikgPSAwOworfTsKKworY2xhc3MgUVRN
T1ZJRVdJTl9BUEkgUVRNb3ZpZVZpc3VhbENvbnRleHQgOiBwdWJsaWMgUmVmQ291bnRlZDxRVE1v
dmllVmlzdWFsQ29udGV4dD4geworcHVibGljOgorICAgIFFUTW92aWVWaXN1YWxDb250ZXh0KFFU
TW92aWVWaXN1YWxDb250ZXh0Q2xpZW50KiwgQ0ZEaWN0aW9uYXJ5UmVmIG9wdGlvbnMgPSAwKTsK
KyAgICB+UVRNb3ZpZVZpc3VhbENvbnRleHQoKTsKKworICAgIGJvb2wgaXNJbWFnZUF2YWlsYWJs
ZUZvclRpbWUoY29uc3QgUVRDVlRpbWVTdGFtcCopOworICAgIFFUUGl4ZWxCdWZmZXIgaW1hZ2VG
b3JUaW1lKGNvbnN0IFFUQ1ZUaW1lU3RhbXAqKTsKKyAgICB2b2lkIHRhc2soKTsKKworICAgIFFU
VmlzdWFsQ29udGV4dFJlZiBnZXQoKTsKKworICAgIGRvdWJsZSBnZXRDdXJyZW50SG9zdFRpbWUo
KTsKKyAgICBkb3VibGUgZ2V0SG9zdENsb2NrRnJlcXVlbmN5KCk7CisKKyAgICB2b2lkIHNldE1v
dmllKFJlZlB0cjxRVE1vdmllPik7CisgICAgUmVmUHRyPFFUTW92aWU+IG1vdmllKCkgY29uc3Q7
CisKKyAgICBzdGF0aWMgQ0ZEaWN0aW9uYXJ5UmVmIGdldENHSW1hZ2VPcHRpb25zKCk7CisgICAg
c3RhdGljIGRvdWJsZSBjdXJyZW50SG9zdFRpbWUoKTsKKworcHJvdGVjdGVkOgorICAgIHZvaWQg
c2V0dXBWaXN1YWxDb250ZXh0KCk7CisKKyAgICBmcmllbmQgY2xhc3MgUVRNb3ZpZVZpc3VhbENv
bnRleHRQcml2OworICAgIE93blB0cjxRVE1vdmllVmlzdWFsQ29udGV4dFByaXY+IG1fcHJpdmF0
ZTsKK307CisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRQ
aXhlbEJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vUVRQaXhlbEJ1ZmZlci5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9RVFBpeGVsQnVmZmVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMDkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUsIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
bmNsdWRlICJRVFBpeGVsQnVmZmVyLmgiCisKKyNpbmNsdWRlIDxDRlN0cmluZy5oPgorI2luY2x1
ZGUgPENHQ29sb3JTcGFjZS5oPgorI2luY2x1ZGUgPENHSW1hZ2UuaD4KKyNpbmNsdWRlIDxDVlBp
eGVsQnVmZmVyLmg+CisjaW5jbHVkZSA8UXVpY2tEcmF3Lmg+CisKK1FUUGl4ZWxCdWZmZXI6OlFU
UGl4ZWxCdWZmZXIoKSA6IG1fcGl4ZWxCdWZmZXIoMCkge30KKworUVRQaXhlbEJ1ZmZlcjo6UVRQ
aXhlbEJ1ZmZlcihjb25zdCBRVFBpeGVsQnVmZmVyJiBwKSA6IG1fcGl4ZWxCdWZmZXIocC5tX3Bp
eGVsQnVmZmVyKSAKK3sKKyAgICBDVlBpeGVsQnVmZmVyUmV0YWluKG1fcGl4ZWxCdWZmZXIpOwor
fQorCitRVFBpeGVsQnVmZmVyOjpRVFBpeGVsQnVmZmVyKENWUGl4ZWxCdWZmZXJSZWYgcmVmKSA6
IG1fcGl4ZWxCdWZmZXIocmVmKQoreworICAgIENWUGl4ZWxCdWZmZXJSZXRhaW4obV9waXhlbEJ1
ZmZlcik7Cit9CisKK1FUUGl4ZWxCdWZmZXI6On5RVFBpeGVsQnVmZmVyKCkgCit7CisgICAgY2xl
YXIoKTsKK30KKworUVRQaXhlbEJ1ZmZlciYgUVRQaXhlbEJ1ZmZlcjo6b3BlcmF0b3I9KGNvbnN0
IFFUUGl4ZWxCdWZmZXImIHApIAoreworICAgIHNldChwLm1fcGl4ZWxCdWZmZXIpOworICAgIHJl
dHVybiAqdGhpczsKK30KKwordm9pZCBRVFBpeGVsQnVmZmVyOjpzZXQoQ1ZQaXhlbEJ1ZmZlclJl
ZiByZWYpCit7CisgICAgQ1ZQaXhlbEJ1ZmZlclJldGFpbihyZWYpOworICAgIENWUGl4ZWxCdWZm
ZXJSZWxlYXNlKG1fcGl4ZWxCdWZmZXIpOworICAgIG1fcGl4ZWxCdWZmZXIgPSByZWY7Cit9CisK
K0NWUGl4ZWxCdWZmZXJSZWYgUVRQaXhlbEJ1ZmZlcjo6Z2V0KCkKK3sKKyAgICByZXR1cm4gbV9w
aXhlbEJ1ZmZlcjsKK30KKwordm9pZCBRVFBpeGVsQnVmZmVyOjpjbGVhcigpCit7CisgICAgQ1ZQ
aXhlbEJ1ZmZlclJlbGVhc2UobV9waXhlbEJ1ZmZlcik7CisgICAgbV9waXhlbEJ1ZmZlciA9IDA7
Cit9CisKK0NWUmV0dXJuIFFUUGl4ZWxCdWZmZXI6OmxvY2tCYXNlQWRkcmVzcygpCit7CisgICAg
cmV0dXJuIENWUGl4ZWxCdWZmZXJMb2NrQmFzZUFkZHJlc3MobV9waXhlbEJ1ZmZlciwgMCk7Cit9
CisKK0NWUmV0dXJuIFFUUGl4ZWxCdWZmZXI6OnVubG9ja0Jhc2VBZGRyZXNzKCkKK3sKKyAgICBy
ZXR1cm4gQ1ZQaXhlbEJ1ZmZlclVubG9ja0Jhc2VBZGRyZXNzKG1fcGl4ZWxCdWZmZXIsIDApOwor
fQorCitzaXplX3QgUVRQaXhlbEJ1ZmZlcjo6d2lkdGgoKQoreworICAgIHJldHVybiBDVlBpeGVs
QnVmZmVyR2V0V2lkdGgobV9waXhlbEJ1ZmZlcik7Cit9CisKK3NpemVfdCBRVFBpeGVsQnVmZmVy
OjpoZWlnaHQoKQoreworICAgIHJldHVybiBDVlBpeGVsQnVmZmVyR2V0SGVpZ2h0KG1fcGl4ZWxC
dWZmZXIpOworfQorCit1bnNpZ25lZCBsb25nIFFUUGl4ZWxCdWZmZXI6OnBpeGVsRm9ybWF0VHlw
ZSgpCit7CisgICAgT1NUeXBlIHBpeGVsRm9ybWF0VHlwZSA9IENWUGl4ZWxCdWZmZXJHZXRQaXhl
bEZvcm1hdFR5cGUobV9waXhlbEJ1ZmZlcik7CisgICAgcmV0dXJuIHBpeGVsRm9ybWF0VHlwZTsK
K30KKworYm9vbCBRVFBpeGVsQnVmZmVyOjpwaXhlbEZvcm1hdElzMzJBUkdCKCkKK3sKKyAgICBy
ZXR1cm4gQ1ZQaXhlbEJ1ZmZlckdldFBpeGVsRm9ybWF0VHlwZShtX3BpeGVsQnVmZmVyKSA9PSBr
MzJBUkdCUGl4ZWxGb3JtYXQ7Cit9CisKK2Jvb2wgUVRQaXhlbEJ1ZmZlcjo6cGl4ZWxGb3JtYXRJ
czMyQkdSQSgpCit7CisgICAgcmV0dXJuIENWUGl4ZWxCdWZmZXJHZXRQaXhlbEZvcm1hdFR5cGUo
bV9waXhlbEJ1ZmZlcikgPT0gazMyQkdSQVBpeGVsRm9ybWF0OworfQorCit2b2lkKiBRVFBpeGVs
QnVmZmVyOjpiYXNlQWRkcmVzcygpCit7CisgICAgcmV0dXJuIENWUGl4ZWxCdWZmZXJHZXRCYXNl
QWRkcmVzcyhtX3BpeGVsQnVmZmVyKTsKK30KKworc2l6ZV90IFFUUGl4ZWxCdWZmZXI6OmJ5dGVz
UGVyUm93KCkKK3sKKyAgICByZXR1cm4gQ1ZQaXhlbEJ1ZmZlckdldEJ5dGVzUGVyUm93KG1fcGl4
ZWxCdWZmZXIpOworfQorCitzaXplX3QgUVRQaXhlbEJ1ZmZlcjo6ZGF0YVNpemUoKQoreworICAg
IHJldHVybiBDVlBpeGVsQnVmZmVyR2V0RGF0YVNpemUobV9waXhlbEJ1ZmZlcik7Cit9CisKKwor
Ym9vbCBRVFBpeGVsQnVmZmVyOjppc1BsYW5hcigpCit7CisgICAgcmV0dXJuIENWUGl4ZWxCdWZm
ZXJJc1BsYW5hcihtX3BpeGVsQnVmZmVyKTsKK30KKworc2l6ZV90IFFUUGl4ZWxCdWZmZXI6OnBs
YW5lQ291bnQoKQoreworICAgIHJldHVybiBDVlBpeGVsQnVmZmVyR2V0UGxhbmVDb3VudChtX3Bp
eGVsQnVmZmVyKTsKK30KKworc2l6ZV90IFFUUGl4ZWxCdWZmZXI6OndpZHRoT2ZQbGFuZShzaXpl
X3QgcGxhbmUpCit7CisgICAgcmV0dXJuIENWUGl4ZWxCdWZmZXJHZXRXaWR0aE9mUGxhbmUobV9w
aXhlbEJ1ZmZlciwgcGxhbmUpOworfQorCitzaXplX3QgUVRQaXhlbEJ1ZmZlcjo6aGVpZ2h0T2ZQ
bGFuZShzaXplX3QgcGxhbmUpCit7CisgICAgcmV0dXJuIENWUGl4ZWxCdWZmZXJHZXRIZWlnaHRP
ZlBsYW5lKG1fcGl4ZWxCdWZmZXIsIHBsYW5lKTsKK30KKwordm9pZCogUVRQaXhlbEJ1ZmZlcjo6
YmFzZUFkZHJlc3NPZlBsYW5lKHNpemVfdCBwbGFuZSkKK3sKKyAgICByZXR1cm4gQ1ZQaXhlbEJ1
ZmZlckdldEJhc2VBZGRyZXNzT2ZQbGFuZShtX3BpeGVsQnVmZmVyLCBwbGFuZSk7Cit9CisKK3Np
emVfdCBRVFBpeGVsQnVmZmVyOjpieXRlc1BlclJvd09mUGxhbmUoc2l6ZV90IHBsYW5lKQorewor
ICAgIHJldHVybiBDVlBpeGVsQnVmZmVyR2V0Qnl0ZXNQZXJSb3dPZlBsYW5lKG1fcGl4ZWxCdWZm
ZXIsIHBsYW5lKTsKK30KKwordm9pZCBRVFBpeGVsQnVmZmVyOjpnZXRFeHRlbmRlZFBpeGVscyhz
aXplX3QqIGxlZnQsIHNpemVfdCogcmlnaHQsIHNpemVfdCogdG9wLCBzaXplX3QqIGJvdHRvbSkK
K3sKKyAgICByZXR1cm4gQ1ZQaXhlbEJ1ZmZlckdldEV4dGVuZGVkUGl4ZWxzKG1fcGl4ZWxCdWZm
ZXIsIGxlZnQsIHJpZ2h0LCB0b3AsIGJvdHRvbSk7Cit9CisKK0NGRGljdGlvbmFyeVJlZiBRVFBp
eGVsQnVmZmVyOjphdHRhY2htZW50cygpCit7CisgICAgQ0ZEaWN0aW9uYXJ5UmVmIHByb3BvZ2F0
ZWQgPSBDVkJ1ZmZlckdldEF0dGFjaG1lbnRzKG1fcGl4ZWxCdWZmZXIsIGtDVkF0dGFjaG1lbnRN
b2RlX1Nob3VsZFByb3BhZ2F0ZSk7CisgICAgcmV0dXJuIHByb3BvZ2F0ZWQ7Cit9CisKK3ZvaWQg
UVRQaXhlbEJ1ZmZlcjo6cmV0YWluQ2FsbGJhY2sodm9pZCogcmVmY29uKQoreworICAgIENWUGl4
ZWxCdWZmZXJSZXRhaW4oc3RhdGljX2Nhc3Q8Q1ZQaXhlbEJ1ZmZlclJlZj4ocmVmY29uKSk7Cit9
CisKK3ZvaWQgUVRQaXhlbEJ1ZmZlcjo6cmVsZWFzZUNhbGxiYWNrKHZvaWQqIHJlZmNvbikKK3sK
KyAgICBDVlBpeGVsQnVmZmVyUmVsZWFzZShzdGF0aWNfY2FzdDxDVlBpeGVsQnVmZmVyUmVmPihy
ZWZjb24pKTsKK30KKwordm9pZCBRVFBpeGVsQnVmZmVyOjppbWFnZVF1ZXVlUmVsZWFzZUNhbGxi
YWNrKHVuc2lnbmVkIGludCB0eXBlLCB1aW50NjRfdCBpZCwgdm9pZCogcmVmY29uKQoreworICAg
IENWUGl4ZWxCdWZmZXJSZWxlYXNlKHN0YXRpY19jYXN0PENWUGl4ZWxCdWZmZXJSZWY+KHJlZmNv
bikpOworfQorCit2b2lkIFFUUGl4ZWxCdWZmZXI6OmRhdGFQcm92aWRlclJlbGVhc2VCeXRlUG9p
bnRlckNhbGxiYWNrKHZvaWQqIHJlZmNvbiwgY29uc3Qgdm9pZCogcG9pbnRlcikKK3sKKyAgICBD
VlBpeGVsQnVmZmVyVW5sb2NrQmFzZUFkZHJlc3Moc3RhdGljX2Nhc3Q8Q1ZQaXhlbEJ1ZmZlclJl
Zj4ocmVmY29uKSwgMCk7Cit9CisKK2NvbnN0IHZvaWQqIFFUUGl4ZWxCdWZmZXI6OmRhdGFQcm92
aWRlckdldEJ5dGVQb2ludGVyQ2FsbGJhY2sodm9pZCogcmVmY29uKQoreworICAgIENWUGl4ZWxC
dWZmZXJMb2NrQmFzZUFkZHJlc3Moc3RhdGljX2Nhc3Q8Q1ZQaXhlbEJ1ZmZlclJlZj4ocmVmY29u
KSwgMCk7CisgICAgcmV0dXJuIENWUGl4ZWxCdWZmZXJHZXRCYXNlQWRkcmVzcyhzdGF0aWNfY2Fz
dDxDVlBpeGVsQnVmZmVyUmVmPihyZWZjb24pKTsKK30KKworc2l6ZV90IFFUUGl4ZWxCdWZmZXI6
OmRhdGFQcm92aWRlckdldEJ5dGVzQXRQb3NpdGlvbkNhbGxiYWNrKHZvaWQqIHJlZmNvbiwgdm9p
ZCogYnVmZmVyLCBzaXplX3QgcG9zaXRpb24sIHNpemVfdCBjb3VudCkKK3sKKyAgICBjaGFyKiBk
YXRhID0gKGNoYXIqKUNWUGl4ZWxCdWZmZXJHZXRCYXNlQWRkcmVzcyhzdGF0aWNfY2FzdDxDVlBp
eGVsQnVmZmVyUmVmPihyZWZjb24pKTsKKyAgICBzaXplX3Qgc2l6ZSA9IENWUGl4ZWxCdWZmZXJH
ZXREYXRhU2l6ZShzdGF0aWNfY2FzdDxDVlBpeGVsQnVmZmVyUmVmPihyZWZjb24pKTsKKyAgICBp
ZiAoc2l6ZSAtIHBvc2l0aW9uIDwgY291bnQpCisgICAgICAgIGNvdW50ID0gc2l6ZSAtIHBvc2l0
aW9uOworCisgICAgbWVtY3B5KGJ1ZmZlciwgZGF0YStwb3NpdGlvbiwgY291bnQpOworICAgIHJl
dHVybiBjb3VudDsKK30KKwordm9pZCBRVFBpeGVsQnVmZmVyOjpkYXRhUHJvdmlkZXJSZWxlYXNl
SW5mb0NhbGxiYWNrKHZvaWQqIHJlZmNvbikKK3sKKyAgICBDVlBpeGVsQnVmZmVyUmVsZWFzZShz
dGF0aWNfY2FzdDxDVlBpeGVsQnVmZmVyUmVmPihyZWZjb24pKTsKK30KSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUUGl4ZWxCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVFBpeGVsQnVmZmVyLmgJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVFBpeGVsQnVmZmVyLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIw
MDksIDIwMTAgQXBwbGUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgUVRQaXhlbEJ1ZmZlcl9oCisjZGVmaW5lIFFUUGl4ZWxCdWZmZXJfaAorCisjaWZkZWYgUVRN
T1ZJRVdJTl9FWFBPUlRTCisjZGVmaW5lIFFUTU9WSUVXSU5fQVBJIF9fZGVjbHNwZWMoZGxsZXhw
b3J0KQorI2Vsc2UKKyNkZWZpbmUgUVRNT1ZJRVdJTl9BUEkgX19kZWNsc3BlYyhkbGxpbXBvcnQp
CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+CisKK3R5cGVkZWYgc3RydWN0IF9fQ1ZCdWZmZXIgKkNWQnVmZmVyUmVmOwordHlwZWRlZiBD
VkJ1ZmZlclJlZiBDVlBpeGVsQnVmZmVyUmVmOwordHlwZWRlZiBzdHJ1Y3QgQ0dJbWFnZSogQ0dJ
bWFnZVJlZjsKK3R5cGVkZWYgaW50MzJfdCBDVlJldHVybjsKK3R5cGVkZWYgY29uc3Qgc3RydWN0
IF9fQ0ZEaWN0aW9uYXJ5ICogQ0ZEaWN0aW9uYXJ5UmVmOworCisvLyBRVFBpeGVsQnVmZmVyIHdy
YXBzIFF1aWNrVGltZSdzIGltcGxlbWVudGF0aW9uIG9mIENWUGl4ZWxCdWZmZXIsIHNvIGl0cyBm
dW5jdGlvbnMgYXJlCisvLyBzYWZlIHRvIGNhbGwgd2l0aGluIFdlYktpdC4KK2NsYXNzIFFUTU9W
SUVXSU5fQVBJIFFUUGl4ZWxCdWZmZXIgOiBSZWZDb3VudGVkPFFUUGl4ZWxCdWZmZXI+IHsKK3B1
YmxpYzoKKyAgICBRVFBpeGVsQnVmZmVyKCk7CisgICAgUVRQaXhlbEJ1ZmZlcihjb25zdCBRVFBp
eGVsQnVmZmVyJik7CisgICAgUVRQaXhlbEJ1ZmZlcihDVlBpeGVsQnVmZmVyUmVmKTsKKyAgICBR
VFBpeGVsQnVmZmVyJiBvcGVyYXRvcj0oY29uc3QgUVRQaXhlbEJ1ZmZlciYpOworICAgIH5RVFBp
eGVsQnVmZmVyKCk7CisKKyAgICB2b2lkIHNldChDVlBpeGVsQnVmZmVyUmVmKTsKKyAgICBDVlBp
eGVsQnVmZmVyUmVmIGdldCgpOworICAgIHZvaWQgY2xlYXIoKTsKKworICAgIENWUmV0dXJuIGxv
Y2tCYXNlQWRkcmVzcygpOworICAgIENWUmV0dXJuIHVubG9ja0Jhc2VBZGRyZXNzKCk7CisgICAg
c2l6ZV90IHdpZHRoKCk7CisgICAgc2l6ZV90IGhlaWdodCgpOworCisgICAgdW5zaWduZWQgbG9u
ZyBwaXhlbEZvcm1hdFR5cGUoKTsKKyAgICBib29sIHBpeGVsRm9ybWF0SXMzMkFSR0IoKTsKKyAg
ICBib29sIHBpeGVsRm9ybWF0SXMzMkJHUkEoKTsKKyAgICB2b2lkKiBiYXNlQWRkcmVzcygpOwor
ICAgIHNpemVfdCBieXRlc1BlclJvdygpOworICAgIHNpemVfdCBkYXRhU2l6ZSgpOworCisgICAg
Ym9vbCBpc1BsYW5hcigpOworICAgIHNpemVfdCBwbGFuZUNvdW50KCk7CisgICAgc2l6ZV90IHdp
ZHRoT2ZQbGFuZShzaXplX3QpOworICAgIHNpemVfdCBoZWlnaHRPZlBsYW5lKHNpemVfdCk7Cisg
ICAgdm9pZCogYmFzZUFkZHJlc3NPZlBsYW5lKHNpemVfdCk7CisgICAgc2l6ZV90IGJ5dGVzUGVy
Um93T2ZQbGFuZShzaXplX3QpOworCisgICAgdm9pZCBnZXRFeHRlbmRlZFBpeGVscyhzaXplX3Qq
IGxlZnQsIHNpemVfdCogcmlnaHQsIHNpemVfdCogdG9wLCBzaXplX3QqIGJvdHRvbSk7CisgICAg
Q0ZEaWN0aW9uYXJ5UmVmIGF0dGFjaG1lbnRzKCk7CisKKyAgICAvLyBHZW5lcmljIENGUmV0YWlu
L0NGUmVsZWFzZSBjYWxsYmFja3MKKyAgICBzdGF0aWMgdm9pZCByZWxlYXNlQ2FsbGJhY2sodm9p
ZCogcmVmY29uKTsKKyAgICBzdGF0aWMgdm9pZCByZXRhaW5DYWxsYmFjayh2b2lkKiByZWZjb24p
OworCisgICAgLy8gQ0FJbWFnZVF1ZXVlIGNhbGxiYWNrcworICAgIHN0YXRpYyB2b2lkIGltYWdl
UXVldWVSZWxlYXNlQ2FsbGJhY2sodW5zaWduZWQgaW50IHR5cGUsIHVpbnQ2NF90IGlkLCB2b2lk
KiByZWZjb24pOworCisgICAgLy8gQ0dEYXRhUHJvdmlkZXIgY2FsbGJhY2tzCisgICAgc3RhdGlj
IHZvaWQgZGF0YVByb3ZpZGVyUmVsZWFzZUJ5dGVQb2ludGVyQ2FsbGJhY2sodm9pZCogcmVmY29u
LCBjb25zdCB2b2lkKiBwb2ludGVyKTsKKyAgICBzdGF0aWMgY29uc3Qgdm9pZCogZGF0YVByb3Zp
ZGVyR2V0Qnl0ZVBvaW50ZXJDYWxsYmFjayh2b2lkKiByZWZjb24pOworICAgIHN0YXRpYyBzaXpl
X3QgZGF0YVByb3ZpZGVyR2V0Qnl0ZXNBdFBvc2l0aW9uQ2FsbGJhY2sodm9pZCogcmVmY29uLCB2
b2lkKiBidWZmZXIsIHNpemVfdCBwb3NpdGlvbiwgc2l6ZV90IGNvdW50KTsKKyAgICBzdGF0aWMg
dm9pZCBkYXRhUHJvdmlkZXJSZWxlYXNlSW5mb0NhbGxiYWNrKHZvaWQqIHJlZmNvbik7CisKK3By
aXZhdGU6CisgICAgQ1ZQaXhlbEJ1ZmZlclJlZiBtX3BpeGVsQnVmZmVyOworfTsKKworI2VuZGlm
Cg==
</data>
<flag name="review"
          id="38619"
          type_id="1"
          status="-"
          setter="andersca"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54600</attachid>
            <date>2010-04-28 11:44:40 -0700</date>
            <delta_ts>2010-05-04 15:28:12 -0700</delta_ts>
            <desc>Part 1.1: QTMovieWin: The breakup of QTMovieWin</desc>
            <filename>7569713-QTMovieWin-Breakup.patch</filename>
            <type>text/plain</type>
            <size>119932</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWUuY3BwCShyZXZpc2lv
biA1ODE4NykJKGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRNb3ZpZVdpbi5j
cHA6NTgxODcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVE1vdmllLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJRVE1vdmllV2luLmgiCisKKy8v
IFB1dCBNb3ZpZXMuaCBmaXJzdCBzbyBidWlsZCBmYWlsdXJlcyBoZXJlIHBvaW50IGNsZWFybHkg
dG8gUXVpY2tUaW1lCisjaW5jbHVkZSA8TW92aWVzLmg+CisKKyNpbmNsdWRlICJRVE1vdmllV2lu
VGltZXIuaCIKKyNpbmNsdWRlIDxHWE1hdGguaD4KKyNpbmNsdWRlIDxRVE1MLmg+CisjaW5jbHVk
ZSA8UXVpY2tUaW1lQ29tcG9uZW50cy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Cisj
aW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK3N0YXRpYyBj
b25zdCBsb25nIG1pbmltdW1RdWlja1RpbWVWZXJzaW9uID0gMHgwNzMwMDAwMDsgLy8gNy4zCisK
K3N0YXRpYyBjb25zdCBsb25nIGNsb3NlZENhcHRpb25UcmFja1R5cGUgPSAnY2xjcCc7CitzdGF0
aWMgY29uc3QgbG9uZyBzdWJUaXRsZVRyYWNrVHlwZSA9ICdzYnRsJzsKK3N0YXRpYyBjb25zdCBs
b25nIG1wZWc0T2JqZWN0RGVzY3JpcHRpb25UcmFja1R5cGUgPSAnb2RzbSc7CitzdGF0aWMgY29u
c3QgbG9uZyBtcGVnNFNjZW5lRGVzY3JpcHRpb25UcmFja1R5cGUgPSAnc2RzbSc7CitzdGF0aWMg
Y29uc3QgbG9uZyBjbG9zZWRDYXB0aW9uRGlzcGxheVByb3BlcnR5SUQgPSAnZGlzcCc7CitzdGF0
aWMgTFBDVFNUUiBmdWxsc2NyZWVuUVRNb3ZpZVdpblBvaW50ZXJQcm9wID0gVEVYVCgiZnVsbHNj
cmVlblFUTW92aWVXaW5Qb2ludGVyIik7CisKKy8vIFJlc2l6aW5nIEdXb3JsZHMgaXMgc2xvdywg
Z2l2ZSB0aGVtIGEgbWluaW11bSBzaXplIHNvIHNpemUgb2Ygc21hbGwgCisvLyB2aWRlb3MgY2Fu
IGJlIGFuaW1hdGVkIHNtb290aGx5CitzdGF0aWMgY29uc3QgaW50IGNHV29ybGRNaW5XaWR0aCA9
IDY0MDsKK3N0YXRpYyBjb25zdCBpbnQgY0dXb3JsZE1pbkhlaWdodCA9IDM2MDsKKworc3RhdGlj
IGNvbnN0IGZsb2F0IGNOb25Db250aW51b3VzVGltZUNoYW5nZSA9IDAuMmY7CisKK3VuaW9uIFVw
cFBhcmFtIHsKKyAgICBsb25nIGxvbmdWYWx1ZTsKKyAgICB2b2lkKiBwdHI7Cit9OworCitzdGF0
aWMgTW92aWVEcmF3aW5nQ29tcGxldGVVUFAgZ01vdmllRHJhd2luZ0NvbXBsZXRlVVBQID0gMDsK
K3N0YXRpYyBIYXNoU2V0PFFUTW92aWVXaW5Qcml2YXRlKj4qIGdUYXNrTGlzdDsKK3N0YXRpYyBW
ZWN0b3I8Q0ZTdHJpbmdSZWY+KiBnU3VwcG9ydGVkVHlwZXMgPSAwOworc3RhdGljIFNJbnQzMiBx
dWlja1RpbWVWZXJzaW9uID0gMDsKKworc3RhdGljIFFUTW92aWVXaW46OlNldFRhc2tUaW1lckRl
bGF5RnVuYyBnU2V0VGFza1RpbWVyRGVsYXkgPSAwOworc3RhdGljIFFUTW92aWVXaW46OlN0b3BU
YXNrVGltZXJGdW5jIGdTdG9wVGFza1RpbWVyID0gMDsKKworc3RhdGljIHZvaWQgdXBkYXRlVGFz
a1RpbWVyKGludCBtYXhJbnRlcnZhbCA9IDEwMDApCit7CisgICAgaWYgKCFnVGFza0xpc3QtPnNp
emUoKSkgeworICAgICAgICBnU3RvcFRhc2tUaW1lcigpOworICAgICAgICByZXR1cm47ICAgIAor
ICAgIH0KKyAgICAKKyAgICBsb25nIGludGVydmFsSW5NUzsKKyAgICBRVEdldFRpbWVVbnRpbE5l
eHRUYXNrKCZpbnRlcnZhbEluTVMsIDEwMDApOworICAgIGlmIChpbnRlcnZhbEluTVMgPiBtYXhJ
bnRlcnZhbCkKKyAgICAgICAgaW50ZXJ2YWxJbk1TID0gbWF4SW50ZXJ2YWw7CisgICAgZ1NldFRh
c2tUaW1lckRlbGF5KHN0YXRpY19jYXN0PGZsb2F0PihpbnRlcnZhbEluTVMpIC8gMTAwMCk7Cit9
CisKK2NsYXNzIFFUTW92aWVXaW5Qcml2YXRlIDogcHVibGljIE5vbmNvcHlhYmxlIHsKK3B1Ymxp
YzoKKyAgICBRVE1vdmllV2luUHJpdmF0ZSgpOworICAgIH5RVE1vdmllV2luUHJpdmF0ZSgpOwor
ICAgIHZvaWQgdGFzaygpOworICAgIHZvaWQgc3RhcnRUYXNrKCk7CisgICAgdm9pZCBlbmRUYXNr
KCk7CisKKyAgICB2b2lkIGNyZWF0ZU1vdmllQ29udHJvbGxlcigpOworICAgIHZvaWQgcmVnaXN0
ZXJEcmF3aW5nQ2FsbGJhY2soKTsKKyAgICB2b2lkIGRyYXdpbmdDb21wbGV0ZSgpOworICAgIHZv
aWQgdXBkYXRlR1dvcmxkKCk7CisgICAgdm9pZCBjcmVhdGVHV29ybGQoKTsKKyAgICB2b2lkIGRl
bGV0ZUdXb3JsZCgpOworICAgIHZvaWQgY2xlYXJHV29ybGQoKTsKKyAgICB2b2lkIGNhY2hlTW92
aWVTY2FsZSgpOworICAgIHZvaWQgdXBkYXRlTW92aWVTaXplKCk7CisKKyAgICB2b2lkIHNldFNp
emUoaW50LCBpbnQpOworCisgICAgUVRNb3ZpZVdpbiogbV9tb3ZpZVdpbjsKKyAgICBNb3ZpZSBt
X21vdmllOworICAgIE1vdmllQ29udHJvbGxlciBtX21vdmllQ29udHJvbGxlcjsKKyAgICBib29s
IG1fdGFza2luZzsKKyAgICBRVE1vdmllV2luQ2xpZW50KiBtX2NsaWVudDsKKyAgICBsb25nIG1f
bG9hZFN0YXRlOworICAgIGJvb2wgbV9lbmRlZDsKKyAgICBib29sIG1fc2Vla2luZzsKKyAgICBm
bG9hdCBtX2xhc3RNZWRpYVRpbWU7CisgICAgZG91YmxlIG1fbGFzdExvYWRTdGF0ZUNoZWNrVGlt
ZTsKKyAgICBpbnQgbV93aWR0aDsKKyAgICBpbnQgbV9oZWlnaHQ7CisgICAgYm9vbCBtX3Zpc2li
bGU7CisgICAgR1dvcmxkUHRyIG1fZ1dvcmxkOworICAgIGludCBtX2dXb3JsZFdpZHRoOworICAg
IGludCBtX2dXb3JsZEhlaWdodDsKKyAgICBHV29ybGRQdHIgbV9zYXZlZEdXb3JsZDsKKyAgICBs
b25nIG1fbG9hZEVycm9yOworICAgIGZsb2F0IG1fd2lkdGhTY2FsZUZhY3RvcjsKKyAgICBmbG9h
dCBtX2hlaWdodFNjYWxlRmFjdG9yOworICAgIENGVVJMUmVmIG1fY3VycmVudFVSTDsKKyAgICBm
bG9hdCBtX3RpbWVUb1Jlc3RvcmU7CisgICAgZmxvYXQgbV9yYXRlVG9SZXN0b3JlOworI2lmICFB
U1NFUlRfRElTQUJMRUQKKyAgICBib29sIG1fc2NhbGVDYWNoZWQ7CisjZW5kaWYKKyAgICBXaW5k
b3dQdHIgbV9mdWxsc2NyZWVuV2luZG93OworICAgIEdXb3JsZFB0ciBtX2Z1bGxzY3JlZW5Pcmln
R1dvcmxkOworICAgIFJlY3QgbV9mdWxsc2NyZWVuUmVjdDsKKyAgICBRVE1vdmllV2luRnVsbHNj
cmVlbkNsaWVudCogbV9mdWxsc2NyZWVuQ2xpZW50OworICAgIGNoYXIqIG1fZnVsbHNjcmVlblJl
c3RvcmVTdGF0ZTsKK307CisKK1FUTW92aWVXaW5Qcml2YXRlOjpRVE1vdmllV2luUHJpdmF0ZSgp
CisgICAgOiBtX21vdmllV2luKDApCisgICAgLCBtX21vdmllKDApCisgICAgLCBtX21vdmllQ29u
dHJvbGxlcigwKQorICAgICwgbV90YXNraW5nKGZhbHNlKQorICAgICwgbV9jbGllbnQoMCkKKyAg
ICAsIG1fbG9hZFN0YXRlKDApCisgICAgLCBtX2VuZGVkKGZhbHNlKQorICAgICwgbV9zZWVraW5n
KGZhbHNlKQorICAgICwgbV9sYXN0TWVkaWFUaW1lKDApCisgICAgLCBtX2xhc3RMb2FkU3RhdGVD
aGVja1RpbWUoMCkKKyAgICAsIG1fd2lkdGgoMCkKKyAgICAsIG1faGVpZ2h0KDApCisgICAgLCBt
X3Zpc2libGUoZmFsc2UpCisgICAgLCBtX2dXb3JsZCgwKQorICAgICwgbV9nV29ybGRXaWR0aCgw
KQorICAgICwgbV9nV29ybGRIZWlnaHQoMCkKKyAgICAsIG1fc2F2ZWRHV29ybGQoMCkKKyAgICAs
IG1fbG9hZEVycm9yKDApCisgICAgLCBtX3dpZHRoU2NhbGVGYWN0b3IoMSkKKyAgICAsIG1faGVp
Z2h0U2NhbGVGYWN0b3IoMSkKKyAgICAsIG1fY3VycmVudFVSTCgwKQorICAgICwgbV90aW1lVG9S
ZXN0b3JlKC0xLjBmKQorICAgICwgbV9yYXRlVG9SZXN0b3JlKC0xLjBmKQorI2lmICFBU1NFUlRf
RElTQUJMRUQKKyAgICAsIG1fc2NhbGVDYWNoZWQoZmFsc2UpCisjZW5kaWYKKyAgICAsIG1fZnVs
bHNjcmVlbldpbmRvdygwKQorICAgICwgbV9mdWxsc2NyZWVuT3JpZ0dXb3JsZCgwKQorICAgICwg
bV9mdWxsc2NyZWVuQ2xpZW50KDApCisgICAgLCBtX2Z1bGxzY3JlZW5SZXN0b3JlU3RhdGUoMCkK
K3sKKyAgICBSZWN0IHJlY3QgPSB7IDAsIDAsIDAsIDAgfTsKKyAgICBtX2Z1bGxzY3JlZW5SZWN0
ID0gcmVjdDsKK30KKworUVRNb3ZpZVdpblByaXZhdGU6On5RVE1vdmllV2luUHJpdmF0ZSgpCit7
CisgICAgQVNTRVJUKCFtX2Z1bGxzY3JlZW5XaW5kb3cpOworCisgICAgZW5kVGFzaygpOworICAg
IGlmIChtX2dXb3JsZCkKKyAgICAgICAgZGVsZXRlR1dvcmxkKCk7CisgICAgaWYgKG1fbW92aWVD
b250cm9sbGVyKQorICAgICAgICBEaXNwb3NlTW92aWVDb250cm9sbGVyKG1fbW92aWVDb250cm9s
bGVyKTsKKyAgICBpZiAobV9tb3ZpZSkKKyAgICAgICAgRGlzcG9zZU1vdmllKG1fbW92aWUpOwor
ICAgIGlmIChtX2N1cnJlbnRVUkwpCisgICAgICAgIENGUmVsZWFzZShtX2N1cnJlbnRVUkwpOwor
fQorCit2b2lkIFFUTW92aWVXaW46OnRhc2tUaW1lckZpcmVkKCkKK3sKKyAgICAvLyBUaGUgaGFz
aCBjb250ZW50IG1pZ2h0IGNoYW5nZSBkdXJpbmcgdGFzaygpCisgICAgVmVjdG9yPFFUTW92aWVX
aW5Qcml2YXRlKj4gdGFza3M7CisgICAgY29weVRvVmVjdG9yKCpnVGFza0xpc3QsIHRhc2tzKTsK
KyAgICBzaXplX3QgY291bnQgPSB0YXNrcy5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBuID0g
MDsgbiA8IGNvdW50OyArK24pCisgICAgICAgIHRhc2tzW25dLT50YXNrKCk7CisKKyAgICB1cGRh
dGVUYXNrVGltZXIoKTsKK30KKwordm9pZCBRVE1vdmllV2luUHJpdmF0ZTo6c3RhcnRUYXNrKCkg
Cit7CisgICAgaWYgKG1fdGFza2luZykKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghZ1Rhc2tM
aXN0KQorICAgICAgICBnVGFza0xpc3QgPSBuZXcgSGFzaFNldDxRVE1vdmllV2luUHJpdmF0ZSo+
OworICAgIGdUYXNrTGlzdC0+YWRkKHRoaXMpOworICAgIG1fdGFza2luZyA9IHRydWU7CisgICAg
dXBkYXRlVGFza1RpbWVyKCk7Cit9CisKK3ZvaWQgUVRNb3ZpZVdpblByaXZhdGU6OmVuZFRhc2so
KSAKK3sKKyAgICBpZiAoIW1fdGFza2luZykKKyAgICAgICAgcmV0dXJuOworICAgIGdUYXNrTGlz
dC0+cmVtb3ZlKHRoaXMpOworICAgIG1fdGFza2luZyA9IGZhbHNlOworICAgIHVwZGF0ZVRhc2tU
aW1lcigpOworfQorCit2b2lkIFFUTW92aWVXaW5Qcml2YXRlOjpjYWNoZU1vdmllU2NhbGUoKQor
eworICAgIFJlY3QgbmF0dXJhbFJlY3Q7CisgICAgUmVjdCBpbml0aWFsUmVjdDsKKworICAgIEdl
dE1vdmllTmF0dXJhbEJvdW5kc1JlY3QobV9tb3ZpZSwgJm5hdHVyYWxSZWN0KTsKKyAgICBHZXRN
b3ZpZUJveChtX21vdmllLCAmaW5pdGlhbFJlY3QpOworCisgICAgZmxvYXQgbmF0dXJhbFdpZHRo
ID0gbmF0dXJhbFJlY3QucmlnaHQgLSBuYXR1cmFsUmVjdC5sZWZ0OworICAgIGZsb2F0IG5hdHVy
YWxIZWlnaHQgPSBuYXR1cmFsUmVjdC5ib3R0b20gLSBuYXR1cmFsUmVjdC50b3A7CisKKyAgICBp
ZiAobmF0dXJhbFdpZHRoKQorICAgICAgICBtX3dpZHRoU2NhbGVGYWN0b3IgPSAoaW5pdGlhbFJl
Y3QucmlnaHQgLSBpbml0aWFsUmVjdC5sZWZ0KSAvIG5hdHVyYWxXaWR0aDsKKyAgICBpZiAobmF0
dXJhbEhlaWdodCkKKyAgICAgICAgbV9oZWlnaHRTY2FsZUZhY3RvciA9IChpbml0aWFsUmVjdC5i
b3R0b20gLSBpbml0aWFsUmVjdC50b3ApIC8gbmF0dXJhbEhlaWdodDsKKyNpZiAhQVNTRVJUX0RJ
U0FCTEVECisgICAgbV9zY2FsZUNhY2hlZCA9IHRydWU7OworI2VuZGlmCit9CisKK3ZvaWQgUVRN
b3ZpZVdpblByaXZhdGU6OnRhc2soKSAKK3sKKyAgICBBU1NFUlQobV90YXNraW5nKTsKKworICAg
IGlmICghbV9sb2FkRXJyb3IpIHsKKyAgICAgICAgaWYgKG1fbW92aWVDb250cm9sbGVyKQorICAg
ICAgICAgICAgTUNJZGxlKG1fbW92aWVDb250cm9sbGVyKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgTW92aWVzVGFzayhtX21vdmllLCAwKTsKKyAgICB9CisKKyAgICAvLyBHZXRNb3ZpZUxv
YWRTdGF0ZSBkb2N1bWVudGF0aW9uIHNheXMgdGhhdCB5b3Ugc2hvdWxkIG5vdCBjYWxsIGl0IG1v
cmUgb2Z0ZW4gdGhhbiBldmVyeSBxdWFydGVyIG9mIGEgc2Vjb25kLgorICAgIGlmIChzeXN0ZW1U
aW1lKCkgPj0gbV9sYXN0TG9hZFN0YXRlQ2hlY2tUaW1lICsgMC4yNSB8fCBtX2xvYWRFcnJvcikg
eyAKKyAgICAgICAgLy8gSWYgbG9hZCBmYWlscyBRVCdzIGxvYWQgc3RhdGUgaXMgUVRNb3ZpZUxv
YWRTdGF0ZUNvbXBsZXRlLgorICAgICAgICAvLyBUaGlzIGlzIGRpZmZlcmVudCBmcm9tIFFUS2l0
IEFQSSBhbmQgc2VlbXMgc3RyYW5nZS4KKyAgICAgICAgbG9uZyBsb2FkU3RhdGUgPSBtX2xvYWRF
cnJvciA/IFFUTW92aWVMb2FkU3RhdGVFcnJvciA6IEdldE1vdmllTG9hZFN0YXRlKG1fbW92aWUp
OworICAgICAgICBpZiAobG9hZFN0YXRlICE9IG1fbG9hZFN0YXRlKSB7CisKKyAgICAgICAgICAg
IC8vIHdlIG9ubHkgbmVlZCB0byBlcmFzZSB0aGUgbW92aWUgZ3dvcmxkIHdoZW4gdGhlIGxvYWQg
c3RhdGUgY2hhbmdlcyB0byBsb2FkZWQgd2hpbGUgaXQKKyAgICAgICAgICAgIC8vICBpcyB2aXNp
YmxlIGFzIHRoZSBnd29ybGQgaXMgZGVzdHJveWVkL2NyZWF0ZWQgd2hlbiB2aXNpYmlsaXR5IGNo
YW5nZXMKKyAgICAgICAgICAgIGJvb2wgc2hvdWxkUmVzdG9yZVBsYXliYWNrU3RhdGUgPSBmYWxz
ZTsKKyAgICAgICAgICAgIGJvb2wgbW92aWVOZXdseVBsYXlhYmxlID0gbG9hZFN0YXRlID49IFFU
TW92aWVMb2FkU3RhdGVMb2FkZWQgJiYgbV9sb2FkU3RhdGUgPCBRVE1vdmllTG9hZFN0YXRlTG9h
ZGVkOworICAgICAgICAgICAgbV9sb2FkU3RhdGUgPSBsb2FkU3RhdGU7CisgICAgICAgICAgICBp
ZiAobW92aWVOZXdseVBsYXlhYmxlKSB7CisgICAgICAgICAgICAgICAgY2FjaGVNb3ZpZVNjYWxl
KCk7CisgICAgICAgICAgICAgICAgdXBkYXRlTW92aWVTaXplKCk7CisgICAgICAgICAgICAgICAg
aWYgKG1fdmlzaWJsZSkKKyAgICAgICAgICAgICAgICAgICAgY2xlYXJHV29ybGQoKTsKKyAgICAg
ICAgICAgICAgICBzaG91bGRSZXN0b3JlUGxheWJhY2tTdGF0ZSA9IHRydWU7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmICghbV9tb3ZpZUNvbnRyb2xsZXIgJiYgbV9sb2FkU3RhdGUg
Pj0gUVRNb3ZpZUxvYWRTdGF0ZUxvYWRlZCkKKyAgICAgICAgICAgICAgICBjcmVhdGVNb3ZpZUNv
bnRyb2xsZXIoKTsKKyAgICAgICAgICAgIG1fY2xpZW50LT5tb3ZpZUxvYWRTdGF0ZUNoYW5nZWQo
bV9tb3ZpZVdpbik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChzaG91bGRSZXN0b3Jl
UGxheWJhY2tTdGF0ZSAmJiBtX3RpbWVUb1Jlc3RvcmUgIT0gLTEuMGYpIHsKKyAgICAgICAgICAg
ICAgICBtX21vdmllV2luLT5zZXRDdXJyZW50VGltZShtX3RpbWVUb1Jlc3RvcmUpOworICAgICAg
ICAgICAgICAgIG1fdGltZVRvUmVzdG9yZSA9IC0xLjBmOworICAgICAgICAgICAgICAgIG1fbW92
aWVXaW4tPnNldFJhdGUobV9yYXRlVG9SZXN0b3JlKTsKKyAgICAgICAgICAgICAgICBtX3JhdGVU
b1Jlc3RvcmUgPSAtMS4wZjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG1fbW92
aWVXaW4tPm1fZGlzYWJsZWQpIHsKKyAgICAgICAgICAgICAgICBlbmRUYXNrKCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIG1fbGFz
dExvYWRTdGF0ZUNoZWNrVGltZSA9IHN5c3RlbVRpbWUoKTsKKyAgICB9CisKKyAgICBib29sIGVu
ZGVkID0gISFJc01vdmllRG9uZShtX21vdmllKTsKKyAgICBpZiAoZW5kZWQgIT0gbV9lbmRlZCkg
eworICAgICAgICBtX2VuZGVkID0gZW5kZWQ7CisgICAgICAgIGlmIChtX2NsaWVudCAmJiBlbmRl
ZCkKKyAgICAgICAgICAgIG1fY2xpZW50LT5tb3ZpZUVuZGVkKG1fbW92aWVXaW4pOworICAgIH0K
KworICAgIGZsb2F0IHRpbWUgPSBtX21vdmllV2luLT5jdXJyZW50VGltZSgpOworICAgIGlmICh0
aW1lIDwgbV9sYXN0TWVkaWFUaW1lIHx8IHRpbWUgPj0gbV9sYXN0TWVkaWFUaW1lICsgY05vbkNv
bnRpbnVvdXNUaW1lQ2hhbmdlIHx8IG1fc2Vla2luZykgeworICAgICAgICBtX3NlZWtpbmcgPSBm
YWxzZTsKKyAgICAgICAgaWYgKG1fY2xpZW50KQorICAgICAgICAgICAgbV9jbGllbnQtPm1vdmll
VGltZUNoYW5nZWQobV9tb3ZpZVdpbik7CisgICAgfQorICAgIG1fbGFzdE1lZGlhVGltZSA9IHRp
bWU7CisKKyAgICBpZiAobV9sb2FkRXJyb3IpCisgICAgICAgIGVuZFRhc2soKTsKK30KKwordm9p
ZCBRVE1vdmllV2luUHJpdmF0ZTo6Y3JlYXRlTW92aWVDb250cm9sbGVyKCkKK3sKKyAgICBSZWN0
IGJvdW5kczsKKyAgICBsb25nIGZsYWdzOworCisgICAgaWYgKCFtX21vdmllKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAobV9tb3ZpZUNvbnRyb2xsZXIpCisgICAgICAgIERpc3Bvc2VNb3Zp
ZUNvbnRyb2xsZXIobV9tb3ZpZUNvbnRyb2xsZXIpOworCisgICAgR2V0TW92aWVCb3gobV9tb3Zp
ZSwgJmJvdW5kcyk7CisgICAgZmxhZ3MgPSBtY1RvcExlZnRNb3ZpZSB8IG1jTm90VmlzaWJsZTsK
KyAgICBtX21vdmllQ29udHJvbGxlciA9IE5ld01vdmllQ29udHJvbGxlcihtX21vdmllLCAmYm91
bmRzLCBmbGFncyk7CisgICAgaWYgKCFtX21vdmllQ29udHJvbGxlcikKKyAgICAgICAgcmV0dXJu
OworCisgICAgTUNTZXRDb250cm9sbGVyUG9ydChtX21vdmllQ29udHJvbGxlciwgbV9nV29ybGQp
OworICAgIE1DU2V0Q29udHJvbGxlckF0dGFjaGVkKG1fbW92aWVDb250cm9sbGVyLCBmYWxzZSk7
Cit9CisKK3ZvaWQgUVRNb3ZpZVdpblByaXZhdGU6OnJlZ2lzdGVyRHJhd2luZ0NhbGxiYWNrKCkK
K3sKKyAgICBVcHBQYXJhbSBwYXJhbTsKKyAgICBwYXJhbS5wdHIgPSB0aGlzOworICAgIFNldE1v
dmllRHJhd2luZ0NvbXBsZXRlUHJvYyhtX21vdmllLCBtb3ZpZURyYXdpbmdDYWxsV2hlbkNoYW5n
ZWQsIGdNb3ZpZURyYXdpbmdDb21wbGV0ZVVQUCwgcGFyYW0ubG9uZ1ZhbHVlKTsKK30KKwordm9p
ZCBRVE1vdmllV2luUHJpdmF0ZTo6ZHJhd2luZ0NvbXBsZXRlKCkKK3sKKyAgICBpZiAoIW1fZ1dv
cmxkIHx8IG1fbW92aWVXaW4tPm1fZGlzYWJsZWQgfHwgbV9sb2FkU3RhdGUgPCBRVE1vdmllTG9h
ZFN0YXRlTG9hZGVkKQorICAgICAgICByZXR1cm47CisgICAgbV9jbGllbnQtPm1vdmllTmV3SW1h
Z2VBdmFpbGFibGUobV9tb3ZpZVdpbik7Cit9CisKK3ZvaWQgUVRNb3ZpZVdpblByaXZhdGU6OnVw
ZGF0ZUdXb3JsZCgpCit7CisgICAgYm9vbCBzaG91bGRCZVZpc2libGUgPSBtX3Zpc2libGU7Cisg
ICAgaWYgKCFtX2hlaWdodCB8fCAhbV93aWR0aCkKKyAgICAgICAgc2hvdWxkQmVWaXNpYmxlID0g
ZmFsc2U7CisKKyAgICBpZiAoc2hvdWxkQmVWaXNpYmxlICYmICFtX2dXb3JsZCkKKyAgICAgICAg
Y3JlYXRlR1dvcmxkKCk7CisgICAgZWxzZSBpZiAoIXNob3VsZEJlVmlzaWJsZSAmJiBtX2dXb3Js
ZCkKKyAgICAgICAgZGVsZXRlR1dvcmxkKCk7CisgICAgZWxzZSBpZiAobV9nV29ybGQgJiYgKG1f
d2lkdGggPiBtX2dXb3JsZFdpZHRoIHx8IG1faGVpZ2h0ID4gbV9nV29ybGRIZWlnaHQpKSB7Cisg
ICAgICAgIC8vIG5lZWQgYSBiaWdnZXIsIGJldHRlciBnV29ybGQKKyAgICAgICAgZGVsZXRlR1dv
cmxkKCk7CisgICAgICAgIGNyZWF0ZUdXb3JsZCgpOworICAgIH0KK30KKwordm9pZCBRVE1vdmll
V2luUHJpdmF0ZTo6Y3JlYXRlR1dvcmxkKCkKK3sKKyAgICBBU1NFUlQoIW1fZ1dvcmxkKTsKKyAg
ICBpZiAoIW1fbW92aWUgfHwgbV9sb2FkU3RhdGUgPCBRVE1vdmllTG9hZFN0YXRlTG9hZGVkKQor
ICAgICAgICByZXR1cm47CisKKyAgICBtX2dXb3JsZFdpZHRoID0gbWF4KGNHV29ybGRNaW5XaWR0
aCwgbV93aWR0aCk7CisgICAgbV9nV29ybGRIZWlnaHQgPSBtYXgoY0dXb3JsZE1pbkhlaWdodCwg
bV9oZWlnaHQpOworICAgIFJlY3QgYm91bmRzOyAKKyAgICBib3VuZHMudG9wID0gMDsKKyAgICBi
b3VuZHMubGVmdCA9IDA7IAorICAgIGJvdW5kcy5yaWdodCA9IG1fZ1dvcmxkV2lkdGg7CisgICAg
Ym91bmRzLmJvdHRvbSA9IG1fZ1dvcmxkSGVpZ2h0OworICAgIE9TRXJyIGVyciA9IFFUTmV3R1dv
cmxkKCZtX2dXb3JsZCwgazMyQkdSQVBpeGVsRm9ybWF0LCAmYm91bmRzLCAwLCAwLCAwKTsgCisg
ICAgaWYgKGVycikgCisgICAgICAgIHJldHVybjsKKyAgICBHZXRNb3ZpZUdXb3JsZChtX21vdmll
LCAmbV9zYXZlZEdXb3JsZCwgMCk7CisgICAgaWYgKG1fbW92aWVDb250cm9sbGVyKQorICAgICAg
ICBNQ1NldENvbnRyb2xsZXJQb3J0KG1fbW92aWVDb250cm9sbGVyLCBtX2dXb3JsZCk7CisgICAg
U2V0TW92aWVHV29ybGQobV9tb3ZpZSwgbV9nV29ybGQsIDApOworICAgIGJvdW5kcy5yaWdodCA9
IG1fd2lkdGg7CisgICAgYm91bmRzLmJvdHRvbSA9IG1faGVpZ2h0OworICAgIGlmIChtX21vdmll
Q29udHJvbGxlcikKKyAgICAgICAgTUNTZXRDb250cm9sbGVyQm91bmRzUmVjdChtX21vdmllQ29u
dHJvbGxlciwgJmJvdW5kcyk7CisgICAgU2V0TW92aWVCb3gobV9tb3ZpZSwgJmJvdW5kcyk7Cit9
CisKK3ZvaWQgUVRNb3ZpZVdpblByaXZhdGU6OmNsZWFyR1dvcmxkKCkKK3sKKyAgICBpZiAoIW1f
bW92aWV8fCFtX2dXb3JsZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhZlB0ciBzYXZlUG9y
dDsKKyAgICBHZXRQb3J0KCZzYXZlUG9ydCk7IAorICAgIE1hY1NldFBvcnQoKEdyYWZQdHIpbV9n
V29ybGQpOworCisgICAgUmVjdCBib3VuZHM7IAorICAgIGJvdW5kcy50b3AgPSAwOworICAgIGJv
dW5kcy5sZWZ0ID0gMDsgCisgICAgYm91bmRzLnJpZ2h0ID0gbV9nV29ybGRXaWR0aDsKKyAgICBi
b3VuZHMuYm90dG9tID0gbV9nV29ybGRIZWlnaHQ7CisgICAgRXJhc2VSZWN0KCZib3VuZHMpOwor
CisgICAgTWFjU2V0UG9ydChzYXZlUG9ydCk7Cit9CisKK3ZvaWQgUVRNb3ZpZVdpblByaXZhdGU6
OnNldFNpemUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworICAgIGlmIChtX3dpZHRoID09IHdp
ZHRoICYmIG1faGVpZ2h0ID09IGhlaWdodCkKKyAgICAgICAgcmV0dXJuOworICAgIG1fd2lkdGgg
PSB3aWR0aDsKKyAgICBtX2hlaWdodCA9IGhlaWdodDsKKworICAgIC8vIERvIG5vdCBjaGFuZ2Ug
bW92aWUgYm94IGJlZm9yZSByZWFjaGluZyBsb2FkIHN0YXRlIGxvYWRlZCBhcyB3ZSBncmFiCisg
ICAgLy8gdGhlIGluaXRpYWwgc2l6ZSB3aGVuIHRhc2soKSBzZWVzIHRoYXQgc3RhdGUgZm9yIHRo
ZSBmaXJzdCB0aW1lLCBhbmQKKyAgICAvLyB3ZSBuZWVkIHRoZSBpbml0aWFsIHNpemUgdG8gYmUg
YWJsZSB0byBzY2FsZSBtb3ZpZSBwcm9wZXJseS4gCisgICAgaWYgKCFtX21vdmllIHx8IG1fbG9h
ZFN0YXRlIDwgUVRNb3ZpZUxvYWRTdGF0ZUxvYWRlZCkKKyAgICAgICAgcmV0dXJuOworCisjaWYg
IUFTU0VSVF9ESVNBQkxFRAorICAgIEFTU0VSVChtX3NjYWxlQ2FjaGVkKTsKKyNlbmRpZgorCisg
ICAgdXBkYXRlTW92aWVTaXplKCk7Cit9CisKK3ZvaWQgUVRNb3ZpZVdpblByaXZhdGU6OnVwZGF0
ZU1vdmllU2l6ZSgpCit7CisgICAgaWYgKCFtX21vdmllIHx8IG1fbG9hZFN0YXRlIDwgUVRNb3Zp
ZUxvYWRTdGF0ZUxvYWRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVjdCBib3VuZHM7IAor
ICAgIGJvdW5kcy50b3AgPSAwOworICAgIGJvdW5kcy5sZWZ0ID0gMDsgCisgICAgYm91bmRzLnJp
Z2h0ID0gbV93aWR0aDsKKyAgICBib3VuZHMuYm90dG9tID0gbV9oZWlnaHQ7CisgICAgaWYgKG1f
bW92aWVDb250cm9sbGVyKQorICAgICAgICBNQ1NldENvbnRyb2xsZXJCb3VuZHNSZWN0KG1fbW92
aWVDb250cm9sbGVyLCAmYm91bmRzKTsKKyAgICBTZXRNb3ZpZUJveChtX21vdmllLCAmYm91bmRz
KTsKKyAgICB1cGRhdGVHV29ybGQoKTsKK30KKworCit2b2lkIFFUTW92aWVXaW5Qcml2YXRlOjpk
ZWxldGVHV29ybGQoKQoreworICAgIEFTU0VSVChtX2dXb3JsZCk7CisgICAgaWYgKG1fbW92aWVD
b250cm9sbGVyKQorICAgICAgICBNQ1NldENvbnRyb2xsZXJQb3J0KG1fbW92aWVDb250cm9sbGVy
LCBtX3NhdmVkR1dvcmxkKTsKKyAgICBpZiAobV9tb3ZpZSkKKyAgICAgICAgU2V0TW92aWVHV29y
bGQobV9tb3ZpZSwgbV9zYXZlZEdXb3JsZCwgMCk7CisgICAgbV9zYXZlZEdXb3JsZCA9IDA7Cisg
ICAgRGlzcG9zZUdXb3JsZChtX2dXb3JsZCk7IAorICAgIG1fZ1dvcmxkID0gMDsKKyAgICBtX2dX
b3JsZFdpZHRoID0gMDsKKyAgICBtX2dXb3JsZEhlaWdodCA9IDA7Cit9CisKKworUVRNb3ZpZVdp
bjo6UVRNb3ZpZVdpbihRVE1vdmllV2luQ2xpZW50KiBjbGllbnQpCisgICAgOiBtX3ByaXZhdGUo
bmV3IFFUTW92aWVXaW5Qcml2YXRlKCkpCisgICAgLCBtX2Rpc2FibGVkKGZhbHNlKQoreworICAg
IG1fcHJpdmF0ZS0+bV9tb3ZpZVdpbiA9IHRoaXM7CisgICAgbV9wcml2YXRlLT5tX2NsaWVudCA9
IGNsaWVudDsKKyAgICBpbml0aWFsaXplUXVpY2tUaW1lKCk7Cit9CisKK1FUTW92aWVXaW46On5R
VE1vdmllV2luKCkKK3sKKyAgICBkZWxldGUgbV9wcml2YXRlOworfQorCit2b2lkIFFUTW92aWVX
aW46OnBsYXkoKQoreworICAgIG1fcHJpdmF0ZS0+bV90aW1lVG9SZXN0b3JlID0gLTEuMGY7CisK
KyAgICBpZiAobV9wcml2YXRlLT5tX21vdmllQ29udHJvbGxlcikKKyAgICAgICAgTUNEb0FjdGlv
bihtX3ByaXZhdGUtPm1fbW92aWVDb250cm9sbGVyLCBtY0FjdGlvblByZXJvbGxBbmRQbGF5LCAo
dm9pZCAqKUdldE1vdmllUHJlZmVycmVkUmF0ZShtX3ByaXZhdGUtPm1fbW92aWUpKTsKKyAgICBl
bHNlCisgICAgICAgIFN0YXJ0TW92aWUobV9wcml2YXRlLT5tX21vdmllKTsKKyAgICBtX3ByaXZh
dGUtPnN0YXJ0VGFzaygpOworfQorCit2b2lkIFFUTW92aWVXaW46OnBhdXNlKCkKK3sKKyAgICBt
X3ByaXZhdGUtPm1fdGltZVRvUmVzdG9yZSA9IC0xLjBmOworCisgICAgaWYgKG1fcHJpdmF0ZS0+
bV9tb3ZpZUNvbnRyb2xsZXIpCisgICAgICAgIE1DRG9BY3Rpb24obV9wcml2YXRlLT5tX21vdmll
Q29udHJvbGxlciwgbWNBY3Rpb25QbGF5LCAwKTsKKyAgICBlbHNlCisgICAgICAgIFN0b3BNb3Zp
ZShtX3ByaXZhdGUtPm1fbW92aWUpOworICAgIHVwZGF0ZVRhc2tUaW1lcigpOworfQorCitmbG9h
dCBRVE1vdmllV2luOjpyYXRlKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcHJpdmF0ZS0+bV9tb3Zp
ZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIEZpeGVkVG9GbG9hdChHZXRNb3ZpZVJh
dGUobV9wcml2YXRlLT5tX21vdmllKSk7Cit9CisKK3ZvaWQgUVRNb3ZpZVdpbjo6c2V0UmF0ZShm
bG9hdCByYXRlKQoreworICAgIGlmICghbV9wcml2YXRlLT5tX21vdmllKQorICAgICAgICByZXR1
cm47ICAgIAorICAgIG1fcHJpdmF0ZS0+bV90aW1lVG9SZXN0b3JlID0gLTEuMGY7CisgICAgCisg
ICAgaWYgKG1fcHJpdmF0ZS0+bV9tb3ZpZUNvbnRyb2xsZXIpCisgICAgICAgIE1DRG9BY3Rpb24o
bV9wcml2YXRlLT5tX21vdmllQ29udHJvbGxlciwgbWNBY3Rpb25QcmVyb2xsQW5kUGxheSwgKHZv
aWQgKilGbG9hdFRvRml4ZWQocmF0ZSkpOworICAgIGVsc2UKKyAgICAgICAgU2V0TW92aWVSYXRl
KG1fcHJpdmF0ZS0+bV9tb3ZpZSwgRmxvYXRUb0ZpeGVkKHJhdGUpKTsKKyAgICB1cGRhdGVUYXNr
VGltZXIoKTsKK30KKworZmxvYXQgUVRNb3ZpZVdpbjo6ZHVyYXRpb24oKSBjb25zdAoreworICAg
IGlmICghbV9wcml2YXRlLT5tX21vdmllKQorICAgICAgICByZXR1cm4gMDsKKyAgICBUaW1lVmFs
dWUgdmFsID0gR2V0TW92aWVEdXJhdGlvbihtX3ByaXZhdGUtPm1fbW92aWUpOworICAgIFRpbWVT
Y2FsZSBzY2FsZSA9IEdldE1vdmllVGltZVNjYWxlKG1fcHJpdmF0ZS0+bV9tb3ZpZSk7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih2YWwpIC8gc2NhbGU7Cit9CisKK2Zsb2F0IFFUTW92
aWVXaW46OmN1cnJlbnRUaW1lKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcHJpdmF0ZS0+bV9tb3Zp
ZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgVGltZVZhbHVlIHZhbCA9IEdldE1vdmllVGltZSht
X3ByaXZhdGUtPm1fbW92aWUsIDApOworICAgIFRpbWVTY2FsZSBzY2FsZSA9IEdldE1vdmllVGlt
ZVNjYWxlKG1fcHJpdmF0ZS0+bV9tb3ZpZSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0
Pih2YWwpIC8gc2NhbGU7Cit9CisKK3ZvaWQgUVRNb3ZpZVdpbjo6c2V0Q3VycmVudFRpbWUoZmxv
YXQgdGltZSkgY29uc3QKK3sKKyAgICBpZiAoIW1fcHJpdmF0ZS0+bV9tb3ZpZSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV9wcml2YXRlLT5tX3RpbWVUb1Jlc3RvcmUgPSAtMS4wZjsKKyAgICAK
KyAgICBtX3ByaXZhdGUtPm1fc2Vla2luZyA9IHRydWU7CisgICAgVGltZVNjYWxlIHNjYWxlID0g
R2V0TW92aWVUaW1lU2NhbGUobV9wcml2YXRlLT5tX21vdmllKTsKKyAgICBpZiAobV9wcml2YXRl
LT5tX21vdmllQ29udHJvbGxlcil7CisgICAgICAgIFFUUmVzdGFydEF0VGltZVJlY29yZCByZXN0
YXJ0ID0geyB0aW1lICogc2NhbGUgLCAwIH07CisgICAgICAgIE1DRG9BY3Rpb24obV9wcml2YXRl
LT5tX21vdmllQ29udHJvbGxlciwgbWNBY3Rpb25SZXN0YXJ0QXRUaW1lLCAodm9pZCAqKSZyZXN0
YXJ0KTsKKyAgICB9IGVsc2UKKyAgICAgICAgU2V0TW92aWVUaW1lVmFsdWUobV9wcml2YXRlLT5t
X21vdmllLCBUaW1lVmFsdWUodGltZSAqIHNjYWxlKSk7CisgICAgdXBkYXRlVGFza1RpbWVyKCk7
Cit9CisKK3ZvaWQgUVRNb3ZpZVdpbjo6c2V0Vm9sdW1lKGZsb2F0IHZvbHVtZSkKK3sKKyAgICBp
ZiAoIW1fcHJpdmF0ZS0+bV9tb3ZpZSkKKyAgICAgICAgcmV0dXJuOworICAgIFNldE1vdmllVm9s
dW1lKG1fcHJpdmF0ZS0+bV9tb3ZpZSwgc3RhdGljX2Nhc3Q8c2hvcnQ+KHZvbHVtZSAqIDI1Nikp
OworfQorCit2b2lkIFFUTW92aWVXaW46OnNldFByZXNlcnZlc1BpdGNoKGJvb2wgcHJlc2VydmVz
UGl0Y2gpCit7CisgICAgaWYgKCFtX3ByaXZhdGUtPm1fbW92aWUgfHwgIW1fcHJpdmF0ZS0+bV9j
dXJyZW50VVJMKQorICAgICAgICByZXR1cm47CisKKyAgICBPU0VyciBlcnJvcjsKKyAgICBib29s
IHByb3AgPSBmYWxzZTsKKworICAgIGVycm9yID0gUVRHZXRNb3ZpZVByb3BlcnR5KG1fcHJpdmF0
ZS0+bV9tb3ZpZSwga1FUUHJvcGVydHlDbGFzc19BdWRpbywga1FUQXVkaW9Qcm9wZXJ0eUlEX1Jh
dGVDaGFuZ2VzUHJlc2VydmVQaXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
aXplb2Yoa1FUQXVkaW9Qcm9wZXJ0eUlEX1JhdGVDaGFuZ2VzUHJlc2VydmVQaXRjaCksIHN0YXRp
Y19jYXN0PFFUUHJvcGVydHlWYWx1ZVB0cj4oJnByb3ApLCAwKTsKKworICAgIGlmIChlcnJvciB8
fCBwcm9wID09IHByZXNlcnZlc1BpdGNoKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3ByaXZh
dGUtPm1fdGltZVRvUmVzdG9yZSA9IGN1cnJlbnRUaW1lKCk7CisgICAgbV9wcml2YXRlLT5tX3Jh
dGVUb1Jlc3RvcmUgPSByYXRlKCk7CisgICAgbG9hZChtX3ByaXZhdGUtPm1fY3VycmVudFVSTCwg
cHJlc2VydmVzUGl0Y2gpOworfQorCit1bnNpZ25lZCBRVE1vdmllV2luOjpkYXRhU2l6ZSgpIGNv
bnN0Cit7CisgICAgaWYgKCFtX3ByaXZhdGUtPm1fbW92aWUpCisgICAgICAgIHJldHVybiAwOwor
ICAgIHJldHVybiBHZXRNb3ZpZURhdGFTaXplKG1fcHJpdmF0ZS0+bV9tb3ZpZSwgMCwgR2V0TW92
aWVEdXJhdGlvbihtX3ByaXZhdGUtPm1fbW92aWUpKTsKK30KKworZmxvYXQgUVRNb3ZpZVdpbjo6
bWF4VGltZUxvYWRlZCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3ByaXZhdGUtPm1fbW92aWUpCisg
ICAgICAgIHJldHVybiAwOworICAgIFRpbWVWYWx1ZSB2YWw7CisgICAgR2V0TWF4TG9hZGVkVGlt
ZUluTW92aWUobV9wcml2YXRlLT5tX21vdmllLCAmdmFsKTsKKyAgICBUaW1lU2NhbGUgc2NhbGUg
PSBHZXRNb3ZpZVRpbWVTY2FsZShtX3ByaXZhdGUtPm1fbW92aWUpOworICAgIHJldHVybiBzdGF0
aWNfY2FzdDxmbG9hdD4odmFsKSAvIHNjYWxlOworfQorCitsb25nIFFUTW92aWVXaW46OmxvYWRT
dGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bV9sb2FkU3RhdGU7Cit9CisK
K3ZvaWQgUVRNb3ZpZVdpbjo6Z2V0TmF0dXJhbFNpemUoaW50JiB3aWR0aCwgaW50JiBoZWlnaHQp
Cit7CisgICAgUmVjdCByZWN0ID0geyAwLCB9OworCisgICAgaWYgKG1fcHJpdmF0ZS0+bV9tb3Zp
ZSkKKyAgICAgICAgR2V0TW92aWVOYXR1cmFsQm91bmRzUmVjdChtX3ByaXZhdGUtPm1fbW92aWUs
ICZyZWN0KTsKKyAgICB3aWR0aCA9IChyZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0KSAqIG1fcHJpdmF0
ZS0+bV93aWR0aFNjYWxlRmFjdG9yOworICAgIGhlaWdodCA9IChyZWN0LmJvdHRvbSAtIHJlY3Qu
dG9wKSAqIG1fcHJpdmF0ZS0+bV9oZWlnaHRTY2FsZUZhY3RvcjsKK30KKwordm9pZCBRVE1vdmll
V2luOjpzZXRTaXplKGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKyAgICBtX3ByaXZhdGUtPnNl
dFNpemUod2lkdGgsIGhlaWdodCk7CisgICAgdXBkYXRlVGFza1RpbWVyKDApOworfQorCit2b2lk
IFFUTW92aWVXaW46OnNldFZpc2libGUoYm9vbCBiKQoreworICAgIG1fcHJpdmF0ZS0+bV92aXNp
YmxlID0gYjsKKyAgICBtX3ByaXZhdGUtPnVwZGF0ZUdXb3JsZCgpOworfQorCit2b2lkIFFUTW92
aWVXaW46OmdldEN1cnJlbnRGcmFtZUluZm8odm9pZComIGJ1ZmZlciwgdW5zaWduZWQmIGJpdHNQ
ZXJQaXhlbCwgdW5zaWduZWQmIHJvd0J5dGVzLCB1bnNpZ25lZCYgd2lkdGgsIHVuc2lnbmVkJiBo
ZWlnaHQpCit7CisgICAgaWYgKCFtX3ByaXZhdGUtPm1fZ1dvcmxkKSB7CisgICAgICAgIGJ1ZmZl
ciA9IDA7CisgICAgICAgIGJpdHNQZXJQaXhlbCA9IDA7CisgICAgICAgIHJvd0J5dGVzID0gMDsK
KyAgICAgICAgd2lkdGggPSAwOworICAgICAgICBoZWlnaHQgPSAwOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIFBpeE1hcEhhbmRsZSBvZmZzY3JlZW5QaXhNYXAgPSBHZXRHV29ybGRQaXhN
YXAobV9wcml2YXRlLT5tX2dXb3JsZCk7CisgICAgYnVmZmVyID0gKCpvZmZzY3JlZW5QaXhNYXAp
LT5iYXNlQWRkcjsKKyAgICBiaXRzUGVyUGl4ZWwgPSAoKm9mZnNjcmVlblBpeE1hcCktPnBpeGVs
U2l6ZTsKKyAgICByb3dCeXRlcyA9ICgqb2Zmc2NyZWVuUGl4TWFwKS0+cm93Qnl0ZXMgJiAweDNG
RkY7CisgICAgd2lkdGggPSBtX3ByaXZhdGUtPm1fd2lkdGg7CisgICAgaGVpZ2h0ID0gbV9wcml2
YXRlLT5tX2hlaWdodDsKK30KKwordm9pZCBRVE1vdmllV2luOjpwYWludChIREMgaGRjLCBpbnQg
eCwgaW50IHkpCit7CisgICAgaWYgKCFtX3ByaXZhdGUtPm1fZ1dvcmxkKQorICAgICAgICByZXR1
cm47CisKKyAgICBIREMgaGRjU3JjID0gc3RhdGljX2Nhc3Q8SERDPihHZXRQb3J0SERDKHJlaW50
ZXJwcmV0X2Nhc3Q8R3JhZlB0cj4obV9wcml2YXRlLT5tX2dXb3JsZCkpKTsgCisgICAgaWYgKCFo
ZGNTcmMpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEZJWE1FOiBJZiB3ZSBjb3VsZCBkZXRl
cm1pbmUgdGhlIG1vdmllIGhhcyBubyBhbHBoYSwgd2UgY291bGQgdXNlIEJpdEJsdCBmb3IgdGhv
c2UgY2FzZXMsIHdoaWNoIG1pZ2h0IGJlIGZhc3Rlci4KKyAgICBCTEVOREZVTkNUSU9OIGJsZW5k
RnVuY3Rpb247IAorICAgIGJsZW5kRnVuY3Rpb24uQmxlbmRPcCA9IEFDX1NSQ19PVkVSOworICAg
IGJsZW5kRnVuY3Rpb24uQmxlbmRGbGFncyA9IDA7CisgICAgYmxlbmRGdW5jdGlvbi5Tb3VyY2VD
b25zdGFudEFscGhhID0gMjU1OworICAgIGJsZW5kRnVuY3Rpb24uQWxwaGFGb3JtYXQgPSBBQ19T
UkNfQUxQSEE7CisgICAgQWxwaGFCbGVuZChoZGMsIHgsIHksIG1fcHJpdmF0ZS0+bV93aWR0aCwg
bV9wcml2YXRlLT5tX2hlaWdodCwgaGRjU3JjLCAKKyAgICAgICAgIDAsIDAsIG1fcHJpdmF0ZS0+
bV93aWR0aCwgbV9wcml2YXRlLT5tX2hlaWdodCwgYmxlbmRGdW5jdGlvbik7Cit9CisKK3ZvaWQg
UVRNb3ZpZVdpbjo6bG9hZChjb25zdCBVQ2hhciogdXJsLCBpbnQgbGVuLCBib29sIHByZXNlcnZl
c1BpdGNoKQoreworICAgIENGU3RyaW5nUmVmIHVybFN0cmluZ1JlZiA9IENGU3RyaW5nQ3JlYXRl
V2l0aENoYXJhY3RlcnMoa0NGQWxsb2NhdG9yRGVmYXVsdCwgcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBVbmlDaGFyKj4odXJsKSwgbGVuKTsKKyAgICBDRlVSTFJlZiBjZlVSTCA9IENGVVJMQ3JlYXRl
V2l0aFN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCB1cmxTdHJpbmdSZWYsIDApOworCisgICAg
bG9hZChjZlVSTCwgcHJlc2VydmVzUGl0Y2gpOworCisgICAgQ0ZSZWxlYXNlKGNmVVJMKTsKKyAg
ICBDRlJlbGVhc2UodXJsU3RyaW5nUmVmKTsKK30KKwordm9pZCBRVE1vdmllV2luOjpsb2FkKENG
VVJMUmVmIHVybCwgYm9vbCBwcmVzZXJ2ZXNQaXRjaCkKK3sKKyAgICBpZiAoIXVybCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKG1fcHJpdmF0ZS0+bV9tb3ZpZSkgeworICAgICAgICBtX3By
aXZhdGUtPmVuZFRhc2soKTsKKyAgICAgICAgaWYgKG1fcHJpdmF0ZS0+bV9nV29ybGQpCisgICAg
ICAgICAgICBtX3ByaXZhdGUtPmRlbGV0ZUdXb3JsZCgpOworICAgICAgICBpZiAobV9wcml2YXRl
LT5tX21vdmllQ29udHJvbGxlcikKKyAgICAgICAgICAgIERpc3Bvc2VNb3ZpZUNvbnRyb2xsZXIo
bV9wcml2YXRlLT5tX21vdmllQ29udHJvbGxlcik7CisgICAgICAgIG1fcHJpdmF0ZS0+bV9tb3Zp
ZUNvbnRyb2xsZXIgPSAwOworICAgICAgICBEaXNwb3NlTW92aWUobV9wcml2YXRlLT5tX21vdmll
KTsKKyAgICAgICAgbV9wcml2YXRlLT5tX21vdmllID0gMDsKKyAgICAgICAgbV9wcml2YXRlLT5t
X2xvYWRTdGF0ZSA9IDA7CisgICAgfSAgCisKKyAgICAvLyBEZWZpbmUgYSBwcm9wZXJ0eSBhcnJh
eSBmb3IgTmV3TW92aWVGcm9tUHJvcGVydGllcy4gOCBzaG91bGQgYmUgZW5vdWdoIGZvciBvdXIg
bmVlZHMuIAorICAgIFFUTmV3TW92aWVQcm9wZXJ0eUVsZW1lbnQgbW92aWVQcm9wc1s4XTsgCisg
ICAgSXRlbUNvdW50IG1vdmllUHJvcENvdW50ID0gMDsgCisKKyAgICBib29sIGJvb2xUcnVlID0g
dHJ1ZTsKKyAgICAKKyAgICAvLyBEaXNhYmxlIHN0cmVhbWluZyBzdXBwb3J0IGZvciBub3cuIAor
ICAgIENGU3RyaW5nUmVmIHNjaGVtZSA9IENGVVJMQ29weVNjaGVtZSh1cmwpOworICAgIGJvb2wg
aXNSVFNQID0gQ0ZTdHJpbmdIYXNQcmVmaXgoc2NoZW1lLCBDRlNUUigicnRzcDoiKSk7CisgICAg
Q0ZSZWxlYXNlKHNjaGVtZSk7CisKKyAgICBpZiAoaXNSVFNQKSB7CisgICAgICAgIG1fcHJpdmF0
ZS0+bV9sb2FkRXJyb3IgPSBub01vdmllRm91bmQ7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0K
KworICAgIGlmIChtX3ByaXZhdGUtPm1fY3VycmVudFVSTCkgeworICAgICAgICBpZiAobV9wcml2
YXRlLT5tX2N1cnJlbnRVUkwgIT0gdXJsKSB7CisgICAgICAgICAgICBDRlJlbGVhc2UobV9wcml2
YXRlLT5tX2N1cnJlbnRVUkwpOworICAgICAgICAgICAgbV9wcml2YXRlLT5tX2N1cnJlbnRVUkwg
PSB1cmw7CisgICAgICAgICAgICBDRlJldGFpbih1cmwpOworICAgICAgICB9CisgICAgfSBlbHNl
IHsKKyAgICAgICAgbV9wcml2YXRlLT5tX2N1cnJlbnRVUkwgPSB1cmw7CisgICAgICAgIENGUmV0
YWluKHVybCk7CisgICAgfQorCisgICAgLy8gQWRkIHRoZSBtb3ZpZSBkYXRhIGxvY2F0aW9uIHRv
IHRoZSBwcm9wZXJ0eSBhcnJheSAKKyAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9w
Q2xhc3MgPSBrUVRQcm9wZXJ0eUNsYXNzX0RhdGFMb2NhdGlvbjsgCisgICAgbW92aWVQcm9wc1tt
b3ZpZVByb3BDb3VudF0ucHJvcElEID0ga1FURGF0YUxvY2F0aW9uUHJvcGVydHlJRF9DRlVSTDsg
CisgICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcFZhbHVlU2l6ZSA9IHNpemVvZiht
X3ByaXZhdGUtPm1fY3VycmVudFVSTCk7IAorICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRd
LnByb3BWYWx1ZUFkZHJlc3MgPSAmKG1fcHJpdmF0ZS0+bV9jdXJyZW50VVJMKTsgCisgICAgbW92
aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcFN0YXR1cyA9IDA7IAorICAgIG1vdmllUHJvcENv
dW50Kys7IAorCisgICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcENsYXNzID0ga1FU
UHJvcGVydHlDbGFzc19Nb3ZpZUluc3RhbnRpYXRpb247IAorICAgIG1vdmllUHJvcHNbbW92aWVQ
cm9wQ291bnRdLnByb3BJRCA9IGtRVE1vdmllSW5zdGFudGlhdGlvblByb3BlcnR5SURfRG9udEFz
a1VucmVzb2x2ZWREYXRhUmVmczsgCisgICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJv
cFZhbHVlU2l6ZSA9IHNpemVvZihib29sVHJ1ZSk7IAorICAgIG1vdmllUHJvcHNbbW92aWVQcm9w
Q291bnRdLnByb3BWYWx1ZUFkZHJlc3MgPSAmYm9vbFRydWU7IAorICAgIG1vdmllUHJvcHNbbW92
aWVQcm9wQ291bnRdLnByb3BTdGF0dXMgPSAwOyAKKyAgICBtb3ZpZVByb3BDb3VudCsrOyAKKwor
ICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BDbGFzcyA9IGtRVFByb3BlcnR5Q2xh
c3NfTW92aWVJbnN0YW50aWF0aW9uOyAKKyAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5w
cm9wSUQgPSBrUVRNb3ZpZUluc3RhbnRpYXRpb25Qcm9wZXJ0eUlEX0FzeW5jT0s7IAorICAgIG1v
dmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BWYWx1ZVNpemUgPSBzaXplb2YoYm9vbFRydWUp
OyAKKyAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wVmFsdWVBZGRyZXNzID0gJmJv
b2xUcnVlOyAKKyAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wU3RhdHVzID0gMDsg
CisgICAgbW92aWVQcm9wQ291bnQrKzsgCisKKyAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50
XS5wcm9wQ2xhc3MgPSBrUVRQcm9wZXJ0eUNsYXNzX05ld01vdmllUHJvcGVydHk7IAorICAgIG1v
dmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BJRCA9IGtRVE5ld01vdmllUHJvcGVydHlJRF9B
Y3RpdmU7IAorICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BWYWx1ZVNpemUgPSBz
aXplb2YoYm9vbFRydWUpOyAKKyAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wVmFs
dWVBZGRyZXNzID0gJmJvb2xUcnVlOyAKKyAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5w
cm9wU3RhdHVzID0gMDsgCisgICAgbW92aWVQcm9wQ291bnQrKzsgCisKKyAgICBtb3ZpZVByb3Bz
W21vdmllUHJvcENvdW50XS5wcm9wQ2xhc3MgPSBrUVRQcm9wZXJ0eUNsYXNzX05ld01vdmllUHJv
cGVydHk7IAorICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BJRCA9IGtRVE5ld01v
dmllUHJvcGVydHlJRF9Eb250SW50ZXJhY3RXaXRoVXNlcjsgCisgICAgbW92aWVQcm9wc1ttb3Zp
ZVByb3BDb3VudF0ucHJvcFZhbHVlU2l6ZSA9IHNpemVvZihib29sVHJ1ZSk7IAorICAgIG1vdmll
UHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BWYWx1ZUFkZHJlc3MgPSAmYm9vbFRydWU7IAorICAg
IG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BTdGF0dXMgPSAwOyAKKyAgICBtb3ZpZVBy
b3BDb3VudCsrOyAKKworICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BDbGFzcyA9
IGtRVFByb3BlcnR5Q2xhc3NfTW92aWVJbnN0YW50aWF0aW9uOworICAgIG1vdmllUHJvcHNbbW92
aWVQcm9wQ291bnRdLnByb3BJRCA9ICchdXJsJzsKKyAgICBtb3ZpZVByb3BzW21vdmllUHJvcENv
dW50XS5wcm9wVmFsdWVTaXplID0gc2l6ZW9mKGJvb2xUcnVlKTsgCisgICAgbW92aWVQcm9wc1tt
b3ZpZVByb3BDb3VudF0ucHJvcFZhbHVlQWRkcmVzcyA9ICZib29sVHJ1ZTsgCisgICAgbW92aWVQ
cm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcFN0YXR1cyA9IDA7IAorICAgIG1vdmllUHJvcENvdW50
Kys7IAorCisgICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcENsYXNzID0ga1FUUHJv
cGVydHlDbGFzc19Nb3ZpZUluc3RhbnRpYXRpb247IAorICAgIG1vdmllUHJvcHNbbW92aWVQcm9w
Q291bnRdLnByb3BJRCA9ICdzaXRlJzsKKyAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5w
cm9wVmFsdWVTaXplID0gc2l6ZW9mKGJvb2xUcnVlKTsgCisgICAgbW92aWVQcm9wc1ttb3ZpZVBy
b3BDb3VudF0ucHJvcFZhbHVlQWRkcmVzcyA9ICZib29sVHJ1ZTsgCisgICAgbW92aWVQcm9wc1tt
b3ZpZVByb3BDb3VudF0ucHJvcFN0YXR1cyA9IDA7IAorICAgIG1vdmllUHJvcENvdW50Kys7CisK
KyAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wQ2xhc3MgPSBrUVRQcm9wZXJ0eUNs
YXNzX0F1ZGlvOyAKKyAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wSUQgPSBrUVRB
dWRpb1Byb3BlcnR5SURfUmF0ZUNoYW5nZXNQcmVzZXJ2ZVBpdGNoOworICAgIG1vdmllUHJvcHNb
bW92aWVQcm9wQ291bnRdLnByb3BWYWx1ZVNpemUgPSBzaXplb2YocHJlc2VydmVzUGl0Y2gpOyAK
KyAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wVmFsdWVBZGRyZXNzID0gJnByZXNl
cnZlc1BpdGNoOyAKKyAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wU3RhdHVzID0g
MDsgCisgICAgbW92aWVQcm9wQ291bnQrKzsgCisKKyAgICBBU1NFUlQobW92aWVQcm9wQ291bnQg
PD0gc2l6ZW9mKG1vdmllUHJvcHMpL3NpemVvZihtb3ZpZVByb3BzWzBdKSk7CisgICAgbV9wcml2
YXRlLT5tX2xvYWRFcnJvciA9IE5ld01vdmllRnJvbVByb3BlcnRpZXMobW92aWVQcm9wQ291bnQs
IG1vdmllUHJvcHMsIDAsIDAsICZtX3ByaXZhdGUtPm1fbW92aWUpOworCitlbmQ6CisgICAgbV9w
cml2YXRlLT5zdGFydFRhc2soKTsKKyAgICAvLyBnZXQgdGhlIGxvYWQgZmFpbCBjYWxsYmFjayBx
dWlja2x5IAorICAgIGlmIChtX3ByaXZhdGUtPm1fbG9hZEVycm9yKQorICAgICAgICB1cGRhdGVU
YXNrVGltZXIoMCk7CisgICAgZWxzZSB7CisgICAgICAgIE9TVHlwZSBtb2RlID0ga1FUQXBlcnR1
cmVNb2RlX0NsZWFuQXBlcnR1cmU7CisKKyAgICAgICAgLy8gU2V0IHRoZSBhcGVydHVyZSBtb2Rl
IHByb3BlcnR5IG9uIGEgbW92aWUgdG8gc2lnbmFsIHRoYXQgd2Ugd2FudCBhc3BlY3QgcmF0aW8K
KyAgICAgICAgLy8gYW5kIGNsZWFuIGFwZXJ0dXJlIGRpbWVuc2lvbnMuIERvbid0IHdvcnJ5IGFi
b3V0IGVycm9ycywgd2UgY2FuJ3QgZG8gYW55dGhpbmcgaWYKKyAgICAgICAgLy8gdGhlIGluc3Rh
bGxlZCB2ZXJzaW9uIG9mIFFUIGRvZXNuJ3Qgc3VwcG9ydCBpdCBhbmQgaXQgaXNuJ3Qgc2VyaW91
cyBlbm91Z2ggdG8gCisgICAgICAgIC8vIHdhcnJhbnQgZmFpbGluZy4KKyAgICAgICAgUVRTZXRN
b3ZpZVByb3BlcnR5KG1fcHJpdmF0ZS0+bV9tb3ZpZSwga1FUUHJvcGVydHlDbGFzc19WaXN1YWws
IGtRVFZpc3VhbFByb3BlcnR5SURfQXBlcnR1cmVNb2RlLCBzaXplb2YobW9kZSksICZtb2RlKTsK
KyAgICAgICAgbV9wcml2YXRlLT5yZWdpc3RlckRyYXdpbmdDYWxsYmFjaygpOworICAgIH0KK30K
Kwordm9pZCBRVE1vdmllV2luOjpkaXNhYmxlVW5zdXBwb3J0ZWRUcmFja3ModW5zaWduZWQmIGVu
YWJsZWRUcmFja0NvdW50LCB1bnNpZ25lZCYgdG90YWxUcmFja0NvdW50KQoreworICAgIGlmICgh
bV9wcml2YXRlLT5tX21vdmllKSB7CisgICAgICAgIHRvdGFsVHJhY2tDb3VudCA9IDA7CisgICAg
ICAgIGVuYWJsZWRUcmFja0NvdW50ID0gMDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IHN0YXRpYyBIYXNoU2V0PE9TVHlwZT4qIGFsbG93ZWRUcmFja1R5cGVzID0gMDsKKyAgICBpZiAo
IWFsbG93ZWRUcmFja1R5cGVzKSB7CisgICAgICAgIGFsbG93ZWRUcmFja1R5cGVzID0gbmV3IEhh
c2hTZXQ8T1NUeXBlPjsKKyAgICAgICAgYWxsb3dlZFRyYWNrVHlwZXMtPmFkZChWaWRlb01lZGlh
VHlwZSk7CisgICAgICAgIGFsbG93ZWRUcmFja1R5cGVzLT5hZGQoU291bmRNZWRpYVR5cGUpOwor
ICAgICAgICBhbGxvd2VkVHJhY2tUeXBlcy0+YWRkKFRleHRNZWRpYVR5cGUpOworICAgICAgICBh
bGxvd2VkVHJhY2tUeXBlcy0+YWRkKEJhc2VNZWRpYVR5cGUpOworICAgICAgICBhbGxvd2VkVHJh
Y2tUeXBlcy0+YWRkKGNsb3NlZENhcHRpb25UcmFja1R5cGUpOworICAgICAgICBhbGxvd2VkVHJh
Y2tUeXBlcy0+YWRkKHN1YlRpdGxlVHJhY2tUeXBlKTsKKyAgICAgICAgYWxsb3dlZFRyYWNrVHlw
ZXMtPmFkZChtcGVnNE9iamVjdERlc2NyaXB0aW9uVHJhY2tUeXBlKTsKKyAgICAgICAgYWxsb3dl
ZFRyYWNrVHlwZXMtPmFkZChtcGVnNFNjZW5lRGVzY3JpcHRpb25UcmFja1R5cGUpOworICAgICAg
ICBhbGxvd2VkVHJhY2tUeXBlcy0+YWRkKFRpbWVDb2RlTWVkaWFUeXBlKTsKKyAgICAgICAgYWxs
b3dlZFRyYWNrVHlwZXMtPmFkZChUaW1lQ29kZTY0TWVkaWFUeXBlKTsKKyAgICB9CisKKyAgICBs
b25nIHRyYWNrQ291bnQgPSBHZXRNb3ZpZVRyYWNrQ291bnQobV9wcml2YXRlLT5tX21vdmllKTsK
KyAgICBlbmFibGVkVHJhY2tDb3VudCA9IHRyYWNrQ291bnQ7CisgICAgdG90YWxUcmFja0NvdW50
ID0gdHJhY2tDb3VudDsKKworICAgIC8vIFRyYWNrIGluZGV4ZXMgYXJlIDEtYmFzZWQuIHl1Y2su
IFRoZXNlIHRoaW5ncyBtdXN0IGRlc2NlbmQgZnJvbSBvbGQtCisgICAgLy8gc2Nob29sIG1hYyBy
ZXNvdXJjZXMgb3Igc29tZXRoaW5nLgorICAgIGZvciAobG9uZyB0cmFja0luZGV4ID0gMTsgdHJh
Y2tJbmRleCA8PSB0cmFja0NvdW50OyB0cmFja0luZGV4KyspIHsKKyAgICAgICAgLy8gR3JhYiB0
aGUgdHJhY2sgYXQgdGhlIGN1cnJlbnQgaW5kZXguIElmIHRoZXJlIGlzbid0IG9uZSB0aGVyZSwg
dGhlbgorICAgICAgICAvLyB3ZSBjYW4gbW92ZSBvbnRvIHRoZSBuZXh0IG9uZS4KKyAgICAgICAg
VHJhY2sgY3VycmVudFRyYWNrID0gR2V0TW92aWVJbmRUcmFjayhtX3ByaXZhdGUtPm1fbW92aWUs
IHRyYWNrSW5kZXgpOworICAgICAgICBpZiAoIWN1cnJlbnRUcmFjaykKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAKKyAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSB0cmFjayBp
cyBkaXNhYmxlZCBhbHJlYWR5LCB3ZSBzaG91bGQgbW92ZSBhbG9uZy4KKyAgICAgICAgLy8gV2Ug
ZG9uJ3QgbmVlZCB0byByZS1kaXNhYmxlIGl0LgorICAgICAgICBpZiAoIUdldFRyYWNrRW5hYmxl
ZChjdXJyZW50VHJhY2spKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLy8gR3Jh
YiB0aGUgdHJhY2sncyBtZWRpYS4gV2UncmUgZ29pbmcgdG8gY2hlY2sgdG8gc2VlIGlmIHdlIG5l
ZWQgdG8KKyAgICAgICAgLy8gZGlzYWJsZSB0aGUgdHJhY2tzLiBUaGV5IGNvdWxkIGJlIHVuc3Vw
cG9ydGVkLgorICAgICAgICBNZWRpYSB0cmFja01lZGlhID0gR2V0VHJhY2tNZWRpYShjdXJyZW50
VHJhY2spOworICAgICAgICBpZiAoIXRyYWNrTWVkaWEpCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgCisgICAgICAgIC8vIEdyYWIgdGhlIG1lZGlhIHR5cGUgZm9yIHRoaXMgdHJhY2su
IE1ha2Ugc3VyZSB0aGF0IHdlIGRvbid0CisgICAgICAgIC8vIGdldCBhbiBlcnJvciBpbiBkb2lu
ZyBzby4gSWYgd2UgZG8sIHRoZW4gc29tZXRoaW5nIHJlYWxseSBmdW5reSBpcworICAgICAgICAv
LyB3cm9uZy4KKyAgICAgICAgT1NUeXBlIG1lZGlhVHlwZTsKKyAgICAgICAgR2V0TWVkaWFIYW5k
bGVyRGVzY3JpcHRpb24odHJhY2tNZWRpYSwgJm1lZGlhVHlwZSwgbmlsLCBuaWwpOworICAgICAg
ICBPU0VyciBtZWRpYUVyciA9IEdldE1vdmllc0Vycm9yKCk7ICAgIAorICAgICAgICBpZiAobWVk
aWFFcnIgIT0gbm9FcnIpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAg
IGlmICghYWxsb3dlZFRyYWNrVHlwZXMtPmNvbnRhaW5zKG1lZGlhVHlwZSkpIHsKKworICAgICAg
ICAgICAgLy8gRGlmZmVyZW50IG1wZWcgdmFyaWFudHMgaW1wb3J0IGFzIGRpZmZlcmVudCB0cmFj
ayB0eXBlcyBzbyBjaGVjayBmb3IgdGhlICJtcGVnIAorICAgICAgICAgICAgLy8gY2hhcmFjdGVy
aXN0aWMiIGluc3RlYWQgb2YgaGFyZCBjb2RpbmcgdGhlIChjdXJyZW50KSBsaXN0IG9mIG1wZWcg
bWVkaWEgdHlwZXMuCisgICAgICAgICAgICBpZiAoR2V0TW92aWVJbmRUcmFja1R5cGUobV9wcml2
YXRlLT5tX21vdmllLCAxLCAnbXBlZycsIG1vdmllVHJhY2tDaGFyYWN0ZXJpc3RpYyB8IG1vdmll
VHJhY2tFbmFibGVkT25seSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
ICAgIFNldFRyYWNrRW5hYmxlZChjdXJyZW50VHJhY2ssIGZhbHNlKTsKKyAgICAgICAgICAgIC0t
ZW5hYmxlZFRyYWNrQ291bnQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEdyYWIg
dGhlIHRyYWNrIHJlZmVyZW5jZSBjb3VudCBmb3IgY2hhcHRlcnMuIFRoaXMgd2lsbCB0ZWxsIHVz
IGlmIGl0CisgICAgICAgIC8vIGhhcyBjaGFwdGVyIHRyYWNrcyBpbiBpdC4gSWYgdGhlcmUgYXJl
bid0IGFueSByZWZlcmVuY2VzLCB0aGVuIHdlCisgICAgICAgIC8vIGNhbiBtb3ZlIG9uIHRoZSBu
ZXh0IHRyYWNrLgorICAgICAgICBsb25nIHJlZmVyZW5jZUNvdW50ID0gR2V0VHJhY2tSZWZlcmVu
Y2VDb3VudChjdXJyZW50VHJhY2ssIGtUcmFja1JlZmVyZW5jZUNoYXB0ZXJMaXN0KTsKKyAgICAg
ICAgaWYgKHJlZmVyZW5jZUNvdW50IDw9IDApCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgCisgICAgICAgIGxvbmcgcmVmZXJlbmNlSW5kZXggPSAwOyAgICAgICAgCisgICAgICAgIHdo
aWxlICgxKSB7CisgICAgICAgICAgICAvLyBJZiB3ZSBnZXQgbm90aGluZyBoZXJlLCB3ZSd2ZSBv
dmVyc3RlcHBlZCBvdXIgYm91bmRzIGFuZCBjYW4gc3RvcAorICAgICAgICAgICAgLy8gbG9va2lu
Zy4gQ2hhcHRlciBpbmRpY2VzIGhlcmUgYXJlIDEtYmFzZWQgYXMgd2VsbCAtIGhlbmNlLCB0aGUK
KyAgICAgICAgICAgIC8vIHByZS1pbmNyZW1lbnQuCisgICAgICAgICAgICByZWZlcmVuY2VJbmRl
eCsrOworICAgICAgICAgICAgVHJhY2sgY2hhcHRlclRyYWNrID0gR2V0VHJhY2tSZWZlcmVuY2Uo
Y3VycmVudFRyYWNrLCBrVHJhY2tSZWZlcmVuY2VDaGFwdGVyTGlzdCwgcmVmZXJlbmNlSW5kZXgp
OworICAgICAgICAgICAgaWYgKCFjaGFwdGVyVHJhY2spCisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFRyeSB0byBncmFiIHRoZSBtZWRpYSBmb3Ig
dGhlIHRyYWNrLgorICAgICAgICAgICAgTWVkaWEgY2hhcHRlck1lZGlhID0gR2V0VHJhY2tNZWRp
YShjaGFwdGVyVHJhY2spOworICAgICAgICAgICAgaWYgKCFjaGFwdGVyTWVkaWEpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICAgICAgLy8gR3JhYiB0aGUgbWVk
aWEgdHlwZSBmb3IgdGhpcyB0cmFjay4gTWFrZSBzdXJlIHRoYXQgd2UgZG9uJ3QKKyAgICAgICAg
ICAgIC8vIGdldCBhbiBlcnJvciBpbiBkb2luZyBzby4gSWYgd2UgZG8sIHRoZW4gc29tZXRoaW5n
IHJlYWxseQorICAgICAgICAgICAgLy8gZnVua3kgaXMgd3JvbmcuCisgICAgICAgICAgICBPU1R5
cGUgbWVkaWFUeXBlOworICAgICAgICAgICAgR2V0TWVkaWFIYW5kbGVyRGVzY3JpcHRpb24oY2hh
cHRlck1lZGlhLCAmbWVkaWFUeXBlLCBuaWwsIG5pbCk7CisgICAgICAgICAgICBPU0VyciBtZWRp
YUVyciA9IEdldE1vdmllc0Vycm9yKCk7CisgICAgICAgICAgICBpZiAobWVkaWFFcnIgIT0gbm9F
cnIpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IC8vIENoZWNrIHRvIHNlZSBpZiB0aGUgdHJhY2sgaXMgYSB2aWRlbyB0cmFjay4gV2UgZG9uJ3Qg
Y2FyZSBhYm91dAorICAgICAgICAgICAgLy8gb3RoZXIgbm9uLXZpZGVvIHRyYWNrcy4KKyAgICAg
ICAgICAgIGlmIChtZWRpYVR5cGUgIT0gVmlkZW9NZWRpYVR5cGUpCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0
aGUgdHJhY2sgaXMgYWxyZWFkeSBkaXNhYmxlZC4gSWYgaXQgaXMsIHdlCisgICAgICAgICAgICAv
LyBzaG91bGQgbW92ZSBhbG9uZy4KKyAgICAgICAgICAgIGlmICghR2V0VHJhY2tFbmFibGVkKGNo
YXB0ZXJUcmFjaykpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIC8vIERpc2FibGVkIHRoZSBldmlsLCBldmlsIHRyYWNrLgorICAgICAgICAgICAg
U2V0VHJhY2tFbmFibGVkKGNoYXB0ZXJUcmFjaywgZmFsc2UpOworICAgICAgICAgICAgLS1lbmFi
bGVkVHJhY2tDb3VudDsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBRVE1vdmllV2luOjpz
ZXREaXNhYmxlZChib29sIGIpCit7CisgICAgbV9kaXNhYmxlZCA9IGI7Cit9CisKKworYm9vbCBR
VE1vdmllV2luOjpoYXNWaWRlbygpIGNvbnN0Cit7CisgICAgaWYgKCFtX3ByaXZhdGUtPm1fbW92
aWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gKEdldE1vdmllSW5kVHJhY2tU
eXBlKG1fcHJpdmF0ZS0+bV9tb3ZpZSwgMSwgVmlzdWFsTWVkaWFDaGFyYWN0ZXJpc3RpYywgbW92
aWVUcmFja0NoYXJhY3RlcmlzdGljIHwgbW92aWVUcmFja0VuYWJsZWRPbmx5KSk7Cit9CisKK2Jv
b2wgUVRNb3ZpZVdpbjo6aGFzQXVkaW8oKSBjb25zdAoreworICAgIGlmICghbV9wcml2YXRlLT5t
X21vdmllKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIChHZXRNb3ZpZUluZFRy
YWNrVHlwZShtX3ByaXZhdGUtPm1fbW92aWUsIDEsIEF1ZGlvTWVkaWFDaGFyYWN0ZXJpc3RpYywg
bW92aWVUcmFja0NoYXJhY3RlcmlzdGljIHwgbW92aWVUcmFja0VuYWJsZWRPbmx5KSk7Cit9CisK
KworYm9vbCBRVE1vdmllV2luOjpoYXNDbG9zZWRDYXB0aW9ucygpIGNvbnN0IAoreworICAgIGlm
ICghbV9wcml2YXRlLT5tX21vdmllKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJu
IEdldE1vdmllSW5kVHJhY2tUeXBlKG1fcHJpdmF0ZS0+bV9tb3ZpZSwgMSwgY2xvc2VkQ2FwdGlv
blRyYWNrVHlwZSwgbW92aWVUcmFja01lZGlhVHlwZSk7Cit9CisKK3ZvaWQgUVRNb3ZpZVdpbjo6
c2V0Q2xvc2VkQ2FwdGlvbnNWaXNpYmxlKGJvb2wgdmlzaWJsZSkKK3sKKyAgICBpZiAoIW1fcHJp
dmF0ZS0+bV9tb3ZpZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVHJhY2sgY2NUcmFjayA9IEdl
dE1vdmllSW5kVHJhY2tUeXBlKG1fcHJpdmF0ZS0+bV9tb3ZpZSwgMSwgY2xvc2VkQ2FwdGlvblRy
YWNrVHlwZSwgbW92aWVUcmFja01lZGlhVHlwZSk7CisgICAgaWYgKCFjY1RyYWNrKQorICAgICAg
ICByZXR1cm47CisKKyAgICBCb29sZWFuIGRvRGlzcGxheSA9IHZpc2libGU7CisgICAgUVRTZXRU
cmFja1Byb3BlcnR5KGNjVHJhY2ssIGNsb3NlZENhcHRpb25UcmFja1R5cGUsIGNsb3NlZENhcHRp
b25EaXNwbGF5UHJvcGVydHlJRCwgc2l6ZW9mKGRvRGlzcGxheSksICZkb0Rpc3BsYXkpOworfQor
CitwYXNjYWwgT1NFcnIgbW92aWVEcmF3aW5nQ29tcGxldGVQcm9jKE1vdmllIG1vdmllLCBsb25n
IGRhdGEpCit7CisgICAgVXBwUGFyYW0gcGFyYW07CisgICAgcGFyYW0ubG9uZ1ZhbHVlID0gZGF0
YTsKKyAgICBRVE1vdmllV2luUHJpdmF0ZSogbXAgPSBzdGF0aWNfY2FzdDxRVE1vdmllV2luUHJp
dmF0ZSo+KHBhcmFtLnB0cik7CisgICAgaWYgKG1wKQorICAgICAgICBtcC0+ZHJhd2luZ0NvbXBs
ZXRlKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGluaXRpYWxpemVTdXBwb3J0
ZWRUeXBlcygpIAoreworICAgIGlmIChnU3VwcG9ydGVkVHlwZXMpCisgICAgICAgIHJldHVybjsK
KworICAgIGdTdXBwb3J0ZWRUeXBlcyA9IG5ldyBWZWN0b3I8Q0ZTdHJpbmdSZWY+OworICAgIGlm
IChxdWlja1RpbWVWZXJzaW9uIDwgbWluaW11bVF1aWNrVGltZVZlcnNpb24pIHsKKyAgICAgICAg
TE9HX0VSUk9SKCJRdWlja1RpbWUgdmVyc2lvbiAleCBkZXRlY3RlZCwgYXQgbGVhc3QgJXggcmVx
dWlyZWQuIFJldHVybmluZyBlbXB0eSBsaXN0IG9mIHN1cHBvcnRlZCBtZWRpYSBNSU1FIHR5cGVz
LiIsIHF1aWNrVGltZVZlcnNpb24sIG1pbmltdW1RdWlja1RpbWVWZXJzaW9uKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIC8vIFF1aWNrVGltZSBkb2Vzbid0IGhhdmUgYW4gaW1wb3J0
ZXIgZm9yIHZpZGVvL3F1aWNrdGltZS4gQWRkIGl0IG1hbnVhbGx5LgorICAgIGdTdXBwb3J0ZWRU
eXBlcy0+YXBwZW5kKENGU1RSKCJ2aWRlby9xdWlja3RpbWUiKSk7CisKKyAgICBmb3IgKGludCBp
bmRleCA9IDA7IGluZGV4IDwgMjsgaW5kZXgrKykgeworICAgICAgICBDb21wb25lbnREZXNjcmlw
dGlvbiBmaW5kQ0Q7CisKKyAgICAgICAgLy8gbG9vayBhdCBhbGwgbW92aWUgaW1wb3J0ZXJzIHRo
YXQgY2FuIGltcG9ydCBpbiBwbGFjZSBhbmQgYXJlIGluc3RhbGxlZC4gCisgICAgICAgIGZpbmRD
RC5jb21wb25lbnRUeXBlID0gTW92aWVJbXBvcnRUeXBlOworICAgICAgICBmaW5kQ0QuY29tcG9u
ZW50U3ViVHlwZSA9IDA7CisgICAgICAgIGZpbmRDRC5jb21wb25lbnRNYW51ZmFjdHVyZXIgPSAw
OworICAgICAgICBmaW5kQ0QuY29tcG9uZW50RmxhZ3NNYXNrID0gY21wSXNNaXNzaW5nIHwgbW92
aWVJbXBvcnRTdWJUeXBlSXNGaWxlRXh0ZW5zaW9uIHwgY2FuTW92aWVJbXBvcnRJblBsYWNlIHwg
ZG9udEF1dG9GaWxlTW92aWVJbXBvcnQ7CisKKyAgICAgICAgLy8gbG9vayBhdCB0aG9zZSByZWdp
c3RlcmVkIGJ5IEhGUyBmaWxlIHR5cGVzIHRoZSBmaXJzdCB0aW1lIHRocm91Z2gsIGJ5IGZpbGUg
ZXh0ZW5zaW9uIHRoZSBzZWNvbmQgdGltZQorICAgICAgICBmaW5kQ0QuY29tcG9uZW50RmxhZ3Mg
PSBjYW5Nb3ZpZUltcG9ydEluUGxhY2UgfCAoaW5kZXggPyBtb3ZpZUltcG9ydFN1YlR5cGVJc0Zp
bGVFeHRlbnNpb24gOiAwKTsKKyAgICAgICAgCisgICAgICAgIGxvbmcgY29tcG9uZW50Q291bnQg
PSBDb3VudENvbXBvbmVudHMoJmZpbmRDRCk7CisgICAgICAgIGlmICghY29tcG9uZW50Q291bnQp
CisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBDb21wb25lbnQgY29tcCA9IDA7Cisg
ICAgICAgIHdoaWxlIChjb21wID0gRmluZE5leHRDb21wb25lbnQoY29tcCwgJmZpbmRDRCkpIHsK
KyAgICAgICAgICAgIC8vIERvZXMgdGhpcyBjb21wb25lbnQgaGF2ZSBhIE1JTUUgdHlwZSBjb250
YWluZXI/CisgICAgICAgICAgICBDb21wb25lbnREZXNjcmlwdGlvbiBpbmZvQ0Q7CisgICAgICAg
ICAgICBPU0VyciBlcnIgPSBHZXRDb21wb25lbnRJbmZvKGNvbXAsICZpbmZvQ0QsIG5pbCAvKm5h
bWUqLywgbmlsIC8qaW5mbyovLCBuaWwgLyppY29uKi8pOworICAgICAgICAgICAgaWYgKGVycikK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmICghKGluZm9DRC5jb21w
b25lbnRGbGFncyAmIGhhc01vdmllSW1wb3J0TUlNRUxpc3QpKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgUVRBdG9tQ29udGFpbmVyIG1pbWVMaXN0ID0gMDsKKyAgICAg
ICAgICAgIGVyciA9IE1vdmllSW1wb3J0R2V0TUlNRVR5cGVMaXN0KChDb21wb25lbnRJbnN0YW5j
ZSljb21wLCAmbWltZUxpc3QpOworICAgICAgICAgICAgaWYgKGVyciB8fCAhbWltZUxpc3QpCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIC8vIEdyYWIgZXZlcnkgdHlw
ZSBmcm9tIHRoZSBjb250YWluZXIuCisgICAgICAgICAgICBRVExvY2tDb250YWluZXIobWltZUxp
c3QpOworICAgICAgICAgICAgaW50IHR5cGVDb3VudCA9IFFUQ291bnRDaGlsZHJlbk9mVHlwZSht
aW1lTGlzdCwga1BhcmVudEF0b21Jc0NvbnRhaW5lciwga01pbWVJbmZvTWltZVR5cGVUYWcpOwor
ICAgICAgICAgICAgZm9yIChpbnQgdHlwZUluZGV4ID0gMTsgdHlwZUluZGV4IDw9IHR5cGVDb3Vu
dDsgdHlwZUluZGV4KyspIHsKKyAgICAgICAgICAgICAgICBRVEF0b20gbWltZVRhZyA9IFFURmlu
ZENoaWxkQnlJbmRleChtaW1lTGlzdCwgMCwga01pbWVJbmZvTWltZVR5cGVUYWcsIHR5cGVJbmRl
eCwgMCk7CisgICAgICAgICAgICAgICAgaWYgKCFtaW1lVGFnKQorICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBjaGFyKiBhdG9tRGF0YTsKKyAgICAgICAgICAg
ICAgICBsb25nIHR5cGVMZW5ndGg7CisgICAgICAgICAgICAgICAgaWYgKG5vRXJyICE9IFFUR2V0
QXRvbURhdGFQdHIobWltZUxpc3QsIG1pbWVUYWcsICZ0eXBlTGVuZ3RoLCAmYXRvbURhdGEpKQor
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIGNoYXIgdHlw
ZUJ1ZmZlclsyNTZdOworICAgICAgICAgICAgICAgIGlmICh0eXBlTGVuZ3RoID49IHNpemVvZih0
eXBlQnVmZmVyKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAg
ICAgbWVtY3B5KHR5cGVCdWZmZXIsIGF0b21EYXRhLCB0eXBlTGVuZ3RoKTsKKyAgICAgICAgICAg
ICAgICB0eXBlQnVmZmVyW3R5cGVMZW5ndGhdID0gMDsKKworICAgICAgICAgICAgICAgIC8vIE9u
bHkgYWRkICJhdWRpby8uLi4iIGFuZCAidmlkZW8vLi4uIiB0eXBlcy4KKyAgICAgICAgICAgICAg
ICBpZiAoc3RybmNtcCh0eXBlQnVmZmVyLCAiYXVkaW8vIiwgNikgJiYgc3RybmNtcCh0eXBlQnVm
ZmVyLCAidmlkZW8vIiwgNikpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgICAgICAgICAgQ0ZTdHJpbmdSZWYgY2ZNaW1lVHlwZSA9IENGU3RyaW5nQ3JlYXRlV2l0aENT
dHJpbmcoMCwgdHlwZUJ1ZmZlciwga0NGU3RyaW5nRW5jb2RpbmdVVEY4KTsKKyAgICAgICAgICAg
ICAgICBpZiAoIWNmTWltZVR5cGUpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgICAgICAgICAgLy8gT25seSBhZGQgZWFjaCB0eXBlIG9uY2UuCisgICAgICAgICAgICAg
ICAgYm9vbCBhbHJlYWR5QWRkZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBh
ZGRlZEluZGV4ID0gMDsgYWRkZWRJbmRleCA8IGdTdXBwb3J0ZWRUeXBlcy0+c2l6ZSgpOyBhZGRl
ZEluZGV4KyspIHsKKyAgICAgICAgICAgICAgICAgICAgQ0ZTdHJpbmdSZWYgdHlwZSA9IGdTdXBw
b3J0ZWRUeXBlcy0+YXQoYWRkZWRJbmRleCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChrQ0ZD
b21wYXJlRXF1YWxUbyA9PSBDRlN0cmluZ0NvbXBhcmUoY2ZNaW1lVHlwZSwgdHlwZSwga0NGQ29t
cGFyZUNhc2VJbnNlbnNpdGl2ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFscmVhZHlB
ZGRlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIWFscmVh
ZHlBZGRlZCkKKyAgICAgICAgICAgICAgICAgICAgZ1N1cHBvcnRlZFR5cGVzLT5hcHBlbmQoY2ZN
aW1lVHlwZSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBDRlJl
bGVhc2UoY2ZNaW1lVHlwZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBEaXNwb3NlSGFu
ZGxlKG1pbWVMaXN0KTsKKyAgICAgICAgfQorICAgIH0KK30KKwordW5zaWduZWQgUVRNb3ZpZVdp
bjo6Y291bnRTdXBwb3J0ZWRUeXBlcygpCit7CisgICAgaW5pdGlhbGl6ZVN1cHBvcnRlZFR5cGVz
KCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihnU3VwcG9ydGVkVHlwZXMtPnNp
emUoKSk7Cit9CisKK3ZvaWQgUVRNb3ZpZVdpbjo6Z2V0U3VwcG9ydGVkVHlwZSh1bnNpZ25lZCBp
bmRleCwgY29uc3QgVUNoYXIqJiBzdHIsIHVuc2lnbmVkJiBsZW4pCit7CisgICAgaW5pdGlhbGl6
ZVN1cHBvcnRlZFR5cGVzKCk7CisgICAgQVNTRVJUKGluZGV4IDwgZ1N1cHBvcnRlZFR5cGVzLT5z
aXplKCkpOworCisgICAgLy8gQWxsb2NhdGUgc3VmZmljaWVudCBidWZmZXIgdG8gaG9sZCBhbnkg
TUlNRSB0eXBlCisgICAgc3RhdGljIFVuaUNoYXIqIHN0YXRpY0J1ZmZlciA9IDA7CisgICAgaWYg
KCFzdGF0aWNCdWZmZXIpCisgICAgICAgIHN0YXRpY0J1ZmZlciA9IG5ldyBVbmlDaGFyWzMyXTsK
KworICAgIENGU3RyaW5nUmVmIGNmc3RyID0gZ1N1cHBvcnRlZFR5cGVzLT5hdChpbmRleCk7Cisg
ICAgbGVuID0gQ0ZTdHJpbmdHZXRMZW5ndGgoY2ZzdHIpOworICAgIENGUmFuZ2UgcmFuZ2UgPSB7
IDAsIGxlbiB9OworICAgIENGU3RyaW5nR2V0Q2hhcmFjdGVycyhjZnN0ciwgcmFuZ2UsIHN0YXRp
Y0J1ZmZlcik7CisgICAgc3RyID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KHN0YXRp
Y0J1ZmZlcik7CisgICAgCit9CisKK3ZvaWQgUVRNb3ZpZVdpbjo6c2V0VGFza1RpbWVyRnVuY3Mo
U2V0VGFza1RpbWVyRGVsYXlGdW5jIHNldFRhc2tUaW1lckRlbGF5LCBTdG9wVGFza1RpbWVyRnVu
YyBzdG9wVGFza1RpbWVyKQoreworICAgIGdTZXRUYXNrVGltZXJEZWxheSA9IHNldFRhc2tUaW1l
ckRlbGF5OworICAgIGdTdG9wVGFza1RpbWVyID0gc3RvcFRhc2tUaW1lcjsKK30KKworYm9vbCBR
VE1vdmllV2luOjppbml0aWFsaXplUXVpY2tUaW1lKCkgCit7CisgICAgc3RhdGljIGJvb2wgaW5p
dGlhbGl6ZWQgPSBmYWxzZTsKKyAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXphdGlvblN1Y2NlZWRl
ZCA9IGZhbHNlOworICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgaW5pdGlhbGl6ZWQg
PSB0cnVlOworICAgICAgICAvLyBJbml0aWFsaXplIGFuZCBjaGVjayBRdWlja1RpbWUgdmVyc2lv
bgorICAgICAgICBPU0VyciByZXN1bHQgPSBJbml0aWFsaXplUVRNTChrSW5pdGlhbGl6ZVFUTUxF
bmFibGVEb3VibGVCdWZmZXJlZFN1cmZhY2UpOworICAgICAgICBpZiAocmVzdWx0ID09IG5vRXJy
KQorICAgICAgICAgICAgcmVzdWx0ID0gR2VzdGFsdChnZXN0YWx0UXVpY2tUaW1lLCAmcXVpY2tU
aW1lVmVyc2lvbik7CisgICAgICAgIGlmIChyZXN1bHQgIT0gbm9FcnIpIHsKKyAgICAgICAgICAg
IExPR19FUlJPUigiTm8gUXVpY2tUaW1lIGF2YWlsYWJsZS4gRGlzYWJsaW5nIDx2aWRlbz4gYW5k
IDxhdWRpbz4gc3VwcG9ydC4iKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgICAgICBpZiAocXVpY2tUaW1lVmVyc2lvbiA8IG1pbmltdW1RdWlja1RpbWVWZXJzaW9u
KSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIlF1aWNrVGltZSB2ZXJzaW9uICV4IGRldGVjdGVk
LCBhdCBsZWFzdCAleCByZXF1aXJlZC4gRGlzYWJsaW5nIDx2aWRlbz4gYW5kIDxhdWRpbz4gc3Vw
cG9ydC4iLCBxdWlja1RpbWVWZXJzaW9uLCBtaW5pbXVtUXVpY2tUaW1lVmVyc2lvbik7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgRW50ZXJNb3ZpZXMoKTsK
KyAgICAgICAgZ01vdmllRHJhd2luZ0NvbXBsZXRlVVBQID0gTmV3TW92aWVEcmF3aW5nQ29tcGxl
dGVVUFAobW92aWVEcmF3aW5nQ29tcGxldGVQcm9jKTsKKyAgICAgICAgaW5pdGlhbGl6YXRpb25T
dWNjZWVkZWQgPSB0cnVlOworICAgIH0KKyAgICByZXR1cm4gaW5pdGlhbGl6YXRpb25TdWNjZWVk
ZWQ7Cit9CisKK0xSRVNVTFQgUVRNb3ZpZVdpbjo6ZnVsbHNjcmVlblduZFByb2MoSFdORCB3bmQs
IFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3sKKyAgICBRVE1v
dmllV2luKiBtb3ZpZSA9IHN0YXRpY19jYXN0PFFUTW92aWVXaW4qPihHZXRQcm9wKHduZCwgZnVs
bHNjcmVlblFUTW92aWVXaW5Qb2ludGVyUHJvcCkpOworCisgICAgaWYgKG1lc3NhZ2UgPT0gV01f
REVTVFJPWSkKKyAgICAgICAgUmVtb3ZlUHJvcCh3bmQsIGZ1bGxzY3JlZW5RVE1vdmllV2luUG9p
bnRlclByb3ApOworCisgICAgaWYgKCFtb3ZpZSkKKyAgICAgICAgcmV0dXJuIERlZldpbmRvd1By
b2Mod25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7CisKKyAgICByZXR1cm4gbW92aWUtPm1f
cHJpdmF0ZS0+bV9mdWxsc2NyZWVuQ2xpZW50LT5mdWxsc2NyZWVuQ2xpZW50V25kUHJvYyh3bmQs
IG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtKTsKK30KKworSFdORCBRVE1vdmllV2luOjplbnRlckZ1
bGxzY3JlZW4oUVRNb3ZpZVdpbkZ1bGxzY3JlZW5DbGllbnQqIGNsaWVudCkKK3sKKyAgICBtX3By
aXZhdGUtPm1fZnVsbHNjcmVlbkNsaWVudCA9IGNsaWVudDsKKyAgICAKKyAgICBCZWdpbkZ1bGxT
Y3JlZW4oJm1fcHJpdmF0ZS0+bV9mdWxsc2NyZWVuUmVzdG9yZVN0YXRlLCAwLCAwLCAwLCAmbV9w
cml2YXRlLT5tX2Z1bGxzY3JlZW5XaW5kb3csIDAsIGZ1bGxTY3JlZW5BbGxvd0V2ZW50cyk7IAor
ICAgIFFUTUxTZXRXaW5kb3dXbmRQcm9jKG1fcHJpdmF0ZS0+bV9mdWxsc2NyZWVuV2luZG93LCBm
dWxsc2NyZWVuV25kUHJvYyk7CisgICAgQ3JlYXRlUG9ydEFzc29jaWF0aW9uKEdldFBvcnROYXRp
dmVXaW5kb3cobV9wcml2YXRlLT5tX2Z1bGxzY3JlZW5XaW5kb3cpLCAwLCAwKTsKKworICAgIEdl
dE1vdmllQm94KG1fcHJpdmF0ZS0+bV9tb3ZpZSwgJm1fcHJpdmF0ZS0+bV9mdWxsc2NyZWVuUmVj
dCk7CisgICAgR2V0TW92aWVHV29ybGQobV9wcml2YXRlLT5tX21vdmllLCAmbV9wcml2YXRlLT5t
X2Z1bGxzY3JlZW5PcmlnR1dvcmxkLCAwKTsKKyAgICBTZXRNb3ZpZUdXb3JsZChtX3ByaXZhdGUt
Pm1fbW92aWUsIHJlaW50ZXJwcmV0X2Nhc3Q8Q0dyYWZQdHI+KG1fcHJpdmF0ZS0+bV9mdWxsc2Ny
ZWVuV2luZG93KSwgR2V0R1dvcmxkRGV2aWNlKHJlaW50ZXJwcmV0X2Nhc3Q8Q0dyYWZQdHI+KG1f
cHJpdmF0ZS0+bV9mdWxsc2NyZWVuV2luZG93KSkpOworCisgICAgLy8gU2V0IHRoZSBzaXplIG9m
IHRoZSBib3ggdG8gcHJlc2VydmUgYXNwZWN0IHJhdGlvCisgICAgUmVjdCByZWN0ID0gbV9wcml2
YXRlLT5tX2Z1bGxzY3JlZW5XaW5kb3ctPnBvcnRSZWN0OworCisgICAgZmxvYXQgbW92aWVSYXRp
byA9IHN0YXRpY19jYXN0PGZsb2F0PihtX3ByaXZhdGUtPm1fd2lkdGgpIC8gbV9wcml2YXRlLT5t
X2hlaWdodDsKKyAgICBpbnQgd2luZG93V2lkdGggPSAgcmVjdC5yaWdodCAtIHJlY3QubGVmdDsK
KyAgICBpbnQgd2luZG93SGVpZ2h0ID0gcmVjdC5ib3R0b20gLSByZWN0LnRvcDsKKyAgICBmbG9h
dCB3aW5kb3dSYXRpbyA9IHN0YXRpY19jYXN0PGZsb2F0Pih3aW5kb3dXaWR0aCkgLyB3aW5kb3dI
ZWlnaHQ7CisgICAgaW50IGFjdHVhbFdpZHRoID0gKHdpbmRvd1JhdGlvID4gbW92aWVSYXRpbykg
PyAod2luZG93SGVpZ2h0ICogbW92aWVSYXRpbykgOiB3aW5kb3dXaWR0aDsKKyAgICBpbnQgYWN0
dWFsSGVpZ2h0ID0gKHdpbmRvd1JhdGlvIDwgbW92aWVSYXRpbykgPyAod2luZG93V2lkdGggLyBt
b3ZpZVJhdGlvKSA6IHdpbmRvd0hlaWdodDsKKyAgICBpbnQgb2Zmc2V0WCA9ICh3aW5kb3dXaWR0
aCAtIGFjdHVhbFdpZHRoKSAvIDI7CisgICAgaW50IG9mZnNldFkgPSAod2luZG93SGVpZ2h0IC0g
YWN0dWFsSGVpZ2h0KSAvIDI7CisKKyAgICByZWN0LmxlZnQgPSBvZmZzZXRYOworICAgIHJlY3Qu
cmlnaHQgPSBvZmZzZXRYICsgYWN0dWFsV2lkdGg7CisgICAgcmVjdC50b3AgPSBvZmZzZXRZOwor
ICAgIHJlY3QuYm90dG9tID0gb2Zmc2V0WSArIGFjdHVhbEhlaWdodDsKKworICAgIFNldE1vdmll
Qm94KG1fcHJpdmF0ZS0+bV9tb3ZpZSwgJnJlY3QpOworICAgIFNob3dIaWRlVGFza0Jhcih0cnVl
KTsKKworICAgIC8vIFNldCB0aGUgJ3RoaXMnIHBvaW50ZXIgb24gdGhlIEhXTkQKKyAgICBIV05E
IHduZCA9IHN0YXRpY19jYXN0PEhXTkQ+KEdldFBvcnROYXRpdmVXaW5kb3cobV9wcml2YXRlLT5t
X2Z1bGxzY3JlZW5XaW5kb3cpKTsKKyAgICBTZXRQcm9wKHduZCwgZnVsbHNjcmVlblFUTW92aWVX
aW5Qb2ludGVyUHJvcCwgc3RhdGljX2Nhc3Q8SEFORExFPih0aGlzKSk7CisKKyAgICByZXR1cm4g
d25kOworfQorCit2b2lkIFFUTW92aWVXaW46OmV4aXRGdWxsc2NyZWVuKCkKK3sKKyAgICBpZiAo
IW1fcHJpdmF0ZS0+bV9mdWxsc2NyZWVuV2luZG93KQorICAgICAgICByZXR1cm47CisKKyAgICBI
V05EIHduZCA9IHN0YXRpY19jYXN0PEhXTkQ+KEdldFBvcnROYXRpdmVXaW5kb3cobV9wcml2YXRl
LT5tX2Z1bGxzY3JlZW5XaW5kb3cpKTsKKyAgICBEZXN0cm95UG9ydEFzc29jaWF0aW9uKHJlaW50
ZXJwcmV0X2Nhc3Q8Q0dyYWZQdHI+KG1fcHJpdmF0ZS0+bV9mdWxsc2NyZWVuV2luZG93KSk7Cisg
ICAgU2V0TW92aWVHV29ybGQobV9wcml2YXRlLT5tX21vdmllLCBtX3ByaXZhdGUtPm1fZnVsbHNj
cmVlbk9yaWdHV29ybGQsIDApOworICAgIEVuZEZ1bGxTY3JlZW4obV9wcml2YXRlLT5tX2Z1bGxz
Y3JlZW5SZXN0b3JlU3RhdGUsIDBMKTsKKyAgICBTZXRNb3ZpZUJveChtX3ByaXZhdGUtPm1fbW92
aWUsICZtX3ByaXZhdGUtPm1fZnVsbHNjcmVlblJlY3QpOworICAgIG1fcHJpdmF0ZS0+bV9mdWxs
c2NyZWVuV2luZG93ID0gMDsKK30KKworQk9PTCBXSU5BUEkgRGxsTWFpbihISU5TVEFOQ0UgaGlu
c3RETEwsIERXT1JEIGZkd1JlYXNvbiwgTFBWT0lEIGxwdlJlc2VydmVkKQoreworICAgIHN3aXRj
aCAoZmR3UmVhc29uKSB7CisgICAgY2FzZSBETExfUFJPQ0VTU19BVFRBQ0g6CisgICAgICAgIHJl
dHVybiBUUlVFOworICAgIGNhc2UgRExMX1BST0NFU1NfREVUQUNIOgorICAgIGNhc2UgRExMX1RI
UkVBRF9BVFRBQ0g6CisgICAgY2FzZSBETExfVEhSRUFEX0RFVEFDSDoKKyAgICAgICAgcmV0dXJu
IEZBTFNFOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gRkFM
U0U7Cit9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVE1vdmllLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVE1vdmllLmNwcAko
cmV2aXNpb24gNTgxODcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVE1vdmll
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsMTcgKzI0LDE1IEBACiAgKi8KICNpbmNsdWRlICJj
b25maWcuaCIKIAotI2luY2x1ZGUgIlFUTW92aWVXaW4uaCIKLQotLy8gUHV0IE1vdmllcy5oIGZp
cnN0IHNvIGJ1aWxkIGZhaWx1cmVzIGhlcmUgcG9pbnQgY2xlYXJseSB0byBRdWlja1RpbWUKLSNp
bmNsdWRlIDxNb3ZpZXMuaD4KKyNpbmNsdWRlICJRVE1vdmllLmgiCiAKKyNpbmNsdWRlICJRVE1v
dmllVGFzay5oIgogI2luY2x1ZGUgIlFUTW92aWVXaW5UaW1lci5oIgogI2luY2x1ZGUgPEdYTWF0
aC5oPgorI2luY2x1ZGUgPE1vdmllcy5oPgogI2luY2x1ZGUgPFFUTUwuaD4KICNpbmNsdWRlIDxR
dWlja1RpbWVDb21wb25lbnRzLmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNs
dWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtNDcsNyArNDUsNyBAQCBzdGF0aWMgY29uc3QgbG9uZyBz
dWJUaXRsZVRyYWNrVHlwZSA9ICdzCiBzdGF0aWMgY29uc3QgbG9uZyBtcGVnNE9iamVjdERlc2Ny
aXB0aW9uVHJhY2tUeXBlID0gJ29kc20nOwogc3RhdGljIGNvbnN0IGxvbmcgbXBlZzRTY2VuZURl
c2NyaXB0aW9uVHJhY2tUeXBlID0gJ3Nkc20nOwogc3RhdGljIGNvbnN0IGxvbmcgY2xvc2VkQ2Fw
dGlvbkRpc3BsYXlQcm9wZXJ0eUlEID0gJ2Rpc3AnOwotc3RhdGljIExQQ1RTVFIgZnVsbHNjcmVl
blFUTW92aWVXaW5Qb2ludGVyUHJvcCA9IFRFWFQoImZ1bGxzY3JlZW5RVE1vdmllV2luUG9pbnRl
ciIpOworc3RhdGljIExQQ1RTVFIgZnVsbHNjcmVlblFUTW92aWVQb2ludGVyUHJvcCA9IFRFWFQo
ImZ1bGxzY3JlZW5RVE1vdmllUG9pbnRlciIpOwogCiAvLyBSZXNpemluZyBHV29ybGRzIGlzIHNs
b3csIGdpdmUgdGhlbSBhIG1pbmltdW0gc2l6ZSBzbyBzaXplIG9mIHNtYWxsIAogLy8gdmlkZW9z
IGNhbiBiZSBhbmltYXRlZCBzbW9vdGhseQpAQCAtNjEsNTMgKzU5LDI1IEBAIHVuaW9uIFVwcFBh
cmFtIHsKICAgICB2b2lkKiBwdHI7CiB9OwogCi1zdGF0aWMgTW92aWVEcmF3aW5nQ29tcGxldGVV
UFAgZ01vdmllRHJhd2luZ0NvbXBsZXRlVVBQID0gMDsKLXN0YXRpYyBIYXNoU2V0PFFUTW92aWVX
aW5Qcml2YXRlKj4qIGdUYXNrTGlzdDsKIHN0YXRpYyBWZWN0b3I8Q0ZTdHJpbmdSZWY+KiBnU3Vw
cG9ydGVkVHlwZXMgPSAwOwogc3RhdGljIFNJbnQzMiBxdWlja1RpbWVWZXJzaW9uID0gMDsKIAot
c3RhdGljIFFUTW92aWVXaW46OlNldFRhc2tUaW1lckRlbGF5RnVuYyBnU2V0VGFza1RpbWVyRGVs
YXkgPSAwOwotc3RhdGljIFFUTW92aWVXaW46OlN0b3BUYXNrVGltZXJGdW5jIGdTdG9wVGFza1Rp
bWVyID0gMDsKLQotc3RhdGljIHZvaWQgdXBkYXRlVGFza1RpbWVyKGludCBtYXhJbnRlcnZhbCA9
IDEwMDApCi17Ci0gICAgaWYgKCFnVGFza0xpc3QtPnNpemUoKSkgewotICAgICAgICBnU3RvcFRh
c2tUaW1lcigpOwotICAgICAgICByZXR1cm47ICAgIAotICAgIH0KLSAgICAKLSAgICBsb25nIGlu
dGVydmFsSW5NUzsKLSAgICBRVEdldFRpbWVVbnRpbE5leHRUYXNrKCZpbnRlcnZhbEluTVMsIDEw
MDApOwotICAgIGlmIChpbnRlcnZhbEluTVMgPiBtYXhJbnRlcnZhbCkKLSAgICAgICAgaW50ZXJ2
YWxJbk1TID0gbWF4SW50ZXJ2YWw7Ci0gICAgZ1NldFRhc2tUaW1lckRlbGF5KHN0YXRpY19jYXN0
PGZsb2F0PihpbnRlcnZhbEluTVMpIC8gMTAwMCk7Ci19Ci0KLWNsYXNzIFFUTW92aWVXaW5Qcml2
YXRlIDogcHVibGljIE5vbmNvcHlhYmxlIHsKK2NsYXNzIFFUTW92aWVQcml2YXRlIDogcHVibGlj
IE5vbmNvcHlhYmxlLCBwdWJsaWMgUVRNb3ZpZVRhc2tDbGllbnQgewogcHVibGljOgotICAgIFFU
TW92aWVXaW5Qcml2YXRlKCk7Ci0gICAgflFUTW92aWVXaW5Qcml2YXRlKCk7CisgICAgUVRNb3Zp
ZVByaXZhdGUoKTsKKyAgICB+UVRNb3ZpZVByaXZhdGUoKTsKICAgICB2b2lkIHRhc2soKTsKICAg
ICB2b2lkIHN0YXJ0VGFzaygpOwogICAgIHZvaWQgZW5kVGFzaygpOwogCiAgICAgdm9pZCBjcmVh
dGVNb3ZpZUNvbnRyb2xsZXIoKTsKLSAgICB2b2lkIHJlZ2lzdGVyRHJhd2luZ0NhbGxiYWNrKCk7
Ci0gICAgdm9pZCBkcmF3aW5nQ29tcGxldGUoKTsKLSAgICB2b2lkIHVwZGF0ZUdXb3JsZCgpOwot
ICAgIHZvaWQgY3JlYXRlR1dvcmxkKCk7Ci0gICAgdm9pZCBkZWxldGVHV29ybGQoKTsKLSAgICB2
b2lkIGNsZWFyR1dvcmxkKCk7Ci0gICAgdm9pZCBjYWNoZU1vdmllU2NhbGUoKTsKLSAgICB2b2lk
IHVwZGF0ZU1vdmllU2l6ZSgpOwotCi0gICAgdm9pZCBzZXRTaXplKGludCwgaW50KTsKIAotICAg
IFFUTW92aWVXaW4qIG1fbW92aWVXaW47CisgICAgUVRNb3ZpZSogbV9tb3ZpZVdpbjsKICAgICBN
b3ZpZSBtX21vdmllOwogICAgIE1vdmllQ29udHJvbGxlciBtX21vdmllQ29udHJvbGxlcjsKICAg
ICBib29sIG1fdGFza2luZzsKLSAgICBRVE1vdmllV2luQ2xpZW50KiBtX2NsaWVudDsKKyAgICBi
b29sIG1fZGlzYWJsZWQ7CisgICAgVmVjdG9yPFFUTW92aWVDbGllbnQqPiBtX2NsaWVudHM7CiAg
ICAgbG9uZyBtX2xvYWRTdGF0ZTsKICAgICBib29sIG1fZW5kZWQ7CiAgICAgYm9vbCBtX3NlZWtp
bmc7CkBAIC0xMTYsMTAgKzg2LDYgQEAgcHVibGljOgogICAgIGludCBtX3dpZHRoOwogICAgIGlu
dCBtX2hlaWdodDsKICAgICBib29sIG1fdmlzaWJsZTsKLSAgICBHV29ybGRQdHIgbV9nV29ybGQ7
Ci0gICAgaW50IG1fZ1dvcmxkV2lkdGg7Ci0gICAgaW50IG1fZ1dvcmxkSGVpZ2h0OwotICAgIEdX
b3JsZFB0ciBtX3NhdmVkR1dvcmxkOwogICAgIGxvbmcgbV9sb2FkRXJyb3I7CiAgICAgZmxvYXQg
bV93aWR0aFNjYWxlRmFjdG9yOwogICAgIGZsb2F0IG1faGVpZ2h0U2NhbGVGYWN0b3I7CkBAIC0x
MjksMTkgKzk1LDEzIEBAIHB1YmxpYzoKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgYm9vbCBt
X3NjYWxlQ2FjaGVkOwogI2VuZGlmCi0gICAgV2luZG93UHRyIG1fZnVsbHNjcmVlbldpbmRvdzsK
LSAgICBHV29ybGRQdHIgbV9mdWxsc2NyZWVuT3JpZ0dXb3JsZDsKLSAgICBSZWN0IG1fZnVsbHNj
cmVlblJlY3Q7Ci0gICAgUVRNb3ZpZVdpbkZ1bGxzY3JlZW5DbGllbnQqIG1fZnVsbHNjcmVlbkNs
aWVudDsKLSAgICBjaGFyKiBtX2Z1bGxzY3JlZW5SZXN0b3JlU3RhdGU7CiB9OwogCi1RVE1vdmll
V2luUHJpdmF0ZTo6UVRNb3ZpZVdpblByaXZhdGUoKQorUVRNb3ZpZVByaXZhdGU6OlFUTW92aWVQ
cml2YXRlKCkKICAgICA6IG1fbW92aWVXaW4oMCkKICAgICAsIG1fbW92aWUoMCkKICAgICAsIG1f
bW92aWVDb250cm9sbGVyKDApCiAgICAgLCBtX3Rhc2tpbmcoZmFsc2UpCi0gICAgLCBtX2NsaWVu
dCgwKQogICAgICwgbV9sb2FkU3RhdGUoMCkKICAgICAsIG1fZW5kZWQoZmFsc2UpCiAgICAgLCBt
X3NlZWtpbmcoZmFsc2UpCkBAIC0xNTAsMzUgKzExMCwyMiBAQCBRVE1vdmllV2luUHJpdmF0ZTo6
UVRNb3ZpZVdpblByaXZhdGUoKQogICAgICwgbV93aWR0aCgwKQogICAgICwgbV9oZWlnaHQoMCkK
ICAgICAsIG1fdmlzaWJsZShmYWxzZSkKLSAgICAsIG1fZ1dvcmxkKDApCi0gICAgLCBtX2dXb3Js
ZFdpZHRoKDApCi0gICAgLCBtX2dXb3JsZEhlaWdodCgwKQotICAgICwgbV9zYXZlZEdXb3JsZCgw
KQogICAgICwgbV9sb2FkRXJyb3IoMCkKICAgICAsIG1fd2lkdGhTY2FsZUZhY3RvcigxKQogICAg
ICwgbV9oZWlnaHRTY2FsZUZhY3RvcigxKQogICAgICwgbV9jdXJyZW50VVJMKDApCiAgICAgLCBt
X3RpbWVUb1Jlc3RvcmUoLTEuMGYpCiAgICAgLCBtX3JhdGVUb1Jlc3RvcmUoLTEuMGYpCisgICAg
LCBtX2Rpc2FibGVkKGZhbHNlKQogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICAsIG1fc2NhbGVD
YWNoZWQoZmFsc2UpCiAjZW5kaWYKLSAgICAsIG1fZnVsbHNjcmVlbldpbmRvdygwKQotICAgICwg
bV9mdWxsc2NyZWVuT3JpZ0dXb3JsZCgwKQotICAgICwgbV9mdWxsc2NyZWVuQ2xpZW50KDApCi0g
ICAgLCBtX2Z1bGxzY3JlZW5SZXN0b3JlU3RhdGUoMCkKIHsKLSAgICBSZWN0IHJlY3QgPSB7IDAs
IDAsIDAsIDAgfTsKLSAgICBtX2Z1bGxzY3JlZW5SZWN0ID0gcmVjdDsKIH0KIAotUVRNb3ZpZVdp
blByaXZhdGU6On5RVE1vdmllV2luUHJpdmF0ZSgpCitRVE1vdmllUHJpdmF0ZTo6flFUTW92aWVQ
cml2YXRlKCkKIHsKLSAgICBBU1NFUlQoIW1fZnVsbHNjcmVlbldpbmRvdyk7Ci0KICAgICBlbmRU
YXNrKCk7Ci0gICAgaWYgKG1fZ1dvcmxkKQotICAgICAgICBkZWxldGVHV29ybGQoKTsKICAgICBp
ZiAobV9tb3ZpZUNvbnRyb2xsZXIpCiAgICAgICAgIERpc3Bvc2VNb3ZpZUNvbnRyb2xsZXIobV9t
b3ZpZUNvbnRyb2xsZXIpOwogICAgIGlmIChtX21vdmllKQpAQCAtMTg3LDU5ICsxMzQsMjUgQEAg
UVRNb3ZpZVdpblByaXZhdGU6On5RVE1vdmllV2luUHJpdmF0ZSgpCiAgICAgICAgIENGUmVsZWFz
ZShtX2N1cnJlbnRVUkwpOwogfQogCi12b2lkIFFUTW92aWVXaW46OnRhc2tUaW1lckZpcmVkKCkK
LXsKLSAgICAvLyBUaGUgaGFzaCBjb250ZW50IG1pZ2h0IGNoYW5nZSBkdXJpbmcgdGFzaygpCi0g
ICAgVmVjdG9yPFFUTW92aWVXaW5Qcml2YXRlKj4gdGFza3M7Ci0gICAgY29weVRvVmVjdG9yKCpn
VGFza0xpc3QsIHRhc2tzKTsKLSAgICBzaXplX3QgY291bnQgPSB0YXNrcy5zaXplKCk7Ci0gICAg
Zm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IGNvdW50OyArK24pCi0gICAgICAgIHRhc2tzW25dLT50
YXNrKCk7Ci0KLSAgICB1cGRhdGVUYXNrVGltZXIoKTsKLX0KLQotdm9pZCBRVE1vdmllV2luUHJp
dmF0ZTo6c3RhcnRUYXNrKCkgCit2b2lkIFFUTW92aWVQcml2YXRlOjpzdGFydFRhc2soKSAKIHsK
LSAgICBpZiAobV90YXNraW5nKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFnVGFza0xpc3Qp
Ci0gICAgICAgIGdUYXNrTGlzdCA9IG5ldyBIYXNoU2V0PFFUTW92aWVXaW5Qcml2YXRlKj47Ci0g
ICAgZ1Rhc2tMaXN0LT5hZGQodGhpcyk7Ci0gICAgbV90YXNraW5nID0gdHJ1ZTsKLSAgICB1cGRh
dGVUYXNrVGltZXIoKTsKLX0KLQotdm9pZCBRVE1vdmllV2luUHJpdmF0ZTo6ZW5kVGFzaygpIAot
ewotICAgIGlmICghbV90YXNraW5nKQotICAgICAgICByZXR1cm47Ci0gICAgZ1Rhc2tMaXN0LT5y
ZW1vdmUodGhpcyk7Ci0gICAgbV90YXNraW5nID0gZmFsc2U7Ci0gICAgdXBkYXRlVGFza1RpbWVy
KCk7CisgICAgaWYgKCFtX3Rhc2tpbmcpIHsKKyAgICAgICAgUVRNb3ZpZVRhc2s6OnNoYXJlZFRh
c2soKS0+YWRkVGFza0NsaWVudCh0aGlzKTsKKyAgICAgICAgbV90YXNraW5nID0gdHJ1ZTsKKyAg
ICB9CisgICAgUVRNb3ZpZVRhc2s6OnNoYXJlZFRhc2soKS0+dXBkYXRlVGFza1RpbWVyKCk7CiB9
CiAKLXZvaWQgUVRNb3ZpZVdpblByaXZhdGU6OmNhY2hlTW92aWVTY2FsZSgpCit2b2lkIFFUTW92
aWVQcml2YXRlOjplbmRUYXNrKCkgCiB7Ci0gICAgUmVjdCBuYXR1cmFsUmVjdDsKLSAgICBSZWN0
IGluaXRpYWxSZWN0OwotCi0gICAgR2V0TW92aWVOYXR1cmFsQm91bmRzUmVjdChtX21vdmllLCAm
bmF0dXJhbFJlY3QpOwotICAgIEdldE1vdmllQm94KG1fbW92aWUsICZpbml0aWFsUmVjdCk7Ci0K
LSAgICBmbG9hdCBuYXR1cmFsV2lkdGggPSBuYXR1cmFsUmVjdC5yaWdodCAtIG5hdHVyYWxSZWN0
LmxlZnQ7Ci0gICAgZmxvYXQgbmF0dXJhbEhlaWdodCA9IG5hdHVyYWxSZWN0LmJvdHRvbSAtIG5h
dHVyYWxSZWN0LnRvcDsKLQotICAgIGlmIChuYXR1cmFsV2lkdGgpCi0gICAgICAgIG1fd2lkdGhT
Y2FsZUZhY3RvciA9IChpbml0aWFsUmVjdC5yaWdodCAtIGluaXRpYWxSZWN0LmxlZnQpIC8gbmF0
dXJhbFdpZHRoOwotICAgIGlmIChuYXR1cmFsSGVpZ2h0KQotICAgICAgICBtX2hlaWdodFNjYWxl
RmFjdG9yID0gKGluaXRpYWxSZWN0LmJvdHRvbSAtIGluaXRpYWxSZWN0LnRvcCkgLyBuYXR1cmFs
SGVpZ2h0OwotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICBtX3NjYWxlQ2FjaGVkID0gdHJ1ZTs7
Ci0jZW5kaWYKKyAgICBpZiAobV90YXNraW5nKSB7CisgICAgICAgIFFUTW92aWVUYXNrOjpzaGFy
ZWRUYXNrKCktPnJlbW92ZVRhc2tDbGllbnQodGhpcyk7CisgICAgICAgIG1fdGFza2luZyA9IGZh
bHNlOworICAgIH0KKyAgICBRVE1vdmllVGFzazo6c2hhcmVkVGFzaygpLT51cGRhdGVUYXNrVGlt
ZXIoKTsKIH0KIAotdm9pZCBRVE1vdmllV2luUHJpdmF0ZTo6dGFzaygpIAordm9pZCBRVE1vdmll
UHJpdmF0ZTo6dGFzaygpIAogewogICAgIEFTU0VSVChtX3Rhc2tpbmcpOwogCkBAIC0yNTYsMjMg
KzE2OSwxOSBAQCB2b2lkIFFUTW92aWVXaW5Qcml2YXRlOjp0YXNrKCkgCiAgICAgICAgIC8vIFRo
aXMgaXMgZGlmZmVyZW50IGZyb20gUVRLaXQgQVBJIGFuZCBzZWVtcyBzdHJhbmdlLgogICAgICAg
ICBsb25nIGxvYWRTdGF0ZSA9IG1fbG9hZEVycm9yID8gUVRNb3ZpZUxvYWRTdGF0ZUVycm9yIDog
R2V0TW92aWVMb2FkU3RhdGUobV9tb3ZpZSk7CiAgICAgICAgIGlmIChsb2FkU3RhdGUgIT0gbV9s
b2FkU3RhdGUpIHsKLQogICAgICAgICAgICAgLy8gd2Ugb25seSBuZWVkIHRvIGVyYXNlIHRoZSBt
b3ZpZSBnd29ybGQgd2hlbiB0aGUgbG9hZCBzdGF0ZSBjaGFuZ2VzIHRvIGxvYWRlZCB3aGlsZSBp
dAogICAgICAgICAgICAgLy8gIGlzIHZpc2libGUgYXMgdGhlIGd3b3JsZCBpcyBkZXN0cm95ZWQv
Y3JlYXRlZCB3aGVuIHZpc2liaWxpdHkgY2hhbmdlcwogICAgICAgICAgICAgYm9vbCBzaG91bGRS
ZXN0b3JlUGxheWJhY2tTdGF0ZSA9IGZhbHNlOwogICAgICAgICAgICAgYm9vbCBtb3ZpZU5ld2x5
UGxheWFibGUgPSBsb2FkU3RhdGUgPj0gUVRNb3ZpZUxvYWRTdGF0ZUxvYWRlZCAmJiBtX2xvYWRT
dGF0ZSA8IFFUTW92aWVMb2FkU3RhdGVMb2FkZWQ7CiAgICAgICAgICAgICBtX2xvYWRTdGF0ZSA9
IGxvYWRTdGF0ZTsKLSAgICAgICAgICAgIGlmIChtb3ZpZU5ld2x5UGxheWFibGUpIHsKLSAgICAg
ICAgICAgICAgICBjYWNoZU1vdmllU2NhbGUoKTsKLSAgICAgICAgICAgICAgICB1cGRhdGVNb3Zp
ZVNpemUoKTsKLSAgICAgICAgICAgICAgICBpZiAobV92aXNpYmxlKQotICAgICAgICAgICAgICAg
ICAgICBjbGVhckdXb3JsZCgpOworICAgICAgICAgICAgaWYgKG1vdmllTmV3bHlQbGF5YWJsZSkK
ICAgICAgICAgICAgICAgICBzaG91bGRSZXN0b3JlUGxheWJhY2tTdGF0ZSA9IHRydWU7Ci0gICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICghbV9tb3ZpZUNvbnRyb2xsZXIgJiYgbV9sb2Fk
U3RhdGUgPj0gUVRNb3ZpZUxvYWRTdGF0ZUxvYWRlZCkKICAgICAgICAgICAgICAgICBjcmVhdGVN
b3ZpZUNvbnRyb2xsZXIoKTsKLSAgICAgICAgICAgIG1fY2xpZW50LT5tb3ZpZUxvYWRTdGF0ZUNo
YW5nZWQobV9tb3ZpZVdpbik7CisKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9jbGllbnRzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgIG1fY2xpZW50c1tpXS0+bW92
aWVMb2FkU3RhdGVDaGFuZ2VkKG1fbW92aWVXaW4pOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBpZiAoc2hvdWxkUmVzdG9yZVBsYXliYWNrU3RhdGUgJiYgbV90aW1lVG9SZXN0b3JlICE9IC0x
LjBmKSB7CiAgICAgICAgICAgICAgICAgbV9tb3ZpZVdpbi0+c2V0Q3VycmVudFRpbWUobV90aW1l
VG9SZXN0b3JlKTsKQEAgLTI4MSw3ICsxOTAsNyBAQCB2b2lkIFFUTW92aWVXaW5Qcml2YXRlOjp0
YXNrKCkgCiAgICAgICAgICAgICAgICAgbV9yYXRlVG9SZXN0b3JlID0gLTEuMGY7CiAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgIGlmIChtX21vdmllV2luLT5tX2Rpc2FibGVkKSB7CisgICAg
ICAgICAgICBpZiAobV9kaXNhYmxlZCkgewogICAgICAgICAgICAgICAgIGVuZFRhc2soKTsKICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CkBAIC0yOTIsMjMgKzIwMSwyNyBA
QCB2b2lkIFFUTW92aWVXaW5Qcml2YXRlOjp0YXNrKCkgCiAgICAgYm9vbCBlbmRlZCA9ICEhSXNN
b3ZpZURvbmUobV9tb3ZpZSk7CiAgICAgaWYgKGVuZGVkICE9IG1fZW5kZWQpIHsKICAgICAgICAg
bV9lbmRlZCA9IGVuZGVkOwotICAgICAgICBpZiAobV9jbGllbnQgJiYgZW5kZWQpCi0gICAgICAg
ICAgICBtX2NsaWVudC0+bW92aWVFbmRlZChtX21vdmllV2luKTsKKyAgICAgICAgaWYgKGVuZGVk
KSB7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY2xpZW50cy5zaXplKCk7
ICsraSkKKyAgICAgICAgICAgICAgIG1fY2xpZW50c1tpXS0+bW92aWVFbmRlZChtX21vdmllV2lu
KTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGZsb2F0IHRpbWUgPSBtX21vdmllV2luLT5jdXJy
ZW50VGltZSgpOwogICAgIGlmICh0aW1lIDwgbV9sYXN0TWVkaWFUaW1lIHx8IHRpbWUgPj0gbV9s
YXN0TWVkaWFUaW1lICsgY05vbkNvbnRpbnVvdXNUaW1lQ2hhbmdlIHx8IG1fc2Vla2luZykgewog
ICAgICAgICBtX3NlZWtpbmcgPSBmYWxzZTsKLSAgICAgICAgaWYgKG1fY2xpZW50KQotICAgICAg
ICAgICAgbV9jbGllbnQtPm1vdmllVGltZUNoYW5nZWQobV9tb3ZpZVdpbik7CisgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jbGllbnRzLnNpemUoKTsgKytpKQorICAgICAgICAgICAg
bV9jbGllbnRzW2ldLT5tb3ZpZVRpbWVDaGFuZ2VkKG1fbW92aWVXaW4pOwogICAgIH0KICAgICBt
X2xhc3RNZWRpYVRpbWUgPSB0aW1lOwogCiAgICAgaWYgKG1fbG9hZEVycm9yKQogICAgICAgICBl
bmRUYXNrKCk7CisgICAgZWxzZQorICAgICAgICBRVE1vdmllVGFzazo6c2hhcmVkVGFzaygpLT51
cGRhdGVUYXNrVGltZXIoKTsKIH0KIAotdm9pZCBRVE1vdmllV2luUHJpdmF0ZTo6Y3JlYXRlTW92
aWVDb250cm9sbGVyKCkKK3ZvaWQgUVRNb3ZpZVByaXZhdGU6OmNyZWF0ZU1vdmllQ29udHJvbGxl
cigpCiB7CiAgICAgUmVjdCBib3VuZHM7CiAgICAgbG9uZyBmbGFnczsKQEAgLTMyNCwxNTUgKzIz
NywzNiBAQCB2b2lkIFFUTW92aWVXaW5Qcml2YXRlOjpjcmVhdGVNb3ZpZUNvbnRyCiAgICAgbV9t
b3ZpZUNvbnRyb2xsZXIgPSBOZXdNb3ZpZUNvbnRyb2xsZXIobV9tb3ZpZSwgJmJvdW5kcywgZmxh
Z3MpOwogICAgIGlmICghbV9tb3ZpZUNvbnRyb2xsZXIpCiAgICAgICAgIHJldHVybjsKLQotICAg
IE1DU2V0Q29udHJvbGxlclBvcnQobV9tb3ZpZUNvbnRyb2xsZXIsIG1fZ1dvcmxkKTsKLSAgICBN
Q1NldENvbnRyb2xsZXJBdHRhY2hlZChtX21vdmllQ29udHJvbGxlciwgZmFsc2UpOwotfQotCi12
b2lkIFFUTW92aWVXaW5Qcml2YXRlOjpyZWdpc3RlckRyYXdpbmdDYWxsYmFjaygpCi17Ci0gICAg
VXBwUGFyYW0gcGFyYW07Ci0gICAgcGFyYW0ucHRyID0gdGhpczsKLSAgICBTZXRNb3ZpZURyYXdp
bmdDb21wbGV0ZVByb2MobV9tb3ZpZSwgbW92aWVEcmF3aW5nQ2FsbFdoZW5DaGFuZ2VkLCBnTW92
aWVEcmF3aW5nQ29tcGxldGVVUFAsIHBhcmFtLmxvbmdWYWx1ZSk7Ci19Ci0KLXZvaWQgUVRNb3Zp
ZVdpblByaXZhdGU6OmRyYXdpbmdDb21wbGV0ZSgpCi17Ci0gICAgaWYgKCFtX2dXb3JsZCB8fCBt
X21vdmllV2luLT5tX2Rpc2FibGVkIHx8IG1fbG9hZFN0YXRlIDwgUVRNb3ZpZUxvYWRTdGF0ZUxv
YWRlZCkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY2xpZW50LT5tb3ZpZU5ld0ltYWdlQXZhaWxh
YmxlKG1fbW92aWVXaW4pOwogfQogCi12b2lkIFFUTW92aWVXaW5Qcml2YXRlOjp1cGRhdGVHV29y
bGQoKQorUVRNb3ZpZTo6UVRNb3ZpZShRVE1vdmllQ2xpZW50KiBjbGllbnQpCisgICAgOiBtX3By
aXZhdGUobmV3IFFUTW92aWVQcml2YXRlKCkpCiB7Ci0gICAgYm9vbCBzaG91bGRCZVZpc2libGUg
PSBtX3Zpc2libGU7Ci0gICAgaWYgKCFtX2hlaWdodCB8fCAhbV93aWR0aCkKLSAgICAgICAgc2hv
dWxkQmVWaXNpYmxlID0gZmFsc2U7Ci0KLSAgICBpZiAoc2hvdWxkQmVWaXNpYmxlICYmICFtX2dX
b3JsZCkKLSAgICAgICAgY3JlYXRlR1dvcmxkKCk7Ci0gICAgZWxzZSBpZiAoIXNob3VsZEJlVmlz
aWJsZSAmJiBtX2dXb3JsZCkKLSAgICAgICAgZGVsZXRlR1dvcmxkKCk7Ci0gICAgZWxzZSBpZiAo
bV9nV29ybGQgJiYgKG1fd2lkdGggPiBtX2dXb3JsZFdpZHRoIHx8IG1faGVpZ2h0ID4gbV9nV29y
bGRIZWlnaHQpKSB7Ci0gICAgICAgIC8vIG5lZWQgYSBiaWdnZXIsIGJldHRlciBnV29ybGQKLSAg
ICAgICAgZGVsZXRlR1dvcmxkKCk7Ci0gICAgICAgIGNyZWF0ZUdXb3JsZCgpOwotICAgIH0KLX0K
LQotdm9pZCBRVE1vdmllV2luUHJpdmF0ZTo6Y3JlYXRlR1dvcmxkKCkKLXsKLSAgICBBU1NFUlQo
IW1fZ1dvcmxkKTsKLSAgICBpZiAoIW1fbW92aWUgfHwgbV9sb2FkU3RhdGUgPCBRVE1vdmllTG9h
ZFN0YXRlTG9hZGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2dXb3JsZFdpZHRoID0gbWF4
KGNHV29ybGRNaW5XaWR0aCwgbV93aWR0aCk7Ci0gICAgbV9nV29ybGRIZWlnaHQgPSBtYXgoY0dX
b3JsZE1pbkhlaWdodCwgbV9oZWlnaHQpOwotICAgIFJlY3QgYm91bmRzOyAKLSAgICBib3VuZHMu
dG9wID0gMDsKLSAgICBib3VuZHMubGVmdCA9IDA7IAotICAgIGJvdW5kcy5yaWdodCA9IG1fZ1dv
cmxkV2lkdGg7Ci0gICAgYm91bmRzLmJvdHRvbSA9IG1fZ1dvcmxkSGVpZ2h0OwotICAgIE9TRXJy
IGVyciA9IFFUTmV3R1dvcmxkKCZtX2dXb3JsZCwgazMyQkdSQVBpeGVsRm9ybWF0LCAmYm91bmRz
LCAwLCAwLCAwKTsgCi0gICAgaWYgKGVycikgCi0gICAgICAgIHJldHVybjsKLSAgICBHZXRNb3Zp
ZUdXb3JsZChtX21vdmllLCAmbV9zYXZlZEdXb3JsZCwgMCk7Ci0gICAgaWYgKG1fbW92aWVDb250
cm9sbGVyKQotICAgICAgICBNQ1NldENvbnRyb2xsZXJQb3J0KG1fbW92aWVDb250cm9sbGVyLCBt
X2dXb3JsZCk7Ci0gICAgU2V0TW92aWVHV29ybGQobV9tb3ZpZSwgbV9nV29ybGQsIDApOwotICAg
IGJvdW5kcy5yaWdodCA9IG1fd2lkdGg7Ci0gICAgYm91bmRzLmJvdHRvbSA9IG1faGVpZ2h0Owot
ICAgIGlmIChtX21vdmllQ29udHJvbGxlcikKLSAgICAgICAgTUNTZXRDb250cm9sbGVyQm91bmRz
UmVjdChtX21vdmllQ29udHJvbGxlciwgJmJvdW5kcyk7Ci0gICAgU2V0TW92aWVCb3gobV9tb3Zp
ZSwgJmJvdW5kcyk7Ci19Ci0KLXZvaWQgUVRNb3ZpZVdpblByaXZhdGU6OmNsZWFyR1dvcmxkKCkK
LXsKLSAgICBpZiAoIW1fbW92aWV8fCFtX2dXb3JsZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
R3JhZlB0ciBzYXZlUG9ydDsKLSAgICBHZXRQb3J0KCZzYXZlUG9ydCk7IAotICAgIE1hY1NldFBv
cnQoKEdyYWZQdHIpbV9nV29ybGQpOwotCi0gICAgUmVjdCBib3VuZHM7IAotICAgIGJvdW5kcy50
b3AgPSAwOwotICAgIGJvdW5kcy5sZWZ0ID0gMDsgCi0gICAgYm91bmRzLnJpZ2h0ID0gbV9nV29y
bGRXaWR0aDsKLSAgICBib3VuZHMuYm90dG9tID0gbV9nV29ybGRIZWlnaHQ7Ci0gICAgRXJhc2VS
ZWN0KCZib3VuZHMpOwotCi0gICAgTWFjU2V0UG9ydChzYXZlUG9ydCk7Ci19Ci0KLXZvaWQgUVRN
b3ZpZVdpblByaXZhdGU6OnNldFNpemUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQotewotICAgIGlm
IChtX3dpZHRoID09IHdpZHRoICYmIG1faGVpZ2h0ID09IGhlaWdodCkKLSAgICAgICAgcmV0dXJu
OwotICAgIG1fd2lkdGggPSB3aWR0aDsKLSAgICBtX2hlaWdodCA9IGhlaWdodDsKLQotICAgIC8v
IERvIG5vdCBjaGFuZ2UgbW92aWUgYm94IGJlZm9yZSByZWFjaGluZyBsb2FkIHN0YXRlIGxvYWRl
ZCBhcyB3ZSBncmFiCi0gICAgLy8gdGhlIGluaXRpYWwgc2l6ZSB3aGVuIHRhc2soKSBzZWVzIHRo
YXQgc3RhdGUgZm9yIHRoZSBmaXJzdCB0aW1lLCBhbmQKLSAgICAvLyB3ZSBuZWVkIHRoZSBpbml0
aWFsIHNpemUgdG8gYmUgYWJsZSB0byBzY2FsZSBtb3ZpZSBwcm9wZXJseS4gCi0gICAgaWYgKCFt
X21vdmllIHx8IG1fbG9hZFN0YXRlIDwgUVRNb3ZpZUxvYWRTdGF0ZUxvYWRlZCkKLSAgICAgICAg
cmV0dXJuOwotCi0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIEFTU0VSVChtX3NjYWxlQ2FjaGVk
KTsKLSNlbmRpZgotCi0gICAgdXBkYXRlTW92aWVTaXplKCk7CisgICAgbV9wcml2YXRlLT5tX21v
dmllV2luID0gdGhpczsKKyAgICBpZiAoY2xpZW50KQorICAgICAgICBtX3ByaXZhdGUtPm1fY2xp
ZW50cy5hcHBlbmQoY2xpZW50KTsKKyAgICBpbml0aWFsaXplUXVpY2tUaW1lKCk7CiB9CiAKLXZv
aWQgUVRNb3ZpZVdpblByaXZhdGU6OnVwZGF0ZU1vdmllU2l6ZSgpCitRVE1vdmllOjp+UVRNb3Zp
ZSgpCiB7Ci0gICAgaWYgKCFtX21vdmllIHx8IG1fbG9hZFN0YXRlIDwgUVRNb3ZpZUxvYWRTdGF0
ZUxvYWRlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVjdCBib3VuZHM7IAotICAgIGJvdW5k
cy50b3AgPSAwOwotICAgIGJvdW5kcy5sZWZ0ID0gMDsgCi0gICAgYm91bmRzLnJpZ2h0ID0gbV93
aWR0aDsKLSAgICBib3VuZHMuYm90dG9tID0gbV9oZWlnaHQ7Ci0gICAgaWYgKG1fbW92aWVDb250
cm9sbGVyKQotICAgICAgICBNQ1NldENvbnRyb2xsZXJCb3VuZHNSZWN0KG1fbW92aWVDb250cm9s
bGVyLCAmYm91bmRzKTsKLSAgICBTZXRNb3ZpZUJveChtX21vdmllLCAmYm91bmRzKTsKLSAgICB1
cGRhdGVHV29ybGQoKTsKKyAgICBkZWxldGUgbV9wcml2YXRlOwogfQogCi0KLXZvaWQgUVRNb3Zp
ZVdpblByaXZhdGU6OmRlbGV0ZUdXb3JsZCgpCit2b2lkIFFUTW92aWU6OmFkZENsaWVudChRVE1v
dmllQ2xpZW50KiBjbGllbnQpCiB7Ci0gICAgQVNTRVJUKG1fZ1dvcmxkKTsKLSAgICBpZiAobV9t
b3ZpZUNvbnRyb2xsZXIpCi0gICAgICAgIE1DU2V0Q29udHJvbGxlclBvcnQobV9tb3ZpZUNvbnRy
b2xsZXIsIG1fc2F2ZWRHV29ybGQpOwotICAgIGlmIChtX21vdmllKQotICAgICAgICBTZXRNb3Zp
ZUdXb3JsZChtX21vdmllLCBtX3NhdmVkR1dvcmxkLCAwKTsKLSAgICBtX3NhdmVkR1dvcmxkID0g
MDsKLSAgICBEaXNwb3NlR1dvcmxkKG1fZ1dvcmxkKTsgCi0gICAgbV9nV29ybGQgPSAwOwotICAg
IG1fZ1dvcmxkV2lkdGggPSAwOwotICAgIG1fZ1dvcmxkSGVpZ2h0ID0gMDsKKyAgICBpZiAoY2xp
ZW50KQorICAgICAgICBtX3ByaXZhdGUtPm1fY2xpZW50cy5hcHBlbmQoY2xpZW50KTsKIH0KIAot
Ci1RVE1vdmllV2luOjpRVE1vdmllV2luKFFUTW92aWVXaW5DbGllbnQqIGNsaWVudCkKLSAgICA6
IG1fcHJpdmF0ZShuZXcgUVRNb3ZpZVdpblByaXZhdGUoKSkKLSAgICAsIG1fZGlzYWJsZWQoZmFs
c2UpCit2b2lkIFFUTW92aWU6OnJlbW92ZUNsaWVudChRVE1vdmllQ2xpZW50KiBjbGllbnQpCiB7
Ci0gICAgbV9wcml2YXRlLT5tX21vdmllV2luID0gdGhpczsKLSAgICBtX3ByaXZhdGUtPm1fY2xp
ZW50ID0gY2xpZW50OwotICAgIGluaXRpYWxpemVRdWlja1RpbWUoKTsKKyAgICBzaXplX3QgaW5k
ZXhPZkNsaWVudCA9IG1fcHJpdmF0ZS0+bV9jbGllbnRzLmZpbmQoY2xpZW50KTsKKyAgICBpZiAo
aW5kZXhPZkNsaWVudCA+IDApCisgICAgICAgIG1fcHJpdmF0ZS0+bV9jbGllbnRzLnJlbW92ZShp
bmRleE9mQ2xpZW50KTsKIH0KIAotUVRNb3ZpZVdpbjo6flFUTW92aWVXaW4oKQotewotICAgIGRl
bGV0ZSBtX3ByaXZhdGU7Ci19Ci0KLXZvaWQgUVRNb3ZpZVdpbjo6cGxheSgpCit2b2lkIFFUTW92
aWU6OnBsYXkoKQogewogICAgIG1fcHJpdmF0ZS0+bV90aW1lVG9SZXN0b3JlID0gLTEuMGY7CiAK
QEAgLTQ4Myw3ICsyNzcsNyBAQCB2b2lkIFFUTW92aWVXaW46OnBsYXkoKQogICAgIG1fcHJpdmF0
ZS0+c3RhcnRUYXNrKCk7CiB9CiAKLXZvaWQgUVRNb3ZpZVdpbjo6cGF1c2UoKQordm9pZCBRVE1v
dmllOjpwYXVzZSgpCiB7CiAgICAgbV9wcml2YXRlLT5tX3RpbWVUb1Jlc3RvcmUgPSAtMS4wZjsK
IApAQCAtNDkxLDE3ICsyODUsMTcgQEAgdm9pZCBRVE1vdmllV2luOjpwYXVzZSgpCiAgICAgICAg
IE1DRG9BY3Rpb24obV9wcml2YXRlLT5tX21vdmllQ29udHJvbGxlciwgbWNBY3Rpb25QbGF5LCAw
KTsKICAgICBlbHNlCiAgICAgICAgIFN0b3BNb3ZpZShtX3ByaXZhdGUtPm1fbW92aWUpOwotICAg
IHVwZGF0ZVRhc2tUaW1lcigpOworICAgIFFUTW92aWVUYXNrOjpzaGFyZWRUYXNrKCktPnVwZGF0
ZVRhc2tUaW1lcigpOwogfQogCi1mbG9hdCBRVE1vdmllV2luOjpyYXRlKCkgY29uc3QKK2Zsb2F0
IFFUTW92aWU6OnJhdGUoKSBjb25zdAogewogICAgIGlmICghbV9wcml2YXRlLT5tX21vdmllKQog
ICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gRml4ZWRUb0Zsb2F0KEdldE1vdmllUmF0ZSht
X3ByaXZhdGUtPm1fbW92aWUpKTsKIH0KIAotdm9pZCBRVE1vdmllV2luOjpzZXRSYXRlKGZsb2F0
IHJhdGUpCit2b2lkIFFUTW92aWU6OnNldFJhdGUoZmxvYXQgcmF0ZSkKIHsKICAgICBpZiAoIW1f
cHJpdmF0ZS0+bV9tb3ZpZSkKICAgICAgICAgcmV0dXJuOyAgICAKQEAgLTUxMSwxMCArMzA1LDEw
IEBAIHZvaWQgUVRNb3ZpZVdpbjo6c2V0UmF0ZShmbG9hdCByYXRlKQogICAgICAgICBNQ0RvQWN0
aW9uKG1fcHJpdmF0ZS0+bV9tb3ZpZUNvbnRyb2xsZXIsIG1jQWN0aW9uUHJlcm9sbEFuZFBsYXks
ICh2b2lkICopRmxvYXRUb0ZpeGVkKHJhdGUpKTsKICAgICBlbHNlCiAgICAgICAgIFNldE1vdmll
UmF0ZShtX3ByaXZhdGUtPm1fbW92aWUsIEZsb2F0VG9GaXhlZChyYXRlKSk7Ci0gICAgdXBkYXRl
VGFza1RpbWVyKCk7CisgICAgUVRNb3ZpZVRhc2s6OnNoYXJlZFRhc2soKS0+dXBkYXRlVGFza1Rp
bWVyKCk7CiB9CiAKLWZsb2F0IFFUTW92aWVXaW46OmR1cmF0aW9uKCkgY29uc3QKK2Zsb2F0IFFU
TW92aWU6OmR1cmF0aW9uKCkgY29uc3QKIHsKICAgICBpZiAoIW1fcHJpdmF0ZS0+bV9tb3ZpZSkK
ICAgICAgICAgcmV0dXJuIDA7CkBAIC01MjMsNyArMzE3LDcgQEAgZmxvYXQgUVRNb3ZpZVdpbjo6
ZHVyYXRpb24oKSBjb25zdAogICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4odmFsKSAvIHNj
YWxlOwogfQogCi1mbG9hdCBRVE1vdmllV2luOjpjdXJyZW50VGltZSgpIGNvbnN0CitmbG9hdCBR
VE1vdmllOjpjdXJyZW50VGltZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3ByaXZhdGUtPm1fbW92
aWUpCiAgICAgICAgIHJldHVybiAwOwpAQCAtNTMyLDcgKzMyNiw3IEBAIGZsb2F0IFFUTW92aWVX
aW46OmN1cnJlbnRUaW1lKCkgY29uc3QKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZh
bCkgLyBzY2FsZTsKIH0KIAotdm9pZCBRVE1vdmllV2luOjpzZXRDdXJyZW50VGltZShmbG9hdCB0
aW1lKSBjb25zdAordm9pZCBRVE1vdmllOjpzZXRDdXJyZW50VGltZShmbG9hdCB0aW1lKSBjb25z
dAogewogICAgIGlmICghbV9wcml2YXRlLT5tX21vdmllKQogICAgICAgICByZXR1cm47CkBAIC01
NDEsMjIgKzMzNSwyMiBAQCB2b2lkIFFUTW92aWVXaW46OnNldEN1cnJlbnRUaW1lKGZsb2F0IHRp
CiAgICAgCiAgICAgbV9wcml2YXRlLT5tX3NlZWtpbmcgPSB0cnVlOwogICAgIFRpbWVTY2FsZSBz
Y2FsZSA9IEdldE1vdmllVGltZVNjYWxlKG1fcHJpdmF0ZS0+bV9tb3ZpZSk7Ci0gICAgaWYgKG1f
cHJpdmF0ZS0+bV9tb3ZpZUNvbnRyb2xsZXIpeworICAgIGlmIChtX3ByaXZhdGUtPm1fbW92aWVD
b250cm9sbGVyKSB7CiAgICAgICAgIFFUUmVzdGFydEF0VGltZVJlY29yZCByZXN0YXJ0ID0geyB0
aW1lICogc2NhbGUgLCAwIH07CiAgICAgICAgIE1DRG9BY3Rpb24obV9wcml2YXRlLT5tX21vdmll
Q29udHJvbGxlciwgbWNBY3Rpb25SZXN0YXJ0QXRUaW1lLCAodm9pZCAqKSZyZXN0YXJ0KTsKICAg
ICB9IGVsc2UKICAgICAgICAgU2V0TW92aWVUaW1lVmFsdWUobV9wcml2YXRlLT5tX21vdmllLCBU
aW1lVmFsdWUodGltZSAqIHNjYWxlKSk7Ci0gICAgdXBkYXRlVGFza1RpbWVyKCk7CisgICAgUVRN
b3ZpZVRhc2s6OnNoYXJlZFRhc2soKS0+dXBkYXRlVGFza1RpbWVyKCk7CiB9CiAKLXZvaWQgUVRN
b3ZpZVdpbjo6c2V0Vm9sdW1lKGZsb2F0IHZvbHVtZSkKK3ZvaWQgUVRNb3ZpZTo6c2V0Vm9sdW1l
KGZsb2F0IHZvbHVtZSkKIHsKICAgICBpZiAoIW1fcHJpdmF0ZS0+bV9tb3ZpZSkKICAgICAgICAg
cmV0dXJuOwogICAgIFNldE1vdmllVm9sdW1lKG1fcHJpdmF0ZS0+bV9tb3ZpZSwgc3RhdGljX2Nh
c3Q8c2hvcnQ+KHZvbHVtZSAqIDI1NikpOwogfQogCi12b2lkIFFUTW92aWVXaW46OnNldFByZXNl
cnZlc1BpdGNoKGJvb2wgcHJlc2VydmVzUGl0Y2gpCit2b2lkIFFUTW92aWU6OnNldFByZXNlcnZl
c1BpdGNoKGJvb2wgcHJlc2VydmVzUGl0Y2gpCiB7CiAgICAgaWYgKCFtX3ByaXZhdGUtPm1fbW92
aWUgfHwgIW1fcHJpdmF0ZS0+bV9jdXJyZW50VVJMKQogICAgICAgICByZXR1cm47CkBAIC01NzUs
MTQgKzM2OSwxNCBAQCB2b2lkIFFUTW92aWVXaW46OnNldFByZXNlcnZlc1BpdGNoKGJvb2wgCiAg
ICAgbG9hZChtX3ByaXZhdGUtPm1fY3VycmVudFVSTCwgcHJlc2VydmVzUGl0Y2gpOwogfQogCi11
bnNpZ25lZCBRVE1vdmllV2luOjpkYXRhU2l6ZSgpIGNvbnN0Cit1bnNpZ25lZCBRVE1vdmllOjpk
YXRhU2l6ZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3ByaXZhdGUtPm1fbW92aWUpCiAgICAgICAg
IHJldHVybiAwOwogICAgIHJldHVybiBHZXRNb3ZpZURhdGFTaXplKG1fcHJpdmF0ZS0+bV9tb3Zp
ZSwgMCwgR2V0TW92aWVEdXJhdGlvbihtX3ByaXZhdGUtPm1fbW92aWUpKTsKIH0KIAotZmxvYXQg
UVRNb3ZpZVdpbjo6bWF4VGltZUxvYWRlZCgpIGNvbnN0CitmbG9hdCBRVE1vdmllOjptYXhUaW1l
TG9hZGVkKCkgY29uc3QKIHsKICAgICBpZiAoIW1fcHJpdmF0ZS0+bV9tb3ZpZSkKICAgICAgICAg
cmV0dXJuIDA7CkBAIC01OTIsMTIgKzM4NiwxMiBAQCBmbG9hdCBRVE1vdmllV2luOjptYXhUaW1l
TG9hZGVkKCkgY29uc3QKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZhbCkgLyBzY2Fs
ZTsKIH0KIAotbG9uZyBRVE1vdmllV2luOjpsb2FkU3RhdGUoKSBjb25zdAorbG9uZyBRVE1vdmll
Ojpsb2FkU3RhdGUoKSBjb25zdAogewogICAgIHJldHVybiBtX3ByaXZhdGUtPm1fbG9hZFN0YXRl
OwogfQogCi12b2lkIFFUTW92aWVXaW46OmdldE5hdHVyYWxTaXplKGludCYgd2lkdGgsIGludCYg
aGVpZ2h0KQordm9pZCBRVE1vdmllOjpnZXROYXR1cmFsU2l6ZShpbnQmIHdpZHRoLCBpbnQmIGhl
aWdodCkKIHsKICAgICBSZWN0IHJlY3QgPSB7IDAsIH07CiAKQEAgLTYwNyw1NiArNDAxLDcgQEAg
dm9pZCBRVE1vdmllV2luOjpnZXROYXR1cmFsU2l6ZShpbnQmIHdpZAogICAgIGhlaWdodCA9IChy
ZWN0LmJvdHRvbSAtIHJlY3QudG9wKSAqIG1fcHJpdmF0ZS0+bV9oZWlnaHRTY2FsZUZhY3RvcjsK
IH0KIAotdm9pZCBRVE1vdmllV2luOjpzZXRTaXplKGludCB3aWR0aCwgaW50IGhlaWdodCkKLXsK
LSAgICBtX3ByaXZhdGUtPnNldFNpemUod2lkdGgsIGhlaWdodCk7Ci0gICAgdXBkYXRlVGFza1Rp
bWVyKDApOwotfQotCi12b2lkIFFUTW92aWVXaW46OnNldFZpc2libGUoYm9vbCBiKQotewotICAg
IG1fcHJpdmF0ZS0+bV92aXNpYmxlID0gYjsKLSAgICBtX3ByaXZhdGUtPnVwZGF0ZUdXb3JsZCgp
OwotfQotCi12b2lkIFFUTW92aWVXaW46OmdldEN1cnJlbnRGcmFtZUluZm8odm9pZComIGJ1ZmZl
ciwgdW5zaWduZWQmIGJpdHNQZXJQaXhlbCwgdW5zaWduZWQmIHJvd0J5dGVzLCB1bnNpZ25lZCYg
d2lkdGgsIHVuc2lnbmVkJiBoZWlnaHQpCi17Ci0gICAgaWYgKCFtX3ByaXZhdGUtPm1fZ1dvcmxk
KSB7Ci0gICAgICAgIGJ1ZmZlciA9IDA7Ci0gICAgICAgIGJpdHNQZXJQaXhlbCA9IDA7Ci0gICAg
ICAgIHJvd0J5dGVzID0gMDsKLSAgICAgICAgd2lkdGggPSAwOwotICAgICAgICBoZWlnaHQgPSAw
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIFBpeE1hcEhhbmRsZSBvZmZzY3JlZW5QaXhN
YXAgPSBHZXRHV29ybGRQaXhNYXAobV9wcml2YXRlLT5tX2dXb3JsZCk7Ci0gICAgYnVmZmVyID0g
KCpvZmZzY3JlZW5QaXhNYXApLT5iYXNlQWRkcjsKLSAgICBiaXRzUGVyUGl4ZWwgPSAoKm9mZnNj
cmVlblBpeE1hcCktPnBpeGVsU2l6ZTsKLSAgICByb3dCeXRlcyA9ICgqb2Zmc2NyZWVuUGl4TWFw
KS0+cm93Qnl0ZXMgJiAweDNGRkY7Ci0gICAgd2lkdGggPSBtX3ByaXZhdGUtPm1fd2lkdGg7Ci0g
ICAgaGVpZ2h0ID0gbV9wcml2YXRlLT5tX2hlaWdodDsKLX0KLQotdm9pZCBRVE1vdmllV2luOjpw
YWludChIREMgaGRjLCBpbnQgeCwgaW50IHkpCi17Ci0gICAgaWYgKCFtX3ByaXZhdGUtPm1fZ1dv
cmxkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBIREMgaGRjU3JjID0gc3RhdGljX2Nhc3Q8SERD
PihHZXRQb3J0SERDKHJlaW50ZXJwcmV0X2Nhc3Q8R3JhZlB0cj4obV9wcml2YXRlLT5tX2dXb3Js
ZCkpKTsgCi0gICAgaWYgKCFoZGNTcmMpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEZJWE1F
OiBJZiB3ZSBjb3VsZCBkZXRlcm1pbmUgdGhlIG1vdmllIGhhcyBubyBhbHBoYSwgd2UgY291bGQg
dXNlIEJpdEJsdCBmb3IgdGhvc2UgY2FzZXMsIHdoaWNoIG1pZ2h0IGJlIGZhc3Rlci4KLSAgICBC
TEVOREZVTkNUSU9OIGJsZW5kRnVuY3Rpb247IAotICAgIGJsZW5kRnVuY3Rpb24uQmxlbmRPcCA9
IEFDX1NSQ19PVkVSOwotICAgIGJsZW5kRnVuY3Rpb24uQmxlbmRGbGFncyA9IDA7Ci0gICAgYmxl
bmRGdW5jdGlvbi5Tb3VyY2VDb25zdGFudEFscGhhID0gMjU1OwotICAgIGJsZW5kRnVuY3Rpb24u
QWxwaGFGb3JtYXQgPSBBQ19TUkNfQUxQSEE7Ci0gICAgQWxwaGFCbGVuZChoZGMsIHgsIHksIG1f
cHJpdmF0ZS0+bV93aWR0aCwgbV9wcml2YXRlLT5tX2hlaWdodCwgaGRjU3JjLCAKLSAgICAgICAg
IDAsIDAsIG1fcHJpdmF0ZS0+bV93aWR0aCwgbV9wcml2YXRlLT5tX2hlaWdodCwgYmxlbmRGdW5j
dGlvbik7Ci19Ci0KLXZvaWQgUVRNb3ZpZVdpbjo6bG9hZChjb25zdCBVQ2hhciogdXJsLCBpbnQg
bGVuLCBib29sIHByZXNlcnZlc1BpdGNoKQordm9pZCBRVE1vdmllOjpsb2FkKGNvbnN0IFVDaGFy
KiB1cmwsIGludCBsZW4sIGJvb2wgcHJlc2VydmVzUGl0Y2gpCiB7CiAgICAgQ0ZTdHJpbmdSZWYg
dXJsU3RyaW5nUmVmID0gQ0ZTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycyhrQ0ZBbGxvY2F0b3JE
ZWZhdWx0LCByZWludGVycHJldF9jYXN0PGNvbnN0IFVuaUNoYXIqPih1cmwpLCBsZW4pOwogICAg
IENGVVJMUmVmIGNmVVJMID0gQ0ZVUkxDcmVhdGVXaXRoU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1
bHQsIHVybFN0cmluZ1JlZiwgMCk7CkBAIC02NjcsMTUgKzQxMiwxMyBAQCB2b2lkIFFUTW92aWVX
aW46OmxvYWQoY29uc3QgVUNoYXIqIHVybCwgCiAgICAgQ0ZSZWxlYXNlKHVybFN0cmluZ1JlZik7
CiB9CiAKLXZvaWQgUVRNb3ZpZVdpbjo6bG9hZChDRlVSTFJlZiB1cmwsIGJvb2wgcHJlc2VydmVz
UGl0Y2gpCit2b2lkIFFUTW92aWU6OmxvYWQoQ0ZVUkxSZWYgdXJsLCBib29sIHByZXNlcnZlc1Bp
dGNoKQogewogICAgIGlmICghdXJsKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV9wcml2
YXRlLT5tX21vdmllKSB7CiAgICAgICAgIG1fcHJpdmF0ZS0+ZW5kVGFzaygpOwotICAgICAgICBp
ZiAobV9wcml2YXRlLT5tX2dXb3JsZCkKLSAgICAgICAgICAgIG1fcHJpdmF0ZS0+ZGVsZXRlR1dv
cmxkKCk7CiAgICAgICAgIGlmIChtX3ByaXZhdGUtPm1fbW92aWVDb250cm9sbGVyKQogICAgICAg
ICAgICAgRGlzcG9zZU1vdmllQ29udHJvbGxlcihtX3ByaXZhdGUtPm1fbW92aWVDb250cm9sbGVy
KTsKICAgICAgICAgbV9wcml2YXRlLT5tX21vdmllQ29udHJvbGxlciA9IDA7CkBAIC03NjgsMTQg
KzUxMSwxNCBAQCB2b2lkIFFUTW92aWVXaW46OmxvYWQoQ0ZVUkxSZWYgdXJsLCBib29sCiAgICAg
bW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcFN0YXR1cyA9IDA7IAogICAgIG1vdmllUHJv
cENvdW50Kys7IAogCi0gICAgQVNTRVJUKG1vdmllUHJvcENvdW50IDw9IHNpemVvZihtb3ZpZVBy
b3BzKS9zaXplb2YobW92aWVQcm9wc1swXSkpOworICAgIEFTU0VSVChtb3ZpZVByb3BDb3VudCA8
PSBzaXplb2YobW92aWVQcm9wcykgLyBzaXplb2YobW92aWVQcm9wc1swXSkpOwogICAgIG1fcHJp
dmF0ZS0+bV9sb2FkRXJyb3IgPSBOZXdNb3ZpZUZyb21Qcm9wZXJ0aWVzKG1vdmllUHJvcENvdW50
LCBtb3ZpZVByb3BzLCAwLCAwLCAmbV9wcml2YXRlLT5tX21vdmllKTsKIAogZW5kOgogICAgIG1f
cHJpdmF0ZS0+c3RhcnRUYXNrKCk7CiAgICAgLy8gZ2V0IHRoZSBsb2FkIGZhaWwgY2FsbGJhY2sg
cXVpY2tseSAKICAgICBpZiAobV9wcml2YXRlLT5tX2xvYWRFcnJvcikKLSAgICAgICAgdXBkYXRl
VGFza1RpbWVyKDApOworICAgICAgICBRVE1vdmllVGFzazo6c2hhcmVkVGFzaygpLT51cGRhdGVU
YXNrVGltZXIoMCk7CiAgICAgZWxzZSB7CiAgICAgICAgIE9TVHlwZSBtb2RlID0ga1FUQXBlcnR1
cmVNb2RlX0NsZWFuQXBlcnR1cmU7CiAKQEAgLTc4NCwxMSArNTI3LDEwIEBAIGVuZDoKICAgICAg
ICAgLy8gdGhlIGluc3RhbGxlZCB2ZXJzaW9uIG9mIFFUIGRvZXNuJ3Qgc3VwcG9ydCBpdCBhbmQg
aXQgaXNuJ3Qgc2VyaW91cyBlbm91Z2ggdG8gCiAgICAgICAgIC8vIHdhcnJhbnQgZmFpbGluZy4K
ICAgICAgICAgUVRTZXRNb3ZpZVByb3BlcnR5KG1fcHJpdmF0ZS0+bV9tb3ZpZSwga1FUUHJvcGVy
dHlDbGFzc19WaXN1YWwsIGtRVFZpc3VhbFByb3BlcnR5SURfQXBlcnR1cmVNb2RlLCBzaXplb2Yo
bW9kZSksICZtb2RlKTsKLSAgICAgICAgbV9wcml2YXRlLT5yZWdpc3RlckRyYXdpbmdDYWxsYmFj
aygpOwogICAgIH0KIH0KIAotdm9pZCBRVE1vdmllV2luOjpkaXNhYmxlVW5zdXBwb3J0ZWRUcmFj
a3ModW5zaWduZWQmIGVuYWJsZWRUcmFja0NvdW50LCB1bnNpZ25lZCYgdG90YWxUcmFja0NvdW50
KQordm9pZCBRVE1vdmllOjpkaXNhYmxlVW5zdXBwb3J0ZWRUcmFja3ModW5zaWduZWQmIGVuYWJs
ZWRUcmFja0NvdW50LCB1bnNpZ25lZCYgdG90YWxUcmFja0NvdW50KQogewogICAgIGlmICghbV9w
cml2YXRlLT5tX21vdmllKSB7CiAgICAgICAgIHRvdGFsVHJhY2tDb3VudCA9IDA7CkBAIC05MDMs
MjAgKzY0NSwyNSBAQCB2b2lkIFFUTW92aWVXaW46OmRpc2FibGVVbnN1cHBvcnRlZFRyYWNrCiAg
ICAgfQogfQogCi12b2lkIFFUTW92aWVXaW46OnNldERpc2FibGVkKGJvb2wgYikKK2Jvb2wgUVRN
b3ZpZTo6aXNEaXNhYmxlZCgpIGNvbnN0CiB7Ci0gICAgbV9kaXNhYmxlZCA9IGI7CisgICAgcmV0
dXJuIG1fcHJpdmF0ZS0+bV9kaXNhYmxlZDsKIH0KIAordm9pZCBRVE1vdmllOjpzZXREaXNhYmxl
ZChib29sIGIpCit7CisgICAgbV9wcml2YXRlLT5tX2Rpc2FibGVkID0gYjsKK30KIAotYm9vbCBR
VE1vdmllV2luOjpoYXNWaWRlbygpIGNvbnN0CisKK2Jvb2wgUVRNb3ZpZTo6aGFzVmlkZW8oKSBj
b25zdAogewogICAgIGlmICghbV9wcml2YXRlLT5tX21vdmllKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgcmV0dXJuIChHZXRNb3ZpZUluZFRyYWNrVHlwZShtX3ByaXZhdGUtPm1fbW92aWUs
IDEsIFZpc3VhbE1lZGlhQ2hhcmFjdGVyaXN0aWMsIG1vdmllVHJhY2tDaGFyYWN0ZXJpc3RpYyB8
IG1vdmllVHJhY2tFbmFibGVkT25seSkpOwogfQogCi1ib29sIFFUTW92aWVXaW46Omhhc0F1ZGlv
KCkgY29uc3QKK2Jvb2wgUVRNb3ZpZTo6aGFzQXVkaW8oKSBjb25zdAogewogICAgIGlmICghbV9w
cml2YXRlLT5tX21vdmllKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC05MjQsMTQgKzY3MSwx
NCBAQCBib29sIFFUTW92aWVXaW46Omhhc0F1ZGlvKCkgY29uc3QKIH0KIAogCi1ib29sIFFUTW92
aWVXaW46Omhhc0Nsb3NlZENhcHRpb25zKCkgY29uc3QgCitib29sIFFUTW92aWU6Omhhc0Nsb3Nl
ZENhcHRpb25zKCkgY29uc3QgCiB7CiAgICAgaWYgKCFtX3ByaXZhdGUtPm1fbW92aWUpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gR2V0TW92aWVJbmRUcmFja1R5cGUobV9wcml2
YXRlLT5tX21vdmllLCAxLCBjbG9zZWRDYXB0aW9uVHJhY2tUeXBlLCBtb3ZpZVRyYWNrTWVkaWFU
eXBlKTsKIH0KIAotdm9pZCBRVE1vdmllV2luOjpzZXRDbG9zZWRDYXB0aW9uc1Zpc2libGUoYm9v
bCB2aXNpYmxlKQordm9pZCBRVE1vdmllOjpzZXRDbG9zZWRDYXB0aW9uc1Zpc2libGUoYm9vbCB2
aXNpYmxlKQogewogICAgIGlmICghbV9wcml2YXRlLT5tX21vdmllKQogICAgICAgICByZXR1cm47
CkBAIC05NDQsMTYgKzY5MSw2IEBAIHZvaWQgUVRNb3ZpZVdpbjo6c2V0Q2xvc2VkQ2FwdGlvbnNW
aXNpYmwKICAgICBRVFNldFRyYWNrUHJvcGVydHkoY2NUcmFjaywgY2xvc2VkQ2FwdGlvblRyYWNr
VHlwZSwgY2xvc2VkQ2FwdGlvbkRpc3BsYXlQcm9wZXJ0eUlELCBzaXplb2YoZG9EaXNwbGF5KSwg
JmRvRGlzcGxheSk7CiB9CiAKLXBhc2NhbCBPU0VyciBtb3ZpZURyYXdpbmdDb21wbGV0ZVByb2Mo
TW92aWUgbW92aWUsIGxvbmcgZGF0YSkKLXsKLSAgICBVcHBQYXJhbSBwYXJhbTsKLSAgICBwYXJh
bS5sb25nVmFsdWUgPSBkYXRhOwotICAgIFFUTW92aWVXaW5Qcml2YXRlKiBtcCA9IHN0YXRpY19j
YXN0PFFUTW92aWVXaW5Qcml2YXRlKj4ocGFyYW0ucHRyKTsKLSAgICBpZiAobXApCi0gICAgICAg
IG1wLT5kcmF3aW5nQ29tcGxldGUoKTsKLSAgICByZXR1cm4gMDsKLX0KLQogc3RhdGljIHZvaWQg
aW5pdGlhbGl6ZVN1cHBvcnRlZFR5cGVzKCkgCiB7CiAgICAgaWYgKGdTdXBwb3J0ZWRUeXBlcykK
QEAgLTEwNDMsMTMgKzc4MCwxMyBAQCBzdGF0aWMgdm9pZCBpbml0aWFsaXplU3VwcG9ydGVkVHlw
ZXMoKSAKICAgICB9CiB9CiAKLXVuc2lnbmVkIFFUTW92aWVXaW46OmNvdW50U3VwcG9ydGVkVHlw
ZXMoKQordW5zaWduZWQgUVRNb3ZpZTo6Y291bnRTdXBwb3J0ZWRUeXBlcygpCiB7CiAgICAgaW5p
dGlhbGl6ZVN1cHBvcnRlZFR5cGVzKCk7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVk
PihnU3VwcG9ydGVkVHlwZXMtPnNpemUoKSk7CiB9CiAKLXZvaWQgUVRNb3ZpZVdpbjo6Z2V0U3Vw
cG9ydGVkVHlwZSh1bnNpZ25lZCBpbmRleCwgY29uc3QgVUNoYXIqJiBzdHIsIHVuc2lnbmVkJiBs
ZW4pCit2b2lkIFFUTW92aWU6OmdldFN1cHBvcnRlZFR5cGUodW5zaWduZWQgaW5kZXgsIGNvbnN0
IFVDaGFyKiYgc3RyLCB1bnNpZ25lZCYgbGVuKQogewogICAgIGluaXRpYWxpemVTdXBwb3J0ZWRU
eXBlcygpOwogICAgIEFTU0VSVChpbmRleCA8IGdTdXBwb3J0ZWRUeXBlcy0+c2l6ZSgpKTsKQEAg
LTEwNjcsMTMgKzgwNCw3IEBAIHZvaWQgUVRNb3ZpZVdpbjo6Z2V0U3VwcG9ydGVkVHlwZSh1bnNp
Z24KICAgICAKIH0KIAotdm9pZCBRVE1vdmllV2luOjpzZXRUYXNrVGltZXJGdW5jcyhTZXRUYXNr
VGltZXJEZWxheUZ1bmMgc2V0VGFza1RpbWVyRGVsYXksIFN0b3BUYXNrVGltZXJGdW5jIHN0b3BU
YXNrVGltZXIpCi17Ci0gICAgZ1NldFRhc2tUaW1lckRlbGF5ID0gc2V0VGFza1RpbWVyRGVsYXk7
Ci0gICAgZ1N0b3BUYXNrVGltZXIgPSBzdG9wVGFza1RpbWVyOwotfQotCi1ib29sIFFUTW92aWVX
aW46OmluaXRpYWxpemVRdWlja1RpbWUoKSAKK2Jvb2wgUVRNb3ZpZTo6aW5pdGlhbGl6ZVF1aWNr
VGltZSgpIAogewogICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVkID0gZmFsc2U7CiAgICAgc3Rh
dGljIGJvb2wgaW5pdGlhbGl6YXRpb25TdWNjZWVkZWQgPSBmYWxzZTsKQEAgLTEwOTIsNzUgKzgy
MywxNCBAQCBib29sIFFUTW92aWVXaW46OmluaXRpYWxpemVRdWlja1RpbWUoKSAKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBFbnRlck1vdmllcygpOwotICAg
ICAgICBnTW92aWVEcmF3aW5nQ29tcGxldGVVUFAgPSBOZXdNb3ZpZURyYXdpbmdDb21wbGV0ZVVQ
UChtb3ZpZURyYXdpbmdDb21wbGV0ZVByb2MpOwogICAgICAgICBpbml0aWFsaXphdGlvblN1Y2Nl
ZWRlZCA9IHRydWU7CiAgICAgfQogICAgIHJldHVybiBpbml0aWFsaXphdGlvblN1Y2NlZWRlZDsK
IH0KIAotTFJFU1VMVCBRVE1vdmllV2luOjpmdWxsc2NyZWVuV25kUHJvYyhIV05EIHduZCwgVUlO
VCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQotewotICAgIFFUTW92aWVX
aW4qIG1vdmllID0gc3RhdGljX2Nhc3Q8UVRNb3ZpZVdpbio+KEdldFByb3Aod25kLCBmdWxsc2Ny
ZWVuUVRNb3ZpZVdpblBvaW50ZXJQcm9wKSk7Ci0KLSAgICBpZiAobWVzc2FnZSA9PSBXTV9ERVNU
Uk9ZKQotICAgICAgICBSZW1vdmVQcm9wKHduZCwgZnVsbHNjcmVlblFUTW92aWVXaW5Qb2ludGVy
UHJvcCk7Ci0KLSAgICBpZiAoIW1vdmllKQotICAgICAgICByZXR1cm4gRGVmV2luZG93UHJvYyh3
bmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtKTsKLQotICAgIHJldHVybiBtb3ZpZS0+bV9wcml2
YXRlLT5tX2Z1bGxzY3JlZW5DbGllbnQtPmZ1bGxzY3JlZW5DbGllbnRXbmRQcm9jKHduZCwgbWVz
c2FnZSwgd1BhcmFtLCBsUGFyYW0pOwotfQotCi1IV05EIFFUTW92aWVXaW46OmVudGVyRnVsbHNj
cmVlbihRVE1vdmllV2luRnVsbHNjcmVlbkNsaWVudCogY2xpZW50KQotewotICAgIG1fcHJpdmF0
ZS0+bV9mdWxsc2NyZWVuQ2xpZW50ID0gY2xpZW50OwotICAgIAotICAgIEJlZ2luRnVsbFNjcmVl
bigmbV9wcml2YXRlLT5tX2Z1bGxzY3JlZW5SZXN0b3JlU3RhdGUsIDAsIDAsIDAsICZtX3ByaXZh
dGUtPm1fZnVsbHNjcmVlbldpbmRvdywgMCwgZnVsbFNjcmVlbkFsbG93RXZlbnRzKTsgCi0gICAg
UVRNTFNldFdpbmRvd1duZFByb2MobV9wcml2YXRlLT5tX2Z1bGxzY3JlZW5XaW5kb3csIGZ1bGxz
Y3JlZW5XbmRQcm9jKTsKLSAgICBDcmVhdGVQb3J0QXNzb2NpYXRpb24oR2V0UG9ydE5hdGl2ZVdp
bmRvdyhtX3ByaXZhdGUtPm1fZnVsbHNjcmVlbldpbmRvdyksIDAsIDApOwotCi0gICAgR2V0TW92
aWVCb3gobV9wcml2YXRlLT5tX21vdmllLCAmbV9wcml2YXRlLT5tX2Z1bGxzY3JlZW5SZWN0KTsK
LSAgICBHZXRNb3ZpZUdXb3JsZChtX3ByaXZhdGUtPm1fbW92aWUsICZtX3ByaXZhdGUtPm1fZnVs
bHNjcmVlbk9yaWdHV29ybGQsIDApOwotICAgIFNldE1vdmllR1dvcmxkKG1fcHJpdmF0ZS0+bV9t
b3ZpZSwgcmVpbnRlcnByZXRfY2FzdDxDR3JhZlB0cj4obV9wcml2YXRlLT5tX2Z1bGxzY3JlZW5X
aW5kb3cpLCBHZXRHV29ybGREZXZpY2UocmVpbnRlcnByZXRfY2FzdDxDR3JhZlB0cj4obV9wcml2
YXRlLT5tX2Z1bGxzY3JlZW5XaW5kb3cpKSk7Ci0KLSAgICAvLyBTZXQgdGhlIHNpemUgb2YgdGhl
IGJveCB0byBwcmVzZXJ2ZSBhc3BlY3QgcmF0aW8KLSAgICBSZWN0IHJlY3QgPSBtX3ByaXZhdGUt
Pm1fZnVsbHNjcmVlbldpbmRvdy0+cG9ydFJlY3Q7Ci0KLSAgICBmbG9hdCBtb3ZpZVJhdGlvID0g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fcHJpdmF0ZS0+bV93aWR0aCkgLyBtX3ByaXZhdGUtPm1faGVp
Z2h0OwotICAgIGludCB3aW5kb3dXaWR0aCA9ICByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0OwotICAg
IGludCB3aW5kb3dIZWlnaHQgPSByZWN0LmJvdHRvbSAtIHJlY3QudG9wOwotICAgIGZsb2F0IHdp
bmRvd1JhdGlvID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHdpbmRvd1dpZHRoKSAvIHdpbmRvd0hlaWdo
dDsKLSAgICBpbnQgYWN0dWFsV2lkdGggPSAod2luZG93UmF0aW8gPiBtb3ZpZVJhdGlvKSA/ICh3
aW5kb3dIZWlnaHQgKiBtb3ZpZVJhdGlvKSA6IHdpbmRvd1dpZHRoOwotICAgIGludCBhY3R1YWxI
ZWlnaHQgPSAod2luZG93UmF0aW8gPCBtb3ZpZVJhdGlvKSA/ICh3aW5kb3dXaWR0aCAvIG1vdmll
UmF0aW8pIDogd2luZG93SGVpZ2h0OwotICAgIGludCBvZmZzZXRYID0gKHdpbmRvd1dpZHRoIC0g
YWN0dWFsV2lkdGgpIC8gMjsKLSAgICBpbnQgb2Zmc2V0WSA9ICh3aW5kb3dIZWlnaHQgLSBhY3R1
YWxIZWlnaHQpIC8gMjsKLQotICAgIHJlY3QubGVmdCA9IG9mZnNldFg7Ci0gICAgcmVjdC5yaWdo
dCA9IG9mZnNldFggKyBhY3R1YWxXaWR0aDsKLSAgICByZWN0LnRvcCA9IG9mZnNldFk7Ci0gICAg
cmVjdC5ib3R0b20gPSBvZmZzZXRZICsgYWN0dWFsSGVpZ2h0OwotCi0gICAgU2V0TW92aWVCb3go
bV9wcml2YXRlLT5tX21vdmllLCAmcmVjdCk7Ci0gICAgU2hvd0hpZGVUYXNrQmFyKHRydWUpOwot
Ci0gICAgLy8gU2V0IHRoZSAndGhpcycgcG9pbnRlciBvbiB0aGUgSFdORAotICAgIEhXTkQgd25k
ID0gc3RhdGljX2Nhc3Q8SFdORD4oR2V0UG9ydE5hdGl2ZVdpbmRvdyhtX3ByaXZhdGUtPm1fZnVs
bHNjcmVlbldpbmRvdykpOwotICAgIFNldFByb3Aod25kLCBmdWxsc2NyZWVuUVRNb3ZpZVdpblBv
aW50ZXJQcm9wLCBzdGF0aWNfY2FzdDxIQU5ETEU+KHRoaXMpKTsKLQotICAgIHJldHVybiB3bmQ7
Ci19Ci0KLXZvaWQgUVRNb3ZpZVdpbjo6ZXhpdEZ1bGxzY3JlZW4oKQorTW92aWUgUVRNb3ZpZTo6
Z2V0TW92aWVIYW5kbGUoKSBjb25zdCAKIHsKLSAgICBpZiAoIW1fcHJpdmF0ZS0+bV9mdWxsc2Ny
ZWVuV2luZG93KQotICAgICAgICByZXR1cm47Ci0KLSAgICBIV05EIHduZCA9IHN0YXRpY19jYXN0
PEhXTkQ+KEdldFBvcnROYXRpdmVXaW5kb3cobV9wcml2YXRlLT5tX2Z1bGxzY3JlZW5XaW5kb3cp
KTsKLSAgICBEZXN0cm95UG9ydEFzc29jaWF0aW9uKHJlaW50ZXJwcmV0X2Nhc3Q8Q0dyYWZQdHI+
KG1fcHJpdmF0ZS0+bV9mdWxsc2NyZWVuV2luZG93KSk7Ci0gICAgU2V0TW92aWVHV29ybGQobV9w
cml2YXRlLT5tX21vdmllLCBtX3ByaXZhdGUtPm1fZnVsbHNjcmVlbk9yaWdHV29ybGQsIDApOwot
ICAgIEVuZEZ1bGxTY3JlZW4obV9wcml2YXRlLT5tX2Z1bGxzY3JlZW5SZXN0b3JlU3RhdGUsIDBM
KTsKLSAgICBTZXRNb3ZpZUJveChtX3ByaXZhdGUtPm1fbW92aWUsICZtX3ByaXZhdGUtPm1fZnVs
bHNjcmVlblJlY3QpOwotICAgIG1fcHJpdmF0ZS0+bV9mdWxsc2NyZWVuV2luZG93ID0gMDsKKyAg
ICByZXR1cm4gbV9wcml2YXRlLT5tX21vdmllOwogfQogCiBCT09MIFdJTkFQSSBEbGxNYWluKEhJ
TlNUQU5DRSBoaW5zdERMTCwgRFdPUkQgZmR3UmVhc29uLCBMUFZPSUQgbHB2UmVzZXJ2ZWQpCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVE1vdmllLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRNb3ZpZS5oCShyZXZpc2lvbiA1ODE4
NykJKGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRNb3ZpZVdpbi5oOjU4MTg3
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRNb3ZpZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTI3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAy
MDA5LCAyMDEwIEFwcGxlLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIFFUTW92aWVXaW5faAorI2RlZmluZSBRVE1vdmllV2luX2gKKworI2luY2x1ZGUgPFVuaWNv
ZGUuaD4KKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKKyNpZmRlZiBRVE1PVklFV0lOX0VYUE9SVFMK
KyNkZWZpbmUgUVRNT1ZJRVdJTl9BUEkgX19kZWNsc3BlYyhkbGxleHBvcnQpCisjZWxzZQorI2Rl
ZmluZSBRVE1PVklFV0lOX0FQSSBfX2RlY2xzcGVjKGRsbGltcG9ydCkKKyNlbmRpZgorCitjbGFz
cyBRVE1vdmllV2luOworY2xhc3MgUVRNb3ZpZVdpblByaXZhdGU7CisKK2NsYXNzIFFUTW92aWVX
aW5DbGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBtb3ZpZUVuZGVkKFFUTW92aWVX
aW4qKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIG1vdmllTG9hZFN0YXRlQ2hhbmdlZChRVE1vdmll
V2luKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBtb3ZpZVRpbWVDaGFuZ2VkKFFUTW92aWVXaW4q
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIG1vdmllTmV3SW1hZ2VBdmFpbGFibGUoUVRNb3ZpZVdp
biopID0gMDsKK307CisKK2NsYXNzIFFUTW92aWVXaW5GdWxsc2NyZWVuQ2xpZW50IHsKK3B1Ymxp
YzoKKyAgICB2aXJ0dWFsIExSRVNVTFQgZnVsbHNjcmVlbkNsaWVudFduZFByb2MoSFdORCwgVUlO
VCBtZXNzYWdlLCBXUEFSQU0sIExQQVJBTSkgPSAwOworfTsKKworZW51bSB7CisgICAgUVRNb3Zp
ZUxvYWRTdGF0ZUVycm9yID0gLTFMLAorICAgIFFUTW92aWVMb2FkU3RhdGVMb2FkZWQgID0gMjAw
MEwsCisgICAgUVRNb3ZpZUxvYWRTdGF0ZVBsYXlhYmxlID0gMTAwMDBMLAorICAgIFFUTW92aWVM
b2FkU3RhdGVQbGF5dGhyb3VnaE9LID0gMjAwMDBMLAorICAgIFFUTW92aWVMb2FkU3RhdGVDb21w
bGV0ZSA9IDEwMDAwMEwKK307CisKK3R5cGVkZWYgY29uc3Qgc3RydWN0IF9fQ0ZVUkwgKiBDRlVS
TFJlZjsKKworY2xhc3MgUVRNT1ZJRVdJTl9BUEkgUVRNb3ZpZVdpbiB7CitwdWJsaWM6CisgICAg
c3RhdGljIGJvb2wgaW5pdGlhbGl6ZVF1aWNrVGltZSgpOworCisgICAgdHlwZWRlZiB2b2lkICgq
U2V0VGFza1RpbWVyRGVsYXlGdW5jKShkb3VibGUpOworICAgIHR5cGVkZWYgdm9pZCAoKlN0b3BU
YXNrVGltZXJGdW5jKSgpOworICAgIHN0YXRpYyB2b2lkIHNldFRhc2tUaW1lckZ1bmNzKFNldFRh
c2tUaW1lckRlbGF5RnVuYywgU3RvcFRhc2tUaW1lckZ1bmMpOworICAgIHN0YXRpYyB2b2lkIHRh
c2tUaW1lckZpcmVkKCk7CisKKyAgICBRVE1vdmllV2luKFFUTW92aWVXaW5DbGllbnQqKTsKKyAg
ICB+UVRNb3ZpZVdpbigpOworCisgICAgdm9pZCBsb2FkKGNvbnN0IFVDaGFyKiB1cmwsIGludCBs
ZW4sIGJvb2wgcHJlc2VydmVzUGl0Y2gpOworICAgIGxvbmcgbG9hZFN0YXRlKCkgY29uc3Q7Cisg
ICAgZmxvYXQgbWF4VGltZUxvYWRlZCgpIGNvbnN0OworCisgICAgdm9pZCBwbGF5KCk7CisgICAg
dm9pZCBwYXVzZSgpOworCisgICAgZmxvYXQgcmF0ZSgpIGNvbnN0OworICAgIHZvaWQgc2V0UmF0
ZShmbG9hdCk7CisKKyAgICBmbG9hdCBkdXJhdGlvbigpIGNvbnN0OworICAgIGZsb2F0IGN1cnJl
bnRUaW1lKCkgY29uc3Q7CisgICAgdm9pZCBzZXRDdXJyZW50VGltZShmbG9hdCkgY29uc3Q7CisK
KyAgICB2b2lkIHNldFZvbHVtZShmbG9hdCk7CisgICAgdm9pZCBzZXRQcmVzZXJ2ZXNQaXRjaChi
b29sKTsKKworICAgIHVuc2lnbmVkIGRhdGFTaXplKCkgY29uc3Q7CisKKyAgICB2b2lkIGdldE5h
dHVyYWxTaXplKGludCYgd2lkdGgsIGludCYgaGVpZ2h0KTsKKyAgICB2b2lkIHNldFNpemUoaW50
IHdpZHRoLCBpbnQgaGVpZ2h0KTsKKworICAgIHZvaWQgc2V0VmlzaWJsZShib29sKTsKKyAgICB2
b2lkIHBhaW50KEhEQywgaW50IHgsIGludCB5KTsKKyAgICB2b2lkIGdldEN1cnJlbnRGcmFtZUlu
Zm8odm9pZComIGJ1ZmZlciwgdW5zaWduZWQmIGJpdHNQZXJQaXhlbCwgdW5zaWduZWQmIHJvd0J5
dGVzLCB1bnNpZ25lZCYgd2lkdGgsIHVuc2lnbmVkJiBoZWlnaHQpOworCisgICAgdm9pZCBkaXNh
YmxlVW5zdXBwb3J0ZWRUcmFja3ModW5zaWduZWQmIGVuYWJsZWRUcmFja0NvdW50LCB1bnNpZ25l
ZCYgdG90YWxUcmFja0NvdW50KTsKKyAgICB2b2lkIHNldERpc2FibGVkKGJvb2wpOworCisgICAg
Ym9vbCBoYXNWaWRlbygpIGNvbnN0OworICAgIGJvb2wgaGFzQXVkaW8oKSBjb25zdDsKKworICAg
IGJvb2wgaGFzQ2xvc2VkQ2FwdGlvbnMoKSBjb25zdDsKKyAgICB2b2lkIHNldENsb3NlZENhcHRp
b25zVmlzaWJsZShib29sKTsKKworICAgIHN0YXRpYyB1bnNpZ25lZCBjb3VudFN1cHBvcnRlZFR5
cGVzKCk7CisgICAgc3RhdGljIHZvaWQgZ2V0U3VwcG9ydGVkVHlwZSh1bnNpZ25lZCBpbmRleCwg
Y29uc3QgVUNoYXIqJiBzdHIsIHVuc2lnbmVkJiBsZW4pOworCisgICAgLy8gUmV0dXJucyB0aGUg
ZnVsbC1zY3JlZW4gd2luZG93IGNyZWF0ZWQKKyAgICBIV05EIGVudGVyRnVsbHNjcmVlbihRVE1v
dmllV2luRnVsbHNjcmVlbkNsaWVudCopOworICAgIHZvaWQgZXhpdEZ1bGxzY3JlZW4oKTsKKwor
cHJpdmF0ZToKKyAgICB2b2lkIGxvYWQoQ0ZVUkxSZWYsIGJvb2wgcHJlc2VydmVzUGl0Y2gpOwor
ICAgIHN0YXRpYyBMUkVTVUxUIGZ1bGxzY3JlZW5XbmRQcm9jKEhXTkQsIFVJTlQgbWVzc2FnZSwg
V1BBUkFNLCBMUEFSQU0pOworCisgICAgUVRNb3ZpZVdpblByaXZhdGUqIG1fcHJpdmF0ZTsKKyAg
ICBib29sIG1fZGlzYWJsZWQ7CisgICAgZnJpZW5kIGNsYXNzIFFUTW92aWVXaW5Qcml2YXRlOwor
fTsKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVE1vdmll
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRNb3ZpZS5o
CShyZXZpc2lvbiA1ODE4NykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92
aWUuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsMTEgKzIzLDEyIEBACiAgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
ICAqLwogCi0jaWZuZGVmIFFUTW92aWVXaW5faAotI2RlZmluZSBRVE1vdmllV2luX2gKKyNpZm5k
ZWYgUVRNb3ZpZV9oCisjZGVmaW5lIFFUTW92aWVfaAogCiAjaW5jbHVkZSA8VW5pY29kZS5oPgog
I2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCiAjaWZk
ZWYgUVRNT1ZJRVdJTl9FWFBPUlRTCiAjZGVmaW5lIFFUTU9WSUVXSU5fQVBJIF9fZGVjbHNwZWMo
ZGxsZXhwb3J0KQpAQCAtMzUsMjAgKzM2LDE1IEBACiAjZGVmaW5lIFFUTU9WSUVXSU5fQVBJIF9f
ZGVjbHNwZWMoZGxsaW1wb3J0KQogI2VuZGlmCiAKLWNsYXNzIFFUTW92aWVXaW47Ci1jbGFzcyBR
VE1vdmllV2luUHJpdmF0ZTsKK2NsYXNzIFFUTW92aWU7CitjbGFzcyBRVE1vdmllUHJpdmF0ZTsK
K3R5cGVkZWYgc3RydWN0IE1vdmllVHlwZSoqIE1vdmllOwogCi1jbGFzcyBRVE1vdmllV2luQ2xp
ZW50IHsKK2NsYXNzIFFUTW92aWVDbGllbnQgewogcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBt
b3ZpZUVuZGVkKFFUTW92aWVXaW4qKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIG1vdmllTG9hZFN0
YXRlQ2hhbmdlZChRVE1vdmllV2luKikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBtb3ZpZVRpbWVD
aGFuZ2VkKFFUTW92aWVXaW4qKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIG1vdmllTmV3SW1hZ2VB
dmFpbGFibGUoUVRNb3ZpZVdpbiopID0gMDsKLX07Ci0KLWNsYXNzIFFUTW92aWVXaW5GdWxsc2Ny
ZWVuQ2xpZW50IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIExSRVNVTFQgZnVsbHNjcmVlbkNsaWVu
dFduZFByb2MoSFdORCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0sIExQQVJBTSkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBtb3ZpZUVuZGVkKFFUTW92aWUqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIG1v
dmllTG9hZFN0YXRlQ2hhbmdlZChRVE1vdmllKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBtb3Zp
ZVRpbWVDaGFuZ2VkKFFUTW92aWUqKSA9IDA7CiB9OwogCiBlbnVtIHsKQEAgLTYxLDE5ICs1Nywy
MCBAQCBlbnVtIHsKIAogdHlwZWRlZiBjb25zdCBzdHJ1Y3QgX19DRlVSTCAqIENGVVJMUmVmOwog
Ci1jbGFzcyBRVE1PVklFV0lOX0FQSSBRVE1vdmllV2luIHsKK2NsYXNzIFFUTU9WSUVXSU5fQVBJ
IFFUTW92aWUgOiBwdWJsaWMgUmVmQ291bnRlZDxRVE1vdmllPiB7CiBwdWJsaWM6CiAgICAgc3Rh
dGljIGJvb2wgaW5pdGlhbGl6ZVF1aWNrVGltZSgpOwotCi0gICAgdHlwZWRlZiB2b2lkICgqU2V0
VGFza1RpbWVyRGVsYXlGdW5jKShkb3VibGUpOwotICAgIHR5cGVkZWYgdm9pZCAoKlN0b3BUYXNr
VGltZXJGdW5jKSgpOwotICAgIHN0YXRpYyB2b2lkIHNldFRhc2tUaW1lckZ1bmNzKFNldFRhc2tU
aW1lckRlbGF5RnVuYywgU3RvcFRhc2tUaW1lckZ1bmMpOwogICAgIHN0YXRpYyB2b2lkIHRhc2tU
aW1lckZpcmVkKCk7CiAKLSAgICBRVE1vdmllV2luKFFUTW92aWVXaW5DbGllbnQqKTsKLSAgICB+
UVRNb3ZpZVdpbigpOworICAgIFFUTW92aWUoUVRNb3ZpZUNsaWVudCopOworICAgIH5RVE1vdmll
KCk7CisKKyAgICB2b2lkIGFkZENsaWVudChRVE1vdmllQ2xpZW50Kik7CisgICAgdm9pZCByZW1v
dmVDbGllbnQoUVRNb3ZpZUNsaWVudCopOwogCiAgICAgdm9pZCBsb2FkKGNvbnN0IFVDaGFyKiB1
cmwsIGludCBsZW4sIGJvb2wgcHJlc2VydmVzUGl0Y2gpOworICAgIHZvaWQgbG9hZChDRlVSTFJl
ZiwgYm9vbCBwcmVzZXJ2ZXNQaXRjaCk7CisKICAgICBsb25nIGxvYWRTdGF0ZSgpIGNvbnN0Owog
ICAgIGZsb2F0IG1heFRpbWVMb2FkZWQoKSBjb25zdDsKIApAQCAtOTMsMTMgKzkwLDEwIEBAIHB1
YmxpYzoKICAgICB1bnNpZ25lZCBkYXRhU2l6ZSgpIGNvbnN0OwogCiAgICAgdm9pZCBnZXROYXR1
cmFsU2l6ZShpbnQmIHdpZHRoLCBpbnQmIGhlaWdodCk7Ci0gICAgdm9pZCBzZXRTaXplKGludCB3
aWR0aCwgaW50IGhlaWdodCk7Ci0KLSAgICB2b2lkIHNldFZpc2libGUoYm9vbCk7Ci0gICAgdm9p
ZCBwYWludChIREMsIGludCB4LCBpbnQgeSk7Ci0gICAgdm9pZCBnZXRDdXJyZW50RnJhbWVJbmZv
KHZvaWQqJiBidWZmZXIsIHVuc2lnbmVkJiBiaXRzUGVyUGl4ZWwsIHVuc2lnbmVkJiByb3dCeXRl
cywgdW5zaWduZWQmIHdpZHRoLCB1bnNpZ25lZCYgaGVpZ2h0KTsKIAogICAgIHZvaWQgZGlzYWJs
ZVVuc3VwcG9ydGVkVHJhY2tzKHVuc2lnbmVkJiBlbmFibGVkVHJhY2tDb3VudCwgdW5zaWduZWQm
IHRvdGFsVHJhY2tDb3VudCk7CisKKyAgICBib29sIGlzRGlzYWJsZWQoKSBjb25zdDsKICAgICB2
b2lkIHNldERpc2FibGVkKGJvb2wpOwogCiAgICAgYm9vbCBoYXNWaWRlbygpIGNvbnN0OwpAQCAt
MTExLDE3ICsxMDUsMTEgQEAgcHVibGljOgogICAgIHN0YXRpYyB1bnNpZ25lZCBjb3VudFN1cHBv
cnRlZFR5cGVzKCk7CiAgICAgc3RhdGljIHZvaWQgZ2V0U3VwcG9ydGVkVHlwZSh1bnNpZ25lZCBp
bmRleCwgY29uc3QgVUNoYXIqJiBzdHIsIHVuc2lnbmVkJiBsZW4pOwogCi0gICAgLy8gUmV0dXJu
cyB0aGUgZnVsbC1zY3JlZW4gd2luZG93IGNyZWF0ZWQKLSAgICBIV05EIGVudGVyRnVsbHNjcmVl
bihRVE1vdmllV2luRnVsbHNjcmVlbkNsaWVudCopOwotICAgIHZvaWQgZXhpdEZ1bGxzY3JlZW4o
KTsKKyAgICBNb3ZpZSBnZXRNb3ZpZUhhbmRsZSgpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIHZv
aWQgbG9hZChDRlVSTFJlZiwgYm9vbCBwcmVzZXJ2ZXNQaXRjaCk7Ci0gICAgc3RhdGljIExSRVNV
TFQgZnVsbHNjcmVlblduZFByb2MoSFdORCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0sIExQQVJBTSk7
Ci0KLSAgICBRVE1vdmllV2luUHJpdmF0ZSogbV9wcml2YXRlOwotICAgIGJvb2wgbV9kaXNhYmxl
ZDsKLSAgICBmcmllbmQgY2xhc3MgUVRNb3ZpZVdpblByaXZhdGU7CisgICAgUVRNb3ZpZVByaXZh
dGUqIG1fcHJpdmF0ZTsKKyAgICBmcmllbmQgY2xhc3MgUVRNb3ZpZVByaXZhdGU7CiB9OwogCiAj
ZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWVUYXNrLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVE1vdmllVGFz
ay5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVE1v
dmllVGFzay5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlLCBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiUVRNb3ZpZVRh
c2suaCIKKworLy8gUHV0IE1vdmllcy5oIGZpcnN0IHNvIGJ1aWxkIGZhaWx1cmVzIGhlcmUgcG9p
bnQgY2xlYXJseSB0byBRdWlja1RpbWUKKyNpbmNsdWRlIDxNb3ZpZXMuaD4KKworI2luY2x1ZGUg
PHd0Zi9IYXNoU2V0Lmg+CisKK1FUTW92aWVUYXNrOjpRVE1vdmllVGFzaygpIAorICAgIDogbV9z
ZXRUYXNrVGltZXJEZWxheSgwKQorICAgICwgbV9zdG9wVGFza1RpbWVyKDApCit7Cit9CisKK1FU
TW92aWVUYXNrOjp+UVRNb3ZpZVRhc2soKQoreworfQorCitRVE1vdmllVGFzayogUVRNb3ZpZVRh
c2s6OnNoYXJlZFRhc2soKQoreworICAgIHN0YXRpYyBRVE1vdmllVGFzayogc19zaGFyZWRUYXNr
ID0gbmV3IFFUTW92aWVUYXNrKCk7CisgICAgcmV0dXJuIHNfc2hhcmVkVGFzazsKK30KKwordm9p
ZCBRVE1vdmllVGFzazo6dXBkYXRlVGFza1RpbWVyKGRvdWJsZSBtYXhJbnRlcnZhbCwgZG91Ymxl
IG1pbkludGVydmFsKQoreworICAgIEFTU0VSVChtX3NldFRhc2tUaW1lckRlbGF5KTsKKyAgICBp
ZiAoIW1fc2V0VGFza1RpbWVyRGVsYXkpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVCht
X3N0b3BUYXNrVGltZXIpOworICAgIGlmICghbV90YXNrTGlzdC5zaXplKCkgJiYgbV9zdG9wVGFz
a1RpbWVyKSB7CisgICAgICAgIG1fc3RvcFRhc2tUaW1lcigpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIAorICAgIGxvbmcgaW50ZXJ2YWxJbk1TOworICAgIE9TU3RhdHVzIHN0YXR1cyA9
IFFUR2V0VGltZVVudGlsTmV4dFRhc2soJmludGVydmFsSW5NUywgMTAwMCk7CisgICAgZG91Ymxl
IGludGVydmFsID0gaW50ZXJ2YWxJbk1TIC8gMTAwMC4wOworICAgIGlmIChpbnRlcnZhbCA8IG1p
bkludGVydmFsKQorICAgICAgICBpbnRlcnZhbCA9IG1pbkludGVydmFsOworICAgIGlmIChzdGF0
dXMgIT0gbm9FcnIgJiYgaW50ZXJ2YWwgPiBtYXhJbnRlcnZhbCkKKyAgICAgICAgaW50ZXJ2YWwg
PSBtYXhJbnRlcnZhbDsKKyAgICBtX3NldFRhc2tUaW1lckRlbGF5KGludGVydmFsKTsKK30KKwor
dm9pZCBRVE1vdmllVGFzazo6ZmlyZVRhc2tDbGllbnRzKCkKK3sKKyAgICBmb3IgKEhhc2hTZXQ8
UVRNb3ZpZVRhc2tDbGllbnQqPjo6aXRlcmF0b3IgaSA9IG1fdGFza0xpc3QuYmVnaW4oKTsgaSAh
PSBtX3Rhc2tMaXN0LmVuZCgpOyArK2kpCisgICAgICAgICgqaSktPnRhc2soKTsKK30KKwordm9p
ZCBRVE1vdmllVGFzazo6YWRkVGFza0NsaWVudChRVE1vdmllVGFza0NsaWVudCogY2xpZW50KSAK
K3sKKyAgICBBU1NFUlQoY2xpZW50KTsKKyAgICBpZiAoIWNsaWVudCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgbV90YXNrTGlzdC5hZGQoY2xpZW50KTsKK30KKwordm9pZCBRVE1vdmllVGFzazo6
cmVtb3ZlVGFza0NsaWVudChRVE1vdmllVGFza0NsaWVudCogY2xpZW50KQoreworICAgIEFTU0VS
VChjbGllbnQpOworICAgIGlmICghY2xpZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Rh
c2tMaXN0LnJlbW92ZShjbGllbnQpOworfQorCit2b2lkIFFUTW92aWVUYXNrOjpzZXRUYXNrVGlt
ZXJGdW5jcyhTZXRUYXNrVGltZXJEZWxheUZ1bmMgc2V0VGFza1RpbWVyRGVsYXksIFN0b3BUYXNr
VGltZXJGdW5jIHN0b3BUYXNrVGltZXIpCit7CisgICAgbV9zZXRUYXNrVGltZXJEZWxheSA9IHNl
dFRhc2tUaW1lckRlbGF5OworICAgIG1fc3RvcFRhc2tUaW1lciA9IHN0b3BUYXNrVGltZXI7Cit9
CisKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWVUYXNrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRNb3ZpZVRhc2suaAko
cmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWVUYXNr
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgUVRNb3ZpZVRhc2tfaAorI2RlZmluZSBRVE1vdmllVGFza19oCisKKyNp
bmNsdWRlIDxXVEYvSGFzaFNldC5oPgorCisjaWZkZWYgUVRNT1ZJRVdJTl9FWFBPUlRTCisjZGVm
aW5lIFFUTU9WSUVXSU5fQVBJIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQorI2Vsc2UKKyNkZWZpbmUg
UVRNT1ZJRVdJTl9BUEkgX19kZWNsc3BlYyhkbGxpbXBvcnQpCisjZW5kaWYKKworY2xhc3MgUVRN
b3ZpZVRhc2tDbGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCB0YXNrKCkgPSAwOwor
fTsKKwordHlwZWRlZiB2b2lkICgqU2V0VGFza1RpbWVyRGVsYXlGdW5jKShkb3VibGUpOwordHlw
ZWRlZiB2b2lkICgqU3RvcFRhc2tUaW1lckZ1bmMpKCk7CisKK2NsYXNzIFFUTU9WSUVXSU5fQVBJ
IFFUTW92aWVUYXNrIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUVRNb3ZpZVRhc2sqIHNoYXJlZFRh
c2soKTsKKworICAgIHZvaWQgYWRkVGFza0NsaWVudChRVE1vdmllVGFza0NsaWVudCogY2xpZW50
KTsKKyAgICB2b2lkIHJlbW92ZVRhc2tDbGllbnQoUVRNb3ZpZVRhc2tDbGllbnQqKTsKKyAgICB2
b2lkIGZpcmVUYXNrQ2xpZW50cygpOworCisgICAgdm9pZCB1cGRhdGVUYXNrVGltZXIoZG91Ymxl
IG1heEludGVydmFsID0gMS4wLCBkb3VibGUgbWluSW50ZXJ2YWwgPSAxLjAgLyAzMCk7CisgICAg
dm9pZCBzZXRUYXNrVGltZXJGdW5jcyhTZXRUYXNrVGltZXJEZWxheUZ1bmMgc2V0VGFza1RpbWVy
RGVsYXksIFN0b3BUYXNrVGltZXJGdW5jIHN0b3BUYXNrVGltZXIpOworCitwcm90ZWN0ZWQ6Cisg
ICAgUVRNb3ZpZVRhc2soKTsKKyAgICB+UVRNb3ZpZVRhc2soKTsKKworICAgIFNldFRhc2tUaW1l
ckRlbGF5RnVuYyBtX3NldFRhc2tUaW1lckRlbGF5OworICAgIFN0b3BUYXNrVGltZXJGdW5jIG1f
c3RvcFRhc2tUaW1lcjsKKyAgICBIYXNoU2V0PFFUTW92aWVUYXNrQ2xpZW50Kj4gbV90YXNrTGlz
dDsKKworcHJpdmF0ZToKKyAgICBRVE1vdmllVGFzayhjb25zdCBRVE1vdmllVGFzayYpOworICAg
IFFUTW92aWVUYXNrJiBvcGVyYXRvcj0oY29uc3QgUVRNb3ZpZVRhc2smKTsKK307CisKKyNlbmRp
ZgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRNb3ZpZVdpbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRNb3ZpZVdpbi5jcHAJ
KHJldmlzaW9uIDU4MTg3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRNb3Zp
ZVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDExICsyNiw5IEBACiAKICNpbmNsdWRlICJR
VE1vdmllV2luLmgiCiAKLS8vIFB1dCBNb3ZpZXMuaCBmaXJzdCBzbyBidWlsZCBmYWlsdXJlcyBo
ZXJlIHBvaW50IGNsZWFybHkgdG8gUXVpY2tUaW1lCi0jaW5jbHVkZSA8TW92aWVzLmg+Ci0KLSNp
bmNsdWRlICJRVE1vdmllV2luVGltZXIuaCIKKyNpbmNsdWRlICJRVE1vdmllVGFzay5oIgogI2lu
Y2x1ZGUgPEdYTWF0aC5oPgorI2luY2x1ZGUgPE1vdmllcy5oPgogI2luY2x1ZGUgPFFUTUwuaD4K
ICNpbmNsdWRlIDxRdWlja1RpbWVDb21wb25lbnRzLmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KQEAgLTQyLDExICs0MCw2IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIHN0YXRpYyBj
b25zdCBsb25nIG1pbmltdW1RdWlja1RpbWVWZXJzaW9uID0gMHgwNzMwMDAwMDsgLy8gNy4zCiAK
LXN0YXRpYyBjb25zdCBsb25nIGNsb3NlZENhcHRpb25UcmFja1R5cGUgPSAnY2xjcCc7Ci1zdGF0
aWMgY29uc3QgbG9uZyBzdWJUaXRsZVRyYWNrVHlwZSA9ICdzYnRsJzsKLXN0YXRpYyBjb25zdCBs
b25nIG1wZWc0T2JqZWN0RGVzY3JpcHRpb25UcmFja1R5cGUgPSAnb2RzbSc7Ci1zdGF0aWMgY29u
c3QgbG9uZyBtcGVnNFNjZW5lRGVzY3JpcHRpb25UcmFja1R5cGUgPSAnc2RzbSc7Ci1zdGF0aWMg
Y29uc3QgbG9uZyBjbG9zZWRDYXB0aW9uRGlzcGxheVByb3BlcnR5SUQgPSAnZGlzcCc7CiBzdGF0
aWMgTFBDVFNUUiBmdWxsc2NyZWVuUVRNb3ZpZVdpblBvaW50ZXJQcm9wID0gVEVYVCgiZnVsbHNj
cmVlblFUTW92aWVXaW5Qb2ludGVyIik7CiAKIC8vIFJlc2l6aW5nIEdXb3JsZHMgaXMgc2xvdywg
Z2l2ZSB0aGVtIGEgbWluaW11bSBzaXplIHNvIHNpemUgb2Ygc21hbGwgCkBAIC02NiwzMyArNTks
MTMgQEAgc3RhdGljIEhhc2hTZXQ8UVRNb3ZpZVdpblByaXZhdGUqPiogZ1Rhcwogc3RhdGljIFZl
Y3RvcjxDRlN0cmluZ1JlZj4qIGdTdXBwb3J0ZWRUeXBlcyA9IDA7CiBzdGF0aWMgU0ludDMyIHF1
aWNrVGltZVZlcnNpb24gPSAwOwogCi1zdGF0aWMgUVRNb3ZpZVdpbjo6U2V0VGFza1RpbWVyRGVs
YXlGdW5jIGdTZXRUYXNrVGltZXJEZWxheSA9IDA7Ci1zdGF0aWMgUVRNb3ZpZVdpbjo6U3RvcFRh
c2tUaW1lckZ1bmMgZ1N0b3BUYXNrVGltZXIgPSAwOwotCi1zdGF0aWMgdm9pZCB1cGRhdGVUYXNr
VGltZXIoaW50IG1heEludGVydmFsID0gMTAwMCkKLXsKLSAgICBpZiAoIWdUYXNrTGlzdC0+c2l6
ZSgpKSB7Ci0gICAgICAgIGdTdG9wVGFza1RpbWVyKCk7Ci0gICAgICAgIHJldHVybjsgICAgCi0g
ICAgfQotICAgIAotICAgIGxvbmcgaW50ZXJ2YWxJbk1TOwotICAgIFFUR2V0VGltZVVudGlsTmV4
dFRhc2soJmludGVydmFsSW5NUywgMTAwMCk7Ci0gICAgaWYgKGludGVydmFsSW5NUyA+IG1heElu
dGVydmFsKQotICAgICAgICBpbnRlcnZhbEluTVMgPSBtYXhJbnRlcnZhbDsKLSAgICBnU2V0VGFz
a1RpbWVyRGVsYXkoc3RhdGljX2Nhc3Q8ZmxvYXQ+KGludGVydmFsSW5NUykgLyAxMDAwKTsKLX0K
LQotY2xhc3MgUVRNb3ZpZVdpblByaXZhdGUgOiBwdWJsaWMgTm9uY29weWFibGUgeworY2xhc3Mg
UVRNb3ZpZVdpblByaXZhdGUgOiBwdWJsaWMgUVRNb3ZpZUNsaWVudCB7CiBwdWJsaWM6Ci0gICAg
UVRNb3ZpZVdpblByaXZhdGUoKTsKLSAgICB+UVRNb3ZpZVdpblByaXZhdGUoKTsKLSAgICB2b2lk
IHRhc2soKTsKLSAgICB2b2lkIHN0YXJ0VGFzaygpOwotICAgIHZvaWQgZW5kVGFzaygpOworICAg
IFFUTW92aWVXaW5Qcml2YXRlKFFUTW92aWVXaW4qIG1vdmllV2luKTsKKyAgICB2aXJ0dWFsIH5R
VE1vdmllV2luUHJpdmF0ZSgpOwogCi0gICAgdm9pZCBjcmVhdGVNb3ZpZUNvbnRyb2xsZXIoKTsK
ICAgICB2b2lkIHJlZ2lzdGVyRHJhd2luZ0NhbGxiYWNrKCk7CisgICAgdm9pZCB1bnJlZ2lzdGVy
RHJhd2luZ0NhbGxiYWNrKCk7CiAgICAgdm9pZCBkcmF3aW5nQ29tcGxldGUoKTsKICAgICB2b2lk
IHVwZGF0ZUdXb3JsZCgpOwogICAgIHZvaWQgY3JlYXRlR1dvcmxkKCk7CkBAIC0xMDMsMTYgKzc2
LDE1IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0U2l6ZShpbnQsIGludCk7CiAKKyAgICB2aXJ0
dWFsIHZvaWQgbW92aWVFbmRlZChRVE1vdmllKik7CisgICAgdmlydHVhbCB2b2lkIG1vdmllTG9h
ZFN0YXRlQ2hhbmdlZChRVE1vdmllKik7CisgICAgdmlydHVhbCB2b2lkIG1vdmllVGltZUNoYW5n
ZWQoUVRNb3ZpZSopOworCiAgICAgUVRNb3ZpZVdpbiogbV9tb3ZpZVdpbjsKKyAgICBSZWZQdHI8
UVRNb3ZpZT4gbV9xdE1vdmllOwogICAgIE1vdmllIG1fbW92aWU7Ci0gICAgTW92aWVDb250cm9s
bGVyIG1fbW92aWVDb250cm9sbGVyOwotICAgIGJvb2wgbV90YXNraW5nOwogICAgIFFUTW92aWVX
aW5DbGllbnQqIG1fY2xpZW50OwogICAgIGxvbmcgbV9sb2FkU3RhdGU7Ci0gICAgYm9vbCBtX2Vu
ZGVkOwotICAgIGJvb2wgbV9zZWVraW5nOwotICAgIGZsb2F0IG1fbGFzdE1lZGlhVGltZTsKLSAg
ICBkb3VibGUgbV9sYXN0TG9hZFN0YXRlQ2hlY2tUaW1lOwogICAgIGludCBtX3dpZHRoOwogICAg
IGludCBtX2hlaWdodDsKICAgICBib29sIG1fdmlzaWJsZTsKQEAgLTEyMCwxMiArOTIsOCBAQCBw
dWJsaWM6CiAgICAgaW50IG1fZ1dvcmxkV2lkdGg7CiAgICAgaW50IG1fZ1dvcmxkSGVpZ2h0Owog
ICAgIEdXb3JsZFB0ciBtX3NhdmVkR1dvcmxkOwotICAgIGxvbmcgbV9sb2FkRXJyb3I7CiAgICAg
ZmxvYXQgbV93aWR0aFNjYWxlRmFjdG9yOwogICAgIGZsb2F0IG1faGVpZ2h0U2NhbGVGYWN0b3I7
Ci0gICAgQ0ZVUkxSZWYgbV9jdXJyZW50VVJMOwotICAgIGZsb2F0IG1fdGltZVRvUmVzdG9yZTsK
LSAgICBmbG9hdCBtX3JhdGVUb1Jlc3RvcmU7CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgIGJv
b2wgbV9zY2FsZUNhY2hlZDsKICNlbmRpZgpAQCAtMTM0LDE5ICsxMDIsMTQgQEAgcHVibGljOgog
ICAgIFJlY3QgbV9mdWxsc2NyZWVuUmVjdDsKICAgICBRVE1vdmllV2luRnVsbHNjcmVlbkNsaWVu
dCogbV9mdWxsc2NyZWVuQ2xpZW50OwogICAgIGNoYXIqIG1fZnVsbHNjcmVlblJlc3RvcmVTdGF0
ZTsKKyAgICBib29sIG1fZGlzYWJsZWQ7CiB9OwogCi1RVE1vdmllV2luUHJpdmF0ZTo6UVRNb3Zp
ZVdpblByaXZhdGUoKQotICAgIDogbV9tb3ZpZVdpbigwKQorUVRNb3ZpZVdpblByaXZhdGU6OlFU
TW92aWVXaW5Qcml2YXRlKFFUTW92aWVXaW4qIG1vdmllV2luKQorICAgIDogbV9tb3ZpZVdpbiht
b3ZpZVdpbikKICAgICAsIG1fbW92aWUoMCkKLSAgICAsIG1fbW92aWVDb250cm9sbGVyKDApCi0g
ICAgLCBtX3Rhc2tpbmcoZmFsc2UpCiAgICAgLCBtX2NsaWVudCgwKQogICAgICwgbV9sb2FkU3Rh
dGUoMCkKLSAgICAsIG1fZW5kZWQoZmFsc2UpCi0gICAgLCBtX3NlZWtpbmcoZmFsc2UpCi0gICAg
LCBtX2xhc3RNZWRpYVRpbWUoMCkKLSAgICAsIG1fbGFzdExvYWRTdGF0ZUNoZWNrVGltZSgwKQog
ICAgICwgbV93aWR0aCgwKQogICAgICwgbV9oZWlnaHQoMCkKICAgICAsIG1fdmlzaWJsZShmYWxz
ZSkKQEAgLTE1NCwxMiArMTE3LDggQEAgUVRNb3ZpZVdpblByaXZhdGU6OlFUTW92aWVXaW5Qcml2
YXRlKCkKICAgICAsIG1fZ1dvcmxkV2lkdGgoMCkKICAgICAsIG1fZ1dvcmxkSGVpZ2h0KDApCiAg
ICAgLCBtX3NhdmVkR1dvcmxkKDApCi0gICAgLCBtX2xvYWRFcnJvcigwKQogICAgICwgbV93aWR0
aFNjYWxlRmFjdG9yKDEpCiAgICAgLCBtX2hlaWdodFNjYWxlRmFjdG9yKDEpCi0gICAgLCBtX2N1
cnJlbnRVUkwoMCkKLSAgICAsIG1fdGltZVRvUmVzdG9yZSgtMS4wZikKLSAgICAsIG1fcmF0ZVRv
UmVzdG9yZSgtMS4wZikKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgLCBtX3NjYWxlQ2FjaGVk
KGZhbHNlKQogI2VuZGlmCkBAIC0xNjcsNiArMTI2LDggQEAgUVRNb3ZpZVdpblByaXZhdGU6OlFU
TW92aWVXaW5Qcml2YXRlKCkKICAgICAsIG1fZnVsbHNjcmVlbk9yaWdHV29ybGQoMCkKICAgICAs
IG1fZnVsbHNjcmVlbkNsaWVudCgwKQogICAgICwgbV9mdWxsc2NyZWVuUmVzdG9yZVN0YXRlKDAp
CisgICAgLCBtX2Rpc2FibGVkKGZhbHNlKQorICAgICwgbV9xdE1vdmllKDApCiB7CiAgICAgUmVj
dCByZWN0ID0geyAwLCAwLCAwLCAwIH07CiAgICAgbV9mdWxsc2NyZWVuUmVjdCA9IHJlY3Q7CkBA
IC0xNzYsNDcgKzEzNyw4IEBAIFFUTW92aWVXaW5Qcml2YXRlOjp+UVRNb3ZpZVdpblByaXZhdGUo
KQogewogICAgIEFTU0VSVCghbV9mdWxsc2NyZWVuV2luZG93KTsKIAotICAgIGVuZFRhc2soKTsK
ICAgICBpZiAobV9nV29ybGQpCiAgICAgICAgIGRlbGV0ZUdXb3JsZCgpOwotICAgIGlmIChtX21v
dmllQ29udHJvbGxlcikKLSAgICAgICAgRGlzcG9zZU1vdmllQ29udHJvbGxlcihtX21vdmllQ29u
dHJvbGxlcik7Ci0gICAgaWYgKG1fbW92aWUpCi0gICAgICAgIERpc3Bvc2VNb3ZpZShtX21vdmll
KTsKLSAgICBpZiAobV9jdXJyZW50VVJMKQotICAgICAgICBDRlJlbGVhc2UobV9jdXJyZW50VVJM
KTsKLX0KLQotdm9pZCBRVE1vdmllV2luOjp0YXNrVGltZXJGaXJlZCgpCi17Ci0gICAgLy8gVGhl
IGhhc2ggY29udGVudCBtaWdodCBjaGFuZ2UgZHVyaW5nIHRhc2soKQotICAgIFZlY3RvcjxRVE1v
dmllV2luUHJpdmF0ZSo+IHRhc2tzOwotICAgIGNvcHlUb1ZlY3RvcigqZ1Rhc2tMaXN0LCB0YXNr
cyk7Ci0gICAgc2l6ZV90IGNvdW50ID0gdGFza3Muc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQg
biA9IDA7IG4gPCBjb3VudDsgKytuKQotICAgICAgICB0YXNrc1tuXS0+dGFzaygpOwotCi0gICAg
dXBkYXRlVGFza1RpbWVyKCk7Ci19Ci0KLXZvaWQgUVRNb3ZpZVdpblByaXZhdGU6OnN0YXJ0VGFz
aygpIAotewotICAgIGlmIChtX3Rhc2tpbmcpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIWdU
YXNrTGlzdCkKLSAgICAgICAgZ1Rhc2tMaXN0ID0gbmV3IEhhc2hTZXQ8UVRNb3ZpZVdpblByaXZh
dGUqPjsKLSAgICBnVGFza0xpc3QtPmFkZCh0aGlzKTsKLSAgICBtX3Rhc2tpbmcgPSB0cnVlOwot
ICAgIHVwZGF0ZVRhc2tUaW1lcigpOwotfQotCi12b2lkIFFUTW92aWVXaW5Qcml2YXRlOjplbmRU
YXNrKCkgCi17Ci0gICAgaWYgKCFtX3Rhc2tpbmcpCi0gICAgICAgIHJldHVybjsKLSAgICBnVGFz
a0xpc3QtPnJlbW92ZSh0aGlzKTsKLSAgICBtX3Rhc2tpbmcgPSBmYWxzZTsKLSAgICB1cGRhdGVU
YXNrVGltZXIoKTsKIH0KIAogdm9pZCBRVE1vdmllV2luUHJpdmF0ZTo6Y2FjaGVNb3ZpZVNjYWxl
KCkKQEAgLTIzNSwxMTAgKzE1NywzOCBAQCB2b2lkIFFUTW92aWVXaW5Qcml2YXRlOjpjYWNoZU1v
dmllU2NhbGUoCiAgICAgaWYgKG5hdHVyYWxIZWlnaHQpCiAgICAgICAgIG1faGVpZ2h0U2NhbGVG
YWN0b3IgPSAoaW5pdGlhbFJlY3QuYm90dG9tIC0gaW5pdGlhbFJlY3QudG9wKSAvIG5hdHVyYWxI
ZWlnaHQ7CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIG1fc2NhbGVDYWNoZWQgPSB0cnVlOzsK
KyAgICBtX3NjYWxlQ2FjaGVkID0gdHJ1ZTsKICNlbmRpZgogfQogCi12b2lkIFFUTW92aWVXaW5Q
cml2YXRlOjp0YXNrKCkgCi17Ci0gICAgQVNTRVJUKG1fdGFza2luZyk7Ci0KLSAgICBpZiAoIW1f
bG9hZEVycm9yKSB7Ci0gICAgICAgIGlmIChtX21vdmllQ29udHJvbGxlcikKLSAgICAgICAgICAg
IE1DSWRsZShtX21vdmllQ29udHJvbGxlcik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIE1v
dmllc1Rhc2sobV9tb3ZpZSwgMCk7Ci0gICAgfQotCi0gICAgLy8gR2V0TW92aWVMb2FkU3RhdGUg
ZG9jdW1lbnRhdGlvbiBzYXlzIHRoYXQgeW91IHNob3VsZCBub3QgY2FsbCBpdCBtb3JlIG9mdGVu
IHRoYW4gZXZlcnkgcXVhcnRlciBvZiBhIHNlY29uZC4KLSAgICBpZiAoc3lzdGVtVGltZSgpID49
IG1fbGFzdExvYWRTdGF0ZUNoZWNrVGltZSArIDAuMjUgfHwgbV9sb2FkRXJyb3IpIHsgCi0gICAg
ICAgIC8vIElmIGxvYWQgZmFpbHMgUVQncyBsb2FkIHN0YXRlIGlzIFFUTW92aWVMb2FkU3RhdGVD
b21wbGV0ZS4KLSAgICAgICAgLy8gVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSBRVEtpdCBBUEkgYW5k
IHNlZW1zIHN0cmFuZ2UuCi0gICAgICAgIGxvbmcgbG9hZFN0YXRlID0gbV9sb2FkRXJyb3IgPyBR
VE1vdmllTG9hZFN0YXRlRXJyb3IgOiBHZXRNb3ZpZUxvYWRTdGF0ZShtX21vdmllKTsKLSAgICAg
ICAgaWYgKGxvYWRTdGF0ZSAhPSBtX2xvYWRTdGF0ZSkgewotCi0gICAgICAgICAgICAvLyB3ZSBv
bmx5IG5lZWQgdG8gZXJhc2UgdGhlIG1vdmllIGd3b3JsZCB3aGVuIHRoZSBsb2FkIHN0YXRlIGNo
YW5nZXMgdG8gbG9hZGVkIHdoaWxlIGl0Ci0gICAgICAgICAgICAvLyAgaXMgdmlzaWJsZSBhcyB0
aGUgZ3dvcmxkIGlzIGRlc3Ryb3llZC9jcmVhdGVkIHdoZW4gdmlzaWJpbGl0eSBjaGFuZ2VzCi0g
ICAgICAgICAgICBib29sIHNob3VsZFJlc3RvcmVQbGF5YmFja1N0YXRlID0gZmFsc2U7Ci0gICAg
ICAgICAgICBib29sIG1vdmllTmV3bHlQbGF5YWJsZSA9IGxvYWRTdGF0ZSA+PSBRVE1vdmllTG9h
ZFN0YXRlTG9hZGVkICYmIG1fbG9hZFN0YXRlIDwgUVRNb3ZpZUxvYWRTdGF0ZUxvYWRlZDsKLSAg
ICAgICAgICAgIG1fbG9hZFN0YXRlID0gbG9hZFN0YXRlOwotICAgICAgICAgICAgaWYgKG1vdmll
TmV3bHlQbGF5YWJsZSkgewotICAgICAgICAgICAgICAgIGNhY2hlTW92aWVTY2FsZSgpOwotICAg
ICAgICAgICAgICAgIHVwZGF0ZU1vdmllU2l6ZSgpOwotICAgICAgICAgICAgICAgIGlmIChtX3Zp
c2libGUpCi0gICAgICAgICAgICAgICAgICAgIGNsZWFyR1dvcmxkKCk7Ci0gICAgICAgICAgICAg
ICAgc2hvdWxkUmVzdG9yZVBsYXliYWNrU3RhdGUgPSB0cnVlOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBpZiAoIW1fbW92aWVDb250cm9sbGVyICYmIG1fbG9hZFN0YXRlID49IFFUTW92
aWVMb2FkU3RhdGVMb2FkZWQpCi0gICAgICAgICAgICAgICAgY3JlYXRlTW92aWVDb250cm9sbGVy
KCk7Ci0gICAgICAgICAgICBtX2NsaWVudC0+bW92aWVMb2FkU3RhdGVDaGFuZ2VkKG1fbW92aWVX
aW4pOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoc2hvdWxkUmVzdG9yZVBsYXliYWNr
U3RhdGUgJiYgbV90aW1lVG9SZXN0b3JlICE9IC0xLjBmKSB7Ci0gICAgICAgICAgICAgICAgbV9t
b3ZpZVdpbi0+c2V0Q3VycmVudFRpbWUobV90aW1lVG9SZXN0b3JlKTsKLSAgICAgICAgICAgICAg
ICBtX3RpbWVUb1Jlc3RvcmUgPSAtMS4wZjsKLSAgICAgICAgICAgICAgICBtX21vdmllV2luLT5z
ZXRSYXRlKG1fcmF0ZVRvUmVzdG9yZSk7Ci0gICAgICAgICAgICAgICAgbV9yYXRlVG9SZXN0b3Jl
ID0gLTEuMGY7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChtX21vdmllV2luLT5t
X2Rpc2FibGVkKSB7Ci0gICAgICAgICAgICAgICAgZW5kVGFzaygpOwotICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBtX2xhc3RMb2FkU3Rh
dGVDaGVja1RpbWUgPSBzeXN0ZW1UaW1lKCk7Ci0gICAgfQotCi0gICAgYm9vbCBlbmRlZCA9ICEh
SXNNb3ZpZURvbmUobV9tb3ZpZSk7Ci0gICAgaWYgKGVuZGVkICE9IG1fZW5kZWQpIHsKLSAgICAg
ICAgbV9lbmRlZCA9IGVuZGVkOwotICAgICAgICBpZiAobV9jbGllbnQgJiYgZW5kZWQpCi0gICAg
ICAgICAgICBtX2NsaWVudC0+bW92aWVFbmRlZChtX21vdmllV2luKTsKLSAgICB9Ci0KLSAgICBm
bG9hdCB0aW1lID0gbV9tb3ZpZVdpbi0+Y3VycmVudFRpbWUoKTsKLSAgICBpZiAodGltZSA8IG1f
bGFzdE1lZGlhVGltZSB8fCB0aW1lID49IG1fbGFzdE1lZGlhVGltZSArIGNOb25Db250aW51b3Vz
VGltZUNoYW5nZSB8fCBtX3NlZWtpbmcpIHsKLSAgICAgICAgbV9zZWVraW5nID0gZmFsc2U7Ci0g
ICAgICAgIGlmIChtX2NsaWVudCkKLSAgICAgICAgICAgIG1fY2xpZW50LT5tb3ZpZVRpbWVDaGFu
Z2VkKG1fbW92aWVXaW4pOwotICAgIH0KLSAgICBtX2xhc3RNZWRpYVRpbWUgPSB0aW1lOwotCi0g
ICAgaWYgKG1fbG9hZEVycm9yKQotICAgICAgICBlbmRUYXNrKCk7Ci19Ci0KLXZvaWQgUVRNb3Zp
ZVdpblByaXZhdGU6OmNyZWF0ZU1vdmllQ29udHJvbGxlcigpCitwYXNjYWwgT1NFcnIgbW92aWVE
cmF3aW5nQ29tcGxldGVQcm9jKE1vdmllIG1vdmllLCBsb25nIGRhdGEpCiB7Ci0gICAgUmVjdCBi
b3VuZHM7Ci0gICAgbG9uZyBmbGFnczsKLQotICAgIGlmICghbV9tb3ZpZSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKG1fbW92aWVDb250cm9sbGVyKQotICAgICAgICBEaXNwb3NlTW92aWVD
b250cm9sbGVyKG1fbW92aWVDb250cm9sbGVyKTsKLQotICAgIEdldE1vdmllQm94KG1fbW92aWUs
ICZib3VuZHMpOwotICAgIGZsYWdzID0gbWNUb3BMZWZ0TW92aWUgfCBtY05vdFZpc2libGU7Ci0g
ICAgbV9tb3ZpZUNvbnRyb2xsZXIgPSBOZXdNb3ZpZUNvbnRyb2xsZXIobV9tb3ZpZSwgJmJvdW5k
cywgZmxhZ3MpOwotICAgIGlmICghbV9tb3ZpZUNvbnRyb2xsZXIpCi0gICAgICAgIHJldHVybjsK
LQotICAgIE1DU2V0Q29udHJvbGxlclBvcnQobV9tb3ZpZUNvbnRyb2xsZXIsIG1fZ1dvcmxkKTsK
LSAgICBNQ1NldENvbnRyb2xsZXJBdHRhY2hlZChtX21vdmllQ29udHJvbGxlciwgZmFsc2UpOwor
ICAgIFVwcFBhcmFtIHBhcmFtOworICAgIHBhcmFtLmxvbmdWYWx1ZSA9IGRhdGE7CisgICAgUVRN
b3ZpZVdpblByaXZhdGUqIG1wID0gc3RhdGljX2Nhc3Q8UVRNb3ZpZVdpblByaXZhdGUqPihwYXJh
bS5wdHIpOworICAgIGlmIChtcCkKKyAgICAgICAgbXAtPmRyYXdpbmdDb21wbGV0ZSgpOworICAg
IHJldHVybiAwOwogfQogCiB2b2lkIFFUTW92aWVXaW5Qcml2YXRlOjpyZWdpc3RlckRyYXdpbmdD
YWxsYmFjaygpCiB7CisgICAgaWYgKCFnTW92aWVEcmF3aW5nQ29tcGxldGVVUFApCisgICAgICAg
IGdNb3ZpZURyYXdpbmdDb21wbGV0ZVVQUCA9IE5ld01vdmllRHJhd2luZ0NvbXBsZXRlVVBQKG1v
dmllRHJhd2luZ0NvbXBsZXRlUHJvYyk7CisKICAgICBVcHBQYXJhbSBwYXJhbTsKICAgICBwYXJh
bS5wdHIgPSB0aGlzOwogICAgIFNldE1vdmllRHJhd2luZ0NvbXBsZXRlUHJvYyhtX21vdmllLCBt
b3ZpZURyYXdpbmdDYWxsV2hlbkNoYW5nZWQsIGdNb3ZpZURyYXdpbmdDb21wbGV0ZVVQUCwgcGFy
YW0ubG9uZ1ZhbHVlKTsKIH0KIAordm9pZCBRVE1vdmllV2luUHJpdmF0ZTo6dW5yZWdpc3RlckRy
YXdpbmdDYWxsYmFjaygpCit7CisgICAgU2V0TW92aWVEcmF3aW5nQ29tcGxldGVQcm9jKG1fbW92
aWUsIG1vdmllRHJhd2luZ0NhbGxXaGVuQ2hhbmdlZCwgMCwgMCk7Cit9CisKIHZvaWQgUVRNb3Zp
ZVdpblByaXZhdGU6OmRyYXdpbmdDb21wbGV0ZSgpCiB7Ci0gICAgaWYgKCFtX2dXb3JsZCB8fCBt
X21vdmllV2luLT5tX2Rpc2FibGVkIHx8IG1fbG9hZFN0YXRlIDwgUVRNb3ZpZUxvYWRTdGF0ZUxv
YWRlZCkKKyAgICBpZiAoIW1fZ1dvcmxkIHx8IG1fbW92aWVXaW4tPm1fcHJpdmF0ZS0+bV9kaXNh
YmxlZCB8fCBtX2xvYWRTdGF0ZSA8IFFUTW92aWVMb2FkU3RhdGVMb2FkZWQpCiAgICAgICAgIHJl
dHVybjsKICAgICBtX2NsaWVudC0+bW92aWVOZXdJbWFnZUF2YWlsYWJsZShtX21vdmllV2luKTsK
IH0KQEAgLTM3NywxOSArMjI3LDE1IEBAIHZvaWQgUVRNb3ZpZVdpblByaXZhdGU6OmNyZWF0ZUdX
b3JsZCgpCiAgICAgaWYgKGVycikgCiAgICAgICAgIHJldHVybjsKICAgICBHZXRNb3ZpZUdXb3Js
ZChtX21vdmllLCAmbV9zYXZlZEdXb3JsZCwgMCk7Ci0gICAgaWYgKG1fbW92aWVDb250cm9sbGVy
KQotICAgICAgICBNQ1NldENvbnRyb2xsZXJQb3J0KG1fbW92aWVDb250cm9sbGVyLCBtX2dXb3Js
ZCk7CiAgICAgU2V0TW92aWVHV29ybGQobV9tb3ZpZSwgbV9nV29ybGQsIDApOwogICAgIGJvdW5k
cy5yaWdodCA9IG1fd2lkdGg7CiAgICAgYm91bmRzLmJvdHRvbSA9IG1faGVpZ2h0OwotICAgIGlm
IChtX21vdmllQ29udHJvbGxlcikKLSAgICAgICAgTUNTZXRDb250cm9sbGVyQm91bmRzUmVjdCht
X21vdmllQ29udHJvbGxlciwgJmJvdW5kcyk7CiAgICAgU2V0TW92aWVCb3gobV9tb3ZpZSwgJmJv
dW5kcyk7CiB9CiAKIHZvaWQgUVRNb3ZpZVdpblByaXZhdGU6OmNsZWFyR1dvcmxkKCkKIHsKLSAg
ICBpZiAoIW1fbW92aWV8fCFtX2dXb3JsZCkKKyAgICBpZiAoIW1fbW92aWUgfHwgIW1fZ1dvcmxk
KQogICAgICAgICByZXR1cm47CiAKICAgICBHcmFmUHRyIHNhdmVQb3J0OwpAQCAtNDM2LDggKzI4
Miw2IEBAIHZvaWQgUVRNb3ZpZVdpblByaXZhdGU6OnVwZGF0ZU1vdmllU2l6ZSgKICAgICBib3Vu
ZHMubGVmdCA9IDA7IAogICAgIGJvdW5kcy5yaWdodCA9IG1fd2lkdGg7CiAgICAgYm91bmRzLmJv
dHRvbSA9IG1faGVpZ2h0OwotICAgIGlmIChtX21vdmllQ29udHJvbGxlcikKLSAgICAgICAgTUNT
ZXRDb250cm9sbGVyQm91bmRzUmVjdChtX21vdmllQ29udHJvbGxlciwgJmJvdW5kcyk7CiAgICAg
U2V0TW92aWVCb3gobV9tb3ZpZSwgJmJvdW5kcyk7CiAgICAgdXBkYXRlR1dvcmxkKCk7CiB9CkBA
IC00NDYsOCArMjkwLDYgQEAgdm9pZCBRVE1vdmllV2luUHJpdmF0ZTo6dXBkYXRlTW92aWVTaXpl
KAogdm9pZCBRVE1vdmllV2luUHJpdmF0ZTo6ZGVsZXRlR1dvcmxkKCkKIHsKICAgICBBU1NFUlQo
bV9nV29ybGQpOwotICAgIGlmIChtX21vdmllQ29udHJvbGxlcikKLSAgICAgICAgTUNTZXRDb250
cm9sbGVyUG9ydChtX21vdmllQ29udHJvbGxlciwgbV9zYXZlZEdXb3JsZCk7CiAgICAgaWYgKG1f
bW92aWUpCiAgICAgICAgIFNldE1vdmllR1dvcmxkKG1fbW92aWUsIG1fc2F2ZWRHV29ybGQsIDAp
OwogICAgIG1fc2F2ZWRHV29ybGQgPSAwOwpAQCAtNDU3LDE2MCArMjk5LDUwIEBAIHZvaWQgUVRN
b3ZpZVdpblByaXZhdGU6OmRlbGV0ZUdXb3JsZCgpCiAgICAgbV9nV29ybGRIZWlnaHQgPSAwOwog
fQogCi0KLVFUTW92aWVXaW46OlFUTW92aWVXaW4oUVRNb3ZpZVdpbkNsaWVudCogY2xpZW50KQot
ICAgIDogbV9wcml2YXRlKG5ldyBRVE1vdmllV2luUHJpdmF0ZSgpKQotICAgICwgbV9kaXNhYmxl
ZChmYWxzZSkKLXsKLSAgICBtX3ByaXZhdGUtPm1fbW92aWVXaW4gPSB0aGlzOwotICAgIG1fcHJp
dmF0ZS0+bV9jbGllbnQgPSBjbGllbnQ7Ci0gICAgaW5pdGlhbGl6ZVF1aWNrVGltZSgpOwotfQot
Ci1RVE1vdmllV2luOjp+UVRNb3ZpZVdpbigpCi17Ci0gICAgZGVsZXRlIG1fcHJpdmF0ZTsKLX0K
LQotdm9pZCBRVE1vdmllV2luOjpwbGF5KCkKK3ZvaWQgUVRNb3ZpZVdpblByaXZhdGU6Om1vdmll
RW5kZWQoUVRNb3ZpZSopCiB7Ci0gICAgbV9wcml2YXRlLT5tX3RpbWVUb1Jlc3RvcmUgPSAtMS4w
ZjsKLQotICAgIGlmIChtX3ByaXZhdGUtPm1fbW92aWVDb250cm9sbGVyKQotICAgICAgICBNQ0Rv
QWN0aW9uKG1fcHJpdmF0ZS0+bV9tb3ZpZUNvbnRyb2xsZXIsIG1jQWN0aW9uUHJlcm9sbEFuZFBs
YXksICh2b2lkICopR2V0TW92aWVQcmVmZXJyZWRSYXRlKG1fcHJpdmF0ZS0+bV9tb3ZpZSkpOwot
ICAgIGVsc2UKLSAgICAgICAgU3RhcnRNb3ZpZShtX3ByaXZhdGUtPm1fbW92aWUpOwotICAgIG1f
cHJpdmF0ZS0+c3RhcnRUYXNrKCk7CisgICAgLy8gRG8gbm90aGluZwogfQogCi12b2lkIFFUTW92
aWVXaW46OnBhdXNlKCkKK3ZvaWQgUVRNb3ZpZVdpblByaXZhdGU6Om1vdmllTG9hZFN0YXRlQ2hh
bmdlZChRVE1vdmllKiBtb3ZpZSkKIHsKLSAgICBtX3ByaXZhdGUtPm1fdGltZVRvUmVzdG9yZSA9
IC0xLjBmOworICAgIGxvbmcgbG9hZFN0YXRlID0gR2V0TW92aWVMb2FkU3RhdGUobW92aWUtPmdl
dE1vdmllSGFuZGxlKCkpOworICAgIGlmIChsb2FkU3RhdGUgIT0gbV9sb2FkU3RhdGUpIHsKIAot
ICAgIGlmIChtX3ByaXZhdGUtPm1fbW92aWVDb250cm9sbGVyKQotICAgICAgICBNQ0RvQWN0aW9u
KG1fcHJpdmF0ZS0+bV9tb3ZpZUNvbnRyb2xsZXIsIG1jQWN0aW9uUGxheSwgMCk7Ci0gICAgZWxz
ZQotICAgICAgICBTdG9wTW92aWUobV9wcml2YXRlLT5tX21vdmllKTsKLSAgICB1cGRhdGVUYXNr
VGltZXIoKTsKLX0KLQotZmxvYXQgUVRNb3ZpZVdpbjo6cmF0ZSgpIGNvbnN0Ci17Ci0gICAgaWYg
KCFtX3ByaXZhdGUtPm1fbW92aWUpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBGaXhl
ZFRvRmxvYXQoR2V0TW92aWVSYXRlKG1fcHJpdmF0ZS0+bV9tb3ZpZSkpOwotfQorICAgICAgICAv
LyB3ZSBvbmx5IG5lZWQgdG8gZXJhc2UgdGhlIG1vdmllIGd3b3JsZCB3aGVuIHRoZSBsb2FkIHN0
YXRlIGNoYW5nZXMgdG8gbG9hZGVkIHdoaWxlIGl0CisgICAgICAgIC8vICBpcyB2aXNpYmxlIGFz
IHRoZSBnd29ybGQgaXMgZGVzdHJveWVkL2NyZWF0ZWQgd2hlbiB2aXNpYmlsaXR5IGNoYW5nZXMK
KyAgICAgICAgYm9vbCBtb3ZpZU5ld2x5UGxheWFibGUgPSBsb2FkU3RhdGUgPj0gUVRNb3ZpZUxv
YWRTdGF0ZUxvYWRlZCAmJiBtX2xvYWRTdGF0ZSA8IFFUTW92aWVMb2FkU3RhdGVMb2FkZWQ7Cisg
ICAgICAgIG1fbG9hZFN0YXRlID0gbG9hZFN0YXRlOwogCi12b2lkIFFUTW92aWVXaW46OnNldFJh
dGUoZmxvYXQgcmF0ZSkKLXsKLSAgICBpZiAoIW1fcHJpdmF0ZS0+bV9tb3ZpZSkKLSAgICAgICAg
cmV0dXJuOyAgICAKLSAgICBtX3ByaXZhdGUtPm1fdGltZVRvUmVzdG9yZSA9IC0xLjBmOwotICAg
IAotICAgIGlmIChtX3ByaXZhdGUtPm1fbW92aWVDb250cm9sbGVyKQotICAgICAgICBNQ0RvQWN0
aW9uKG1fcHJpdmF0ZS0+bV9tb3ZpZUNvbnRyb2xsZXIsIG1jQWN0aW9uUHJlcm9sbEFuZFBsYXks
ICh2b2lkICopRmxvYXRUb0ZpeGVkKHJhdGUpKTsKLSAgICBlbHNlCi0gICAgICAgIFNldE1vdmll
UmF0ZShtX3ByaXZhdGUtPm1fbW92aWUsIEZsb2F0VG9GaXhlZChyYXRlKSk7Ci0gICAgdXBkYXRl
VGFza1RpbWVyKCk7Ci19Ci0KLWZsb2F0IFFUTW92aWVXaW46OmR1cmF0aW9uKCkgY29uc3QKLXsK
LSAgICBpZiAoIW1fcHJpdmF0ZS0+bV9tb3ZpZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgVGlt
ZVZhbHVlIHZhbCA9IEdldE1vdmllRHVyYXRpb24obV9wcml2YXRlLT5tX21vdmllKTsKLSAgICBU
aW1lU2NhbGUgc2NhbGUgPSBHZXRNb3ZpZVRpbWVTY2FsZShtX3ByaXZhdGUtPm1fbW92aWUpOwot
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4odmFsKSAvIHNjYWxlOwotfQotCi1mbG9hdCBR
VE1vdmllV2luOjpjdXJyZW50VGltZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3ByaXZhdGUtPm1f
bW92aWUpCi0gICAgICAgIHJldHVybiAwOwotICAgIFRpbWVWYWx1ZSB2YWwgPSBHZXRNb3ZpZVRp
bWUobV9wcml2YXRlLT5tX21vdmllLCAwKTsKLSAgICBUaW1lU2NhbGUgc2NhbGUgPSBHZXRNb3Zp
ZVRpbWVTY2FsZShtX3ByaXZhdGUtPm1fbW92aWUpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxm
bG9hdD4odmFsKSAvIHNjYWxlOwotfQotCi12b2lkIFFUTW92aWVXaW46OnNldEN1cnJlbnRUaW1l
KGZsb2F0IHRpbWUpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3ByaXZhdGUtPm1fbW92aWUpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIG1fcHJpdmF0ZS0+bV90aW1lVG9SZXN0b3JlID0gLTEuMGY7Ci0g
ICAgCi0gICAgbV9wcml2YXRlLT5tX3NlZWtpbmcgPSB0cnVlOwotICAgIFRpbWVTY2FsZSBzY2Fs
ZSA9IEdldE1vdmllVGltZVNjYWxlKG1fcHJpdmF0ZS0+bV9tb3ZpZSk7Ci0gICAgaWYgKG1fcHJp
dmF0ZS0+bV9tb3ZpZUNvbnRyb2xsZXIpewotICAgICAgICBRVFJlc3RhcnRBdFRpbWVSZWNvcmQg
cmVzdGFydCA9IHsgdGltZSAqIHNjYWxlICwgMCB9OwotICAgICAgICBNQ0RvQWN0aW9uKG1fcHJp
dmF0ZS0+bV9tb3ZpZUNvbnRyb2xsZXIsIG1jQWN0aW9uUmVzdGFydEF0VGltZSwgKHZvaWQgKikm
cmVzdGFydCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIFNldE1vdmllVGltZVZhbHVlKG1fcHJpdmF0
ZS0+bV9tb3ZpZSwgVGltZVZhbHVlKHRpbWUgKiBzY2FsZSkpOwotICAgIHVwZGF0ZVRhc2tUaW1l
cigpOwotfQotCi12b2lkIFFUTW92aWVXaW46OnNldFZvbHVtZShmbG9hdCB2b2x1bWUpCi17Ci0g
ICAgaWYgKCFtX3ByaXZhdGUtPm1fbW92aWUpCi0gICAgICAgIHJldHVybjsKLSAgICBTZXRNb3Zp
ZVZvbHVtZShtX3ByaXZhdGUtPm1fbW92aWUsIHN0YXRpY19jYXN0PHNob3J0Pih2b2x1bWUgKiAy
NTYpKTsKLX0KLQotdm9pZCBRVE1vdmllV2luOjpzZXRQcmVzZXJ2ZXNQaXRjaChib29sIHByZXNl
cnZlc1BpdGNoKQotewotICAgIGlmICghbV9wcml2YXRlLT5tX21vdmllIHx8ICFtX3ByaXZhdGUt
Pm1fY3VycmVudFVSTCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgT1NFcnIgZXJyb3I7Ci0gICAg
Ym9vbCBwcm9wID0gZmFsc2U7Ci0KLSAgICBlcnJvciA9IFFUR2V0TW92aWVQcm9wZXJ0eShtX3By
aXZhdGUtPm1fbW92aWUsIGtRVFByb3BlcnR5Q2xhc3NfQXVkaW8sIGtRVEF1ZGlvUHJvcGVydHlJ
RF9SYXRlQ2hhbmdlc1ByZXNlcnZlUGl0Y2gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2l6ZW9mKGtRVEF1ZGlvUHJvcGVydHlJRF9SYXRlQ2hhbmdlc1ByZXNlcnZlUGl0Y2gpLCBz
dGF0aWNfY2FzdDxRVFByb3BlcnR5VmFsdWVQdHI+KCZwcm9wKSwgMCk7Ci0KLSAgICBpZiAoZXJy
b3IgfHwgcHJvcCA9PSBwcmVzZXJ2ZXNQaXRjaCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9w
cml2YXRlLT5tX3RpbWVUb1Jlc3RvcmUgPSBjdXJyZW50VGltZSgpOwotICAgIG1fcHJpdmF0ZS0+
bV9yYXRlVG9SZXN0b3JlID0gcmF0ZSgpOwotICAgIGxvYWQobV9wcml2YXRlLT5tX2N1cnJlbnRV
UkwsIHByZXNlcnZlc1BpdGNoKTsKLX0KLQotdW5zaWduZWQgUVRNb3ZpZVdpbjo6ZGF0YVNpemUo
KSBjb25zdAotewotICAgIGlmICghbV9wcml2YXRlLT5tX21vdmllKQotICAgICAgICByZXR1cm4g
MDsKLSAgICByZXR1cm4gR2V0TW92aWVEYXRhU2l6ZShtX3ByaXZhdGUtPm1fbW92aWUsIDAsIEdl
dE1vdmllRHVyYXRpb24obV9wcml2YXRlLT5tX21vdmllKSk7CisgICAgICAgIGlmIChtb3ZpZU5l
d2x5UGxheWFibGUpIHsKKyAgICAgICAgICAgIGNhY2hlTW92aWVTY2FsZSgpOworICAgICAgICAg
ICAgdXBkYXRlTW92aWVTaXplKCk7CisgICAgICAgICAgICBpZiAobV92aXNpYmxlKQorICAgICAg
ICAgICAgICAgIGNsZWFyR1dvcmxkKCk7CisgICAgICAgIH0KKyAgICB9CiB9CiAKLWZsb2F0IFFU
TW92aWVXaW46Om1heFRpbWVMb2FkZWQoKSBjb25zdAordm9pZCBRVE1vdmllV2luUHJpdmF0ZTo6
bW92aWVUaW1lQ2hhbmdlZChRVE1vdmllKikKIHsKLSAgICBpZiAoIW1fcHJpdmF0ZS0+bV9tb3Zp
ZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgVGltZVZhbHVlIHZhbDsKLSAgICBHZXRNYXhMb2Fk
ZWRUaW1lSW5Nb3ZpZShtX3ByaXZhdGUtPm1fbW92aWUsICZ2YWwpOwotICAgIFRpbWVTY2FsZSBz
Y2FsZSA9IEdldE1vdmllVGltZVNjYWxlKG1fcHJpdmF0ZS0+bV9tb3ZpZSk7Ci0gICAgcmV0dXJu
IHN0YXRpY19jYXN0PGZsb2F0Pih2YWwpIC8gc2NhbGU7CisgICAgLy8gRG8gbm90aGluZwogfQog
Ci1sb25nIFFUTW92aWVXaW46OmxvYWRTdGF0ZSgpIGNvbnN0CitRVE1vdmllV2luOjpRVE1vdmll
V2luKFFUTW92aWVXaW5DbGllbnQqIGNsaWVudCkKKyAgICA6IG1fcHJpdmF0ZShuZXcgUVRNb3Zp
ZVdpblByaXZhdGUodGhpcykpCiB7Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+bV9sb2FkU3RhdGU7
CisgICAgbV9wcml2YXRlLT5tX2NsaWVudCA9IGNsaWVudDsKIH0KIAotdm9pZCBRVE1vdmllV2lu
OjpnZXROYXR1cmFsU2l6ZShpbnQmIHdpZHRoLCBpbnQmIGhlaWdodCkKK1FUTW92aWVXaW46On5R
VE1vdmllV2luKCkKIHsKLSAgICBSZWN0IHJlY3QgPSB7IDAsIH07Ci0KLSAgICBpZiAobV9wcml2
YXRlLT5tX21vdmllKQotICAgICAgICBHZXRNb3ZpZU5hdHVyYWxCb3VuZHNSZWN0KG1fcHJpdmF0
ZS0+bV9tb3ZpZSwgJnJlY3QpOwotICAgIHdpZHRoID0gKHJlY3QucmlnaHQgLSByZWN0LmxlZnQp
ICogbV9wcml2YXRlLT5tX3dpZHRoU2NhbGVGYWN0b3I7Ci0gICAgaGVpZ2h0ID0gKHJlY3QuYm90
dG9tIC0gcmVjdC50b3ApICogbV9wcml2YXRlLT5tX2hlaWdodFNjYWxlRmFjdG9yOworICAgIGRl
bGV0ZSBtX3ByaXZhdGU7CiB9CiAKIHZvaWQgUVRNb3ZpZVdpbjo6c2V0U2l6ZShpbnQgd2lkdGgs
IGludCBoZWlnaHQpCiB7CiAgICAgbV9wcml2YXRlLT5zZXRTaXplKHdpZHRoLCBoZWlnaHQpOwot
ICAgIHVwZGF0ZVRhc2tUaW1lcigwKTsKKyAgICBRVE1vdmllVGFzazo6c2hhcmVkVGFzaygpLT51
cGRhdGVUYXNrVGltZXIoKTsKIH0KIAogdm9pZCBRVE1vdmllV2luOjpzZXRWaXNpYmxlKGJvb2wg
YikKQEAgLTY1Niw0NDYgKzM4OCwxNCBAQCB2b2lkIFFUTW92aWVXaW46OnBhaW50KEhEQyBoZGMs
IGludCB4LCBpCiAgICAgICAgICAwLCAwLCBtX3ByaXZhdGUtPm1fd2lkdGgsIG1fcHJpdmF0ZS0+
bV9oZWlnaHQsIGJsZW5kRnVuY3Rpb24pOwogfQogCi12b2lkIFFUTW92aWVXaW46OmxvYWQoY29u
c3QgVUNoYXIqIHVybCwgaW50IGxlbiwgYm9vbCBwcmVzZXJ2ZXNQaXRjaCkKLXsKLSAgICBDRlN0
cmluZ1JlZiB1cmxTdHJpbmdSZWYgPSBDRlN0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKGtDRkFs
bG9jYXRvckRlZmF1bHQsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVW5pQ2hhcio+KHVybCksIGxl
bik7Ci0gICAgQ0ZVUkxSZWYgY2ZVUkwgPSBDRlVSTENyZWF0ZVdpdGhTdHJpbmcoa0NGQWxsb2Nh
dG9yRGVmYXVsdCwgdXJsU3RyaW5nUmVmLCAwKTsKLQotICAgIGxvYWQoY2ZVUkwsIHByZXNlcnZl
c1BpdGNoKTsKLQotICAgIENGUmVsZWFzZShjZlVSTCk7Ci0gICAgQ0ZSZWxlYXNlKHVybFN0cmlu
Z1JlZik7Ci19Ci0KLXZvaWQgUVRNb3ZpZVdpbjo6bG9hZChDRlVSTFJlZiB1cmwsIGJvb2wgcHJl
c2VydmVzUGl0Y2gpCi17Ci0gICAgaWYgKCF1cmwpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
IChtX3ByaXZhdGUtPm1fbW92aWUpIHsKLSAgICAgICAgbV9wcml2YXRlLT5lbmRUYXNrKCk7Ci0g
ICAgICAgIGlmIChtX3ByaXZhdGUtPm1fZ1dvcmxkKQotICAgICAgICAgICAgbV9wcml2YXRlLT5k
ZWxldGVHV29ybGQoKTsKLSAgICAgICAgaWYgKG1fcHJpdmF0ZS0+bV9tb3ZpZUNvbnRyb2xsZXIp
Ci0gICAgICAgICAgICBEaXNwb3NlTW92aWVDb250cm9sbGVyKG1fcHJpdmF0ZS0+bV9tb3ZpZUNv
bnRyb2xsZXIpOwotICAgICAgICBtX3ByaXZhdGUtPm1fbW92aWVDb250cm9sbGVyID0gMDsKLSAg
ICAgICAgRGlzcG9zZU1vdmllKG1fcHJpdmF0ZS0+bV9tb3ZpZSk7Ci0gICAgICAgIG1fcHJpdmF0
ZS0+bV9tb3ZpZSA9IDA7Ci0gICAgICAgIG1fcHJpdmF0ZS0+bV9sb2FkU3RhdGUgPSAwOwotICAg
IH0gIAotCi0gICAgLy8gRGVmaW5lIGEgcHJvcGVydHkgYXJyYXkgZm9yIE5ld01vdmllRnJvbVBy
b3BlcnRpZXMuIDggc2hvdWxkIGJlIGVub3VnaCBmb3Igb3VyIG5lZWRzLiAKLSAgICBRVE5ld01v
dmllUHJvcGVydHlFbGVtZW50IG1vdmllUHJvcHNbOF07IAotICAgIEl0ZW1Db3VudCBtb3ZpZVBy
b3BDb3VudCA9IDA7IAotCi0gICAgYm9vbCBib29sVHJ1ZSA9IHRydWU7Ci0gICAgCi0gICAgLy8g
RGlzYWJsZSBzdHJlYW1pbmcgc3VwcG9ydCBmb3Igbm93LiAKLSAgICBDRlN0cmluZ1JlZiBzY2hl
bWUgPSBDRlVSTENvcHlTY2hlbWUodXJsKTsKLSAgICBib29sIGlzUlRTUCA9IENGU3RyaW5nSGFz
UHJlZml4KHNjaGVtZSwgQ0ZTVFIoInJ0c3A6IikpOwotICAgIENGUmVsZWFzZShzY2hlbWUpOwot
Ci0gICAgaWYgKGlzUlRTUCkgewotICAgICAgICBtX3ByaXZhdGUtPm1fbG9hZEVycm9yID0gbm9N
b3ZpZUZvdW5kOwotICAgICAgICBnb3RvIGVuZDsKLSAgICB9Ci0KLSAgICBpZiAobV9wcml2YXRl
LT5tX2N1cnJlbnRVUkwpIHsKLSAgICAgICAgaWYgKG1fcHJpdmF0ZS0+bV9jdXJyZW50VVJMICE9
IHVybCkgewotICAgICAgICAgICAgQ0ZSZWxlYXNlKG1fcHJpdmF0ZS0+bV9jdXJyZW50VVJMKTsK
LSAgICAgICAgICAgIG1fcHJpdmF0ZS0+bV9jdXJyZW50VVJMID0gdXJsOwotICAgICAgICAgICAg
Q0ZSZXRhaW4odXJsKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fcHJpdmF0
ZS0+bV9jdXJyZW50VVJMID0gdXJsOwotICAgICAgICBDRlJldGFpbih1cmwpOwotICAgIH0KLQot
ICAgIC8vIEFkZCB0aGUgbW92aWUgZGF0YSBsb2NhdGlvbiB0byB0aGUgcHJvcGVydHkgYXJyYXkg
Ci0gICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcENsYXNzID0ga1FUUHJvcGVydHlD
bGFzc19EYXRhTG9jYXRpb247IAotICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BJ
RCA9IGtRVERhdGFMb2NhdGlvblByb3BlcnR5SURfQ0ZVUkw7IAotICAgIG1vdmllUHJvcHNbbW92
aWVQcm9wQ291bnRdLnByb3BWYWx1ZVNpemUgPSBzaXplb2YobV9wcml2YXRlLT5tX2N1cnJlbnRV
UkwpOyAKLSAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wVmFsdWVBZGRyZXNzID0g
JihtX3ByaXZhdGUtPm1fY3VycmVudFVSTCk7IAotICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291
bnRdLnByb3BTdGF0dXMgPSAwOyAKLSAgICBtb3ZpZVByb3BDb3VudCsrOyAKLQotICAgIG1vdmll
UHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BDbGFzcyA9IGtRVFByb3BlcnR5Q2xhc3NfTW92aWVJ
bnN0YW50aWF0aW9uOyAKLSAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wSUQgPSBr
UVRNb3ZpZUluc3RhbnRpYXRpb25Qcm9wZXJ0eUlEX0RvbnRBc2tVbnJlc29sdmVkRGF0YVJlZnM7
IAotICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BWYWx1ZVNpemUgPSBzaXplb2Yo
Ym9vbFRydWUpOyAKLSAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wVmFsdWVBZGRy
ZXNzID0gJmJvb2xUcnVlOyAKLSAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wU3Rh
dHVzID0gMDsgCi0gICAgbW92aWVQcm9wQ291bnQrKzsgCi0KLSAgICBtb3ZpZVByb3BzW21vdmll
UHJvcENvdW50XS5wcm9wQ2xhc3MgPSBrUVRQcm9wZXJ0eUNsYXNzX01vdmllSW5zdGFudGlhdGlv
bjsgCi0gICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcElEID0ga1FUTW92aWVJbnN0
YW50aWF0aW9uUHJvcGVydHlJRF9Bc3luY09LOyAKLSAgICBtb3ZpZVByb3BzW21vdmllUHJvcENv
dW50XS5wcm9wVmFsdWVTaXplID0gc2l6ZW9mKGJvb2xUcnVlKTsgCi0gICAgbW92aWVQcm9wc1tt
b3ZpZVByb3BDb3VudF0ucHJvcFZhbHVlQWRkcmVzcyA9ICZib29sVHJ1ZTsgCi0gICAgbW92aWVQ
cm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcFN0YXR1cyA9IDA7IAotICAgIG1vdmllUHJvcENvdW50
Kys7IAotCi0gICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcENsYXNzID0ga1FUUHJv
cGVydHlDbGFzc19OZXdNb3ZpZVByb3BlcnR5OyAKLSAgICBtb3ZpZVByb3BzW21vdmllUHJvcENv
dW50XS5wcm9wSUQgPSBrUVROZXdNb3ZpZVByb3BlcnR5SURfQWN0aXZlOyAKLSAgICBtb3ZpZVBy
b3BzW21vdmllUHJvcENvdW50XS5wcm9wVmFsdWVTaXplID0gc2l6ZW9mKGJvb2xUcnVlKTsgCi0g
ICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcFZhbHVlQWRkcmVzcyA9ICZib29sVHJ1
ZTsgCi0gICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcFN0YXR1cyA9IDA7IAotICAg
IG1vdmllUHJvcENvdW50Kys7IAotCi0gICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJv
cENsYXNzID0ga1FUUHJvcGVydHlDbGFzc19OZXdNb3ZpZVByb3BlcnR5OyAKLSAgICBtb3ZpZVBy
b3BzW21vdmllUHJvcENvdW50XS5wcm9wSUQgPSBrUVROZXdNb3ZpZVByb3BlcnR5SURfRG9udElu
dGVyYWN0V2l0aFVzZXI7IAotICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BWYWx1
ZVNpemUgPSBzaXplb2YoYm9vbFRydWUpOyAKLSAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50
XS5wcm9wVmFsdWVBZGRyZXNzID0gJmJvb2xUcnVlOyAKLSAgICBtb3ZpZVByb3BzW21vdmllUHJv
cENvdW50XS5wcm9wU3RhdHVzID0gMDsgCi0gICAgbW92aWVQcm9wQ291bnQrKzsgCi0KLSAgICBt
b3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wQ2xhc3MgPSBrUVRQcm9wZXJ0eUNsYXNzX01v
dmllSW5zdGFudGlhdGlvbjsKLSAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wSUQg
PSAnIXVybCc7Ci0gICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcFZhbHVlU2l6ZSA9
IHNpemVvZihib29sVHJ1ZSk7IAotICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BW
YWx1ZUFkZHJlc3MgPSAmYm9vbFRydWU7IAotICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRd
LnByb3BTdGF0dXMgPSAwOyAKLSAgICBtb3ZpZVByb3BDb3VudCsrOyAKLQotICAgIG1vdmllUHJv
cHNbbW92aWVQcm9wQ291bnRdLnByb3BDbGFzcyA9IGtRVFByb3BlcnR5Q2xhc3NfTW92aWVJbnN0
YW50aWF0aW9uOyAKLSAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wSUQgPSAnc2l0
ZSc7Ci0gICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcFZhbHVlU2l6ZSA9IHNpemVv
Zihib29sVHJ1ZSk7IAotICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BWYWx1ZUFk
ZHJlc3MgPSAmYm9vbFRydWU7IAotICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BT
dGF0dXMgPSAwOyAKLSAgICBtb3ZpZVByb3BDb3VudCsrOwotCi0gICAgbW92aWVQcm9wc1ttb3Zp
ZVByb3BDb3VudF0ucHJvcENsYXNzID0ga1FUUHJvcGVydHlDbGFzc19BdWRpbzsgCi0gICAgbW92
aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcElEID0ga1FUQXVkaW9Qcm9wZXJ0eUlEX1JhdGVD
aGFuZ2VzUHJlc2VydmVQaXRjaDsKLSAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9w
VmFsdWVTaXplID0gc2l6ZW9mKHByZXNlcnZlc1BpdGNoKTsgCi0gICAgbW92aWVQcm9wc1ttb3Zp
ZVByb3BDb3VudF0ucHJvcFZhbHVlQWRkcmVzcyA9ICZwcmVzZXJ2ZXNQaXRjaDsgCi0gICAgbW92
aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcFN0YXR1cyA9IDA7IAotICAgIG1vdmllUHJvcENv
dW50Kys7IAotCi0gICAgQVNTRVJUKG1vdmllUHJvcENvdW50IDw9IHNpemVvZihtb3ZpZVByb3Bz
KS9zaXplb2YobW92aWVQcm9wc1swXSkpOwotICAgIG1fcHJpdmF0ZS0+bV9sb2FkRXJyb3IgPSBO
ZXdNb3ZpZUZyb21Qcm9wZXJ0aWVzKG1vdmllUHJvcENvdW50LCBtb3ZpZVByb3BzLCAwLCAwLCAm
bV9wcml2YXRlLT5tX21vdmllKTsKLQotZW5kOgotICAgIG1fcHJpdmF0ZS0+c3RhcnRUYXNrKCk7
Ci0gICAgLy8gZ2V0IHRoZSBsb2FkIGZhaWwgY2FsbGJhY2sgcXVpY2tseSAKLSAgICBpZiAobV9w
cml2YXRlLT5tX2xvYWRFcnJvcikKLSAgICAgICAgdXBkYXRlVGFza1RpbWVyKDApOwotICAgIGVs
c2UgewotICAgICAgICBPU1R5cGUgbW9kZSA9IGtRVEFwZXJ0dXJlTW9kZV9DbGVhbkFwZXJ0dXJl
OwotCi0gICAgICAgIC8vIFNldCB0aGUgYXBlcnR1cmUgbW9kZSBwcm9wZXJ0eSBvbiBhIG1vdmll
IHRvIHNpZ25hbCB0aGF0IHdlIHdhbnQgYXNwZWN0IHJhdGlvCi0gICAgICAgIC8vIGFuZCBjbGVh
biBhcGVydHVyZSBkaW1lbnNpb25zLiBEb24ndCB3b3JyeSBhYm91dCBlcnJvcnMsIHdlIGNhbid0
IGRvIGFueXRoaW5nIGlmCi0gICAgICAgIC8vIHRoZSBpbnN0YWxsZWQgdmVyc2lvbiBvZiBRVCBk
b2Vzbid0IHN1cHBvcnQgaXQgYW5kIGl0IGlzbid0IHNlcmlvdXMgZW5vdWdoIHRvIAotICAgICAg
ICAvLyB3YXJyYW50IGZhaWxpbmcuCi0gICAgICAgIFFUU2V0TW92aWVQcm9wZXJ0eShtX3ByaXZh
dGUtPm1fbW92aWUsIGtRVFByb3BlcnR5Q2xhc3NfVmlzdWFsLCBrUVRWaXN1YWxQcm9wZXJ0eUlE
X0FwZXJ0dXJlTW9kZSwgc2l6ZW9mKG1vZGUpLCAmbW9kZSk7Ci0gICAgICAgIG1fcHJpdmF0ZS0+
cmVnaXN0ZXJEcmF3aW5nQ2FsbGJhY2soKTsKLSAgICB9Ci19Ci0KLXZvaWQgUVRNb3ZpZVdpbjo6
ZGlzYWJsZVVuc3VwcG9ydGVkVHJhY2tzKHVuc2lnbmVkJiBlbmFibGVkVHJhY2tDb3VudCwgdW5z
aWduZWQmIHRvdGFsVHJhY2tDb3VudCkKLXsKLSAgICBpZiAoIW1fcHJpdmF0ZS0+bV9tb3ZpZSkg
ewotICAgICAgICB0b3RhbFRyYWNrQ291bnQgPSAwOwotICAgICAgICBlbmFibGVkVHJhY2tDb3Vu
dCA9IDA7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzdGF0aWMgSGFzaFNldDxPU1R5
cGU+KiBhbGxvd2VkVHJhY2tUeXBlcyA9IDA7Ci0gICAgaWYgKCFhbGxvd2VkVHJhY2tUeXBlcykg
ewotICAgICAgICBhbGxvd2VkVHJhY2tUeXBlcyA9IG5ldyBIYXNoU2V0PE9TVHlwZT47Ci0gICAg
ICAgIGFsbG93ZWRUcmFja1R5cGVzLT5hZGQoVmlkZW9NZWRpYVR5cGUpOwotICAgICAgICBhbGxv
d2VkVHJhY2tUeXBlcy0+YWRkKFNvdW5kTWVkaWFUeXBlKTsKLSAgICAgICAgYWxsb3dlZFRyYWNr
VHlwZXMtPmFkZChUZXh0TWVkaWFUeXBlKTsKLSAgICAgICAgYWxsb3dlZFRyYWNrVHlwZXMtPmFk
ZChCYXNlTWVkaWFUeXBlKTsKLSAgICAgICAgYWxsb3dlZFRyYWNrVHlwZXMtPmFkZChjbG9zZWRD
YXB0aW9uVHJhY2tUeXBlKTsKLSAgICAgICAgYWxsb3dlZFRyYWNrVHlwZXMtPmFkZChzdWJUaXRs
ZVRyYWNrVHlwZSk7Ci0gICAgICAgIGFsbG93ZWRUcmFja1R5cGVzLT5hZGQobXBlZzRPYmplY3RE
ZXNjcmlwdGlvblRyYWNrVHlwZSk7Ci0gICAgICAgIGFsbG93ZWRUcmFja1R5cGVzLT5hZGQobXBl
ZzRTY2VuZURlc2NyaXB0aW9uVHJhY2tUeXBlKTsKLSAgICAgICAgYWxsb3dlZFRyYWNrVHlwZXMt
PmFkZChUaW1lQ29kZU1lZGlhVHlwZSk7Ci0gICAgICAgIGFsbG93ZWRUcmFja1R5cGVzLT5hZGQo
VGltZUNvZGU2NE1lZGlhVHlwZSk7Ci0gICAgfQotCi0gICAgbG9uZyB0cmFja0NvdW50ID0gR2V0
TW92aWVUcmFja0NvdW50KG1fcHJpdmF0ZS0+bV9tb3ZpZSk7Ci0gICAgZW5hYmxlZFRyYWNrQ291
bnQgPSB0cmFja0NvdW50OwotICAgIHRvdGFsVHJhY2tDb3VudCA9IHRyYWNrQ291bnQ7Ci0KLSAg
ICAvLyBUcmFjayBpbmRleGVzIGFyZSAxLWJhc2VkLiB5dWNrLiBUaGVzZSB0aGluZ3MgbXVzdCBk
ZXNjZW5kIGZyb20gb2xkLQotICAgIC8vIHNjaG9vbCBtYWMgcmVzb3VyY2VzIG9yIHNvbWV0aGlu
Zy4KLSAgICBmb3IgKGxvbmcgdHJhY2tJbmRleCA9IDE7IHRyYWNrSW5kZXggPD0gdHJhY2tDb3Vu
dDsgdHJhY2tJbmRleCsrKSB7Ci0gICAgICAgIC8vIEdyYWIgdGhlIHRyYWNrIGF0IHRoZSBjdXJy
ZW50IGluZGV4LiBJZiB0aGVyZSBpc24ndCBvbmUgdGhlcmUsIHRoZW4KLSAgICAgICAgLy8gd2Ug
Y2FuIG1vdmUgb250byB0aGUgbmV4dCBvbmUuCi0gICAgICAgIFRyYWNrIGN1cnJlbnRUcmFjayA9
IEdldE1vdmllSW5kVHJhY2sobV9wcml2YXRlLT5tX21vdmllLCB0cmFja0luZGV4KTsKLSAgICAg
ICAgaWYgKCFjdXJyZW50VHJhY2spCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgCi0g
ICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGUgdHJhY2sgaXMgZGlzYWJsZWQgYWxyZWFkeSwg
d2Ugc2hvdWxkIG1vdmUgYWxvbmcuCi0gICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gcmUtZGlz
YWJsZSBpdC4KLSAgICAgICAgaWYgKCFHZXRUcmFja0VuYWJsZWQoY3VycmVudFRyYWNrKSkKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIC8vIEdyYWIgdGhlIHRyYWNrJ3MgbWVkaWEu
IFdlJ3JlIGdvaW5nIHRvIGNoZWNrIHRvIHNlZSBpZiB3ZSBuZWVkIHRvCi0gICAgICAgIC8vIGRp
c2FibGUgdGhlIHRyYWNrcy4gVGhleSBjb3VsZCBiZSB1bnN1cHBvcnRlZC4KLSAgICAgICAgTWVk
aWEgdHJhY2tNZWRpYSA9IEdldFRyYWNrTWVkaWEoY3VycmVudFRyYWNrKTsKLSAgICAgICAgaWYg
KCF0cmFja01lZGlhKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAotICAgICAgICAv
LyBHcmFiIHRoZSBtZWRpYSB0eXBlIGZvciB0aGlzIHRyYWNrLiBNYWtlIHN1cmUgdGhhdCB3ZSBk
b24ndAotICAgICAgICAvLyBnZXQgYW4gZXJyb3IgaW4gZG9pbmcgc28uIElmIHdlIGRvLCB0aGVu
IHNvbWV0aGluZyByZWFsbHkgZnVua3kgaXMKLSAgICAgICAgLy8gd3JvbmcuCi0gICAgICAgIE9T
VHlwZSBtZWRpYVR5cGU7Ci0gICAgICAgIEdldE1lZGlhSGFuZGxlckRlc2NyaXB0aW9uKHRyYWNr
TWVkaWEsICZtZWRpYVR5cGUsIG5pbCwgbmlsKTsKLSAgICAgICAgT1NFcnIgbWVkaWFFcnIgPSBH
ZXRNb3ZpZXNFcnJvcigpOyAgICAKLSAgICAgICAgaWYgKG1lZGlhRXJyICE9IG5vRXJyKQotICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAotICAgICAgICBpZiAoIWFsbG93ZWRUcmFja1R5
cGVzLT5jb250YWlucyhtZWRpYVR5cGUpKSB7Ci0KLSAgICAgICAgICAgIC8vIERpZmZlcmVudCBt
cGVnIHZhcmlhbnRzIGltcG9ydCBhcyBkaWZmZXJlbnQgdHJhY2sgdHlwZXMgc28gY2hlY2sgZm9y
IHRoZSAibXBlZyAKLSAgICAgICAgICAgIC8vIGNoYXJhY3RlcmlzdGljIiBpbnN0ZWFkIG9mIGhh
cmQgY29kaW5nIHRoZSAoY3VycmVudCkgbGlzdCBvZiBtcGVnIG1lZGlhIHR5cGVzLgotICAgICAg
ICAgICAgaWYgKEdldE1vdmllSW5kVHJhY2tUeXBlKG1fcHJpdmF0ZS0+bV9tb3ZpZSwgMSwgJ21w
ZWcnLCBtb3ZpZVRyYWNrQ2hhcmFjdGVyaXN0aWMgfCBtb3ZpZVRyYWNrRW5hYmxlZE9ubHkpKQot
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBTZXRUcmFja0VuYWJsZWQo
Y3VycmVudFRyYWNrLCBmYWxzZSk7Ci0gICAgICAgICAgICAtLWVuYWJsZWRUcmFja0NvdW50Owot
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBHcmFiIHRoZSB0cmFjayByZWZlcmVuY2Ug
Y291bnQgZm9yIGNoYXB0ZXJzLiBUaGlzIHdpbGwgdGVsbCB1cyBpZiBpdAotICAgICAgICAvLyBo
YXMgY2hhcHRlciB0cmFja3MgaW4gaXQuIElmIHRoZXJlIGFyZW4ndCBhbnkgcmVmZXJlbmNlcywg
dGhlbiB3ZQotICAgICAgICAvLyBjYW4gbW92ZSBvbiB0aGUgbmV4dCB0cmFjay4KLSAgICAgICAg
bG9uZyByZWZlcmVuY2VDb3VudCA9IEdldFRyYWNrUmVmZXJlbmNlQ291bnQoY3VycmVudFRyYWNr
LCBrVHJhY2tSZWZlcmVuY2VDaGFwdGVyTGlzdCk7Ci0gICAgICAgIGlmIChyZWZlcmVuY2VDb3Vu
dCA8PSAwKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAotICAgICAgICBsb25nIHJl
ZmVyZW5jZUluZGV4ID0gMDsgICAgICAgIAotICAgICAgICB3aGlsZSAoMSkgewotICAgICAgICAg
ICAgLy8gSWYgd2UgZ2V0IG5vdGhpbmcgaGVyZSwgd2UndmUgb3ZlcnN0ZXBwZWQgb3VyIGJvdW5k
cyBhbmQgY2FuIHN0b3AKLSAgICAgICAgICAgIC8vIGxvb2tpbmcuIENoYXB0ZXIgaW5kaWNlcyBo
ZXJlIGFyZSAxLWJhc2VkIGFzIHdlbGwgLSBoZW5jZSwgdGhlCi0gICAgICAgICAgICAvLyBwcmUt
aW5jcmVtZW50LgotICAgICAgICAgICAgcmVmZXJlbmNlSW5kZXgrKzsKLSAgICAgICAgICAgIFRy
YWNrIGNoYXB0ZXJUcmFjayA9IEdldFRyYWNrUmVmZXJlbmNlKGN1cnJlbnRUcmFjaywga1RyYWNr
UmVmZXJlbmNlQ2hhcHRlckxpc3QsIHJlZmVyZW5jZUluZGV4KTsKLSAgICAgICAgICAgIGlmICgh
Y2hhcHRlclRyYWNrKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICAvLyBUcnkgdG8gZ3JhYiB0aGUgbWVkaWEgZm9yIHRoZSB0cmFjay4KLSAgICAgICAg
ICAgIE1lZGlhIGNoYXB0ZXJNZWRpYSA9IEdldFRyYWNrTWVkaWEoY2hhcHRlclRyYWNrKTsKLSAg
ICAgICAgICAgIGlmICghY2hhcHRlck1lZGlhKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAKLSAgICAgICAgICAgIC8vIEdyYWIgdGhlIG1lZGlhIHR5cGUgZm9yIHRoaXMgdHJh
Y2suIE1ha2Ugc3VyZSB0aGF0IHdlIGRvbid0Ci0gICAgICAgICAgICAvLyBnZXQgYW4gZXJyb3Ig
aW4gZG9pbmcgc28uIElmIHdlIGRvLCB0aGVuIHNvbWV0aGluZyByZWFsbHkKLSAgICAgICAgICAg
IC8vIGZ1bmt5IGlzIHdyb25nLgotICAgICAgICAgICAgT1NUeXBlIG1lZGlhVHlwZTsKLSAgICAg
ICAgICAgIEdldE1lZGlhSGFuZGxlckRlc2NyaXB0aW9uKGNoYXB0ZXJNZWRpYSwgJm1lZGlhVHlw
ZSwgbmlsLCBuaWwpOwotICAgICAgICAgICAgT1NFcnIgbWVkaWFFcnIgPSBHZXRNb3ZpZXNFcnJv
cigpOwotICAgICAgICAgICAgaWYgKG1lZGlhRXJyICE9IG5vRXJyKQotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYg
dGhlIHRyYWNrIGlzIGEgdmlkZW8gdHJhY2suIFdlIGRvbid0IGNhcmUgYWJvdXQKLSAgICAgICAg
ICAgIC8vIG90aGVyIG5vbi12aWRlbyB0cmFja3MuCi0gICAgICAgICAgICBpZiAobWVkaWFUeXBl
ICE9IFZpZGVvTWVkaWFUeXBlKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIHRyYWNrIGlzIGFscmVhZHkg
ZGlzYWJsZWQuIElmIGl0IGlzLCB3ZQotICAgICAgICAgICAgLy8gc2hvdWxkIG1vdmUgYWxvbmcu
Ci0gICAgICAgICAgICBpZiAoIUdldFRyYWNrRW5hYmxlZChjaGFwdGVyVHJhY2spKQotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBEaXNhYmxl
ZCB0aGUgZXZpbCwgZXZpbCB0cmFjay4KLSAgICAgICAgICAgIFNldFRyYWNrRW5hYmxlZChjaGFw
dGVyVHJhY2ssIGZhbHNlKTsKLSAgICAgICAgICAgIC0tZW5hYmxlZFRyYWNrQ291bnQ7Ci0gICAg
ICAgIH0KLSAgICB9Ci19Ci0KIHZvaWQgUVRNb3ZpZVdpbjo6c2V0RGlzYWJsZWQoYm9vbCBiKQog
ewotICAgIG1fZGlzYWJsZWQgPSBiOworICAgIG1fcHJpdmF0ZS0+bV9kaXNhYmxlZCA9IGI7CiB9
CiAKLQotYm9vbCBRVE1vdmllV2luOjpoYXNWaWRlbygpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3By
aXZhdGUtPm1fbW92aWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gKEdldE1v
dmllSW5kVHJhY2tUeXBlKG1fcHJpdmF0ZS0+bV9tb3ZpZSwgMSwgVmlzdWFsTWVkaWFDaGFyYWN0
ZXJpc3RpYywgbW92aWVUcmFja0NoYXJhY3RlcmlzdGljIHwgbW92aWVUcmFja0VuYWJsZWRPbmx5
KSk7Ci19Ci0KLWJvb2wgUVRNb3ZpZVdpbjo6aGFzQXVkaW8oKSBjb25zdAorYm9vbCBRVE1vdmll
V2luOjppc0Rpc2FibGVkKCkgY29uc3QKIHsKLSAgICBpZiAoIW1fcHJpdmF0ZS0+bV9tb3ZpZSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiAoR2V0TW92aWVJbmRUcmFja1R5cGUo
bV9wcml2YXRlLT5tX21vdmllLCAxLCBBdWRpb01lZGlhQ2hhcmFjdGVyaXN0aWMsIG1vdmllVHJh
Y2tDaGFyYWN0ZXJpc3RpYyB8IG1vdmllVHJhY2tFbmFibGVkT25seSkpOwotfQotCi0KLWJvb2wg
UVRNb3ZpZVdpbjo6aGFzQ2xvc2VkQ2FwdGlvbnMoKSBjb25zdCAKLXsKLSAgICBpZiAoIW1fcHJp
dmF0ZS0+bV9tb3ZpZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBHZXRNb3Zp
ZUluZFRyYWNrVHlwZShtX3ByaXZhdGUtPm1fbW92aWUsIDEsIGNsb3NlZENhcHRpb25UcmFja1R5
cGUsIG1vdmllVHJhY2tNZWRpYVR5cGUpOwotfQotCi12b2lkIFFUTW92aWVXaW46OnNldENsb3Nl
ZENhcHRpb25zVmlzaWJsZShib29sIHZpc2libGUpCi17Ci0gICAgaWYgKCFtX3ByaXZhdGUtPm1f
bW92aWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIFRyYWNrIGNjVHJhY2sgPSBHZXRNb3ZpZUlu
ZFRyYWNrVHlwZShtX3ByaXZhdGUtPm1fbW92aWUsIDEsIGNsb3NlZENhcHRpb25UcmFja1R5cGUs
IG1vdmllVHJhY2tNZWRpYVR5cGUpOwotICAgIGlmICghY2NUcmFjaykKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgQm9vbGVhbiBkb0Rpc3BsYXkgPSB2aXNpYmxlOwotICAgIFFUU2V0VHJhY2tQcm9w
ZXJ0eShjY1RyYWNrLCBjbG9zZWRDYXB0aW9uVHJhY2tUeXBlLCBjbG9zZWRDYXB0aW9uRGlzcGxh
eVByb3BlcnR5SUQsIHNpemVvZihkb0Rpc3BsYXkpLCAmZG9EaXNwbGF5KTsKLX0KLQotcGFzY2Fs
IE9TRXJyIG1vdmllRHJhd2luZ0NvbXBsZXRlUHJvYyhNb3ZpZSBtb3ZpZSwgbG9uZyBkYXRhKQot
ewotICAgIFVwcFBhcmFtIHBhcmFtOwotICAgIHBhcmFtLmxvbmdWYWx1ZSA9IGRhdGE7Ci0gICAg
UVRNb3ZpZVdpblByaXZhdGUqIG1wID0gc3RhdGljX2Nhc3Q8UVRNb3ZpZVdpblByaXZhdGUqPihw
YXJhbS5wdHIpOwotICAgIGlmIChtcCkKLSAgICAgICAgbXAtPmRyYXdpbmdDb21wbGV0ZSgpOwot
ICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBpbml0aWFsaXplU3VwcG9ydGVkVHlwZXMo
KSAKLXsKLSAgICBpZiAoZ1N1cHBvcnRlZFR5cGVzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBn
U3VwcG9ydGVkVHlwZXMgPSBuZXcgVmVjdG9yPENGU3RyaW5nUmVmPjsKLSAgICBpZiAocXVpY2tU
aW1lVmVyc2lvbiA8IG1pbmltdW1RdWlja1RpbWVWZXJzaW9uKSB7Ci0gICAgICAgIExPR19FUlJP
UigiUXVpY2tUaW1lIHZlcnNpb24gJXggZGV0ZWN0ZWQsIGF0IGxlYXN0ICV4IHJlcXVpcmVkLiBS
ZXR1cm5pbmcgZW1wdHkgbGlzdCBvZiBzdXBwb3J0ZWQgbWVkaWEgTUlNRSB0eXBlcy4iLCBxdWlj
a1RpbWVWZXJzaW9uLCBtaW5pbXVtUXVpY2tUaW1lVmVyc2lvbik7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICAvLyBRdWlja1RpbWUgZG9lc24ndCBoYXZlIGFuIGltcG9ydGVyIGZvciB2
aWRlby9xdWlja3RpbWUuIEFkZCBpdCBtYW51YWxseS4KLSAgICBnU3VwcG9ydGVkVHlwZXMtPmFw
cGVuZChDRlNUUigidmlkZW8vcXVpY2t0aW1lIikpOwotCi0gICAgZm9yIChpbnQgaW5kZXggPSAw
OyBpbmRleCA8IDI7IGluZGV4KyspIHsKLSAgICAgICAgQ29tcG9uZW50RGVzY3JpcHRpb24gZmlu
ZENEOwotCi0gICAgICAgIC8vIGxvb2sgYXQgYWxsIG1vdmllIGltcG9ydGVycyB0aGF0IGNhbiBp
bXBvcnQgaW4gcGxhY2UgYW5kIGFyZSBpbnN0YWxsZWQuIAotICAgICAgICBmaW5kQ0QuY29tcG9u
ZW50VHlwZSA9IE1vdmllSW1wb3J0VHlwZTsKLSAgICAgICAgZmluZENELmNvbXBvbmVudFN1YlR5
cGUgPSAwOwotICAgICAgICBmaW5kQ0QuY29tcG9uZW50TWFudWZhY3R1cmVyID0gMDsKLSAgICAg
ICAgZmluZENELmNvbXBvbmVudEZsYWdzTWFzayA9IGNtcElzTWlzc2luZyB8IG1vdmllSW1wb3J0
U3ViVHlwZUlzRmlsZUV4dGVuc2lvbiB8IGNhbk1vdmllSW1wb3J0SW5QbGFjZSB8IGRvbnRBdXRv
RmlsZU1vdmllSW1wb3J0OwotCi0gICAgICAgIC8vIGxvb2sgYXQgdGhvc2UgcmVnaXN0ZXJlZCBi
eSBIRlMgZmlsZSB0eXBlcyB0aGUgZmlyc3QgdGltZSB0aHJvdWdoLCBieSBmaWxlIGV4dGVuc2lv
biB0aGUgc2Vjb25kIHRpbWUKLSAgICAgICAgZmluZENELmNvbXBvbmVudEZsYWdzID0gY2FuTW92
aWVJbXBvcnRJblBsYWNlIHwgKGluZGV4ID8gbW92aWVJbXBvcnRTdWJUeXBlSXNGaWxlRXh0ZW5z
aW9uIDogMCk7Ci0gICAgICAgIAotICAgICAgICBsb25nIGNvbXBvbmVudENvdW50ID0gQ291bnRD
b21wb25lbnRzKCZmaW5kQ0QpOwotICAgICAgICBpZiAoIWNvbXBvbmVudENvdW50KQotICAgICAg
ICAgICAgY29udGludWU7Ci0KLSAgICAgICAgQ29tcG9uZW50IGNvbXAgPSAwOwotICAgICAgICB3
aGlsZSAoY29tcCA9IEZpbmROZXh0Q29tcG9uZW50KGNvbXAsICZmaW5kQ0QpKSB7Ci0gICAgICAg
ICAgICAvLyBEb2VzIHRoaXMgY29tcG9uZW50IGhhdmUgYSBNSU1FIHR5cGUgY29udGFpbmVyPwot
ICAgICAgICAgICAgQ29tcG9uZW50RGVzY3JpcHRpb24gaW5mb0NEOwotICAgICAgICAgICAgT1NF
cnIgZXJyID0gR2V0Q29tcG9uZW50SW5mbyhjb21wLCAmaW5mb0NELCBuaWwgLypuYW1lKi8sIG5p
bCAvKmluZm8qLywgbmlsIC8qaWNvbiovKTsKLSAgICAgICAgICAgIGlmIChlcnIpCi0gICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoIShpbmZvQ0QuY29tcG9uZW50Rmxh
Z3MgJiBoYXNNb3ZpZUltcG9ydE1JTUVMaXN0KSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgIFFUQXRvbUNvbnRhaW5lciBtaW1lTGlzdCA9IDA7Ci0gICAgICAgICAgICBl
cnIgPSBNb3ZpZUltcG9ydEdldE1JTUVUeXBlTGlzdCgoQ29tcG9uZW50SW5zdGFuY2UpY29tcCwg
Jm1pbWVMaXN0KTsKLSAgICAgICAgICAgIGlmIChlcnIgfHwgIW1pbWVMaXN0KQotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAvLyBHcmFiIGV2ZXJ5IHR5cGUgZnJvbSB0
aGUgY29udGFpbmVyLgotICAgICAgICAgICAgUVRMb2NrQ29udGFpbmVyKG1pbWVMaXN0KTsKLSAg
ICAgICAgICAgIGludCB0eXBlQ291bnQgPSBRVENvdW50Q2hpbGRyZW5PZlR5cGUobWltZUxpc3Qs
IGtQYXJlbnRBdG9tSXNDb250YWluZXIsIGtNaW1lSW5mb01pbWVUeXBlVGFnKTsKLSAgICAgICAg
ICAgIGZvciAoaW50IHR5cGVJbmRleCA9IDE7IHR5cGVJbmRleCA8PSB0eXBlQ291bnQ7IHR5cGVJ
bmRleCsrKSB7Ci0gICAgICAgICAgICAgICAgUVRBdG9tIG1pbWVUYWcgPSBRVEZpbmRDaGlsZEJ5
SW5kZXgobWltZUxpc3QsIDAsIGtNaW1lSW5mb01pbWVUeXBlVGFnLCB0eXBlSW5kZXgsIDApOwot
ICAgICAgICAgICAgICAgIGlmICghbWltZVRhZykKLSAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICAgICAgY2hhciogYXRvbURhdGE7Ci0gICAgICAgICAgICAgICAgbG9u
ZyB0eXBlTGVuZ3RoOwotICAgICAgICAgICAgICAgIGlmIChub0VyciAhPSBRVEdldEF0b21EYXRh
UHRyKG1pbWVMaXN0LCBtaW1lVGFnLCAmdHlwZUxlbmd0aCwgJmF0b21EYXRhKSkKLSAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgICAgICBjaGFyIHR5cGVCdWZmZXJb
MjU2XTsKLSAgICAgICAgICAgICAgICBpZiAodHlwZUxlbmd0aCA+PSBzaXplb2YodHlwZUJ1ZmZl
cikpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIG1lbWNw
eSh0eXBlQnVmZmVyLCBhdG9tRGF0YSwgdHlwZUxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgdHlw
ZUJ1ZmZlclt0eXBlTGVuZ3RoXSA9IDA7Ci0KLSAgICAgICAgICAgICAgICAvLyBPbmx5IGFkZCAi
YXVkaW8vLi4uIiBhbmQgInZpZGVvLy4uLiIgdHlwZXMuCi0gICAgICAgICAgICAgICAgaWYgKHN0
cm5jbXAodHlwZUJ1ZmZlciwgImF1ZGlvLyIsIDYpICYmIHN0cm5jbXAodHlwZUJ1ZmZlciwgInZp
ZGVvLyIsIDYpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAg
ICAgIENGU3RyaW5nUmVmIGNmTWltZVR5cGUgPSBDRlN0cmluZ0NyZWF0ZVdpdGhDU3RyaW5nKDAs
IHR5cGVCdWZmZXIsIGtDRlN0cmluZ0VuY29kaW5nVVRGOCk7Ci0gICAgICAgICAgICAgICAgaWYg
KCFjZk1pbWVUeXBlKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAg
ICAgICAgIC8vIE9ubHkgYWRkIGVhY2ggdHlwZSBvbmNlLgotICAgICAgICAgICAgICAgIGJvb2wg
YWxyZWFkeUFkZGVkID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgYWRkZWRJbmRl
eCA9IDA7IGFkZGVkSW5kZXggPCBnU3VwcG9ydGVkVHlwZXMtPnNpemUoKTsgYWRkZWRJbmRleCsr
KSB7Ci0gICAgICAgICAgICAgICAgICAgIENGU3RyaW5nUmVmIHR5cGUgPSBnU3VwcG9ydGVkVHlw
ZXMtPmF0KGFkZGVkSW5kZXgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoa0NGQ29tcGFyZUVx
dWFsVG8gPT0gQ0ZTdHJpbmdDb21wYXJlKGNmTWltZVR5cGUsIHR5cGUsIGtDRkNvbXBhcmVDYXNl
SW5zZW5zaXRpdmUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhbHJlYWR5QWRkZWQgPSB0
cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCFhbHJlYWR5QWRkZWQp
Ci0gICAgICAgICAgICAgICAgICAgIGdTdXBwb3J0ZWRUeXBlcy0+YXBwZW5kKGNmTWltZVR5cGUp
OwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgQ0ZSZWxlYXNlKGNm
TWltZVR5cGUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgRGlzcG9zZUhhbmRsZShtaW1l
TGlzdCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXVuc2lnbmVkIFFUTW92aWVXaW46OmNvdW50
U3VwcG9ydGVkVHlwZXMoKQotewotICAgIGluaXRpYWxpemVTdXBwb3J0ZWRUeXBlcygpOwotICAg
IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZ1N1cHBvcnRlZFR5cGVzLT5zaXplKCkpOwot
fQotCi12b2lkIFFUTW92aWVXaW46OmdldFN1cHBvcnRlZFR5cGUodW5zaWduZWQgaW5kZXgsIGNv
bnN0IFVDaGFyKiYgc3RyLCB1bnNpZ25lZCYgbGVuKQotewotICAgIGluaXRpYWxpemVTdXBwb3J0
ZWRUeXBlcygpOwotICAgIEFTU0VSVChpbmRleCA8IGdTdXBwb3J0ZWRUeXBlcy0+c2l6ZSgpKTsK
LQotICAgIC8vIEFsbG9jYXRlIHN1ZmZpY2llbnQgYnVmZmVyIHRvIGhvbGQgYW55IE1JTUUgdHlw
ZQotICAgIHN0YXRpYyBVbmlDaGFyKiBzdGF0aWNCdWZmZXIgPSAwOwotICAgIGlmICghc3RhdGlj
QnVmZmVyKQotICAgICAgICBzdGF0aWNCdWZmZXIgPSBuZXcgVW5pQ2hhclszMl07Ci0KLSAgICBD
RlN0cmluZ1JlZiBjZnN0ciA9IGdTdXBwb3J0ZWRUeXBlcy0+YXQoaW5kZXgpOwotICAgIGxlbiA9
IENGU3RyaW5nR2V0TGVuZ3RoKGNmc3RyKTsKLSAgICBDRlJhbmdlIHJhbmdlID0geyAwLCBsZW4g
fTsKLSAgICBDRlN0cmluZ0dldENoYXJhY3RlcnMoY2ZzdHIsIHJhbmdlLCBzdGF0aWNCdWZmZXIp
OwotICAgIHN0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPihzdGF0aWNCdWZmZXIp
OwotICAgIAotfQotCi12b2lkIFFUTW92aWVXaW46OnNldFRhc2tUaW1lckZ1bmNzKFNldFRhc2tU
aW1lckRlbGF5RnVuYyBzZXRUYXNrVGltZXJEZWxheSwgU3RvcFRhc2tUaW1lckZ1bmMgc3RvcFRh
c2tUaW1lcikKLXsKLSAgICBnU2V0VGFza1RpbWVyRGVsYXkgPSBzZXRUYXNrVGltZXJEZWxheTsK
LSAgICBnU3RvcFRhc2tUaW1lciA9IHN0b3BUYXNrVGltZXI7Ci19Ci0KLWJvb2wgUVRNb3ZpZVdp
bjo6aW5pdGlhbGl6ZVF1aWNrVGltZSgpIAotewotICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVk
ID0gZmFsc2U7Ci0gICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6YXRpb25TdWNjZWVkZWQgPSBmYWxz
ZTsKLSAgICBpZiAoIWluaXRpYWxpemVkKSB7Ci0gICAgICAgIGluaXRpYWxpemVkID0gdHJ1ZTsK
LSAgICAgICAgLy8gSW5pdGlhbGl6ZSBhbmQgY2hlY2sgUXVpY2tUaW1lIHZlcnNpb24KLSAgICAg
ICAgT1NFcnIgcmVzdWx0ID0gSW5pdGlhbGl6ZVFUTUwoa0luaXRpYWxpemVRVE1MRW5hYmxlRG91
YmxlQnVmZmVyZWRTdXJmYWNlKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBub0VycikKLSAgICAg
ICAgICAgIHJlc3VsdCA9IEdlc3RhbHQoZ2VzdGFsdFF1aWNrVGltZSwgJnF1aWNrVGltZVZlcnNp
b24pOwotICAgICAgICBpZiAocmVzdWx0ICE9IG5vRXJyKSB7Ci0gICAgICAgICAgICBMT0dfRVJS
T1IoIk5vIFF1aWNrVGltZSBhdmFpbGFibGUuIERpc2FibGluZyA8dmlkZW8+IGFuZCA8YXVkaW8+
IHN1cHBvcnQuIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAg
ICAgaWYgKHF1aWNrVGltZVZlcnNpb24gPCBtaW5pbXVtUXVpY2tUaW1lVmVyc2lvbikgewotICAg
ICAgICAgICAgTE9HX0VSUk9SKCJRdWlja1RpbWUgdmVyc2lvbiAleCBkZXRlY3RlZCwgYXQgbGVh
c3QgJXggcmVxdWlyZWQuIERpc2FibGluZyA8dmlkZW8+IGFuZCA8YXVkaW8+IHN1cHBvcnQuIiwg
cXVpY2tUaW1lVmVyc2lvbiwgbWluaW11bVF1aWNrVGltZVZlcnNpb24pOwotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIEVudGVyTW92aWVzKCk7Ci0gICAgICAg
IGdNb3ZpZURyYXdpbmdDb21wbGV0ZVVQUCA9IE5ld01vdmllRHJhd2luZ0NvbXBsZXRlVVBQKG1v
dmllRHJhd2luZ0NvbXBsZXRlUHJvYyk7Ci0gICAgICAgIGluaXRpYWxpemF0aW9uU3VjY2VlZGVk
ID0gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGluaXRpYWxpemF0aW9uU3VjY2VlZGVkOworICAg
IHJldHVybiBtX3ByaXZhdGUtPm1fZGlzYWJsZWQ7CiB9CiAKIExSRVNVTFQgUVRNb3ZpZVdpbjo6
ZnVsbHNjcmVlblduZFByb2MoSFdORCB3bmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwg
TFBBUkFNIGxQYXJhbSkKQEAgLTExNjMsMTYgKzQ2MywyNSBAQCB2b2lkIFFUTW92aWVXaW46OmV4
aXRGdWxsc2NyZWVuKCkKICAgICBtX3ByaXZhdGUtPm1fZnVsbHNjcmVlbldpbmRvdyA9IDA7CiB9
CiAKLUJPT0wgV0lOQVBJIERsbE1haW4oSElOU1RBTkNFIGhpbnN0RExMLCBEV09SRCBmZHdSZWFz
b24sIExQVk9JRCBscHZSZXNlcnZlZCkKK3ZvaWQgUVRNb3ZpZVdpbjo6c2V0TW92aWUoUmVmUHRy
PFFUTW92aWU+IG1vdmllKQogewotICAgIHN3aXRjaCAoZmR3UmVhc29uKSB7Ci0gICAgY2FzZSBE
TExfUFJPQ0VTU19BVFRBQ0g6Ci0gICAgICAgIHJldHVybiBUUlVFOwotICAgIGNhc2UgRExMX1BS
T0NFU1NfREVUQUNIOgotICAgIGNhc2UgRExMX1RIUkVBRF9BVFRBQ0g6Ci0gICAgY2FzZSBETExf
VEhSRUFEX0RFVEFDSDoKLSAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIGlmIChtX3ByaXZhdGUt
Pm1fcXRNb3ZpZSkgeworICAgICAgICBtX3ByaXZhdGUtPnVucmVnaXN0ZXJEcmF3aW5nQ2FsbGJh
Y2soKTsKKyAgICAgICAgbV9wcml2YXRlLT5tX3F0TW92aWUtPnJlbW92ZUNsaWVudChtX3ByaXZh
dGUpOworICAgICAgICBtX3ByaXZhdGUtPm1fcXRNb3ZpZSA9IDA7CisgICAgICAgIG1fcHJpdmF0
ZS0+bV9tb3ZpZSA9IDA7CisgICAgfQorCisgICAgbV9wcml2YXRlLT5tX3F0TW92aWUgPSBtb3Zp
ZTsKKworICAgIGlmIChtX3ByaXZhdGUtPm1fcXRNb3ZpZSkgeworICAgICAgICBtX3ByaXZhdGUt
Pm1fcXRNb3ZpZS0+YWRkQ2xpZW50KG1fcHJpdmF0ZSk7CisgICAgICAgIG1fcHJpdmF0ZS0+bV9t
b3ZpZSA9IG1fcHJpdmF0ZS0+bV9xdE1vdmllLT5nZXRNb3ZpZUhhbmRsZSgpOworICAgICAgICBt
X3ByaXZhdGUtPnJlZ2lzdGVyRHJhd2luZ0NhbGxiYWNrKCk7CiAgICAgfQotICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBGQUxTRTsKK30KKworUmVmUHRyPFFUTW92aWU+IFFU
TW92aWVXaW46Om1vdmllKCkgY29uc3QgCit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bV9xdE1v
dmllOwogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRNb3ZpZVdpbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWVXaW4u
aAkocmV2aXNpb24gNTgxODcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVE1v
dmllV2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDExIEBACiAjaWZuZGVmIFFUTW92
aWVXaW5faAogI2RlZmluZSBRVE1vdmllV2luX2gKIAorCisjaW5jbHVkZSAiUVRNb3ZpZS5oIgog
I2luY2x1ZGUgPFVuaWNvZGUuaD4KKyNpbmNsdWRlIDxXVEYvUmVmQ291bnRlZC5oPgorI2luY2x1
ZGUgPFdURi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAKICNpZmRlZiBRVE1PVklF
V0lOX0VYUE9SVFMKQEAgLTQwLDkgKzQ0LDYgQEAgY2xhc3MgUVRNb3ZpZVdpblByaXZhdGU7CiAK
IGNsYXNzIFFUTW92aWVXaW5DbGllbnQgewogcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBtb3Zp
ZUVuZGVkKFFUTW92aWVXaW4qKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIG1vdmllTG9hZFN0YXRl
Q2hhbmdlZChRVE1vdmllV2luKikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBtb3ZpZVRpbWVDaGFu
Z2VkKFFUTW92aWVXaW4qKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIG1vdmllTmV3SW1hZ2VBdmFp
bGFibGUoUVRNb3ZpZVdpbiopID0gMDsKIH07CiAKQEAgLTUxLDQ3ICs1MiwxMSBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCBMUkVTVUxUIGZ1bGxzY3JlZW5DbGllbnRXbmRQcm9jKEhXTkQsIFVJTlQg
bWVzc2FnZSwgV1BBUkFNLCBMUEFSQU0pID0gMDsKIH07CiAKLWVudW0gewotICAgIFFUTW92aWVM
b2FkU3RhdGVFcnJvciA9IC0xTCwKLSAgICBRVE1vdmllTG9hZFN0YXRlTG9hZGVkICA9IDIwMDBM
LAotICAgIFFUTW92aWVMb2FkU3RhdGVQbGF5YWJsZSA9IDEwMDAwTCwKLSAgICBRVE1vdmllTG9h
ZFN0YXRlUGxheXRocm91Z2hPSyA9IDIwMDAwTCwKLSAgICBRVE1vdmllTG9hZFN0YXRlQ29tcGxl
dGUgPSAxMDAwMDBMCi19OwotCi10eXBlZGVmIGNvbnN0IHN0cnVjdCBfX0NGVVJMICogQ0ZVUkxS
ZWY7Ci0KLWNsYXNzIFFUTU9WSUVXSU5fQVBJIFFUTW92aWVXaW4geworY2xhc3MgUVRNT1ZJRVdJ
Tl9BUEkgUVRNb3ZpZVdpbiA6IHB1YmxpYyBSZWZDb3VudGVkPFFUTW92aWVXaW4+IHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplUXVpY2tUaW1lKCk7Ci0KLSAgICB0eXBlZGVm
IHZvaWQgKCpTZXRUYXNrVGltZXJEZWxheUZ1bmMpKGRvdWJsZSk7Ci0gICAgdHlwZWRlZiB2b2lk
ICgqU3RvcFRhc2tUaW1lckZ1bmMpKCk7Ci0gICAgc3RhdGljIHZvaWQgc2V0VGFza1RpbWVyRnVu
Y3MoU2V0VGFza1RpbWVyRGVsYXlGdW5jLCBTdG9wVGFza1RpbWVyRnVuYyk7Ci0gICAgc3RhdGlj
IHZvaWQgdGFza1RpbWVyRmlyZWQoKTsKLQogICAgIFFUTW92aWVXaW4oUVRNb3ZpZVdpbkNsaWVu
dCopOwogICAgIH5RVE1vdmllV2luKCk7CiAKLSAgICB2b2lkIGxvYWQoY29uc3QgVUNoYXIqIHVy
bCwgaW50IGxlbiwgYm9vbCBwcmVzZXJ2ZXNQaXRjaCk7Ci0gICAgbG9uZyBsb2FkU3RhdGUoKSBj
b25zdDsKLSAgICBmbG9hdCBtYXhUaW1lTG9hZGVkKCkgY29uc3Q7Ci0KLSAgICB2b2lkIHBsYXko
KTsKLSAgICB2b2lkIHBhdXNlKCk7Ci0KLSAgICBmbG9hdCByYXRlKCkgY29uc3Q7Ci0gICAgdm9p
ZCBzZXRSYXRlKGZsb2F0KTsKLQotICAgIGZsb2F0IGR1cmF0aW9uKCkgY29uc3Q7Ci0gICAgZmxv
YXQgY3VycmVudFRpbWUoKSBjb25zdDsKLSAgICB2b2lkIHNldEN1cnJlbnRUaW1lKGZsb2F0KSBj
b25zdDsKLQotICAgIHZvaWQgc2V0Vm9sdW1lKGZsb2F0KTsKLSAgICB2b2lkIHNldFByZXNlcnZl
c1BpdGNoKGJvb2wpOwotCi0gICAgdW5zaWduZWQgZGF0YVNpemUoKSBjb25zdDsKLQogICAgIHZv
aWQgZ2V0TmF0dXJhbFNpemUoaW50JiB3aWR0aCwgaW50JiBoZWlnaHQpOwogICAgIHZvaWQgc2V0
U2l6ZShpbnQgd2lkdGgsIGludCBoZWlnaHQpOwogCkBAIC05OSwyOCArNjQsMjAgQEAgcHVibGlj
OgogICAgIHZvaWQgcGFpbnQoSERDLCBpbnQgeCwgaW50IHkpOwogICAgIHZvaWQgZ2V0Q3VycmVu
dEZyYW1lSW5mbyh2b2lkKiYgYnVmZmVyLCB1bnNpZ25lZCYgYml0c1BlclBpeGVsLCB1bnNpZ25l
ZCYgcm93Qnl0ZXMsIHVuc2lnbmVkJiB3aWR0aCwgdW5zaWduZWQmIGhlaWdodCk7CiAKLSAgICB2
b2lkIGRpc2FibGVVbnN1cHBvcnRlZFRyYWNrcyh1bnNpZ25lZCYgZW5hYmxlZFRyYWNrQ291bnQs
IHVuc2lnbmVkJiB0b3RhbFRyYWNrQ291bnQpOwogICAgIHZvaWQgc2V0RGlzYWJsZWQoYm9vbCk7
Ci0KLSAgICBib29sIGhhc1ZpZGVvKCkgY29uc3Q7Ci0gICAgYm9vbCBoYXNBdWRpbygpIGNvbnN0
OwotCi0gICAgYm9vbCBoYXNDbG9zZWRDYXB0aW9ucygpIGNvbnN0OwotICAgIHZvaWQgc2V0Q2xv
c2VkQ2FwdGlvbnNWaXNpYmxlKGJvb2wpOwotCi0gICAgc3RhdGljIHVuc2lnbmVkIGNvdW50U3Vw
cG9ydGVkVHlwZXMoKTsKLSAgICBzdGF0aWMgdm9pZCBnZXRTdXBwb3J0ZWRUeXBlKHVuc2lnbmVk
IGluZGV4LCBjb25zdCBVQ2hhciomIHN0ciwgdW5zaWduZWQmIGxlbik7CisgICAgYm9vbCBpc0Rp
c2FibGVkKCkgY29uc3Q7CiAKICAgICAvLyBSZXR1cm5zIHRoZSBmdWxsLXNjcmVlbiB3aW5kb3cg
Y3JlYXRlZAogICAgIEhXTkQgZW50ZXJGdWxsc2NyZWVuKFFUTW92aWVXaW5GdWxsc2NyZWVuQ2xp
ZW50Kik7CiAgICAgdm9pZCBleGl0RnVsbHNjcmVlbigpOwogCisgICAgdm9pZCBzZXRNb3ZpZShS
ZWZQdHI8UVRNb3ZpZT4pOworICAgIFJlZlB0cjxRVE1vdmllPiBtb3ZpZSgpIGNvbnN0OworCiBw
cml2YXRlOgotICAgIHZvaWQgbG9hZChDRlVSTFJlZiwgYm9vbCBwcmVzZXJ2ZXNQaXRjaCk7CiAg
ICAgc3RhdGljIExSRVNVTFQgZnVsbHNjcmVlblduZFByb2MoSFdORCwgVUlOVCBtZXNzYWdlLCBX
UEFSQU0sIExQQVJBTSk7CiAKICAgICBRVE1vdmllV2luUHJpdmF0ZSogbV9wcml2YXRlOwotICAg
IGJvb2wgbV9kaXNhYmxlZDsKICAgICBmcmllbmQgY2xhc3MgUVRNb3ZpZVdpblByaXZhdGU7CiB9
OwogCg==
</data>
<flag name="review"
          id="38618"
          type_id="1"
          status="-"
          setter="sam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54601</attachid>
            <date>2010-04-28 11:45:19 -0700</date>
            <delta_ts>2010-05-04 15:29:16 -0700</delta_ts>
            <desc>Part 4: WebCore: New class MediaPlayerPrivateQuickTimeVisualContext</desc>
            <filename>7569713-MediaPlayerPrivateQuickTimeVisualContext.patch</filename>
            <type>text/plain</type>
            <size>77187</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1
aWNrVGltZVZpc3VhbENvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQuY3Bw
CShyZXZpc2lvbiA1ODE4NykJKGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVk
aWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lV2luLmNwcDo1ODE4NykKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTcyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoVklERU8pCisjaW5j
bHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lV2luLmgiCisKKyNpbmNsdWRlICJDb29r
aWUuaCIKKyNpbmNsdWRlICJDb29raWVKYXIuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1
ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUg
IktVUkwuaCIKKyNpbmNsdWRlICJRVE1vdmllV2luLmgiCisjaW5jbHVkZSAiU2Nyb2xsVmlldy5o
IgorI2luY2x1ZGUgIlNvZnRMaW5raW5nLmgiCisjaW5jbHVkZSAiU3RyaW5nQnVpbGRlci5oIgor
I2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKKyNpbmNsdWRlICJUaW1lUmFuZ2VzLmgiCisjaW5jbHVk
ZSAiVGltZXIuaCIKKyNpbmNsdWRlIDxXaW5pbmV0Lmg+CisjaW5jbHVkZSA8d3RmL0N1cnJlbnRU
aW1lLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJh
cy5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyQ0FDRi5oIgorI2luY2x1ZGUg
IldLQ0FDRkxheWVyLmgiCisjZW5kaWYKKworI2lmIERSQVdfRlJBTUVfUkFURQorI2luY2x1ZGUg
IkZvbnQuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAi
UmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJXaW5kb3dzLmgiCisjZW5kaWYKKwordXNpbmcgbmFt
ZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTT0ZUX0xJTktfTElCUkFSWShX
aW5pbmV0KQorU09GVF9MSU5LKFdpbmluZXQsIEludGVybmV0U2V0Q29va2llRXhXLCBEV09SRCwg
V0lOQVBJLCAoTFBDV1NUUiBscHN6VXJsLCBMUENXU1RSIGxwc3pDb29raWVOYW1lLCBMUENXU1RS
IGxwc3pDb29raWVEYXRhLCBEV09SRCBkd0ZsYWdzLCBEV09SRF9QVFIgZHdSZXNlcnZlZCksIChs
cHN6VXJsLCBscHN6Q29va2llTmFtZSwgbHBzekNvb2tpZURhdGEsIGR3RmxhZ3MsIGR3UmVzZXJ2
ZWQpKQorCitNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2UqIE1lZGlhUGxheWVyUHJpdmF0ZTo6
Y3JlYXRlKE1lZGlhUGxheWVyKiBwbGF5ZXIpIAoreyAKKyAgICByZXR1cm4gbmV3IE1lZGlhUGxh
eWVyUHJpdmF0ZShwbGF5ZXIpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6cmVnaXN0
ZXJNZWRpYUVuZ2luZShNZWRpYUVuZ2luZVJlZ2lzdHJhciByZWdpc3RyYXIpCit7CisgICAgaWYg
KGlzQXZhaWxhYmxlKCkpCisgICAgICAgIHJlZ2lzdHJhcihjcmVhdGUsIGdldFN1cHBvcnRlZFR5
cGVzLCBzdXBwb3J0c1R5cGUpOworfQorCitNZWRpYVBsYXllclByaXZhdGU6Ok1lZGlhUGxheWVy
UHJpdmF0ZShNZWRpYVBsYXllciogcGxheWVyKQorICAgIDogbV9wbGF5ZXIocGxheWVyKQorICAg
ICwgbV9zZWVrVG8oLTEpCisgICAgLCBtX3NlZWtUaW1lcih0aGlzLCAmTWVkaWFQbGF5ZXJQcml2
YXRlOjpzZWVrVGltZXJGaXJlZCkKKyAgICAsIG1fbmV0d29ya1N0YXRlKE1lZGlhUGxheWVyOjpF
bXB0eSkKKyAgICAsIG1fcmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmcpCisgICAg
LCBtX2VuYWJsZWRUcmFja0NvdW50KDApCisgICAgLCBtX3RvdGFsVHJhY2tDb3VudCgwKQorICAg
ICwgbV9oYXNVbnN1cHBvcnRlZFRyYWNrcyhmYWxzZSkKKyAgICAsIG1fc3RhcnRlZFBsYXlpbmco
ZmFsc2UpCisgICAgLCBtX2lzU3RyZWFtaW5nKGZhbHNlKQorICAgICwgbV92aXNpYmxlKGZhbHNl
KQorICAgICwgbV9uZXdGcmFtZUF2YWlsYWJsZShmYWxzZSkKKyNpZiBEUkFXX0ZSQU1FX1JBVEUK
KyAgICAsIG1fZnJhbWVDb3VudFdoaWxlUGxheWluZygwKQorICAgICwgbV90aW1lU3RhcnRlZFBs
YXlpbmcoMCkKKyAgICAsIG1fdGltZVN0b3BwZWRQbGF5aW5nKDApCisjZW5kaWYKK3sKK30KKwor
TWVkaWFQbGF5ZXJQcml2YXRlOjp+TWVkaWFQbGF5ZXJQcml2YXRlKCkKK3sKKyAgICB0ZWFyRG93
blZpZGVvUmVuZGVyaW5nKCk7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlOjpzdXBwb3J0
c0Z1bGxzY3JlZW4oKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCitQbGF0Zm9ybU1l
ZGlhIE1lZGlhUGxheWVyUHJpdmF0ZTo6cGxhdGZvcm1NZWRpYSgpIGNvbnN0Cit7CisgICAgUGxh
dGZvcm1NZWRpYSBwOworICAgIHAucXRNb3ZpZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8UVRNb3ZpZSo+
KG1fcXRNb3ZpZS5nZXQoKSk7CisgICAgcmV0dXJuIHA7Cit9CisKKyNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCitQbGF0Zm9ybUxheWVyKiBNZWRpYVBsYXllclByaXZhdGU6OnBsYXRm
b3JtTGF5ZXIoKSBjb25zdAoreworICAgIHJldHVybiBtX3F0VmlkZW9MYXllciA/IG1fcXRWaWRl
b0xheWVyLT5wbGF0Zm9ybUxheWVyKCkgOiAwOworfQorI2VuZGlmCisKK2NsYXNzIFRhc2tUaW1l
ciA6IFRpbWVyQmFzZSB7CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZSgpOwor
ICAgIAorcHJpdmF0ZToKKyAgICBzdGF0aWMgdm9pZCBzZXRUYXNrVGltZXJEZWxheShkb3VibGUp
OworICAgIHN0YXRpYyB2b2lkIHN0b3BUYXNrVGltZXIoKTsKKworICAgIHZvaWQgZmlyZWQoKTsK
KworICAgIHN0YXRpYyBUYXNrVGltZXIqIHNfdGltZXI7Cit9OworCitUYXNrVGltZXIqIFRhc2tU
aW1lcjo6c190aW1lciA9IDA7CisKK3ZvaWQgVGFza1RpbWVyOjppbml0aWFsaXplKCkKK3sKKyAg
ICBpZiAoc190aW1lcikKKyAgICAgICAgcmV0dXJuOworCisgICAgc190aW1lciA9IG5ldyBUYXNr
VGltZXI7CisKKyAgICBRVE1vdmllV2luOjpzZXRUYXNrVGltZXJGdW5jcyhzZXRUYXNrVGltZXJE
ZWxheSwgc3RvcFRhc2tUaW1lcik7Cit9CisKK3ZvaWQgVGFza1RpbWVyOjpzZXRUYXNrVGltZXJE
ZWxheShkb3VibGUgZGVsYXlJblNlY29uZHMpCit7CisgICAgQVNTRVJUKHNfdGltZXIpOworCisg
ICAgc190aW1lci0+c3RhcnRPbmVTaG90KGRlbGF5SW5TZWNvbmRzKTsKK30KKwordm9pZCBUYXNr
VGltZXI6OnN0b3BUYXNrVGltZXIoKQoreworICAgIEFTU0VSVChzX3RpbWVyKTsKKworICAgIHNf
dGltZXItPnN0b3AoKTsKK30KKwordm9pZCBUYXNrVGltZXI6OmZpcmVkKCkKK3sKKyAgICBRVE1v
dmllV2luOjp0YXNrVGltZXJGaXJlZCgpOworfQorCitTdHJpbmcgTWVkaWFQbGF5ZXJQcml2YXRl
OjpyZmMyNjE2RGF0ZVN0cmluZ0Zyb21UaW1lKENGQWJzb2x1dGVUaW1lIHRpbWUpCit7CisgICAg
c3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGRheVN0cmluZ3NbXSA9IHsgIk1vbiIsICJUdWUiLCAi
V2VkIiwgIlRodSIsICJGcmkiLCAiU2F0IiwgIlN1biIgfTsKKyAgICBzdGF0aWMgY29uc3QgY2hh
ciogY29uc3QgbW9udGhTdHJpbmdzW10gPSB7ICJKYW4iLCAiRmViIiwgIk1hciIsICJBcHIiLCAi
TWF5IiwgIkp1biIsICJKdWwiLCAiQXVnIiwgIlNlcCIsICJPY3QiLCAiTm92IiwgIkRlYyIgfTsK
KyAgICBzdGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYgZGF0ZUZvcm1hdFN0cmluZyA9IENGU1RSKCIl
cywgJTAyZCAlcyAlMDRkICUwMmQ6JTAyZDolMDJkIEdNVCIpOworICAgIHN0YXRpYyBDRlRpbWVa
b25lUmVmIGdtdFRpbWVab25lOworICAgIGlmICghZ210VGltZVpvbmUpCisgICAgICAgIGdtdFRp
bWVab25lID0gQ0ZUaW1lWm9uZUNvcHlEZWZhdWx0KCk7CisKKyAgICBDRkdyZWdvcmlhbkRhdGUg
ZGF0ZVZhbHVlID0gQ0ZBYnNvbHV0ZVRpbWVHZXRHcmVnb3JpYW5EYXRlKHRpbWUsIGdtdFRpbWVa
b25lKTsgCisgICAgaWYgKCFDRkdyZWdvcmlhbkRhdGVJc1ZhbGlkKGRhdGVWYWx1ZSwga0NGR3Jl
Z29yaWFuQWxsVW5pdHMpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICB0aW1lID0g
Q0ZHcmVnb3JpYW5EYXRlR2V0QWJzb2x1dGVUaW1lKGRhdGVWYWx1ZSwgZ210VGltZVpvbmUpOwor
ICAgIFNJbnQzMiBkYXkgPSBDRkFic29sdXRlVGltZUdldERheU9mV2Vlayh0aW1lLCAwKTsKKwor
ICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gZGF0ZUNGU3RyaW5nKEFkb3B0Q0YsIENGU3RyaW5n
Q3JlYXRlV2l0aEZvcm1hdCgwLCAwLCBkYXRlRm9ybWF0U3RyaW5nLCBkYXlTdHJpbmdzW2RheSAt
IDFdLCBkYXRlVmFsdWUuZGF5LCAKKyAgICAgICAgbW9udGhTdHJpbmdzW2RhdGVWYWx1ZS5tb250
aCAtIDFdLCBkYXRlVmFsdWUueWVhciwgZGF0ZVZhbHVlLmhvdXIsIGRhdGVWYWx1ZS5taW51dGUs
IChpbnQpZGF0ZVZhbHVlLnNlY29uZCkpOworICAgIHJldHVybiBkYXRlQ0ZTdHJpbmcuZ2V0KCk7
Cit9CisKK3N0YXRpYyB2b2lkIGFkZENvb2tpZVBhcmFtKFN0cmluZ0J1aWxkZXImIGNvb2tpZUJ1
aWxkZXIsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBp
ZiAobmFtZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIElmIHRoaXMgaXNu
J3QgdGhlIGZpcnN0IHBhcmFtZXRlciBhZGRlZCwgdGVybWluYXRlIHRoZSBwcmV2aW91cyBvbmUu
CisgICAgaWYgKGNvb2tpZUJ1aWxkZXIubGVuZ3RoKCkpCisgICAgICAgIGNvb2tpZUJ1aWxkZXIu
YXBwZW5kKCI7ICIpOworCisgICAgLy8gQWRkIHBhcmFtZXRlciBuYW1lLCBhbmQgdmFsdWUgaWYg
dGhlcmUgaXMgb25lLgorICAgIGNvb2tpZUJ1aWxkZXIuYXBwZW5kKG5hbWUpOworICAgIGlmICgh
dmFsdWUuaXNFbXB0eSgpKSB7CisgICAgICAgIGNvb2tpZUJ1aWxkZXIuYXBwZW5kKCI9Iik7Cisg
ICAgICAgIGNvb2tpZUJ1aWxkZXIuYXBwZW5kKHZhbHVlKTsKKyAgICB9Cit9CisKKwordm9pZCBN
ZWRpYVBsYXllclByaXZhdGU6OnNldFVwQ29va2llc0ZvclF1aWNrVGltZShjb25zdCBTdHJpbmcm
IHVybCkKK3sKKyAgICAvLyBXZWJDb3JlIGxvYWRlZCB0aGUgcGFnZSB3aXRoIHRoZSBtb3ZpZSBV
Ukwgd2l0aCBDRk5ldHdvcmsgYnV0IFF1aWNrVGltZSB3aWxsIAorICAgIC8vIHVzZSBXaW5JTmV0
IHRvIGRvd25sb2FkIHRoZSBtb3ZpZSwgc28gd2UgbmVlZCB0byBjb3B5IGFueSBjb29raWVzIG5l
ZWRlZCB0bworICAgIC8vIGRvd25sb2FkIHRoZSBtb3ZpZSBpbnRvIFdpbkluZXQgYmVmb3JlIGFz
a2luZyBRdWlja1RpbWUgdG8gb3BlbiBpdC4KKyAgICBGcmFtZSogZnJhbWUgPSBtX3BsYXllci0+
ZnJhbWVWaWV3KCkgPyBtX3BsYXllci0+ZnJhbWVWaWV3KCktPmZyYW1lKCkgOiAwOworICAgIGlm
ICghZnJhbWUgfHwgIWZyYW1lLT5wYWdlKCkgfHwgIWZyYW1lLT5wYWdlKCktPmNvb2tpZUVuYWJs
ZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgS1VSTCBtb3ZpZVVSTCA9IEtVUkwoS1VSTCgp
LCB1cmwpOworICAgIFZlY3RvcjxDb29raWU+IGRvY3VtZW50Q29va2llczsKKyAgICBpZiAoIWdl
dFJhd0Nvb2tpZXMoZnJhbWUtPmRvY3VtZW50KCksIG1vdmllVVJMLCBkb2N1bWVudENvb2tpZXMp
KQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKHNpemVfdCBuZHggPSAwOyBuZHggPCBkb2N1
bWVudENvb2tpZXMuc2l6ZSgpOyBuZHgrKykgeworICAgICAgICBjb25zdCBDb29raWUmIGNvb2tp
ZSA9IGRvY3VtZW50Q29va2llc1tuZHhdOworCisgICAgICAgIGlmIChjb29raWUubmFtZS5pc0Vt
cHR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvLyBCdWlsZCB1cCB0aGUg
Y29va2llIHN0cmluZyB3aXRoIGFzIG11Y2ggaW5mb3JtYXRpb24gYXMgd2UgY2FuIGdldCBzbyBX
aW5JTmV0CisgICAgICAgIC8vIGtub3dzIHdoYXQgdG8gZG8gd2l0aCBpdC4KKyAgICAgICAgU3Ry
aW5nQnVpbGRlciBjb29raWVCdWlsZGVyOworICAgICAgICBhZGRDb29raWVQYXJhbShjb29raWVC
dWlsZGVyLCBjb29raWUubmFtZSwgY29va2llLnZhbHVlKTsKKyAgICAgICAgYWRkQ29va2llUGFy
YW0oY29va2llQnVpbGRlciwgInBhdGgiLCBjb29raWUucGF0aCk7CisgICAgICAgIGlmIChjb29r
aWUuZXhwaXJlcykgCisgICAgICAgICAgICBhZGRDb29raWVQYXJhbShjb29raWVCdWlsZGVyLCAi
ZXhwaXJlcyIsIHJmYzI2MTZEYXRlU3RyaW5nRnJvbVRpbWUoY29va2llLmV4cGlyZXMpKTsKKyAg
ICAgICAgaWYgKGNvb2tpZS5odHRwT25seSkgCisgICAgICAgICAgICBhZGRDb29raWVQYXJhbShj
b29raWVCdWlsZGVyLCAiaHR0cE9ubHkiLCBTdHJpbmcoKSk7CisgICAgICAgIGNvb2tpZUJ1aWxk
ZXIuYXBwZW5kKCI7Iik7CisKKyAgICAgICAgU3RyaW5nIGNvb2tpZVVSTDsKKyAgICAgICAgaWYg
KCFjb29raWUuZG9tYWluLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgU3RyaW5nQnVpbGRlciB1
cmxCdWlsZGVyOworCisgICAgICAgICAgICB1cmxCdWlsZGVyLmFwcGVuZChtb3ZpZVVSTC5wcm90
b2NvbCgpKTsKKyAgICAgICAgICAgIHVybEJ1aWxkZXIuYXBwZW5kKCI6Ly8iKTsKKyAgICAgICAg
ICAgIGlmIChjb29raWUuZG9tYWluWzBdID09ICcuJykKKyAgICAgICAgICAgICAgICB1cmxCdWls
ZGVyLmFwcGVuZChjb29raWUuZG9tYWluLnN1YnN0cmluZygxKSk7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgdXJsQnVpbGRlci5hcHBlbmQoY29va2llLmRvbWFpbik7CisgICAg
ICAgICAgICBpZiAoY29va2llLnBhdGgubGVuZ3RoKCkgPiAxKQorICAgICAgICAgICAgICAgIHVy
bEJ1aWxkZXIuYXBwZW5kKGNvb2tpZS5wYXRoKTsKKworICAgICAgICAgICAgY29va2llVVJMID0g
dXJsQnVpbGRlci50b1N0cmluZygpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGNvb2tp
ZVVSTCA9IG1vdmllVVJMOworCisgICAgICAgIEludGVybmV0U2V0Q29va2llRXhXKGNvb2tpZVVS
TC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLCAwLCBjb29raWVCdWlsZGVyLnRvU3Ry
aW5nKCkuY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgMCwgMCk7CisgICAgfQorfQor
Cit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6bG9hZChjb25zdCBTdHJpbmcmIHVybCkKK3sKKyAg
ICBpZiAoIVFUTW92aWVXaW46OmluaXRpYWxpemVRdWlja1RpbWUoKSkgeworICAgICAgICAvLyBG
SVhNRTogaXMgdGhpcyB0aGUgcmlnaHQgZXJyb3IgdG8gcmV0dXJuPworICAgICAgICBtX25ldHdv
cmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpEZWNvZGVFcnJvcjsgCisgICAgICAgIG1fcGxheWVyLT5u
ZXR3b3JrU3RhdGVDaGFuZ2VkKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBJ
bml0aWFsaXplIHRoZSB0YXNrIHRpbWVyLgorICAgIFRhc2tUaW1lcjo6aW5pdGlhbGl6ZSgpOwor
CisgICAgaWYgKG1fbmV0d29ya1N0YXRlICE9IE1lZGlhUGxheWVyOjpMb2FkaW5nKSB7CisgICAg
ICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkxvYWRpbmc7CisgICAgICAgIG1fcGxh
eWVyLT5uZXR3b3JrU3RhdGVDaGFuZ2VkKCk7CisgICAgfQorICAgIGlmIChtX3JlYWR5U3RhdGUg
IT0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nKSB7CisgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1l
ZGlhUGxheWVyOjpIYXZlTm90aGluZzsKKyAgICAgICAgbV9wbGF5ZXItPnJlYWR5U3RhdGVDaGFu
Z2VkKCk7CisgICAgfQorICAgIGNhbmNlbFNlZWsoKTsKKworICAgIHNldFVwQ29va2llc0ZvclF1
aWNrVGltZSh1cmwpOworCisgICAgbV9xdE1vdmllLnNldChuZXcgUVRNb3ZpZVdpbih0aGlzKSk7
CisgICAgbV9xdE1vdmllLT5sb2FkKHVybC5jaGFyYWN0ZXJzKCksIHVybC5sZW5ndGgoKSwgbV9w
bGF5ZXItPnByZXNlcnZlc1BpdGNoKCkpOworICAgIG1fcXRNb3ZpZS0+c2V0Vm9sdW1lKG1fcGxh
eWVyLT52b2x1bWUoKSk7CisgICAgbV9xdE1vdmllLT5zZXRWaXNpYmxlKG1fcGxheWVyLT52aXNp
YmxlKCkpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6cGxheSgpCit7CisgICAgaWYg
KCFtX3F0TW92aWUpCisgICAgICAgIHJldHVybjsKKyAgICBtX3N0YXJ0ZWRQbGF5aW5nID0gdHJ1
ZTsKKyNpZiBEUkFXX0ZSQU1FX1JBVEUKKyAgICBtX2ZyYW1lQ291bnRXaGlsZVBsYXlpbmcgPSAw
OworI2VuZGlmCisKKyAgICBtX3F0TW92aWUtPnBsYXkoKTsKK30KKwordm9pZCBNZWRpYVBsYXll
clByaXZhdGU6OnBhdXNlKCkKK3sKKyAgICBpZiAoIW1fcXRNb3ZpZSkKKyAgICAgICAgcmV0dXJu
OworICAgIG1fc3RhcnRlZFBsYXlpbmcgPSBmYWxzZTsKKyNpZiBEUkFXX0ZSQU1FX1JBVEUKKyAg
ICBtX3RpbWVTdG9wcGVkUGxheWluZyA9IFdURjo6Y3VycmVudFRpbWUoKTsKKyNlbmRpZgorICAg
IG1fcXRNb3ZpZS0+cGF1c2UoKTsKK30KKworZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlOjpkdXJh
dGlvbigpIGNvbnN0Cit7CisgICAgaWYgKCFtX3F0TW92aWUpCisgICAgICAgIHJldHVybiAwOwor
ICAgIHJldHVybiBtX3F0TW92aWUtPmR1cmF0aW9uKCk7Cit9CisKK2Zsb2F0IE1lZGlhUGxheWVy
UHJpdmF0ZTo6Y3VycmVudFRpbWUoKSBjb25zdAoreworICAgIGlmICghbV9xdE1vdmllKQorICAg
ICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbV9xdE1vdmllLT5jdXJyZW50VGltZSgpOworfQor
Cit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2VlayhmbG9hdCB0aW1lKQoreworICAgIGNhbmNl
bFNlZWsoKTsKKyAgICAKKyAgICBpZiAoIW1fcXRNb3ZpZSkKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIGlmICh0aW1lID4gZHVyYXRpb24oKSkKKyAgICAgICAgdGltZSA9IGR1cmF0aW9uKCk7
CisgICAgCisgICAgbV9zZWVrVG8gPSB0aW1lOworICAgIGlmIChtYXhUaW1lTG9hZGVkKCkgPj0g
bV9zZWVrVG8pCisgICAgICAgIGRvU2VlaygpOworICAgIGVsc2UgCisgICAgICAgIG1fc2Vla1Rp
bWVyLnN0YXJ0KDAsIDAuNWYpOworfQorICAgIAordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmRv
U2VlaygpIAoreworICAgIGZsb2F0IG9sZFJhdGUgPSBtX3F0TW92aWUtPnJhdGUoKTsKKyAgICBp
ZiAob2xkUmF0ZSkKKyAgICAgICAgbV9xdE1vdmllLT5zZXRSYXRlKDApOworICAgIG1fcXRNb3Zp
ZS0+c2V0Q3VycmVudFRpbWUobV9zZWVrVG8pOworICAgIGZsb2F0IHRpbWVBZnRlclNlZWsgPSBj
dXJyZW50VGltZSgpOworICAgIC8vIHJlc3RvcmUgcGxheWJhY2sgb25seSBpZiBub3QgYXQgZW5k
LCBvdGhld2lzZSBRVE1vdmllIHdpbGwgbG9vcAorICAgIGlmIChvbGRSYXRlICYmIHRpbWVBZnRl
clNlZWsgPCBkdXJhdGlvbigpKQorICAgICAgICBtX3F0TW92aWUtPnNldFJhdGUob2xkUmF0ZSk7
CisgICAgY2FuY2VsU2VlaygpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6Y2FuY2Vs
U2VlaygpCit7CisgICAgbV9zZWVrVG8gPSAtMTsKKyAgICBtX3NlZWtUaW1lci5zdG9wKCk7Cit9
CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZWVrVGltZXJGaXJlZChUaW1lcjxNZWRpYVBs
YXllclByaXZhdGU+KikKK3sgICAgICAgIAorICAgIGlmICghbV9xdE1vdmllIHx8ICFzZWVraW5n
KCkgfHwgY3VycmVudFRpbWUoKSA9PSBtX3NlZWtUbykgeworICAgICAgICBjYW5jZWxTZWVrKCk7
CisgICAgICAgIHVwZGF0ZVN0YXRlcygpOworICAgICAgICBtX3BsYXllci0+dGltZUNoYW5nZWQo
KTsgCisgICAgICAgIHJldHVybjsKKyAgICB9IAorICAgIAorICAgIGlmIChtYXhUaW1lTG9hZGVk
KCkgPj0gbV9zZWVrVG8pCisgICAgICAgIGRvU2VlaygpOworICAgIGVsc2UgeworICAgICAgICBN
ZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIHN0YXRlID0gbmV0d29ya1N0YXRlKCk7CisgICAgICAg
IGlmIChzdGF0ZSA9PSBNZWRpYVBsYXllcjo6RW1wdHkgfHwgc3RhdGUgPT0gTWVkaWFQbGF5ZXI6
OkxvYWRlZCkgeworICAgICAgICAgICAgY2FuY2VsU2VlaygpOworICAgICAgICAgICAgdXBkYXRl
U3RhdGVzKCk7CisgICAgICAgICAgICBtX3BsYXllci0+dGltZUNoYW5nZWQoKTsKKyAgICAgICAg
fQorICAgIH0KK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGU6OnBhdXNlZCgpIGNvbnN0Cit7
CisgICAgaWYgKCFtX3F0TW92aWUpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBt
X3F0TW92aWUtPnJhdGUoKSA9PSAwLjBmOworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6
c2Vla2luZygpIGNvbnN0Cit7CisgICAgaWYgKCFtX3F0TW92aWUpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICByZXR1cm4gbV9zZWVrVG8gPj0gMDsKK30KKworSW50U2l6ZSBNZWRpYVBsYXll
clByaXZhdGU6Om5hdHVyYWxTaXplKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcXRNb3ZpZSkKKyAg
ICAgICAgcmV0dXJuIEludFNpemUoKTsKKyAgICBpbnQgd2lkdGg7CisgICAgaW50IGhlaWdodDsK
KyAgICBtX3F0TW92aWUtPmdldE5hdHVyYWxTaXplKHdpZHRoLCBoZWlnaHQpOworICAgIHJldHVy
biBJbnRTaXplKHdpZHRoLCBoZWlnaHQpOworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6
aGFzVmlkZW8oKSBjb25zdAoreworICAgIGlmICghbV9xdE1vdmllKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgcmV0dXJuIG1fcXRNb3ZpZS0+aGFzVmlkZW8oKTsKK30KKworYm9vbCBNZWRp
YVBsYXllclByaXZhdGU6Omhhc0F1ZGlvKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcXRNb3ZpZSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBtX3F0TW92aWUtPmhhc0F1ZGlvKCk7
Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRWb2x1bWUoZmxvYXQgdm9sdW1lKQor
eworICAgIGlmICghbV9xdE1vdmllKQorICAgICAgICByZXR1cm47CisgICAgbV9xdE1vdmllLT5z
ZXRWb2x1bWUodm9sdW1lKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNldFJhdGUo
ZmxvYXQgcmF0ZSkKK3sKKyAgICBpZiAoIW1fcXRNb3ZpZSkKKyAgICAgICAgcmV0dXJuOworICAg
IG1fcXRNb3ZpZS0+c2V0UmF0ZShyYXRlKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6
OnNldFByZXNlcnZlc1BpdGNoKGJvb2wgcHJlc2VydmVzUGl0Y2gpCit7CisgICAgaWYgKCFtX3F0
TW92aWUpCisgICAgICAgIHJldHVybjsKKyAgICBtX3F0TW92aWUtPnNldFByZXNlcnZlc1BpdGNo
KHByZXNlcnZlc1BpdGNoKTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGU6Omhhc0Nsb3Nl
ZENhcHRpb25zKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcXRNb3ZpZSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIHJldHVybiBtX3F0TW92aWUtPmhhc0Nsb3NlZENhcHRpb25zKCk7Cit9CisK
K3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRDbG9zZWRDYXB0aW9uc1Zpc2libGUoYm9vbCB2
aXNpYmxlKQoreworICAgIGlmICghbV9xdE1vdmllKQorICAgICAgICByZXR1cm47CisgICAgbV9x
dE1vdmllLT5zZXRDbG9zZWRDYXB0aW9uc1Zpc2libGUodmlzaWJsZSk7Cit9CisKK1Bhc3NSZWZQ
dHI8VGltZVJhbmdlcz4gTWVkaWFQbGF5ZXJQcml2YXRlOjpidWZmZXJlZCgpIGNvbnN0Cit7Cisg
ICAgUmVmUHRyPFRpbWVSYW5nZXM+IHRpbWVSYW5nZXMgPSBUaW1lUmFuZ2VzOjpjcmVhdGUoKTsK
KyAgICBmbG9hdCBsb2FkZWQgPSBtYXhUaW1lTG9hZGVkKCk7CisgICAgLy8gcnRzcCBzdHJlYW1z
IGFyZSBub3QgYnVmZmVyZWQKKyAgICBpZiAoIW1faXNTdHJlYW1pbmcgJiYgbG9hZGVkID4gMCkK
KyAgICAgICAgdGltZVJhbmdlcy0+YWRkKDAsIGxvYWRlZCk7CisgICAgcmV0dXJuIHRpbWVSYW5n
ZXMucmVsZWFzZSgpOworfQorCitmbG9hdCBNZWRpYVBsYXllclByaXZhdGU6Om1heFRpbWVTZWVr
YWJsZSgpIGNvbnN0Cit7CisgICAgLy8gaW5maW5pdGUgZHVyYXRpb24gbWVhbnMgbGl2ZSBzdHJl
YW0KKyAgICByZXR1cm4gIWlzZmluaXRlKGR1cmF0aW9uKCkpID8gMCA6IG1heFRpbWVMb2FkZWQo
KTsKK30KKworZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlOjptYXhUaW1lTG9hZGVkKCkgY29uc3QK
K3sKKyAgICBpZiAoIW1fcXRNb3ZpZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG1f
cXRNb3ZpZS0+bWF4VGltZUxvYWRlZCgpOyAKK30KKwordW5zaWduZWQgTWVkaWFQbGF5ZXJQcml2
YXRlOjpieXRlc0xvYWRlZCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3F0TW92aWUpCisgICAgICAg
IHJldHVybiAwOworICAgIGZsb2F0IGR1ciA9IGR1cmF0aW9uKCk7CisgICAgZmxvYXQgbWF4VGlt
ZSA9IG1heFRpbWVMb2FkZWQoKTsKKyAgICBpZiAoIWR1cikKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgcmV0dXJuIHRvdGFsQnl0ZXMoKSAqIG1heFRpbWUgLyBkdXI7Cit9CisKK3Vuc2lnbmVkIE1l
ZGlhUGxheWVyUHJpdmF0ZTo6dG90YWxCeXRlcygpIGNvbnN0Cit7CisgICAgaWYgKCFtX3F0TW92
aWUpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBtX3F0TW92aWUtPmRhdGFTaXplKCk7
Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpjYW5jZWxMb2FkKCkKK3sKKyAgICBpZiAo
bV9uZXR3b3JrU3RhdGUgPCBNZWRpYVBsYXllcjo6TG9hZGluZyB8fCBtX25ldHdvcmtTdGF0ZSA9
PSBNZWRpYVBsYXllcjo6TG9hZGVkKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgdGVhckRv
d25WaWRlb1JlbmRlcmluZygpOworCisgICAgLy8gQ2FuY2VsIHRoZSBsb2FkIGJ5IGRlc3Ryb3lp
bmcgdGhlIG1vdmllLgorICAgIG1fcXRNb3ZpZS5jbGVhcigpOworCisgICAgdXBkYXRlU3RhdGVz
KCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjp1cGRhdGVTdGF0ZXMoKQoreworICAg
IE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgb2xkTmV0d29ya1N0YXRlID0gbV9uZXR3b3JrU3Rh
dGU7CisgICAgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgb2xkUmVhZHlTdGF0ZSA9IG1fcmVhZHlT
dGF0ZTsKKyAgCisgICAgbG9uZyBsb2FkU3RhdGUgPSBtX3F0TW92aWUgPyBtX3F0TW92aWUtPmxv
YWRTdGF0ZSgpIDogUVRNb3ZpZUxvYWRTdGF0ZUVycm9yOworCisgICAgaWYgKGxvYWRTdGF0ZSA+
PSBRVE1vdmllTG9hZFN0YXRlTG9hZGVkICYmIG1fcmVhZHlTdGF0ZSA8IE1lZGlhUGxheWVyOjpI
YXZlTWV0YWRhdGEpIHsKKyAgICAgICAgbV9xdE1vdmllLT5kaXNhYmxlVW5zdXBwb3J0ZWRUcmFj
a3MobV9lbmFibGVkVHJhY2tDb3VudCwgbV90b3RhbFRyYWNrQ291bnQpOworICAgICAgICBpZiAo
bV9wbGF5ZXItPmluTWVkaWFEb2N1bWVudCgpKSB7CisgICAgICAgICAgICBpZiAoIW1fZW5hYmxl
ZFRyYWNrQ291bnQgfHwgbV9lbmFibGVkVHJhY2tDb3VudCAhPSBtX3RvdGFsVHJhY2tDb3VudCkg
eworICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSB0eXBlIG9mIG1lZGlhIHRoYXQgd2UgZG8g
bm90IGhhbmRsZSBkaXJlY3RseSB3aXRoIGEgPHZpZGVvPiAKKyAgICAgICAgICAgICAgICAvLyBl
bGVtZW50LCBlZy4gUXVpY2tUaW1lIFZSLCBhIG1vdmllIHdpdGggYSBzcHJpdGUgdHJhY2ssIGV0
Yy4gVGVsbCB0aGUgCisgICAgICAgICAgICAgICAgLy8gTWVkaWFQbGF5ZXJDbGllbnQgdGhhdCB3
ZSB3b24ndCBzdXBwb3J0IGl0LgorICAgICAgICAgICAgICAgIHNhd1Vuc3VwcG9ydGVkVHJhY2tz
KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9IGVs
c2UgaWYgKCFtX2VuYWJsZWRUcmFja0NvdW50KQorICAgICAgICAgICAgbG9hZFN0YXRlID0gUVRN
b3ZpZUxvYWRTdGF0ZUVycm9yOworICAgIH0KKworICAgIC8vICJMb2FkZWQiIGlzIHJlc2VydmVk
IGZvciBmdWxseSBidWZmZXJlZCBtb3ZpZXMsIG5ldmVyIHRoZSBjYXNlIHdoZW4gc3RyZWFtaW5n
CisgICAgaWYgKGxvYWRTdGF0ZSA+PSBRVE1vdmllTG9hZFN0YXRlQ29tcGxldGUgJiYgIW1faXNT
dHJlYW1pbmcpIHsKKyAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TG9hZGVk
OworICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUVub3VnaERhdGE7Cisg
ICAgfSBlbHNlIGlmIChsb2FkU3RhdGUgPj0gUVRNb3ZpZUxvYWRTdGF0ZVBsYXl0aHJvdWdoT0sp
IHsKKyAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVFbm91Z2hEYXRhOwor
ICAgIH0gZWxzZSBpZiAobG9hZFN0YXRlID49IFFUTW92aWVMb2FkU3RhdGVQbGF5YWJsZSkgewor
ICAgICAgICAvLyBGSVhNRTogVGhpcyBtaWdodCBub3Qgd29yayBjb3JyZWN0bHkgaW4gc3RyZWFt
aW5nIGNhc2UsIDxyZGFyOi8vcHJvYmxlbS81NjkzOTY3PgorICAgICAgICBtX3JlYWR5U3RhdGUg
PSBjdXJyZW50VGltZSgpIDwgbWF4VGltZUxvYWRlZCgpID8gTWVkaWFQbGF5ZXI6OkhhdmVGdXR1
cmVEYXRhIDogTWVkaWFQbGF5ZXI6OkhhdmVDdXJyZW50RGF0YTsKKyAgICB9IGVsc2UgaWYgKGxv
YWRTdGF0ZSA+PSBRVE1vdmllTG9hZFN0YXRlTG9hZGVkKSB7CisgICAgICAgIG1fcmVhZHlTdGF0
ZSA9IE1lZGlhUGxheWVyOjpIYXZlTWV0YWRhdGE7CisgICAgfSBlbHNlIGlmIChsb2FkU3RhdGUg
PiBRVE1vdmllTG9hZFN0YXRlRXJyb3IpIHsKKyAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRp
YVBsYXllcjo6TG9hZGluZzsKKyAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6Okhh
dmVOb3RoaW5nOyAgICAgICAgCisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG1fcGxheWVyLT5p
bk1lZGlhRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgLy8gU29tZXRoaW5nIHdlbnQgd3Jvbmcg
aW4gdGhlIGxvYWRpbmcgb2YgbWVkaWEgd2l0aGluIGEgc3RhbmRhbG9uZSBmaWxlLiAKKyAgICAg
ICAgICAgIC8vIFRoaXMgY2FuIG9jY3VyIHdpdGggY2hhaW5lZCByZWYgbW92aWVzIHRoYXQgZXZl
bnR1YWxseSByZXNvbHZlIHRvIGEKKyAgICAgICAgICAgIC8vIGZpbGUgd2UgZG9uJ3Qgc3VwcG9y
dC4KKyAgICAgICAgICAgIHNhd1Vuc3VwcG9ydGVkVHJhY2tzKCk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBmbG9hdCBsb2FkZWQgPSBtYXhUaW1lTG9hZGVkKCk7
CisgICAgICAgIGlmICghbG9hZGVkKQorICAgICAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQ
bGF5ZXI6OkhhdmVOb3RoaW5nOworCisgICAgICAgIGlmICghbV9lbmFibGVkVHJhY2tDb3VudCkK
KyAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkZvcm1hdEVycm9yOwor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZGlmZmVyZW50
aWF0ZSBiZXR3ZWVuIGxvYWQvbmV0d29yayBlcnJvcnMgYW5kIGRlY29kZSBlcnJvcnMgPHJkYXI6
Ly9wcm9ibGVtLzU2MDU2OTI+CisgICAgICAgICAgICBpZiAobG9hZGVkID4gMCkKKyAgICAgICAg
ICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpEZWNvZGVFcnJvcjsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6
SGF2ZU5vdGhpbmc7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoaXNSZWFkeUZvclJlbmRl
cmluZygpICYmICFoYXNTZXRVcFZpZGVvUmVuZGVyaW5nKCkpCisgICAgICAgIHNldFVwVmlkZW9S
ZW5kZXJpbmcoKTsKKworICAgIGlmIChzZWVraW5nKCkpCisgICAgICAgIG1fcmVhZHlTdGF0ZSA9
IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZzsKKyAgICAKKyAgICBpZiAobV9uZXR3b3JrU3RhdGUg
IT0gb2xkTmV0d29ya1N0YXRlKQorICAgICAgICBtX3BsYXllci0+bmV0d29ya1N0YXRlQ2hhbmdl
ZCgpOworICAgIGlmIChtX3JlYWR5U3RhdGUgIT0gb2xkUmVhZHlTdGF0ZSkKKyAgICAgICAgbV9w
bGF5ZXItPnJlYWR5U3RhdGVDaGFuZ2VkKCk7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRl
Ojppc1JlYWR5Rm9yUmVuZGVyaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9yZWFkeVN0YXRl
ID49IE1lZGlhUGxheWVyOjpIYXZlTWV0YWRhdGEgJiYgbV9wbGF5ZXItPnZpc2libGUoKTsKK30K
Kwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNhd1Vuc3VwcG9ydGVkVHJhY2tzKCkKK3sKKyAg
ICBtX3F0TW92aWUtPnNldERpc2FibGVkKHRydWUpOworICAgIG1faGFzVW5zdXBwb3J0ZWRUcmFj
a3MgPSB0cnVlOworICAgIG1fcGxheWVyLT5tZWRpYVBsYXllckNsaWVudCgpLT5tZWRpYVBsYXll
clNhd1Vuc3VwcG9ydGVkVHJhY2tzKG1fcGxheWVyKTsKK30KKwordm9pZCBNZWRpYVBsYXllclBy
aXZhdGU6OmRpZEVuZCgpCit7CisgICAgaWYgKG1faGFzVW5zdXBwb3J0ZWRUcmFja3MpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fc3RhcnRlZFBsYXlpbmcgPSBmYWxzZTsKKyNpZiBEUkFXX0ZS
QU1FX1JBVEUKKyAgICBtX3RpbWVTdG9wcGVkUGxheWluZyA9IFdURjo6Y3VycmVudFRpbWUoKTsK
KyNlbmRpZgorICAgIHVwZGF0ZVN0YXRlcygpOworICAgIG1fcGxheWVyLT50aW1lQ2hhbmdlZCgp
OworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0U2l6ZShjb25zdCBJbnRTaXplJiBz
aXplKSAKK3sgCisgICAgaWYgKG1faGFzVW5zdXBwb3J0ZWRUcmFja3MgfHwgIW1fcXRNb3ZpZSB8
fCBtX3NpemUgPT0gc2l6ZSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fc2l6ZSA9IHNpemU7Cisg
ICAgbV9xdE1vdmllLT5zZXRTaXplKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Cit9CisK
K3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKK3sKKyAg
ICBpZiAobV9oYXNVbnN1cHBvcnRlZFRyYWNrcyB8fCAhbV9xdE1vdmllIHx8IG1fdmlzaWJsZSA9
PSB2aXNpYmxlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3F0TW92aWUtPnNldFZpc2libGUo
dmlzaWJsZSk7CisgICAgbV92aXNpYmxlID0gdmlzaWJsZTsKKyAgICBpZiAobV92aXNpYmxlKSB7
CisgICAgICAgIGlmIChpc1JlYWR5Rm9yUmVuZGVyaW5nKCkpCisgICAgICAgICAgICBzZXRVcFZp
ZGVvUmVuZGVyaW5nKCk7CisgICAgfSBlbHNlCisgICAgICAgIHRlYXJEb3duVmlkZW9SZW5kZXJp
bmcoKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnBhaW50KEdyYXBoaWNzQ29udGV4
dCogcCwgY29uc3QgSW50UmVjdCYgcikKK3sKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCisgICAgaWYgKG1fcXRWaWRlb0xheWVyKQorICAgICAgICByZXR1cm47CisjZW5kaWYKKyAg
ICBpZiAocC0+cGFpbnRpbmdEaXNhYmxlZCgpIHx8ICFtX3F0TW92aWUgfHwgbV9oYXNVbnN1cHBv
cnRlZFRyYWNrcykKKyAgICAgICAgcmV0dXJuOworCisgICAgYm9vbCB1c2luZ1RlbXBCaXRtYXAg
PSBmYWxzZTsKKyAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0OjpXaW5kb3dzQml0bWFwPiBiaXRt
YXA7CisgICAgSERDIGhkYyA9IHAtPmdldFdpbmRvd3NDb250ZXh0KHIpOworICAgIGlmICghaGRj
KSB7CisgICAgICAgIC8vIFRoZSBncmFwaGljcyBjb250ZXh0IGRvZXNuJ3QgaGF2ZSBhbiBhc3Nv
Y2lhdGVkIEhEQyBzbyBjcmVhdGUgYSB0ZW1wb3JhcnkKKyAgICAgICAgLy8gYml0bWFwIHdoZXJl
IFFUTW92aWVXaW4gY2FuIGRyYXcgdGhlIGZyYW1lIGFuZCB3ZSBjYW4gY29weSBpdC4KKyAgICAg
ICAgdXNpbmdUZW1wQml0bWFwID0gdHJ1ZTsKKyAgICAgICAgYml0bWFwLnNldChwLT5jcmVhdGVX
aW5kb3dzQml0bWFwKHIuc2l6ZSgpKSk7CisgICAgICAgIGhkYyA9IGJpdG1hcC0+aGRjKCk7CisK
KyAgICAgICAgLy8gRklYTUU6IGlzIHRoaXMgbmVjZXNzYXJ5Pz8KKyAgICAgICAgWEZPUk0geGZv
cm07CisgICAgICAgIHhmb3JtLmVNMTEgPSAxLjBmOworICAgICAgICB4Zm9ybS5lTTEyID0gMC4w
ZjsKKyAgICAgICAgeGZvcm0uZU0yMSA9IDAuMGY7CisgICAgICAgIHhmb3JtLmVNMjIgPSAxLjBm
OworICAgICAgICB4Zm9ybS5lRHggPSAtci54KCk7CisgICAgICAgIHhmb3JtLmVEeSA9IC1yLnko
KTsKKyAgICAgICAgU2V0V29ybGRUcmFuc2Zvcm0oaGRjLCAmeGZvcm0pOworICAgIH0KKworICAg
IG1fcXRNb3ZpZS0+cGFpbnQoaGRjLCByLngoKSwgci55KCkpOworICAgIGlmICh1c2luZ1RlbXBC
aXRtYXApCisgICAgICAgIHAtPmRyYXdXaW5kb3dzQml0bWFwKGJpdG1hcC5nZXQoKSwgci50b3BM
ZWZ0KCkpOworICAgIGVsc2UKKyAgICAgICAgcC0+cmVsZWFzZVdpbmRvd3NDb250ZXh0KGhkYywg
cik7CisKKyAgICBwYWludENvbXBsZXRlZCgqcCwgcik7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlOjpwYWludENvbXBsZXRlZChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IElu
dFJlY3QmIHJlY3QpCit7CisgICAgbV9uZXdGcmFtZUF2YWlsYWJsZSA9IGZhbHNlOworCisjaWYg
RFJBV19GUkFNRV9SQVRFCisgICAgaWYgKG1fZnJhbWVDb3VudFdoaWxlUGxheWluZyA+IDEwKSB7
CisgICAgICAgIGRvdWJsZSBpbnRlcnZhbCA9ICBtX3N0YXJ0ZWRQbGF5aW5nID8gV1RGOjpjdXJy
ZW50VGltZSgpIC0gbV90aW1lU3RhcnRlZFBsYXlpbmcgOiBtX3RpbWVTdG9wcGVkUGxheWluZyAt
IG1fdGltZVN0YXJ0ZWRQbGF5aW5nOworICAgICAgICBkb3VibGUgZnJhbWVSYXRlID0gKG1fZnJh
bWVDb3VudFdoaWxlUGxheWluZyAtIDEpIC8gaW50ZXJ2YWw7CisgICAgICAgIENHQ29udGV4dFJl
ZiBjZ0NvbnRleHQgPSBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOworICAgICAgICBDR1JlY3Qg
ZHJhd1JlY3QgPSByZWN0OworCisgICAgICAgIGNoYXIgdGV4dFs4XTsKKyAgICAgICAgX3NucHJp
bnRmKHRleHQsIHNpemVvZih0ZXh0KSwgIiUxLjJmIiwgZnJhbWVSYXRlKTsKKworICAgICAgICBz
dGF0aWMgY29uc3QgaW50IGZvbnRTaXplID0gMjU7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQg
Zm9udENoYXJXaWR0aCA9IDEyOworICAgICAgICBzdGF0aWMgY29uc3QgaW50IGJveEhlaWdodCA9
IDI1OworICAgICAgICBzdGF0aWMgY29uc3QgaW50IGJveEJvcmRlcldpZHRoID0gNDsKKyAgICAg
ICAgZHJhd1JlY3Quc2l6ZS53aWR0aCA9IGJveEJvcmRlcldpZHRoICogMiArIGZvbnRDaGFyV2lk
dGggKiBzdHJsZW4odGV4dCk7CisgICAgICAgIGRyYXdSZWN0LnNpemUuaGVpZ2h0ID0gYm94SGVp
Z2h0OworCisgICAgICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY2dDb250ZXh0KTsKKyNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgICAgIGlmIChtX3F0VmlkZW9MYXllcikKKyAg
ICAgICAgICAgIENHQ29udGV4dFNjYWxlQ1RNKGNnQ29udGV4dCwgMSwgLTEpOworICAgICAgICBD
R0NvbnRleHRUcmFuc2xhdGVDVE0oY2dDb250ZXh0LCByZWN0LndpZHRoKCkgLSBkcmF3UmVjdC5z
aXplLndpZHRoLCBtX3F0VmlkZW9MYXllciA/IC1yZWN0LmhlaWdodCgpIDogMCk7CisjZWxzZQor
ICAgICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY2dDb250ZXh0LCByZWN0LndpZHRoKCkgLSBk
cmF3UmVjdC5zaXplLndpZHRoLCAwKTsKKyNlbmRpZgorICAgICAgICBzdGF0aWMgY29uc3QgQ0dG
bG9hdCBiYWNrZ3JvdW5kQ29sb3JbNF0gPSB7IDAuOTgsIDAuOTgsIDAuODIsIDAuOCB9OworICAg
ICAgICBDR0NvbnRleHRTZXRGaWxsQ29sb3IoY2dDb250ZXh0LCBiYWNrZ3JvdW5kQ29sb3IpOwor
ICAgICAgICBDR0NvbnRleHRGaWxsUmVjdChjZ0NvbnRleHQsIGRyYXdSZWN0KTsKKworICAgICAg
ICBzdGF0aWMgY29uc3QgQ0dGbG9hdCB0ZXh0Q29sb3JbNF0gPSB7IDAsIDAsIDAsIDEgfTsKKyAg
ICAgICAgQ0dDb250ZXh0U2V0RmlsbENvbG9yKGNnQ29udGV4dCwgdGV4dENvbG9yKTsKKyAgICAg
ICAgQ0dDb250ZXh0U2V0VGV4dE1hdHJpeChjZ0NvbnRleHQsIENHQWZmaW5lVHJhbnNmb3JtTWFr
ZVNjYWxlKDEsIC0xKSk7CisgICAgICAgIENHQ29udGV4dFNlbGVjdEZvbnQoY2dDb250ZXh0LCAi
SGVsdmV0aWNhIiwgZm9udFNpemUsIGtDR0VuY29kaW5nTWFjUm9tYW4pOworCisgICAgICAgIENH
Q29udGV4dFNob3dUZXh0QXRQb2ludChjZ0NvbnRleHQsIGRyYXdSZWN0Lm9yaWdpbi54ICsgYm94
Qm9yZGVyV2lkdGgsIGRyYXdSZWN0Lm9yaWdpbi55ICsgYm94SGVpZ2h0IC0gYm94Qm9yZGVyV2lk
dGgsIHRleHQsIHN0cmxlbih0ZXh0KSk7CisgICAgICAgIAorICAgICAgICBDR0NvbnRleHRSZXN0
b3JlR1N0YXRlKGNnQ29udGV4dCk7ICAgICAgICAKKyAgICB9CisjZW5kaWYKK30KKworc3RhdGlj
IEhhc2hTZXQ8U3RyaW5nPiBtaW1lVHlwZUNhY2hlKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKEhhc2hTZXQ8U3RyaW5nPiwgdHlwZUNhY2hlLCAoKSk7CisgICAgc3RhdGljIGJvb2wgdHlw
ZUxpc3RJbml0aWFsaXplZCA9IGZhbHNlOworCisgICAgaWYgKCF0eXBlTGlzdEluaXRpYWxpemVk
KSB7CisgICAgICAgIHVuc2lnbmVkIGNvdW50ID0gUVRNb3ZpZVdpbjo6Y291bnRTdXBwb3J0ZWRU
eXBlcygpOworICAgICAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgY291bnQ7IG4rKykgewor
ICAgICAgICAgICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcjsKKyAgICAgICAgICAgIHVuc2lnbmVk
IGxlbjsKKyAgICAgICAgICAgIFFUTW92aWVXaW46OmdldFN1cHBvcnRlZFR5cGUobiwgY2hhcmFj
dGVyLCBsZW4pOworICAgICAgICAgICAgaWYgKGxlbikKKyAgICAgICAgICAgICAgICB0eXBlQ2Fj
aGUuYWRkKFN0cmluZyhjaGFyYWN0ZXIsIGxlbikpOworICAgICAgICB9CisKKyAgICAgICAgdHlw
ZUxpc3RJbml0aWFsaXplZCA9IHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiB0eXBlQ2Fj
aGU7Cit9IAorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6Z2V0U3VwcG9ydGVkVHlwZXMoSGFz
aFNldDxTdHJpbmc+JiB0eXBlcykKK3sKKyAgICB0eXBlcyA9IG1pbWVUeXBlQ2FjaGUoKTsKK30g
CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlOjppc0F2YWlsYWJsZSgpCit7CisgICAgcmV0dXJu
IFFUTW92aWVXaW46OmluaXRpYWxpemVRdWlja1RpbWUoKTsKK30KKworTWVkaWFQbGF5ZXI6OlN1
cHBvcnRzVHlwZSBNZWRpYVBsYXllclByaXZhdGU6OnN1cHBvcnRzVHlwZShjb25zdCBTdHJpbmcm
IHR5cGUsIGNvbnN0IFN0cmluZyYgY29kZWNzKQoreworICAgIC8vIG9ubHkgcmV0dXJuICJJc1N1
cHBvcnRlZCIgaWYgdGhlcmUgaXMgbm8gY29kZWNzIHBhcmFtZXRlciBmb3Igbm93IGFzIHRoZXJl
IGlzIG5vIHdheSB0byBhc2sgUVQgaWYgaXQgc3VwcG9ydHMgYW4KKyAgICAvLyAgZXh0ZW5kZWQg
TUlNRSB0eXBlCisgICAgcmV0dXJuIG1pbWVUeXBlQ2FjaGUoKS5jb250YWlucyh0eXBlKSA/IChj
b2RlY3MuaXNFbXB0eSgpID8gTWVkaWFQbGF5ZXI6Ok1heUJlU3VwcG9ydGVkIDogTWVkaWFQbGF5
ZXI6OklzU3VwcG9ydGVkKSA6IE1lZGlhUGxheWVyOjpJc05vdFN1cHBvcnRlZDsKK30KKwordm9p
ZCBNZWRpYVBsYXllclByaXZhdGU6Om1vdmllRW5kZWQoUVRNb3ZpZVdpbiogbW92aWUpCit7Cisg
ICAgaWYgKG1faGFzVW5zdXBwb3J0ZWRUcmFja3MpCisgICAgICAgIHJldHVybjsKKworICAgIEFT
U0VSVChtX3F0TW92aWUuZ2V0KCkgPT0gbW92aWUpOworICAgIGRpZEVuZCgpOworfQorCit2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZTo6bW92aWVMb2FkU3RhdGVDaGFuZ2VkKFFUTW92aWVXaW4qIG1v
dmllKQoreworICAgIGlmIChtX2hhc1Vuc3VwcG9ydGVkVHJhY2tzKQorICAgICAgICByZXR1cm47
CisKKyAgICBBU1NFUlQobV9xdE1vdmllLmdldCgpID09IG1vdmllKTsKKyAgICB1cGRhdGVTdGF0
ZXMoKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6Om1vdmllVGltZUNoYW5nZWQoUVRN
b3ZpZVdpbiogbW92aWUpCit7CisgICAgaWYgKG1faGFzVW5zdXBwb3J0ZWRUcmFja3MpCisgICAg
ICAgIHJldHVybjsKKworICAgIEFTU0VSVChtX3F0TW92aWUuZ2V0KCkgPT0gbW92aWUpOworICAg
IHVwZGF0ZVN0YXRlcygpOworICAgIG1fcGxheWVyLT50aW1lQ2hhbmdlZCgpOworfQorCit2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZTo6bW92aWVOZXdJbWFnZUF2YWlsYWJsZShRVE1vdmllV2luKiBt
b3ZpZSkKK3sKKyAgICBpZiAobV9oYXNVbnN1cHBvcnRlZFRyYWNrcykKKyAgICAgICAgcmV0dXJu
OworCisgICAgQVNTRVJUKG1fcXRNb3ZpZS5nZXQoKSA9PSBtb3ZpZSk7CisjaWYgRFJBV19GUkFN
RV9SQVRFCisgICAgaWYgKG1fc3RhcnRlZFBsYXlpbmcpIHsKKyAgICAgICAgbV9mcmFtZUNvdW50
V2hpbGVQbGF5aW5nKys7CisgICAgICAgIC8vIFRvIGVsaW1pbmF0ZSBwcmVyb2xsIGNvc3RzIGZy
b20gb3VyIGNhbGN1bGF0aW9uLCBvdXIgZnJhbWUgcmF0ZSBjYWxjdWxhdGlvbiBleGNsdWRlcwor
ICAgICAgICAvLyB0aGUgZmlyc3QgZnJhbWUgZHJhd24gYWZ0ZXIgcGxheWJhY2sgc3RhcnRzLgor
ICAgICAgICBpZiAobV9mcmFtZUNvdW50V2hpbGVQbGF5aW5nID09IDEpCisgICAgICAgICAgICBt
X3RpbWVTdGFydGVkUGxheWluZyA9IFdURjo6Y3VycmVudFRpbWUoKTsKKyAgICB9CisjZW5kaWYK
KworICAgIG1fbmV3RnJhbWVBdmFpbGFibGUgPSB0cnVlOworCisjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQorICAgIGlmIChtX3F0VmlkZW9MYXllcikKKyAgICAgICAgbV9xdFZpZGVv
TGF5ZXItPnBsYXRmb3JtTGF5ZXIoKS0+c2V0TmVlZHNEaXNwbGF5KCk7CisgICAgZWxzZQorI2Vu
ZGlmCisgICAgICAgIG1fcGxheWVyLT5yZXBhaW50KCk7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQ
cml2YXRlOjpoYXNTaW5nbGVTZWN1cml0eU9yaWdpbigpIGNvbnN0Cit7CisgICAgLy8gV2UgdGVs
bCBxdWlja3RpbWUgdG8gZGlzYWxsb3cgcmVzb3VyY2VzIHRoYXQgY29tZSBmcm9tIGRpZmZlcmVu
dCBvcmlnaW5zCisgICAgLy8gc28gd2UgYWxsIG1lZGlhIGlzIHNpbmdsZSBvcmlnaW4uCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK01lZGlhUGxheWVyUHJpdmF0ZTo6TWVkaWFSZW5kZXJpbmdNb2Rl
IE1lZGlhUGxheWVyUHJpdmF0ZTo6Y3VycmVudFJlbmRlcmluZ01vZGUoKSBjb25zdAoreworICAg
IGlmICghbV9xdE1vdmllKQorICAgICAgICByZXR1cm4gTWVkaWFSZW5kZXJpbmdOb25lOworCisj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIGlmIChtX3F0VmlkZW9MYXllcikK
KyAgICAgICAgcmV0dXJuIE1lZGlhUmVuZGVyaW5nTW92aWVMYXllcjsKKyNlbmRpZgorCisgICAg
cmV0dXJuIE1lZGlhUmVuZGVyaW5nU29mdHdhcmVSZW5kZXJlcjsKK30KKworTWVkaWFQbGF5ZXJQ
cml2YXRlOjpNZWRpYVJlbmRlcmluZ01vZGUgTWVkaWFQbGF5ZXJQcml2YXRlOjpwcmVmZXJyZWRS
ZW5kZXJpbmdNb2RlKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcGxheWVyLT5mcmFtZVZpZXcoKSB8
fCAhbV9xdE1vdmllKQorICAgICAgICByZXR1cm4gTWVkaWFSZW5kZXJpbmdOb25lOworCisjaWYg
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIGlmIChzdXBwb3J0c0FjY2VsZXJhdGVk
UmVuZGVyaW5nKCkgJiYgbV9wbGF5ZXItPm1lZGlhUGxheWVyQ2xpZW50KCktPm1lZGlhUGxheWVy
UmVuZGVyaW5nQ2FuQmVBY2NlbGVyYXRlZChtX3BsYXllcikpCisgICAgICAgIHJldHVybiBNZWRp
YVJlbmRlcmluZ01vdmllTGF5ZXI7CisjZW5kaWYKKworICAgIHJldHVybiBNZWRpYVJlbmRlcmlu
Z1NvZnR3YXJlUmVuZGVyZXI7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRVcFZp
ZGVvUmVuZGVyaW5nKCkKK3sKKyAgICBNZWRpYVJlbmRlcmluZ01vZGUgY3VycmVudE1vZGUgPSBj
dXJyZW50UmVuZGVyaW5nTW9kZSgpOworICAgIE1lZGlhUmVuZGVyaW5nTW9kZSBwcmVmZXJyZWRN
b2RlID0gcHJlZmVycmVkUmVuZGVyaW5nTW9kZSgpOworCisjaWYgIVVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKKyAgICBBU1NFUlQocHJlZmVycmVkTW9kZSAhPSBNZWRpYVJlbmRlcmluZ01v
dmllTGF5ZXIpOworI2VuZGlmCisKKyAgICBpZiAoY3VycmVudE1vZGUgPT0gcHJlZmVycmVkTW9k
ZSAmJiBjdXJyZW50TW9kZSAhPSBNZWRpYVJlbmRlcmluZ05vbmUpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmIChjdXJyZW50TW9kZSAhPSBNZWRpYVJlbmRlcmluZ05vbmUpICAKKyAgICAgICAg
dGVhckRvd25WaWRlb1JlbmRlcmluZygpOworCisgICAgaWYgKHByZWZlcnJlZE1vZGUgPT0gTWVk
aWFSZW5kZXJpbmdNb3ZpZUxheWVyKQorICAgICAgICBjcmVhdGVMYXllckZvck1vdmllKCk7CisK
KyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgaWYgKGN1cnJlbnRNb2RlID09
IE1lZGlhUmVuZGVyaW5nTW92aWVMYXllciB8fCBwcmVmZXJyZWRNb2RlID09IE1lZGlhUmVuZGVy
aW5nTW92aWVMYXllcikKKyAgICAgICAgbV9wbGF5ZXItPm1lZGlhUGxheWVyQ2xpZW50KCktPm1l
ZGlhUGxheWVyUmVuZGVyaW5nTW9kZUNoYW5nZWQobV9wbGF5ZXIpOworI2VuZGlmCit9CisKK3Zv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlOjp0ZWFyRG93blZpZGVvUmVuZGVyaW5nKCkKK3sKKyNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgaWYgKG1fcXRWaWRlb0xheWVyKQorICAg
ICAgICBkZXN0cm95TGF5ZXJGb3JNb3ZpZSgpOworI2VuZGlmCit9CisKK2Jvb2wgTWVkaWFQbGF5
ZXJQcml2YXRlOjpoYXNTZXRVcFZpZGVvUmVuZGVyaW5nKCkgY29uc3QKK3sKKyNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgcmV0dXJuIG1fcXRWaWRlb0xheWVyIHx8IGN1cnJl
bnRSZW5kZXJpbmdNb2RlKCkgIT0gTWVkaWFSZW5kZXJpbmdNb3ZpZUxheWVyOworI2Vsc2UKKyAg
ICByZXR1cm4gdHJ1ZTsKKyNlbmRpZgorfQorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQorCisvLyBVcC1jYWxsIGZyb20gY29tcG9zaXRpbmcgbGF5ZXIgZHJhd2luZyBjYWxsYmFj
ay4KK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpwYWludENvbnRlbnRzKGNvbnN0IEdyYXBoaWNz
TGF5ZXIqLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIEdyYXBoaWNzTGF5ZXJQYWludGluZ1Bo
YXNlLCBjb25zdCBJbnRSZWN0JikKK3sKKyAgICAgaWYgKG1faGFzVW5zdXBwb3J0ZWRUcmFja3Mp
CisgICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQoc3VwcG9ydHNBY2NlbGVyYXRlZFJlbmRl
cmluZygpKTsKKworICAgIC8vIE5vIHJlYXNvbiB0byByZXBsYWNlIHRoZSBjdXJyZW50IGxheWVy
IGltYWdlIHVubGVzcyB3ZSBoYXZlIHNvbWV0aGluZyBuZXcgdG8gc2hvdy4KKyAgICBpZiAoIW1f
bmV3RnJhbWVBdmFpbGFibGUpCisgICAgICAgIHJldHVybjsKKworICAgIHN0YXRpYyBDR0NvbG9y
U3BhY2VSZWYgY29sb3JTcGFjZSA9IENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpOworICAg
IHZvaWQqIGJ1ZmZlcjsKKyAgICB1bnNpZ25lZCBiaXRzUGVyUGl4ZWw7CisgICAgdW5zaWduZWQg
cm93Qnl0ZXM7CisgICAgdW5zaWduZWQgd2lkdGg7CisgICAgdW5zaWduZWQgaGVpZ2h0OworCisg
ICAgbV9xdE1vdmllLT5nZXRDdXJyZW50RnJhbWVJbmZvKGJ1ZmZlciwgYml0c1BlclBpeGVsLCBy
b3dCeXRlcywgd2lkdGgsIGhlaWdodCk7CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVy
biA7CisKKyAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBkYXRhKEFkb3B0Q0YsIENGRGF0YUNyZWF0
ZVdpdGhCeXRlc05vQ29weSgwLCBzdGF0aWNfY2FzdDxVSW50OCo+KGJ1ZmZlciksIHJvd0J5dGVz
ICogaGVpZ2h0LCBrQ0ZBbGxvY2F0b3JOdWxsKSk7CisgICAgUmV0YWluUHRyPENHRGF0YVByb3Zp
ZGVyUmVmPiBwcm92aWRlcihBZG9wdENGLCBDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhDRkRhdGEo
ZGF0YS5nZXQoKSkpOworICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBmcmFtZUltYWdlKEFkb3B0
Q0YsIENHSW1hZ2VDcmVhdGUod2lkdGgsIGhlaWdodCwgOCwgYml0c1BlclBpeGVsLCByb3dCeXRl
cywgY29sb3JTcGFjZSwgCisgICAgICAgIGtDR0JpdG1hcEJ5dGVPcmRlcjMyTGl0dGxlIHwga0NH
SW1hZ2VBbHBoYUZpcnN0LCBwcm92aWRlci5nZXQoKSwgMCwgZmFsc2UsIGtDR1JlbmRlcmluZ0lu
dGVudERlZmF1bHQpKTsKKyAgICBpZiAoIWZyYW1lSW1hZ2UpCisgICAgICAgIHJldHVybjsKKwor
ICAgIEludFJlY3QgcmVjdCgwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsK
KyAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwg
ZnJhbWVJbWFnZS5nZXQoKSk7IAorICAgIHBhaW50Q29tcGxldGVkKGNvbnRleHQsIHJlY3QpOwor
fQorI2VuZGlmCisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpjcmVhdGVMYXllckZvck1vdmll
KCkKK3sKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgQVNTRVJUKHN1cHBv
cnRzQWNjZWxlcmF0ZWRSZW5kZXJpbmcoKSk7CisKKyAgICBpZiAoIW1fcXRNb3ZpZSB8fCBtX3F0
VmlkZW9MYXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gQ3JlYXRlIGEgR3JhcGhpY3NM
YXllciB0aGF0IHdvbid0IGJlIGluc2VydGVkIGRpcmVjdGx5IGludG8gdGhlIHJlbmRlciB0cmVl
LCBidXQgd2lsbCB1c2VkIAorICAgIC8vIGFzIGEgd3JhcHBlciBmb3IgYSBXS0NBQ0ZMYXllciB3
aGljaCBnZXRzIGluc2VydGVkIGFzIHRoZSBjb250ZW50IGxheWVyIG9mIHRoZSB2aWRlbyAKKyAg
ICAvLyByZW5kZXJlcidzIEdyYXBoaWNzTGF5ZXIuCisgICAgbV9xdFZpZGVvTGF5ZXIuc2V0KG5l
dyBHcmFwaGljc0xheWVyQ0FDRih0aGlzKSk7CisgICAgaWYgKCFtX3F0VmlkZW9MYXllcikKKyAg
ICAgICAgcmV0dXJuOworCisgICAgLy8gTWFyayB0aGUgbGF5ZXIgYXMgZHJhd2luZyBpdHNlbGYs
IGFuY2hvcmVkIGluIHRoZSB0b3AgbGVmdCwgYW5kIGJvdHRvbS11cC4KKyAgICBtX3F0VmlkZW9M
YXllci0+c2V0RHJhd3NDb250ZW50KHRydWUpOworICAgIG1fcXRWaWRlb0xheWVyLT5zZXRBbmNo
b3JQb2ludChGbG9hdFBvaW50M0QoKSk7CisgICAgbV9xdFZpZGVvTGF5ZXItPnNldENvbnRlbnRz
T3JpZW50YXRpb24oR3JhcGhpY3NMYXllcjo6Q29tcG9zaXRpbmdDb29yZGluYXRlc0JvdHRvbVVw
KTsKKyNpZm5kZWYgTkRFQlVHCisgICAgbV9xdFZpZGVvTGF5ZXItPnNldE5hbWUoIlZpZGVvIGxh
eWVyIik7CisjZW5kaWYKKyAgICAvLyBUaGUgbGF5ZXIgd2lsbCBnZXQgaG9va2VkIHVwIHZpYSBS
ZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdyYXBoaWNzTGF5ZXJDb25maWd1cmF0aW9uKCkuCisj
ZW5kaWYKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmRlc3Ryb3lMYXllckZvck1vdmll
KCkKK3sKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgaWYgKCFtX3F0Vmlk
ZW9MYXllcikKKyAgICAgICAgcmV0dXJuOworICAgIG1fcXRWaWRlb0xheWVyID0gMDsKKyNlbmRp
ZgorfQorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorYm9vbCBNZWRpYVBsYXll
clByaXZhdGU6OnN1cHBvcnRzQWNjZWxlcmF0ZWRSZW5kZXJpbmcoKSBjb25zdAoreworICAgIHJl
dHVybiBpc1JlYWR5Rm9yUmVuZGVyaW5nKCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
OjphY2NlbGVyYXRlZFJlbmRlcmluZ1N0YXRlQ2hhbmdlZCgpCit7CisgICAgLy8gU2V0IHVwIG9y
IGNoYW5nZSB0aGUgcmVuZGVyaW5nIHBhdGggaWYgbmVjZXNzYXJ5LgorICAgIHNldFVwVmlkZW9S
ZW5kZXJpbmcoKTsKK30KKworI2VuZGlmCisKKworfQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENv
bnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01l
ZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQuY3BwCShyZXZpc2lvbiA1ODE4
NykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1
aWNrVGltZVZpc3VhbENvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKICNpZiBFTkFCTEUoVklERU8pCi0jaW5jbHVkZSAiTWVk
aWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lV2luLmgiCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2
YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dC5oIgogCiAjaW5jbHVkZSAiQ29va2llLmgiCiAjaW5j
bHVkZSAiQ29va2llSmFyLmgiCkBAIC0zNCw3ICszNCwxMSBAQAogI2luY2x1ZGUgIkZyYW1lVmll
dy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIktVUkwuaCIKLSNp
bmNsdWRlICJRVE1vdmllV2luLmgiCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlVGFza1Rp
bWVyLmgiCisjaW5jbHVkZSAiUVRDRkRpY3Rpb25hcnkuaCIKKyNpbmNsdWRlICJRVE1vdmllLmgi
CisjaW5jbHVkZSAiUVRNb3ZpZVRhc2suaCIKKyNpbmNsdWRlICJRVE1vdmllVmlzdWFsQ29udGV4
dC5oIgogI2luY2x1ZGUgIlNjcm9sbFZpZXcuaCIKICNpbmNsdWRlICJTb2Z0TGlua2luZy5oIgog
I2luY2x1ZGUgIlN0cmluZ0J1aWxkZXIuaCIKQEAgLTQ0LDYgKzQ4LDcgQEAKICNpbmNsdWRlIDxX
aW5pbmV0Lmg+CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL0hh
c2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9NYXRo
RXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCkBAIC01MiwzOCArNTcs
NjggQEAKICNpbmNsdWRlICJXS0NBQ0ZMYXllci5oIgogI2VuZGlmCiAKLSNpZiBEUkFXX0ZSQU1F
X1JBVEUKLSNpbmNsdWRlICJGb250LmgiCi0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVk
ZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIlJlbmRlck9iamVj
dC5oIgotI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCi0jaW5jbHVkZSAiV2luZG93cy5oIgotI2Vu
ZGlmCi0KIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKK2NvbnN0IENGU3RyaW5nUmVmIGtNaW5RdWFy
dHpDb3JlVmVyc2lvbiA9IENGU1RSKCIxLjAuNDMuMCIpOworY29uc3QgQ0ZTdHJpbmdSZWYga01p
bkNvcmVWaWRlb1ZlcnNpb24gPSBDRlNUUigiMS4wLjAuMiIpOworCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIFNPRlRfTElOS19MSUJSQVJZKFdpbmluZXQpCiBTT0ZUX0xJTksoV2luaW5ldCwgSW50
ZXJuZXRTZXRDb29raWVFeFcsIERXT1JELCBXSU5BUEksIChMUENXU1RSIGxwc3pVcmwsIExQQ1dT
VFIgbHBzekNvb2tpZU5hbWUsIExQQ1dTVFIgbHBzekNvb2tpZURhdGEsIERXT1JEIGR3RmxhZ3Ms
IERXT1JEX1BUUiBkd1Jlc2VydmVkKSwgKGxwc3pVcmwsIGxwc3pDb29raWVOYW1lLCBscHN6Q29v
a2llRGF0YSwgZHdGbGFncywgZHdSZXNlcnZlZCkpCiAKLU1lZGlhUGxheWVyUHJpdmF0ZUludGVy
ZmFjZSogTWVkaWFQbGF5ZXJQcml2YXRlOjpjcmVhdGUoTWVkaWFQbGF5ZXIqIHBsYXllcikgCisv
LyBJbnRlcmZhY2UgZGVjbGFyYXRpb24gZm9yIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZp
c3VhbENvbnRleHQncyBRVE1vdmllQ2xpZW50IGFnZ3JlZ2F0ZQorY2xhc3MgTWVkaWFQbGF5ZXJQ
cml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6TW92aWVDbGllbnQgOiBwdWJsaWMgUVRNb3Zp
ZUNsaWVudCB7CitwdWJsaWM6CisgICAgTW92aWVDbGllbnQoTWVkaWFQbGF5ZXJQcml2YXRlUXVp
Y2tUaW1lVmlzdWFsQ29udGV4dCogcGFyZW50KSA6IG1fcGFyZW50KHBhcmVudCkge30KKyAgICB2
aXJ0dWFsIH5Nb3ZpZUNsaWVudCgpIHsgbV9wYXJlbnQgPSAwOyB9CisgICAgdmlydHVhbCB2b2lk
IG1vdmllRW5kZWQoUVRNb3ZpZSopOworICAgIHZpcnR1YWwgdm9pZCBtb3ZpZUxvYWRTdGF0ZUNo
YW5nZWQoUVRNb3ZpZSopOworICAgIHZpcnR1YWwgdm9pZCBtb3ZpZVRpbWVDaGFuZ2VkKFFUTW92
aWUqKTsKK3ByaXZhdGU6CisgICAgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29u
dGV4dCogbV9wYXJlbnQ7Cit9OworCisvLyBJbnRlcmZhY2UgZGVjbGFyYXRpb24gZm9yIE1lZGlh
UGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQncyBHcmFwaGljc0xheWVyQ2xpZW50
IGFnZ3JlZ2F0ZQorY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4
dDo6TGF5ZXJDbGllbnQgOiBwdWJsaWMgR3JhcGhpY3NMYXllckNsaWVudCB7CitwdWJsaWM6Cisg
ICAgTGF5ZXJDbGllbnQoTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dCog
cGFyZW50KSA6IG1fcGFyZW50KHBhcmVudCkge30KKyAgICB2aXJ0dWFsIH5MYXllckNsaWVudCgp
IHsgbV9wYXJlbnQgPSAwOyB9CisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoY29uc3Qg
R3JhcGhpY3NMYXllciosIEdyYXBoaWNzQ29udGV4dCYsIEdyYXBoaWNzTGF5ZXJQYWludGluZ1Bo
YXNlLCBjb25zdCBJbnRSZWN0JiBpbkNsaXApOworICAgIHZpcnR1YWwgdm9pZCBub3RpZnlBbmlt
YXRpb25TdGFydGVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBkb3VibGUgdGltZSkgeyB9CisgICAg
dmlydHVhbCB2b2lkIG5vdGlmeVN5bmNSZXF1aXJlZChjb25zdCBHcmFwaGljc0xheWVyKikgeyB9
CisgICAgdmlydHVhbCBib29sIHNob3dEZWJ1Z0JvcmRlcnMoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBzaG93UmVwYWludENvdW50ZXIoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQorcHJpdmF0ZToKKyAgICBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1
YWxDb250ZXh0KiBtX3BhcmVudDsKK307CisKK2NsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNr
VGltZVZpc3VhbENvbnRleHQ6OlZpc3VhbENvbnRleHRDbGllbnQgOiBwdWJsaWMgUVRNb3ZpZVZp
c3VhbENvbnRleHRDbGllbnQgeworcHVibGljOgorICAgIFZpc3VhbENvbnRleHRDbGllbnQoTWVk
aWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dCogcGFyZW50KSA6IG1fcGFyZW50
KHBhcmVudCkge30KKyAgICB2aXJ0dWFsIH5WaXN1YWxDb250ZXh0Q2xpZW50KCkgeyBtX3BhcmVu
dCA9IDA7IH0KKyAgICB2b2lkIGltYWdlQXZhaWxhYmxlRm9yVGltZShjb25zdCBRVENWVGltZVN0
YW1wKik7CisgICAgc3RhdGljIHZvaWQgcmV0cmlldmVDdXJyZW50SW1hZ2VQcm9jKHZvaWQqKTsK
K3ByaXZhdGU6CisgICAgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dCog
bV9wYXJlbnQ7Cit9OworCitNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2UqIE1lZGlhUGxheWVy
UHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OmNyZWF0ZShNZWRpYVBsYXllciogcGxheWVy
KSAKIHsgCi0gICAgcmV0dXJuIG5ldyBNZWRpYVBsYXllclByaXZhdGUocGxheWVyKTsKKyAgICBy
ZXR1cm4gbmV3IE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQocGxheWVy
KTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnJlZ2lzdGVyTWVkaWFFbmdpbmUoTWVk
aWFFbmdpbmVSZWdpc3RyYXIgcmVnaXN0cmFyKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVRdWlj
a1RpbWVWaXN1YWxDb250ZXh0OjpyZWdpc3Rlck1lZGlhRW5naW5lKE1lZGlhRW5naW5lUmVnaXN0
cmFyIHJlZ2lzdHJhcikKIHsKICAgICBpZiAoaXNBdmFpbGFibGUoKSkKICAgICAgICAgcmVnaXN0
cmFyKGNyZWF0ZSwgZ2V0U3VwcG9ydGVkVHlwZXMsIHN1cHBvcnRzVHlwZSk7CiB9CiAKLU1lZGlh
UGxheWVyUHJpdmF0ZTo6TWVkaWFQbGF5ZXJQcml2YXRlKE1lZGlhUGxheWVyKiBwbGF5ZXIpCitN
ZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpNZWRpYVBsYXllclByaXZh
dGVRdWlja1RpbWVWaXN1YWxDb250ZXh0KE1lZGlhUGxheWVyKiBwbGF5ZXIpCiAgICAgOiBtX3Bs
YXllcihwbGF5ZXIpCiAgICAgLCBtX3NlZWtUbygtMSkKLSAgICAsIG1fc2Vla1RpbWVyKHRoaXMs
ICZNZWRpYVBsYXllclByaXZhdGU6OnNlZWtUaW1lckZpcmVkKQorICAgICwgbV9zZWVrVGltZXIo
dGhpcywgJk1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OnNlZWtUaW1l
ckZpcmVkKQorICAgICwgbV92aXN1YWxDb250ZXh0VGltZXIodGhpcywgJk1lZGlhUGxheWVyUHJp
dmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OnZpc3VhbENvbnRleHRUaW1lckZpcmVkKQogICAg
ICwgbV9uZXR3b3JrU3RhdGUoTWVkaWFQbGF5ZXI6OkVtcHR5KQogICAgICwgbV9yZWFkeVN0YXRl
KE1lZGlhUGxheWVyOjpIYXZlTm90aGluZykKICAgICAsIG1fZW5hYmxlZFRyYWNrQ291bnQoMCkK
QEAgLTkzLDgzICsxMjgsMzggQEAgTWVkaWFQbGF5ZXJQcml2YXRlOjpNZWRpYVBsYXllclByaXZh
dGUoTQogICAgICwgbV9pc1N0cmVhbWluZyhmYWxzZSkKICAgICAsIG1fdmlzaWJsZShmYWxzZSkK
ICAgICAsIG1fbmV3RnJhbWVBdmFpbGFibGUoZmFsc2UpCi0jaWYgRFJBV19GUkFNRV9SQVRFCi0g
ICAgLCBtX2ZyYW1lQ291bnRXaGlsZVBsYXlpbmcoMCkKLSAgICAsIG1fdGltZVN0YXJ0ZWRQbGF5
aW5nKDApCi0gICAgLCBtX3RpbWVTdG9wcGVkUGxheWluZygwKQotI2VuZGlmCisgICAgLCBtX21v
dmllQ2xpZW50KG5ldyBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpN
b3ZpZUNsaWVudCh0aGlzKSkKKyAgICAsIG1fbGF5ZXJDbGllbnQobmV3IE1lZGlhUGxheWVyUHJp
dmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OkxheWVyQ2xpZW50KHRoaXMpKQorICAgICwgbV92
aXN1YWxDb250ZXh0Q2xpZW50KG5ldyBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxD
b250ZXh0OjpWaXN1YWxDb250ZXh0Q2xpZW50KHRoaXMpKQogewogfQogCi1NZWRpYVBsYXllclBy
aXZhdGU6On5NZWRpYVBsYXllclByaXZhdGUoKQorTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1l
VmlzdWFsQ29udGV4dDo6fk1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQo
KQogewogICAgIHRlYXJEb3duVmlkZW9SZW5kZXJpbmcoKTsKKyAgICBjYW5jZWxDYWxsT25NYWlu
VGhyZWFkKCZWaXN1YWxDb250ZXh0Q2xpZW50OjpyZXRyaWV2ZUN1cnJlbnRJbWFnZVByb2MsIHRo
aXMpOwogfQogCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6c3VwcG9ydHNGdWxsc2NyZWVuKCkg
Y29uc3QKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6c3Vw
cG9ydHNGdWxsc2NyZWVuKCkgY29uc3QKIHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotUGxhdGZv
cm1NZWRpYSBNZWRpYVBsYXllclByaXZhdGU6OnBsYXRmb3JtTWVkaWEoKSBjb25zdAorUGxhdGZv
cm1NZWRpYSBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpwbGF0Zm9y
bU1lZGlhKCkgY29uc3QKIHsKICAgICBQbGF0Zm9ybU1lZGlhIHA7Ci0gICAgcC5xdE1vdmllID0g
cmVpbnRlcnByZXRfY2FzdDxRVE1vdmllKj4obV9xdE1vdmllLmdldCgpKTsKKyAgICBwLnF0TW92
aWUgPSByZWludGVycHJldF9jYXN0PFFUTW92aWUqPihtX21vdmllLmdldCgpKTsKICAgICByZXR1
cm4gcDsKIH0KIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLVBsYXRmb3JtTGF5
ZXIqIE1lZGlhUGxheWVyUHJpdmF0ZTo6cGxhdGZvcm1MYXllcigpIGNvbnN0CitQbGF0Zm9ybUxh
eWVyKiBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpwbGF0Zm9ybUxh
eWVyKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9xdFZpZGVvTGF5ZXIgPyBtX3F0VmlkZW9MYXll
ci0+cGxhdGZvcm1MYXllcigpIDogMDsKIH0KICNlbmRpZgogCi1jbGFzcyBUYXNrVGltZXIgOiBU
aW1lckJhc2UgewotcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemUoKTsKLSAgICAK
LXByaXZhdGU6Ci0gICAgc3RhdGljIHZvaWQgc2V0VGFza1RpbWVyRGVsYXkoZG91YmxlKTsKLSAg
ICBzdGF0aWMgdm9pZCBzdG9wVGFza1RpbWVyKCk7Ci0KLSAgICB2b2lkIGZpcmVkKCk7Ci0KLSAg
ICBzdGF0aWMgVGFza1RpbWVyKiBzX3RpbWVyOwotfTsKLQotVGFza1RpbWVyKiBUYXNrVGltZXI6
OnNfdGltZXIgPSAwOwotCi12b2lkIFRhc2tUaW1lcjo6aW5pdGlhbGl6ZSgpCi17Ci0gICAgaWYg
KHNfdGltZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNfdGltZXIgPSBuZXcgVGFza1RpbWVy
OwotCi0gICAgUVRNb3ZpZVdpbjo6c2V0VGFza1RpbWVyRnVuY3Moc2V0VGFza1RpbWVyRGVsYXks
IHN0b3BUYXNrVGltZXIpOwotfQotCi12b2lkIFRhc2tUaW1lcjo6c2V0VGFza1RpbWVyRGVsYXko
ZG91YmxlIGRlbGF5SW5TZWNvbmRzKQotewotICAgIEFTU0VSVChzX3RpbWVyKTsKLQotICAgIHNf
dGltZXItPnN0YXJ0T25lU2hvdChkZWxheUluU2Vjb25kcyk7Ci19Ci0KLXZvaWQgVGFza1RpbWVy
OjpzdG9wVGFza1RpbWVyKCkKLXsKLSAgICBBU1NFUlQoc190aW1lcik7Ci0KLSAgICBzX3RpbWVy
LT5zdG9wKCk7Ci19Ci0KLXZvaWQgVGFza1RpbWVyOjpmaXJlZCgpCi17Ci0gICAgUVRNb3ZpZVdp
bjo6dGFza1RpbWVyRmlyZWQoKTsKLX0KLQotU3RyaW5nIE1lZGlhUGxheWVyUHJpdmF0ZTo6cmZj
MjYxNkRhdGVTdHJpbmdGcm9tVGltZShDRkFic29sdXRlVGltZSB0aW1lKQorU3RyaW5nIE1lZGlh
UGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OnJmYzI2MTZEYXRlU3RyaW5nRnJv
bVRpbWUoQ0ZBYnNvbHV0ZVRpbWUgdGltZSkKIHsKICAgICBzdGF0aWMgY29uc3QgY2hhciogY29u
c3QgZGF5U3RyaW5nc1tdID0geyAiTW9uIiwgIlR1ZSIsICJXZWQiLCAiVGh1IiwgIkZyaSIsICJT
YXQiLCAiU3VuIiB9OwogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBtb250aFN0cmluZ3Nb
XSA9IHsgIkphbiIsICJGZWIiLCAiTWFyIiwgIkFwciIsICJNYXkiLCAiSnVuIiwgIkp1bCIsICJB
dWciLCAiU2VwIiwgIk9jdCIsICJOb3YiLCAiRGVjIiB9OwpAQCAtMjA3LDggKzE5Nyw3IEBAIHN0
YXRpYyB2b2lkIGFkZENvb2tpZVBhcmFtKFN0cmluZ0J1aWxkZXIKICAgICB9CiB9CiAKLQotdm9p
ZCBNZWRpYVBsYXllclByaXZhdGU6OnNldFVwQ29va2llc0ZvclF1aWNrVGltZShjb25zdCBTdHJp
bmcmIHVybCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6
c2V0VXBDb29raWVzRm9yUXVpY2tUaW1lKGNvbnN0IFN0cmluZyYgdXJsKQogewogICAgIC8vIFdl
YkNvcmUgbG9hZGVkIHRoZSBwYWdlIHdpdGggdGhlIG1vdmllIFVSTCB3aXRoIENGTmV0d29yayBi
dXQgUXVpY2tUaW1lIHdpbGwgCiAgICAgLy8gdXNlIFdpbklOZXQgdG8gZG93bmxvYWQgdGhlIG1v
dmllLCBzbyB3ZSBuZWVkIHRvIGNvcHkgYW55IGNvb2tpZXMgbmVlZGVkIHRvCkBAIC0yNjAsOSAr
MjQ5LDkgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNldFVwQ29va2llc0ZvcgogICAgIH0K
IH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmxvYWQoY29uc3QgU3RyaW5nJiB1cmwpCit2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OmxvYWQoY29uc3Qg
U3RyaW5nJiB1cmwpCiB7Ci0gICAgaWYgKCFRVE1vdmllV2luOjppbml0aWFsaXplUXVpY2tUaW1l
KCkpIHsKKyAgICBpZiAoIVFUTW92aWU6OmluaXRpYWxpemVRdWlja1RpbWUoKSkgewogICAgICAg
ICAvLyBGSVhNRTogaXMgdGhpcyB0aGUgcmlnaHQgZXJyb3IgdG8gcmV0dXJuPwogICAgICAgICBt
X25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpEZWNvZGVFcnJvcjsgCiAgICAgICAgIG1fcGxh
eWVyLT5uZXR3b3JrU3RhdGVDaGFuZ2VkKCk7CkBAIC0yNzAsNyArMjU5LDcgQEAgdm9pZCBNZWRp
YVBsYXllclByaXZhdGU6OmxvYWQoY29uc3QgU3RyaQogICAgIH0KIAogICAgIC8vIEluaXRpYWxp
emUgdGhlIHRhc2sgdGltZXIuCi0gICAgVGFza1RpbWVyOjppbml0aWFsaXplKCk7CisgICAgTWVk
aWFQbGF5ZXJQcml2YXRlVGFza1RpbWVyOjppbml0aWFsaXplKCk7CiAKICAgICBpZiAobV9uZXR3
b3JrU3RhdGUgIT0gTWVkaWFQbGF5ZXI6OkxvYWRpbmcpIHsKICAgICAgICAgbV9uZXR3b3JrU3Rh
dGUgPSBNZWRpYVBsYXllcjo6TG9hZGluZzsKQEAgLTI4NCw1NCArMjczLDUzIEBAIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlOjpsb2FkKGNvbnN0IFN0cmkKIAogICAgIHNldFVwQ29va2llc0ZvclF1
aWNrVGltZSh1cmwpOwogCi0gICAgbV9xdE1vdmllLnNldChuZXcgUVRNb3ZpZVdpbih0aGlzKSk7
Ci0gICAgbV9xdE1vdmllLT5sb2FkKHVybC5jaGFyYWN0ZXJzKCksIHVybC5sZW5ndGgoKSwgbV9w
bGF5ZXItPnByZXNlcnZlc1BpdGNoKCkpOwotICAgIG1fcXRNb3ZpZS0+c2V0Vm9sdW1lKG1fcGxh
eWVyLT52b2x1bWUoKSk7Ci0gICAgbV9xdE1vdmllLT5zZXRWaXNpYmxlKG1fcGxheWVyLT52aXNp
YmxlKCkpOworICAgIG1fbW92aWUgPSBhZG9wdFJlZihuZXcgUVRNb3ZpZShtX21vdmllQ2xpZW50
LmdldCgpKSk7CisgICAgbV9tb3ZpZS0+bG9hZCh1cmwuY2hhcmFjdGVycygpLCB1cmwubGVuZ3Ro
KCksIG1fcGxheWVyLT5wcmVzZXJ2ZXNQaXRjaCgpKTsKKyAgICBtX21vdmllLT5zZXRWb2x1bWUo
bV9wbGF5ZXItPnZvbHVtZSgpKTsKKworICAgIENGRGljdGlvbmFyeVJlZiBvcHRpb25zID0gUVRN
b3ZpZVZpc3VhbENvbnRleHQ6OmdldENHSW1hZ2VPcHRpb25zKCk7CisgICAgbV92aXN1YWxDb250
ZXh0ID0gYWRvcHRSZWYobmV3IFFUTW92aWVWaXN1YWxDb250ZXh0KG1fdmlzdWFsQ29udGV4dENs
aWVudC5nZXQoKSwgb3B0aW9ucykpOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6cGxh
eSgpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OnBsYXko
KQogewotICAgIGlmICghbV9xdE1vdmllKQorICAgIGlmICghbV9tb3ZpZSkKICAgICAgICAgcmV0
dXJuOwogICAgIG1fc3RhcnRlZFBsYXlpbmcgPSB0cnVlOwotI2lmIERSQVdfRlJBTUVfUkFURQot
ICAgIG1fZnJhbWVDb3VudFdoaWxlUGxheWluZyA9IDA7Ci0jZW5kaWYKIAotICAgIG1fcXRNb3Zp
ZS0+cGxheSgpOworICAgIG1fbW92aWUtPnBsYXkoKTsKKyAgICBtX3Zpc3VhbENvbnRleHRUaW1l
ci5zdGFydFJlcGVhdGluZygxLjAgLyAzMCk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
OjpwYXVzZSgpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6
OnBhdXNlKCkKIHsKLSAgICBpZiAoIW1fcXRNb3ZpZSkKKyAgICBpZiAoIW1fbW92aWUpCiAgICAg
ICAgIHJldHVybjsKICAgICBtX3N0YXJ0ZWRQbGF5aW5nID0gZmFsc2U7Ci0jaWYgRFJBV19GUkFN
RV9SQVRFCi0gICAgbV90aW1lU3RvcHBlZFBsYXlpbmcgPSBXVEY6OmN1cnJlbnRUaW1lKCk7Ci0j
ZW5kaWYKLSAgICBtX3F0TW92aWUtPnBhdXNlKCk7CisKKyAgICBtX21vdmllLT5wYXVzZSgpOwor
ICAgIG1fdmlzdWFsQ29udGV4dFRpbWVyLnN0b3AoKTsKIH0KIAotZmxvYXQgTWVkaWFQbGF5ZXJQ
cml2YXRlOjpkdXJhdGlvbigpIGNvbnN0CitmbG9hdCBNZWRpYVBsYXllclByaXZhdGVRdWlja1Rp
bWVWaXN1YWxDb250ZXh0OjpkdXJhdGlvbigpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX3F0TW92aWUp
CisgICAgaWYgKCFtX21vdmllKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gbV9xdE1v
dmllLT5kdXJhdGlvbigpOworICAgIHJldHVybiBtX21vdmllLT5kdXJhdGlvbigpOwogfQogCi1m
bG9hdCBNZWRpYVBsYXllclByaXZhdGU6OmN1cnJlbnRUaW1lKCkgY29uc3QKK2Zsb2F0IE1lZGlh
UGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OmN1cnJlbnRUaW1lKCkgY29uc3QK
IHsKLSAgICBpZiAoIW1fcXRNb3ZpZSkKKyAgICBpZiAoIW1fbW92aWUpCiAgICAgICAgIHJldHVy
biAwOwotICAgIHJldHVybiBtX3F0TW92aWUtPmN1cnJlbnRUaW1lKCk7CisgICAgcmV0dXJuIG1f
bW92aWUtPmN1cnJlbnRUaW1lKCk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZWVr
KGZsb2F0IHRpbWUpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRl
eHQ6OnNlZWsoZmxvYXQgdGltZSkKIHsKICAgICBjYW5jZWxTZWVrKCk7CiAgICAgCi0gICAgaWYg
KCFtX3F0TW92aWUpCisgICAgaWYgKCFtX21vdmllKQogICAgICAgICByZXR1cm47CiAgICAgCiAg
ICAgaWYgKHRpbWUgPiBkdXJhdGlvbigpKQpAQCAtMzQ0LDI4ICszMzIsMjggQEAgdm9pZCBNZWRp
YVBsYXllclByaXZhdGU6OnNlZWsoZmxvYXQgdGltZQogICAgICAgICBtX3NlZWtUaW1lci5zdGFy
dCgwLCAwLjVmKTsKIH0KICAgICAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpkb1NlZWsoKSAK
K3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6ZG9TZWVrKCkg
CiB7Ci0gICAgZmxvYXQgb2xkUmF0ZSA9IG1fcXRNb3ZpZS0+cmF0ZSgpOworICAgIGZsb2F0IG9s
ZFJhdGUgPSBtX21vdmllLT5yYXRlKCk7CiAgICAgaWYgKG9sZFJhdGUpCi0gICAgICAgIG1fcXRN
b3ZpZS0+c2V0UmF0ZSgwKTsKLSAgICBtX3F0TW92aWUtPnNldEN1cnJlbnRUaW1lKG1fc2Vla1Rv
KTsKKyAgICAgICAgbV9tb3ZpZS0+c2V0UmF0ZSgwKTsKKyAgICBtX21vdmllLT5zZXRDdXJyZW50
VGltZShtX3NlZWtUbyk7CiAgICAgZmxvYXQgdGltZUFmdGVyU2VlayA9IGN1cnJlbnRUaW1lKCk7
CiAgICAgLy8gcmVzdG9yZSBwbGF5YmFjayBvbmx5IGlmIG5vdCBhdCBlbmQsIG90aGV3aXNlIFFU
TW92aWUgd2lsbCBsb29wCiAgICAgaWYgKG9sZFJhdGUgJiYgdGltZUFmdGVyU2VlayA8IGR1cmF0
aW9uKCkpCi0gICAgICAgIG1fcXRNb3ZpZS0+c2V0UmF0ZShvbGRSYXRlKTsKKyAgICAgICAgbV9t
b3ZpZS0+c2V0UmF0ZShvbGRSYXRlKTsKICAgICBjYW5jZWxTZWVrKCk7CiB9CiAKLXZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlOjpjYW5jZWxTZWVrKCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXVp
Y2tUaW1lVmlzdWFsQ29udGV4dDo6Y2FuY2VsU2VlaygpCiB7CiAgICAgbV9zZWVrVG8gPSAtMTsK
ICAgICBtX3NlZWtUaW1lci5zdG9wKCk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpz
ZWVrVGltZXJGaXJlZChUaW1lcjxNZWRpYVBsYXllclByaXZhdGU+KikKK3ZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6c2Vla1RpbWVyRmlyZWQoVGltZXI8TWVk
aWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dD4qKQogeyAgICAgICAgCi0gICAg
aWYgKCFtX3F0TW92aWUgfHwgIXNlZWtpbmcoKSB8fCBjdXJyZW50VGltZSgpID09IG1fc2Vla1Rv
KSB7CisgICAgaWYgKCFtX21vdmllIHx8ICFzZWVraW5nKCkgfHwgY3VycmVudFRpbWUoKSA9PSBt
X3NlZWtUbykgewogICAgICAgICBjYW5jZWxTZWVrKCk7CiAgICAgICAgIHVwZGF0ZVN0YXRlcygp
OwogICAgICAgICBtX3BsYXllci0+dGltZUNoYW5nZWQoKTsgCkBAIC0zODQsODAgKzM3Miw4NSBA
QCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2Vla1RpbWVyRmlyZWQoCiAgICAgfQogfQogCi1i
b29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6cGF1c2VkKCkgY29uc3QKK2Jvb2wgTWVkaWFQbGF5ZXJQ
cml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6cGF1c2VkKCkgY29uc3QKIHsKLSAgICBpZiAo
IW1fcXRNb3ZpZSkKKyAgICBpZiAoIW1fbW92aWUpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAg
IHJldHVybiBtX3F0TW92aWUtPnJhdGUoKSA9PSAwLjBmOworICAgIHJldHVybiAoIW1fbW92aWUt
PnJhdGUoKSk7CiB9CiAKLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZWVraW5nKCkgY29uc3QK
K2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6c2Vla2luZygp
IGNvbnN0CiB7Ci0gICAgaWYgKCFtX3F0TW92aWUpCisgICAgaWYgKCFtX21vdmllKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIG1fc2Vla1RvID49IDA7CiB9CiAKLUludFNpemUg
TWVkaWFQbGF5ZXJQcml2YXRlOjpuYXR1cmFsU2l6ZSgpIGNvbnN0CitJbnRTaXplIE1lZGlhUGxh
eWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6Om5hdHVyYWxTaXplKCkgY29uc3QKIHsK
LSAgICBpZiAoIW1fcXRNb3ZpZSkKKyAgICBpZiAoIW1fbW92aWUpCiAgICAgICAgIHJldHVybiBJ
bnRTaXplKCk7CiAgICAgaW50IHdpZHRoOwogICAgIGludCBoZWlnaHQ7Ci0gICAgbV9xdE1vdmll
LT5nZXROYXR1cmFsU2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICBtX21vdmllLT5nZXROYXR1cmFs
U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKICAgICByZXR1cm4gSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KTsK
IH0KIAotYm9vbCBNZWRpYVBsYXllclByaXZhdGU6Omhhc1ZpZGVvKCkgY29uc3QKK2Jvb2wgTWVk
aWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6aGFzVmlkZW8oKSBjb25zdAog
ewotICAgIGlmICghbV9xdE1vdmllKQorICAgIGlmICghbV9tb3ZpZSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIHJldHVybiBtX3F0TW92aWUtPmhhc1ZpZGVvKCk7CisgICAgcmV0dXJuIG1f
bW92aWUtPmhhc1ZpZGVvKCk7CiB9CiAKLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlOjpoYXNBdWRp
bygpIGNvbnN0Citib29sIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6
Omhhc0F1ZGlvKCkgY29uc3QKIHsKLSAgICBpZiAoIW1fcXRNb3ZpZSkKKyAgICBpZiAoIW1fbW92
aWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gbV9xdE1vdmllLT5oYXNBdWRp
bygpOworICAgIHJldHVybiBtX21vdmllLT5oYXNBdWRpbygpOwogfQogCi12b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZTo6c2V0Vm9sdW1lKGZsb2F0IHZvbHVtZSkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6c2V0Vm9sdW1lKGZsb2F0IHZvbHVtZSkKIHsKLSAg
ICBpZiAoIW1fcXRNb3ZpZSkKKyAgICBpZiAoIW1fbW92aWUpCiAgICAgICAgIHJldHVybjsKLSAg
ICBtX3F0TW92aWUtPnNldFZvbHVtZSh2b2x1bWUpOworICAgIG1fbW92aWUtPnNldFZvbHVtZSh2
b2x1bWUpOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0UmF0ZShmbG9hdCByYXRl
KQordm9pZCBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpzZXRSYXRl
KGZsb2F0IHJhdGUpCiB7Ci0gICAgaWYgKCFtX3F0TW92aWUpCisgICAgaWYgKCFtX21vdmllKQog
ICAgICAgICByZXR1cm47Ci0gICAgbV9xdE1vdmllLT5zZXRSYXRlKHJhdGUpOworCisgICAgLy8g
RG8gbm90IGNhbGwgc2V0UmF0ZSguLi4pIHVubGVzcyB3ZSBoYXZlIHN0YXJ0ZWQgcGxheWluZzsg
b3RoZXJ3aXNlCisgICAgLy8gUXVpY2tUaW1lJ3MgVmlzdWFsQ29udGV4dCBjYW4gZ2V0IHdlZGdl
ZCB3YWl0aW5nIGZvciBhIHJhdGUgY2hhbmdlCisgICAgLy8gY2FsbCB3aGljaCB3aWxsIG5ldmVy
IGNvbWUuCisgICAgaWYgKG1fc3RhcnRlZFBsYXlpbmcpCisgICAgICAgIG1fbW92aWUtPnNldFJh
dGUocmF0ZSk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRQcmVzZXJ2ZXNQaXRj
aChib29sIHByZXNlcnZlc1BpdGNoKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVW
aXN1YWxDb250ZXh0OjpzZXRQcmVzZXJ2ZXNQaXRjaChib29sIHByZXNlcnZlc1BpdGNoKQogewot
ICAgIGlmICghbV9xdE1vdmllKQorICAgIGlmICghbV9tb3ZpZSkKICAgICAgICAgcmV0dXJuOwot
ICAgIG1fcXRNb3ZpZS0+c2V0UHJlc2VydmVzUGl0Y2gocHJlc2VydmVzUGl0Y2gpOworICAgIG1f
bW92aWUtPnNldFByZXNlcnZlc1BpdGNoKHByZXNlcnZlc1BpdGNoKTsKIH0KIAotYm9vbCBNZWRp
YVBsYXllclByaXZhdGU6Omhhc0Nsb3NlZENhcHRpb25zKCkgY29uc3QKK2Jvb2wgTWVkaWFQbGF5
ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6aGFzQ2xvc2VkQ2FwdGlvbnMoKSBjb25z
dAogewotICAgIGlmICghbV9xdE1vdmllKQorICAgIGlmICghbV9tb3ZpZSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIHJldHVybiBtX3F0TW92aWUtPmhhc0Nsb3NlZENhcHRpb25zKCk7Cisg
ICAgcmV0dXJuIG1fbW92aWUtPmhhc0Nsb3NlZENhcHRpb25zKCk7CiB9CiAKLXZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlOjpzZXRDbG9zZWRDYXB0aW9uc1Zpc2libGUoYm9vbCB2aXNpYmxlKQordm9p
ZCBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpzZXRDbG9zZWRDYXB0
aW9uc1Zpc2libGUoYm9vbCB2aXNpYmxlKQogewotICAgIGlmICghbV9xdE1vdmllKQorICAgIGlm
ICghbV9tb3ZpZSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fcXRNb3ZpZS0+c2V0Q2xvc2VkQ2Fw
dGlvbnNWaXNpYmxlKHZpc2libGUpOworICAgIG1fbW92aWUtPnNldENsb3NlZENhcHRpb25zVmlz
aWJsZSh2aXNpYmxlKTsKIH0KIAotUGFzc1JlZlB0cjxUaW1lUmFuZ2VzPiBNZWRpYVBsYXllclBy
aXZhdGU6OmJ1ZmZlcmVkKCkgY29uc3QKK1Bhc3NSZWZQdHI8VGltZVJhbmdlcz4gTWVkaWFQbGF5
ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6YnVmZmVyZWQoKSBjb25zdAogewogICAg
IFJlZlB0cjxUaW1lUmFuZ2VzPiB0aW1lUmFuZ2VzID0gVGltZVJhbmdlczo6Y3JlYXRlKCk7CiAg
ICAgZmxvYXQgbG9hZGVkID0gbWF4VGltZUxvYWRlZCgpOwpAQCAtNDY3LDIyICs0NjAsMjIgQEAg
UGFzc1JlZlB0cjxUaW1lUmFuZ2VzPiBNZWRpYVBsYXllclByaXZhdAogICAgIHJldHVybiB0aW1l
UmFuZ2VzLnJlbGVhc2UoKTsKIH0KIAotZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlOjptYXhUaW1l
U2Vla2FibGUoKSBjb25zdAorZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFs
Q29udGV4dDo6bWF4VGltZVNlZWthYmxlKCkgY29uc3QKIHsKICAgICAvLyBpbmZpbml0ZSBkdXJh
dGlvbiBtZWFucyBsaXZlIHN0cmVhbQogICAgIHJldHVybiAhaXNmaW5pdGUoZHVyYXRpb24oKSkg
PyAwIDogbWF4VGltZUxvYWRlZCgpOwogfQogCi1mbG9hdCBNZWRpYVBsYXllclByaXZhdGU6Om1h
eFRpbWVMb2FkZWQoKSBjb25zdAorZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlz
dWFsQ29udGV4dDo6bWF4VGltZUxvYWRlZCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX3F0TW92aWUp
CisgICAgaWYgKCFtX21vdmllKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gbV9xdE1v
dmllLT5tYXhUaW1lTG9hZGVkKCk7IAorICAgIHJldHVybiBtX21vdmllLT5tYXhUaW1lTG9hZGVk
KCk7IAogfQogCi11bnNpZ25lZCBNZWRpYVBsYXllclByaXZhdGU6OmJ5dGVzTG9hZGVkKCkgY29u
c3QKK3Vuc2lnbmVkIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OmJ5
dGVzTG9hZGVkKCkgY29uc3QKIHsKLSAgICBpZiAoIW1fcXRNb3ZpZSkKKyAgICBpZiAoIW1fbW92
aWUpCiAgICAgICAgIHJldHVybiAwOwogICAgIGZsb2F0IGR1ciA9IGR1cmF0aW9uKCk7CiAgICAg
ZmxvYXQgbWF4VGltZSA9IG1heFRpbWVMb2FkZWQoKTsKQEAgLTQ5MSwxNCArNDg0LDE0IEBAIHVu
c2lnbmVkIE1lZGlhUGxheWVyUHJpdmF0ZTo6Ynl0ZXNMb2FkZWQKICAgICByZXR1cm4gdG90YWxC
eXRlcygpICogbWF4VGltZSAvIGR1cjsKIH0KIAotdW5zaWduZWQgTWVkaWFQbGF5ZXJQcml2YXRl
Ojp0b3RhbEJ5dGVzKCkgY29uc3QKK3Vuc2lnbmVkIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGlt
ZVZpc3VhbENvbnRleHQ6OnRvdGFsQnl0ZXMoKSBjb25zdAogewotICAgIGlmICghbV9xdE1vdmll
KQorICAgIGlmICghbV9tb3ZpZSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIG1fcXRN
b3ZpZS0+ZGF0YVNpemUoKTsKKyAgICByZXR1cm4gbV9tb3ZpZS0+ZGF0YVNpemUoKTsKIH0KIAot
dm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmNhbmNlbExvYWQoKQordm9pZCBNZWRpYVBsYXllclBy
aXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpjYW5jZWxMb2FkKCkKIHsKICAgICBpZiAobV9u
ZXR3b3JrU3RhdGUgPCBNZWRpYVBsYXllcjo6TG9hZGluZyB8fCBtX25ldHdvcmtTdGF0ZSA9PSBN
ZWRpYVBsYXllcjo6TG9hZGVkKQogICAgICAgICByZXR1cm47CkBAIC01MDYsMjAgKzQ5OSwyMCBA
QCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6Y2FuY2VsTG9hZCgpCiAgICAgdGVhckRvd25WaWRl
b1JlbmRlcmluZygpOwogCiAgICAgLy8gQ2FuY2VsIHRoZSBsb2FkIGJ5IGRlc3Ryb3lpbmcgdGhl
IG1vdmllLgotICAgIG1fcXRNb3ZpZS5jbGVhcigpOworICAgIG1fbW92aWUuY2xlYXIoKTsKIAog
ICAgIHVwZGF0ZVN0YXRlcygpOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6dXBkYXRl
U3RhdGVzKCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6
dXBkYXRlU3RhdGVzKCkKIHsKICAgICBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIG9sZE5ldHdv
cmtTdGF0ZSA9IG1fbmV0d29ya1N0YXRlOwogICAgIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIG9s
ZFJlYWR5U3RhdGUgPSBtX3JlYWR5U3RhdGU7CiAgIAotICAgIGxvbmcgbG9hZFN0YXRlID0gbV9x
dE1vdmllID8gbV9xdE1vdmllLT5sb2FkU3RhdGUoKSA6IFFUTW92aWVMb2FkU3RhdGVFcnJvcjsK
KyAgICBsb25nIGxvYWRTdGF0ZSA9IG1fbW92aWUgPyBtX21vdmllLT5sb2FkU3RhdGUoKSA6IFFU
TW92aWVMb2FkU3RhdGVFcnJvcjsKIAogICAgIGlmIChsb2FkU3RhdGUgPj0gUVRNb3ZpZUxvYWRT
dGF0ZUxvYWRlZCAmJiBtX3JlYWR5U3RhdGUgPCBNZWRpYVBsYXllcjo6SGF2ZU1ldGFkYXRhKSB7
Ci0gICAgICAgIG1fcXRNb3ZpZS0+ZGlzYWJsZVVuc3VwcG9ydGVkVHJhY2tzKG1fZW5hYmxlZFRy
YWNrQ291bnQsIG1fdG90YWxUcmFja0NvdW50KTsKKyAgICAgICAgbV9tb3ZpZS0+ZGlzYWJsZVVu
c3VwcG9ydGVkVHJhY2tzKG1fZW5hYmxlZFRyYWNrQ291bnQsIG1fdG90YWxUcmFja0NvdW50KTsK
ICAgICAgICAgaWYgKG1fcGxheWVyLT5pbk1lZGlhRG9jdW1lbnQoKSkgewogICAgICAgICAgICAg
aWYgKCFtX2VuYWJsZWRUcmFja0NvdW50IHx8IG1fZW5hYmxlZFRyYWNrQ291bnQgIT0gbV90b3Rh
bFRyYWNrQ291bnQpIHsKICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgdHlwZSBvZiBtZWRp
YSB0aGF0IHdlIGRvIG5vdCBoYW5kbGUgZGlyZWN0bHkgd2l0aCBhIDx2aWRlbz4gCkBAIC01ODIs
NDUgKzU3NSw0MSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6dXBkYXRlU3RhdGVzKCkKICAg
ICAgICAgbV9wbGF5ZXItPnJlYWR5U3RhdGVDaGFuZ2VkKCk7CiB9CiAKLWJvb2wgTWVkaWFQbGF5
ZXJQcml2YXRlOjppc1JlYWR5Rm9yUmVuZGVyaW5nKCkgY29uc3QKK2Jvb2wgTWVkaWFQbGF5ZXJQ
cml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6aXNSZWFkeUZvclJlbmRlcmluZygpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIG1fcmVhZHlTdGF0ZSA+PSBNZWRpYVBsYXllcjo6SGF2ZU1ldGFkYXRh
ICYmIG1fcGxheWVyLT52aXNpYmxlKCk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpz
YXdVbnN1cHBvcnRlZFRyYWNrcygpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZp
c3VhbENvbnRleHQ6OnNhd1Vuc3VwcG9ydGVkVHJhY2tzKCkKIHsKLSAgICBtX3F0TW92aWUtPnNl
dERpc2FibGVkKHRydWUpOworICAgIG1fbW92aWUtPnNldERpc2FibGVkKHRydWUpOwogICAgIG1f
aGFzVW5zdXBwb3J0ZWRUcmFja3MgPSB0cnVlOwogICAgIG1fcGxheWVyLT5tZWRpYVBsYXllckNs
aWVudCgpLT5tZWRpYVBsYXllclNhd1Vuc3VwcG9ydGVkVHJhY2tzKG1fcGxheWVyKTsKIH0KIAot
dm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmRpZEVuZCgpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OmRpZEVuZCgpCiB7CiAgICAgaWYgKG1faGFzVW5zdXBw
b3J0ZWRUcmFja3MpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fc3RhcnRlZFBsYXlpbmcgPSBm
YWxzZTsKLSNpZiBEUkFXX0ZSQU1FX1JBVEUKLSAgICBtX3RpbWVTdG9wcGVkUGxheWluZyA9IFdU
Rjo6Y3VycmVudFRpbWUoKTsKLSNlbmRpZgorCiAgICAgdXBkYXRlU3RhdGVzKCk7CiAgICAgbV9w
bGF5ZXItPnRpbWVDaGFuZ2VkKCk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRT
aXplKGNvbnN0IEludFNpemUmIHNpemUpIAordm9pZCBNZWRpYVBsYXllclByaXZhdGVRdWlja1Rp
bWVWaXN1YWxDb250ZXh0OjpzZXRTaXplKGNvbnN0IEludFNpemUmIHNpemUpIAogeyAKLSAgICBp
ZiAobV9oYXNVbnN1cHBvcnRlZFRyYWNrcyB8fCAhbV9xdE1vdmllIHx8IG1fc2l6ZSA9PSBzaXpl
KQorICAgIGlmIChtX2hhc1Vuc3VwcG9ydGVkVHJhY2tzIHx8ICFtX21vdmllIHx8IG1fc2l6ZSA9
PSBzaXplKQogICAgICAgICByZXR1cm47CiAgICAgbV9zaXplID0gc2l6ZTsKLSAgICBtX3F0TW92
aWUtPnNldFNpemUoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKIH0KIAotdm9pZCBNZWRp
YVBsYXllclByaXZhdGU6OnNldFZpc2libGUoYm9vbCB2aXNpYmxlKQordm9pZCBNZWRpYVBsYXll
clByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkK
IHsKLSAgICBpZiAobV9oYXNVbnN1cHBvcnRlZFRyYWNrcyB8fCAhbV9xdE1vdmllIHx8IG1fdmlz
aWJsZSA9PSB2aXNpYmxlKQorICAgIGlmIChtX2hhc1Vuc3VwcG9ydGVkVHJhY2tzIHx8ICFtX21v
dmllIHx8IG1fdmlzaWJsZSA9PSB2aXNpYmxlKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3F0
TW92aWUtPnNldFZpc2libGUodmlzaWJsZSk7CiAgICAgbV92aXNpYmxlID0gdmlzaWJsZTsKICAg
ICBpZiAobV92aXNpYmxlKSB7CiAgICAgICAgIGlmIChpc1JlYWR5Rm9yUmVuZGVyaW5nKCkpCkBA
IC02MjksODggKzYxOCwxMzggQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNldFZpc2libGUo
Ym9vbAogICAgICAgICB0ZWFyRG93blZpZGVvUmVuZGVyaW5nKCk7CiB9CiAKLXZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlOjpwYWludChHcmFwaGljc0NvbnRleHQqIHAsIGNvbnN0IEludFJlY3QmIHIp
Cit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OnBhaW50KEdy
YXBoaWNzQ29udGV4dCogcCwgY29uc3QgSW50UmVjdCYgcikKIHsKICNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCiAgICAgaWYgKG1fcXRWaWRlb0xheWVyKQogICAgICAgICByZXR1cm47
CiAjZW5kaWYKLSAgICBpZiAocC0+cGFpbnRpbmdEaXNhYmxlZCgpIHx8ICFtX3F0TW92aWUgfHwg
bV9oYXNVbnN1cHBvcnRlZFRyYWNrcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYm9vbCB1c2lu
Z1RlbXBCaXRtYXAgPSBmYWxzZTsKLSAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0OjpXaW5kb3dz
Qml0bWFwPiBiaXRtYXA7Ci0gICAgSERDIGhkYyA9IHAtPmdldFdpbmRvd3NDb250ZXh0KHIpOwot
ICAgIGlmICghaGRjKSB7Ci0gICAgICAgIC8vIFRoZSBncmFwaGljcyBjb250ZXh0IGRvZXNuJ3Qg
aGF2ZSBhbiBhc3NvY2lhdGVkIEhEQyBzbyBjcmVhdGUgYSB0ZW1wb3JhcnkKLSAgICAgICAgLy8g
Yml0bWFwIHdoZXJlIFFUTW92aWVXaW4gY2FuIGRyYXcgdGhlIGZyYW1lIGFuZCB3ZSBjYW4gY29w
eSBpdC4KLSAgICAgICAgdXNpbmdUZW1wQml0bWFwID0gdHJ1ZTsKLSAgICAgICAgYml0bWFwLnNl
dChwLT5jcmVhdGVXaW5kb3dzQml0bWFwKHIuc2l6ZSgpKSk7Ci0gICAgICAgIGhkYyA9IGJpdG1h
cC0+aGRjKCk7Ci0KLSAgICAgICAgLy8gRklYTUU6IGlzIHRoaXMgbmVjZXNzYXJ5Pz8KLSAgICAg
ICAgWEZPUk0geGZvcm07Ci0gICAgICAgIHhmb3JtLmVNMTEgPSAxLjBmOwotICAgICAgICB4Zm9y
bS5lTTEyID0gMC4wZjsKLSAgICAgICAgeGZvcm0uZU0yMSA9IDAuMGY7Ci0gICAgICAgIHhmb3Jt
LmVNMjIgPSAxLjBmOwotICAgICAgICB4Zm9ybS5lRHggPSAtci54KCk7Ci0gICAgICAgIHhmb3Jt
LmVEeSA9IC1yLnkoKTsKLSAgICAgICAgU2V0V29ybGRUcmFuc2Zvcm0oaGRjLCAmeGZvcm0pOwot
ICAgIH0KLQotICAgIG1fcXRNb3ZpZS0+cGFpbnQoaGRjLCByLngoKSwgci55KCkpOwotICAgIGlm
ICh1c2luZ1RlbXBCaXRtYXApCi0gICAgICAgIHAtPmRyYXdXaW5kb3dzQml0bWFwKGJpdG1hcC5n
ZXQoKSwgci50b3BMZWZ0KCkpOwotICAgIGVsc2UKLSAgICAgICAgcC0+cmVsZWFzZVdpbmRvd3ND
b250ZXh0KGhkYywgcik7CiAKICAgICBwYWludENvbXBsZXRlZCgqcCwgcik7CiB9CiAKLXZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlOjpwYWludENvbXBsZXRlZChHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGlt
ZVZpc3VhbENvbnRleHQ6OnBhaW50Q29tcGxldGVkKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBtX25ld0ZyYW1lQXZhaWxhYmxlID0gZmFsc2U7
Cit9CiAKLSNpZiBEUkFXX0ZSQU1FX1JBVEUKLSAgICBpZiAobV9mcmFtZUNvdW50V2hpbGVQbGF5
aW5nID4gMTApIHsKLSAgICAgICAgZG91YmxlIGludGVydmFsID0gIG1fc3RhcnRlZFBsYXlpbmcg
PyBXVEY6OmN1cnJlbnRUaW1lKCkgLSBtX3RpbWVTdGFydGVkUGxheWluZyA6IG1fdGltZVN0b3Bw
ZWRQbGF5aW5nIC0gbV90aW1lU3RhcnRlZFBsYXlpbmc7Ci0gICAgICAgIGRvdWJsZSBmcmFtZVJh
dGUgPSAobV9mcmFtZUNvdW50V2hpbGVQbGF5aW5nIC0gMSkgLyBpbnRlcnZhbDsKLSAgICAgICAg
Q0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7Ci0gICAg
ICAgIENHUmVjdCBkcmF3UmVjdCA9IHJlY3Q7Ci0KLSAgICAgICAgY2hhciB0ZXh0WzhdOwotICAg
ICAgICBfc25wcmludGYodGV4dCwgc2l6ZW9mKHRleHQpLCAiJTEuMmYiLCBmcmFtZVJhdGUpOwot
Ci0gICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZm9udFNpemUgPSAyNTsKLSAgICAgICAgc3RhdGlj
IGNvbnN0IGludCBmb250Q2hhcldpZHRoID0gMTI7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBpbnQg
Ym94SGVpZ2h0ID0gMjU7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBpbnQgYm94Qm9yZGVyV2lkdGgg
PSA0OwotICAgICAgICBkcmF3UmVjdC5zaXplLndpZHRoID0gYm94Qm9yZGVyV2lkdGggKiAyICsg
Zm9udENoYXJXaWR0aCAqIHN0cmxlbih0ZXh0KTsKLSAgICAgICAgZHJhd1JlY3Quc2l6ZS5oZWln
aHQgPSBib3hIZWlnaHQ7Ci0KLSAgICAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjZ0NvbnRleHQp
OwotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICAgICAgaWYgKG1fcXRWaWRl
b0xheWVyKQotICAgICAgICAgICAgQ0dDb250ZXh0U2NhbGVDVE0oY2dDb250ZXh0LCAxLCAtMSk7
Ci0gICAgICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjZ0NvbnRleHQsIHJlY3Qud2lkdGgoKSAt
IGRyYXdSZWN0LnNpemUud2lkdGgsIG1fcXRWaWRlb0xheWVyID8gLXJlY3QuaGVpZ2h0KCkgOiAw
KTsKLSNlbHNlCi0gICAgICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjZ0NvbnRleHQsIHJlY3Qu
d2lkdGgoKSAtIGRyYXdSZWN0LnNpemUud2lkdGgsIDApOwotI2VuZGlmCi0gICAgICAgIHN0YXRp
YyBjb25zdCBDR0Zsb2F0IGJhY2tncm91bmRDb2xvcls0XSA9IHsgMC45OCwgMC45OCwgMC44Miwg
MC44IH07Ci0gICAgICAgIENHQ29udGV4dFNldEZpbGxDb2xvcihjZ0NvbnRleHQsIGJhY2tncm91
bmRDb2xvcik7Ci0gICAgICAgIENHQ29udGV4dEZpbGxSZWN0KGNnQ29udGV4dCwgZHJhd1JlY3Qp
OwotCi0gICAgICAgIHN0YXRpYyBjb25zdCBDR0Zsb2F0IHRleHRDb2xvcls0XSA9IHsgMCwgMCwg
MCwgMSB9OwotICAgICAgICBDR0NvbnRleHRTZXRGaWxsQ29sb3IoY2dDb250ZXh0LCB0ZXh0Q29s
b3IpOwotICAgICAgICBDR0NvbnRleHRTZXRUZXh0TWF0cml4KGNnQ29udGV4dCwgQ0dBZmZpbmVU
cmFuc2Zvcm1NYWtlU2NhbGUoMSwgLTEpKTsKLSAgICAgICAgQ0dDb250ZXh0U2VsZWN0Rm9udChj
Z0NvbnRleHQsICJIZWx2ZXRpY2EiLCBmb250U2l6ZSwga0NHRW5jb2RpbmdNYWNSb21hbik7Cit2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OlZpc3VhbENvbnRl
eHRDbGllbnQ6OnJldHJpZXZlQ3VycmVudEltYWdlUHJvYyh2b2lkKiByZWZjb24pCit7CisgICAg
c3RhdGljX2Nhc3Q8TWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dCo+KHJl
ZmNvbiktPnJldHJpZXZlQ3VycmVudEltYWdlKCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6VmlzdWFsQ29udGV4dENsaWVudDo6aW1hZ2VBdmFp
bGFibGVGb3JUaW1lKGNvbnN0IFFUQ1ZUaW1lU3RhbXAqIHRpbWVTdGFtcCkKK3sKKyAgICAvLyBU
aGlzIGNhbGwgbWF5IGNvbWUgaW4gb24gYW5vdGhlciB0aHJlYWQsIHNvIG1hcnNoYWxsIHRvIHRo
ZSBtYWluIHRocmVhZCBmaXJzdDoKKyAgICBjYWxsT25NYWluVGhyZWFkKCZyZXRyaWV2ZUN1cnJl
bnRJbWFnZVByb2MsIG1fcGFyZW50KTsKKworICAgIC8vIGNhbGxPbk1haW5UaHJlYWQgbXVzdCBi
ZSBwYWlyZWQgd2l0aCBjYW5jZWxDYWxsT25NYWluVGhyZWFkIGluIHRoZSBkZXN0cnVjdG9yLAor
ICAgIC8vIGluIGNhc2UgdGhpcyBvYmplY3QgaXMgZGVsZXRlZCBiZWZvcmUgdGhlIG1haW4gdGhy
ZWFkIHJlcXVlc3QgaXMgaGFuZGxlZC4KK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVRdWlj
a1RpbWVWaXN1YWxDb250ZXh0Ojp2aXN1YWxDb250ZXh0VGltZXJGaXJlZChUaW1lcjxNZWRpYVBs
YXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0PiopCit7CisgICAgcmV0cmlldmVDdXJy
ZW50SW1hZ2UoKTsKK30KKworc3RhdGljIENGRGljdGlvbmFyeVJlZiBRVENGRGljdGlvbmFyeUNy
ZWF0ZVdpdGhEYXRhQ2FsbGJhY2soQ0ZBbGxvY2F0b3JSZWYgYWxsb2NhdG9yLCBjb25zdCBVSW50
OCogYnl0ZXMsIENGSW5kZXggbGVuZ3RoKQoreworICAgIENGRGF0YVJlZiBkYXRhID0gQ0ZEYXRh
Q3JlYXRlV2l0aEJ5dGVzTm9Db3B5KGFsbG9jYXRvciwgYnl0ZXMsIGxlbmd0aCwgMCk7CisgICAg
aWYgKCFkYXRhKQorICAgICAgICByZXR1cm4gMDsKIAotICAgICAgICBDR0NvbnRleHRTaG93VGV4
dEF0UG9pbnQoY2dDb250ZXh0LCBkcmF3UmVjdC5vcmlnaW4ueCArIGJveEJvcmRlcldpZHRoLCBk
cmF3UmVjdC5vcmlnaW4ueSArIGJveEhlaWdodCAtIGJveEJvcmRlcldpZHRoLCB0ZXh0LCBzdHJs
ZW4odGV4dCkpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PENGRGljdGlvbmFyeVJlZj4o
Q0ZQcm9wZXJ0eUxpc3RDcmVhdGVGcm9tWE1MRGF0YShhbGxvY2F0b3IsIGRhdGEsIGtDRlByb3Bl
cnR5TGlzdEltbXV0YWJsZSwgMCkpOworfQorCitzdGF0aWMgQ0dJbWFnZVJlZiBDcmVhdGVDR0lt
YWdlRnJvbVBpeGVsQnVmZmVyKFFUUGl4ZWxCdWZmZXIgYnVmZmVyKQoreworICAgIENHRGF0YVBy
b3ZpZGVyUmVmIHByb3ZpZGVyID0gMDsKKyAgICBDR0NvbG9yU3BhY2VSZWYgY29sb3JTcGFjZSA9
IDA7CisgICAgQ0dJbWFnZVJlZiBpbWFnZSA9IDA7CisKKyAgICBzaXplX3QgYml0c1BlckNvbXBv
bmVudCA9IDA7CisgICAgc2l6ZV90IGJpdHNQZXJQaXhlbCA9IDA7CisgICAgQ0dJbWFnZUFscGhh
SW5mbyBhbHBoYUluZm8gPSBrQ0dJbWFnZUFscGhhTm9uZTsKICAgICAgICAgCi0gICAgICAgIENH
Q29udGV4dFJlc3RvcmVHU3RhdGUoY2dDb250ZXh0KTsgICAgICAgIAorICAgIGlmIChidWZmZXIu
cGl4ZWxGb3JtYXRJczMyQkdSQSgpKSB7CisgICAgICAgIGJpdHNQZXJDb21wb25lbnQgPSA4Owor
ICAgICAgICBiaXRzUGVyUGl4ZWwgPSAzMjsKKyAgICAgICAgYWxwaGFJbmZvID0gKENHSW1hZ2VB
bHBoYUluZm8pKGtDR0ltYWdlQWxwaGFOb25lU2tpcEZpcnN0IHwga0NHQml0bWFwQnl0ZU9yZGVy
MzJMaXR0bGUpOworICAgIH0gZWxzZSBpZiAoYnVmZmVyLnBpeGVsRm9ybWF0SXMzMkFSR0IoKSkg
eworICAgICAgICBiaXRzUGVyQ29tcG9uZW50ID0gODsKKyAgICAgICAgYml0c1BlclBpeGVsID0g
MzI7CisgICAgICAgIGFscGhhSW5mbyA9IChDR0ltYWdlQWxwaGFJbmZvKShrQ0dJbWFnZUFscGhh
Tm9uZVNraXBMYXN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJCaWcpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIC8vIEFsbCBvdGhlciBwaXhlbCBmb3JtYXRzIGFyZSBjdXJyZW50bHkgdW5zdXBwb3J0
ZWQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KKworICAgIENHRGF0YVBy
b3ZpZGVyRGlyZWN0QWNjZXNzQ2FsbGJhY2tzIGNhbGxiYWNrcyA9IHsKKyAgICAgICAgJlFUUGl4
ZWxCdWZmZXI6OmRhdGFQcm92aWRlckdldEJ5dGVQb2ludGVyQ2FsbGJhY2ssCisgICAgICAgICZR
VFBpeGVsQnVmZmVyOjpkYXRhUHJvdmlkZXJSZWxlYXNlQnl0ZVBvaW50ZXJDYWxsYmFjaywKKyAg
ICAgICAgJlFUUGl4ZWxCdWZmZXI6OmRhdGFQcm92aWRlckdldEJ5dGVzQXRQb3NpdGlvbkNhbGxi
YWNrLAorICAgICAgICAmUVRQaXhlbEJ1ZmZlcjo6ZGF0YVByb3ZpZGVyUmVsZWFzZUluZm9DYWxs
YmFjaywKKyAgICB9OworICAgIAorICAgIC8vIENvbG9yc3BhY2Ugc2hvdWxkIGJlIGRldmljZSwg
c28gdGhhdCBRdWFydHogZG9lcyBub3QgaGF2ZSB0byBkbyBhbiBleHRyYSByZW5kZXIuCisgICAg
Y29sb3JTcGFjZSA9IENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpOworICAgIHJlcXVpcmUo
Y29sb3JTcGFjZSwgQmFpbCk7CisgICAgICAgICAgICAKKyAgICBwcm92aWRlciA9IENHRGF0YVBy
b3ZpZGVyQ3JlYXRlRGlyZWN0QWNjZXNzKGJ1ZmZlci5nZXQoKSwgYnVmZmVyLmRhdGFTaXplKCks
ICZjYWxsYmFja3MpOworICAgIHJlcXVpcmUocHJvdmlkZXIsIEJhaWwpOworCisgICAgLy8gQ0dE
YXRhUHJvdmlkZXIgZG9lcyBub3QgcmV0YWluIHRoZSBidWZmZXIsIGJ1dCBpdCB3aWxsIHJlbGVh
c2UgaXQgbGF0ZXIsIHNvIGRvIGFuIGV4dHJhIHJldGFpbiBoZXJlOgorICAgIFFUUGl4ZWxCdWZm
ZXI6OnJldGFpbkNhbGxiYWNrKGJ1ZmZlci5nZXQoKSk7CisgICAgICAgIAorICAgIGltYWdlID0g
Q0dJbWFnZUNyZWF0ZShidWZmZXIud2lkdGgoKSwgYnVmZmVyLmhlaWdodCgpLCBiaXRzUGVyQ29t
cG9uZW50LCBiaXRzUGVyUGl4ZWwsIGJ1ZmZlci5ieXRlc1BlclJvdygpLCBjb2xvclNwYWNlLCBh
bHBoYUluZm8sIHByb3ZpZGVyLCAwLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCk7
CisgCitCYWlsOgorICAgIC8vIE9uY2UgdGhlIGltYWdlIGlzIGNyZWF0ZWQgd2UgY2FuIHJlbGVh
c2Ugb3VyIHJlZmVyZW5jZSB0byB0aGUgcHJvdmlkZXIgYW5kIHRoZSBjb2xvcnNwYWNlLCB0aGV5
IGFyZSByZXRhaW5lZCBieSB0aGUgaW1hZ2UKKyAgICBpZiAocHJvdmlkZXIpCisgICAgICAgIENH
RGF0YVByb3ZpZGVyUmVsZWFzZShwcm92aWRlcik7CisgICAgaWYgKGNvbG9yU3BhY2UpCisgICAg
ICAgIENHQ29sb3JTcGFjZVJlbGVhc2UoY29sb3JTcGFjZSk7CisgCisgICAgcmV0dXJuIGltYWdl
OworfQorCisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6
cmV0cmlldmVDdXJyZW50SW1hZ2UoKQoreworICAgIGlmICghbV92aXN1YWxDb250ZXh0KQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fcXRWaWRlb0xheWVyKQorICAgICAgICByZXR1cm47
CisKKyAgICBRVFBpeGVsQnVmZmVyIGJ1ZmZlciA9IG1fdmlzdWFsQ29udGV4dC0+aW1hZ2VGb3JU
aW1lKDApOworICAgIGlmICghYnVmZmVyLmdldCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBX
S0NBQ0ZMYXllciogbGF5ZXIgPSBzdGF0aWNfY2FzdDxXS0NBQ0ZMYXllcio+KG1fcXRWaWRlb0xh
eWVyLT5wbGF0Zm9ybUxheWVyKCkpOworCisgICAgaWYgKCFidWZmZXIubG9ja0Jhc2VBZGRyZXNz
KCkpIHsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIC8vIERlYnVnIFF1aWNrVGltZSBsaW5rcyBh
Z2FpbnN0IGEgbm9uLURlYnVnIHZlcnNpb24gb2YgQ29yZUZvdW5kYXRpb24sIHNvIHRoZSBDRkRp
Y3Rpb25hcnkgYXR0YWNoZWQgdG8gdGhlIENWUGl4ZWxCdWZmZXIgY2Fubm90IGJlIGRpcmVjdGx5
IHBhc3NlZCBvbiBpbnRvIHRoZSBDQUltYWdlUXVldWUgd2l0aG91dCBiZWluZyBjb252ZXJ0ZWQg
dG8gYSBub24tRGVidWcgQ0ZEaWN0aW9uYXJ5OgorICAgICAgICBDRkRpY3Rpb25hcnlSZWYgYXR0
YWNobWVudHMgPSBRVENGRGljdGlvbmFyeUNyZWF0ZUNvcHlXaXRoRGF0YUNhbGxiYWNrKGtDRkFs
bG9jYXRvckRlZmF1bHQsIGJ1ZmZlci5hdHRhY2htZW50cygpLCAmUVRDRkRpY3Rpb25hcnlDcmVh
dGVXaXRoRGF0YUNhbGxiYWNrKTsKKyNlbHNlCisgICAgICAgIC8vIEhvd2V2ZXIsIHRoaXMgaXMg
dW5uZWNzc2VzYXJ5IGluIHRoZSBub24tRGVidWcgY2FzZToKKyAgICAgICAgQ0ZEaWN0aW9uYXJ5
UmVmIGF0dGFjaG1lbnRzID0gc3RhdGljX2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVmPihDRlJldGFpbihi
dWZmZXIuYXR0YWNobWVudHMoKSkpOwogI2VuZGlmCisKKyAgICAgICAgQ0ZUaW1lSW50ZXJ2YWwg
aW1hZ2VUaW1lID0gUVRNb3ZpZVZpc3VhbENvbnRleHQ6OmN1cnJlbnRIb3N0VGltZSgpOworCisg
ICAgICAgIENHSW1hZ2VSZWYgaW1hZ2UgPSBDcmVhdGVDR0ltYWdlRnJvbVBpeGVsQnVmZmVyKGJ1
ZmZlcik7CisgICAgICAgIGxheWVyLT5zZXRDb250ZW50cyhpbWFnZSk7CisgICAgICAgIENHSW1h
Z2VSZWxlYXNlKGltYWdlKTsKKworICAgICAgICBpZiAoYXR0YWNobWVudHMpCisgICAgICAgICAg
ICBDRlJlbGVhc2UoYXR0YWNobWVudHMpOworCisgICAgICAgIGJ1ZmZlci51bmxvY2tCYXNlQWRk
cmVzcygpOworICAgICAgICBsYXllci0+cm9vdExheWVyKCktPnNldE5lZWRzUmVuZGVyKCk7Cisg
ICAgfQorICAgIG1fdmlzdWFsQ29udGV4dC0+dGFzaygpOwogfQogCiBzdGF0aWMgSGFzaFNldDxT
dHJpbmc+IG1pbWVUeXBlQ2FjaGUoKQpAQCAtNzE5LDExICs3NTgsMTEgQEAgc3RhdGljIEhhc2hT
ZXQ8U3RyaW5nPiBtaW1lVHlwZUNhY2hlKCkKICAgICBzdGF0aWMgYm9vbCB0eXBlTGlzdEluaXRp
YWxpemVkID0gZmFsc2U7CiAKICAgICBpZiAoIXR5cGVMaXN0SW5pdGlhbGl6ZWQpIHsKLSAgICAg
ICAgdW5zaWduZWQgY291bnQgPSBRVE1vdmllV2luOjpjb3VudFN1cHBvcnRlZFR5cGVzKCk7Cisg
ICAgICAgIHVuc2lnbmVkIGNvdW50ID0gUVRNb3ZpZTo6Y291bnRTdXBwb3J0ZWRUeXBlcygpOwog
ICAgICAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgY291bnQ7IG4rKykgewogICAgICAgICAg
ICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcjsKICAgICAgICAgICAgIHVuc2lnbmVkIGxlbjsKLSAg
ICAgICAgICAgIFFUTW92aWVXaW46OmdldFN1cHBvcnRlZFR5cGUobiwgY2hhcmFjdGVyLCBsZW4p
OworICAgICAgICAgICAgUVRNb3ZpZTo6Z2V0U3VwcG9ydGVkVHlwZShuLCBjaGFyYWN0ZXIsIGxl
bik7CiAgICAgICAgICAgICBpZiAobGVuKQogICAgICAgICAgICAgICAgIHR5cGVDYWNoZS5hZGQo
U3RyaW5nKGNoYXJhY3RlciwgbGVuKSk7CiAgICAgICAgIH0KQEAgLTczMiw4OSArNzcxLDY1IEBA
IHN0YXRpYyBIYXNoU2V0PFN0cmluZz4gbWltZVR5cGVDYWNoZSgpCiAgICAgfQogICAgIAogICAg
IHJldHVybiB0eXBlQ2FjaGU7Ci19IAorfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6Z2V0
U3VwcG9ydGVkVHlwZXMoSGFzaFNldDxTdHJpbmc+JiB0eXBlcykKK3ZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6Z2V0U3VwcG9ydGVkVHlwZXMoSGFzaFNldDxT
dHJpbmc+JiB0eXBlcykKIHsKICAgICB0eXBlcyA9IG1pbWVUeXBlQ2FjaGUoKTsKIH0gCiAKLWJv
b2wgTWVkaWFQbGF5ZXJQcml2YXRlOjppc0F2YWlsYWJsZSgpCitib29sIE1lZGlhUGxheWVyUHJp
dmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OmlzQXZhaWxhYmxlKCkKIHsKLSAgICByZXR1cm4g
UVRNb3ZpZVdpbjo6aW5pdGlhbGl6ZVF1aWNrVGltZSgpOworICAgIHJldHVybiBRVE1vdmllOjpp
bml0aWFsaXplUXVpY2tUaW1lKCk7CiB9CiAKLU1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgTWVk
aWFQbGF5ZXJQcml2YXRlOjpzdXBwb3J0c1R5cGUoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBT
dHJpbmcmIGNvZGVjcykKK01lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgTWVkaWFQbGF5ZXJQcml2
YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6c3VwcG9ydHNUeXBlKGNvbnN0IFN0cmluZyYgdHlw
ZSwgY29uc3QgU3RyaW5nJiBjb2RlY3MpCiB7CiAgICAgLy8gb25seSByZXR1cm4gIklzU3VwcG9y
dGVkIiBpZiB0aGVyZSBpcyBubyBjb2RlY3MgcGFyYW1ldGVyIGZvciBub3cgYXMgdGhlcmUgaXMg
bm8gd2F5IHRvIGFzayBRVCBpZiBpdCBzdXBwb3J0cyBhbgogICAgIC8vICBleHRlbmRlZCBNSU1F
IHR5cGUKICAgICByZXR1cm4gbWltZVR5cGVDYWNoZSgpLmNvbnRhaW5zKHR5cGUpID8gKGNvZGVj
cy5pc0VtcHR5KCkgPyBNZWRpYVBsYXllcjo6TWF5QmVTdXBwb3J0ZWQgOiBNZWRpYVBsYXllcjo6
SXNTdXBwb3J0ZWQpIDogTWVkaWFQbGF5ZXI6OklzTm90U3VwcG9ydGVkOwogfQogCi12b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZTo6bW92aWVFbmRlZChRVE1vdmllV2luKiBtb3ZpZSkKK3ZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6TW92aWVDbGllbnQ6Om1vdmll
RW5kZWQoUVRNb3ZpZSogbW92aWUpCiB7Ci0gICAgaWYgKG1faGFzVW5zdXBwb3J0ZWRUcmFja3Mp
CisgICAgaWYgKG1fcGFyZW50LT5tX2hhc1Vuc3VwcG9ydGVkVHJhY2tzKQogICAgICAgICByZXR1
cm47CiAKLSAgICBBU1NFUlQobV9xdE1vdmllLmdldCgpID09IG1vdmllKTsKLSAgICBkaWRFbmQo
KTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6Om1vdmllTG9hZFN0YXRlQ2hhbmdlZChR
VE1vdmllV2luKiBtb3ZpZSkKLXsKLSAgICBpZiAobV9oYXNVbnN1cHBvcnRlZFRyYWNrcykKLSAg
ICAgICAgcmV0dXJuOworICAgIG1fcGFyZW50LT5tX3Zpc3VhbENvbnRleHRUaW1lci5zdG9wKCk7
CiAKLSAgICBBU1NFUlQobV9xdE1vdmllLmdldCgpID09IG1vdmllKTsKLSAgICB1cGRhdGVTdGF0
ZXMoKTsKKyAgICBBU1NFUlQobV9wYXJlbnQtPm1fbW92aWUuZ2V0KCkgPT0gbW92aWUpOworICAg
IG1fcGFyZW50LT5kaWRFbmQoKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6Om1vdmll
VGltZUNoYW5nZWQoUVRNb3ZpZVdpbiogbW92aWUpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF1
aWNrVGltZVZpc3VhbENvbnRleHQ6Ok1vdmllQ2xpZW50Ojptb3ZpZUxvYWRTdGF0ZUNoYW5nZWQo
UVRNb3ZpZSogbW92aWUpCiB7Ci0gICAgaWYgKG1faGFzVW5zdXBwb3J0ZWRUcmFja3MpCisgICAg
aWYgKG1fcGFyZW50LT5tX2hhc1Vuc3VwcG9ydGVkVHJhY2tzKQogICAgICAgICByZXR1cm47CiAK
LSAgICBBU1NFUlQobV9xdE1vdmllLmdldCgpID09IG1vdmllKTsKLSAgICB1cGRhdGVTdGF0ZXMo
KTsKLSAgICBtX3BsYXllci0+dGltZUNoYW5nZWQoKTsKKyAgICBBU1NFUlQobV9wYXJlbnQtPm1f
bW92aWUuZ2V0KCkgPT0gbW92aWUpOworICAgIG1fcGFyZW50LT51cGRhdGVTdGF0ZXMoKTsKIH0K
IAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6Om1vdmllTmV3SW1hZ2VBdmFpbGFibGUoUVRNb3Zp
ZVdpbiogbW92aWUpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRl
eHQ6Ok1vdmllQ2xpZW50Ojptb3ZpZVRpbWVDaGFuZ2VkKFFUTW92aWUqIG1vdmllKQogewotICAg
IGlmIChtX2hhc1Vuc3VwcG9ydGVkVHJhY2tzKQorICAgIGlmIChtX3BhcmVudC0+bV9oYXNVbnN1
cHBvcnRlZFRyYWNrcykKICAgICAgICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKG1fcXRNb3ZpZS5n
ZXQoKSA9PSBtb3ZpZSk7Ci0jaWYgRFJBV19GUkFNRV9SQVRFCi0gICAgaWYgKG1fc3RhcnRlZFBs
YXlpbmcpIHsKLSAgICAgICAgbV9mcmFtZUNvdW50V2hpbGVQbGF5aW5nKys7Ci0gICAgICAgIC8v
IFRvIGVsaW1pbmF0ZSBwcmVyb2xsIGNvc3RzIGZyb20gb3VyIGNhbGN1bGF0aW9uLCBvdXIgZnJh
bWUgcmF0ZSBjYWxjdWxhdGlvbiBleGNsdWRlcwotICAgICAgICAvLyB0aGUgZmlyc3QgZnJhbWUg
ZHJhd24gYWZ0ZXIgcGxheWJhY2sgc3RhcnRzLgotICAgICAgICBpZiAobV9mcmFtZUNvdW50V2hp
bGVQbGF5aW5nID09IDEpCi0gICAgICAgICAgICBtX3RpbWVTdGFydGVkUGxheWluZyA9IFdURjo6
Y3VycmVudFRpbWUoKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIG1fbmV3RnJhbWVBdmFpbGFibGUg
PSB0cnVlOwotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIGlmIChtX3F0
VmlkZW9MYXllcikKLSAgICAgICAgbV9xdFZpZGVvTGF5ZXItPnBsYXRmb3JtTGF5ZXIoKS0+c2V0
TmVlZHNEaXNwbGF5KCk7Ci0gICAgZWxzZQotI2VuZGlmCi0gICAgICAgIG1fcGxheWVyLT5yZXBh
aW50KCk7CisgICAgQVNTRVJUKG1fcGFyZW50LT5tX21vdmllLmdldCgpID09IG1vdmllKTsKKyAg
ICBtX3BhcmVudC0+dXBkYXRlU3RhdGVzKCk7CisgICAgbV9wYXJlbnQtPm1fcGxheWVyLT50aW1l
Q2hhbmdlZCgpOwogfQogCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6aGFzU2luZ2xlU2VjdXJp
dHlPcmlnaW4oKSBjb25zdAorYm9vbCBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxD
b250ZXh0OjpoYXNTaW5nbGVTZWN1cml0eU9yaWdpbigpIGNvbnN0CiB7CiAgICAgLy8gV2UgdGVs
bCBxdWlja3RpbWUgdG8gZGlzYWxsb3cgcmVzb3VyY2VzIHRoYXQgY29tZSBmcm9tIGRpZmZlcmVu
dCBvcmlnaW5zCiAgICAgLy8gc28gd2UgYWxsIG1lZGlhIGlzIHNpbmdsZSBvcmlnaW4uCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLU1lZGlhUGxheWVyUHJpdmF0ZTo6TWVkaWFSZW5kZXJpbmdNb2Rl
IE1lZGlhUGxheWVyUHJpdmF0ZTo6Y3VycmVudFJlbmRlcmluZ01vZGUoKSBjb25zdAorTWVkaWFQ
bGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6TWVkaWFSZW5kZXJpbmdNb2RlIE1l
ZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OmN1cnJlbnRSZW5kZXJpbmdN
b2RlKCkgY29uc3QKIHsKLSAgICBpZiAoIW1fcXRNb3ZpZSkKKyAgICBpZiAoIW1fbW92aWUpCiAg
ICAgICAgIHJldHVybiBNZWRpYVJlbmRlcmluZ05vbmU7CiAKICNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCkBAIC04MjUsOSArODQwLDkgQEAgTWVkaWFQbGF5ZXJQcml2YXRlOjpNZWRp
YVJlbmRlcmluZ01vZGUgTQogICAgIHJldHVybiBNZWRpYVJlbmRlcmluZ1NvZnR3YXJlUmVuZGVy
ZXI7CiB9CiAKLU1lZGlhUGxheWVyUHJpdmF0ZTo6TWVkaWFSZW5kZXJpbmdNb2RlIE1lZGlhUGxh
eWVyUHJpdmF0ZTo6cHJlZmVycmVkUmVuZGVyaW5nTW9kZSgpIGNvbnN0CitNZWRpYVBsYXllclBy
aXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpNZWRpYVJlbmRlcmluZ01vZGUgTWVkaWFQbGF5
ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6cHJlZmVycmVkUmVuZGVyaW5nTW9kZSgp
IGNvbnN0CiB7Ci0gICAgaWYgKCFtX3BsYXllci0+ZnJhbWVWaWV3KCkgfHwgIW1fcXRNb3ZpZSkK
KyAgICBpZiAoIW1fcGxheWVyLT5mcmFtZVZpZXcoKSB8fCAhbV9tb3ZpZSkKICAgICAgICAgcmV0
dXJuIE1lZGlhUmVuZGVyaW5nTm9uZTsKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKQEAgLTgzOCw3ICs4NTMsNyBAQCBNZWRpYVBsYXllclByaXZhdGU6Ok1lZGlhUmVuZGVyaW5n
TW9kZSBNCiAgICAgcmV0dXJuIE1lZGlhUmVuZGVyaW5nU29mdHdhcmVSZW5kZXJlcjsKIH0KIAot
dm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNldFVwVmlkZW9SZW5kZXJpbmcoKQordm9pZCBNZWRp
YVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpzZXRVcFZpZGVvUmVuZGVyaW5n
KCkKIHsKICAgICBNZWRpYVJlbmRlcmluZ01vZGUgY3VycmVudE1vZGUgPSBjdXJyZW50UmVuZGVy
aW5nTW9kZSgpOwogICAgIE1lZGlhUmVuZGVyaW5nTW9kZSBwcmVmZXJyZWRNb2RlID0gcHJlZmVy
cmVkUmVuZGVyaW5nTW9kZSgpOwpAQCAtODYwLDE3ICs4NzUsMjEgQEAgdm9pZCBNZWRpYVBsYXll
clByaXZhdGU6OnNldFVwVmlkZW9SZW5kZQogICAgIGlmIChjdXJyZW50TW9kZSA9PSBNZWRpYVJl
bmRlcmluZ01vdmllTGF5ZXIgfHwgcHJlZmVycmVkTW9kZSA9PSBNZWRpYVJlbmRlcmluZ01vdmll
TGF5ZXIpCiAgICAgICAgIG1fcGxheWVyLT5tZWRpYVBsYXllckNsaWVudCgpLT5tZWRpYVBsYXll
clJlbmRlcmluZ01vZGVDaGFuZ2VkKG1fcGxheWVyKTsKICNlbmRpZgorCisgICAgbV92aXN1YWxD
b250ZXh0LT5zZXRNb3ZpZShtX21vdmllLmdldCgpKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclBy
aXZhdGU6OnRlYXJEb3duVmlkZW9SZW5kZXJpbmcoKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVR
dWlja1RpbWVWaXN1YWxDb250ZXh0Ojp0ZWFyRG93blZpZGVvUmVuZGVyaW5nKCkKIHsKICNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgaWYgKG1fcXRWaWRlb0xheWVyKQogICAg
ICAgICBkZXN0cm95TGF5ZXJGb3JNb3ZpZSgpOwogI2VuZGlmCisKKyAgICBtX3Zpc3VhbENvbnRl
eHQtPnNldE1vdmllKDApOwogfQogCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6aGFzU2V0VXBW
aWRlb1JlbmRlcmluZygpIGNvbnN0Citib29sIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZp
c3VhbENvbnRleHQ6Omhhc1NldFVwVmlkZW9SZW5kZXJpbmcoKSBjb25zdAogewogI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICByZXR1cm4gbV9xdFZpZGVvTGF5ZXIgfHwgY3Vy
cmVudFJlbmRlcmluZ01vZGUoKSAhPSBNZWRpYVJlbmRlcmluZ01vdmllTGF5ZXI7CkBAIC04Nzks
NTYgKzg5OCwxOCBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6aGFzU2V0VXBWaWRlb1JlCiAj
ZW5kaWYKIH0KIAotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLQotLy8gVXAtY2Fs
bCBmcm9tIGNvbXBvc2l0aW5nIGxheWVyIGRyYXdpbmcgY2FsbGJhY2suCi12b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZTo6cGFpbnRDb250ZW50cyhjb25zdCBHcmFwaGljc0xheWVyKiwgR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0LCBHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgSW50UmVj
dCYpCi17Ci0gICAgIGlmIChtX2hhc1Vuc3VwcG9ydGVkVHJhY2tzKQotICAgICAgICAgcmV0dXJu
OwotCi0gICAgQVNTRVJUKHN1cHBvcnRzQWNjZWxlcmF0ZWRSZW5kZXJpbmcoKSk7Ci0KLSAgICAv
LyBObyByZWFzb24gdG8gcmVwbGFjZSB0aGUgY3VycmVudCBsYXllciBpbWFnZSB1bmxlc3Mgd2Ug
aGF2ZSBzb21ldGhpbmcgbmV3IHRvIHNob3cuCi0gICAgaWYgKCFtX25ld0ZyYW1lQXZhaWxhYmxl
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBzdGF0aWMgQ0dDb2xvclNwYWNlUmVmIGNvbG9yU3Bh
Y2UgPSBDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VSR0IoKTsKLSAgICB2b2lkKiBidWZmZXI7Ci0g
ICAgdW5zaWduZWQgYml0c1BlclBpeGVsOwotICAgIHVuc2lnbmVkIHJvd0J5dGVzOwotICAgIHVu
c2lnbmVkIHdpZHRoOwotICAgIHVuc2lnbmVkIGhlaWdodDsKLQotICAgIG1fcXRNb3ZpZS0+Z2V0
Q3VycmVudEZyYW1lSW5mbyhidWZmZXIsIGJpdHNQZXJQaXhlbCwgcm93Qnl0ZXMsIHdpZHRoLCBo
ZWlnaHQpOwotICAgIGlmICghYnVmZmVyKQotICAgICAgICByZXR1cm4gOwotCi0gICAgUmV0YWlu
UHRyPENGRGF0YVJlZj4gZGF0YShBZG9wdENGLCBDRkRhdGFDcmVhdGVXaXRoQnl0ZXNOb0NvcHko
MCwgc3RhdGljX2Nhc3Q8VUludDgqPihidWZmZXIpLCByb3dCeXRlcyAqIGhlaWdodCwga0NGQWxs
b2NhdG9yTnVsbCkpOwotICAgIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4gcHJvdmlkZXIo
QWRvcHRDRiwgQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoQ0ZEYXRhKGRhdGEuZ2V0KCkpKTsKLSAg
ICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gZnJhbWVJbWFnZShBZG9wdENGLCBDR0ltYWdlQ3JlYXRl
KHdpZHRoLCBoZWlnaHQsIDgsIGJpdHNQZXJQaXhlbCwgcm93Qnl0ZXMsIGNvbG9yU3BhY2UsIAot
ICAgICAgICBrQ0dCaXRtYXBCeXRlT3JkZXIzMkxpdHRsZSB8IGtDR0ltYWdlQWxwaGFGaXJzdCwg
cHJvdmlkZXIuZ2V0KCksIDAsIGZhbHNlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7Ci0g
ICAgaWYgKCFmcmFtZUltYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBJbnRSZWN0IHJlY3Qo
MCwgMCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7Ci0gICAgQ0dDb250ZXh0RHJh
d0ltYWdlKGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCksIHJlY3QsIGZyYW1lSW1hZ2UuZ2V0KCkp
OyAKLSAgICBwYWludENvbXBsZXRlZChjb250ZXh0LCByZWN0KTsKLX0KLSNlbmRpZgotCi12b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZTo6Y3JlYXRlTGF5ZXJGb3JNb3ZpZSgpCit2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OmNyZWF0ZUxheWVyRm9yTW92aWUoKQog
ewogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICBBU1NFUlQoc3VwcG9ydHNB
Y2NlbGVyYXRlZFJlbmRlcmluZygpKTsKIAotICAgIGlmICghbV9xdE1vdmllIHx8IG1fcXRWaWRl
b0xheWVyKQorICAgIGlmICghbV9tb3ZpZSB8fCBtX3F0VmlkZW9MYXllcikKICAgICAgICAgcmV0
dXJuOwogCiAgICAgLy8gQ3JlYXRlIGEgR3JhcGhpY3NMYXllciB0aGF0IHdvbid0IGJlIGluc2Vy
dGVkIGRpcmVjdGx5IGludG8gdGhlIHJlbmRlciB0cmVlLCBidXQgd2lsbCB1c2VkIAogICAgIC8v
IGFzIGEgd3JhcHBlciBmb3IgYSBXS0NBQ0ZMYXllciB3aGljaCBnZXRzIGluc2VydGVkIGFzIHRo
ZSBjb250ZW50IGxheWVyIG9mIHRoZSB2aWRlbyAKICAgICAvLyByZW5kZXJlcidzIEdyYXBoaWNz
TGF5ZXIuCi0gICAgbV9xdFZpZGVvTGF5ZXIuc2V0KG5ldyBHcmFwaGljc0xheWVyQ0FDRih0aGlz
KSk7CisgICAgbV9xdFZpZGVvTGF5ZXIuc2V0KG5ldyBHcmFwaGljc0xheWVyQ0FDRihtX2xheWVy
Q2xpZW50LmdldCgpKSk7CiAgICAgaWYgKCFtX3F0VmlkZW9MYXllcikKICAgICAgICAgcmV0dXJu
OwogCkBAIC05NDMsNyArOTI0LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmNyZWF0ZUxh
eWVyRm9yTQogI2VuZGlmCiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpkZXN0cm95TGF5
ZXJGb3JNb3ZpZSgpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRl
eHQ6OmRlc3Ryb3lMYXllckZvck1vdmllKCkKIHsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCiAgICAgaWYgKCFtX3F0VmlkZW9MYXllcikKQEAgLTk1MiwxMyArOTMzLDE3IEBAIHZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpkZXN0cm95TGF5ZXJGb3IKICNlbmRpZgogfQogCit2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OkxheWVyQ2xpZW50Ojpw
YWludENvbnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGljc0NvbnRleHQmLCBHcmFw
aGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgSW50UmVjdCYgaW5DbGlwKQoreworfQorCiAj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotYm9vbCBNZWRpYVBsYXllclByaXZhdGU6
OnN1cHBvcnRzQWNjZWxlcmF0ZWRSZW5kZXJpbmcoKSBjb25zdAorYm9vbCBNZWRpYVBsYXllclBy
aXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpzdXBwb3J0c0FjY2VsZXJhdGVkUmVuZGVyaW5n
KCkgY29uc3QKIHsKICAgICByZXR1cm4gaXNSZWFkeUZvclJlbmRlcmluZygpOwogfQogCi12b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZTo6YWNjZWxlcmF0ZWRSZW5kZXJpbmdTdGF0ZUNoYW5nZWQoKQor
dm9pZCBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjphY2NlbGVyYXRl
ZFJlbmRlcmluZ1N0YXRlQ2hhbmdlZCgpCiB7CiAgICAgLy8gU2V0IHVwIG9yIGNoYW5nZSB0aGUg
cmVuZGVyaW5nIHBhdGggaWYgbmVjZXNzYXJ5LgogICAgIHNldFVwVmlkZW9SZW5kZXJpbmcoKTsK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1
aWNrVGltZVZpc3VhbENvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0LmgJKHJl
dmlzaW9uIDU4MTg3KQkoZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBs
YXllclByaXZhdGVRdWlja1RpbWVXaW4uaDo1ODE4NykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDE5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywg
MjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXRfaAorI2RlZmluZSBNZWRpYVBsYXllclBy
aXZhdGVRVEtpdF9oCisKKyNpZiBFTkFCTEUoVklERU8pCisKKyNpbmNsdWRlICJNZWRpYVBsYXll
clByaXZhdGUuaCIKKyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgPFFUTW92aWVXaW4uaD4K
KyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCisj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJD
bGllbnQuaCIKKyNlbmRpZiAKKworI2lmbmRlZiBEUkFXX0ZSQU1FX1JBVEUKKyNkZWZpbmUgRFJB
V19GUkFNRV9SQVRFIDAKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCBDR0ltYWdlICpDR0ltYWdl
UmVmOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKK2Ns
YXNzIEludFNpemU7CitjbGFzcyBJbnRSZWN0OworY2xhc3MgU3RyaW5nOworCitjbGFzcyBNZWRp
YVBsYXllclByaXZhdGUgOiBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlLCBwdWJs
aWMgUVRNb3ZpZVdpbkNsaWVudCAKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisg
ICAgICAgICwgcHVibGljIEdyYXBoaWNzTGF5ZXJDbGllbnQKKyNlbmRpZiAKK3sKK3B1YmxpYzoK
KyAgICBzdGF0aWMgdm9pZCByZWdpc3Rlck1lZGlhRW5naW5lKE1lZGlhRW5naW5lUmVnaXN0cmFy
KTsKKworICAgIH5NZWRpYVBsYXllclByaXZhdGUoKTsKKworcHJpdmF0ZToKKworI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICAvLyBHcmFwaGljc0xheWVyQ2xpZW50IG1ldGhv
ZHMKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBHcmFwaGljc0xheWVyKiwg
R3JhcGhpY3NDb250ZXh0JiwgR3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IEludFJl
Y3QmIGluQ2xpcCk7CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29u
c3QgR3JhcGhpY3NMYXllciosIGRvdWJsZSB0aW1lKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbm90
aWZ5U3luY1JlcXVpcmVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIqKSB7IH0KKyAgICB2aXJ0dWFsIGJv
b2wgc2hvd0RlYnVnQm9yZGVycygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVh
bCBib29sIHNob3dSZXBhaW50Q291bnRlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisjZW5k
aWYgCisKKyAgICBNZWRpYVBsYXllclByaXZhdGUoTWVkaWFQbGF5ZXIqKTsKKworICAgIHZpcnR1
YWwgYm9vbCBzdXBwb3J0c0Z1bGxzY3JlZW4oKSBjb25zdDsKKyAgICB2aXJ0dWFsIFBsYXRmb3Jt
TWVkaWEgcGxhdGZvcm1NZWRpYSgpIGNvbnN0OworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKKyAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Q7CisjZW5kaWYK
KworICAgIEludFNpemUgbmF0dXJhbFNpemUoKSBjb25zdDsKKyAgICBib29sIGhhc1ZpZGVvKCkg
Y29uc3Q7CisgICAgYm9vbCBoYXNBdWRpbygpIGNvbnN0OworCisgICAgdm9pZCBsb2FkKGNvbnN0
IFN0cmluZyYgdXJsKTsKKyAgICB2b2lkIGNhbmNlbExvYWQoKTsKKyAgICAKKyAgICB2b2lkIHBs
YXkoKTsKKyAgICB2b2lkIHBhdXNlKCk7ICAgIAorICAgIAorICAgIGJvb2wgcGF1c2VkKCkgY29u
c3Q7CisgICAgYm9vbCBzZWVraW5nKCkgY29uc3Q7CisgICAgCisgICAgZmxvYXQgZHVyYXRpb24o
KSBjb25zdDsKKyAgICBmbG9hdCBjdXJyZW50VGltZSgpIGNvbnN0OworICAgIHZvaWQgc2Vlayhm
bG9hdCB0aW1lKTsKKyAgICAKKyAgICB2b2lkIHNldFJhdGUoZmxvYXQpOworICAgIHZvaWQgc2V0
Vm9sdW1lKGZsb2F0KTsKKyAgICB2b2lkIHNldFByZXNlcnZlc1BpdGNoKGJvb2wpOworICAgIAor
ICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgbmV0d29ya1N0YXRlKCkgY29uc3QgeyByZXR1
cm4gbV9uZXR3b3JrU3RhdGU7IH0KKyAgICBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSByZWFkeVN0
YXRlKCkgY29uc3QgeyByZXR1cm4gbV9yZWFkeVN0YXRlOyB9CisgICAgCisgICAgUGFzc1JlZlB0
cjxUaW1lUmFuZ2VzPiBidWZmZXJlZCgpIGNvbnN0OworICAgIGZsb2F0IG1heFRpbWVTZWVrYWJs
ZSgpIGNvbnN0OworICAgIHVuc2lnbmVkIGJ5dGVzTG9hZGVkKCkgY29uc3Q7CisgICAgdW5zaWdu
ZWQgdG90YWxCeXRlcygpIGNvbnN0OworICAgIAorICAgIHZvaWQgc2V0VmlzaWJsZShib29sKTsK
KyAgICB2b2lkIHNldFNpemUoY29uc3QgSW50U2l6ZSYpOworICAgIAorICAgIHZvaWQgbG9hZFN0
YXRlQ2hhbmdlZCgpOworICAgIHZvaWQgZGlkRW5kKCk7CisgICAgCisgICAgdm9pZCBwYWludChH
cmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdm9pZCBwYWludENvbXBsZXRl
ZChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICBib29sIGhhc1Npbmds
ZVNlY3VyaXR5T3JpZ2luKCkgY29uc3Q7CisKKyAgICBib29sIGhhc0Nsb3NlZENhcHRpb25zKCkg
Y29uc3Q7CisgICAgdm9pZCBzZXRDbG9zZWRDYXB0aW9uc1Zpc2libGUoYm9vbCk7CisKKyAgICB2
b2lkIHVwZGF0ZVN0YXRlcygpOworICAgIHZvaWQgZG9TZWVrKCk7CisgICAgdm9pZCBjYW5jZWxT
ZWVrKCk7CisgICAgdm9pZCBzZWVrVGltZXJGaXJlZChUaW1lcjxNZWRpYVBsYXllclByaXZhdGU+
Kik7CisgICAgZmxvYXQgbWF4VGltZUxvYWRlZCgpIGNvbnN0OworICAgIHZvaWQgc2F3VW5zdXBw
b3J0ZWRUcmFja3MoKTsKKworICAgIHZpcnR1YWwgdm9pZCBtb3ZpZUVuZGVkKFFUTW92aWVXaW4q
KTsKKyAgICB2aXJ0dWFsIHZvaWQgbW92aWVMb2FkU3RhdGVDaGFuZ2VkKFFUTW92aWVXaW4qKTsK
KyAgICB2aXJ0dWFsIHZvaWQgbW92aWVUaW1lQ2hhbmdlZChRVE1vdmllV2luKik7CisgICAgdmly
dHVhbCB2b2lkIG1vdmllTmV3SW1hZ2VBdmFpbGFibGUoUVRNb3ZpZVdpbiopOworCisgICAgLy8g
ZW5naW5lIHN1cHBvcnQKKyAgICBzdGF0aWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlKiBj
cmVhdGUoTWVkaWFQbGF5ZXIqKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRTdXBwb3J0ZWRUeXBlcyhI
YXNoU2V0PFN0cmluZz4mIHR5cGVzKTsKKyAgICBzdGF0aWMgTWVkaWFQbGF5ZXI6OlN1cHBvcnRz
VHlwZSBzdXBwb3J0c1R5cGUoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGNvZGVj
cyk7CisgICAgc3RhdGljIGJvb2wgaXNBdmFpbGFibGUoKTsKKworI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNBY2NlbGVyYXRlZFJlbmRl
cmluZygpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhY2NlbGVyYXRlZFJlbmRlcmluZ1N0YXRl
Q2hhbmdlZCgpOworI2VuZGlmCisKKyAgICBlbnVtIE1lZGlhUmVuZGVyaW5nTW9kZSB7IE1lZGlh
UmVuZGVyaW5nTm9uZSwgTWVkaWFSZW5kZXJpbmdTb2Z0d2FyZVJlbmRlcmVyLCBNZWRpYVJlbmRl
cmluZ01vdmllTGF5ZXIgfTsKKyAgICBNZWRpYVJlbmRlcmluZ01vZGUgY3VycmVudFJlbmRlcmlu
Z01vZGUoKSBjb25zdDsKKyAgICBNZWRpYVJlbmRlcmluZ01vZGUgcHJlZmVycmVkUmVuZGVyaW5n
TW9kZSgpIGNvbnN0OworICAgIGJvb2wgaXNSZWFkeUZvclJlbmRlcmluZygpIGNvbnN0OworCisg
ICAgdm9pZCBzZXRVcFZpZGVvUmVuZGVyaW5nKCk7CisgICAgdm9pZCB0ZWFyRG93blZpZGVvUmVu
ZGVyaW5nKCk7CisgICAgYm9vbCBoYXNTZXRVcFZpZGVvUmVuZGVyaW5nKCkgY29uc3Q7CisKKyAg
ICB2b2lkIGNyZWF0ZUxheWVyRm9yTW92aWUoKTsKKyAgICB2b2lkIGRlc3Ryb3lMYXllckZvck1v
dmllKCk7CisKKyAgICB2b2lkIHNldFVwQ29va2llc0ZvclF1aWNrVGltZShjb25zdCBTdHJpbmcm
IHVybCk7CisgICAgU3RyaW5nIHJmYzI2MTZEYXRlU3RyaW5nRnJvbVRpbWUoQ0ZBYnNvbHV0ZVRp
bWUpOworCisgICAgTWVkaWFQbGF5ZXIqIG1fcGxheWVyOworICAgIE93blB0cjxRVE1vdmllV2lu
PiBtX3F0TW92aWU7CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIE93blB0
cjxHcmFwaGljc0xheWVyPiBtX3F0VmlkZW9MYXllcjsKKyNlbmRpZgorICAgIGZsb2F0IG1fc2Vl
a1RvOworICAgIFRpbWVyPE1lZGlhUGxheWVyUHJpdmF0ZT4gbV9zZWVrVGltZXI7CisgICAgSW50
U2l6ZSBtX3NpemU7CisgICAgTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBtX25ldHdvcmtTdGF0
ZTsKKyAgICBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBtX3JlYWR5U3RhdGU7CisgICAgdW5zaWdu
ZWQgbV9lbmFibGVkVHJhY2tDb3VudDsKKyAgICB1bnNpZ25lZCBtX3RvdGFsVHJhY2tDb3VudDsK
KyAgICBib29sIG1faGFzVW5zdXBwb3J0ZWRUcmFja3M7CisgICAgYm9vbCBtX3N0YXJ0ZWRQbGF5
aW5nOworICAgIGJvb2wgbV9pc1N0cmVhbWluZzsKKyAgICBib29sIG1fdmlzaWJsZTsKKyAgICBi
b29sIG1fbmV3RnJhbWVBdmFpbGFibGU7CisjaWYgRFJBV19GUkFNRV9SQVRFCisgICAgZG91Ymxl
IG1fZnJhbWVDb3VudFdoaWxlUGxheWluZzsKKyAgICBkb3VibGUgbV90aW1lU3RhcnRlZFBsYXlp
bmc7CisgICAgZG91YmxlIG1fdGltZVN0b3BwZWRQbGF5aW5nOworI2VuZGlmCit9OworCit9CisK
KyNlbmRpZgorI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRp
YVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlz
dWFsQ29udGV4dC5oCShyZXZpc2lvbiA1ODE4NykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjMsMjYgKzIzLDI1IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZu
ZGVmIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0X2gKLSNkZWZpbmUgTWVkaWFQbGF5ZXJQcml2YXRl
UVRLaXRfaAorI2lmbmRlZiBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0
X2gKKyNkZWZpbmUgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dF9oCiAK
ICNpZiBFTkFCTEUoVklERU8pCiAKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyQ2xpZW50LmgiCiAj
aW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNs
dWRlIDxRVE1vdmllV2luLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0
Zi9SZXRhaW5QdHIuaD4KIAotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSNpbmNs
dWRlICJHcmFwaGljc0xheWVyQ2xpZW50LmgiCi0jZW5kaWYgCi0KICNpZm5kZWYgRFJBV19GUkFN
RV9SQVRFCiAjZGVmaW5lIERSQVdfRlJBTUVfUkFURSAwCiAjZW5kaWYKIAogdHlwZWRlZiBzdHJ1
Y3QgQ0dJbWFnZSAqQ0dJbWFnZVJlZjsKK2NsYXNzIFFUTW92aWU7CitjbGFzcyBRVE1vdmllVmlz
dWFsQ29udGV4dDsKK2NsYXNzIFdLQ0FJbWFnZVF1ZXVlOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKQEAgLTUxLDM0ICs1MCwxOCBAQCBjbGFzcyBJbnRTaXplOwogY2xhc3MgSW50UmVjdDsKIGNs
YXNzIFN0cmluZzsKIAotY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlIDogcHVibGljIE1lZGlhUGxh
eWVyUHJpdmF0ZUludGVyZmFjZSwgcHVibGljIFFUTW92aWVXaW5DbGllbnQgCi0jaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgICAgICAsIHB1YmxpYyBHcmFwaGljc0xheWVyQ2xp
ZW50Ci0jZW5kaWYgCi17CitjbGFzcyBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxD
b250ZXh0IDogcHVibGljIE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZSB7CiBwdWJsaWM6CiAg
ICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJNZWRpYUVuZ2luZShNZWRpYUVuZ2luZVJlZ2lzdHJhcik7
CiAKLSAgICB+TWVkaWFQbGF5ZXJQcml2YXRlKCk7CisgICAgfk1lZGlhUGxheWVyUHJpdmF0ZVF1
aWNrVGltZVZpc3VhbENvbnRleHQoKTsKIAogcHJpdmF0ZToKLQotI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKLSAgICAvLyBHcmFwaGljc0xheWVyQ2xpZW50IG1ldGhvZHMKLSAgICB2
aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBHcmFwaGljc0xheWVyKiwgR3JhcGhpY3ND
b250ZXh0JiwgR3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IEludFJlY3QmIGluQ2xp
cCk7Ci0gICAgdmlydHVhbCB2b2lkIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgR3JhcGhp
Y3NMYXllciosIGRvdWJsZSB0aW1lKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5U3luY1Jl
cXVpcmVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIqKSB7IH0KLSAgICB2aXJ0dWFsIGJvb2wgc2hvd0Rl
YnVnQm9yZGVycygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIHNo
b3dSZXBhaW50Q291bnRlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0jZW5kaWYgCi0KLSAg
ICBNZWRpYVBsYXllclByaXZhdGUoTWVkaWFQbGF5ZXIqKTsKKyAgICBNZWRpYVBsYXllclByaXZh
dGVRdWlja1RpbWVWaXN1YWxDb250ZXh0KE1lZGlhUGxheWVyKik7CiAKICAgICB2aXJ0dWFsIGJv
b2wgc3VwcG9ydHNGdWxsc2NyZWVuKCkgY29uc3Q7CiAgICAgdmlydHVhbCBQbGF0Zm9ybU1lZGlh
IHBsYXRmb3JtTWVkaWEoKSBjb25zdDsKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CiAgICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0OwotI2VuZGlmCiAKICAg
ICBJbnRTaXplIG5hdHVyYWxTaXplKCkgY29uc3Q7CiAgICAgYm9vbCBoYXNWaWRlbygpIGNvbnN0
OwpAQCAtMTI2LDI1ICsxMDksMTggQEAgcHJpdmF0ZToKICAgICB2b2lkIHVwZGF0ZVN0YXRlcygp
OwogICAgIHZvaWQgZG9TZWVrKCk7CiAgICAgdm9pZCBjYW5jZWxTZWVrKCk7Ci0gICAgdm9pZCBz
ZWVrVGltZXJGaXJlZChUaW1lcjxNZWRpYVBsYXllclByaXZhdGU+Kik7CisgICAgdm9pZCBzZWVr
VGltZXJGaXJlZChUaW1lcjxNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0
PiopOwogICAgIGZsb2F0IG1heFRpbWVMb2FkZWQoKSBjb25zdDsKICAgICB2b2lkIHNhd1Vuc3Vw
cG9ydGVkVHJhY2tzKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgbW92aWVFbmRlZChRVE1vdmllV2lu
Kik7Ci0gICAgdmlydHVhbCB2b2lkIG1vdmllTG9hZFN0YXRlQ2hhbmdlZChRVE1vdmllV2luKik7
Ci0gICAgdmlydHVhbCB2b2lkIG1vdmllVGltZUNoYW5nZWQoUVRNb3ZpZVdpbiopOwotICAgIHZp
cnR1YWwgdm9pZCBtb3ZpZU5ld0ltYWdlQXZhaWxhYmxlKFFUTW92aWVXaW4qKTsKLQogICAgIC8v
IGVuZ2luZSBzdXBwb3J0CiAgICAgc3RhdGljIE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZSog
Y3JlYXRlKE1lZGlhUGxheWVyKik7CiAgICAgc3RhdGljIHZvaWQgZ2V0U3VwcG9ydGVkVHlwZXMo
SGFzaFNldDxTdHJpbmc+JiB0eXBlcyk7CiAgICAgc3RhdGljIE1lZGlhUGxheWVyOjpTdXBwb3J0
c1R5cGUgc3VwcG9ydHNUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBjb2Rl
Y3MpOwogICAgIHN0YXRpYyBib29sIGlzQXZhaWxhYmxlKCk7CiAKLSNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzQWNjZWxlcmF0ZWRSZW5k
ZXJpbmcoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgYWNjZWxlcmF0ZWRSZW5kZXJpbmdTdGF0
ZUNoYW5nZWQoKTsKLSNlbmRpZgogCiAgICAgZW51bSBNZWRpYVJlbmRlcmluZ01vZGUgeyBNZWRp
YVJlbmRlcmluZ05vbmUsIE1lZGlhUmVuZGVyaW5nU29mdHdhcmVSZW5kZXJlciwgTWVkaWFSZW5k
ZXJpbmdNb3ZpZUxheWVyIH07CiAgICAgTWVkaWFSZW5kZXJpbmdNb2RlIGN1cnJlbnRSZW5kZXJp
bmdNb2RlKCkgY29uc3Q7CkBAIC0xNjEsMTMgKzEzNywyOCBAQCBwcml2YXRlOgogICAgIHZvaWQg
c2V0VXBDb29raWVzRm9yUXVpY2tUaW1lKGNvbnN0IFN0cmluZyYgdXJsKTsKICAgICBTdHJpbmcg
cmZjMjYxNkRhdGVTdHJpbmdGcm9tVGltZShDRkFic29sdXRlVGltZSk7CiAKKyAgICB2b2lkIHZp
c3VhbENvbnRleHRUaW1lckZpcmVkKFRpbWVyPE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZp
c3VhbENvbnRleHQ+Kik7CisgICAgdm9pZCByZXRyaWV2ZUN1cnJlbnRJbWFnZSgpOworCisgICAg
Y2xhc3MgTW92aWVDbGllbnQ7CisgICAgZnJpZW5kIGNsYXNzIE1vdmllQ2xpZW50OworICAgIE93
blB0cjxNb3ZpZUNsaWVudD4gbV9tb3ZpZUNsaWVudDsKKworICAgIGNsYXNzIExheWVyQ2xpZW50
OworICAgIGZyaWVuZCBjbGFzcyBMYXllckNsaWVudDsKKyAgICBPd25QdHI8TGF5ZXJDbGllbnQ+
IG1fbGF5ZXJDbGllbnQ7CisKKyAgICBjbGFzcyBWaXN1YWxDb250ZXh0Q2xpZW50OworICAgIGZy
aWVuZCBjbGFzcyBWaXN1YWxDb250ZXh0Q2xpZW50OworICAgIE93blB0cjxWaXN1YWxDb250ZXh0
Q2xpZW50PiBtX3Zpc3VhbENvbnRleHRDbGllbnQ7CisKICAgICBNZWRpYVBsYXllciogbV9wbGF5
ZXI7Ci0gICAgT3duUHRyPFFUTW92aWVXaW4+IG1fcXRNb3ZpZTsKLSNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCisgICAgUmVmUHRyPFFUTW92aWU+IG1fbW92aWU7CiAgICAgT3duUHRy
PEdyYXBoaWNzTGF5ZXI+IG1fcXRWaWRlb0xheWVyOwotI2VuZGlmCisgICAgUmVmUHRyPFFUTW92
aWVWaXN1YWxDb250ZXh0PiBtX3Zpc3VhbENvbnRleHQ7CiAgICAgZmxvYXQgbV9zZWVrVG87Ci0g
ICAgVGltZXI8TWVkaWFQbGF5ZXJQcml2YXRlPiBtX3NlZWtUaW1lcjsKKyAgICBUaW1lcjxNZWRp
YVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0PiBtX3NlZWtUaW1lcjsKKyAgICBU
aW1lcjxNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0PiBtX3Zpc3VhbENv
bnRleHRUaW1lcjsKICAgICBJbnRTaXplIG1fc2l6ZTsKICAgICBNZWRpYVBsYXllcjo6TmV0d29y
a1N0YXRlIG1fbmV0d29ya1N0YXRlOwogICAgIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIG1fcmVh
ZHlTdGF0ZTsK
</data>
<flag name="review"
          id="38617"
          type_id="1"
          status="-"
          setter="eric.carlson"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54602</attachid>
            <date>2010-04-28 11:56:43 -0700</date>
            <delta_ts>2010-04-29 16:49:57 -0700</delta_ts>
            <desc>Part 3: JavaScriptCore: Added cancelCallOnMainThread</desc>
            <filename>7569713-MainThread.patch</filename>
            <type>text/plain</type>
            <size>4395</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDU4NDE4KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTAtMDQtMjcgIEplciBOb2Js
ZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0zNDAwNT4KKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc1Njk3MTM+CisgICAgICAgIAorICAg
ICAgICBBZGRlZCBjYW5jZWxDYWxsT25NYWluVGhyZWFkLiAgY2FsbE9uTWFpblRocmVhZCBzaG91
bGQgYWx3YXlzIG5vdyBiZSBwYWlyZWQKKyAgICAgICAgd2l0aCBjYW5jZWxDYWxsT25NYWluVGhy
ZWFkIGluIHNpdHVhdGlvbnMgd2hlcmUgdGhlIHJlZmNvbiBwYXNzZWQgdG8gY2FsbE9uTWFpblRo
cmVhZAorICAgICAgICBtYXkgYmUgZGVhbGxvY2VkIGJlZm9yZSB0aGUgbWFpbiB0aHJlYWQgZnVu
Y3Rpb24gY2FuIGJlIGRpc3BhdGNoZWQuICAKKyAgICAgICAgCisgICAgICAgICogd3RmL01haW5U
aHJlYWQuY3BwOgorICAgICAgICAoV1RGOjpGdW5jdGlvbldpdGhDb250ZXh0OjpvcGVyYXRvciA9
PSApOiBTdXBwb3J0cyB0aGUgRnVuY3Rpb25XaXRoQ29udGV4dEZpbmRlciBwcmVkaWNhdGUgZnVu
Y3Rvci4KKyAgICAgICAgKFdURjo6RnVuY3Rpb25XaXRoQ29udGV4dEZpbmRlcjo6RnVuY3Rpb25X
aXRoQ29udGV4dEZpbmRlcik6ICBQcmVkaWNhdGUgZnVuY3RvciBmb3IgdXNlIHdpdGggRGVxdWV1
ZTo6ZmluZElmCisgICAgICAgIChXVEY6OkZ1bmN0aW9uV2l0aENvbnRleHRGaW5kZXI6Om9wZXJh
dG9yKCkpOgorICAgICAgICAoV1RGOjpjYW5jZWxDYWxsT25NYWluVGhyZWFkKToKKyAgICAgICAg
KiB3dGYvTWFpblRocmVhZC5oOgorCiAyMDEwLTA0LTI4ICBTaW1vbiBIYXVzbWFubiAgPHNpbW9u
LmhhdXNtYW5uQG5va2lhLmNvbT4sIEtlbnQgSGFuc2VuIDxrZW50LmhhbnNlbkBub2tpYS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZGVm
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5kZWYJKHJldmlzaW9uIDU4NDE4KQorKysgSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLmRlZgkod29ya2luZyBjb3B5KQpAQCAtNzYsNiArNzYsNyBAQCBFWFBPUlRTCiAgICAgP2Nh
bGxASlNDQEBZQT9BVkpTVmFsdWVAMUBQQVZFeGVjU3RhdGVAMUBWMjFAVzRDYWxsVHlwZUAxQEFC
VENhbGxEYXRhQDFAMUFCVkFyZ0xpc3RAMUBAWgogICAgID9jYWxsT25NYWluVGhyZWFkQFdURkBA
WUFYUDZBWFBBWEBaMEBaCiAgICAgP2NhbGxPbk1haW5UaHJlYWRBbmRXYWl0QFdURkBAWUFYUDZB
WFBBWEBaMEBaCisgICAgP2NhbmNlbENhbGxPbk1haW5UaHJlYWRAV1RGQEBZQVhQNkFYUEFYQFow
QFoKICAgICA/Y2hhbmdlUHJvdG90eXBlVHJhbnNpdGlvbkBTdHJ1Y3R1cmVASlNDQEBTQT9BVj8k
UGFzc1JlZlB0ckBWU3RydWN0dXJlQEpTQ0BAQFdURkBAUEFWMTJAVkpTVmFsdWVAMkBAWgogICAg
ID9jaGFyYWN0ZXJTdGFydGluZ0F0QFN0cmluZ0BXZWJDb3JlQEBRQkVISUBaCiAgICAgP2NoYXJh
Y3RlcnNAU3RyaW5nQFdlYkNvcmVAQFFCRVBCX1dYWgpJbmRleDogSmF2YVNjcmlwdENvcmUvd3Rm
L01haW5UaHJlYWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0Zi9NYWluVGhy
ZWFkLmNwcAkocmV2aXNpb24gNTg0MTgpCisrKyBKYXZhU2NyaXB0Q29yZS93dGYvTWFpblRocmVh
ZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDggKzQ3LDIyIEBAIHN0cnVjdCBGdW5jdGlvbldp
dGhDb250ZXh0IHsKICAgICAgICAgLCBzeW5jRmxhZyhzeW5jRmxhZykKICAgICB7IAogICAgIH0K
KyAgICBib29sIG9wZXJhdG9yID09IChjb25zdCBGdW5jdGlvbldpdGhDb250ZXh0JiBvKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uID09IG8uZnVuY3Rpb24KKyAgICAgICAgICAgICYm
IGNvbnRleHQgPT0gby5jb250ZXh0CisgICAgICAgICAgICAmJiBzeW5jRmxhZyA9PSBvLnN5bmNG
bGFnOworICAgIH0KK307CisKK2NsYXNzIEZ1bmN0aW9uV2l0aENvbnRleHRGaW5kZXIgeworcHVi
bGljOgorICAgIEZ1bmN0aW9uV2l0aENvbnRleHRGaW5kZXIoY29uc3QgRnVuY3Rpb25XaXRoQ29u
dGV4dCYgbSkgOiBtKG0pIHt9CisgICAgYm9vbCBvcGVyYXRvcigpIChGdW5jdGlvbldpdGhDb250
ZXh0JiBvKSB7IHJldHVybiBvID09IG07IH0KKyAgICBGdW5jdGlvbldpdGhDb250ZXh0IG07CiB9
OwogCisKIHR5cGVkZWYgRGVxdWU8RnVuY3Rpb25XaXRoQ29udGV4dD4gRnVuY3Rpb25RdWV1ZTsK
IAogc3RhdGljIGJvb2wgY2FsbGJhY2tzUGF1c2VkOyAvLyBUaGlzIGdsb2JhbCB2YXJpYWJsZSBp
cyBvbmx5IGFjY2Vzc2VkIGZyb20gbWFpbiB0aHJlYWQuCkBAIC0xODEsNiArMTk1LDI0IEBAIHZv
aWQgY2FsbE9uTWFpblRocmVhZEFuZFdhaXQoTWFpblRocmVhZEYKICAgICBzeW5jRmxhZy53YWl0
KGZ1bmN0aW9uUXVldWVNdXRleCk7CiB9CiAKK3ZvaWQgY2FuY2VsQ2FsbE9uTWFpblRocmVhZChN
YWluVGhyZWFkRnVuY3Rpb24qIGZ1bmN0aW9uLCB2b2lkKiBjb250ZXh0KQoreworICAgIEFTU0VS
VChmdW5jdGlvbik7CisKKyAgICBNdXRleExvY2tlciBsb2NrZXIobWFpblRocmVhZEZ1bmN0aW9u
UXVldWVNdXRleCgpKTsKKworICAgIEZ1bmN0aW9uV2l0aENvbnRleHRGaW5kZXIgcHJlZChGdW5j
dGlvbldpdGhDb250ZXh0KGZ1bmN0aW9uLCBjb250ZXh0KSk7CisKKyAgICB3aGlsZSAodHJ1ZSkg
eworICAgICAgICAvLyBXZSBtdXN0IHJlZGVmaW5lICdpJyBlYWNoIHBhc3MsIGJlY2F1c2UgdGhl
IGl0ZXJlcmF0b3IncyBvcGVyYXRvcj0gCisgICAgICAgIC8vIHJlcXVpcmVzICd0aGlzJyB0byBi
ZSB2YWxpZCwgYW5kIHJlbW92ZSgpIGludmFsaWRhdGVzIGFsbCBpdGVyYXRvcnMKKyAgICAgICAg
RnVuY3Rpb25RdWV1ZTo6aXRlcmF0b3IgaShmdW5jdGlvblF1ZXVlKCkuZmluZElmKHByZWQpKTsK
KyAgICAgICAgaWYgKGkgPT0gZnVuY3Rpb25RdWV1ZSgpLmVuZCgpKQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGZ1bmN0aW9uUXVldWUoKS5yZW1vdmUoaSk7CisgICAgfQorfQorCiB2b2lk
IHNldE1haW5UaHJlYWRDYWxsYmFja3NQYXVzZWQoYm9vbCBwYXVzZWQpCiB7CiAgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi9NYWluVGhyZWFkLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvd3RmL01haW5UaHJlYWQuaAkocmV2aXNpb24g
NTg0MTgpCisrKyBKYXZhU2NyaXB0Q29yZS93dGYvTWFpblRocmVhZC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00Miw2ICs0Miw4IEBAIHZvaWQgaW5pdGlhbGl6ZU1haW5UaHJlYWQoKTsKIAogdm9pZCBj
YWxsT25NYWluVGhyZWFkKE1haW5UaHJlYWRGdW5jdGlvbiosIHZvaWQqIGNvbnRleHQpOwogdm9p
ZCBjYWxsT25NYWluVGhyZWFkQW5kV2FpdChNYWluVGhyZWFkRnVuY3Rpb24qLCB2b2lkKiBjb250
ZXh0KTsKK3ZvaWQgY2FuY2VsQ2FsbE9uTWFpblRocmVhZChNYWluVGhyZWFkRnVuY3Rpb24qLCB2
b2lkKiBjb250ZXh0KTsKKwogdm9pZCBzZXRNYWluVGhyZWFkQ2FsbGJhY2tzUGF1c2VkKGJvb2wg
cGF1c2VkKTsKIAogYm9vbCBpc01haW5UaHJlYWQoKTsKQEAgLTYzLDcgKzY1LDcgQEAgdm9pZCBp
bml0aWFsaXplTWFpblRocmVhZFRvUHJvY2Vzc01haW5UaAogCiB1c2luZyBXVEY6OmNhbGxPbk1h
aW5UaHJlYWQ7CiB1c2luZyBXVEY6OmNhbGxPbk1haW5UaHJlYWRBbmRXYWl0OwordXNpbmcgV1RG
OjpjYW5jZWxDYWxsT25NYWluVGhyZWFkOwogdXNpbmcgV1RGOjpzZXRNYWluVGhyZWFkQ2FsbGJh
Y2tzUGF1c2VkOwogdXNpbmcgV1RGOjppc01haW5UaHJlYWQ7Ci0KICNlbmRpZiAvLyBNYWluVGhy
ZWFkX2gK
</data>
<flag name="review"
          id="38620"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55053</attachid>
            <date>2010-05-04 15:28:12 -0700</date>
            <delta_ts>2010-05-04 15:35:18 -0700</delta_ts>
            <desc>Part 1.1: QTMovieWin: The breakup of QTMovieWin</desc>
            <filename>QTMovieWin-Breakup.patch</filename>
            <type>text/plain</type>
            <size>97792</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">SW5kZXg6IFFUQ0ZEaWN0aW9uYXJ5LmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFFUQ0ZEaWN0aW9uYXJ5
LmNwcAkocmV2aXNpb24gMCkNCisrKyBRVENGRGljdGlvbmFyeS5jcHAJKHJldmlzaW9uIDApDQpA
QCAtMCwwICsxLDYwIEBADQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSwg
MjAxMCBBcHBsZSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaW5jbHVkZSAiUVRDRkRpY3Rpb25hcnkuaCIKKworI2luY2x1ZGUgPENG
RGF0YS5oPgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKworQ0ZEYXRhUmVmIFFUQ0ZQcm9wZXJ0eUxp
c3RDcmVhdGVYTUxEYXRhKENGQWxsb2NhdG9yUmVmIGFsbG9jYXRvciwgQ0ZQcm9wZXJ0eUxpc3RS
ZWYgcHJvcGVydHlMaXN0KQoreworCisgICAgdHlwZWRlZiBDRkRhdGFSZWYgKCogcGZuQ0ZQcm9w
ZXJ0eUxpc3RDcmVhdGVYTUxEYXRhKShDRkFsbG9jYXRvclJlZiBhbGxvY2F0b3IsIENGUHJvcGVy
dHlMaXN0UmVmIHByb3BlcnR5TGlzdCk7CisgICAgc3RhdGljIHBmbkNGUHJvcGVydHlMaXN0Q3Jl
YXRlWE1MRGF0YSBwQ0ZQcm9wZXJ0eUxpc3RDcmVhdGVYTUxEYXRhID0gMDsKKyAgICBpZiAoIXBD
RlByb3BlcnR5TGlzdENyZWF0ZVhNTERhdGEpIHsKKyAgICAgICAgSE1PRFVMRSBxdGNmRExMID0g
TG9hZExpYnJhcnlXKEwiUVRDRi5kbGwiKTsKKyAgICAgICAgaWYgKHF0Y2ZETEwpCisgICAgICAg
ICAgICBwQ0ZQcm9wZXJ0eUxpc3RDcmVhdGVYTUxEYXRhID0gcmVpbnRlcnByZXRfY2FzdDxwZm5D
RlByb3BlcnR5TGlzdENyZWF0ZVhNTERhdGE+KEdldFByb2NBZGRyZXNzKHF0Y2ZETEwsICJRVENG
X0NGUHJvcGVydHlMaXN0Q3JlYXRlWE1MRGF0YSIpKTsKKyAgICB9CisKKyAgICBpZiAocENGUHJv
cGVydHlMaXN0Q3JlYXRlWE1MRGF0YSkKKyAgICAgICAgcmV0dXJuIHBDRlByb3BlcnR5TGlzdENy
ZWF0ZVhNTERhdGEoYWxsb2NhdG9yLCBwcm9wZXJ0eUxpc3QpOworICAgIHJldHVybiAwOworfQor
CitDRkRpY3Rpb25hcnlSZWYgUVRDRkRpY3Rpb25hcnlDcmVhdGVDb3B5V2l0aERhdGFDYWxsYmFj
ayhDRkFsbG9jYXRvclJlZiBhbGxvY2F0b3IsIENGRGljdGlvbmFyeVJlZiBkaWN0aW9uYXJ5LCBR
VENGRGljdG9uYXJ5Q3JlYXRlRnJvbURhdGFDYWxsYmFjayBjYWxsYmFjaykgCit7CisgICAgQVNT
RVJUKGRpY3Rpb25hcnkpOworICAgIEFTU0VSVChjYWxsYmFjayk7CisKKyAgICBDRkRhdGFSZWYg
ZGF0YSA9IFFUQ0ZQcm9wZXJ0eUxpc3RDcmVhdGVYTUxEYXRhKGtDRkFsbG9jYXRvckRlZmF1bHQs
IGRpY3Rpb25hcnkpOworICAgIENGRGljdGlvbmFyeVJlZiBvdXRwdXREaWN0aW9uYXJ5ID0gY2Fs
bGJhY2soYWxsb2NhdG9yLCBDRkRhdGFHZXRCeXRlUHRyKGRhdGEpLCBDRkRhdGFHZXRMZW5ndGgo
ZGF0YSkpOworICAgIGlmIChkYXRhKQorICAgICAgICBDRlJlbGVhc2UoZGF0YSk7CisKKyAgICBy
ZXR1cm4gb3V0cHV0RGljdGlvbmFyeTsKK30KSW5kZXg6IFFUQ0ZEaWN0aW9uYXJ5LmgNCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0NCi0tLSBRVENGRGljdGlvbmFyeS5oCShyZXZpc2lvbiAwKQ0KKysrIFFUQ0ZEaWN0aW9u
YXJ5LmgJKHJldmlzaW9uIDApDQpAQCAtMCwwICsxLDQ0IEBADQorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBRVENGRGljdGlvbmFyeV9oCisjZGVmaW5lIFFUQ0ZEaWN0aW9u
YXJ5X2gKKworI2lmZGVmIFFUTU9WSUVXSU5fRVhQT1JUUworI2RlZmluZSBRVE1PVklFV0lOX0FQ
SSBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKKyNlbHNlCisjZGVmaW5lIFFUTU9WSUVXSU5fQVBJIF9f
ZGVjbHNwZWMoZGxsaW1wb3J0KQorI2VuZGlmCisKKyNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9D
RkJhc2UuaD4KKwordHlwZWRlZiBjb25zdCBzdHJ1Y3QgX19DRkRpY3Rpb25hcnkgKiBDRkRpY3Rp
b25hcnlSZWY7Cit0eXBlZGVmIGNvbnN0IHN0cnVjdCBfX0NGQWxsb2NhdG9yICogQ0ZBbGxvY2F0
b3JSZWY7CisKK3R5cGVkZWYgQ0ZEaWN0aW9uYXJ5UmVmICgqIFFUQ0ZEaWN0b25hcnlDcmVhdGVG
cm9tRGF0YUNhbGxiYWNrKShDRkFsbG9jYXRvclJlZiwgY29uc3QgVUludDgqLCBDRkluZGV4KTsK
KworUVRNT1ZJRVdJTl9BUEkgQ0ZEaWN0aW9uYXJ5UmVmIFFUQ0ZEaWN0aW9uYXJ5Q3JlYXRlQ29w
eVdpdGhEYXRhQ2FsbGJhY2soQ0ZBbGxvY2F0b3JSZWYsIENGRGljdGlvbmFyeVJlZiwgUVRDRkRp
Y3RvbmFyeUNyZWF0ZUZyb21EYXRhQ2FsbGJhY2spOworCisjZW5kaWYKSW5kZXg6IFFUTW92aWUu
Y3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09DQotLS0gUVRNb3ZpZS5jcHAJKHJldmlzaW9uIDU3NjYzKQ0KKysrIFFU
TW92aWUuY3BwCSh3b3JraW5nIGNvcHkpDQpAQCAtMjQsMTkgKzI0LDE5IEBADQogICovCiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAKLSNpbmNsdWRlICJRVE1vdmllV2luLmgiCisjaW5jbHVkZSAiUVRN
b3ZpZS5oIgogCiAvLyBQdXQgTW92aWVzLmggZmlyc3Qgc28gYnVpbGQgZmFpbHVyZXMgaGVyZSBw
b2ludCBjbGVhcmx5IHRvIFF1aWNrVGltZQogI2luY2x1ZGUgPE1vdmllcy5oPgogCi0jaW5jbHVk
ZSAiUVRNb3ZpZVdpblRpbWVyLmgiCiAjaW5jbHVkZSA8R1hNYXRoLmg+CiAjaW5jbHVkZSA8UVRN
TC5oPgogI2luY2x1ZGUgPFF1aWNrVGltZUNvbXBvbmVudHMuaD4KICNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgIlFUTW92aWVUYXNr
LmgiCisjaW5jbHVkZSAiUVRNb3ZpZVdpblRpbWVyLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7
CiAKQEAgLTQ3LDcgKzQ3LDcgQEANCiBzdGF0aWMgY29uc3QgbG9uZyBtcGVnNE9iamVjdERlc2Ny
aXB0aW9uVHJhY2tUeXBlID0gJ29kc20nOwogc3RhdGljIGNvbnN0IGxvbmcgbXBlZzRTY2VuZURl
c2NyaXB0aW9uVHJhY2tUeXBlID0gJ3Nkc20nOwogc3RhdGljIGNvbnN0IGxvbmcgY2xvc2VkQ2Fw
dGlvbkRpc3BsYXlQcm9wZXJ0eUlEID0gJ2Rpc3AnOwotc3RhdGljIExQQ1RTVFIgZnVsbHNjcmVl
blFUTW92aWVXaW5Qb2ludGVyUHJvcCA9IFRFWFQoImZ1bGxzY3JlZW5RVE1vdmllV2luUG9pbnRl
ciIpOworc3RhdGljIExQQ1RTVFIgZnVsbHNjcmVlblFUTW92aWVQb2ludGVyUHJvcCA9IFRFWFQo
ImZ1bGxzY3JlZW5RVE1vdmllUG9pbnRlciIpOwogCiAvLyBSZXNpemluZyBHV29ybGRzIGlzIHNs
b3csIGdpdmUgdGhlbSBhIG1pbmltdW0gc2l6ZSBzbyBzaXplIG9mIHNtYWxsIAogLy8gdmlkZW9z
IGNhbiBiZSBhbmltYXRlZCBzbW9vdGhseQpAQCAtNjEsNTMgKzYxLDI1IEBADQogICAgIHZvaWQq
IHB0cjsKIH07CiAKLXN0YXRpYyBNb3ZpZURyYXdpbmdDb21wbGV0ZVVQUCBnTW92aWVEcmF3aW5n
Q29tcGxldGVVUFAgPSAwOwotc3RhdGljIEhhc2hTZXQ8UVRNb3ZpZVdpblByaXZhdGUqPiogZ1Rh
c2tMaXN0Owogc3RhdGljIFZlY3RvcjxDRlN0cmluZ1JlZj4qIGdTdXBwb3J0ZWRUeXBlcyA9IDA7
CiBzdGF0aWMgU0ludDMyIHF1aWNrVGltZVZlcnNpb24gPSAwOwogCi1zdGF0aWMgUVRNb3ZpZVdp
bjo6U2V0VGFza1RpbWVyRGVsYXlGdW5jIGdTZXRUYXNrVGltZXJEZWxheSA9IDA7Ci1zdGF0aWMg
UVRNb3ZpZVdpbjo6U3RvcFRhc2tUaW1lckZ1bmMgZ1N0b3BUYXNrVGltZXIgPSAwOwotCi1zdGF0
aWMgdm9pZCB1cGRhdGVUYXNrVGltZXIoaW50IG1heEludGVydmFsID0gMTAwMCkKLXsKLSAgICBp
ZiAoIWdUYXNrTGlzdC0+c2l6ZSgpKSB7Ci0gICAgICAgIGdTdG9wVGFza1RpbWVyKCk7Ci0gICAg
ICAgIHJldHVybjsgICAgCi0gICAgfQotICAgIAotICAgIGxvbmcgaW50ZXJ2YWxJbk1TOwotICAg
IFFUR2V0VGltZVVudGlsTmV4dFRhc2soJmludGVydmFsSW5NUywgMTAwMCk7Ci0gICAgaWYgKGlu
dGVydmFsSW5NUyA+IG1heEludGVydmFsKQotICAgICAgICBpbnRlcnZhbEluTVMgPSBtYXhJbnRl
cnZhbDsKLSAgICBnU2V0VGFza1RpbWVyRGVsYXkoc3RhdGljX2Nhc3Q8ZmxvYXQ+KGludGVydmFs
SW5NUykgLyAxMDAwKTsKLX0KLQotY2xhc3MgUVRNb3ZpZVdpblByaXZhdGUgOiBwdWJsaWMgTm9u
Y29weWFibGUgeworY2xhc3MgUVRNb3ZpZVByaXZhdGUgOiBwdWJsaWMgTm9uY29weWFibGUsIHB1
YmxpYyBRVE1vdmllVGFza0NsaWVudCB7CiBwdWJsaWM6Ci0gICAgUVRNb3ZpZVdpblByaXZhdGUo
KTsKLSAgICB+UVRNb3ZpZVdpblByaXZhdGUoKTsKKyAgICBRVE1vdmllUHJpdmF0ZSgpOworICAg
IH5RVE1vdmllUHJpdmF0ZSgpOwogICAgIHZvaWQgdGFzaygpOwogICAgIHZvaWQgc3RhcnRUYXNr
KCk7CiAgICAgdm9pZCBlbmRUYXNrKCk7CiAKICAgICB2b2lkIGNyZWF0ZU1vdmllQ29udHJvbGxl
cigpOwotICAgIHZvaWQgcmVnaXN0ZXJEcmF3aW5nQ2FsbGJhY2soKTsKLSAgICB2b2lkIGRyYXdp
bmdDb21wbGV0ZSgpOwotICAgIHZvaWQgdXBkYXRlR1dvcmxkKCk7Ci0gICAgdm9pZCBjcmVhdGVH
V29ybGQoKTsKLSAgICB2b2lkIGRlbGV0ZUdXb3JsZCgpOwotICAgIHZvaWQgY2xlYXJHV29ybGQo
KTsKLSAgICB2b2lkIGNhY2hlTW92aWVTY2FsZSgpOwotICAgIHZvaWQgdXBkYXRlTW92aWVTaXpl
KCk7CiAKLSAgICB2b2lkIHNldFNpemUoaW50LCBpbnQpOwotCi0gICAgUVRNb3ZpZVdpbiogbV9t
b3ZpZVdpbjsKKyAgICBRVE1vdmllKiBtX21vdmllV2luOwogICAgIE1vdmllIG1fbW92aWU7CiAg
ICAgTW92aWVDb250cm9sbGVyIG1fbW92aWVDb250cm9sbGVyOwogICAgIGJvb2wgbV90YXNraW5n
OwotICAgIFFUTW92aWVXaW5DbGllbnQqIG1fY2xpZW50OworICAgIGJvb2wgbV9kaXNhYmxlZDsK
KyAgICBWZWN0b3I8UVRNb3ZpZUNsaWVudCo+IG1fY2xpZW50czsKICAgICBsb25nIG1fbG9hZFN0
YXRlOwogICAgIGJvb2wgbV9lbmRlZDsKICAgICBib29sIG1fc2Vla2luZzsKQEAgLTExNiwxMCAr
ODgsNiBAQA0KICAgICBpbnQgbV93aWR0aDsKICAgICBpbnQgbV9oZWlnaHQ7CiAgICAgYm9vbCBt
X3Zpc2libGU7Ci0gICAgR1dvcmxkUHRyIG1fZ1dvcmxkOwotICAgIGludCBtX2dXb3JsZFdpZHRo
OwotICAgIGludCBtX2dXb3JsZEhlaWdodDsKLSAgICBHV29ybGRQdHIgbV9zYXZlZEdXb3JsZDsK
ICAgICBsb25nIG1fbG9hZEVycm9yOwogICAgIGZsb2F0IG1fd2lkdGhTY2FsZUZhY3RvcjsKICAg
ICBmbG9hdCBtX2hlaWdodFNjYWxlRmFjdG9yOwpAQCAtMTI5LDE5ICs5NywxMyBAQA0KICNpZiAh
QVNTRVJUX0RJU0FCTEVECiAgICAgYm9vbCBtX3NjYWxlQ2FjaGVkOwogI2VuZGlmCi0gICAgV2lu
ZG93UHRyIG1fZnVsbHNjcmVlbldpbmRvdzsKLSAgICBHV29ybGRQdHIgbV9mdWxsc2NyZWVuT3Jp
Z0dXb3JsZDsKLSAgICBSZWN0IG1fZnVsbHNjcmVlblJlY3Q7Ci0gICAgUVRNb3ZpZVdpbkZ1bGxz
Y3JlZW5DbGllbnQqIG1fZnVsbHNjcmVlbkNsaWVudDsKLSAgICBjaGFyKiBtX2Z1bGxzY3JlZW5S
ZXN0b3JlU3RhdGU7CiB9OwogCi1RVE1vdmllV2luUHJpdmF0ZTo6UVRNb3ZpZVdpblByaXZhdGUo
KQorUVRNb3ZpZVByaXZhdGU6OlFUTW92aWVQcml2YXRlKCkKICAgICA6IG1fbW92aWVXaW4oMCkK
ICAgICAsIG1fbW92aWUoMCkKICAgICAsIG1fbW92aWVDb250cm9sbGVyKDApCiAgICAgLCBtX3Rh
c2tpbmcoZmFsc2UpCi0gICAgLCBtX2NsaWVudCgwKQogICAgICwgbV9sb2FkU3RhdGUoMCkKICAg
ICAsIG1fZW5kZWQoZmFsc2UpCiAgICAgLCBtX3NlZWtpbmcoZmFsc2UpCkBAIC0xNTAsMzUgKzEx
MiwyMiBAQA0KICAgICAsIG1fd2lkdGgoMCkKICAgICAsIG1faGVpZ2h0KDApCiAgICAgLCBtX3Zp
c2libGUoZmFsc2UpCi0gICAgLCBtX2dXb3JsZCgwKQotICAgICwgbV9nV29ybGRXaWR0aCgwKQot
ICAgICwgbV9nV29ybGRIZWlnaHQoMCkKLSAgICAsIG1fc2F2ZWRHV29ybGQoMCkKICAgICAsIG1f
bG9hZEVycm9yKDApCiAgICAgLCBtX3dpZHRoU2NhbGVGYWN0b3IoMSkKICAgICAsIG1faGVpZ2h0
U2NhbGVGYWN0b3IoMSkKICAgICAsIG1fY3VycmVudFVSTCgwKQogICAgICwgbV90aW1lVG9SZXN0
b3JlKC0xLjBmKQogICAgICwgbV9yYXRlVG9SZXN0b3JlKC0xLjBmKQorICAgICwgbV9kaXNhYmxl
ZChmYWxzZSkKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgLCBtX3NjYWxlQ2FjaGVkKGZhbHNl
KQogI2VuZGlmCi0gICAgLCBtX2Z1bGxzY3JlZW5XaW5kb3coMCkKLSAgICAsIG1fZnVsbHNjcmVl
bk9yaWdHV29ybGQoMCkKLSAgICAsIG1fZnVsbHNjcmVlbkNsaWVudCgwKQotICAgICwgbV9mdWxs
c2NyZWVuUmVzdG9yZVN0YXRlKDApCiB7Ci0gICAgUmVjdCByZWN0ID0geyAwLCAwLCAwLCAwIH07
Ci0gICAgbV9mdWxsc2NyZWVuUmVjdCA9IHJlY3Q7CiB9CiAKLVFUTW92aWVXaW5Qcml2YXRlOjp+
UVRNb3ZpZVdpblByaXZhdGUoKQorUVRNb3ZpZVByaXZhdGU6On5RVE1vdmllUHJpdmF0ZSgpCiB7
Ci0gICAgQVNTRVJUKCFtX2Z1bGxzY3JlZW5XaW5kb3cpOwotCiAgICAgZW5kVGFzaygpOwotICAg
IGlmIChtX2dXb3JsZCkKLSAgICAgICAgZGVsZXRlR1dvcmxkKCk7CiAgICAgaWYgKG1fbW92aWVD
b250cm9sbGVyKQogICAgICAgICBEaXNwb3NlTW92aWVDb250cm9sbGVyKG1fbW92aWVDb250cm9s
bGVyKTsKICAgICBpZiAobV9tb3ZpZSkKQEAgLTE4Nyw2MCArMTM2LDI2IEBADQogICAgICAgICBD
RlJlbGVhc2UobV9jdXJyZW50VVJMKTsKIH0KIAotdm9pZCBRVE1vdmllV2luOjp0YXNrVGltZXJG
aXJlZCgpCit2b2lkIFFUTW92aWVQcml2YXRlOjpzdGFydFRhc2soKSAKIHsKLSAgICAvLyBUaGUg
aGFzaCBjb250ZW50IG1pZ2h0IGNoYW5nZSBkdXJpbmcgdGFzaygpCi0gICAgVmVjdG9yPFFUTW92
aWVXaW5Qcml2YXRlKj4gdGFza3M7Ci0gICAgY29weVRvVmVjdG9yKCpnVGFza0xpc3QsIHRhc2tz
KTsKLSAgICBzaXplX3QgY291bnQgPSB0YXNrcy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBu
ID0gMDsgbiA8IGNvdW50OyArK24pCi0gICAgICAgIHRhc2tzW25dLT50YXNrKCk7Ci0KLSAgICB1
cGRhdGVUYXNrVGltZXIoKTsKKyAgICBpZiAoIW1fdGFza2luZykgeworICAgICAgICBRVE1vdmll
VGFzazo6c2hhcmVkVGFzaygpLT5hZGRUYXNrQ2xpZW50KHRoaXMpOworICAgICAgICBtX3Rhc2tp
bmcgPSB0cnVlOworICAgIH0KKyAgICBRVE1vdmllVGFzazo6c2hhcmVkVGFzaygpLT51cGRhdGVU
YXNrVGltZXIoKTsKIH0KIAotdm9pZCBRVE1vdmllV2luUHJpdmF0ZTo6c3RhcnRUYXNrKCkgCit2
b2lkIFFUTW92aWVQcml2YXRlOjplbmRUYXNrKCkgCiB7Ci0gICAgaWYgKG1fdGFza2luZykKLSAg
ICAgICAgcmV0dXJuOwotICAgIGlmICghZ1Rhc2tMaXN0KQotICAgICAgICBnVGFza0xpc3QgPSBu
ZXcgSGFzaFNldDxRVE1vdmllV2luUHJpdmF0ZSo+OwotICAgIGdUYXNrTGlzdC0+YWRkKHRoaXMp
OwotICAgIG1fdGFza2luZyA9IHRydWU7Ci0gICAgdXBkYXRlVGFza1RpbWVyKCk7CisgICAgaWYg
KG1fdGFza2luZykgeworICAgICAgICBRVE1vdmllVGFzazo6c2hhcmVkVGFzaygpLT5yZW1vdmVU
YXNrQ2xpZW50KHRoaXMpOworICAgICAgICBtX3Rhc2tpbmcgPSBmYWxzZTsKKyAgICB9CisgICAg
UVRNb3ZpZVRhc2s6OnNoYXJlZFRhc2soKS0+dXBkYXRlVGFza1RpbWVyKCk7CiB9CiAKLXZvaWQg
UVRNb3ZpZVdpblByaXZhdGU6OmVuZFRhc2soKSAKK3ZvaWQgUVRNb3ZpZVByaXZhdGU6OnRhc2so
KSAKIHsKLSAgICBpZiAoIW1fdGFza2luZykKLSAgICAgICAgcmV0dXJuOwotICAgIGdUYXNrTGlz
dC0+cmVtb3ZlKHRoaXMpOwotICAgIG1fdGFza2luZyA9IGZhbHNlOwotICAgIHVwZGF0ZVRhc2tU
aW1lcigpOwotfQotCi12b2lkIFFUTW92aWVXaW5Qcml2YXRlOjpjYWNoZU1vdmllU2NhbGUoKQot
ewotICAgIFJlY3QgbmF0dXJhbFJlY3Q7Ci0gICAgUmVjdCBpbml0aWFsUmVjdDsKLQotICAgIEdl
dE1vdmllTmF0dXJhbEJvdW5kc1JlY3QobV9tb3ZpZSwgJm5hdHVyYWxSZWN0KTsKLSAgICBHZXRN
b3ZpZUJveChtX21vdmllLCAmaW5pdGlhbFJlY3QpOwotCi0gICAgZmxvYXQgbmF0dXJhbFdpZHRo
ID0gbmF0dXJhbFJlY3QucmlnaHQgLSBuYXR1cmFsUmVjdC5sZWZ0OwotICAgIGZsb2F0IG5hdHVy
YWxIZWlnaHQgPSBuYXR1cmFsUmVjdC5ib3R0b20gLSBuYXR1cmFsUmVjdC50b3A7Ci0KLSAgICBp
ZiAobmF0dXJhbFdpZHRoKQotICAgICAgICBtX3dpZHRoU2NhbGVGYWN0b3IgPSAoaW5pdGlhbFJl
Y3QucmlnaHQgLSBpbml0aWFsUmVjdC5sZWZ0KSAvIG5hdHVyYWxXaWR0aDsKLSAgICBpZiAobmF0
dXJhbEhlaWdodCkKLSAgICAgICAgbV9oZWlnaHRTY2FsZUZhY3RvciA9IChpbml0aWFsUmVjdC5i
b3R0b20gLSBpbml0aWFsUmVjdC50b3ApIC8gbmF0dXJhbEhlaWdodDsKLSNpZiAhQVNTRVJUX0RJ
U0FCTEVECi0gICAgbV9zY2FsZUNhY2hlZCA9IHRydWU7OwotI2VuZGlmCi19Ci0KLXZvaWQgUVRN
b3ZpZVdpblByaXZhdGU6OnRhc2soKSAKLXsKICAgICBBU1NFUlQobV90YXNraW5nKTsKIAogICAg
IGlmICghbV9sb2FkRXJyb3IpIHsKQEAgLTI2MiwxNyArMTc3LDE0IEBADQogICAgICAgICAgICAg
Ym9vbCBzaG91bGRSZXN0b3JlUGxheWJhY2tTdGF0ZSA9IGZhbHNlOwogICAgICAgICAgICAgYm9v
bCBtb3ZpZU5ld2x5UGxheWFibGUgPSBsb2FkU3RhdGUgPj0gUVRNb3ZpZUxvYWRTdGF0ZUxvYWRl
ZCAmJiBtX2xvYWRTdGF0ZSA8IFFUTW92aWVMb2FkU3RhdGVMb2FkZWQ7CiAgICAgICAgICAgICBt
X2xvYWRTdGF0ZSA9IGxvYWRTdGF0ZTsKLSAgICAgICAgICAgIGlmIChtb3ZpZU5ld2x5UGxheWFi
bGUpIHsKLSAgICAgICAgICAgICAgICBjYWNoZU1vdmllU2NhbGUoKTsKLSAgICAgICAgICAgICAg
ICB1cGRhdGVNb3ZpZVNpemUoKTsKLSAgICAgICAgICAgICAgICBpZiAobV92aXNpYmxlKQotICAg
ICAgICAgICAgICAgICAgICBjbGVhckdXb3JsZCgpOworICAgICAgICAgICAgaWYgKG1vdmllTmV3
bHlQbGF5YWJsZSkKICAgICAgICAgICAgICAgICBzaG91bGRSZXN0b3JlUGxheWJhY2tTdGF0ZSA9
IHRydWU7Ci0gICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICghbV9tb3ZpZUNvbnRyb2xs
ZXIgJiYgbV9sb2FkU3RhdGUgPj0gUVRNb3ZpZUxvYWRTdGF0ZUxvYWRlZCkKICAgICAgICAgICAg
ICAgICBjcmVhdGVNb3ZpZUNvbnRyb2xsZXIoKTsKLSAgICAgICAgICAgIG1fY2xpZW50LT5tb3Zp
ZUxvYWRTdGF0ZUNoYW5nZWQobV9tb3ZpZVdpbik7CisKKyAgICAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9jbGllbnRzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgIG1fY2xp
ZW50c1tpXS0+bW92aWVMb2FkU3RhdGVDaGFuZ2VkKG1fbW92aWVXaW4pOwogICAgICAgICAgICAg
CiAgICAgICAgICAgICBpZiAoc2hvdWxkUmVzdG9yZVBsYXliYWNrU3RhdGUgJiYgbV90aW1lVG9S
ZXN0b3JlICE9IC0xLjBmKSB7CiAgICAgICAgICAgICAgICAgbV9tb3ZpZVdpbi0+c2V0Q3VycmVu
dFRpbWUobV90aW1lVG9SZXN0b3JlKTsKQEAgLTI4MSw3ICsxOTMsNyBAQA0KICAgICAgICAgICAg
ICAgICBtX3JhdGVUb1Jlc3RvcmUgPSAtMS4wZjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgaWYgKG1fbW92aWVXaW4tPm1fZGlzYWJsZWQpIHsKKyAgICAgICAgICAgIGlmIChtX2Rpc2Fi
bGVkKSB7CiAgICAgICAgICAgICAgICAgZW5kVGFzaygpOwogICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgIH0KQEAgLTI5MiwyMyArMjA0LDI3IEBADQogICAgIGJvb2wgZW5kZWQg
PSAhIUlzTW92aWVEb25lKG1fbW92aWUpOwogICAgIGlmIChlbmRlZCAhPSBtX2VuZGVkKSB7CiAg
ICAgICAgIG1fZW5kZWQgPSBlbmRlZDsKLSAgICAgICAgaWYgKG1fY2xpZW50ICYmIGVuZGVkKQot
ICAgICAgICAgICAgbV9jbGllbnQtPm1vdmllRW5kZWQobV9tb3ZpZVdpbik7CisgICAgICAgIGlm
IChlbmRlZCkgeworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NsaWVudHMu
c2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICBtX2NsaWVudHNbaV0tPm1vdmllRW5kZWQobV9t
b3ZpZVdpbik7CisgICAgICAgIH0KICAgICB9CiAKICAgICBmbG9hdCB0aW1lID0gbV9tb3ZpZVdp
bi0+Y3VycmVudFRpbWUoKTsKICAgICBpZiAodGltZSA8IG1fbGFzdE1lZGlhVGltZSB8fCB0aW1l
ID49IG1fbGFzdE1lZGlhVGltZSArIGNOb25Db250aW51b3VzVGltZUNoYW5nZSB8fCBtX3NlZWtp
bmcpIHsKICAgICAgICAgbV9zZWVraW5nID0gZmFsc2U7Ci0gICAgICAgIGlmIChtX2NsaWVudCkK
LSAgICAgICAgICAgIG1fY2xpZW50LT5tb3ZpZVRpbWVDaGFuZ2VkKG1fbW92aWVXaW4pOworICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY2xpZW50cy5zaXplKCk7ICsraSkKKyAgICAg
ICAgICAgIG1fY2xpZW50c1tpXS0+bW92aWVUaW1lQ2hhbmdlZChtX21vdmllV2luKTsKICAgICB9
CiAgICAgbV9sYXN0TWVkaWFUaW1lID0gdGltZTsKIAogICAgIGlmIChtX2xvYWRFcnJvcikKICAg
ICAgICAgZW5kVGFzaygpOworICAgIGVsc2UKKyAgICAgICAgUVRNb3ZpZVRhc2s6OnNoYXJlZFRh
c2soKS0+dXBkYXRlVGFza1RpbWVyKCk7CiB9CiAKLXZvaWQgUVRNb3ZpZVdpblByaXZhdGU6OmNy
ZWF0ZU1vdmllQ29udHJvbGxlcigpCit2b2lkIFFUTW92aWVQcml2YXRlOjpjcmVhdGVNb3ZpZUNv
bnRyb2xsZXIoKQogewogICAgIFJlY3QgYm91bmRzOwogICAgIGxvbmcgZmxhZ3M7CkBAIC0zMjQs
MTU2ICsyNDAsMzcgQEANCiAgICAgbV9tb3ZpZUNvbnRyb2xsZXIgPSBOZXdNb3ZpZUNvbnRyb2xs
ZXIobV9tb3ZpZSwgJmJvdW5kcywgZmxhZ3MpOwogICAgIGlmICghbV9tb3ZpZUNvbnRyb2xsZXIp
CiAgICAgICAgIHJldHVybjsKLQotICAgIE1DU2V0Q29udHJvbGxlclBvcnQobV9tb3ZpZUNvbnRy
b2xsZXIsIG1fZ1dvcmxkKTsKLSAgICBNQ1NldENvbnRyb2xsZXJBdHRhY2hlZChtX21vdmllQ29u
dHJvbGxlciwgZmFsc2UpOwogfQogCi12b2lkIFFUTW92aWVXaW5Qcml2YXRlOjpyZWdpc3RlckRy
YXdpbmdDYWxsYmFjaygpCitRVE1vdmllOjpRVE1vdmllKFFUTW92aWVDbGllbnQqIGNsaWVudCkK
KyAgICA6IG1fcHJpdmF0ZShuZXcgUVRNb3ZpZVByaXZhdGUoKSkKIHsKLSAgICBVcHBQYXJhbSBw
YXJhbTsKLSAgICBwYXJhbS5wdHIgPSB0aGlzOwotICAgIFNldE1vdmllRHJhd2luZ0NvbXBsZXRl
UHJvYyhtX21vdmllLCBtb3ZpZURyYXdpbmdDYWxsV2hlbkNoYW5nZWQsIGdNb3ZpZURyYXdpbmdD
b21wbGV0ZVVQUCwgcGFyYW0ubG9uZ1ZhbHVlKTsKKyAgICBtX3ByaXZhdGUtPm1fbW92aWVXaW4g
PSB0aGlzOworICAgIGlmIChjbGllbnQpCisgICAgICAgIG1fcHJpdmF0ZS0+bV9jbGllbnRzLmFw
cGVuZChjbGllbnQpOworICAgIGluaXRpYWxpemVRdWlja1RpbWUoKTsKIH0KIAotdm9pZCBRVE1v
dmllV2luUHJpdmF0ZTo6ZHJhd2luZ0NvbXBsZXRlKCkKK1FUTW92aWU6On5RVE1vdmllKCkKIHsK
LSAgICBpZiAoIW1fZ1dvcmxkIHx8IG1fbW92aWVXaW4tPm1fZGlzYWJsZWQgfHwgbV9sb2FkU3Rh
dGUgPCBRVE1vdmllTG9hZFN0YXRlTG9hZGVkKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jbGll
bnQtPm1vdmllTmV3SW1hZ2VBdmFpbGFibGUobV9tb3ZpZVdpbik7CisgICAgZGVsZXRlIG1fcHJp
dmF0ZTsKIH0KIAotdm9pZCBRVE1vdmllV2luUHJpdmF0ZTo6dXBkYXRlR1dvcmxkKCkKK3ZvaWQg
UVRNb3ZpZTo6YWRkQ2xpZW50KFFUTW92aWVDbGllbnQqIGNsaWVudCkKIHsKLSAgICBib29sIHNo
b3VsZEJlVmlzaWJsZSA9IG1fdmlzaWJsZTsKLSAgICBpZiAoIW1faGVpZ2h0IHx8ICFtX3dpZHRo
KQotICAgICAgICBzaG91bGRCZVZpc2libGUgPSBmYWxzZTsKLQotICAgIGlmIChzaG91bGRCZVZp
c2libGUgJiYgIW1fZ1dvcmxkKQotICAgICAgICBjcmVhdGVHV29ybGQoKTsKLSAgICBlbHNlIGlm
ICghc2hvdWxkQmVWaXNpYmxlICYmIG1fZ1dvcmxkKQotICAgICAgICBkZWxldGVHV29ybGQoKTsK
LSAgICBlbHNlIGlmIChtX2dXb3JsZCAmJiAobV93aWR0aCA+IG1fZ1dvcmxkV2lkdGggfHwgbV9o
ZWlnaHQgPiBtX2dXb3JsZEhlaWdodCkpIHsKLSAgICAgICAgLy8gbmVlZCBhIGJpZ2dlciwgYmV0
dGVyIGdXb3JsZAotICAgICAgICBkZWxldGVHV29ybGQoKTsKLSAgICAgICAgY3JlYXRlR1dvcmxk
KCk7Ci0gICAgfQorICAgIGlmIChjbGllbnQpCisgICAgICAgIG1fcHJpdmF0ZS0+bV9jbGllbnRz
LmFwcGVuZChjbGllbnQpOwogfQogCi12b2lkIFFUTW92aWVXaW5Qcml2YXRlOjpjcmVhdGVHV29y
bGQoKQordm9pZCBRVE1vdmllOjpyZW1vdmVDbGllbnQoUVRNb3ZpZUNsaWVudCogY2xpZW50KQog
ewotICAgIEFTU0VSVCghbV9nV29ybGQpOwotICAgIGlmICghbV9tb3ZpZSB8fCBtX2xvYWRTdGF0
ZSA8IFFUTW92aWVMb2FkU3RhdGVMb2FkZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZ1dv
cmxkV2lkdGggPSBtYXgoY0dXb3JsZE1pbldpZHRoLCBtX3dpZHRoKTsKLSAgICBtX2dXb3JsZEhl
aWdodCA9IG1heChjR1dvcmxkTWluSGVpZ2h0LCBtX2hlaWdodCk7Ci0gICAgUmVjdCBib3VuZHM7
IAotICAgIGJvdW5kcy50b3AgPSAwOwotICAgIGJvdW5kcy5sZWZ0ID0gMDsgCi0gICAgYm91bmRz
LnJpZ2h0ID0gbV9nV29ybGRXaWR0aDsKLSAgICBib3VuZHMuYm90dG9tID0gbV9nV29ybGRIZWln
aHQ7Ci0gICAgT1NFcnIgZXJyID0gUVROZXdHV29ybGQoJm1fZ1dvcmxkLCBrMzJCR1JBUGl4ZWxG
b3JtYXQsICZib3VuZHMsIDAsIDAsIDApOyAKLSAgICBpZiAoZXJyKSAKLSAgICAgICAgcmV0dXJu
OwotICAgIEdldE1vdmllR1dvcmxkKG1fbW92aWUsICZtX3NhdmVkR1dvcmxkLCAwKTsKLSAgICBp
ZiAobV9tb3ZpZUNvbnRyb2xsZXIpCi0gICAgICAgIE1DU2V0Q29udHJvbGxlclBvcnQobV9tb3Zp
ZUNvbnRyb2xsZXIsIG1fZ1dvcmxkKTsKLSAgICBTZXRNb3ZpZUdXb3JsZChtX21vdmllLCBtX2dX
b3JsZCwgMCk7Ci0gICAgYm91bmRzLnJpZ2h0ID0gbV93aWR0aDsKLSAgICBib3VuZHMuYm90dG9t
ID0gbV9oZWlnaHQ7Ci0gICAgaWYgKG1fbW92aWVDb250cm9sbGVyKQotICAgICAgICBNQ1NldENv
bnRyb2xsZXJCb3VuZHNSZWN0KG1fbW92aWVDb250cm9sbGVyLCAmYm91bmRzKTsKLSAgICBTZXRN
b3ZpZUJveChtX21vdmllLCAmYm91bmRzKTsKKyAgICBzaXplX3QgaW5kZXhPZkNsaWVudCA9IG1f
cHJpdmF0ZS0+bV9jbGllbnRzLmZpbmQoY2xpZW50KTsKKyAgICBpZiAoaW5kZXhPZkNsaWVudCA+
IDApCisgICAgICAgIG1fcHJpdmF0ZS0+bV9jbGllbnRzLnJlbW92ZShpbmRleE9mQ2xpZW50KTsK
IH0KIAotdm9pZCBRVE1vdmllV2luUHJpdmF0ZTo6Y2xlYXJHV29ybGQoKQordm9pZCBRVE1vdmll
OjpwbGF5KCkKIHsKLSAgICBpZiAoIW1fbW92aWV8fCFtX2dXb3JsZCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgR3JhZlB0ciBzYXZlUG9ydDsKLSAgICBHZXRQb3J0KCZzYXZlUG9ydCk7IAotICAg
IE1hY1NldFBvcnQoKEdyYWZQdHIpbV9nV29ybGQpOwotCi0gICAgUmVjdCBib3VuZHM7IAotICAg
IGJvdW5kcy50b3AgPSAwOwotICAgIGJvdW5kcy5sZWZ0ID0gMDsgCi0gICAgYm91bmRzLnJpZ2h0
ID0gbV9nV29ybGRXaWR0aDsKLSAgICBib3VuZHMuYm90dG9tID0gbV9nV29ybGRIZWlnaHQ7Ci0g
ICAgRXJhc2VSZWN0KCZib3VuZHMpOwotCi0gICAgTWFjU2V0UG9ydChzYXZlUG9ydCk7Ci19Ci0K
LXZvaWQgUVRNb3ZpZVdpblByaXZhdGU6OnNldFNpemUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQot
ewotICAgIGlmIChtX3dpZHRoID09IHdpZHRoICYmIG1faGVpZ2h0ID09IGhlaWdodCkKLSAgICAg
ICAgcmV0dXJuOwotICAgIG1fd2lkdGggPSB3aWR0aDsKLSAgICBtX2hlaWdodCA9IGhlaWdodDsK
LQotICAgIC8vIERvIG5vdCBjaGFuZ2UgbW92aWUgYm94IGJlZm9yZSByZWFjaGluZyBsb2FkIHN0
YXRlIGxvYWRlZCBhcyB3ZSBncmFiCi0gICAgLy8gdGhlIGluaXRpYWwgc2l6ZSB3aGVuIHRhc2so
KSBzZWVzIHRoYXQgc3RhdGUgZm9yIHRoZSBmaXJzdCB0aW1lLCBhbmQKLSAgICAvLyB3ZSBuZWVk
IHRoZSBpbml0aWFsIHNpemUgdG8gYmUgYWJsZSB0byBzY2FsZSBtb3ZpZSBwcm9wZXJseS4gCi0g
ICAgaWYgKCFtX21vdmllIHx8IG1fbG9hZFN0YXRlIDwgUVRNb3ZpZUxvYWRTdGF0ZUxvYWRlZCkK
LSAgICAgICAgcmV0dXJuOwotCi0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIEFTU0VSVChtX3Nj
YWxlQ2FjaGVkKTsKLSNlbmRpZgotCi0gICAgdXBkYXRlTW92aWVTaXplKCk7Ci19Ci0KLXZvaWQg
UVRNb3ZpZVdpblByaXZhdGU6OnVwZGF0ZU1vdmllU2l6ZSgpCi17Ci0gICAgaWYgKCFtX21vdmll
IHx8IG1fbG9hZFN0YXRlIDwgUVRNb3ZpZUxvYWRTdGF0ZUxvYWRlZCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgUmVjdCBib3VuZHM7IAotICAgIGJvdW5kcy50b3AgPSAwOwotICAgIGJvdW5kcy5s
ZWZ0ID0gMDsgCi0gICAgYm91bmRzLnJpZ2h0ID0gbV93aWR0aDsKLSAgICBib3VuZHMuYm90dG9t
ID0gbV9oZWlnaHQ7Ci0gICAgaWYgKG1fbW92aWVDb250cm9sbGVyKQotICAgICAgICBNQ1NldENv
bnRyb2xsZXJCb3VuZHNSZWN0KG1fbW92aWVDb250cm9sbGVyLCAmYm91bmRzKTsKLSAgICBTZXRN
b3ZpZUJveChtX21vdmllLCAmYm91bmRzKTsKLSAgICB1cGRhdGVHV29ybGQoKTsKLX0KLQotCi12
b2lkIFFUTW92aWVXaW5Qcml2YXRlOjpkZWxldGVHV29ybGQoKQotewotICAgIEFTU0VSVChtX2dX
b3JsZCk7Ci0gICAgaWYgKG1fbW92aWVDb250cm9sbGVyKQotICAgICAgICBNQ1NldENvbnRyb2xs
ZXJQb3J0KG1fbW92aWVDb250cm9sbGVyLCBtX3NhdmVkR1dvcmxkKTsKLSAgICBpZiAobV9tb3Zp
ZSkKLSAgICAgICAgU2V0TW92aWVHV29ybGQobV9tb3ZpZSwgbV9zYXZlZEdXb3JsZCwgMCk7Ci0g
ICAgbV9zYXZlZEdXb3JsZCA9IDA7Ci0gICAgRGlzcG9zZUdXb3JsZChtX2dXb3JsZCk7IAotICAg
IG1fZ1dvcmxkID0gMDsKLSAgICBtX2dXb3JsZFdpZHRoID0gMDsKLSAgICBtX2dXb3JsZEhlaWdo
dCA9IDA7Ci19Ci0KLQotUVRNb3ZpZVdpbjo6UVRNb3ZpZVdpbihRVE1vdmllV2luQ2xpZW50KiBj
bGllbnQpCi0gICAgOiBtX3ByaXZhdGUobmV3IFFUTW92aWVXaW5Qcml2YXRlKCkpCi0gICAgLCBt
X2Rpc2FibGVkKGZhbHNlKQotewotICAgIG1fcHJpdmF0ZS0+bV9tb3ZpZVdpbiA9IHRoaXM7Ci0g
ICAgbV9wcml2YXRlLT5tX2NsaWVudCA9IGNsaWVudDsKLSAgICBpbml0aWFsaXplUXVpY2tUaW1l
KCk7Ci19Ci0KLVFUTW92aWVXaW46On5RVE1vdmllV2luKCkKLXsKLSAgICBkZWxldGUgbV9wcml2
YXRlOwotfQotCi12b2lkIFFUTW92aWVXaW46OnBsYXkoKQotewogICAgIG1fcHJpdmF0ZS0+bV90
aW1lVG9SZXN0b3JlID0gLTEuMGY7CiAKICAgICBpZiAobV9wcml2YXRlLT5tX21vdmllQ29udHJv
bGxlcikKQEAgLTQ4Myw3ICsyODAsNyBAQA0KICAgICBtX3ByaXZhdGUtPnN0YXJ0VGFzaygpOwog
fQogCi12b2lkIFFUTW92aWVXaW46OnBhdXNlKCkKK3ZvaWQgUVRNb3ZpZTo6cGF1c2UoKQogewog
ICAgIG1fcHJpdmF0ZS0+bV90aW1lVG9SZXN0b3JlID0gLTEuMGY7CiAKQEAgLTQ5MSwxNyArMjg4
LDE3IEBADQogICAgICAgICBNQ0RvQWN0aW9uKG1fcHJpdmF0ZS0+bV9tb3ZpZUNvbnRyb2xsZXIs
IG1jQWN0aW9uUGxheSwgMCk7CiAgICAgZWxzZQogICAgICAgICBTdG9wTW92aWUobV9wcml2YXRl
LT5tX21vdmllKTsKLSAgICB1cGRhdGVUYXNrVGltZXIoKTsKKyAgICBRVE1vdmllVGFzazo6c2hh
cmVkVGFzaygpLT51cGRhdGVUYXNrVGltZXIoKTsKIH0KIAotZmxvYXQgUVRNb3ZpZVdpbjo6cmF0
ZSgpIGNvbnN0CitmbG9hdCBRVE1vdmllOjpyYXRlKCkgY29uc3QKIHsKICAgICBpZiAoIW1fcHJp
dmF0ZS0+bV9tb3ZpZSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIEZpeGVkVG9GbG9h
dChHZXRNb3ZpZVJhdGUobV9wcml2YXRlLT5tX21vdmllKSk7CiB9CiAKLXZvaWQgUVRNb3ZpZVdp
bjo6c2V0UmF0ZShmbG9hdCByYXRlKQordm9pZCBRVE1vdmllOjpzZXRSYXRlKGZsb2F0IHJhdGUp
CiB7CiAgICAgaWYgKCFtX3ByaXZhdGUtPm1fbW92aWUpCiAgICAgICAgIHJldHVybjsgICAgCkBA
IC01MTEsMTAgKzMwOCwxMCBAQA0KICAgICAgICAgTUNEb0FjdGlvbihtX3ByaXZhdGUtPm1fbW92
aWVDb250cm9sbGVyLCBtY0FjdGlvblByZXJvbGxBbmRQbGF5LCAodm9pZCAqKUZsb2F0VG9GaXhl
ZChyYXRlKSk7CiAgICAgZWxzZQogICAgICAgICBTZXRNb3ZpZVJhdGUobV9wcml2YXRlLT5tX21v
dmllLCBGbG9hdFRvRml4ZWQocmF0ZSkpOwotICAgIHVwZGF0ZVRhc2tUaW1lcigpOworICAgIFFU
TW92aWVUYXNrOjpzaGFyZWRUYXNrKCktPnVwZGF0ZVRhc2tUaW1lcigpOwogfQogCi1mbG9hdCBR
VE1vdmllV2luOjpkdXJhdGlvbigpIGNvbnN0CitmbG9hdCBRVE1vdmllOjpkdXJhdGlvbigpIGNv
bnN0CiB7CiAgICAgaWYgKCFtX3ByaXZhdGUtPm1fbW92aWUpCiAgICAgICAgIHJldHVybiAwOwpA
QCAtNTIzLDcgKzMyMCw3IEBADQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4odmFsKSAv
IHNjYWxlOwogfQogCi1mbG9hdCBRVE1vdmllV2luOjpjdXJyZW50VGltZSgpIGNvbnN0CitmbG9h
dCBRVE1vdmllOjpjdXJyZW50VGltZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3ByaXZhdGUtPm1f
bW92aWUpCiAgICAgICAgIHJldHVybiAwOwpAQCAtNTMyLDcgKzMyOSw3IEBADQogICAgIHJldHVy
biBzdGF0aWNfY2FzdDxmbG9hdD4odmFsKSAvIHNjYWxlOwogfQogCi12b2lkIFFUTW92aWVXaW46
OnNldEN1cnJlbnRUaW1lKGZsb2F0IHRpbWUpIGNvbnN0Cit2b2lkIFFUTW92aWU6OnNldEN1cnJl
bnRUaW1lKGZsb2F0IHRpbWUpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3ByaXZhdGUtPm1fbW92aWUp
CiAgICAgICAgIHJldHVybjsKQEAgLTU0MSwyMiArMzM4LDIyIEBADQogICAgIAogICAgIG1fcHJp
dmF0ZS0+bV9zZWVraW5nID0gdHJ1ZTsKICAgICBUaW1lU2NhbGUgc2NhbGUgPSBHZXRNb3ZpZVRp
bWVTY2FsZShtX3ByaXZhdGUtPm1fbW92aWUpOwotICAgIGlmIChtX3ByaXZhdGUtPm1fbW92aWVD
b250cm9sbGVyKXsKKyAgICBpZiAobV9wcml2YXRlLT5tX21vdmllQ29udHJvbGxlcikgewogICAg
ICAgICBRVFJlc3RhcnRBdFRpbWVSZWNvcmQgcmVzdGFydCA9IHsgdGltZSAqIHNjYWxlICwgMCB9
OwogICAgICAgICBNQ0RvQWN0aW9uKG1fcHJpdmF0ZS0+bV9tb3ZpZUNvbnRyb2xsZXIsIG1jQWN0
aW9uUmVzdGFydEF0VGltZSwgKHZvaWQgKikmcmVzdGFydCk7CiAgICAgfSBlbHNlCiAgICAgICAg
IFNldE1vdmllVGltZVZhbHVlKG1fcHJpdmF0ZS0+bV9tb3ZpZSwgVGltZVZhbHVlKHRpbWUgKiBz
Y2FsZSkpOwotICAgIHVwZGF0ZVRhc2tUaW1lcigpOworICAgIFFUTW92aWVUYXNrOjpzaGFyZWRU
YXNrKCktPnVwZGF0ZVRhc2tUaW1lcigpOwogfQogCi12b2lkIFFUTW92aWVXaW46OnNldFZvbHVt
ZShmbG9hdCB2b2x1bWUpCit2b2lkIFFUTW92aWU6OnNldFZvbHVtZShmbG9hdCB2b2x1bWUpCiB7
CiAgICAgaWYgKCFtX3ByaXZhdGUtPm1fbW92aWUpCiAgICAgICAgIHJldHVybjsKICAgICBTZXRN
b3ZpZVZvbHVtZShtX3ByaXZhdGUtPm1fbW92aWUsIHN0YXRpY19jYXN0PHNob3J0Pih2b2x1bWUg
KiAyNTYpKTsKIH0KIAotdm9pZCBRVE1vdmllV2luOjpzZXRQcmVzZXJ2ZXNQaXRjaChib29sIHBy
ZXNlcnZlc1BpdGNoKQordm9pZCBRVE1vdmllOjpzZXRQcmVzZXJ2ZXNQaXRjaChib29sIHByZXNl
cnZlc1BpdGNoKQogewogICAgIGlmICghbV9wcml2YXRlLT5tX21vdmllIHx8ICFtX3ByaXZhdGUt
Pm1fY3VycmVudFVSTCkKICAgICAgICAgcmV0dXJuOwpAQCAtNTc1LDE0ICszNzIsMTQgQEANCiAg
ICAgbG9hZChtX3ByaXZhdGUtPm1fY3VycmVudFVSTCwgcHJlc2VydmVzUGl0Y2gpOwogfQogCi11
bnNpZ25lZCBRVE1vdmllV2luOjpkYXRhU2l6ZSgpIGNvbnN0Cit1bnNpZ25lZCBRVE1vdmllOjpk
YXRhU2l6ZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3ByaXZhdGUtPm1fbW92aWUpCiAgICAgICAg
IHJldHVybiAwOwogICAgIHJldHVybiBHZXRNb3ZpZURhdGFTaXplKG1fcHJpdmF0ZS0+bV9tb3Zp
ZSwgMCwgR2V0TW92aWVEdXJhdGlvbihtX3ByaXZhdGUtPm1fbW92aWUpKTsKIH0KIAotZmxvYXQg
UVRNb3ZpZVdpbjo6bWF4VGltZUxvYWRlZCgpIGNvbnN0CitmbG9hdCBRVE1vdmllOjptYXhUaW1l
TG9hZGVkKCkgY29uc3QKIHsKICAgICBpZiAoIW1fcHJpdmF0ZS0+bV9tb3ZpZSkKICAgICAgICAg
cmV0dXJuIDA7CkBAIC01OTIsMTIgKzM4OSwxMiBAQA0KICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
ZmxvYXQ+KHZhbCkgLyBzY2FsZTsKIH0KIAotbG9uZyBRVE1vdmllV2luOjpsb2FkU3RhdGUoKSBj
b25zdAorbG9uZyBRVE1vdmllOjpsb2FkU3RhdGUoKSBjb25zdAogewogICAgIHJldHVybiBtX3By
aXZhdGUtPm1fbG9hZFN0YXRlOwogfQogCi12b2lkIFFUTW92aWVXaW46OmdldE5hdHVyYWxTaXpl
KGludCYgd2lkdGgsIGludCYgaGVpZ2h0KQordm9pZCBRVE1vdmllOjpnZXROYXR1cmFsU2l6ZShp
bnQmIHdpZHRoLCBpbnQmIGhlaWdodCkKIHsKICAgICBSZWN0IHJlY3QgPSB7IDAsIH07CiAKQEAg
LTYwNyw1NyArNDA0LDggQEANCiAgICAgaGVpZ2h0ID0gKHJlY3QuYm90dG9tIC0gcmVjdC50b3Ap
ICogbV9wcml2YXRlLT5tX2hlaWdodFNjYWxlRmFjdG9yOwogfQogCi12b2lkIFFUTW92aWVXaW46
OnNldFNpemUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQordm9pZCBRVE1vdmllOjpsb2FkKGNvbnN0
IFVDaGFyKiB1cmwsIGludCBsZW4sIGJvb2wgcHJlc2VydmVzUGl0Y2gpCiB7Ci0gICAgbV9wcml2
YXRlLT5zZXRTaXplKHdpZHRoLCBoZWlnaHQpOwotICAgIHVwZGF0ZVRhc2tUaW1lcigwKTsKLX0K
LQotdm9pZCBRVE1vdmllV2luOjpzZXRWaXNpYmxlKGJvb2wgYikKLXsKLSAgICBtX3ByaXZhdGUt
Pm1fdmlzaWJsZSA9IGI7Ci0gICAgbV9wcml2YXRlLT51cGRhdGVHV29ybGQoKTsKLX0KLQotdm9p
ZCBRVE1vdmllV2luOjpnZXRDdXJyZW50RnJhbWVJbmZvKHZvaWQqJiBidWZmZXIsIHVuc2lnbmVk
JiBiaXRzUGVyUGl4ZWwsIHVuc2lnbmVkJiByb3dCeXRlcywgdW5zaWduZWQmIHdpZHRoLCB1bnNp
Z25lZCYgaGVpZ2h0KQotewotICAgIGlmICghbV9wcml2YXRlLT5tX2dXb3JsZCkgewotICAgICAg
ICBidWZmZXIgPSAwOwotICAgICAgICBiaXRzUGVyUGl4ZWwgPSAwOwotICAgICAgICByb3dCeXRl
cyA9IDA7Ci0gICAgICAgIHdpZHRoID0gMDsKLSAgICAgICAgaGVpZ2h0ID0gMDsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICBQaXhNYXBIYW5kbGUgb2Zmc2NyZWVuUGl4TWFwID0gR2V0R1dv
cmxkUGl4TWFwKG1fcHJpdmF0ZS0+bV9nV29ybGQpOwotICAgIGJ1ZmZlciA9ICgqb2Zmc2NyZWVu
UGl4TWFwKS0+YmFzZUFkZHI7Ci0gICAgYml0c1BlclBpeGVsID0gKCpvZmZzY3JlZW5QaXhNYXAp
LT5waXhlbFNpemU7Ci0gICAgcm93Qnl0ZXMgPSAoKm9mZnNjcmVlblBpeE1hcCktPnJvd0J5dGVz
ICYgMHgzRkZGOwotICAgIHdpZHRoID0gbV9wcml2YXRlLT5tX3dpZHRoOwotICAgIGhlaWdodCA9
IG1fcHJpdmF0ZS0+bV9oZWlnaHQ7Ci19Ci0KLXZvaWQgUVRNb3ZpZVdpbjo6cGFpbnQoSERDIGhk
YywgaW50IHgsIGludCB5KQotewotICAgIGlmICghbV9wcml2YXRlLT5tX2dXb3JsZCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgSERDIGhkY1NyYyA9IHN0YXRpY19jYXN0PEhEQz4oR2V0UG9ydEhE
QyhyZWludGVycHJldF9jYXN0PEdyYWZQdHI+KG1fcHJpdmF0ZS0+bV9nV29ybGQpKSk7IAotICAg
IGlmICghaGRjU3JjKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBGSVhNRTogSWYgd2UgY291
bGQgZGV0ZXJtaW5lIHRoZSBtb3ZpZSBoYXMgbm8gYWxwaGEsIHdlIGNvdWxkIHVzZSBCaXRCbHQg
Zm9yIHRob3NlIGNhc2VzLCB3aGljaCBtaWdodCBiZSBmYXN0ZXIuCi0gICAgQkxFTkRGVU5DVElP
TiBibGVuZEZ1bmN0aW9uOyAKLSAgICBibGVuZEZ1bmN0aW9uLkJsZW5kT3AgPSBBQ19TUkNfT1ZF
UjsKLSAgICBibGVuZEZ1bmN0aW9uLkJsZW5kRmxhZ3MgPSAwOwotICAgIGJsZW5kRnVuY3Rpb24u
U291cmNlQ29uc3RhbnRBbHBoYSA9IDI1NTsKLSAgICBibGVuZEZ1bmN0aW9uLkFscGhhRm9ybWF0
ID0gQUNfU1JDX0FMUEhBOwotICAgIEFscGhhQmxlbmQoaGRjLCB4LCB5LCBtX3ByaXZhdGUtPm1f
d2lkdGgsIG1fcHJpdmF0ZS0+bV9oZWlnaHQsIGhkY1NyYywgCi0gICAgICAgICAwLCAwLCBtX3By
aXZhdGUtPm1fd2lkdGgsIG1fcHJpdmF0ZS0+bV9oZWlnaHQsIGJsZW5kRnVuY3Rpb24pOwotfQot
Ci12b2lkIFFUTW92aWVXaW46OmxvYWQoY29uc3QgVUNoYXIqIHVybCwgaW50IGxlbiwgYm9vbCBw
cmVzZXJ2ZXNQaXRjaCkKLXsKICAgICBDRlN0cmluZ1JlZiB1cmxTdHJpbmdSZWYgPSBDRlN0cmlu
Z0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKGtDRkFsbG9jYXRvckRlZmF1bHQsIHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgVW5pQ2hhcio+KHVybCksIGxlbik7CiAgICAgQ0ZVUkxSZWYgY2ZVUkwgPSBDRlVS
TENyZWF0ZVdpdGhTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgdXJsU3RyaW5nUmVmLCAwKTsK
IApAQCAtNjY3LDE1ICs0MTUsMTMgQEANCiAgICAgQ0ZSZWxlYXNlKHVybFN0cmluZ1JlZik7CiB9
CiAKLXZvaWQgUVRNb3ZpZVdpbjo6bG9hZChDRlVSTFJlZiB1cmwsIGJvb2wgcHJlc2VydmVzUGl0
Y2gpCit2b2lkIFFUTW92aWU6OmxvYWQoQ0ZVUkxSZWYgdXJsLCBib29sIHByZXNlcnZlc1BpdGNo
KQogewogICAgIGlmICghdXJsKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV9wcml2YXRl
LT5tX21vdmllKSB7CiAgICAgICAgIG1fcHJpdmF0ZS0+ZW5kVGFzaygpOwotICAgICAgICBpZiAo
bV9wcml2YXRlLT5tX2dXb3JsZCkKLSAgICAgICAgICAgIG1fcHJpdmF0ZS0+ZGVsZXRlR1dvcmxk
KCk7CiAgICAgICAgIGlmIChtX3ByaXZhdGUtPm1fbW92aWVDb250cm9sbGVyKQogICAgICAgICAg
ICAgRGlzcG9zZU1vdmllQ29udHJvbGxlcihtX3ByaXZhdGUtPm1fbW92aWVDb250cm9sbGVyKTsK
ICAgICAgICAgbV9wcml2YXRlLT5tX21vdmllQ29udHJvbGxlciA9IDA7CkBAIC03NjgsMTQgKzUx
NCwxNCBAQA0KICAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wU3RhdHVzID0gMDsg
CiAgICAgbW92aWVQcm9wQ291bnQrKzsgCiAKLSAgICBBU1NFUlQobW92aWVQcm9wQ291bnQgPD0g
c2l6ZW9mKG1vdmllUHJvcHMpL3NpemVvZihtb3ZpZVByb3BzWzBdKSk7CisgICAgQVNTRVJUKG1v
dmllUHJvcENvdW50IDw9IHNpemVvZihtb3ZpZVByb3BzKSAvIHNpemVvZihtb3ZpZVByb3BzWzBd
KSk7CiAgICAgbV9wcml2YXRlLT5tX2xvYWRFcnJvciA9IE5ld01vdmllRnJvbVByb3BlcnRpZXMo
bW92aWVQcm9wQ291bnQsIG1vdmllUHJvcHMsIDAsIDAsICZtX3ByaXZhdGUtPm1fbW92aWUpOwog
CiBlbmQ6CiAgICAgbV9wcml2YXRlLT5zdGFydFRhc2soKTsKICAgICAvLyBnZXQgdGhlIGxvYWQg
ZmFpbCBjYWxsYmFjayBxdWlja2x5IAogICAgIGlmIChtX3ByaXZhdGUtPm1fbG9hZEVycm9yKQot
ICAgICAgICB1cGRhdGVUYXNrVGltZXIoMCk7CisgICAgICAgIFFUTW92aWVUYXNrOjpzaGFyZWRU
YXNrKCktPnVwZGF0ZVRhc2tUaW1lcigwKTsKICAgICBlbHNlIHsKICAgICAgICAgT1NUeXBlIG1v
ZGUgPSBrUVRBcGVydHVyZU1vZGVfQ2xlYW5BcGVydHVyZTsKIApAQCAtNzg0LDExICs1MzAsMTAg
QEANCiAgICAgICAgIC8vIHRoZSBpbnN0YWxsZWQgdmVyc2lvbiBvZiBRVCBkb2Vzbid0IHN1cHBv
cnQgaXQgYW5kIGl0IGlzbid0IHNlcmlvdXMgZW5vdWdoIHRvIAogICAgICAgICAvLyB3YXJyYW50
IGZhaWxpbmcuCiAgICAgICAgIFFUU2V0TW92aWVQcm9wZXJ0eShtX3ByaXZhdGUtPm1fbW92aWUs
IGtRVFByb3BlcnR5Q2xhc3NfVmlzdWFsLCBrUVRWaXN1YWxQcm9wZXJ0eUlEX0FwZXJ0dXJlTW9k
ZSwgc2l6ZW9mKG1vZGUpLCAmbW9kZSk7Ci0gICAgICAgIG1fcHJpdmF0ZS0+cmVnaXN0ZXJEcmF3
aW5nQ2FsbGJhY2soKTsKICAgICB9CiB9CiAKLXZvaWQgUVRNb3ZpZVdpbjo6ZGlzYWJsZVVuc3Vw
cG9ydGVkVHJhY2tzKHVuc2lnbmVkJiBlbmFibGVkVHJhY2tDb3VudCwgdW5zaWduZWQmIHRvdGFs
VHJhY2tDb3VudCkKK3ZvaWQgUVRNb3ZpZTo6ZGlzYWJsZVVuc3VwcG9ydGVkVHJhY2tzKHVuc2ln
bmVkJiBlbmFibGVkVHJhY2tDb3VudCwgdW5zaWduZWQmIHRvdGFsVHJhY2tDb3VudCkKIHsKICAg
ICBpZiAoIW1fcHJpdmF0ZS0+bV9tb3ZpZSkgewogICAgICAgICB0b3RhbFRyYWNrQ291bnQgPSAw
OwpAQCAtOTAzLDIwICs2NDgsMjUgQEANCiAgICAgfQogfQogCi12b2lkIFFUTW92aWVXaW46OnNl
dERpc2FibGVkKGJvb2wgYikKK2Jvb2wgUVRNb3ZpZTo6aXNEaXNhYmxlZCgpIGNvbnN0CiB7Ci0g
ICAgbV9kaXNhYmxlZCA9IGI7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bV9kaXNhYmxlZDsKIH0K
IAordm9pZCBRVE1vdmllOjpzZXREaXNhYmxlZChib29sIGIpCit7CisgICAgbV9wcml2YXRlLT5t
X2Rpc2FibGVkID0gYjsKK30KIAotYm9vbCBRVE1vdmllV2luOjpoYXNWaWRlbygpIGNvbnN0CisK
K2Jvb2wgUVRNb3ZpZTo6aGFzVmlkZW8oKSBjb25zdAogewogICAgIGlmICghbV9wcml2YXRlLT5t
X21vdmllKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIChHZXRNb3ZpZUluZFRy
YWNrVHlwZShtX3ByaXZhdGUtPm1fbW92aWUsIDEsIFZpc3VhbE1lZGlhQ2hhcmFjdGVyaXN0aWMs
IG1vdmllVHJhY2tDaGFyYWN0ZXJpc3RpYyB8IG1vdmllVHJhY2tFbmFibGVkT25seSkpOwogfQog
Ci1ib29sIFFUTW92aWVXaW46Omhhc0F1ZGlvKCkgY29uc3QKK2Jvb2wgUVRNb3ZpZTo6aGFzQXVk
aW8oKSBjb25zdAogewogICAgIGlmICghbV9wcml2YXRlLT5tX21vdmllKQogICAgICAgICByZXR1
cm4gZmFsc2U7CkBAIC05MjQsMTQgKzY3NCwxNCBAQA0KIH0KIAogCi1ib29sIFFUTW92aWVXaW46
Omhhc0Nsb3NlZENhcHRpb25zKCkgY29uc3QgCitib29sIFFUTW92aWU6Omhhc0Nsb3NlZENhcHRp
b25zKCkgY29uc3QgCiB7CiAgICAgaWYgKCFtX3ByaXZhdGUtPm1fbW92aWUpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICByZXR1cm4gR2V0TW92aWVJbmRUcmFja1R5cGUobV9wcml2YXRlLT5t
X21vdmllLCAxLCBjbG9zZWRDYXB0aW9uVHJhY2tUeXBlLCBtb3ZpZVRyYWNrTWVkaWFUeXBlKTsK
IH0KIAotdm9pZCBRVE1vdmllV2luOjpzZXRDbG9zZWRDYXB0aW9uc1Zpc2libGUoYm9vbCB2aXNp
YmxlKQordm9pZCBRVE1vdmllOjpzZXRDbG9zZWRDYXB0aW9uc1Zpc2libGUoYm9vbCB2aXNpYmxl
KQogewogICAgIGlmICghbV9wcml2YXRlLT5tX21vdmllKQogICAgICAgICByZXR1cm47CkBAIC05
NDQsMTYgKzY5NCw2IEBADQogICAgIFFUU2V0VHJhY2tQcm9wZXJ0eShjY1RyYWNrLCBjbG9zZWRD
YXB0aW9uVHJhY2tUeXBlLCBjbG9zZWRDYXB0aW9uRGlzcGxheVByb3BlcnR5SUQsIHNpemVvZihk
b0Rpc3BsYXkpLCAmZG9EaXNwbGF5KTsKIH0KIAotcGFzY2FsIE9TRXJyIG1vdmllRHJhd2luZ0Nv
bXBsZXRlUHJvYyhNb3ZpZSBtb3ZpZSwgbG9uZyBkYXRhKQotewotICAgIFVwcFBhcmFtIHBhcmFt
OwotICAgIHBhcmFtLmxvbmdWYWx1ZSA9IGRhdGE7Ci0gICAgUVRNb3ZpZVdpblByaXZhdGUqIG1w
ID0gc3RhdGljX2Nhc3Q8UVRNb3ZpZVdpblByaXZhdGUqPihwYXJhbS5wdHIpOwotICAgIGlmICht
cCkKLSAgICAgICAgbXAtPmRyYXdpbmdDb21wbGV0ZSgpOwotICAgIHJldHVybiAwOwotfQotCiBz
dGF0aWMgdm9pZCBpbml0aWFsaXplU3VwcG9ydGVkVHlwZXMoKSAKIHsKICAgICBpZiAoZ1N1cHBv
cnRlZFR5cGVzKQpAQCAtMTA0MywxMyArNzgzLDEzIEBADQogICAgIH0KIH0KIAotdW5zaWduZWQg
UVRNb3ZpZVdpbjo6Y291bnRTdXBwb3J0ZWRUeXBlcygpCit1bnNpZ25lZCBRVE1vdmllOjpjb3Vu
dFN1cHBvcnRlZFR5cGVzKCkKIHsKICAgICBpbml0aWFsaXplU3VwcG9ydGVkVHlwZXMoKTsKICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGdTdXBwb3J0ZWRUeXBlcy0+c2l6ZSgpKTsK
IH0KIAotdm9pZCBRVE1vdmllV2luOjpnZXRTdXBwb3J0ZWRUeXBlKHVuc2lnbmVkIGluZGV4LCBj
b25zdCBVQ2hhciomIHN0ciwgdW5zaWduZWQmIGxlbikKK3ZvaWQgUVRNb3ZpZTo6Z2V0U3VwcG9y
dGVkVHlwZSh1bnNpZ25lZCBpbmRleCwgY29uc3QgVUNoYXIqJiBzdHIsIHVuc2lnbmVkJiBsZW4p
CiB7CiAgICAgaW5pdGlhbGl6ZVN1cHBvcnRlZFR5cGVzKCk7CiAgICAgQVNTRVJUKGluZGV4IDwg
Z1N1cHBvcnRlZFR5cGVzLT5zaXplKCkpOwpAQCAtMTA2NywxNCArODA3LDggQEANCiAgICAgCiB9
CiAKLXZvaWQgUVRNb3ZpZVdpbjo6c2V0VGFza1RpbWVyRnVuY3MoU2V0VGFza1RpbWVyRGVsYXlG
dW5jIHNldFRhc2tUaW1lckRlbGF5LCBTdG9wVGFza1RpbWVyRnVuYyBzdG9wVGFza1RpbWVyKQor
Ym9vbCBRVE1vdmllOjppbml0aWFsaXplUXVpY2tUaW1lKCkgCiB7Ci0gICAgZ1NldFRhc2tUaW1l
ckRlbGF5ID0gc2V0VGFza1RpbWVyRGVsYXk7Ci0gICAgZ1N0b3BUYXNrVGltZXIgPSBzdG9wVGFz
a1RpbWVyOwotfQotCi1ib29sIFFUTW92aWVXaW46OmluaXRpYWxpemVRdWlja1RpbWUoKSAKLXsK
ICAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZCA9IGZhbHNlOwogICAgIHN0YXRpYyBib29sIGlu
aXRpYWxpemF0aW9uU3VjY2VlZGVkID0gZmFsc2U7CiAgICAgaWYgKCFpbml0aWFsaXplZCkgewpA
QCAtMTA5Miw3NyArODI2LDE2IEBADQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICB9CiAgICAgICAgIEVudGVyTW92aWVzKCk7Ci0gICAgICAgIGdNb3ZpZURyYXdpbmdDb21wbGV0
ZVVQUCA9IE5ld01vdmllRHJhd2luZ0NvbXBsZXRlVVBQKG1vdmllRHJhd2luZ0NvbXBsZXRlUHJv
Yyk7CiAgICAgICAgIGluaXRpYWxpemF0aW9uU3VjY2VlZGVkID0gdHJ1ZTsKICAgICB9CiAgICAg
cmV0dXJuIGluaXRpYWxpemF0aW9uU3VjY2VlZGVkOwogfQogCi1MUkVTVUxUIFFUTW92aWVXaW46
OmZ1bGxzY3JlZW5XbmRQcm9jKEhXTkQgd25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0s
IExQQVJBTSBsUGFyYW0pCitNb3ZpZSBRVE1vdmllOjpnZXRNb3ZpZUhhbmRsZSgpIGNvbnN0IAog
ewotICAgIFFUTW92aWVXaW4qIG1vdmllID0gc3RhdGljX2Nhc3Q8UVRNb3ZpZVdpbio+KEdldFBy
b3Aod25kLCBmdWxsc2NyZWVuUVRNb3ZpZVdpblBvaW50ZXJQcm9wKSk7Ci0KLSAgICBpZiAobWVz
c2FnZSA9PSBXTV9ERVNUUk9ZKQotICAgICAgICBSZW1vdmVQcm9wKHduZCwgZnVsbHNjcmVlblFU
TW92aWVXaW5Qb2ludGVyUHJvcCk7Ci0KLSAgICBpZiAoIW1vdmllKQotICAgICAgICByZXR1cm4g
RGVmV2luZG93UHJvYyh3bmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtKTsKLQotICAgIHJldHVy
biBtb3ZpZS0+bV9wcml2YXRlLT5tX2Z1bGxzY3JlZW5DbGllbnQtPmZ1bGxzY3JlZW5DbGllbnRX
bmRQcm9jKHduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0pOworICAgIHJldHVybiBtX3ByaXZh
dGUtPm1fbW92aWU7CiB9CiAKLUhXTkQgUVRNb3ZpZVdpbjo6ZW50ZXJGdWxsc2NyZWVuKFFUTW92
aWVXaW5GdWxsc2NyZWVuQ2xpZW50KiBjbGllbnQpCi17Ci0gICAgbV9wcml2YXRlLT5tX2Z1bGxz
Y3JlZW5DbGllbnQgPSBjbGllbnQ7Ci0gICAgCi0gICAgQmVnaW5GdWxsU2NyZWVuKCZtX3ByaXZh
dGUtPm1fZnVsbHNjcmVlblJlc3RvcmVTdGF0ZSwgMCwgMCwgMCwgJm1fcHJpdmF0ZS0+bV9mdWxs
c2NyZWVuV2luZG93LCAwLCBmdWxsU2NyZWVuQWxsb3dFdmVudHMpOyAKLSAgICBRVE1MU2V0V2lu
ZG93V25kUHJvYyhtX3ByaXZhdGUtPm1fZnVsbHNjcmVlbldpbmRvdywgZnVsbHNjcmVlblduZFBy
b2MpOwotICAgIENyZWF0ZVBvcnRBc3NvY2lhdGlvbihHZXRQb3J0TmF0aXZlV2luZG93KG1fcHJp
dmF0ZS0+bV9mdWxsc2NyZWVuV2luZG93KSwgMCwgMCk7Ci0KLSAgICBHZXRNb3ZpZUJveChtX3By
aXZhdGUtPm1fbW92aWUsICZtX3ByaXZhdGUtPm1fZnVsbHNjcmVlblJlY3QpOwotICAgIEdldE1v
dmllR1dvcmxkKG1fcHJpdmF0ZS0+bV9tb3ZpZSwgJm1fcHJpdmF0ZS0+bV9mdWxsc2NyZWVuT3Jp
Z0dXb3JsZCwgMCk7Ci0gICAgU2V0TW92aWVHV29ybGQobV9wcml2YXRlLT5tX21vdmllLCByZWlu
dGVycHJldF9jYXN0PENHcmFmUHRyPihtX3ByaXZhdGUtPm1fZnVsbHNjcmVlbldpbmRvdyksIEdl
dEdXb3JsZERldmljZShyZWludGVycHJldF9jYXN0PENHcmFmUHRyPihtX3ByaXZhdGUtPm1fZnVs
bHNjcmVlbldpbmRvdykpKTsKLQotICAgIC8vIFNldCB0aGUgc2l6ZSBvZiB0aGUgYm94IHRvIHBy
ZXNlcnZlIGFzcGVjdCByYXRpbwotICAgIFJlY3QgcmVjdCA9IG1fcHJpdmF0ZS0+bV9mdWxsc2Ny
ZWVuV2luZG93LT5wb3J0UmVjdDsKLQotICAgIGZsb2F0IG1vdmllUmF0aW8gPSBzdGF0aWNfY2Fz
dDxmbG9hdD4obV9wcml2YXRlLT5tX3dpZHRoKSAvIG1fcHJpdmF0ZS0+bV9oZWlnaHQ7Ci0gICAg
aW50IHdpbmRvd1dpZHRoID0gIHJlY3QucmlnaHQgLSByZWN0LmxlZnQ7Ci0gICAgaW50IHdpbmRv
d0hlaWdodCA9IHJlY3QuYm90dG9tIC0gcmVjdC50b3A7Ci0gICAgZmxvYXQgd2luZG93UmF0aW8g
PSBzdGF0aWNfY2FzdDxmbG9hdD4od2luZG93V2lkdGgpIC8gd2luZG93SGVpZ2h0OwotICAgIGlu
dCBhY3R1YWxXaWR0aCA9ICh3aW5kb3dSYXRpbyA+IG1vdmllUmF0aW8pID8gKHdpbmRvd0hlaWdo
dCAqIG1vdmllUmF0aW8pIDogd2luZG93V2lkdGg7Ci0gICAgaW50IGFjdHVhbEhlaWdodCA9ICh3
aW5kb3dSYXRpbyA8IG1vdmllUmF0aW8pID8gKHdpbmRvd1dpZHRoIC8gbW92aWVSYXRpbykgOiB3
aW5kb3dIZWlnaHQ7Ci0gICAgaW50IG9mZnNldFggPSAod2luZG93V2lkdGggLSBhY3R1YWxXaWR0
aCkgLyAyOwotICAgIGludCBvZmZzZXRZID0gKHdpbmRvd0hlaWdodCAtIGFjdHVhbEhlaWdodCkg
LyAyOwotCi0gICAgcmVjdC5sZWZ0ID0gb2Zmc2V0WDsKLSAgICByZWN0LnJpZ2h0ID0gb2Zmc2V0
WCArIGFjdHVhbFdpZHRoOwotICAgIHJlY3QudG9wID0gb2Zmc2V0WTsKLSAgICByZWN0LmJvdHRv
bSA9IG9mZnNldFkgKyBhY3R1YWxIZWlnaHQ7Ci0KLSAgICBTZXRNb3ZpZUJveChtX3ByaXZhdGUt
Pm1fbW92aWUsICZyZWN0KTsKLSAgICBTaG93SGlkZVRhc2tCYXIodHJ1ZSk7Ci0KLSAgICAvLyBT
ZXQgdGhlICd0aGlzJyBwb2ludGVyIG9uIHRoZSBIV05ECi0gICAgSFdORCB3bmQgPSBzdGF0aWNf
Y2FzdDxIV05EPihHZXRQb3J0TmF0aXZlV2luZG93KG1fcHJpdmF0ZS0+bV9mdWxsc2NyZWVuV2lu
ZG93KSk7Ci0gICAgU2V0UHJvcCh3bmQsIGZ1bGxzY3JlZW5RVE1vdmllV2luUG9pbnRlclByb3As
IHN0YXRpY19jYXN0PEhBTkRMRT4odGhpcykpOwotCi0gICAgcmV0dXJuIHduZDsKLX0KLQotdm9p
ZCBRVE1vdmllV2luOjpleGl0RnVsbHNjcmVlbigpCi17Ci0gICAgaWYgKCFtX3ByaXZhdGUtPm1f
ZnVsbHNjcmVlbldpbmRvdykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSFdORCB3bmQgPSBzdGF0
aWNfY2FzdDxIV05EPihHZXRQb3J0TmF0aXZlV2luZG93KG1fcHJpdmF0ZS0+bV9mdWxsc2NyZWVu
V2luZG93KSk7Ci0gICAgRGVzdHJveVBvcnRBc3NvY2lhdGlvbihyZWludGVycHJldF9jYXN0PENH
cmFmUHRyPihtX3ByaXZhdGUtPm1fZnVsbHNjcmVlbldpbmRvdykpOwotICAgIFNldE1vdmllR1dv
cmxkKG1fcHJpdmF0ZS0+bV9tb3ZpZSwgbV9wcml2YXRlLT5tX2Z1bGxzY3JlZW5PcmlnR1dvcmxk
LCAwKTsKLSAgICBFbmRGdWxsU2NyZWVuKG1fcHJpdmF0ZS0+bV9mdWxsc2NyZWVuUmVzdG9yZVN0
YXRlLCAwTCk7Ci0gICAgU2V0TW92aWVCb3gobV9wcml2YXRlLT5tX21vdmllLCAmbV9wcml2YXRl
LT5tX2Z1bGxzY3JlZW5SZWN0KTsKLSAgICBtX3ByaXZhdGUtPm1fZnVsbHNjcmVlbldpbmRvdyA9
IDA7Ci19Ci0KIEJPT0wgV0lOQVBJIERsbE1haW4oSElOU1RBTkNFIGhpbnN0RExMLCBEV09SRCBm
ZHdSZWFzb24sIExQVk9JRCBscHZSZXNlcnZlZCkKIHsKICAgICBzd2l0Y2ggKGZkd1JlYXNvbikg
ewpJbmRleDogUVRNb3ZpZS5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gUVRNb3ZpZS5oCShyZXZpc2lvbiA1
NzY2MykNCisrKyBRVE1vdmllLmgJKHdvcmtpbmcgY29weSkNCkBAIC0yMywxMSArMjMsMTIgQEAN
CiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIFFUTW92aWVXaW5faAotI2RlZmluZSBR
VE1vdmllV2luX2gKKyNpZm5kZWYgUVRNb3ZpZV9oCisjZGVmaW5lIFFUTW92aWVfaAogCiAjaW5j
bHVkZSA8VW5pY29kZS5oPgogI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgogCiAjaWZkZWYgUVRNT1ZJRVdJTl9FWFBPUlRTCiAjZGVmaW5lIFFUTU9WSUVX
SU5fQVBJIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQpAQCAtMzUsMjIgKzM2LDE3IEBADQogI2RlZmlu
ZSBRVE1PVklFV0lOX0FQSSBfX2RlY2xzcGVjKGRsbGltcG9ydCkKICNlbmRpZgogCi1jbGFzcyBR
VE1vdmllV2luOwotY2xhc3MgUVRNb3ZpZVdpblByaXZhdGU7CitjbGFzcyBRVE1vdmllOworY2xh
c3MgUVRNb3ZpZVByaXZhdGU7Cit0eXBlZGVmIHN0cnVjdCBNb3ZpZVR5cGUqKiBNb3ZpZTsKIAot
Y2xhc3MgUVRNb3ZpZVdpbkNsaWVudCB7CitjbGFzcyBRVE1vdmllQ2xpZW50IHsKIHB1YmxpYzoK
LSAgICB2aXJ0dWFsIHZvaWQgbW92aWVFbmRlZChRVE1vdmllV2luKikgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBtb3ZpZUxvYWRTdGF0ZUNoYW5nZWQoUVRNb3ZpZVdpbiopID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgbW92aWVUaW1lQ2hhbmdlZChRVE1vdmllV2luKikgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCBtb3ZpZU5ld0ltYWdlQXZhaWxhYmxlKFFUTW92aWVXaW4qKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIG1vdmllRW5kZWQoUVRNb3ZpZSopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbW92aWVM
b2FkU3RhdGVDaGFuZ2VkKFFUTW92aWUqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIG1vdmllVGlt
ZUNoYW5nZWQoUVRNb3ZpZSopID0gMDsKIH07CiAKLWNsYXNzIFFUTW92aWVXaW5GdWxsc2NyZWVu
Q2xpZW50IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIExSRVNVTFQgZnVsbHNjcmVlbkNsaWVudFdu
ZFByb2MoSFdORCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0sIExQQVJBTSkgPSAwOwotfTsKLQogZW51
bSB7CiAgICAgUVRNb3ZpZUxvYWRTdGF0ZUVycm9yID0gLTFMLAogICAgIFFUTW92aWVMb2FkU3Rh
dGVMb2FkZWQgID0gMjAwMEwsCkBAIC02MSwxOSArNTcsMjAgQEANCiAKIHR5cGVkZWYgY29uc3Qg
c3RydWN0IF9fQ0ZVUkwgKiBDRlVSTFJlZjsKIAotY2xhc3MgUVRNT1ZJRVdJTl9BUEkgUVRNb3Zp
ZVdpbiB7CitjbGFzcyBRVE1PVklFV0lOX0FQSSBRVE1vdmllIDogcHVibGljIFJlZkNvdW50ZWQ8
UVRNb3ZpZT4gewogcHVibGljOgogICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVRdWlja1RpbWUo
KTsKLQotICAgIHR5cGVkZWYgdm9pZCAoKlNldFRhc2tUaW1lckRlbGF5RnVuYykoZG91YmxlKTsK
LSAgICB0eXBlZGVmIHZvaWQgKCpTdG9wVGFza1RpbWVyRnVuYykoKTsKLSAgICBzdGF0aWMgdm9p
ZCBzZXRUYXNrVGltZXJGdW5jcyhTZXRUYXNrVGltZXJEZWxheUZ1bmMsIFN0b3BUYXNrVGltZXJG
dW5jKTsKICAgICBzdGF0aWMgdm9pZCB0YXNrVGltZXJGaXJlZCgpOwogCi0gICAgUVRNb3ZpZVdp
bihRVE1vdmllV2luQ2xpZW50Kik7Ci0gICAgflFUTW92aWVXaW4oKTsKKyAgICBRVE1vdmllKFFU
TW92aWVDbGllbnQqKTsKKyAgICB+UVRNb3ZpZSgpOwogCisgICAgdm9pZCBhZGRDbGllbnQoUVRN
b3ZpZUNsaWVudCopOworICAgIHZvaWQgcmVtb3ZlQ2xpZW50KFFUTW92aWVDbGllbnQqKTsKKwog
ICAgIHZvaWQgbG9hZChjb25zdCBVQ2hhciogdXJsLCBpbnQgbGVuLCBib29sIHByZXNlcnZlc1Bp
dGNoKTsKKyAgICB2b2lkIGxvYWQoQ0ZVUkxSZWYsIGJvb2wgcHJlc2VydmVzUGl0Y2gpOworCiAg
ICAgbG9uZyBsb2FkU3RhdGUoKSBjb25zdDsKICAgICBmbG9hdCBtYXhUaW1lTG9hZGVkKCkgY29u
c3Q7CiAKQEAgLTkzLDEzICs5MCwxMCBAQA0KICAgICB1bnNpZ25lZCBkYXRhU2l6ZSgpIGNvbnN0
OwogCiAgICAgdm9pZCBnZXROYXR1cmFsU2l6ZShpbnQmIHdpZHRoLCBpbnQmIGhlaWdodCk7Ci0g
ICAgdm9pZCBzZXRTaXplKGludCB3aWR0aCwgaW50IGhlaWdodCk7CiAKLSAgICB2b2lkIHNldFZp
c2libGUoYm9vbCk7Ci0gICAgdm9pZCBwYWludChIREMsIGludCB4LCBpbnQgeSk7Ci0gICAgdm9p
ZCBnZXRDdXJyZW50RnJhbWVJbmZvKHZvaWQqJiBidWZmZXIsIHVuc2lnbmVkJiBiaXRzUGVyUGl4
ZWwsIHVuc2lnbmVkJiByb3dCeXRlcywgdW5zaWduZWQmIHdpZHRoLCB1bnNpZ25lZCYgaGVpZ2h0
KTsKLQogICAgIHZvaWQgZGlzYWJsZVVuc3VwcG9ydGVkVHJhY2tzKHVuc2lnbmVkJiBlbmFibGVk
VHJhY2tDb3VudCwgdW5zaWduZWQmIHRvdGFsVHJhY2tDb3VudCk7CisKKyAgICBib29sIGlzRGlz
YWJsZWQoKSBjb25zdDsKICAgICB2b2lkIHNldERpc2FibGVkKGJvb2wpOwogCiAgICAgYm9vbCBo
YXNWaWRlbygpIGNvbnN0OwpAQCAtMTExLDE3ICsxMDUsMTEgQEANCiAgICAgc3RhdGljIHVuc2ln
bmVkIGNvdW50U3VwcG9ydGVkVHlwZXMoKTsKICAgICBzdGF0aWMgdm9pZCBnZXRTdXBwb3J0ZWRU
eXBlKHVuc2lnbmVkIGluZGV4LCBjb25zdCBVQ2hhciomIHN0ciwgdW5zaWduZWQmIGxlbik7CiAK
LSAgICAvLyBSZXR1cm5zIHRoZSBmdWxsLXNjcmVlbiB3aW5kb3cgY3JlYXRlZAotICAgIEhXTkQg
ZW50ZXJGdWxsc2NyZWVuKFFUTW92aWVXaW5GdWxsc2NyZWVuQ2xpZW50Kik7Ci0gICAgdm9pZCBl
eGl0RnVsbHNjcmVlbigpOworICAgIE1vdmllIGdldE1vdmllSGFuZGxlKCkgY29uc3Q7CiAKIHBy
aXZhdGU6Ci0gICAgdm9pZCBsb2FkKENGVVJMUmVmLCBib29sIHByZXNlcnZlc1BpdGNoKTsKLSAg
ICBzdGF0aWMgTFJFU1VMVCBmdWxsc2NyZWVuV25kUHJvYyhIV05ELCBVSU5UIG1lc3NhZ2UsIFdQ
QVJBTSwgTFBBUkFNKTsKLQotICAgIFFUTW92aWVXaW5Qcml2YXRlKiBtX3ByaXZhdGU7Ci0gICAg
Ym9vbCBtX2Rpc2FibGVkOwotICAgIGZyaWVuZCBjbGFzcyBRVE1vdmllV2luUHJpdmF0ZTsKKyAg
ICBRVE1vdmllUHJpdmF0ZSogbV9wcml2YXRlOworICAgIGZyaWVuZCBjbGFzcyBRVE1vdmllUHJp
dmF0ZTsKIH07CiAKICNlbmRpZgpJbmRleDogUVRNb3ZpZVRhc2suY3BwDQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQot
LS0gUVRNb3ZpZVRhc2suY3BwCShyZXZpc2lvbiAwKQ0KKysrIFFUTW92aWVUYXNrLmNwcAkocmV2
aXNpb24gMCkNCkBAIC0wLDAgKzEsMTAxIEBADQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywg
MjAwOCwgMjAwOSwgMjAxMCBBcHBsZSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlFUTW92aWVUYXNrLmgiCisKKy8vIFB1
dCBNb3ZpZXMuaCBmaXJzdCBzbyBidWlsZCBmYWlsdXJlcyBoZXJlIHBvaW50IGNsZWFybHkgdG8g
UXVpY2tUaW1lCisjaW5jbHVkZSA8TW92aWVzLmg+CisKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5o
PgorCitRVE1vdmllVGFzazo6UVRNb3ZpZVRhc2soKSAKKyAgICA6IG1fc2V0VGFza1RpbWVyRGVs
YXkoMCkKKyAgICAsIG1fc3RvcFRhc2tUaW1lcigwKQoreworfQorCitRVE1vdmllVGFzazo6flFU
TW92aWVUYXNrKCkKK3sKK30KKworUVRNb3ZpZVRhc2sqIFFUTW92aWVUYXNrOjpzaGFyZWRUYXNr
KCkKK3sKKyAgICBzdGF0aWMgUVRNb3ZpZVRhc2sqIHNfc2hhcmVkVGFzayA9IG5ldyBRVE1vdmll
VGFzaygpOworICAgIHJldHVybiBzX3NoYXJlZFRhc2s7Cit9CisKK3ZvaWQgUVRNb3ZpZVRhc2s6
OnVwZGF0ZVRhc2tUaW1lcihkb3VibGUgbWF4SW50ZXJ2YWwsIGRvdWJsZSBtaW5JbnRlcnZhbCkK
K3sKKyAgICBBU1NFUlQobV9zZXRUYXNrVGltZXJEZWxheSk7CisgICAgaWYgKCFtX3NldFRhc2tU
aW1lckRlbGF5KQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobV9zdG9wVGFza1RpbWVy
KTsKKyAgICBpZiAoIW1fdGFza0xpc3Quc2l6ZSgpICYmIG1fc3RvcFRhc2tUaW1lcikgeworICAg
ICAgICBtX3N0b3BUYXNrVGltZXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAg
ICBsb25nIGludGVydmFsSW5NUzsKKyAgICBPU1N0YXR1cyBzdGF0dXMgPSBRVEdldFRpbWVVbnRp
bE5leHRUYXNrKCZpbnRlcnZhbEluTVMsIDEwMDApOworICAgIGRvdWJsZSBpbnRlcnZhbCA9IGlu
dGVydmFsSW5NUyAvIDEwMDAuMDsKKyAgICBpZiAoaW50ZXJ2YWwgPCBtaW5JbnRlcnZhbCkKKyAg
ICAgICAgaW50ZXJ2YWwgPSBtaW5JbnRlcnZhbDsKKyAgICBpZiAoc3RhdHVzICE9IG5vRXJyICYm
IGludGVydmFsID4gbWF4SW50ZXJ2YWwpCisgICAgICAgIGludGVydmFsID0gbWF4SW50ZXJ2YWw7
CisgICAgbV9zZXRUYXNrVGltZXJEZWxheShpbnRlcnZhbCk7Cit9CisKK3ZvaWQgUVRNb3ZpZVRh
c2s6OmZpcmVUYXNrQ2xpZW50cygpCit7CisgICAgZm9yIChIYXNoU2V0PFFUTW92aWVUYXNrQ2xp
ZW50Kj46Oml0ZXJhdG9yIGkgPSBtX3Rhc2tMaXN0LmJlZ2luKCk7IGkgIT0gbV90YXNrTGlzdC5l
bmQoKTsgKytpKQorICAgICAgICAoKmkpLT50YXNrKCk7Cit9CisKK3ZvaWQgUVRNb3ZpZVRhc2s6
OmFkZFRhc2tDbGllbnQoUVRNb3ZpZVRhc2tDbGllbnQqIGNsaWVudCkgCit7CisgICAgQVNTRVJU
KGNsaWVudCk7CisgICAgaWYgKCFjbGllbnQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fdGFz
a0xpc3QuYWRkKGNsaWVudCk7Cit9CisKK3ZvaWQgUVRNb3ZpZVRhc2s6OnJlbW92ZVRhc2tDbGll
bnQoUVRNb3ZpZVRhc2tDbGllbnQqIGNsaWVudCkKK3sKKyAgICBBU1NFUlQoY2xpZW50KTsKKyAg
ICBpZiAoIWNsaWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV90YXNrTGlzdC5yZW1vdmUo
Y2xpZW50KTsKK30KKwordm9pZCBRVE1vdmllVGFzazo6c2V0VGFza1RpbWVyRnVuY3MoU2V0VGFz
a1RpbWVyRGVsYXlGdW5jIHNldFRhc2tUaW1lckRlbGF5LCBTdG9wVGFza1RpbWVyRnVuYyBzdG9w
VGFza1RpbWVyKQoreworICAgIG1fc2V0VGFza1RpbWVyRGVsYXkgPSBzZXRUYXNrVGltZXJEZWxh
eTsKKyAgICBtX3N0b3BUYXNrVGltZXIgPSBzdG9wVGFza1RpbWVyOworfQorCkluZGV4OiBRVE1v
dmllVGFzay5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09DQotLS0gUVRNb3ZpZVRhc2suaAkocmV2aXNpb24gMCkNCisr
KyBRVE1vdmllVGFzay5oCShyZXZpc2lvbiAwKQ0KQEAgLTAsMCArMSw2OSBAQA0KKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUsIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUVRNb3ZpZVRhc2tfaAorI2RlZmluZSBRVE1v
dmllVGFza19oCisKKyNpbmNsdWRlIDxXVEYvSGFzaFNldC5oPgorCisjaWZkZWYgUVRNT1ZJRVdJ
Tl9FWFBPUlRTCisjZGVmaW5lIFFUTU9WSUVXSU5fQVBJIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQor
I2Vsc2UKKyNkZWZpbmUgUVRNT1ZJRVdJTl9BUEkgX19kZWNsc3BlYyhkbGxpbXBvcnQpCisjZW5k
aWYKKworY2xhc3MgUVRNb3ZpZVRhc2tDbGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9p
ZCB0YXNrKCkgPSAwOworfTsKKwordHlwZWRlZiB2b2lkICgqU2V0VGFza1RpbWVyRGVsYXlGdW5j
KShkb3VibGUpOwordHlwZWRlZiB2b2lkICgqU3RvcFRhc2tUaW1lckZ1bmMpKCk7CisKK2NsYXNz
IFFUTU9WSUVXSU5fQVBJIFFUTW92aWVUYXNrIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUVRNb3Zp
ZVRhc2sqIHNoYXJlZFRhc2soKTsKKworICAgIHZvaWQgYWRkVGFza0NsaWVudChRVE1vdmllVGFz
a0NsaWVudCogY2xpZW50KTsKKyAgICB2b2lkIHJlbW92ZVRhc2tDbGllbnQoUVRNb3ZpZVRhc2tD
bGllbnQqKTsKKyAgICB2b2lkIGZpcmVUYXNrQ2xpZW50cygpOworCisgICAgdm9pZCB1cGRhdGVU
YXNrVGltZXIoZG91YmxlIG1heEludGVydmFsID0gMS4wLCBkb3VibGUgbWluSW50ZXJ2YWwgPSAx
LjAgLyAzMCk7CisgICAgdm9pZCBzZXRUYXNrVGltZXJGdW5jcyhTZXRUYXNrVGltZXJEZWxheUZ1
bmMgc2V0VGFza1RpbWVyRGVsYXksIFN0b3BUYXNrVGltZXJGdW5jIHN0b3BUYXNrVGltZXIpOwor
Citwcm90ZWN0ZWQ6CisgICAgUVRNb3ZpZVRhc2soKTsKKyAgICB+UVRNb3ZpZVRhc2soKTsKKwor
ICAgIFNldFRhc2tUaW1lckRlbGF5RnVuYyBtX3NldFRhc2tUaW1lckRlbGF5OworICAgIFN0b3BU
YXNrVGltZXJGdW5jIG1fc3RvcFRhc2tUaW1lcjsKKyAgICBIYXNoU2V0PFFUTW92aWVUYXNrQ2xp
ZW50Kj4gbV90YXNrTGlzdDsKKworcHJpdmF0ZToKKyAgICBRVE1vdmllVGFzayhjb25zdCBRVE1v
dmllVGFzayYpOworICAgIFFUTW92aWVUYXNrJiBvcGVyYXRvcj0oY29uc3QgUVRNb3ZpZVRhc2sm
KTsKK307CisKKyNlbmRpZgpJbmRleDogUVRNb3ZpZVZpc3VhbENvbnRleHQuY3BwDQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09DQotLS0gUVRNb3ZpZVZpc3VhbENvbnRleHQuY3BwCShyZXZpc2lvbiAwKQ0KKysrIFFUTW92
aWVWaXN1YWxDb250ZXh0LmNwcAkocmV2aXNpb24gMCkNCkBAIC0wLDAgKzEsMTkyIEBADQorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSwgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyNpbmNsdWRlICJjb25maWcuaCIKKworLy8gVGhlc2Ug
dHdvIGZpbGVzIG11c3QgYmUgaW5jbHVkZWQgaW4gdGhpcyBvcmRlci4gIFNlZSBRVE1vdmllVmlz
dWFsQ29udGV4dC5oIGZvciBkZXRhaWxzOgorI2luY2x1ZGUgPENWQmFzZS5oPgorI2luY2x1ZGUg
IlFUTW92aWVWaXN1YWxDb250ZXh0LmgiCisKKyNpbmNsdWRlIDxDVkhvc3RUaW1lLmg+CisjaW5j
bHVkZSA8SW1hZ2VDb21wcmVzc2lvbi5oPgorI2luY2x1ZGUgPE1vdmllcy5oPgorI2luY2x1ZGUg
PGQzZDl0eXBlcy5oPgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpbmNsdWRlICJRVE1vdmllVGFz
ay5oIgorCitzdGF0aWMgT1NTdGF0dXMgU2V0TnVtYmVyVmFsdWUoQ0ZNdXRhYmxlRGljdGlvbmFy
eVJlZiBpbkRpY3QsIENGU3RyaW5nUmVmIGluS2V5LCBTSW50MzIgaW5WYWx1ZSkKK3sKKyAgICBD
Rk51bWJlclJlZiBudW1iZXI7CisgCisgICAgbnVtYmVyID0gQ0ZOdW1iZXJDcmVhdGUoa0NGQWxs
b2NhdG9yRGVmYXVsdCwga0NGTnVtYmVyU0ludDMyVHlwZSwgJmluVmFsdWUpOworICAgIGlmIChO
VUxMID09IG51bWJlcikgcmV0dXJuIGNvcmVGb3VuZGF0aW9uVW5rbm93bkVycjsKKyAKKyAgICBD
RkRpY3Rpb25hcnlTZXRWYWx1ZShpbkRpY3QsIGluS2V5LCBudW1iZXIpOworIAorICAgIENGUmVs
ZWFzZShudW1iZXIpOworIAorICAgIHJldHVybiBub0VycjsKK30KKworQ0ZEaWN0aW9uYXJ5UmVm
IFFUTW92aWVWaXN1YWxDb250ZXh0OjpnZXRDR0ltYWdlT3B0aW9ucygpCit7CisgICAgc3RhdGlj
IENGRGljdGlvbmFyeVJlZiBvcHRpb25zID0gMDsKKworICAgIGlmICghb3B0aW9ucykKKyAgICB7
CisgICAgICAgIENGTXV0YWJsZURpY3Rpb25hcnlSZWYgIHBpeGVsQnVmZmVyT3B0aW9ucyA9IE5V
TEw7CisgICAgICAgIENGTXV0YWJsZURpY3Rpb25hcnlSZWYgIHZpc3VhbENvbnRleHRPcHRpb25z
ID0gTlVMTDsKKyAgICAgICAgT1NTdGF0dXMgICAgICAgICAgICAgICAgc3RhdHVzID0gbm9FcnI7
CisgICAgICAgIAorICAgICAgICAvLyBQaXhlbCBCdWZmZXIgYXR0cmlidXRlcworICAgICAgICBw
aXhlbEJ1ZmZlck9wdGlvbnMgPSBDRkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRv
ckRlZmF1bHQsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrQ0ZUeXBlRGljdGlv
bmFyeVZhbHVlQ2FsbEJhY2tzKTsKKworICAgICAgICAvLyBVc2UgdGhlIGszMkJHUkFQaXhlbEZv
cm1hdCwgYXMgUXVhcnR6Q29yZSB3aWxsIGJlIGFibGUgdG8gdXNlIHRoZSBwaXhlbHMgZGlyZWN0
bHksCisgICAgICAgIC8vIHdpdGhvdXQgbmVlZGluZyBhbiBhZGl0aW9uYWwgY29weSBvciByZW5k
ZXJpbmcgcGFzczpzCisgICAgICAgIFNldE51bWJlclZhbHVlKHBpeGVsQnVmZmVyT3B0aW9ucywg
a0NWUGl4ZWxCdWZmZXJQaXhlbEZvcm1hdFR5cGVLZXksIGszMkJHUkFQaXhlbEZvcm1hdCk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgLy8gYWxpZ25tZW50CisgICAgICAgIFNldE51bWJlclZhbHVl
KHBpeGVsQnVmZmVyT3B0aW9ucywga0NWUGl4ZWxCdWZmZXJCeXRlc1BlclJvd0FsaWdubWVudEtl
eSwgMTYpOworCisgICAgICAgIC8vIGNvbXBhdGFiaWxpdHkKKyAgICAgICAgU2V0TnVtYmVyVmFs
dWUocGl4ZWxCdWZmZXJPcHRpb25zLCBrQ1ZQaXhlbEJ1ZmZlckNHSW1hZ2VDb21wYXRpYmlsaXR5
S2V5LCAxKTsKKyAgICAgCisgICAgICAgIC8vIFFUIFZpc3VhbCBDb250ZXh0IGF0dHJpYnV0ZXMK
KyAgICAgICAgdmlzdWFsQ29udGV4dE9wdGlvbnMgPSBDRkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxl
KGtDRkFsbG9jYXRvckRlZmF1bHQsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3Ms
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcyk7CisgICAgIAorICAgICAgICAvLyBz
ZXQgdGhlIHBpeGVsIGJ1ZmZlciBhdHRyaWJ1dGVzIGZvciB0aGUgdmlzdWFsIGNvbnRleHQKKyAg
ICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUodmlzdWFsQ29udGV4dE9wdGlvbnMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGtRVFZpc3VhbENvbnRleHRQaXhlbEJ1ZmZlckF0dHJpYnV0
ZXNLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsQnVmZmVyT3B0aW9ucyk7
CisKKyAgICAgICAgaWYgKHBpeGVsQnVmZmVyT3B0aW9ucykKKyAgICAgICAgICAgIENGUmVsZWFz
ZShwaXhlbEJ1ZmZlck9wdGlvbnMpOworICAgIAorICAgICAgICBvcHRpb25zID0gdmlzdWFsQ29u
dGV4dE9wdGlvbnM7CisgICAgfQorCisgICAgcmV0dXJuIG9wdGlvbnM7Cit9CisKK1FUTW92aWVW
aXN1YWxDb250ZXh0OjpRVE1vdmllVmlzdWFsQ29udGV4dChRVE1vdmllVmlzdWFsQ29udGV4dENs
aWVudCogY2xpZW50LCBDRkRpY3Rpb25hcnlSZWYgb3B0aW9ucykgCisgICAgOiBtX2NsaWVudChj
bGllbnQpCisgICAgLCBtX3Zpc3VhbENvbnRleHQoMCkKKyAgICAsIG1fbW92aWUoMCkgCit7Cisg
ICAgSE1PRFVMRSBxdG1sRExMID0gOjpMb2FkTGlicmFyeVcoTCJRVE1MQ2xpZW50LmRsbCIpOwor
ICAgIGlmIChxdG1sRExMKSB7CisgICAgICAgIHR5cGVkZWYgT1NTdGF0dXMgKCBfX2NkZWNsICpw
Zm5RVFBpeGVsQnVmZmVyQ29udGV4dENyZWF0ZSkoQ0ZBbGxvY2F0b3JSZWYsIENGRGljdGlvbmFy
eVJlZiwgUVRWaXN1YWxDb250ZXh0UmVmKik7CisgICAgICAgIHBmblFUUGl4ZWxCdWZmZXJDb250
ZXh0Q3JlYXRlIHBQaXhlbEJ1ZmZlckNvbnRleHRDcmVhdGUgPSByZWludGVycHJldF9jYXN0PHBm
blFUUGl4ZWxCdWZmZXJDb250ZXh0Q3JlYXRlPihHZXRQcm9jQWRkcmVzcyhxdG1sRExMLCAiUVRQ
aXhlbEJ1ZmZlckNvbnRleHRDcmVhdGUiKSk7CisgICAgICAgIGlmIChwUGl4ZWxCdWZmZXJDb250
ZXh0Q3JlYXRlKSB7CisgICAgICAgICAgICBPU1N0YXR1cyBzdGF0dXMgPSBwUGl4ZWxCdWZmZXJD
b250ZXh0Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIG9wdGlvbnMsICZtX3Zpc3VhbENvbnRl
eHQpOworICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSBub0VyciAmJiBtX3Zpc3VhbENvbnRleHQp
CisgICAgICAgICAgICAgICAgUVRWaXN1YWxDb250ZXh0U2V0SW1hZ2VBdmFpbGFibGVDYWxsYmFj
ayhtX3Zpc3VhbENvbnRleHQsICZRVE1vdmllVmlzdWFsQ29udGV4dDo6aW1hZ2VBdmFpbGFibGVD
YWxsYmFjaywgc3RhdGljX2Nhc3Q8dm9pZCo+KHRoaXMpKTsKKyAgICAgICAgfQorICAgIH0KK30K
KworUVRNb3ZpZVZpc3VhbENvbnRleHQ6On5RVE1vdmllVmlzdWFsQ29udGV4dCgpCit7CisgICAg
aWYgKG1fdmlzdWFsQ29udGV4dCkgeworICAgICAgICBRVFZpc3VhbENvbnRleHRSZWxlYXNlKG1f
dmlzdWFsQ29udGV4dCk7CisgICAgICAgIG1fdmlzdWFsQ29udGV4dCA9IDA7CisgICAgfQorfQor
Citib29sIFFUTW92aWVWaXN1YWxDb250ZXh0Ojppc0ltYWdlQXZhaWxhYmxlRm9yVGltZShjb25z
dCBDVlRpbWVTdGFtcCogdGltZVN0YW1wKQoreworICAgIGlmICghbV92aXN1YWxDb250ZXh0KQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gUVRWaXN1YWxDb250ZXh0SXNOZXdJ
bWFnZUF2YWlsYWJsZShtX3Zpc3VhbENvbnRleHQsIHRpbWVTdGFtcCk7IAorfQorCitRVFBpeGVs
QnVmZmVyIFFUTW92aWVWaXN1YWxDb250ZXh0OjppbWFnZUZvclRpbWUoY29uc3QgQ1ZUaW1lU3Rh
bXAqIHRpbWVTdGFtcCkKK3sKKyAgICBRVFBpeGVsQnVmZmVyIHBpeGVsQnVmZmVyOworICAgIGlm
IChtX3Zpc3VhbENvbnRleHQpIHsKKyAgICAgICAgQ1ZJbWFnZUJ1ZmZlclJlZiBuZXdJbWFnZSA9
IDA7CisgICAgICAgIE9TU3RhdHVzIHN0YXR1cyA9IFFUVmlzdWFsQ29udGV4dENvcHlJbWFnZUZv
clRpbWUobV92aXN1YWxDb250ZXh0LCBrQ0ZBbGxvY2F0b3JEZWZhdWx0LCB0aW1lU3RhbXAsICZu
ZXdJbWFnZSk7CisgICAgICAgIGlmIChzdGF0dXMgPT0gbm9FcnIpIHsKKyAgICAgICAgICAgIHBp
eGVsQnVmZmVyLnNldChuZXdJbWFnZSk7CisgICAgICAgICAgICBDVlBpeGVsQnVmZmVyUmVsZWFz
ZShuZXdJbWFnZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHBpeGVsQnVmZmVyOwor
fQorCit2b2lkIFFUTW92aWVWaXN1YWxDb250ZXh0Ojp0YXNrKCkKK3sKKyAgICBpZiAobV92aXN1
YWxDb250ZXh0KQorICAgICAgICBRVFZpc3VhbENvbnRleHRUYXNrKG1fdmlzdWFsQ29udGV4dCk7
Cit9CisKK1FUVmlzdWFsQ29udGV4dFJlZiBRVE1vdmllVmlzdWFsQ29udGV4dDo6Z2V0KCkgCit7
CisgICAgcmV0dXJuIG1fdmlzdWFsQ29udGV4dDsKK30KKwordm9pZCBRVE1vdmllVmlzdWFsQ29u
dGV4dDo6aW1hZ2VBdmFpbGFibGVDYWxsYmFjayhRVFZpc3VhbENvbnRleHRSZWYgdmlzdWFsQ29u
dGV4dCwgY29uc3QgQ1ZUaW1lU3RhbXAgKnRpbWVTdGFtcCwgdm9pZCAqcmVmQ29uKQoreworICAg
IGlmICghcmVmQ29uKQorICAgICAgICByZXR1cm47CisKKyAgICBRVE1vdmllVmlzdWFsQ29udGV4
dCogdmMgPSBzdGF0aWNfY2FzdDxRVE1vdmllVmlzdWFsQ29udGV4dCo+KHJlZkNvbik7CisgICAg
aWYgKCF2Yy0+bV9jbGllbnQpCisgICAgICAgIHJldHVybjsKKworICAgIHZjLT5tX2NsaWVudC0+
aW1hZ2VBdmFpbGFibGVGb3JUaW1lKHRpbWVTdGFtcCk7Cit9CisKK2RvdWJsZSBRVE1vdmllVmlz
dWFsQ29udGV4dDo6Z2V0Q3VycmVudEhvc3RUaW1lKCkKK3sKKyAgICByZXR1cm4gQ1ZHZXRDdXJy
ZW50SG9zdFRpbWUoKTsKK30KKworZG91YmxlIFFUTW92aWVWaXN1YWxDb250ZXh0OjpnZXRIb3N0
Q2xvY2tGcmVxdWVuY3koKQoreworICAgIHJldHVybiBDVkdldEhvc3RDbG9ja0ZyZXF1ZW5jeSgp
OworfQorCit2b2lkIFFUTW92aWVWaXN1YWxDb250ZXh0OjpzZXRNb3ZpZShSZWZQdHI8UVRNb3Zp
ZT4gbW92aWUpCit7CisgICAgaWYgKG1fbW92aWUpIHsKKyAgICAgICAgU2V0TW92aWVWaXN1YWxD
b250ZXh0KG1fbW92aWUtPmdldE1vdmllSGFuZGxlKCksIDApOworICAgICAgICBtX21vdmllID0g
MDsKKyAgICB9CisKKyAgICBpZiAobW92aWUpCisgICAgICAgIE9TU3RhdHVzIHN0YXR1cyA9IFNl
dE1vdmllVmlzdWFsQ29udGV4dChtb3ZpZS0+Z2V0TW92aWVIYW5kbGUoKSwgbV92aXN1YWxDb250
ZXh0KTsKKyAgICAKKyAgICBtX21vdmllID0gbW92aWU7Cit9CisKK1JlZlB0cjxRVE1vdmllPiBR
VE1vdmllVmlzdWFsQ29udGV4dDo6bW92aWUoKSBjb25zdAoreworICAgIHJldHVybiBtX21vdmll
OworfQ0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlDQpJbmRleDogUVRNb3ZpZVZpc3VhbENv
bnRleHQuaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQ0KLS0tIFFUTW92aWVWaXN1YWxDb250ZXh0LmgJKHJldmlzaW9u
IDApDQorKysgUVRNb3ZpZVZpc3VhbENvbnRleHQuaAkocmV2aXNpb24gMCkNCkBAIC0wLDAgKzEs
ODggQEANCisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxl
LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFFUTW92aWVWaXN1
YWxDb250ZXh0X2gKKyNkZWZpbmUgUVRNb3ZpZVZpc3VhbENvbnRleHRfaAorCisjaWZkZWYgUVRN
T1ZJRVdJTl9FWFBPUlRTCisjZGVmaW5lIFFUTU9WSUVXSU5fQVBJIF9fZGVjbHNwZWMoZGxsZXhw
b3J0KQorI2Vsc2UKKyNkZWZpbmUgUVRNT1ZJRVdJTl9BUEkgX19kZWNsc3BlYyhkbGxpbXBvcnQp
CisjZW5kaWYKKworI2luY2x1ZGUgIlFUTW92aWUuaCIKKyNpbmNsdWRlICJRVE1vdmllVGFzay5o
IgorI2luY2x1ZGUgIlFUUGl4ZWxCdWZmZXIuaCIKKyNpbmNsdWRlIDxXVEYvUmVmQ291bnRlZC5o
PgorCisvKgorICogUXVpY2tUaW1lIGhlYWRlcnMgYW5kIENvcmVHcmFwaGljcyBoZWFkZXJzIGFy
ZSBtdXR1YWxseSBpbmNvbXBhdGFibGUuCisgKiBUaGVyZWZvcmUsIHdlIG11c3Qgbm90IGluY2x1
ZGUgYW55IFF1aWNrVGltZSBoZWFkZXJzIGluIGZpbGVzIHdoaWNoIHdpbGwKKyAqIGFsc28gaW5j
bHVkZSBDb3JlR3JhcGhpY3MgaGVhZGVycy4gIFRoaXMgbWVhbnMgbWFudWFsbHkgaW1wb3J0aW5n
IHR5cGVkZWZzCisgKiBmb3VuZCBpbiBRdWlja1RpbWUgYW5kIENHIGhlYWRlcnMuICBVbmZvcnR1
bmF0ZWx5LCB0aGUgb25lIHR5cGUgd2hpY2ggCisgKiBjYW5ub3QgYmUgZm9yd2FyZC1kZWZpbmVk
LCBpcyBDVlRpbWVTdGFtcC4gIFNvIG1ha2Ugc3VyZSB5b3UndmUgaW5jbHVkZWQKKyAqIDxDb3Jl
VmlkZW8vQ1ZCYXNlLmg+IGJlZm9yZSBpbmNsdWRpbmcgdGhpcyBmaWxlLgorICovCisKKyNpZm5k
ZWYgX19DT1JFVklERU9fQ1ZCQVNFX0hfXworI2Vycm9yIFlvdSBtdXN0IGluY2x1ZGUgQ1ZCYXNl
LmggYmVmb3JlIGluY2x1ZGluZyB0aGlzIGZpbGUuCisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3Qg
T3BhcXVlUVRWaXN1YWxDb250ZXh0KiAgIFFUVmlzdWFsQ29udGV4dFJlZjsKKworY2xhc3MgUVRN
b3ZpZVZpc3VhbENvbnRleHRDbGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBpbWFn
ZUF2YWlsYWJsZUZvclRpbWUoY29uc3QgQ1ZUaW1lU3RhbXAqKSA9IDA7Cit9OworCitjbGFzcyBR
VE1PVklFV0lOX0FQSSBRVE1vdmllVmlzdWFsQ29udGV4dCA6IHB1YmxpYyBSZWZDb3VudGVkPFFU
TW92aWVWaXN1YWxDb250ZXh0PiB7CitwdWJsaWM6CisgICAgUVRNb3ZpZVZpc3VhbENvbnRleHQo
UVRNb3ZpZVZpc3VhbENvbnRleHRDbGllbnQqLCBDRkRpY3Rpb25hcnlSZWYgb3B0aW9ucyA9IDAp
OworICAgIH5RVE1vdmllVmlzdWFsQ29udGV4dCgpOworCisgICAgYm9vbCBpc0ltYWdlQXZhaWxh
YmxlRm9yVGltZShjb25zdCBDVlRpbWVTdGFtcCopOworICAgIFFUUGl4ZWxCdWZmZXIgaW1hZ2VG
b3JUaW1lKGNvbnN0IENWVGltZVN0YW1wKik7CisgICAgdm9pZCB0YXNrKCk7CisKKyAgICBRVFZp
c3VhbENvbnRleHRSZWYgZ2V0KCk7CisKKyAgICBkb3VibGUgZ2V0Q3VycmVudEhvc3RUaW1lKCk7
CisgICAgZG91YmxlIGdldEhvc3RDbG9ja0ZyZXF1ZW5jeSgpOworCisgICAgdm9pZCBzZXRNb3Zp
ZShSZWZQdHI8UVRNb3ZpZT4pOworICAgIFJlZlB0cjxRVE1vdmllPiBtb3ZpZSgpIGNvbnN0Owor
CisgICAgc3RhdGljIENGRGljdGlvbmFyeVJlZiBnZXRDR0ltYWdlT3B0aW9ucygpOworCitwcm90
ZWN0ZWQ6CisgICAgdm9pZCBzZXR1cFZpc3VhbENvbnRleHQoKTsKKyAgICBzdGF0aWMgdm9pZCBp
bWFnZUF2YWlsYWJsZUNhbGxiYWNrKFFUVmlzdWFsQ29udGV4dFJlZiB2aXN1YWxDb250ZXh0LCBj
b25zdCBDVlRpbWVTdGFtcCAqdGltZVN0YW1wLCB2b2lkICpyZWZDb24pOworCisgICAgUVRNb3Zp
ZVZpc3VhbENvbnRleHRDbGllbnQqIG1fY2xpZW50OworICAgIFFUVmlzdWFsQ29udGV4dFJlZiBt
X3Zpc3VhbENvbnRleHQ7CisgICAgUmVmUHRyPFFUTW92aWU+IG1fbW92aWU7Cit9OworCisjZW5k
aWYKSW5kZXg6IFFUTW92aWVXaW4uY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gUVRNb3ZpZVdpbi5jcHAJ
KHJldmlzaW9uIDU4MTg3KQ0KKysrIFFUTW92aWVXaW4uY3BwCSh3b3JraW5nIGNvcHkpDQpAQCAt
MjksOSArMjksOSBAQA0KIC8vIFB1dCBNb3ZpZXMuaCBmaXJzdCBzbyBidWlsZCBmYWlsdXJlcyBo
ZXJlIHBvaW50IGNsZWFybHkgdG8gUXVpY2tUaW1lCiAjaW5jbHVkZSA8TW92aWVzLmg+CiAKLSNp
bmNsdWRlICJRVE1vdmllV2luVGltZXIuaCIKICNpbmNsdWRlIDxHWE1hdGguaD4KICNpbmNsdWRl
IDxRVE1MLmg+CisjaW5jbHVkZSAiUVRNb3ZpZVRhc2suaCIKICNpbmNsdWRlIDxRdWlja1RpbWVD
b21wb25lbnRzLmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYv
SGFzaFNldC5oPgpAQCAtNDIsMTEgKzQyLDYgQEANCiAKIHN0YXRpYyBjb25zdCBsb25nIG1pbmlt
dW1RdWlja1RpbWVWZXJzaW9uID0gMHgwNzMwMDAwMDsgLy8gNy4zCiAKLXN0YXRpYyBjb25zdCBs
b25nIGNsb3NlZENhcHRpb25UcmFja1R5cGUgPSAnY2xjcCc7Ci1zdGF0aWMgY29uc3QgbG9uZyBz
dWJUaXRsZVRyYWNrVHlwZSA9ICdzYnRsJzsKLXN0YXRpYyBjb25zdCBsb25nIG1wZWc0T2JqZWN0
RGVzY3JpcHRpb25UcmFja1R5cGUgPSAnb2RzbSc7Ci1zdGF0aWMgY29uc3QgbG9uZyBtcGVnNFNj
ZW5lRGVzY3JpcHRpb25UcmFja1R5cGUgPSAnc2RzbSc7Ci1zdGF0aWMgY29uc3QgbG9uZyBjbG9z
ZWRDYXB0aW9uRGlzcGxheVByb3BlcnR5SUQgPSAnZGlzcCc7CiBzdGF0aWMgTFBDVFNUUiBmdWxs
c2NyZWVuUVRNb3ZpZVdpblBvaW50ZXJQcm9wID0gVEVYVCgiZnVsbHNjcmVlblFUTW92aWVXaW5Q
b2ludGVyIik7CiAKIC8vIFJlc2l6aW5nIEdXb3JsZHMgaXMgc2xvdywgZ2l2ZSB0aGVtIGEgbWlu
aW11bSBzaXplIHNvIHNpemUgb2Ygc21hbGwgCkBAIC02NiwzMyArNjEsMTMgQEANCiBzdGF0aWMg
VmVjdG9yPENGU3RyaW5nUmVmPiogZ1N1cHBvcnRlZFR5cGVzID0gMDsKIHN0YXRpYyBTSW50MzIg
cXVpY2tUaW1lVmVyc2lvbiA9IDA7CiAKLXN0YXRpYyBRVE1vdmllV2luOjpTZXRUYXNrVGltZXJE
ZWxheUZ1bmMgZ1NldFRhc2tUaW1lckRlbGF5ID0gMDsKLXN0YXRpYyBRVE1vdmllV2luOjpTdG9w
VGFza1RpbWVyRnVuYyBnU3RvcFRhc2tUaW1lciA9IDA7Ci0KLXN0YXRpYyB2b2lkIHVwZGF0ZVRh
c2tUaW1lcihpbnQgbWF4SW50ZXJ2YWwgPSAxMDAwKQotewotICAgIGlmICghZ1Rhc2tMaXN0LT5z
aXplKCkpIHsKLSAgICAgICAgZ1N0b3BUYXNrVGltZXIoKTsKLSAgICAgICAgcmV0dXJuOyAgICAK
LSAgICB9Ci0gICAgCi0gICAgbG9uZyBpbnRlcnZhbEluTVM7Ci0gICAgUVRHZXRUaW1lVW50aWxO
ZXh0VGFzaygmaW50ZXJ2YWxJbk1TLCAxMDAwKTsKLSAgICBpZiAoaW50ZXJ2YWxJbk1TID4gbWF4
SW50ZXJ2YWwpCi0gICAgICAgIGludGVydmFsSW5NUyA9IG1heEludGVydmFsOwotICAgIGdTZXRU
YXNrVGltZXJEZWxheShzdGF0aWNfY2FzdDxmbG9hdD4oaW50ZXJ2YWxJbk1TKSAvIDEwMDApOwot
fQotCi1jbGFzcyBRVE1vdmllV2luUHJpdmF0ZSA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CitjbGFz
cyBRVE1vdmllV2luUHJpdmF0ZSA6IHB1YmxpYyBRVE1vdmllQ2xpZW50IHsKIHB1YmxpYzoKICAg
ICBRVE1vdmllV2luUHJpdmF0ZSgpOwotICAgIH5RVE1vdmllV2luUHJpdmF0ZSgpOwotICAgIHZv
aWQgdGFzaygpOwotICAgIHZvaWQgc3RhcnRUYXNrKCk7Ci0gICAgdm9pZCBlbmRUYXNrKCk7Cisg
ICAgdmlydHVhbCB+UVRNb3ZpZVdpblByaXZhdGUoKTsKIAotICAgIHZvaWQgY3JlYXRlTW92aWVD
b250cm9sbGVyKCk7CiAgICAgdm9pZCByZWdpc3RlckRyYXdpbmdDYWxsYmFjaygpOworICAgIHZv
aWQgdW5yZWdpc3RlckRyYXdpbmdDYWxsYmFjaygpOwogICAgIHZvaWQgZHJhd2luZ0NvbXBsZXRl
KCk7CiAgICAgdm9pZCB1cGRhdGVHV29ybGQoKTsKICAgICB2b2lkIGNyZWF0ZUdXb3JsZCgpOwpA
QCAtMTAzLDE2ICs3OCwxNSBAQA0KIAogICAgIHZvaWQgc2V0U2l6ZShpbnQsIGludCk7CiAKKyAg
ICB2aXJ0dWFsIHZvaWQgbW92aWVFbmRlZChRVE1vdmllKik7CisgICAgdmlydHVhbCB2b2lkIG1v
dmllTG9hZFN0YXRlQ2hhbmdlZChRVE1vdmllKik7CisgICAgdmlydHVhbCB2b2lkIG1vdmllVGlt
ZUNoYW5nZWQoUVRNb3ZpZSopOworCiAgICAgUVRNb3ZpZVdpbiogbV9tb3ZpZVdpbjsKKyAgICBR
VE1vdmllKiBtX3F0TW92aWU7CiAgICAgTW92aWUgbV9tb3ZpZTsKLSAgICBNb3ZpZUNvbnRyb2xs
ZXIgbV9tb3ZpZUNvbnRyb2xsZXI7Ci0gICAgYm9vbCBtX3Rhc2tpbmc7CiAgICAgUVRNb3ZpZVdp
bkNsaWVudCogbV9jbGllbnQ7CiAgICAgbG9uZyBtX2xvYWRTdGF0ZTsKLSAgICBib29sIG1fZW5k
ZWQ7Ci0gICAgYm9vbCBtX3NlZWtpbmc7Ci0gICAgZmxvYXQgbV9sYXN0TWVkaWFUaW1lOwotICAg
IGRvdWJsZSBtX2xhc3RMb2FkU3RhdGVDaGVja1RpbWU7CiAgICAgaW50IG1fd2lkdGg7CiAgICAg
aW50IG1faGVpZ2h0OwogICAgIGJvb2wgbV92aXNpYmxlOwpAQCAtMTIwLDEyICs5NCw4IEBADQog
ICAgIGludCBtX2dXb3JsZFdpZHRoOwogICAgIGludCBtX2dXb3JsZEhlaWdodDsKICAgICBHV29y
bGRQdHIgbV9zYXZlZEdXb3JsZDsKLSAgICBsb25nIG1fbG9hZEVycm9yOwogICAgIGZsb2F0IG1f
d2lkdGhTY2FsZUZhY3RvcjsKICAgICBmbG9hdCBtX2hlaWdodFNjYWxlRmFjdG9yOwotICAgIENG
VVJMUmVmIG1fY3VycmVudFVSTDsKLSAgICBmbG9hdCBtX3RpbWVUb1Jlc3RvcmU7Ci0gICAgZmxv
YXQgbV9yYXRlVG9SZXN0b3JlOwogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICBib29sIG1fc2Nh
bGVDYWNoZWQ7CiAjZW5kaWYKQEAgLTEzNCwxOSArMTA0LDE0IEBADQogICAgIFJlY3QgbV9mdWxs
c2NyZWVuUmVjdDsKICAgICBRVE1vdmllV2luRnVsbHNjcmVlbkNsaWVudCogbV9mdWxsc2NyZWVu
Q2xpZW50OwogICAgIGNoYXIqIG1fZnVsbHNjcmVlblJlc3RvcmVTdGF0ZTsKKyAgICBib29sIG1f
ZGlzYWJsZWQ7CiB9OwogCiBRVE1vdmllV2luUHJpdmF0ZTo6UVRNb3ZpZVdpblByaXZhdGUoKQog
ICAgIDogbV9tb3ZpZVdpbigwKQogICAgICwgbV9tb3ZpZSgwKQotICAgICwgbV9tb3ZpZUNvbnRy
b2xsZXIoMCkKLSAgICAsIG1fdGFza2luZyhmYWxzZSkKICAgICAsIG1fY2xpZW50KDApCiAgICAg
LCBtX2xvYWRTdGF0ZSgwKQotICAgICwgbV9lbmRlZChmYWxzZSkKLSAgICAsIG1fc2Vla2luZyhm
YWxzZSkKLSAgICAsIG1fbGFzdE1lZGlhVGltZSgwKQotICAgICwgbV9sYXN0TG9hZFN0YXRlQ2hl
Y2tUaW1lKDApCiAgICAgLCBtX3dpZHRoKDApCiAgICAgLCBtX2hlaWdodCgwKQogICAgICwgbV92
aXNpYmxlKGZhbHNlKQpAQCAtMTU0LDEyICsxMTksOCBAQA0KICAgICAsIG1fZ1dvcmxkV2lkdGgo
MCkKICAgICAsIG1fZ1dvcmxkSGVpZ2h0KDApCiAgICAgLCBtX3NhdmVkR1dvcmxkKDApCi0gICAg
LCBtX2xvYWRFcnJvcigwKQogICAgICwgbV93aWR0aFNjYWxlRmFjdG9yKDEpCiAgICAgLCBtX2hl
aWdodFNjYWxlRmFjdG9yKDEpCi0gICAgLCBtX2N1cnJlbnRVUkwoMCkKLSAgICAsIG1fdGltZVRv
UmVzdG9yZSgtMS4wZikKLSAgICAsIG1fcmF0ZVRvUmVzdG9yZSgtMS4wZikKICNpZiAhQVNTRVJU
X0RJU0FCTEVECiAgICAgLCBtX3NjYWxlQ2FjaGVkKGZhbHNlKQogI2VuZGlmCkBAIC0xNjcsNiAr
MTI4LDggQEANCiAgICAgLCBtX2Z1bGxzY3JlZW5PcmlnR1dvcmxkKDApCiAgICAgLCBtX2Z1bGxz
Y3JlZW5DbGllbnQoMCkKICAgICAsIG1fZnVsbHNjcmVlblJlc3RvcmVTdGF0ZSgwKQorICAgICwg
bV9kaXNhYmxlZChmYWxzZSkKKyAgICAsIG1fcXRNb3ZpZSgwKQogewogICAgIFJlY3QgcmVjdCA9
IHsgMCwgMCwgMCwgMCB9OwogICAgIG1fZnVsbHNjcmVlblJlY3QgPSByZWN0OwpAQCAtMTc2LDQ5
ICsxMzksMTAgQEANCiB7CiAgICAgQVNTRVJUKCFtX2Z1bGxzY3JlZW5XaW5kb3cpOwogCi0gICAg
ZW5kVGFzaygpOwogICAgIGlmIChtX2dXb3JsZCkKICAgICAgICAgZGVsZXRlR1dvcmxkKCk7Ci0g
ICAgaWYgKG1fbW92aWVDb250cm9sbGVyKQotICAgICAgICBEaXNwb3NlTW92aWVDb250cm9sbGVy
KG1fbW92aWVDb250cm9sbGVyKTsKLSAgICBpZiAobV9tb3ZpZSkKLSAgICAgICAgRGlzcG9zZU1v
dmllKG1fbW92aWUpOwotICAgIGlmIChtX2N1cnJlbnRVUkwpCi0gICAgICAgIENGUmVsZWFzZSht
X2N1cnJlbnRVUkwpOwogfQogCi12b2lkIFFUTW92aWVXaW46OnRhc2tUaW1lckZpcmVkKCkKLXsK
LSAgICAvLyBUaGUgaGFzaCBjb250ZW50IG1pZ2h0IGNoYW5nZSBkdXJpbmcgdGFzaygpCi0gICAg
VmVjdG9yPFFUTW92aWVXaW5Qcml2YXRlKj4gdGFza3M7Ci0gICAgY29weVRvVmVjdG9yKCpnVGFz
a0xpc3QsIHRhc2tzKTsKLSAgICBzaXplX3QgY291bnQgPSB0YXNrcy5zaXplKCk7Ci0gICAgZm9y
ICh1bnNpZ25lZCBuID0gMDsgbiA8IGNvdW50OyArK24pCi0gICAgICAgIHRhc2tzW25dLT50YXNr
KCk7Ci0KLSAgICB1cGRhdGVUYXNrVGltZXIoKTsKLX0KLQotdm9pZCBRVE1vdmllV2luUHJpdmF0
ZTo6c3RhcnRUYXNrKCkgCi17Ci0gICAgaWYgKG1fdGFza2luZykKLSAgICAgICAgcmV0dXJuOwot
ICAgIGlmICghZ1Rhc2tMaXN0KQotICAgICAgICBnVGFza0xpc3QgPSBuZXcgSGFzaFNldDxRVE1v
dmllV2luUHJpdmF0ZSo+OwotICAgIGdUYXNrTGlzdC0+YWRkKHRoaXMpOwotICAgIG1fdGFza2lu
ZyA9IHRydWU7Ci0gICAgdXBkYXRlVGFza1RpbWVyKCk7Ci19Ci0KLXZvaWQgUVRNb3ZpZVdpblBy
aXZhdGU6OmVuZFRhc2soKSAKLXsKLSAgICBpZiAoIW1fdGFza2luZykKLSAgICAgICAgcmV0dXJu
OwotICAgIGdUYXNrTGlzdC0+cmVtb3ZlKHRoaXMpOwotICAgIG1fdGFza2luZyA9IGZhbHNlOwot
ICAgIHVwZGF0ZVRhc2tUaW1lcigpOwotfQotCiB2b2lkIFFUTW92aWVXaW5Qcml2YXRlOjpjYWNo
ZU1vdmllU2NhbGUoKQogewogICAgIFJlY3QgbmF0dXJhbFJlY3Q7CkBAIC0yMzksMTA2ICsxNjMs
MzQgQEANCiAjZW5kaWYKIH0KIAotdm9pZCBRVE1vdmllV2luUHJpdmF0ZTo6dGFzaygpIAorcGFz
Y2FsIE9TRXJyIG1vdmllRHJhd2luZ0NvbXBsZXRlUHJvYyhNb3ZpZSBtb3ZpZSwgbG9uZyBkYXRh
KQogewotICAgIEFTU0VSVChtX3Rhc2tpbmcpOwotCi0gICAgaWYgKCFtX2xvYWRFcnJvcikgewot
ICAgICAgICBpZiAobV9tb3ZpZUNvbnRyb2xsZXIpCi0gICAgICAgICAgICBNQ0lkbGUobV9tb3Zp
ZUNvbnRyb2xsZXIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBNb3ZpZXNUYXNrKG1fbW92
aWUsIDApOwotICAgIH0KLQotICAgIC8vIEdldE1vdmllTG9hZFN0YXRlIGRvY3VtZW50YXRpb24g
c2F5cyB0aGF0IHlvdSBzaG91bGQgbm90IGNhbGwgaXQgbW9yZSBvZnRlbiB0aGFuIGV2ZXJ5IHF1
YXJ0ZXIgb2YgYSBzZWNvbmQuCi0gICAgaWYgKHN5c3RlbVRpbWUoKSA+PSBtX2xhc3RMb2FkU3Rh
dGVDaGVja1RpbWUgKyAwLjI1IHx8IG1fbG9hZEVycm9yKSB7IAotICAgICAgICAvLyBJZiBsb2Fk
IGZhaWxzIFFUJ3MgbG9hZCBzdGF0ZSBpcyBRVE1vdmllTG9hZFN0YXRlQ29tcGxldGUuCi0gICAg
ICAgIC8vIFRoaXMgaXMgZGlmZmVyZW50IGZyb20gUVRLaXQgQVBJIGFuZCBzZWVtcyBzdHJhbmdl
LgotICAgICAgICBsb25nIGxvYWRTdGF0ZSA9IG1fbG9hZEVycm9yID8gUVRNb3ZpZUxvYWRTdGF0
ZUVycm9yIDogR2V0TW92aWVMb2FkU3RhdGUobV9tb3ZpZSk7Ci0gICAgICAgIGlmIChsb2FkU3Rh
dGUgIT0gbV9sb2FkU3RhdGUpIHsKLQotICAgICAgICAgICAgLy8gd2Ugb25seSBuZWVkIHRvIGVy
YXNlIHRoZSBtb3ZpZSBnd29ybGQgd2hlbiB0aGUgbG9hZCBzdGF0ZSBjaGFuZ2VzIHRvIGxvYWRl
ZCB3aGlsZSBpdAotICAgICAgICAgICAgLy8gIGlzIHZpc2libGUgYXMgdGhlIGd3b3JsZCBpcyBk
ZXN0cm95ZWQvY3JlYXRlZCB3aGVuIHZpc2liaWxpdHkgY2hhbmdlcwotICAgICAgICAgICAgYm9v
bCBzaG91bGRSZXN0b3JlUGxheWJhY2tTdGF0ZSA9IGZhbHNlOwotICAgICAgICAgICAgYm9vbCBt
b3ZpZU5ld2x5UGxheWFibGUgPSBsb2FkU3RhdGUgPj0gUVRNb3ZpZUxvYWRTdGF0ZUxvYWRlZCAm
JiBtX2xvYWRTdGF0ZSA8IFFUTW92aWVMb2FkU3RhdGVMb2FkZWQ7Ci0gICAgICAgICAgICBtX2xv
YWRTdGF0ZSA9IGxvYWRTdGF0ZTsKLSAgICAgICAgICAgIGlmIChtb3ZpZU5ld2x5UGxheWFibGUp
IHsKLSAgICAgICAgICAgICAgICBjYWNoZU1vdmllU2NhbGUoKTsKLSAgICAgICAgICAgICAgICB1
cGRhdGVNb3ZpZVNpemUoKTsKLSAgICAgICAgICAgICAgICBpZiAobV92aXNpYmxlKQotICAgICAg
ICAgICAgICAgICAgICBjbGVhckdXb3JsZCgpOwotICAgICAgICAgICAgICAgIHNob3VsZFJlc3Rv
cmVQbGF5YmFja1N0YXRlID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYg
KCFtX21vdmllQ29udHJvbGxlciAmJiBtX2xvYWRTdGF0ZSA+PSBRVE1vdmllTG9hZFN0YXRlTG9h
ZGVkKQotICAgICAgICAgICAgICAgIGNyZWF0ZU1vdmllQ29udHJvbGxlcigpOwotICAgICAgICAg
ICAgbV9jbGllbnQtPm1vdmllTG9hZFN0YXRlQ2hhbmdlZChtX21vdmllV2luKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgaWYgKHNob3VsZFJlc3RvcmVQbGF5YmFja1N0YXRlICYmIG1fdGlt
ZVRvUmVzdG9yZSAhPSAtMS4wZikgewotICAgICAgICAgICAgICAgIG1fbW92aWVXaW4tPnNldEN1
cnJlbnRUaW1lKG1fdGltZVRvUmVzdG9yZSk7Ci0gICAgICAgICAgICAgICAgbV90aW1lVG9SZXN0
b3JlID0gLTEuMGY7Ci0gICAgICAgICAgICAgICAgbV9tb3ZpZVdpbi0+c2V0UmF0ZShtX3JhdGVU
b1Jlc3RvcmUpOwotICAgICAgICAgICAgICAgIG1fcmF0ZVRvUmVzdG9yZSA9IC0xLjBmOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobV9tb3ZpZVdpbi0+bV9kaXNhYmxlZCkgewot
ICAgICAgICAgICAgICAgIGVuZFRhc2soKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgbV9sYXN0TG9hZFN0YXRlQ2hlY2tUaW1lID0g
c3lzdGVtVGltZSgpOwotICAgIH0KLQotICAgIGJvb2wgZW5kZWQgPSAhIUlzTW92aWVEb25lKG1f
bW92aWUpOwotICAgIGlmIChlbmRlZCAhPSBtX2VuZGVkKSB7Ci0gICAgICAgIG1fZW5kZWQgPSBl
bmRlZDsKLSAgICAgICAgaWYgKG1fY2xpZW50ICYmIGVuZGVkKQotICAgICAgICAgICAgbV9jbGll
bnQtPm1vdmllRW5kZWQobV9tb3ZpZVdpbik7Ci0gICAgfQotCi0gICAgZmxvYXQgdGltZSA9IG1f
bW92aWVXaW4tPmN1cnJlbnRUaW1lKCk7Ci0gICAgaWYgKHRpbWUgPCBtX2xhc3RNZWRpYVRpbWUg
fHwgdGltZSA+PSBtX2xhc3RNZWRpYVRpbWUgKyBjTm9uQ29udGludW91c1RpbWVDaGFuZ2UgfHwg
bV9zZWVraW5nKSB7Ci0gICAgICAgIG1fc2Vla2luZyA9IGZhbHNlOwotICAgICAgICBpZiAobV9j
bGllbnQpCi0gICAgICAgICAgICBtX2NsaWVudC0+bW92aWVUaW1lQ2hhbmdlZChtX21vdmllV2lu
KTsKLSAgICB9Ci0gICAgbV9sYXN0TWVkaWFUaW1lID0gdGltZTsKLQotICAgIGlmIChtX2xvYWRF
cnJvcikKLSAgICAgICAgZW5kVGFzaygpOworICAgIFVwcFBhcmFtIHBhcmFtOworICAgIHBhcmFt
LmxvbmdWYWx1ZSA9IGRhdGE7CisgICAgUVRNb3ZpZVdpblByaXZhdGUqIG1wID0gc3RhdGljX2Nh
c3Q8UVRNb3ZpZVdpblByaXZhdGUqPihwYXJhbS5wdHIpOworICAgIGlmIChtcCkKKyAgICAgICAg
bXAtPmRyYXdpbmdDb21wbGV0ZSgpOworICAgIHJldHVybiAwOwogfQogCi12b2lkIFFUTW92aWVX
aW5Qcml2YXRlOjpjcmVhdGVNb3ZpZUNvbnRyb2xsZXIoKQotewotICAgIFJlY3QgYm91bmRzOwot
ICAgIGxvbmcgZmxhZ3M7Ci0KLSAgICBpZiAoIW1fbW92aWUpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChtX21vdmllQ29udHJvbGxlcikKLSAgICAgICAgRGlzcG9zZU1vdmllQ29udHJvbGxl
cihtX21vdmllQ29udHJvbGxlcik7Ci0KLSAgICBHZXRNb3ZpZUJveChtX21vdmllLCAmYm91bmRz
KTsKLSAgICBmbGFncyA9IG1jVG9wTGVmdE1vdmllIHwgbWNOb3RWaXNpYmxlOwotICAgIG1fbW92
aWVDb250cm9sbGVyID0gTmV3TW92aWVDb250cm9sbGVyKG1fbW92aWUsICZib3VuZHMsIGZsYWdz
KTsKLSAgICBpZiAoIW1fbW92aWVDb250cm9sbGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBN
Q1NldENvbnRyb2xsZXJQb3J0KG1fbW92aWVDb250cm9sbGVyLCBtX2dXb3JsZCk7Ci0gICAgTUNT
ZXRDb250cm9sbGVyQXR0YWNoZWQobV9tb3ZpZUNvbnRyb2xsZXIsIGZhbHNlKTsKLX0KLQogdm9p
ZCBRVE1vdmllV2luUHJpdmF0ZTo6cmVnaXN0ZXJEcmF3aW5nQ2FsbGJhY2soKQogeworICAgIGlm
ICghZ01vdmllRHJhd2luZ0NvbXBsZXRlVVBQKQorICAgICAgICBnTW92aWVEcmF3aW5nQ29tcGxl
dGVVUFAgPSBOZXdNb3ZpZURyYXdpbmdDb21wbGV0ZVVQUChtb3ZpZURyYXdpbmdDb21wbGV0ZVBy
b2MpOworCiAgICAgVXBwUGFyYW0gcGFyYW07CiAgICAgcGFyYW0ucHRyID0gdGhpczsKICAgICBT
ZXRNb3ZpZURyYXdpbmdDb21wbGV0ZVByb2MobV9tb3ZpZSwgbW92aWVEcmF3aW5nQ2FsbFdoZW5D
aGFuZ2VkLCBnTW92aWVEcmF3aW5nQ29tcGxldGVVUFAsIHBhcmFtLmxvbmdWYWx1ZSk7CiB9CiAK
K3ZvaWQgUVRNb3ZpZVdpblByaXZhdGU6OnVucmVnaXN0ZXJEcmF3aW5nQ2FsbGJhY2soKQorewor
ICAgIFNldE1vdmllRHJhd2luZ0NvbXBsZXRlUHJvYyhtX21vdmllLCBtb3ZpZURyYXdpbmdDYWxs
V2hlbkNoYW5nZWQsIDAsIDApOworfQorCiB2b2lkIFFUTW92aWVXaW5Qcml2YXRlOjpkcmF3aW5n
Q29tcGxldGUoKQogewotICAgIGlmICghbV9nV29ybGQgfHwgbV9tb3ZpZVdpbi0+bV9kaXNhYmxl
ZCB8fCBtX2xvYWRTdGF0ZSA8IFFUTW92aWVMb2FkU3RhdGVMb2FkZWQpCisgICAgaWYgKCFtX2dX
b3JsZCB8fCBtX21vdmllV2luLT5tX3ByaXZhdGUtPm1fZGlzYWJsZWQgfHwgbV9sb2FkU3RhdGUg
PCBRVE1vdmllTG9hZFN0YXRlTG9hZGVkKQogICAgICAgICByZXR1cm47CiAgICAgbV9jbGllbnQt
Pm1vdmllTmV3SW1hZ2VBdmFpbGFibGUobV9tb3ZpZVdpbik7CiB9CkBAIC0zNzcsMTMgKzIyOSw5
IEBADQogICAgIGlmIChlcnIpIAogICAgICAgICByZXR1cm47CiAgICAgR2V0TW92aWVHV29ybGQo
bV9tb3ZpZSwgJm1fc2F2ZWRHV29ybGQsIDApOwotICAgIGlmIChtX21vdmllQ29udHJvbGxlcikK
LSAgICAgICAgTUNTZXRDb250cm9sbGVyUG9ydChtX21vdmllQ29udHJvbGxlciwgbV9nV29ybGQp
OwogICAgIFNldE1vdmllR1dvcmxkKG1fbW92aWUsIG1fZ1dvcmxkLCAwKTsKICAgICBib3VuZHMu
cmlnaHQgPSBtX3dpZHRoOwogICAgIGJvdW5kcy5ib3R0b20gPSBtX2hlaWdodDsKLSAgICBpZiAo
bV9tb3ZpZUNvbnRyb2xsZXIpCi0gICAgICAgIE1DU2V0Q29udHJvbGxlckJvdW5kc1JlY3QobV9t
b3ZpZUNvbnRyb2xsZXIsICZib3VuZHMpOwogICAgIFNldE1vdmllQm94KG1fbW92aWUsICZib3Vu
ZHMpOwogfQogCkBAIC00MzYsOCArMjg0LDYgQEANCiAgICAgYm91bmRzLmxlZnQgPSAwOyAKICAg
ICBib3VuZHMucmlnaHQgPSBtX3dpZHRoOwogICAgIGJvdW5kcy5ib3R0b20gPSBtX2hlaWdodDsK
LSAgICBpZiAobV9tb3ZpZUNvbnRyb2xsZXIpCi0gICAgICAgIE1DU2V0Q29udHJvbGxlckJvdW5k
c1JlY3QobV9tb3ZpZUNvbnRyb2xsZXIsICZib3VuZHMpOwogICAgIFNldE1vdmllQm94KG1fbW92
aWUsICZib3VuZHMpOwogICAgIHVwZGF0ZUdXb3JsZCgpOwogfQpAQCAtNDQ2LDggKzI5Miw2IEBA
DQogdm9pZCBRVE1vdmllV2luUHJpdmF0ZTo6ZGVsZXRlR1dvcmxkKCkKIHsKICAgICBBU1NFUlQo
bV9nV29ybGQpOwotICAgIGlmIChtX21vdmllQ29udHJvbGxlcikKLSAgICAgICAgTUNTZXRDb250
cm9sbGVyUG9ydChtX21vdmllQ29udHJvbGxlciwgbV9zYXZlZEdXb3JsZCk7CiAgICAgaWYgKG1f
bW92aWUpCiAgICAgICAgIFNldE1vdmllR1dvcmxkKG1fbW92aWUsIG1fc2F2ZWRHV29ybGQsIDAp
OwogICAgIG1fc2F2ZWRHV29ybGQgPSAwOwpAQCAtNDU3LDE2MCArMzAxLDUxIEBADQogICAgIG1f
Z1dvcmxkSGVpZ2h0ID0gMDsKIH0KIAotCi1RVE1vdmllV2luOjpRVE1vdmllV2luKFFUTW92aWVX
aW5DbGllbnQqIGNsaWVudCkKLSAgICA6IG1fcHJpdmF0ZShuZXcgUVRNb3ZpZVdpblByaXZhdGUo
KSkKLSAgICAsIG1fZGlzYWJsZWQoZmFsc2UpCit2b2lkIFFUTW92aWVXaW5Qcml2YXRlOjptb3Zp
ZUVuZGVkKFFUTW92aWUqKQogewotICAgIG1fcHJpdmF0ZS0+bV9tb3ZpZVdpbiA9IHRoaXM7Ci0g
ICAgbV9wcml2YXRlLT5tX2NsaWVudCA9IGNsaWVudDsKLSAgICBpbml0aWFsaXplUXVpY2tUaW1l
KCk7CisgICAgLy8gRG8gbm90aGluZwogfQogCi1RVE1vdmllV2luOjp+UVRNb3ZpZVdpbigpCit2
b2lkIFFUTW92aWVXaW5Qcml2YXRlOjptb3ZpZUxvYWRTdGF0ZUNoYW5nZWQoUVRNb3ZpZSogbW92
aWUpCiB7Ci0gICAgZGVsZXRlIG1fcHJpdmF0ZTsKLX0KKyAgICBsb25nIGxvYWRTdGF0ZSA9IEdl
dE1vdmllTG9hZFN0YXRlKG1vdmllLT5nZXRNb3ZpZUhhbmRsZSgpKTsKKyAgICBpZiAobG9hZFN0
YXRlICE9IG1fbG9hZFN0YXRlKSB7CiAKLXZvaWQgUVRNb3ZpZVdpbjo6cGxheSgpCi17Ci0gICAg
bV9wcml2YXRlLT5tX3RpbWVUb1Jlc3RvcmUgPSAtMS4wZjsKKyAgICAgICAgLy8gd2Ugb25seSBu
ZWVkIHRvIGVyYXNlIHRoZSBtb3ZpZSBnd29ybGQgd2hlbiB0aGUgbG9hZCBzdGF0ZSBjaGFuZ2Vz
IHRvIGxvYWRlZCB3aGlsZSBpdAorICAgICAgICAvLyAgaXMgdmlzaWJsZSBhcyB0aGUgZ3dvcmxk
IGlzIGRlc3Ryb3llZC9jcmVhdGVkIHdoZW4gdmlzaWJpbGl0eSBjaGFuZ2VzCisgICAgICAgIGJv
b2wgbW92aWVOZXdseVBsYXlhYmxlID0gbG9hZFN0YXRlID49IFFUTW92aWVMb2FkU3RhdGVMb2Fk
ZWQgJiYgbV9sb2FkU3RhdGUgPCBRVE1vdmllTG9hZFN0YXRlTG9hZGVkOworICAgICAgICBtX2xv
YWRTdGF0ZSA9IGxvYWRTdGF0ZTsKIAotICAgIGlmIChtX3ByaXZhdGUtPm1fbW92aWVDb250cm9s
bGVyKQotICAgICAgICBNQ0RvQWN0aW9uKG1fcHJpdmF0ZS0+bV9tb3ZpZUNvbnRyb2xsZXIsIG1j
QWN0aW9uUHJlcm9sbEFuZFBsYXksICh2b2lkICopR2V0TW92aWVQcmVmZXJyZWRSYXRlKG1fcHJp
dmF0ZS0+bV9tb3ZpZSkpOwotICAgIGVsc2UKLSAgICAgICAgU3RhcnRNb3ZpZShtX3ByaXZhdGUt
Pm1fbW92aWUpOwotICAgIG1fcHJpdmF0ZS0+c3RhcnRUYXNrKCk7CisgICAgICAgIGlmIChtb3Zp
ZU5ld2x5UGxheWFibGUpIHsKKyAgICAgICAgICAgIGNhY2hlTW92aWVTY2FsZSgpOworICAgICAg
ICAgICAgdXBkYXRlTW92aWVTaXplKCk7CisgICAgICAgICAgICBpZiAobV92aXNpYmxlKQorICAg
ICAgICAgICAgICAgIGNsZWFyR1dvcmxkKCk7CisgICAgICAgIH0KKyAgICB9CiB9CiAKLXZvaWQg
UVRNb3ZpZVdpbjo6cGF1c2UoKQordm9pZCBRVE1vdmllV2luUHJpdmF0ZTo6bW92aWVUaW1lQ2hh
bmdlZChRVE1vdmllKikKIHsKLSAgICBtX3ByaXZhdGUtPm1fdGltZVRvUmVzdG9yZSA9IC0xLjBm
OwotCi0gICAgaWYgKG1fcHJpdmF0ZS0+bV9tb3ZpZUNvbnRyb2xsZXIpCi0gICAgICAgIE1DRG9B
Y3Rpb24obV9wcml2YXRlLT5tX21vdmllQ29udHJvbGxlciwgbWNBY3Rpb25QbGF5LCAwKTsKLSAg
ICBlbHNlCi0gICAgICAgIFN0b3BNb3ZpZShtX3ByaXZhdGUtPm1fbW92aWUpOwotICAgIHVwZGF0
ZVRhc2tUaW1lcigpOworICAgIC8vIERvIG5vdGhpbmcKIH0KIAotZmxvYXQgUVRNb3ZpZVdpbjo6
cmF0ZSgpIGNvbnN0CitRVE1vdmllV2luOjpRVE1vdmllV2luKFFUTW92aWVXaW5DbGllbnQqIGNs
aWVudCkKKyAgICA6IG1fcHJpdmF0ZShuZXcgUVRNb3ZpZVdpblByaXZhdGUoKSkKIHsKLSAgICBp
ZiAoIW1fcHJpdmF0ZS0+bV9tb3ZpZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIEZp
eGVkVG9GbG9hdChHZXRNb3ZpZVJhdGUobV9wcml2YXRlLT5tX21vdmllKSk7CisgICAgbV9wcml2
YXRlLT5tX21vdmllV2luID0gdGhpczsKKyAgICBtX3ByaXZhdGUtPm1fY2xpZW50ID0gY2xpZW50
OwogfQogCi12b2lkIFFUTW92aWVXaW46OnNldFJhdGUoZmxvYXQgcmF0ZSkKK1FUTW92aWVXaW46
On5RVE1vdmllV2luKCkKIHsKLSAgICBpZiAoIW1fcHJpdmF0ZS0+bV9tb3ZpZSkKLSAgICAgICAg
cmV0dXJuOyAgICAKLSAgICBtX3ByaXZhdGUtPm1fdGltZVRvUmVzdG9yZSA9IC0xLjBmOwotICAg
IAotICAgIGlmIChtX3ByaXZhdGUtPm1fbW92aWVDb250cm9sbGVyKQotICAgICAgICBNQ0RvQWN0
aW9uKG1fcHJpdmF0ZS0+bV9tb3ZpZUNvbnRyb2xsZXIsIG1jQWN0aW9uUHJlcm9sbEFuZFBsYXks
ICh2b2lkICopRmxvYXRUb0ZpeGVkKHJhdGUpKTsKLSAgICBlbHNlCi0gICAgICAgIFNldE1vdmll
UmF0ZShtX3ByaXZhdGUtPm1fbW92aWUsIEZsb2F0VG9GaXhlZChyYXRlKSk7Ci0gICAgdXBkYXRl
VGFza1RpbWVyKCk7CisgICAgZGVsZXRlIG1fcHJpdmF0ZTsKIH0KIAotZmxvYXQgUVRNb3ZpZVdp
bjo6ZHVyYXRpb24oKSBjb25zdAotewotICAgIGlmICghbV9wcml2YXRlLT5tX21vdmllKQotICAg
ICAgICByZXR1cm4gMDsKLSAgICBUaW1lVmFsdWUgdmFsID0gR2V0TW92aWVEdXJhdGlvbihtX3By
aXZhdGUtPm1fbW92aWUpOwotICAgIFRpbWVTY2FsZSBzY2FsZSA9IEdldE1vdmllVGltZVNjYWxl
KG1fcHJpdmF0ZS0+bV9tb3ZpZSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih2YWwp
IC8gc2NhbGU7Ci19Ci0KLWZsb2F0IFFUTW92aWVXaW46OmN1cnJlbnRUaW1lKCkgY29uc3QKLXsK
LSAgICBpZiAoIW1fcHJpdmF0ZS0+bV9tb3ZpZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgVGlt
ZVZhbHVlIHZhbCA9IEdldE1vdmllVGltZShtX3ByaXZhdGUtPm1fbW92aWUsIDApOwotICAgIFRp
bWVTY2FsZSBzY2FsZSA9IEdldE1vdmllVGltZVNjYWxlKG1fcHJpdmF0ZS0+bV9tb3ZpZSk7Ci0g
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih2YWwpIC8gc2NhbGU7Ci19Ci0KLXZvaWQgUVRN
b3ZpZVdpbjo6c2V0Q3VycmVudFRpbWUoZmxvYXQgdGltZSkgY29uc3QKLXsKLSAgICBpZiAoIW1f
cHJpdmF0ZS0+bV9tb3ZpZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9wcml2YXRlLT5tX3Rp
bWVUb1Jlc3RvcmUgPSAtMS4wZjsKLSAgICAKLSAgICBtX3ByaXZhdGUtPm1fc2Vla2luZyA9IHRy
dWU7Ci0gICAgVGltZVNjYWxlIHNjYWxlID0gR2V0TW92aWVUaW1lU2NhbGUobV9wcml2YXRlLT5t
X21vdmllKTsKLSAgICBpZiAobV9wcml2YXRlLT5tX21vdmllQ29udHJvbGxlcil7Ci0gICAgICAg
IFFUUmVzdGFydEF0VGltZVJlY29yZCByZXN0YXJ0ID0geyB0aW1lICogc2NhbGUgLCAwIH07Ci0g
ICAgICAgIE1DRG9BY3Rpb24obV9wcml2YXRlLT5tX21vdmllQ29udHJvbGxlciwgbWNBY3Rpb25S
ZXN0YXJ0QXRUaW1lLCAodm9pZCAqKSZyZXN0YXJ0KTsKLSAgICB9IGVsc2UKLSAgICAgICAgU2V0
TW92aWVUaW1lVmFsdWUobV9wcml2YXRlLT5tX21vdmllLCBUaW1lVmFsdWUodGltZSAqIHNjYWxl
KSk7Ci0gICAgdXBkYXRlVGFza1RpbWVyKCk7Ci19Ci0KLXZvaWQgUVRNb3ZpZVdpbjo6c2V0Vm9s
dW1lKGZsb2F0IHZvbHVtZSkKLXsKLSAgICBpZiAoIW1fcHJpdmF0ZS0+bV9tb3ZpZSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIFNldE1vdmllVm9sdW1lKG1fcHJpdmF0ZS0+bV9tb3ZpZSwgc3RhdGlj
X2Nhc3Q8c2hvcnQ+KHZvbHVtZSAqIDI1NikpOwotfQotCi12b2lkIFFUTW92aWVXaW46OnNldFBy
ZXNlcnZlc1BpdGNoKGJvb2wgcHJlc2VydmVzUGl0Y2gpCi17Ci0gICAgaWYgKCFtX3ByaXZhdGUt
Pm1fbW92aWUgfHwgIW1fcHJpdmF0ZS0+bV9jdXJyZW50VVJMKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBPU0VyciBlcnJvcjsKLSAgICBib29sIHByb3AgPSBmYWxzZTsKLQotICAgIGVycm9yID0g
UVRHZXRNb3ZpZVByb3BlcnR5KG1fcHJpdmF0ZS0+bV9tb3ZpZSwga1FUUHJvcGVydHlDbGFzc19B
dWRpbywga1FUQXVkaW9Qcm9wZXJ0eUlEX1JhdGVDaGFuZ2VzUHJlc2VydmVQaXRjaCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoa1FUQXVkaW9Qcm9wZXJ0eUlEX1JhdGVD
aGFuZ2VzUHJlc2VydmVQaXRjaCksIHN0YXRpY19jYXN0PFFUUHJvcGVydHlWYWx1ZVB0cj4oJnBy
b3ApLCAwKTsKLQotICAgIGlmIChlcnJvciB8fCBwcm9wID09IHByZXNlcnZlc1BpdGNoKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX3ByaXZhdGUtPm1fdGltZVRvUmVzdG9yZSA9IGN1cnJlbnRU
aW1lKCk7Ci0gICAgbV9wcml2YXRlLT5tX3JhdGVUb1Jlc3RvcmUgPSByYXRlKCk7Ci0gICAgbG9h
ZChtX3ByaXZhdGUtPm1fY3VycmVudFVSTCwgcHJlc2VydmVzUGl0Y2gpOwotfQotCi11bnNpZ25l
ZCBRVE1vdmllV2luOjpkYXRhU2l6ZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3ByaXZhdGUtPm1f
bW92aWUpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBHZXRNb3ZpZURhdGFTaXplKG1f
cHJpdmF0ZS0+bV9tb3ZpZSwgMCwgR2V0TW92aWVEdXJhdGlvbihtX3ByaXZhdGUtPm1fbW92aWUp
KTsKLX0KLQotZmxvYXQgUVRNb3ZpZVdpbjo6bWF4VGltZUxvYWRlZCgpIGNvbnN0Ci17Ci0gICAg
aWYgKCFtX3ByaXZhdGUtPm1fbW92aWUpCi0gICAgICAgIHJldHVybiAwOwotICAgIFRpbWVWYWx1
ZSB2YWw7Ci0gICAgR2V0TWF4TG9hZGVkVGltZUluTW92aWUobV9wcml2YXRlLT5tX21vdmllLCAm
dmFsKTsKLSAgICBUaW1lU2NhbGUgc2NhbGUgPSBHZXRNb3ZpZVRpbWVTY2FsZShtX3ByaXZhdGUt
Pm1fbW92aWUpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4odmFsKSAvIHNjYWxlOwot
fQotCi1sb25nIFFUTW92aWVXaW46OmxvYWRTdGF0ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
cHJpdmF0ZS0+bV9sb2FkU3RhdGU7Ci19Ci0KLXZvaWQgUVRNb3ZpZVdpbjo6Z2V0TmF0dXJhbFNp
emUoaW50JiB3aWR0aCwgaW50JiBoZWlnaHQpCi17Ci0gICAgUmVjdCByZWN0ID0geyAwLCB9Owot
Ci0gICAgaWYgKG1fcHJpdmF0ZS0+bV9tb3ZpZSkKLSAgICAgICAgR2V0TW92aWVOYXR1cmFsQm91
bmRzUmVjdChtX3ByaXZhdGUtPm1fbW92aWUsICZyZWN0KTsKLSAgICB3aWR0aCA9IChyZWN0LnJp
Z2h0IC0gcmVjdC5sZWZ0KSAqIG1fcHJpdmF0ZS0+bV93aWR0aFNjYWxlRmFjdG9yOwotICAgIGhl
aWdodCA9IChyZWN0LmJvdHRvbSAtIHJlY3QudG9wKSAqIG1fcHJpdmF0ZS0+bV9oZWlnaHRTY2Fs
ZUZhY3RvcjsKLX0KLQogdm9pZCBRVE1vdmllV2luOjpzZXRTaXplKGludCB3aWR0aCwgaW50IGhl
aWdodCkKIHsKICAgICBtX3ByaXZhdGUtPnNldFNpemUod2lkdGgsIGhlaWdodCk7Ci0gICAgdXBk
YXRlVGFza1RpbWVyKDApOworICAgIFFUTW92aWVUYXNrOjpzaGFyZWRUYXNrKCktPnVwZGF0ZVRh
c2tUaW1lcigpOwogfQogCiB2b2lkIFFUTW92aWVXaW46OnNldFZpc2libGUoYm9vbCBiKQpAQCAt
NjU2LDQ0OCArMzkxLDE2IEBADQogICAgICAgICAgMCwgMCwgbV9wcml2YXRlLT5tX3dpZHRoLCBt
X3ByaXZhdGUtPm1faGVpZ2h0LCBibGVuZEZ1bmN0aW9uKTsKIH0KIAotdm9pZCBRVE1vdmllV2lu
Ojpsb2FkKGNvbnN0IFVDaGFyKiB1cmwsIGludCBsZW4sIGJvb2wgcHJlc2VydmVzUGl0Y2gpCi17
Ci0gICAgQ0ZTdHJpbmdSZWYgdXJsU3RyaW5nUmVmID0gQ0ZTdHJpbmdDcmVhdGVXaXRoQ2hhcmFj
dGVycyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCByZWludGVycHJldF9jYXN0PGNvbnN0IFVuaUNoYXIq
Pih1cmwpLCBsZW4pOwotICAgIENGVVJMUmVmIGNmVVJMID0gQ0ZVUkxDcmVhdGVXaXRoU3RyaW5n
KGtDRkFsbG9jYXRvckRlZmF1bHQsIHVybFN0cmluZ1JlZiwgMCk7Ci0KLSAgICBsb2FkKGNmVVJM
LCBwcmVzZXJ2ZXNQaXRjaCk7Ci0KLSAgICBDRlJlbGVhc2UoY2ZVUkwpOwotICAgIENGUmVsZWFz
ZSh1cmxTdHJpbmdSZWYpOwotfQotCi12b2lkIFFUTW92aWVXaW46OmxvYWQoQ0ZVUkxSZWYgdXJs
LCBib29sIHByZXNlcnZlc1BpdGNoKQotewotICAgIGlmICghdXJsKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAobV9wcml2YXRlLT5tX21vdmllKSB7Ci0gICAgICAgIG1fcHJpdmF0ZS0+ZW5k
VGFzaygpOwotICAgICAgICBpZiAobV9wcml2YXRlLT5tX2dXb3JsZCkKLSAgICAgICAgICAgIG1f
cHJpdmF0ZS0+ZGVsZXRlR1dvcmxkKCk7Ci0gICAgICAgIGlmIChtX3ByaXZhdGUtPm1fbW92aWVD
b250cm9sbGVyKQotICAgICAgICAgICAgRGlzcG9zZU1vdmllQ29udHJvbGxlcihtX3ByaXZhdGUt
Pm1fbW92aWVDb250cm9sbGVyKTsKLSAgICAgICAgbV9wcml2YXRlLT5tX21vdmllQ29udHJvbGxl
ciA9IDA7Ci0gICAgICAgIERpc3Bvc2VNb3ZpZShtX3ByaXZhdGUtPm1fbW92aWUpOwotICAgICAg
ICBtX3ByaXZhdGUtPm1fbW92aWUgPSAwOwotICAgICAgICBtX3ByaXZhdGUtPm1fbG9hZFN0YXRl
ID0gMDsKLSAgICB9ICAKLQotICAgIC8vIERlZmluZSBhIHByb3BlcnR5IGFycmF5IGZvciBOZXdN
b3ZpZUZyb21Qcm9wZXJ0aWVzLiA4IHNob3VsZCBiZSBlbm91Z2ggZm9yIG91ciBuZWVkcy4gCi0g
ICAgUVROZXdNb3ZpZVByb3BlcnR5RWxlbWVudCBtb3ZpZVByb3BzWzhdOyAKLSAgICBJdGVtQ291
bnQgbW92aWVQcm9wQ291bnQgPSAwOyAKLQotICAgIGJvb2wgYm9vbFRydWUgPSB0cnVlOwotICAg
IAotICAgIC8vIERpc2FibGUgc3RyZWFtaW5nIHN1cHBvcnQgZm9yIG5vdy4gCi0gICAgQ0ZTdHJp
bmdSZWYgc2NoZW1lID0gQ0ZVUkxDb3B5U2NoZW1lKHVybCk7Ci0gICAgYm9vbCBpc1JUU1AgPSBD
RlN0cmluZ0hhc1ByZWZpeChzY2hlbWUsIENGU1RSKCJydHNwOiIpKTsKLSAgICBDRlJlbGVhc2Uo
c2NoZW1lKTsKLQotICAgIGlmIChpc1JUU1ApIHsKLSAgICAgICAgbV9wcml2YXRlLT5tX2xvYWRF
cnJvciA9IG5vTW92aWVGb3VuZDsKLSAgICAgICAgZ290byBlbmQ7Ci0gICAgfQotCi0gICAgaWYg
KG1fcHJpdmF0ZS0+bV9jdXJyZW50VVJMKSB7Ci0gICAgICAgIGlmIChtX3ByaXZhdGUtPm1fY3Vy
cmVudFVSTCAhPSB1cmwpIHsKLSAgICAgICAgICAgIENGUmVsZWFzZShtX3ByaXZhdGUtPm1fY3Vy
cmVudFVSTCk7Ci0gICAgICAgICAgICBtX3ByaXZhdGUtPm1fY3VycmVudFVSTCA9IHVybDsKLSAg
ICAgICAgICAgIENGUmV0YWluKHVybCk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAg
ICBtX3ByaXZhdGUtPm1fY3VycmVudFVSTCA9IHVybDsKLSAgICAgICAgQ0ZSZXRhaW4odXJsKTsK
LSAgICB9Ci0KLSAgICAvLyBBZGQgdGhlIG1vdmllIGRhdGEgbG9jYXRpb24gdG8gdGhlIHByb3Bl
cnR5IGFycmF5IAotICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BDbGFzcyA9IGtR
VFByb3BlcnR5Q2xhc3NfRGF0YUxvY2F0aW9uOyAKLSAgICBtb3ZpZVByb3BzW21vdmllUHJvcENv
dW50XS5wcm9wSUQgPSBrUVREYXRhTG9jYXRpb25Qcm9wZXJ0eUlEX0NGVVJMOyAKLSAgICBtb3Zp
ZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wVmFsdWVTaXplID0gc2l6ZW9mKG1fcHJpdmF0ZS0+
bV9jdXJyZW50VVJMKTsgCi0gICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcFZhbHVl
QWRkcmVzcyA9ICYobV9wcml2YXRlLT5tX2N1cnJlbnRVUkwpOyAKLSAgICBtb3ZpZVByb3BzW21v
dmllUHJvcENvdW50XS5wcm9wU3RhdHVzID0gMDsgCi0gICAgbW92aWVQcm9wQ291bnQrKzsgCi0K
LSAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wQ2xhc3MgPSBrUVRQcm9wZXJ0eUNs
YXNzX01vdmllSW5zdGFudGlhdGlvbjsgCi0gICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0u
cHJvcElEID0ga1FUTW92aWVJbnN0YW50aWF0aW9uUHJvcGVydHlJRF9Eb250QXNrVW5yZXNvbHZl
ZERhdGFSZWZzOyAKLSAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wVmFsdWVTaXpl
ID0gc2l6ZW9mKGJvb2xUcnVlKTsgCi0gICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJv
cFZhbHVlQWRkcmVzcyA9ICZib29sVHJ1ZTsgCi0gICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3Vu
dF0ucHJvcFN0YXR1cyA9IDA7IAotICAgIG1vdmllUHJvcENvdW50Kys7IAotCi0gICAgbW92aWVQ
cm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcENsYXNzID0ga1FUUHJvcGVydHlDbGFzc19Nb3ZpZUlu
c3RhbnRpYXRpb247IAotICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BJRCA9IGtR
VE1vdmllSW5zdGFudGlhdGlvblByb3BlcnR5SURfQXN5bmNPSzsgCi0gICAgbW92aWVQcm9wc1tt
b3ZpZVByb3BDb3VudF0ucHJvcFZhbHVlU2l6ZSA9IHNpemVvZihib29sVHJ1ZSk7IAotICAgIG1v
dmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BWYWx1ZUFkZHJlc3MgPSAmYm9vbFRydWU7IAot
ICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BTdGF0dXMgPSAwOyAKLSAgICBtb3Zp
ZVByb3BDb3VudCsrOyAKLQotICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BDbGFz
cyA9IGtRVFByb3BlcnR5Q2xhc3NfTmV3TW92aWVQcm9wZXJ0eTsgCi0gICAgbW92aWVQcm9wc1tt
b3ZpZVByb3BDb3VudF0ucHJvcElEID0ga1FUTmV3TW92aWVQcm9wZXJ0eUlEX0FjdGl2ZTsgCi0g
ICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcFZhbHVlU2l6ZSA9IHNpemVvZihib29s
VHJ1ZSk7IAotICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BWYWx1ZUFkZHJlc3Mg
PSAmYm9vbFRydWU7IAotICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BTdGF0dXMg
PSAwOyAKLSAgICBtb3ZpZVByb3BDb3VudCsrOyAKLQotICAgIG1vdmllUHJvcHNbbW92aWVQcm9w
Q291bnRdLnByb3BDbGFzcyA9IGtRVFByb3BlcnR5Q2xhc3NfTmV3TW92aWVQcm9wZXJ0eTsgCi0g
ICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcElEID0ga1FUTmV3TW92aWVQcm9wZXJ0
eUlEX0RvbnRJbnRlcmFjdFdpdGhVc2VyOyAKLSAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50
XS5wcm9wVmFsdWVTaXplID0gc2l6ZW9mKGJvb2xUcnVlKTsgCi0gICAgbW92aWVQcm9wc1ttb3Zp
ZVByb3BDb3VudF0ucHJvcFZhbHVlQWRkcmVzcyA9ICZib29sVHJ1ZTsgCi0gICAgbW92aWVQcm9w
c1ttb3ZpZVByb3BDb3VudF0ucHJvcFN0YXR1cyA9IDA7IAotICAgIG1vdmllUHJvcENvdW50Kys7
IAotCi0gICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcENsYXNzID0ga1FUUHJvcGVy
dHlDbGFzc19Nb3ZpZUluc3RhbnRpYXRpb247Ci0gICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3Vu
dF0ucHJvcElEID0gJyF1cmwnOwotICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BW
YWx1ZVNpemUgPSBzaXplb2YoYm9vbFRydWUpOyAKLSAgICBtb3ZpZVByb3BzW21vdmllUHJvcENv
dW50XS5wcm9wVmFsdWVBZGRyZXNzID0gJmJvb2xUcnVlOyAKLSAgICBtb3ZpZVByb3BzW21vdmll
UHJvcENvdW50XS5wcm9wU3RhdHVzID0gMDsgCi0gICAgbW92aWVQcm9wQ291bnQrKzsgCi0KLSAg
ICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wQ2xhc3MgPSBrUVRQcm9wZXJ0eUNsYXNz
X01vdmllSW5zdGFudGlhdGlvbjsgCi0gICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJv
cElEID0gJ3NpdGUnOwotICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BWYWx1ZVNp
emUgPSBzaXplb2YoYm9vbFRydWUpOyAKLSAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5w
cm9wVmFsdWVBZGRyZXNzID0gJmJvb2xUcnVlOyAKLSAgICBtb3ZpZVByb3BzW21vdmllUHJvcENv
dW50XS5wcm9wU3RhdHVzID0gMDsgCi0gICAgbW92aWVQcm9wQ291bnQrKzsKLQotICAgIG1vdmll
UHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BDbGFzcyA9IGtRVFByb3BlcnR5Q2xhc3NfQXVkaW87
IAotICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BJRCA9IGtRVEF1ZGlvUHJvcGVy
dHlJRF9SYXRlQ2hhbmdlc1ByZXNlcnZlUGl0Y2g7Ci0gICAgbW92aWVQcm9wc1ttb3ZpZVByb3BD
b3VudF0ucHJvcFZhbHVlU2l6ZSA9IHNpemVvZihwcmVzZXJ2ZXNQaXRjaCk7IAotICAgIG1vdmll
UHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BWYWx1ZUFkZHJlc3MgPSAmcHJlc2VydmVzUGl0Y2g7
IAotICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BTdGF0dXMgPSAwOyAKLSAgICBt
b3ZpZVByb3BDb3VudCsrOyAKLQotICAgIEFTU0VSVChtb3ZpZVByb3BDb3VudCA8PSBzaXplb2Yo
bW92aWVQcm9wcykvc2l6ZW9mKG1vdmllUHJvcHNbMF0pKTsKLSAgICBtX3ByaXZhdGUtPm1fbG9h
ZEVycm9yID0gTmV3TW92aWVGcm9tUHJvcGVydGllcyhtb3ZpZVByb3BDb3VudCwgbW92aWVQcm9w
cywgMCwgMCwgJm1fcHJpdmF0ZS0+bV9tb3ZpZSk7Ci0KLWVuZDoKLSAgICBtX3ByaXZhdGUtPnN0
YXJ0VGFzaygpOwotICAgIC8vIGdldCB0aGUgbG9hZCBmYWlsIGNhbGxiYWNrIHF1aWNrbHkgCi0g
ICAgaWYgKG1fcHJpdmF0ZS0+bV9sb2FkRXJyb3IpCi0gICAgICAgIHVwZGF0ZVRhc2tUaW1lcigw
KTsKLSAgICBlbHNlIHsKLSAgICAgICAgT1NUeXBlIG1vZGUgPSBrUVRBcGVydHVyZU1vZGVfQ2xl
YW5BcGVydHVyZTsKLQotICAgICAgICAvLyBTZXQgdGhlIGFwZXJ0dXJlIG1vZGUgcHJvcGVydHkg
b24gYSBtb3ZpZSB0byBzaWduYWwgdGhhdCB3ZSB3YW50IGFzcGVjdCByYXRpbwotICAgICAgICAv
LyBhbmQgY2xlYW4gYXBlcnR1cmUgZGltZW5zaW9ucy4gRG9uJ3Qgd29ycnkgYWJvdXQgZXJyb3Jz
LCB3ZSBjYW4ndCBkbyBhbnl0aGluZyBpZgotICAgICAgICAvLyB0aGUgaW5zdGFsbGVkIHZlcnNp
b24gb2YgUVQgZG9lc24ndCBzdXBwb3J0IGl0IGFuZCBpdCBpc24ndCBzZXJpb3VzIGVub3VnaCB0
byAKLSAgICAgICAgLy8gd2FycmFudCBmYWlsaW5nLgotICAgICAgICBRVFNldE1vdmllUHJvcGVy
dHkobV9wcml2YXRlLT5tX21vdmllLCBrUVRQcm9wZXJ0eUNsYXNzX1Zpc3VhbCwga1FUVmlzdWFs
UHJvcGVydHlJRF9BcGVydHVyZU1vZGUsIHNpemVvZihtb2RlKSwgJm1vZGUpOwotICAgICAgICBt
X3ByaXZhdGUtPnJlZ2lzdGVyRHJhd2luZ0NhbGxiYWNrKCk7Ci0gICAgfQotfQotCi12b2lkIFFU
TW92aWVXaW46OmRpc2FibGVVbnN1cHBvcnRlZFRyYWNrcyh1bnNpZ25lZCYgZW5hYmxlZFRyYWNr
Q291bnQsIHVuc2lnbmVkJiB0b3RhbFRyYWNrQ291bnQpCi17Ci0gICAgaWYgKCFtX3ByaXZhdGUt
Pm1fbW92aWUpIHsKLSAgICAgICAgdG90YWxUcmFja0NvdW50ID0gMDsKLSAgICAgICAgZW5hYmxl
ZFRyYWNrQ291bnQgPSAwOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc3RhdGljIEhh
c2hTZXQ8T1NUeXBlPiogYWxsb3dlZFRyYWNrVHlwZXMgPSAwOwotICAgIGlmICghYWxsb3dlZFRy
YWNrVHlwZXMpIHsKLSAgICAgICAgYWxsb3dlZFRyYWNrVHlwZXMgPSBuZXcgSGFzaFNldDxPU1R5
cGU+OwotICAgICAgICBhbGxvd2VkVHJhY2tUeXBlcy0+YWRkKFZpZGVvTWVkaWFUeXBlKTsKLSAg
ICAgICAgYWxsb3dlZFRyYWNrVHlwZXMtPmFkZChTb3VuZE1lZGlhVHlwZSk7Ci0gICAgICAgIGFs
bG93ZWRUcmFja1R5cGVzLT5hZGQoVGV4dE1lZGlhVHlwZSk7Ci0gICAgICAgIGFsbG93ZWRUcmFj
a1R5cGVzLT5hZGQoQmFzZU1lZGlhVHlwZSk7Ci0gICAgICAgIGFsbG93ZWRUcmFja1R5cGVzLT5h
ZGQoY2xvc2VkQ2FwdGlvblRyYWNrVHlwZSk7Ci0gICAgICAgIGFsbG93ZWRUcmFja1R5cGVzLT5h
ZGQoc3ViVGl0bGVUcmFja1R5cGUpOwotICAgICAgICBhbGxvd2VkVHJhY2tUeXBlcy0+YWRkKG1w
ZWc0T2JqZWN0RGVzY3JpcHRpb25UcmFja1R5cGUpOwotICAgICAgICBhbGxvd2VkVHJhY2tUeXBl
cy0+YWRkKG1wZWc0U2NlbmVEZXNjcmlwdGlvblRyYWNrVHlwZSk7Ci0gICAgICAgIGFsbG93ZWRU
cmFja1R5cGVzLT5hZGQoVGltZUNvZGVNZWRpYVR5cGUpOwotICAgICAgICBhbGxvd2VkVHJhY2tU
eXBlcy0+YWRkKFRpbWVDb2RlNjRNZWRpYVR5cGUpOwotICAgIH0KLQotICAgIGxvbmcgdHJhY2tD
b3VudCA9IEdldE1vdmllVHJhY2tDb3VudChtX3ByaXZhdGUtPm1fbW92aWUpOwotICAgIGVuYWJs
ZWRUcmFja0NvdW50ID0gdHJhY2tDb3VudDsKLSAgICB0b3RhbFRyYWNrQ291bnQgPSB0cmFja0Nv
dW50OwotCi0gICAgLy8gVHJhY2sgaW5kZXhlcyBhcmUgMS1iYXNlZC4geXVjay4gVGhlc2UgdGhp
bmdzIG11c3QgZGVzY2VuZCBmcm9tIG9sZC0KLSAgICAvLyBzY2hvb2wgbWFjIHJlc291cmNlcyBv
ciBzb21ldGhpbmcuCi0gICAgZm9yIChsb25nIHRyYWNrSW5kZXggPSAxOyB0cmFja0luZGV4IDw9
IHRyYWNrQ291bnQ7IHRyYWNrSW5kZXgrKykgewotICAgICAgICAvLyBHcmFiIHRoZSB0cmFjayBh
dCB0aGUgY3VycmVudCBpbmRleC4gSWYgdGhlcmUgaXNuJ3Qgb25lIHRoZXJlLCB0aGVuCi0gICAg
ICAgIC8vIHdlIGNhbiBtb3ZlIG9udG8gdGhlIG5leHQgb25lLgotICAgICAgICBUcmFjayBjdXJy
ZW50VHJhY2sgPSBHZXRNb3ZpZUluZFRyYWNrKG1fcHJpdmF0ZS0+bV9tb3ZpZSwgdHJhY2tJbmRl
eCk7Ci0gICAgICAgIGlmICghY3VycmVudFRyYWNrKQotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIAotICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIHRyYWNrIGlzIGRpc2FibGVk
IGFscmVhZHksIHdlIHNob3VsZCBtb3ZlIGFsb25nLgotICAgICAgICAvLyBXZSBkb24ndCBuZWVk
IHRvIHJlLWRpc2FibGUgaXQuCi0gICAgICAgIGlmICghR2V0VHJhY2tFbmFibGVkKGN1cnJlbnRU
cmFjaykpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAvLyBHcmFiIHRoZSB0cmFj
aydzIG1lZGlhLiBXZSdyZSBnb2luZyB0byBjaGVjayB0byBzZWUgaWYgd2UgbmVlZCB0bwotICAg
ICAgICAvLyBkaXNhYmxlIHRoZSB0cmFja3MuIFRoZXkgY291bGQgYmUgdW5zdXBwb3J0ZWQuCi0g
ICAgICAgIE1lZGlhIHRyYWNrTWVkaWEgPSBHZXRUcmFja01lZGlhKGN1cnJlbnRUcmFjayk7Ci0g
ICAgICAgIGlmICghdHJhY2tNZWRpYSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAK
LSAgICAgICAgLy8gR3JhYiB0aGUgbWVkaWEgdHlwZSBmb3IgdGhpcyB0cmFjay4gTWFrZSBzdXJl
IHRoYXQgd2UgZG9uJ3QKLSAgICAgICAgLy8gZ2V0IGFuIGVycm9yIGluIGRvaW5nIHNvLiBJZiB3
ZSBkbywgdGhlbiBzb21ldGhpbmcgcmVhbGx5IGZ1bmt5IGlzCi0gICAgICAgIC8vIHdyb25nLgot
ICAgICAgICBPU1R5cGUgbWVkaWFUeXBlOwotICAgICAgICBHZXRNZWRpYUhhbmRsZXJEZXNjcmlw
dGlvbih0cmFja01lZGlhLCAmbWVkaWFUeXBlLCBuaWwsIG5pbCk7Ci0gICAgICAgIE9TRXJyIG1l
ZGlhRXJyID0gR2V0TW92aWVzRXJyb3IoKTsgICAgCi0gICAgICAgIGlmIChtZWRpYUVyciAhPSBu
b0VycikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAKLSAgICAgICAgaWYgKCFhbGxv
d2VkVHJhY2tUeXBlcy0+Y29udGFpbnMobWVkaWFUeXBlKSkgewotCi0gICAgICAgICAgICAvLyBE
aWZmZXJlbnQgbXBlZyB2YXJpYW50cyBpbXBvcnQgYXMgZGlmZmVyZW50IHRyYWNrIHR5cGVzIHNv
IGNoZWNrIGZvciB0aGUgIm1wZWcgCi0gICAgICAgICAgICAvLyBjaGFyYWN0ZXJpc3RpYyIgaW5z
dGVhZCBvZiBoYXJkIGNvZGluZyB0aGUgKGN1cnJlbnQpIGxpc3Qgb2YgbXBlZyBtZWRpYSB0eXBl
cy4KLSAgICAgICAgICAgIGlmIChHZXRNb3ZpZUluZFRyYWNrVHlwZShtX3ByaXZhdGUtPm1fbW92
aWUsIDEsICdtcGVnJywgbW92aWVUcmFja0NoYXJhY3RlcmlzdGljIHwgbW92aWVUcmFja0VuYWJs
ZWRPbmx5KSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgU2V0VHJh
Y2tFbmFibGVkKGN1cnJlbnRUcmFjaywgZmFsc2UpOwotICAgICAgICAgICAgLS1lbmFibGVkVHJh
Y2tDb3VudDsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gR3JhYiB0aGUgdHJhY2sg
cmVmZXJlbmNlIGNvdW50IGZvciBjaGFwdGVycy4gVGhpcyB3aWxsIHRlbGwgdXMgaWYgaXQKLSAg
ICAgICAgLy8gaGFzIGNoYXB0ZXIgdHJhY2tzIGluIGl0LiBJZiB0aGVyZSBhcmVuJ3QgYW55IHJl
ZmVyZW5jZXMsIHRoZW4gd2UKLSAgICAgICAgLy8gY2FuIG1vdmUgb24gdGhlIG5leHQgdHJhY2su
Ci0gICAgICAgIGxvbmcgcmVmZXJlbmNlQ291bnQgPSBHZXRUcmFja1JlZmVyZW5jZUNvdW50KGN1
cnJlbnRUcmFjaywga1RyYWNrUmVmZXJlbmNlQ2hhcHRlckxpc3QpOwotICAgICAgICBpZiAocmVm
ZXJlbmNlQ291bnQgPD0gMCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAKLSAgICAg
ICAgbG9uZyByZWZlcmVuY2VJbmRleCA9IDA7ICAgICAgICAKLSAgICAgICAgd2hpbGUgKDEpIHsK
LSAgICAgICAgICAgIC8vIElmIHdlIGdldCBub3RoaW5nIGhlcmUsIHdlJ3ZlIG92ZXJzdGVwcGVk
IG91ciBib3VuZHMgYW5kIGNhbiBzdG9wCi0gICAgICAgICAgICAvLyBsb29raW5nLiBDaGFwdGVy
IGluZGljZXMgaGVyZSBhcmUgMS1iYXNlZCBhcyB3ZWxsIC0gaGVuY2UsIHRoZQotICAgICAgICAg
ICAgLy8gcHJlLWluY3JlbWVudC4KLSAgICAgICAgICAgIHJlZmVyZW5jZUluZGV4Kys7Ci0gICAg
ICAgICAgICBUcmFjayBjaGFwdGVyVHJhY2sgPSBHZXRUcmFja1JlZmVyZW5jZShjdXJyZW50VHJh
Y2ssIGtUcmFja1JlZmVyZW5jZUNoYXB0ZXJMaXN0LCByZWZlcmVuY2VJbmRleCk7Ci0gICAgICAg
ICAgICBpZiAoIWNoYXB0ZXJUcmFjaykKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgLy8gVHJ5IHRvIGdyYWIgdGhlIG1lZGlhIGZvciB0aGUgdHJhY2su
Ci0gICAgICAgICAgICBNZWRpYSBjaGFwdGVyTWVkaWEgPSBHZXRUcmFja01lZGlhKGNoYXB0ZXJU
cmFjayk7Ci0gICAgICAgICAgICBpZiAoIWNoYXB0ZXJNZWRpYSkKLSAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgCi0gICAgICAgICAgICAvLyBHcmFiIHRoZSBtZWRpYSB0eXBlIGZv
ciB0aGlzIHRyYWNrLiBNYWtlIHN1cmUgdGhhdCB3ZSBkb24ndAotICAgICAgICAgICAgLy8gZ2V0
IGFuIGVycm9yIGluIGRvaW5nIHNvLiBJZiB3ZSBkbywgdGhlbiBzb21ldGhpbmcgcmVhbGx5Ci0g
ICAgICAgICAgICAvLyBmdW5reSBpcyB3cm9uZy4KLSAgICAgICAgICAgIE9TVHlwZSBtZWRpYVR5
cGU7Ci0gICAgICAgICAgICBHZXRNZWRpYUhhbmRsZXJEZXNjcmlwdGlvbihjaGFwdGVyTWVkaWEs
ICZtZWRpYVR5cGUsIG5pbCwgbmlsKTsKLSAgICAgICAgICAgIE9TRXJyIG1lZGlhRXJyID0gR2V0
TW92aWVzRXJyb3IoKTsKLSAgICAgICAgICAgIGlmIChtZWRpYUVyciAhPSBub0VycikKLSAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gQ2hlY2sg
dG8gc2VlIGlmIHRoZSB0cmFjayBpcyBhIHZpZGVvIHRyYWNrLiBXZSBkb24ndCBjYXJlIGFib3V0
Ci0gICAgICAgICAgICAvLyBvdGhlciBub24tdmlkZW8gdHJhY2tzLgotICAgICAgICAgICAgaWYg
KG1lZGlhVHlwZSAhPSBWaWRlb01lZGlhVHlwZSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSB0cmFjayBp
cyBhbHJlYWR5IGRpc2FibGVkLiBJZiBpdCBpcywgd2UKLSAgICAgICAgICAgIC8vIHNob3VsZCBt
b3ZlIGFsb25nLgotICAgICAgICAgICAgaWYgKCFHZXRUcmFja0VuYWJsZWQoY2hhcHRlclRyYWNr
KSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
Ly8gRGlzYWJsZWQgdGhlIGV2aWwsIGV2aWwgdHJhY2suCi0gICAgICAgICAgICBTZXRUcmFja0Vu
YWJsZWQoY2hhcHRlclRyYWNrLCBmYWxzZSk7Ci0gICAgICAgICAgICAtLWVuYWJsZWRUcmFja0Nv
dW50OwotICAgICAgICB9Ci0gICAgfQotfQotCiB2b2lkIFFUTW92aWVXaW46OnNldERpc2FibGVk
KGJvb2wgYikKIHsKLSAgICBtX2Rpc2FibGVkID0gYjsKKyAgICBtX3ByaXZhdGUtPm1fZGlzYWJs
ZWQgPSBiOwogfQogCi0KLWJvb2wgUVRNb3ZpZVdpbjo6aGFzVmlkZW8oKSBjb25zdAorYm9vbCBR
VE1vdmllV2luOjppc0Rpc2FibGVkKCkgY29uc3QKIHsKLSAgICBpZiAoIW1fcHJpdmF0ZS0+bV9t
b3ZpZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiAoR2V0TW92aWVJbmRUcmFj
a1R5cGUobV9wcml2YXRlLT5tX21vdmllLCAxLCBWaXN1YWxNZWRpYUNoYXJhY3RlcmlzdGljLCBt
b3ZpZVRyYWNrQ2hhcmFjdGVyaXN0aWMgfCBtb3ZpZVRyYWNrRW5hYmxlZE9ubHkpKTsKKyAgICBy
ZXR1cm4gbV9wcml2YXRlLT5tX2Rpc2FibGVkOwogfQogCi1ib29sIFFUTW92aWVXaW46Omhhc0F1
ZGlvKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fcHJpdmF0ZS0+bV9tb3ZpZSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIHJldHVybiAoR2V0TW92aWVJbmRUcmFja1R5cGUobV9wcml2YXRlLT5t
X21vdmllLCAxLCBBdWRpb01lZGlhQ2hhcmFjdGVyaXN0aWMsIG1vdmllVHJhY2tDaGFyYWN0ZXJp
c3RpYyB8IG1vdmllVHJhY2tFbmFibGVkT25seSkpOwotfQotCi0KLWJvb2wgUVRNb3ZpZVdpbjo6
aGFzQ2xvc2VkQ2FwdGlvbnMoKSBjb25zdCAKLXsKLSAgICBpZiAoIW1fcHJpdmF0ZS0+bV9tb3Zp
ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBHZXRNb3ZpZUluZFRyYWNrVHlw
ZShtX3ByaXZhdGUtPm1fbW92aWUsIDEsIGNsb3NlZENhcHRpb25UcmFja1R5cGUsIG1vdmllVHJh
Y2tNZWRpYVR5cGUpOwotfQotCi12b2lkIFFUTW92aWVXaW46OnNldENsb3NlZENhcHRpb25zVmlz
aWJsZShib29sIHZpc2libGUpCi17Ci0gICAgaWYgKCFtX3ByaXZhdGUtPm1fbW92aWUpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIFRyYWNrIGNjVHJhY2sgPSBHZXRNb3ZpZUluZFRyYWNrVHlwZSht
X3ByaXZhdGUtPm1fbW92aWUsIDEsIGNsb3NlZENhcHRpb25UcmFja1R5cGUsIG1vdmllVHJhY2tN
ZWRpYVR5cGUpOwotICAgIGlmICghY2NUcmFjaykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQm9v
bGVhbiBkb0Rpc3BsYXkgPSB2aXNpYmxlOwotICAgIFFUU2V0VHJhY2tQcm9wZXJ0eShjY1RyYWNr
LCBjbG9zZWRDYXB0aW9uVHJhY2tUeXBlLCBjbG9zZWRDYXB0aW9uRGlzcGxheVByb3BlcnR5SUQs
IHNpemVvZihkb0Rpc3BsYXkpLCAmZG9EaXNwbGF5KTsKLX0KLQotcGFzY2FsIE9TRXJyIG1vdmll
RHJhd2luZ0NvbXBsZXRlUHJvYyhNb3ZpZSBtb3ZpZSwgbG9uZyBkYXRhKQotewotICAgIFVwcFBh
cmFtIHBhcmFtOwotICAgIHBhcmFtLmxvbmdWYWx1ZSA9IGRhdGE7Ci0gICAgUVRNb3ZpZVdpblBy
aXZhdGUqIG1wID0gc3RhdGljX2Nhc3Q8UVRNb3ZpZVdpblByaXZhdGUqPihwYXJhbS5wdHIpOwot
ICAgIGlmIChtcCkKLSAgICAgICAgbXAtPmRyYXdpbmdDb21wbGV0ZSgpOwotICAgIHJldHVybiAw
OwotfQotCi1zdGF0aWMgdm9pZCBpbml0aWFsaXplU3VwcG9ydGVkVHlwZXMoKSAKLXsKLSAgICBp
ZiAoZ1N1cHBvcnRlZFR5cGVzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBnU3VwcG9ydGVkVHlw
ZXMgPSBuZXcgVmVjdG9yPENGU3RyaW5nUmVmPjsKLSAgICBpZiAocXVpY2tUaW1lVmVyc2lvbiA8
IG1pbmltdW1RdWlja1RpbWVWZXJzaW9uKSB7Ci0gICAgICAgIExPR19FUlJPUigiUXVpY2tUaW1l
IHZlcnNpb24gJXggZGV0ZWN0ZWQsIGF0IGxlYXN0ICV4IHJlcXVpcmVkLiBSZXR1cm5pbmcgZW1w
dHkgbGlzdCBvZiBzdXBwb3J0ZWQgbWVkaWEgTUlNRSB0eXBlcy4iLCBxdWlja1RpbWVWZXJzaW9u
LCBtaW5pbXVtUXVpY2tUaW1lVmVyc2lvbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICAvLyBRdWlja1RpbWUgZG9lc24ndCBoYXZlIGFuIGltcG9ydGVyIGZvciB2aWRlby9xdWlja3Rp
bWUuIEFkZCBpdCBtYW51YWxseS4KLSAgICBnU3VwcG9ydGVkVHlwZXMtPmFwcGVuZChDRlNUUigi
dmlkZW8vcXVpY2t0aW1lIikpOwotCi0gICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IDI7
IGluZGV4KyspIHsKLSAgICAgICAgQ29tcG9uZW50RGVzY3JpcHRpb24gZmluZENEOwotCi0gICAg
ICAgIC8vIGxvb2sgYXQgYWxsIG1vdmllIGltcG9ydGVycyB0aGF0IGNhbiBpbXBvcnQgaW4gcGxh
Y2UgYW5kIGFyZSBpbnN0YWxsZWQuIAotICAgICAgICBmaW5kQ0QuY29tcG9uZW50VHlwZSA9IE1v
dmllSW1wb3J0VHlwZTsKLSAgICAgICAgZmluZENELmNvbXBvbmVudFN1YlR5cGUgPSAwOwotICAg
ICAgICBmaW5kQ0QuY29tcG9uZW50TWFudWZhY3R1cmVyID0gMDsKLSAgICAgICAgZmluZENELmNv
bXBvbmVudEZsYWdzTWFzayA9IGNtcElzTWlzc2luZyB8IG1vdmllSW1wb3J0U3ViVHlwZUlzRmls
ZUV4dGVuc2lvbiB8IGNhbk1vdmllSW1wb3J0SW5QbGFjZSB8IGRvbnRBdXRvRmlsZU1vdmllSW1w
b3J0OwotCi0gICAgICAgIC8vIGxvb2sgYXQgdGhvc2UgcmVnaXN0ZXJlZCBieSBIRlMgZmlsZSB0
eXBlcyB0aGUgZmlyc3QgdGltZSB0aHJvdWdoLCBieSBmaWxlIGV4dGVuc2lvbiB0aGUgc2Vjb25k
IHRpbWUKLSAgICAgICAgZmluZENELmNvbXBvbmVudEZsYWdzID0gY2FuTW92aWVJbXBvcnRJblBs
YWNlIHwgKGluZGV4ID8gbW92aWVJbXBvcnRTdWJUeXBlSXNGaWxlRXh0ZW5zaW9uIDogMCk7Ci0g
ICAgICAgIAotICAgICAgICBsb25nIGNvbXBvbmVudENvdW50ID0gQ291bnRDb21wb25lbnRzKCZm
aW5kQ0QpOwotICAgICAgICBpZiAoIWNvbXBvbmVudENvdW50KQotICAgICAgICAgICAgY29udGlu
dWU7Ci0KLSAgICAgICAgQ29tcG9uZW50IGNvbXAgPSAwOwotICAgICAgICB3aGlsZSAoY29tcCA9
IEZpbmROZXh0Q29tcG9uZW50KGNvbXAsICZmaW5kQ0QpKSB7Ci0gICAgICAgICAgICAvLyBEb2Vz
IHRoaXMgY29tcG9uZW50IGhhdmUgYSBNSU1FIHR5cGUgY29udGFpbmVyPwotICAgICAgICAgICAg
Q29tcG9uZW50RGVzY3JpcHRpb24gaW5mb0NEOwotICAgICAgICAgICAgT1NFcnIgZXJyID0gR2V0
Q29tcG9uZW50SW5mbyhjb21wLCAmaW5mb0NELCBuaWwgLypuYW1lKi8sIG5pbCAvKmluZm8qLywg
bmlsIC8qaWNvbiovKTsKLSAgICAgICAgICAgIGlmIChlcnIpCi0gICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICBpZiAoIShpbmZvQ0QuY29tcG9uZW50RmxhZ3MgJiBoYXNNb3Zp
ZUltcG9ydE1JTUVMaXN0KSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
IFFUQXRvbUNvbnRhaW5lciBtaW1lTGlzdCA9IDA7Ci0gICAgICAgICAgICBlcnIgPSBNb3ZpZUlt
cG9ydEdldE1JTUVUeXBlTGlzdCgoQ29tcG9uZW50SW5zdGFuY2UpY29tcCwgJm1pbWVMaXN0KTsK
LSAgICAgICAgICAgIGlmIChlcnIgfHwgIW1pbWVMaXN0KQotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotCi0gICAgICAgICAgICAvLyBHcmFiIGV2ZXJ5IHR5cGUgZnJvbSB0aGUgY29udGFpbmVy
LgotICAgICAgICAgICAgUVRMb2NrQ29udGFpbmVyKG1pbWVMaXN0KTsKLSAgICAgICAgICAgIGlu
dCB0eXBlQ291bnQgPSBRVENvdW50Q2hpbGRyZW5PZlR5cGUobWltZUxpc3QsIGtQYXJlbnRBdG9t
SXNDb250YWluZXIsIGtNaW1lSW5mb01pbWVUeXBlVGFnKTsKLSAgICAgICAgICAgIGZvciAoaW50
IHR5cGVJbmRleCA9IDE7IHR5cGVJbmRleCA8PSB0eXBlQ291bnQ7IHR5cGVJbmRleCsrKSB7Ci0g
ICAgICAgICAgICAgICAgUVRBdG9tIG1pbWVUYWcgPSBRVEZpbmRDaGlsZEJ5SW5kZXgobWltZUxp
c3QsIDAsIGtNaW1lSW5mb01pbWVUeXBlVGFnLCB0eXBlSW5kZXgsIDApOwotICAgICAgICAgICAg
ICAgIGlmICghbWltZVRhZykKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICAgICAgY2hhciogYXRvbURhdGE7Ci0gICAgICAgICAgICAgICAgbG9uZyB0eXBlTGVuZ3Ro
OwotICAgICAgICAgICAgICAgIGlmIChub0VyciAhPSBRVEdldEF0b21EYXRhUHRyKG1pbWVMaXN0
LCBtaW1lVGFnLCAmdHlwZUxlbmd0aCwgJmF0b21EYXRhKSkKLSAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0KLSAgICAgICAgICAgICAgICBjaGFyIHR5cGVCdWZmZXJbMjU2XTsKLSAgICAg
ICAgICAgICAgICBpZiAodHlwZUxlbmd0aCA+PSBzaXplb2YodHlwZUJ1ZmZlcikpCi0gICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIG1lbWNweSh0eXBlQnVmZmVy
LCBhdG9tRGF0YSwgdHlwZUxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgdHlwZUJ1ZmZlclt0eXBl
TGVuZ3RoXSA9IDA7Ci0KLSAgICAgICAgICAgICAgICAvLyBPbmx5IGFkZCAiYXVkaW8vLi4uIiBh
bmQgInZpZGVvLy4uLiIgdHlwZXMuCi0gICAgICAgICAgICAgICAgaWYgKHN0cm5jbXAodHlwZUJ1
ZmZlciwgImF1ZGlvLyIsIDYpICYmIHN0cm5jbXAodHlwZUJ1ZmZlciwgInZpZGVvLyIsIDYpKQot
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgICAgIENGU3RyaW5n
UmVmIGNmTWltZVR5cGUgPSBDRlN0cmluZ0NyZWF0ZVdpdGhDU3RyaW5nKDAsIHR5cGVCdWZmZXIs
IGtDRlN0cmluZ0VuY29kaW5nVVRGOCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFjZk1pbWVUeXBl
KQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgICAgIC8vIE9u
bHkgYWRkIGVhY2ggdHlwZSBvbmNlLgotICAgICAgICAgICAgICAgIGJvb2wgYWxyZWFkeUFkZGVk
ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgYWRkZWRJbmRleCA9IDA7IGFkZGVk
SW5kZXggPCBnU3VwcG9ydGVkVHlwZXMtPnNpemUoKTsgYWRkZWRJbmRleCsrKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIENGU3RyaW5nUmVmIHR5cGUgPSBnU3VwcG9ydGVkVHlwZXMtPmF0KGFkZGVk
SW5kZXgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoa0NGQ29tcGFyZUVxdWFsVG8gPT0gQ0ZT
dHJpbmdDb21wYXJlKGNmTWltZVR5cGUsIHR5cGUsIGtDRkNvbXBhcmVDYXNlSW5zZW5zaXRpdmUp
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhbHJlYWR5QWRkZWQgPSB0cnVlOwotICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCFhbHJlYWR5QWRkZWQpCi0gICAgICAgICAg
ICAgICAgICAgIGdTdXBwb3J0ZWRUeXBlcy0+YXBwZW5kKGNmTWltZVR5cGUpOwotICAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgQ0ZSZWxlYXNlKGNmTWltZVR5cGUpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgRGlzcG9zZUhhbmRsZShtaW1lTGlzdCk7Ci0gICAg
ICAgIH0KLSAgICB9Ci19Ci0KLXVuc2lnbmVkIFFUTW92aWVXaW46OmNvdW50U3VwcG9ydGVkVHlw
ZXMoKQotewotICAgIGluaXRpYWxpemVTdXBwb3J0ZWRUeXBlcygpOwotICAgIHJldHVybiBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oZ1N1cHBvcnRlZFR5cGVzLT5zaXplKCkpOwotfQotCi12b2lkIFFU
TW92aWVXaW46OmdldFN1cHBvcnRlZFR5cGUodW5zaWduZWQgaW5kZXgsIGNvbnN0IFVDaGFyKiYg
c3RyLCB1bnNpZ25lZCYgbGVuKQotewotICAgIGluaXRpYWxpemVTdXBwb3J0ZWRUeXBlcygpOwot
ICAgIEFTU0VSVChpbmRleCA8IGdTdXBwb3J0ZWRUeXBlcy0+c2l6ZSgpKTsKLQotICAgIC8vIEFs
bG9jYXRlIHN1ZmZpY2llbnQgYnVmZmVyIHRvIGhvbGQgYW55IE1JTUUgdHlwZQotICAgIHN0YXRp
YyBVbmlDaGFyKiBzdGF0aWNCdWZmZXIgPSAwOwotICAgIGlmICghc3RhdGljQnVmZmVyKQotICAg
ICAgICBzdGF0aWNCdWZmZXIgPSBuZXcgVW5pQ2hhclszMl07Ci0KLSAgICBDRlN0cmluZ1JlZiBj
ZnN0ciA9IGdTdXBwb3J0ZWRUeXBlcy0+YXQoaW5kZXgpOwotICAgIGxlbiA9IENGU3RyaW5nR2V0
TGVuZ3RoKGNmc3RyKTsKLSAgICBDRlJhbmdlIHJhbmdlID0geyAwLCBsZW4gfTsKLSAgICBDRlN0
cmluZ0dldENoYXJhY3RlcnMoY2ZzdHIsIHJhbmdlLCBzdGF0aWNCdWZmZXIpOwotICAgIHN0ciA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPihzdGF0aWNCdWZmZXIpOwotICAgIAotfQot
Ci12b2lkIFFUTW92aWVXaW46OnNldFRhc2tUaW1lckZ1bmNzKFNldFRhc2tUaW1lckRlbGF5RnVu
YyBzZXRUYXNrVGltZXJEZWxheSwgU3RvcFRhc2tUaW1lckZ1bmMgc3RvcFRhc2tUaW1lcikKLXsK
LSAgICBnU2V0VGFza1RpbWVyRGVsYXkgPSBzZXRUYXNrVGltZXJEZWxheTsKLSAgICBnU3RvcFRh
c2tUaW1lciA9IHN0b3BUYXNrVGltZXI7Ci19Ci0KLWJvb2wgUVRNb3ZpZVdpbjo6aW5pdGlhbGl6
ZVF1aWNrVGltZSgpIAotewotICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVkID0gZmFsc2U7Ci0g
ICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6YXRpb25TdWNjZWVkZWQgPSBmYWxzZTsKLSAgICBpZiAo
IWluaXRpYWxpemVkKSB7Ci0gICAgICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKLSAgICAgICAgLy8g
SW5pdGlhbGl6ZSBhbmQgY2hlY2sgUXVpY2tUaW1lIHZlcnNpb24KLSAgICAgICAgT1NFcnIgcmVz
dWx0ID0gSW5pdGlhbGl6ZVFUTUwoa0luaXRpYWxpemVRVE1MRW5hYmxlRG91YmxlQnVmZmVyZWRT
dXJmYWNlKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBub0VycikKLSAgICAgICAgICAgIHJlc3Vs
dCA9IEdlc3RhbHQoZ2VzdGFsdFF1aWNrVGltZSwgJnF1aWNrVGltZVZlcnNpb24pOwotICAgICAg
ICBpZiAocmVzdWx0ICE9IG5vRXJyKSB7Ci0gICAgICAgICAgICBMT0dfRVJST1IoIk5vIFF1aWNr
VGltZSBhdmFpbGFibGUuIERpc2FibGluZyA8dmlkZW8+IGFuZCA8YXVkaW8+IHN1cHBvcnQuIik7
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHF1aWNr
VGltZVZlcnNpb24gPCBtaW5pbXVtUXVpY2tUaW1lVmVyc2lvbikgewotICAgICAgICAgICAgTE9H
X0VSUk9SKCJRdWlja1RpbWUgdmVyc2lvbiAleCBkZXRlY3RlZCwgYXQgbGVhc3QgJXggcmVxdWly
ZWQuIERpc2FibGluZyA8dmlkZW8+IGFuZCA8YXVkaW8+IHN1cHBvcnQuIiwgcXVpY2tUaW1lVmVy
c2lvbiwgbWluaW11bVF1aWNrVGltZVZlcnNpb24pOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9Ci0gICAgICAgIEVudGVyTW92aWVzKCk7Ci0gICAgICAgIGdNb3ZpZURyYXdp
bmdDb21wbGV0ZVVQUCA9IE5ld01vdmllRHJhd2luZ0NvbXBsZXRlVVBQKG1vdmllRHJhd2luZ0Nv
bXBsZXRlUHJvYyk7Ci0gICAgICAgIGluaXRpYWxpemF0aW9uU3VjY2VlZGVkID0gdHJ1ZTsKLSAg
ICB9Ci0gICAgcmV0dXJuIGluaXRpYWxpemF0aW9uU3VjY2VlZGVkOwotfQotCiBMUkVTVUxUIFFU
TW92aWVXaW46OmZ1bGxzY3JlZW5XbmRQcm9jKEhXTkQgd25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJB
TSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCiB7CiAgICAgUVRNb3ZpZVdpbiogbW92aWUgPSBzdGF0
aWNfY2FzdDxRVE1vdmllV2luKj4oR2V0UHJvcCh3bmQsIGZ1bGxzY3JlZW5RVE1vdmllV2luUG9p
bnRlclByb3ApKTsKQEAgLTExNjMsMTYgKzQ2NiwyNSBAQA0KICAgICBtX3ByaXZhdGUtPm1fZnVs
bHNjcmVlbldpbmRvdyA9IDA7CiB9CiAKLUJPT0wgV0lOQVBJIERsbE1haW4oSElOU1RBTkNFIGhp
bnN0RExMLCBEV09SRCBmZHdSZWFzb24sIExQVk9JRCBscHZSZXNlcnZlZCkKK3ZvaWQgUVRNb3Zp
ZVdpbjo6c2V0TW92aWUoUVRNb3ZpZSogbW92aWUpCiB7Ci0gICAgc3dpdGNoIChmZHdSZWFzb24p
IHsKLSAgICBjYXNlIERMTF9QUk9DRVNTX0FUVEFDSDoKLSAgICAgICAgcmV0dXJuIFRSVUU7Ci0g
ICAgY2FzZSBETExfUFJPQ0VTU19ERVRBQ0g6Ci0gICAgY2FzZSBETExfVEhSRUFEX0FUVEFDSDoK
LSAgICBjYXNlIERMTF9USFJFQURfREVUQUNIOgotICAgICAgICByZXR1cm4gRkFMU0U7CisgICAg
aWYgKG1fcHJpdmF0ZS0+bV9xdE1vdmllKSB7CisgICAgICAgIG1fcHJpdmF0ZS0+dW5yZWdpc3Rl
ckRyYXdpbmdDYWxsYmFjaygpOworICAgICAgICBtX3ByaXZhdGUtPm1fcXRNb3ZpZS0+cmVtb3Zl
Q2xpZW50KG1fcHJpdmF0ZSk7CisgICAgICAgIG1fcHJpdmF0ZS0+bV9xdE1vdmllID0gMDsKKyAg
ICAgICAgbV9wcml2YXRlLT5tX21vdmllID0gMDsKICAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgcmV0dXJuIEZBTFNFOworCisgICAgbV9wcml2YXRlLT5tX3F0TW92aWUgPSBt
b3ZpZTsKKworICAgIGlmIChtX3ByaXZhdGUtPm1fcXRNb3ZpZSkgeworICAgICAgICBtX3ByaXZh
dGUtPm1fcXRNb3ZpZS0+YWRkQ2xpZW50KG1fcHJpdmF0ZSk7CisgICAgICAgIG1fcHJpdmF0ZS0+
bV9tb3ZpZSA9IG1fcHJpdmF0ZS0+bV9xdE1vdmllLT5nZXRNb3ZpZUhhbmRsZSgpOworICAgICAg
ICBtX3ByaXZhdGUtPnJlZ2lzdGVyRHJhd2luZ0NhbGxiYWNrKCk7CisgICAgfQogfQorCitRVE1v
dmllKiBRVE1vdmllV2luOjptb3ZpZSgpIGNvbnN0IAoreworICAgIHJldHVybiBtX3ByaXZhdGUt
Pm1fcXRNb3ZpZTsKK30KSW5kZXg6IFFUTW92aWVXaW4uaA0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFFUTW92
aWVXaW4uaAkocmV2aXNpb24gNTgxODcpDQorKysgUVRNb3ZpZVdpbi5oCSh3b3JraW5nIGNvcHkp
DQpAQCAtMjYsNiArMjYsOCBAQA0KICNpZm5kZWYgUVRNb3ZpZVdpbl9oCiAjZGVmaW5lIFFUTW92
aWVXaW5faAogCisKKyNpbmNsdWRlICJRVE1vdmllLmgiCiAjaW5jbHVkZSA8VW5pY29kZS5oPgog
I2luY2x1ZGUgPHdpbmRvd3MuaD4KIApAQCAtNDAsOSArNDIsNiBAQA0KIAogY2xhc3MgUVRNb3Zp
ZVdpbkNsaWVudCB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIG1vdmllRW5kZWQoUVRNb3Zp
ZVdpbiopID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbW92aWVMb2FkU3RhdGVDaGFuZ2VkKFFUTW92
aWVXaW4qKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIG1vdmllVGltZUNoYW5nZWQoUVRNb3ZpZVdp
biopID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgbW92aWVOZXdJbWFnZUF2YWlsYWJsZShRVE1vdmll
V2luKikgPSAwOwogfTsKIApAQCAtNTEsNDcgKzUwLDExIEBADQogICAgIHZpcnR1YWwgTFJFU1VM
VCBmdWxsc2NyZWVuQ2xpZW50V25kUHJvYyhIV05ELCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSwgTFBB
UkFNKSA9IDA7CiB9OwogCi1lbnVtIHsKLSAgICBRVE1vdmllTG9hZFN0YXRlRXJyb3IgPSAtMUws
Ci0gICAgUVRNb3ZpZUxvYWRTdGF0ZUxvYWRlZCAgPSAyMDAwTCwKLSAgICBRVE1vdmllTG9hZFN0
YXRlUGxheWFibGUgPSAxMDAwMEwsCi0gICAgUVRNb3ZpZUxvYWRTdGF0ZVBsYXl0aHJvdWdoT0sg
PSAyMDAwMEwsCi0gICAgUVRNb3ZpZUxvYWRTdGF0ZUNvbXBsZXRlID0gMTAwMDAwTAotfTsKLQot
dHlwZWRlZiBjb25zdCBzdHJ1Y3QgX19DRlVSTCAqIENGVVJMUmVmOwotCiBjbGFzcyBRVE1PVklF
V0lOX0FQSSBRVE1vdmllV2luIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXpl
UXVpY2tUaW1lKCk7Ci0KLSAgICB0eXBlZGVmIHZvaWQgKCpTZXRUYXNrVGltZXJEZWxheUZ1bmMp
KGRvdWJsZSk7Ci0gICAgdHlwZWRlZiB2b2lkICgqU3RvcFRhc2tUaW1lckZ1bmMpKCk7Ci0gICAg
c3RhdGljIHZvaWQgc2V0VGFza1RpbWVyRnVuY3MoU2V0VGFza1RpbWVyRGVsYXlGdW5jLCBTdG9w
VGFza1RpbWVyRnVuYyk7Ci0gICAgc3RhdGljIHZvaWQgdGFza1RpbWVyRmlyZWQoKTsKLQogICAg
IFFUTW92aWVXaW4oUVRNb3ZpZVdpbkNsaWVudCopOwogICAgIH5RVE1vdmllV2luKCk7CiAKLSAg
ICB2b2lkIGxvYWQoY29uc3QgVUNoYXIqIHVybCwgaW50IGxlbiwgYm9vbCBwcmVzZXJ2ZXNQaXRj
aCk7Ci0gICAgbG9uZyBsb2FkU3RhdGUoKSBjb25zdDsKLSAgICBmbG9hdCBtYXhUaW1lTG9hZGVk
KCkgY29uc3Q7Ci0KLSAgICB2b2lkIHBsYXkoKTsKLSAgICB2b2lkIHBhdXNlKCk7Ci0KLSAgICBm
bG9hdCByYXRlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRSYXRlKGZsb2F0KTsKLQotICAgIGZsb2F0
IGR1cmF0aW9uKCkgY29uc3Q7Ci0gICAgZmxvYXQgY3VycmVudFRpbWUoKSBjb25zdDsKLSAgICB2
b2lkIHNldEN1cnJlbnRUaW1lKGZsb2F0KSBjb25zdDsKLQotICAgIHZvaWQgc2V0Vm9sdW1lKGZs
b2F0KTsKLSAgICB2b2lkIHNldFByZXNlcnZlc1BpdGNoKGJvb2wpOwotCi0gICAgdW5zaWduZWQg
ZGF0YVNpemUoKSBjb25zdDsKLQogICAgIHZvaWQgZ2V0TmF0dXJhbFNpemUoaW50JiB3aWR0aCwg
aW50JiBoZWlnaHQpOwogICAgIHZvaWQgc2V0U2l6ZShpbnQgd2lkdGgsIGludCBoZWlnaHQpOwog
CkBAIC05OSwyOCArNjIsMjAgQEANCiAgICAgdm9pZCBwYWludChIREMsIGludCB4LCBpbnQgeSk7
CiAgICAgdm9pZCBnZXRDdXJyZW50RnJhbWVJbmZvKHZvaWQqJiBidWZmZXIsIHVuc2lnbmVkJiBi
aXRzUGVyUGl4ZWwsIHVuc2lnbmVkJiByb3dCeXRlcywgdW5zaWduZWQmIHdpZHRoLCB1bnNpZ25l
ZCYgaGVpZ2h0KTsKIAotICAgIHZvaWQgZGlzYWJsZVVuc3VwcG9ydGVkVHJhY2tzKHVuc2lnbmVk
JiBlbmFibGVkVHJhY2tDb3VudCwgdW5zaWduZWQmIHRvdGFsVHJhY2tDb3VudCk7CiAgICAgdm9p
ZCBzZXREaXNhYmxlZChib29sKTsKKyAgICBib29sIGlzRGlzYWJsZWQoKSBjb25zdDsKIAotICAg
IGJvb2wgaGFzVmlkZW8oKSBjb25zdDsKLSAgICBib29sIGhhc0F1ZGlvKCkgY29uc3Q7Ci0KLSAg
ICBib29sIGhhc0Nsb3NlZENhcHRpb25zKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRDbG9zZWRDYXB0
aW9uc1Zpc2libGUoYm9vbCk7Ci0KLSAgICBzdGF0aWMgdW5zaWduZWQgY291bnRTdXBwb3J0ZWRU
eXBlcygpOwotICAgIHN0YXRpYyB2b2lkIGdldFN1cHBvcnRlZFR5cGUodW5zaWduZWQgaW5kZXgs
IGNvbnN0IFVDaGFyKiYgc3RyLCB1bnNpZ25lZCYgbGVuKTsKLQogICAgIC8vIFJldHVybnMgdGhl
IGZ1bGwtc2NyZWVuIHdpbmRvdyBjcmVhdGVkCiAgICAgSFdORCBlbnRlckZ1bGxzY3JlZW4oUVRN
b3ZpZVdpbkZ1bGxzY3JlZW5DbGllbnQqKTsKICAgICB2b2lkIGV4aXRGdWxsc2NyZWVuKCk7CiAK
KyAgICB2b2lkIHNldE1vdmllKFFUTW92aWUqKTsKKyAgICBRVE1vdmllKiBtb3ZpZSgpIGNvbnN0
OworCiBwcml2YXRlOgotICAgIHZvaWQgbG9hZChDRlVSTFJlZiwgYm9vbCBwcmVzZXJ2ZXNQaXRj
aCk7CiAgICAgc3RhdGljIExSRVNVTFQgZnVsbHNjcmVlblduZFByb2MoSFdORCwgVUlOVCBtZXNz
YWdlLCBXUEFSQU0sIExQQVJBTSk7CiAKICAgICBRVE1vdmllV2luUHJpdmF0ZSogbV9wcml2YXRl
OwotICAgIGJvb2wgbV9kaXNhYmxlZDsKICAgICBmcmllbmQgY2xhc3MgUVRNb3ZpZVdpblByaXZh
dGU7CiB9OwogCkluZGV4OiBRVFBpeGVsQnVmZmVyLmNwcA0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFFUUGl4
ZWxCdWZmZXIuY3BwCShyZXZpc2lvbiAwKQ0KKysrIFFUUGl4ZWxCdWZmZXIuY3BwCShyZXZpc2lv
biAwKQ0KQEAgLTAsMCArMSwxOTggQEANCisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4
LCAyMDA5LCAyMDEwIEFwcGxlLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUVRQaXhlbEJ1ZmZlci5oIgorCisjaW5jbHVk
ZSA8Q1ZQaXhlbEJ1ZmZlci5oPgorI2luY2x1ZGUgPENGU3RyaW5nLmg+CisjaW5jbHVkZSA8Q0dJ
bWFnZS5oPgorI2luY2x1ZGUgPENHQ29sb3JTcGFjZS5oPgorCitRVFBpeGVsQnVmZmVyOjpRVFBp
eGVsQnVmZmVyKCkgOiBtX3BpeGVsQnVmZmVyKDApIHt9CisKK1FUUGl4ZWxCdWZmZXI6OlFUUGl4
ZWxCdWZmZXIoY29uc3QgUVRQaXhlbEJ1ZmZlciYgcCkgOiBtX3BpeGVsQnVmZmVyKHAubV9waXhl
bEJ1ZmZlcikgCit7CisgICAgQ1ZQaXhlbEJ1ZmZlclJldGFpbihtX3BpeGVsQnVmZmVyKTsKK30K
KworUVRQaXhlbEJ1ZmZlcjo6UVRQaXhlbEJ1ZmZlcihDVlBpeGVsQnVmZmVyUmVmIHJlZikgOiBt
X3BpeGVsQnVmZmVyKHJlZikKK3sKKyAgICBDVlBpeGVsQnVmZmVyUmV0YWluKG1fcGl4ZWxCdWZm
ZXIpOworfQorCitRVFBpeGVsQnVmZmVyOjp+UVRQaXhlbEJ1ZmZlcigpIAoreworICAgIGNsZWFy
KCk7Cit9CisKK1FUUGl4ZWxCdWZmZXImIFFUUGl4ZWxCdWZmZXI6Om9wZXJhdG9yPShjb25zdCBR
VFBpeGVsQnVmZmVyJiBwKSAKK3sKKyAgICBzZXQocC5tX3BpeGVsQnVmZmVyKTsKKyAgICByZXR1
cm4gKnRoaXM7Cit9CisKK3ZvaWQgUVRQaXhlbEJ1ZmZlcjo6c2V0KENWUGl4ZWxCdWZmZXJSZWYg
cmVmKQoreworICAgIENWUGl4ZWxCdWZmZXJSZXRhaW4ocmVmKTsKKyAgICBDVlBpeGVsQnVmZmVy
UmVsZWFzZShtX3BpeGVsQnVmZmVyKTsKKyAgICBtX3BpeGVsQnVmZmVyID0gcmVmOworfQorCitD
VlBpeGVsQnVmZmVyUmVmIFFUUGl4ZWxCdWZmZXI6OmdldCgpCit7CisgICAgcmV0dXJuIG1fcGl4
ZWxCdWZmZXI7Cit9CisKK3ZvaWQgUVRQaXhlbEJ1ZmZlcjo6Y2xlYXIoKQoreworICAgIENWUGl4
ZWxCdWZmZXJSZWxlYXNlKG1fcGl4ZWxCdWZmZXIpOworICAgIG1fcGl4ZWxCdWZmZXIgPSAwOwor
fQorCitDVlJldHVybiBRVFBpeGVsQnVmZmVyOjpsb2NrQmFzZUFkZHJlc3MoKQoreworICAgIHJl
dHVybiBDVlBpeGVsQnVmZmVyTG9ja0Jhc2VBZGRyZXNzKG1fcGl4ZWxCdWZmZXIsIDApOworfQor
CitDVlJldHVybiBRVFBpeGVsQnVmZmVyOjp1bmxvY2tCYXNlQWRkcmVzcygpCit7CisgICAgcmV0
dXJuIENWUGl4ZWxCdWZmZXJVbmxvY2tCYXNlQWRkcmVzcyhtX3BpeGVsQnVmZmVyLCAwKTsKK30K
Kworc2l6ZV90IFFUUGl4ZWxCdWZmZXI6OndpZHRoKCkKK3sKKyAgICByZXR1cm4gQ1ZQaXhlbEJ1
ZmZlckdldFdpZHRoKG1fcGl4ZWxCdWZmZXIpOworfQorCitzaXplX3QgUVRQaXhlbEJ1ZmZlcjo6
aGVpZ2h0KCkKK3sKKyAgICByZXR1cm4gQ1ZQaXhlbEJ1ZmZlckdldEhlaWdodChtX3BpeGVsQnVm
ZmVyKTsKK30KKwordW5zaWduZWQgbG9uZyBRVFBpeGVsQnVmZmVyOjpwaXhlbEZvcm1hdFR5cGUo
KQoreworICAgIE9TVHlwZSBwaXhlbEZvcm1hdFR5cGUgPSBDVlBpeGVsQnVmZmVyR2V0UGl4ZWxG
b3JtYXRUeXBlKG1fcGl4ZWxCdWZmZXIpOworICAgIHJldHVybiBwaXhlbEZvcm1hdFR5cGU7Cit9
CisKK3ZvaWQqIFFUUGl4ZWxCdWZmZXI6OmJhc2VBZGRyZXNzKCkKK3sKKyAgICByZXR1cm4gQ1ZQ
aXhlbEJ1ZmZlckdldEJhc2VBZGRyZXNzKG1fcGl4ZWxCdWZmZXIpOworfQorCitzaXplX3QgUVRQ
aXhlbEJ1ZmZlcjo6Ynl0ZXNQZXJSb3coKQoreworICAgIHJldHVybiBDVlBpeGVsQnVmZmVyR2V0
Qnl0ZXNQZXJSb3cobV9waXhlbEJ1ZmZlcik7Cit9CisKK3NpemVfdCBRVFBpeGVsQnVmZmVyOjpk
YXRhU2l6ZSgpCit7CisgICAgcmV0dXJuIENWUGl4ZWxCdWZmZXJHZXREYXRhU2l6ZShtX3BpeGVs
QnVmZmVyKTsKK30KKworCitib29sIFFUUGl4ZWxCdWZmZXI6OmlzUGxhbmFyKCkKK3sKKyAgICBy
ZXR1cm4gQ1ZQaXhlbEJ1ZmZlcklzUGxhbmFyKG1fcGl4ZWxCdWZmZXIpOworfQorCitzaXplX3Qg
UVRQaXhlbEJ1ZmZlcjo6cGxhbmVDb3VudCgpCit7CisgICAgcmV0dXJuIENWUGl4ZWxCdWZmZXJH
ZXRQbGFuZUNvdW50KG1fcGl4ZWxCdWZmZXIpOworfQorCitzaXplX3QgUVRQaXhlbEJ1ZmZlcjo6
d2lkdGhPZlBsYW5lKHNpemVfdCBwbGFuZSkKK3sKKyAgICByZXR1cm4gQ1ZQaXhlbEJ1ZmZlckdl
dFdpZHRoT2ZQbGFuZShtX3BpeGVsQnVmZmVyLCBwbGFuZSk7Cit9CisKK3NpemVfdCBRVFBpeGVs
QnVmZmVyOjpoZWlnaHRPZlBsYW5lKHNpemVfdCBwbGFuZSkKK3sKKyAgICByZXR1cm4gQ1ZQaXhl
bEJ1ZmZlckdldEhlaWdodE9mUGxhbmUobV9waXhlbEJ1ZmZlciwgcGxhbmUpOworfQorCit2b2lk
KiBRVFBpeGVsQnVmZmVyOjpiYXNlQWRkcmVzc09mUGxhbmUoc2l6ZV90IHBsYW5lKQoreworICAg
IHJldHVybiBDVlBpeGVsQnVmZmVyR2V0QmFzZUFkZHJlc3NPZlBsYW5lKG1fcGl4ZWxCdWZmZXIs
IHBsYW5lKTsKK30KKworc2l6ZV90IFFUUGl4ZWxCdWZmZXI6OmJ5dGVzUGVyUm93T2ZQbGFuZShz
aXplX3QgcGxhbmUpCit7CisgICAgcmV0dXJuIENWUGl4ZWxCdWZmZXJHZXRCeXRlc1BlclJvd09m
UGxhbmUobV9waXhlbEJ1ZmZlciwgcGxhbmUpOworfQorCit2b2lkIFFUUGl4ZWxCdWZmZXI6Omdl
dEV4dGVuZGVkUGl4ZWxzKHNpemVfdCogbGVmdCwgc2l6ZV90KiByaWdodCwgc2l6ZV90KiB0b3As
IHNpemVfdCogYm90dG9tKQoreworICAgIHJldHVybiBDVlBpeGVsQnVmZmVyR2V0RXh0ZW5kZWRQ
aXhlbHMobV9waXhlbEJ1ZmZlciwgbGVmdCwgcmlnaHQsIHRvcCwgYm90dG9tKTsKK30KKworQ0ZE
aWN0aW9uYXJ5UmVmIFFUUGl4ZWxCdWZmZXI6OmF0dGFjaG1lbnRzKCkKK3sKKyAgICBDRkRpY3Rp
b25hcnlSZWYgcHJvcG9nYXRlZCA9IENWQnVmZmVyR2V0QXR0YWNobWVudHMobV9waXhlbEJ1ZmZl
ciwga0NWQXR0YWNobWVudE1vZGVfU2hvdWxkUHJvcGFnYXRlKTsKKyAgICByZXR1cm4gcHJvcG9n
YXRlZDsKK30KKwordm9pZCBRVFBpeGVsQnVmZmVyOjpyZXRhaW5DYWxsYmFjayh2b2lkKiByZWZj
b24pCit7CisgICAgQ1ZQaXhlbEJ1ZmZlclJldGFpbihzdGF0aWNfY2FzdDxDVlBpeGVsQnVmZmVy
UmVmPihyZWZjb24pKTsKK30KKwordm9pZCBRVFBpeGVsQnVmZmVyOjpyZWxlYXNlQ2FsbGJhY2so
dm9pZCogcmVmY29uKQoreworICAgIENWUGl4ZWxCdWZmZXJSZWxlYXNlKHN0YXRpY19jYXN0PENW
UGl4ZWxCdWZmZXJSZWY+KHJlZmNvbikpOworfQorCit2b2lkIFFUUGl4ZWxCdWZmZXI6OmltYWdl
UXVldWVSZWxlYXNlQ2FsbGJhY2sodW5zaWduZWQgaW50IHR5cGUsIHVpbnQ2NF90IGlkLCB2b2lk
KiByZWZjb24pCit7CisgICAgQ1ZQaXhlbEJ1ZmZlclJlbGVhc2Uoc3RhdGljX2Nhc3Q8Q1ZQaXhl
bEJ1ZmZlclJlZj4ocmVmY29uKSk7Cit9CisKK3ZvaWQgUVRQaXhlbEJ1ZmZlcjo6ZGF0YVByb3Zp
ZGVyUmVsZWFzZUJ5dGVQb2ludGVyQ2FsbGJhY2sodm9pZCogcmVmY29uLCBjb25zdCB2b2lkKiBw
b2ludGVyKQoreworICAgIENWUGl4ZWxCdWZmZXJVbmxvY2tCYXNlQWRkcmVzcyhzdGF0aWNfY2Fz
dDxDVlBpeGVsQnVmZmVyUmVmPihyZWZjb24pLCAwKTsKK30KKworY29uc3Qgdm9pZCogUVRQaXhl
bEJ1ZmZlcjo6ZGF0YVByb3ZpZGVyR2V0Qnl0ZVBvaW50ZXJDYWxsYmFjayh2b2lkKiByZWZjb24p
Cit7CisgICAgQ1ZQaXhlbEJ1ZmZlckxvY2tCYXNlQWRkcmVzcyhzdGF0aWNfY2FzdDxDVlBpeGVs
QnVmZmVyUmVmPihyZWZjb24pLCAwKTsKKyAgICByZXR1cm4gQ1ZQaXhlbEJ1ZmZlckdldEJhc2VB
ZGRyZXNzKHN0YXRpY19jYXN0PENWUGl4ZWxCdWZmZXJSZWY+KHJlZmNvbikpOworfQorCitzaXpl
X3QgUVRQaXhlbEJ1ZmZlcjo6ZGF0YVByb3ZpZGVyR2V0Qnl0ZXNBdFBvc2l0aW9uQ2FsbGJhY2so
dm9pZCogcmVmY29uLCB2b2lkKiBidWZmZXIsIHNpemVfdCBwb3NpdGlvbiwgc2l6ZV90IGNvdW50
KQoreworICAgY2hhciogZGF0YSA9IChjaGFyKilDVlBpeGVsQnVmZmVyR2V0QmFzZUFkZHJlc3Mo
c3RhdGljX2Nhc3Q8Q1ZQaXhlbEJ1ZmZlclJlZj4ocmVmY29uKSk7CisgICAgc2l6ZV90IHNpemUg
PSBDVlBpeGVsQnVmZmVyR2V0RGF0YVNpemUoc3RhdGljX2Nhc3Q8Q1ZQaXhlbEJ1ZmZlclJlZj4o
cmVmY29uKSk7CisgICAgaWYgKHNpemUgLSBwb3NpdGlvbiA8IGNvdW50KQorICAgICAgICBjb3Vu
dCA9IHNpemUgLSBwb3NpdGlvbjsKKworICAgIG1lbWNweShidWZmZXIsIGRhdGErcG9zaXRpb24s
IGNvdW50KTsKKyAgICByZXR1cm4gY291bnQ7Cit9CisKK3ZvaWQgUVRQaXhlbEJ1ZmZlcjo6ZGF0
YVByb3ZpZGVyUmVsZWFzZUluZm9DYWxsYmFjayh2b2lkKiByZWZjb24pCit7CisgICAgQ1ZQaXhl
bEJ1ZmZlclJlbGVhc2Uoc3RhdGljX2Nhc3Q8Q1ZQaXhlbEJ1ZmZlclJlZj4ocmVmY29uKSk7Cit9
CkluZGV4OiBRVFBpeGVsQnVmZmVyLmgNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBRVFBpeGVsQnVmZmVyLmgJ
KHJldmlzaW9uIDApDQorKysgUVRQaXhlbEJ1ZmZlci5oCShyZXZpc2lvbiAwKQ0KQEAgLTAsMCAr
MSw5NSBAQA0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBw
bGUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUVRQaXhlbEJ1
ZmZlcl9oCisjZGVmaW5lIFFUUGl4ZWxCdWZmZXJfaAorCisjaWZkZWYgUVRNT1ZJRVdJTl9FWFBP
UlRTCisjZGVmaW5lIFFUTU9WSUVXSU5fQVBJIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQorI2Vsc2UK
KyNkZWZpbmUgUVRNT1ZJRVdJTl9BUEkgX19kZWNsc3BlYyhkbGxpbXBvcnQpCisjZW5kaWYKKwor
I2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK3R5cGVk
ZWYgc3RydWN0IF9fQ1ZCdWZmZXIgKkNWQnVmZmVyUmVmOwordHlwZWRlZiBDVkJ1ZmZlclJlZiBD
VlBpeGVsQnVmZmVyUmVmOwordHlwZWRlZiBzdHJ1Y3QgQ0dJbWFnZSogQ0dJbWFnZVJlZjsKK3R5
cGVkZWYgaW50MzJfdCBDVlJldHVybjsKK3R5cGVkZWYgY29uc3Qgc3RydWN0IF9fQ0ZEaWN0aW9u
YXJ5ICogQ0ZEaWN0aW9uYXJ5UmVmOworCisvLyBRVFBpeGVsQnVmZmVyIHdyYXBzIFF1aWNrVGlt
ZSdzIGltcGxlbWVudGF0aW9uIG9mIENWUGl4ZWxCdWZmZXIsIHNvIGl0cyBmdW5jdGlvbnMgYXJl
CisvLyBzYWZlIHRvIGNhbGwgd2l0aGluIFdlYktpdC4KK2NsYXNzIFFUTU9WSUVXSU5fQVBJIFFU
UGl4ZWxCdWZmZXIgOiBSZWZDb3VudGVkPFFUUGl4ZWxCdWZmZXI+IHsKK3B1YmxpYzoKKyAgICBR
VFBpeGVsQnVmZmVyKCk7CisgICAgUVRQaXhlbEJ1ZmZlcihjb25zdCBRVFBpeGVsQnVmZmVyJik7
CisgICAgUVRQaXhlbEJ1ZmZlcihDVlBpeGVsQnVmZmVyUmVmKTsKKyAgICBRVFBpeGVsQnVmZmVy
JiBvcGVyYXRvcj0oY29uc3QgUVRQaXhlbEJ1ZmZlciYpOworICAgIH5RVFBpeGVsQnVmZmVyKCk7
CisKKyAgICB2b2lkIHNldChDVlBpeGVsQnVmZmVyUmVmKTsKKyAgICBDVlBpeGVsQnVmZmVyUmVm
IGdldCgpOworICAgIHZvaWQgY2xlYXIoKTsKKworICAgIENWUmV0dXJuIGxvY2tCYXNlQWRkcmVz
cygpOworICAgIENWUmV0dXJuIHVubG9ja0Jhc2VBZGRyZXNzKCk7CisgICAgc2l6ZV90IHdpZHRo
KCk7CisgICAgc2l6ZV90IGhlaWdodCgpOworCisgICAgdW5zaWduZWQgbG9uZyBwaXhlbEZvcm1h
dFR5cGUoKTsKKyAgICB2b2lkKiBiYXNlQWRkcmVzcygpOworICAgIHNpemVfdCBieXRlc1BlclJv
dygpOworICAgIHNpemVfdCBkYXRhU2l6ZSgpOworCisgICAgYm9vbCBpc1BsYW5hcigpOworICAg
IHNpemVfdCBwbGFuZUNvdW50KCk7CisgICAgc2l6ZV90IHdpZHRoT2ZQbGFuZShzaXplX3QpOwor
ICAgIHNpemVfdCBoZWlnaHRPZlBsYW5lKHNpemVfdCk7CisgICAgdm9pZCogYmFzZUFkZHJlc3NP
ZlBsYW5lKHNpemVfdCk7CisgICAgc2l6ZV90IGJ5dGVzUGVyUm93T2ZQbGFuZShzaXplX3QpOwor
CisgICAgdm9pZCBnZXRFeHRlbmRlZFBpeGVscyhzaXplX3QqIGxlZnQsIHNpemVfdCogcmlnaHQs
IHNpemVfdCogdG9wLCBzaXplX3QqIGJvdHRvbSk7CisgICAgQ0ZEaWN0aW9uYXJ5UmVmIGF0dGFj
aG1lbnRzKCk7CisKKyAgICAvLyBHZW5lcmljIENGUmV0YWluL0NGUmVsZWFzZSBjYWxsYmFja3MK
KyAgICBzdGF0aWMgdm9pZCByZWxlYXNlQ2FsbGJhY2sodm9pZCogcmVmY29uKTsKKyAgICBzdGF0
aWMgdm9pZCByZXRhaW5DYWxsYmFjayh2b2lkKiByZWZjb24pOworCisgICAgLy8gQ0FJbWFnZVF1
ZXVlIGNhbGxiYWNrcworICAgIHN0YXRpYyB2b2lkIGltYWdlUXVldWVSZWxlYXNlQ2FsbGJhY2so
dW5zaWduZWQgaW50IHR5cGUsIHVpbnQ2NF90IGlkLCB2b2lkKiByZWZjb24pOworCisgICAgLy8g
Q0dEYXRhUHJvdmlkZXIgY2FsbGJhY2tzCisgICAgc3RhdGljIHZvaWQgZGF0YVByb3ZpZGVyUmVs
ZWFzZUJ5dGVQb2ludGVyQ2FsbGJhY2sodm9pZCogcmVmY29uLCBjb25zdCB2b2lkKiBwb2ludGVy
KTsKKyAgICBzdGF0aWMgY29uc3Qgdm9pZCogZGF0YVByb3ZpZGVyR2V0Qnl0ZVBvaW50ZXJDYWxs
YmFjayh2b2lkKiByZWZjb24pOworICAgIHN0YXRpYyBzaXplX3QgZGF0YVByb3ZpZGVyR2V0Qnl0
ZXNBdFBvc2l0aW9uQ2FsbGJhY2sodm9pZCogcmVmY29uLCB2b2lkKiBidWZmZXIsIHNpemVfdCBw
b3NpdGlvbiwgc2l6ZV90IGNvdW50KTsKKyAgICBzdGF0aWMgdm9pZCBkYXRhUHJvdmlkZXJSZWxl
YXNlSW5mb0NhbGxiYWNrKHZvaWQqIHJlZmNvbik7CisKK3ByaXZhdGU6CisgICAgQ1ZQaXhlbEJ1
ZmZlclJlZiBtX3BpeGVsQnVmZmVyOworfTsKKworI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55054</attachid>
            <date>2010-05-04 15:29:16 -0700</date>
            <delta_ts>2010-05-06 22:20:22 -0700</delta_ts>
            <desc>Part 4.1: WebCore: New class MediaPlayerPrivateQuickTimeVisualContext, the copy</desc>
            <filename>7569713-MediaPlayerPrivateQuickTimeVisualContext-Part1.patch</filename>
            <type>text/plain</type>
            <size>35967</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1
aWNrVGltZVZpc3VhbENvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQuY3Bw
CShyZXZpc2lvbiA1ODU5NikJKGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVk
aWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lV2luLmNwcDo1ODU5NikKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTcyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoVklERU8pCisjaW5j
bHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lV2luLmgiCisKKyNpbmNsdWRlICJDb29r
aWUuaCIKKyNpbmNsdWRlICJDb29raWVKYXIuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1
ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUg
IktVUkwuaCIKKyNpbmNsdWRlICJRVE1vdmllV2luLmgiCisjaW5jbHVkZSAiU2Nyb2xsVmlldy5o
IgorI2luY2x1ZGUgIlNvZnRMaW5raW5nLmgiCisjaW5jbHVkZSAiU3RyaW5nQnVpbGRlci5oIgor
I2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKKyNpbmNsdWRlICJUaW1lUmFuZ2VzLmgiCisjaW5jbHVk
ZSAiVGltZXIuaCIKKyNpbmNsdWRlIDxXaW5pbmV0Lmg+CisjaW5jbHVkZSA8d3RmL0N1cnJlbnRU
aW1lLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJh
cy5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyQ0FDRi5oIgorI2luY2x1ZGUg
IldLQ0FDRkxheWVyLmgiCisjZW5kaWYKKworI2lmIERSQVdfRlJBTUVfUkFURQorI2luY2x1ZGUg
IkZvbnQuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAi
UmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJXaW5kb3dzLmgiCisjZW5kaWYKKwordXNpbmcgbmFt
ZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTT0ZUX0xJTktfTElCUkFSWShX
aW5pbmV0KQorU09GVF9MSU5LKFdpbmluZXQsIEludGVybmV0U2V0Q29va2llRXhXLCBEV09SRCwg
V0lOQVBJLCAoTFBDV1NUUiBscHN6VXJsLCBMUENXU1RSIGxwc3pDb29raWVOYW1lLCBMUENXU1RS
IGxwc3pDb29raWVEYXRhLCBEV09SRCBkd0ZsYWdzLCBEV09SRF9QVFIgZHdSZXNlcnZlZCksIChs
cHN6VXJsLCBscHN6Q29va2llTmFtZSwgbHBzekNvb2tpZURhdGEsIGR3RmxhZ3MsIGR3UmVzZXJ2
ZWQpKQorCitNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2UqIE1lZGlhUGxheWVyUHJpdmF0ZTo6
Y3JlYXRlKE1lZGlhUGxheWVyKiBwbGF5ZXIpIAoreyAKKyAgICByZXR1cm4gbmV3IE1lZGlhUGxh
eWVyUHJpdmF0ZShwbGF5ZXIpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6cmVnaXN0
ZXJNZWRpYUVuZ2luZShNZWRpYUVuZ2luZVJlZ2lzdHJhciByZWdpc3RyYXIpCit7CisgICAgaWYg
KGlzQXZhaWxhYmxlKCkpCisgICAgICAgIHJlZ2lzdHJhcihjcmVhdGUsIGdldFN1cHBvcnRlZFR5
cGVzLCBzdXBwb3J0c1R5cGUpOworfQorCitNZWRpYVBsYXllclByaXZhdGU6Ok1lZGlhUGxheWVy
UHJpdmF0ZShNZWRpYVBsYXllciogcGxheWVyKQorICAgIDogbV9wbGF5ZXIocGxheWVyKQorICAg
ICwgbV9zZWVrVG8oLTEpCisgICAgLCBtX3NlZWtUaW1lcih0aGlzLCAmTWVkaWFQbGF5ZXJQcml2
YXRlOjpzZWVrVGltZXJGaXJlZCkKKyAgICAsIG1fbmV0d29ya1N0YXRlKE1lZGlhUGxheWVyOjpF
bXB0eSkKKyAgICAsIG1fcmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmcpCisgICAg
LCBtX2VuYWJsZWRUcmFja0NvdW50KDApCisgICAgLCBtX3RvdGFsVHJhY2tDb3VudCgwKQorICAg
ICwgbV9oYXNVbnN1cHBvcnRlZFRyYWNrcyhmYWxzZSkKKyAgICAsIG1fc3RhcnRlZFBsYXlpbmco
ZmFsc2UpCisgICAgLCBtX2lzU3RyZWFtaW5nKGZhbHNlKQorICAgICwgbV92aXNpYmxlKGZhbHNl
KQorICAgICwgbV9uZXdGcmFtZUF2YWlsYWJsZShmYWxzZSkKKyNpZiBEUkFXX0ZSQU1FX1JBVEUK
KyAgICAsIG1fZnJhbWVDb3VudFdoaWxlUGxheWluZygwKQorICAgICwgbV90aW1lU3RhcnRlZFBs
YXlpbmcoMCkKKyAgICAsIG1fdGltZVN0b3BwZWRQbGF5aW5nKDApCisjZW5kaWYKK3sKK30KKwor
TWVkaWFQbGF5ZXJQcml2YXRlOjp+TWVkaWFQbGF5ZXJQcml2YXRlKCkKK3sKKyAgICB0ZWFyRG93
blZpZGVvUmVuZGVyaW5nKCk7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlOjpzdXBwb3J0
c0Z1bGxzY3JlZW4oKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCitQbGF0Zm9ybU1l
ZGlhIE1lZGlhUGxheWVyUHJpdmF0ZTo6cGxhdGZvcm1NZWRpYSgpIGNvbnN0Cit7CisgICAgUGxh
dGZvcm1NZWRpYSBwOworICAgIHAucXRNb3ZpZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8UVRNb3ZpZSo+
KG1fcXRNb3ZpZS5nZXQoKSk7CisgICAgcmV0dXJuIHA7Cit9CisKKyNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCitQbGF0Zm9ybUxheWVyKiBNZWRpYVBsYXllclByaXZhdGU6OnBsYXRm
b3JtTGF5ZXIoKSBjb25zdAoreworICAgIHJldHVybiBtX3F0VmlkZW9MYXllciA/IG1fcXRWaWRl
b0xheWVyLT5wbGF0Zm9ybUxheWVyKCkgOiAwOworfQorI2VuZGlmCisKK2NsYXNzIFRhc2tUaW1l
ciA6IFRpbWVyQmFzZSB7CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZSgpOwor
ICAgIAorcHJpdmF0ZToKKyAgICBzdGF0aWMgdm9pZCBzZXRUYXNrVGltZXJEZWxheShkb3VibGUp
OworICAgIHN0YXRpYyB2b2lkIHN0b3BUYXNrVGltZXIoKTsKKworICAgIHZvaWQgZmlyZWQoKTsK
KworICAgIHN0YXRpYyBUYXNrVGltZXIqIHNfdGltZXI7Cit9OworCitUYXNrVGltZXIqIFRhc2tU
aW1lcjo6c190aW1lciA9IDA7CisKK3ZvaWQgVGFza1RpbWVyOjppbml0aWFsaXplKCkKK3sKKyAg
ICBpZiAoc190aW1lcikKKyAgICAgICAgcmV0dXJuOworCisgICAgc190aW1lciA9IG5ldyBUYXNr
VGltZXI7CisKKyAgICBRVE1vdmllV2luOjpzZXRUYXNrVGltZXJGdW5jcyhzZXRUYXNrVGltZXJE
ZWxheSwgc3RvcFRhc2tUaW1lcik7Cit9CisKK3ZvaWQgVGFza1RpbWVyOjpzZXRUYXNrVGltZXJE
ZWxheShkb3VibGUgZGVsYXlJblNlY29uZHMpCit7CisgICAgQVNTRVJUKHNfdGltZXIpOworCisg
ICAgc190aW1lci0+c3RhcnRPbmVTaG90KGRlbGF5SW5TZWNvbmRzKTsKK30KKwordm9pZCBUYXNr
VGltZXI6OnN0b3BUYXNrVGltZXIoKQoreworICAgIEFTU0VSVChzX3RpbWVyKTsKKworICAgIHNf
dGltZXItPnN0b3AoKTsKK30KKwordm9pZCBUYXNrVGltZXI6OmZpcmVkKCkKK3sKKyAgICBRVE1v
dmllV2luOjp0YXNrVGltZXJGaXJlZCgpOworfQorCitTdHJpbmcgTWVkaWFQbGF5ZXJQcml2YXRl
OjpyZmMyNjE2RGF0ZVN0cmluZ0Zyb21UaW1lKENGQWJzb2x1dGVUaW1lIHRpbWUpCit7CisgICAg
c3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGRheVN0cmluZ3NbXSA9IHsgIk1vbiIsICJUdWUiLCAi
V2VkIiwgIlRodSIsICJGcmkiLCAiU2F0IiwgIlN1biIgfTsKKyAgICBzdGF0aWMgY29uc3QgY2hh
ciogY29uc3QgbW9udGhTdHJpbmdzW10gPSB7ICJKYW4iLCAiRmViIiwgIk1hciIsICJBcHIiLCAi
TWF5IiwgIkp1biIsICJKdWwiLCAiQXVnIiwgIlNlcCIsICJPY3QiLCAiTm92IiwgIkRlYyIgfTsK
KyAgICBzdGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYgZGF0ZUZvcm1hdFN0cmluZyA9IENGU1RSKCIl
cywgJTAyZCAlcyAlMDRkICUwMmQ6JTAyZDolMDJkIEdNVCIpOworICAgIHN0YXRpYyBDRlRpbWVa
b25lUmVmIGdtdFRpbWVab25lOworICAgIGlmICghZ210VGltZVpvbmUpCisgICAgICAgIGdtdFRp
bWVab25lID0gQ0ZUaW1lWm9uZUNvcHlEZWZhdWx0KCk7CisKKyAgICBDRkdyZWdvcmlhbkRhdGUg
ZGF0ZVZhbHVlID0gQ0ZBYnNvbHV0ZVRpbWVHZXRHcmVnb3JpYW5EYXRlKHRpbWUsIGdtdFRpbWVa
b25lKTsgCisgICAgaWYgKCFDRkdyZWdvcmlhbkRhdGVJc1ZhbGlkKGRhdGVWYWx1ZSwga0NGR3Jl
Z29yaWFuQWxsVW5pdHMpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICB0aW1lID0g
Q0ZHcmVnb3JpYW5EYXRlR2V0QWJzb2x1dGVUaW1lKGRhdGVWYWx1ZSwgZ210VGltZVpvbmUpOwor
ICAgIFNJbnQzMiBkYXkgPSBDRkFic29sdXRlVGltZUdldERheU9mV2Vlayh0aW1lLCAwKTsKKwor
ICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gZGF0ZUNGU3RyaW5nKEFkb3B0Q0YsIENGU3RyaW5n
Q3JlYXRlV2l0aEZvcm1hdCgwLCAwLCBkYXRlRm9ybWF0U3RyaW5nLCBkYXlTdHJpbmdzW2RheSAt
IDFdLCBkYXRlVmFsdWUuZGF5LCAKKyAgICAgICAgbW9udGhTdHJpbmdzW2RhdGVWYWx1ZS5tb250
aCAtIDFdLCBkYXRlVmFsdWUueWVhciwgZGF0ZVZhbHVlLmhvdXIsIGRhdGVWYWx1ZS5taW51dGUs
IChpbnQpZGF0ZVZhbHVlLnNlY29uZCkpOworICAgIHJldHVybiBkYXRlQ0ZTdHJpbmcuZ2V0KCk7
Cit9CisKK3N0YXRpYyB2b2lkIGFkZENvb2tpZVBhcmFtKFN0cmluZ0J1aWxkZXImIGNvb2tpZUJ1
aWxkZXIsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBp
ZiAobmFtZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIElmIHRoaXMgaXNu
J3QgdGhlIGZpcnN0IHBhcmFtZXRlciBhZGRlZCwgdGVybWluYXRlIHRoZSBwcmV2aW91cyBvbmUu
CisgICAgaWYgKGNvb2tpZUJ1aWxkZXIubGVuZ3RoKCkpCisgICAgICAgIGNvb2tpZUJ1aWxkZXIu
YXBwZW5kKCI7ICIpOworCisgICAgLy8gQWRkIHBhcmFtZXRlciBuYW1lLCBhbmQgdmFsdWUgaWYg
dGhlcmUgaXMgb25lLgorICAgIGNvb2tpZUJ1aWxkZXIuYXBwZW5kKG5hbWUpOworICAgIGlmICgh
dmFsdWUuaXNFbXB0eSgpKSB7CisgICAgICAgIGNvb2tpZUJ1aWxkZXIuYXBwZW5kKCI9Iik7Cisg
ICAgICAgIGNvb2tpZUJ1aWxkZXIuYXBwZW5kKHZhbHVlKTsKKyAgICB9Cit9CisKKwordm9pZCBN
ZWRpYVBsYXllclByaXZhdGU6OnNldFVwQ29va2llc0ZvclF1aWNrVGltZShjb25zdCBTdHJpbmcm
IHVybCkKK3sKKyAgICAvLyBXZWJDb3JlIGxvYWRlZCB0aGUgcGFnZSB3aXRoIHRoZSBtb3ZpZSBV
Ukwgd2l0aCBDRk5ldHdvcmsgYnV0IFF1aWNrVGltZSB3aWxsIAorICAgIC8vIHVzZSBXaW5JTmV0
IHRvIGRvd25sb2FkIHRoZSBtb3ZpZSwgc28gd2UgbmVlZCB0byBjb3B5IGFueSBjb29raWVzIG5l
ZWRlZCB0bworICAgIC8vIGRvd25sb2FkIHRoZSBtb3ZpZSBpbnRvIFdpbkluZXQgYmVmb3JlIGFz
a2luZyBRdWlja1RpbWUgdG8gb3BlbiBpdC4KKyAgICBGcmFtZSogZnJhbWUgPSBtX3BsYXllci0+
ZnJhbWVWaWV3KCkgPyBtX3BsYXllci0+ZnJhbWVWaWV3KCktPmZyYW1lKCkgOiAwOworICAgIGlm
ICghZnJhbWUgfHwgIWZyYW1lLT5wYWdlKCkgfHwgIWZyYW1lLT5wYWdlKCktPmNvb2tpZUVuYWJs
ZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgS1VSTCBtb3ZpZVVSTCA9IEtVUkwoS1VSTCgp
LCB1cmwpOworICAgIFZlY3RvcjxDb29raWU+IGRvY3VtZW50Q29va2llczsKKyAgICBpZiAoIWdl
dFJhd0Nvb2tpZXMoZnJhbWUtPmRvY3VtZW50KCksIG1vdmllVVJMLCBkb2N1bWVudENvb2tpZXMp
KQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKHNpemVfdCBuZHggPSAwOyBuZHggPCBkb2N1
bWVudENvb2tpZXMuc2l6ZSgpOyBuZHgrKykgeworICAgICAgICBjb25zdCBDb29raWUmIGNvb2tp
ZSA9IGRvY3VtZW50Q29va2llc1tuZHhdOworCisgICAgICAgIGlmIChjb29raWUubmFtZS5pc0Vt
cHR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvLyBCdWlsZCB1cCB0aGUg
Y29va2llIHN0cmluZyB3aXRoIGFzIG11Y2ggaW5mb3JtYXRpb24gYXMgd2UgY2FuIGdldCBzbyBX
aW5JTmV0CisgICAgICAgIC8vIGtub3dzIHdoYXQgdG8gZG8gd2l0aCBpdC4KKyAgICAgICAgU3Ry
aW5nQnVpbGRlciBjb29raWVCdWlsZGVyOworICAgICAgICBhZGRDb29raWVQYXJhbShjb29raWVC
dWlsZGVyLCBjb29raWUubmFtZSwgY29va2llLnZhbHVlKTsKKyAgICAgICAgYWRkQ29va2llUGFy
YW0oY29va2llQnVpbGRlciwgInBhdGgiLCBjb29raWUucGF0aCk7CisgICAgICAgIGlmIChjb29r
aWUuZXhwaXJlcykgCisgICAgICAgICAgICBhZGRDb29raWVQYXJhbShjb29raWVCdWlsZGVyLCAi
ZXhwaXJlcyIsIHJmYzI2MTZEYXRlU3RyaW5nRnJvbVRpbWUoY29va2llLmV4cGlyZXMpKTsKKyAg
ICAgICAgaWYgKGNvb2tpZS5odHRwT25seSkgCisgICAgICAgICAgICBhZGRDb29raWVQYXJhbShj
b29raWVCdWlsZGVyLCAiaHR0cE9ubHkiLCBTdHJpbmcoKSk7CisgICAgICAgIGNvb2tpZUJ1aWxk
ZXIuYXBwZW5kKCI7Iik7CisKKyAgICAgICAgU3RyaW5nIGNvb2tpZVVSTDsKKyAgICAgICAgaWYg
KCFjb29raWUuZG9tYWluLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgU3RyaW5nQnVpbGRlciB1
cmxCdWlsZGVyOworCisgICAgICAgICAgICB1cmxCdWlsZGVyLmFwcGVuZChtb3ZpZVVSTC5wcm90
b2NvbCgpKTsKKyAgICAgICAgICAgIHVybEJ1aWxkZXIuYXBwZW5kKCI6Ly8iKTsKKyAgICAgICAg
ICAgIGlmIChjb29raWUuZG9tYWluWzBdID09ICcuJykKKyAgICAgICAgICAgICAgICB1cmxCdWls
ZGVyLmFwcGVuZChjb29raWUuZG9tYWluLnN1YnN0cmluZygxKSk7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgdXJsQnVpbGRlci5hcHBlbmQoY29va2llLmRvbWFpbik7CisgICAg
ICAgICAgICBpZiAoY29va2llLnBhdGgubGVuZ3RoKCkgPiAxKQorICAgICAgICAgICAgICAgIHVy
bEJ1aWxkZXIuYXBwZW5kKGNvb2tpZS5wYXRoKTsKKworICAgICAgICAgICAgY29va2llVVJMID0g
dXJsQnVpbGRlci50b1N0cmluZygpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGNvb2tp
ZVVSTCA9IG1vdmllVVJMOworCisgICAgICAgIEludGVybmV0U2V0Q29va2llRXhXKGNvb2tpZVVS
TC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLCAwLCBjb29raWVCdWlsZGVyLnRvU3Ry
aW5nKCkuY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgMCwgMCk7CisgICAgfQorfQor
Cit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6bG9hZChjb25zdCBTdHJpbmcmIHVybCkKK3sKKyAg
ICBpZiAoIVFUTW92aWVXaW46OmluaXRpYWxpemVRdWlja1RpbWUoKSkgeworICAgICAgICAvLyBG
SVhNRTogaXMgdGhpcyB0aGUgcmlnaHQgZXJyb3IgdG8gcmV0dXJuPworICAgICAgICBtX25ldHdv
cmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpEZWNvZGVFcnJvcjsgCisgICAgICAgIG1fcGxheWVyLT5u
ZXR3b3JrU3RhdGVDaGFuZ2VkKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBJ
bml0aWFsaXplIHRoZSB0YXNrIHRpbWVyLgorICAgIFRhc2tUaW1lcjo6aW5pdGlhbGl6ZSgpOwor
CisgICAgaWYgKG1fbmV0d29ya1N0YXRlICE9IE1lZGlhUGxheWVyOjpMb2FkaW5nKSB7CisgICAg
ICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkxvYWRpbmc7CisgICAgICAgIG1fcGxh
eWVyLT5uZXR3b3JrU3RhdGVDaGFuZ2VkKCk7CisgICAgfQorICAgIGlmIChtX3JlYWR5U3RhdGUg
IT0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nKSB7CisgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1l
ZGlhUGxheWVyOjpIYXZlTm90aGluZzsKKyAgICAgICAgbV9wbGF5ZXItPnJlYWR5U3RhdGVDaGFu
Z2VkKCk7CisgICAgfQorICAgIGNhbmNlbFNlZWsoKTsKKworICAgIHNldFVwQ29va2llc0ZvclF1
aWNrVGltZSh1cmwpOworCisgICAgbV9xdE1vdmllLnNldChuZXcgUVRNb3ZpZVdpbih0aGlzKSk7
CisgICAgbV9xdE1vdmllLT5sb2FkKHVybC5jaGFyYWN0ZXJzKCksIHVybC5sZW5ndGgoKSwgbV9w
bGF5ZXItPnByZXNlcnZlc1BpdGNoKCkpOworICAgIG1fcXRNb3ZpZS0+c2V0Vm9sdW1lKG1fcGxh
eWVyLT52b2x1bWUoKSk7CisgICAgbV9xdE1vdmllLT5zZXRWaXNpYmxlKG1fcGxheWVyLT52aXNp
YmxlKCkpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6cGxheSgpCit7CisgICAgaWYg
KCFtX3F0TW92aWUpCisgICAgICAgIHJldHVybjsKKyAgICBtX3N0YXJ0ZWRQbGF5aW5nID0gdHJ1
ZTsKKyNpZiBEUkFXX0ZSQU1FX1JBVEUKKyAgICBtX2ZyYW1lQ291bnRXaGlsZVBsYXlpbmcgPSAw
OworI2VuZGlmCisKKyAgICBtX3F0TW92aWUtPnBsYXkoKTsKK30KKwordm9pZCBNZWRpYVBsYXll
clByaXZhdGU6OnBhdXNlKCkKK3sKKyAgICBpZiAoIW1fcXRNb3ZpZSkKKyAgICAgICAgcmV0dXJu
OworICAgIG1fc3RhcnRlZFBsYXlpbmcgPSBmYWxzZTsKKyNpZiBEUkFXX0ZSQU1FX1JBVEUKKyAg
ICBtX3RpbWVTdG9wcGVkUGxheWluZyA9IFdURjo6Y3VycmVudFRpbWUoKTsKKyNlbmRpZgorICAg
IG1fcXRNb3ZpZS0+cGF1c2UoKTsKK30KKworZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlOjpkdXJh
dGlvbigpIGNvbnN0Cit7CisgICAgaWYgKCFtX3F0TW92aWUpCisgICAgICAgIHJldHVybiAwOwor
ICAgIHJldHVybiBtX3F0TW92aWUtPmR1cmF0aW9uKCk7Cit9CisKK2Zsb2F0IE1lZGlhUGxheWVy
UHJpdmF0ZTo6Y3VycmVudFRpbWUoKSBjb25zdAoreworICAgIGlmICghbV9xdE1vdmllKQorICAg
ICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbV9xdE1vdmllLT5jdXJyZW50VGltZSgpOworfQor
Cit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2VlayhmbG9hdCB0aW1lKQoreworICAgIGNhbmNl
bFNlZWsoKTsKKyAgICAKKyAgICBpZiAoIW1fcXRNb3ZpZSkKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIGlmICh0aW1lID4gZHVyYXRpb24oKSkKKyAgICAgICAgdGltZSA9IGR1cmF0aW9uKCk7
CisgICAgCisgICAgbV9zZWVrVG8gPSB0aW1lOworICAgIGlmIChtYXhUaW1lTG9hZGVkKCkgPj0g
bV9zZWVrVG8pCisgICAgICAgIGRvU2VlaygpOworICAgIGVsc2UgCisgICAgICAgIG1fc2Vla1Rp
bWVyLnN0YXJ0KDAsIDAuNWYpOworfQorICAgIAordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmRv
U2VlaygpIAoreworICAgIGZsb2F0IG9sZFJhdGUgPSBtX3F0TW92aWUtPnJhdGUoKTsKKyAgICBp
ZiAob2xkUmF0ZSkKKyAgICAgICAgbV9xdE1vdmllLT5zZXRSYXRlKDApOworICAgIG1fcXRNb3Zp
ZS0+c2V0Q3VycmVudFRpbWUobV9zZWVrVG8pOworICAgIGZsb2F0IHRpbWVBZnRlclNlZWsgPSBj
dXJyZW50VGltZSgpOworICAgIC8vIHJlc3RvcmUgcGxheWJhY2sgb25seSBpZiBub3QgYXQgZW5k
LCBvdGhld2lzZSBRVE1vdmllIHdpbGwgbG9vcAorICAgIGlmIChvbGRSYXRlICYmIHRpbWVBZnRl
clNlZWsgPCBkdXJhdGlvbigpKQorICAgICAgICBtX3F0TW92aWUtPnNldFJhdGUob2xkUmF0ZSk7
CisgICAgY2FuY2VsU2VlaygpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6Y2FuY2Vs
U2VlaygpCit7CisgICAgbV9zZWVrVG8gPSAtMTsKKyAgICBtX3NlZWtUaW1lci5zdG9wKCk7Cit9
CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZWVrVGltZXJGaXJlZChUaW1lcjxNZWRpYVBs
YXllclByaXZhdGU+KikKK3sgICAgICAgIAorICAgIGlmICghbV9xdE1vdmllIHx8ICFzZWVraW5n
KCkgfHwgY3VycmVudFRpbWUoKSA9PSBtX3NlZWtUbykgeworICAgICAgICBjYW5jZWxTZWVrKCk7
CisgICAgICAgIHVwZGF0ZVN0YXRlcygpOworICAgICAgICBtX3BsYXllci0+dGltZUNoYW5nZWQo
KTsgCisgICAgICAgIHJldHVybjsKKyAgICB9IAorICAgIAorICAgIGlmIChtYXhUaW1lTG9hZGVk
KCkgPj0gbV9zZWVrVG8pCisgICAgICAgIGRvU2VlaygpOworICAgIGVsc2UgeworICAgICAgICBN
ZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIHN0YXRlID0gbmV0d29ya1N0YXRlKCk7CisgICAgICAg
IGlmIChzdGF0ZSA9PSBNZWRpYVBsYXllcjo6RW1wdHkgfHwgc3RhdGUgPT0gTWVkaWFQbGF5ZXI6
OkxvYWRlZCkgeworICAgICAgICAgICAgY2FuY2VsU2VlaygpOworICAgICAgICAgICAgdXBkYXRl
U3RhdGVzKCk7CisgICAgICAgICAgICBtX3BsYXllci0+dGltZUNoYW5nZWQoKTsKKyAgICAgICAg
fQorICAgIH0KK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGU6OnBhdXNlZCgpIGNvbnN0Cit7
CisgICAgaWYgKCFtX3F0TW92aWUpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBt
X3F0TW92aWUtPnJhdGUoKSA9PSAwLjBmOworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6
c2Vla2luZygpIGNvbnN0Cit7CisgICAgaWYgKCFtX3F0TW92aWUpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICByZXR1cm4gbV9zZWVrVG8gPj0gMDsKK30KKworSW50U2l6ZSBNZWRpYVBsYXll
clByaXZhdGU6Om5hdHVyYWxTaXplKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcXRNb3ZpZSkKKyAg
ICAgICAgcmV0dXJuIEludFNpemUoKTsKKyAgICBpbnQgd2lkdGg7CisgICAgaW50IGhlaWdodDsK
KyAgICBtX3F0TW92aWUtPmdldE5hdHVyYWxTaXplKHdpZHRoLCBoZWlnaHQpOworICAgIHJldHVy
biBJbnRTaXplKHdpZHRoLCBoZWlnaHQpOworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6
aGFzVmlkZW8oKSBjb25zdAoreworICAgIGlmICghbV9xdE1vdmllKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgcmV0dXJuIG1fcXRNb3ZpZS0+aGFzVmlkZW8oKTsKK30KKworYm9vbCBNZWRp
YVBsYXllclByaXZhdGU6Omhhc0F1ZGlvKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcXRNb3ZpZSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBtX3F0TW92aWUtPmhhc0F1ZGlvKCk7
Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRWb2x1bWUoZmxvYXQgdm9sdW1lKQor
eworICAgIGlmICghbV9xdE1vdmllKQorICAgICAgICByZXR1cm47CisgICAgbV9xdE1vdmllLT5z
ZXRWb2x1bWUodm9sdW1lKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNldFJhdGUo
ZmxvYXQgcmF0ZSkKK3sKKyAgICBpZiAoIW1fcXRNb3ZpZSkKKyAgICAgICAgcmV0dXJuOworICAg
IG1fcXRNb3ZpZS0+c2V0UmF0ZShyYXRlKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6
OnNldFByZXNlcnZlc1BpdGNoKGJvb2wgcHJlc2VydmVzUGl0Y2gpCit7CisgICAgaWYgKCFtX3F0
TW92aWUpCisgICAgICAgIHJldHVybjsKKyAgICBtX3F0TW92aWUtPnNldFByZXNlcnZlc1BpdGNo
KHByZXNlcnZlc1BpdGNoKTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGU6Omhhc0Nsb3Nl
ZENhcHRpb25zKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcXRNb3ZpZSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIHJldHVybiBtX3F0TW92aWUtPmhhc0Nsb3NlZENhcHRpb25zKCk7Cit9CisK
K3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRDbG9zZWRDYXB0aW9uc1Zpc2libGUoYm9vbCB2
aXNpYmxlKQoreworICAgIGlmICghbV9xdE1vdmllKQorICAgICAgICByZXR1cm47CisgICAgbV9x
dE1vdmllLT5zZXRDbG9zZWRDYXB0aW9uc1Zpc2libGUodmlzaWJsZSk7Cit9CisKK1Bhc3NSZWZQ
dHI8VGltZVJhbmdlcz4gTWVkaWFQbGF5ZXJQcml2YXRlOjpidWZmZXJlZCgpIGNvbnN0Cit7Cisg
ICAgUmVmUHRyPFRpbWVSYW5nZXM+IHRpbWVSYW5nZXMgPSBUaW1lUmFuZ2VzOjpjcmVhdGUoKTsK
KyAgICBmbG9hdCBsb2FkZWQgPSBtYXhUaW1lTG9hZGVkKCk7CisgICAgLy8gcnRzcCBzdHJlYW1z
IGFyZSBub3QgYnVmZmVyZWQKKyAgICBpZiAoIW1faXNTdHJlYW1pbmcgJiYgbG9hZGVkID4gMCkK
KyAgICAgICAgdGltZVJhbmdlcy0+YWRkKDAsIGxvYWRlZCk7CisgICAgcmV0dXJuIHRpbWVSYW5n
ZXMucmVsZWFzZSgpOworfQorCitmbG9hdCBNZWRpYVBsYXllclByaXZhdGU6Om1heFRpbWVTZWVr
YWJsZSgpIGNvbnN0Cit7CisgICAgLy8gaW5maW5pdGUgZHVyYXRpb24gbWVhbnMgbGl2ZSBzdHJl
YW0KKyAgICByZXR1cm4gIWlzZmluaXRlKGR1cmF0aW9uKCkpID8gMCA6IG1heFRpbWVMb2FkZWQo
KTsKK30KKworZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlOjptYXhUaW1lTG9hZGVkKCkgY29uc3QK
K3sKKyAgICBpZiAoIW1fcXRNb3ZpZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG1f
cXRNb3ZpZS0+bWF4VGltZUxvYWRlZCgpOyAKK30KKwordW5zaWduZWQgTWVkaWFQbGF5ZXJQcml2
YXRlOjpieXRlc0xvYWRlZCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3F0TW92aWUpCisgICAgICAg
IHJldHVybiAwOworICAgIGZsb2F0IGR1ciA9IGR1cmF0aW9uKCk7CisgICAgZmxvYXQgbWF4VGlt
ZSA9IG1heFRpbWVMb2FkZWQoKTsKKyAgICBpZiAoIWR1cikKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgcmV0dXJuIHRvdGFsQnl0ZXMoKSAqIG1heFRpbWUgLyBkdXI7Cit9CisKK3Vuc2lnbmVkIE1l
ZGlhUGxheWVyUHJpdmF0ZTo6dG90YWxCeXRlcygpIGNvbnN0Cit7CisgICAgaWYgKCFtX3F0TW92
aWUpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBtX3F0TW92aWUtPmRhdGFTaXplKCk7
Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpjYW5jZWxMb2FkKCkKK3sKKyAgICBpZiAo
bV9uZXR3b3JrU3RhdGUgPCBNZWRpYVBsYXllcjo6TG9hZGluZyB8fCBtX25ldHdvcmtTdGF0ZSA9
PSBNZWRpYVBsYXllcjo6TG9hZGVkKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgdGVhckRv
d25WaWRlb1JlbmRlcmluZygpOworCisgICAgLy8gQ2FuY2VsIHRoZSBsb2FkIGJ5IGRlc3Ryb3lp
bmcgdGhlIG1vdmllLgorICAgIG1fcXRNb3ZpZS5jbGVhcigpOworCisgICAgdXBkYXRlU3RhdGVz
KCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjp1cGRhdGVTdGF0ZXMoKQoreworICAg
IE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgb2xkTmV0d29ya1N0YXRlID0gbV9uZXR3b3JrU3Rh
dGU7CisgICAgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgb2xkUmVhZHlTdGF0ZSA9IG1fcmVhZHlT
dGF0ZTsKKyAgCisgICAgbG9uZyBsb2FkU3RhdGUgPSBtX3F0TW92aWUgPyBtX3F0TW92aWUtPmxv
YWRTdGF0ZSgpIDogUVRNb3ZpZUxvYWRTdGF0ZUVycm9yOworCisgICAgaWYgKGxvYWRTdGF0ZSA+
PSBRVE1vdmllTG9hZFN0YXRlTG9hZGVkICYmIG1fcmVhZHlTdGF0ZSA8IE1lZGlhUGxheWVyOjpI
YXZlTWV0YWRhdGEpIHsKKyAgICAgICAgbV9xdE1vdmllLT5kaXNhYmxlVW5zdXBwb3J0ZWRUcmFj
a3MobV9lbmFibGVkVHJhY2tDb3VudCwgbV90b3RhbFRyYWNrQ291bnQpOworICAgICAgICBpZiAo
bV9wbGF5ZXItPmluTWVkaWFEb2N1bWVudCgpKSB7CisgICAgICAgICAgICBpZiAoIW1fZW5hYmxl
ZFRyYWNrQ291bnQgfHwgbV9lbmFibGVkVHJhY2tDb3VudCAhPSBtX3RvdGFsVHJhY2tDb3VudCkg
eworICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSB0eXBlIG9mIG1lZGlhIHRoYXQgd2UgZG8g
bm90IGhhbmRsZSBkaXJlY3RseSB3aXRoIGEgPHZpZGVvPiAKKyAgICAgICAgICAgICAgICAvLyBl
bGVtZW50LCBlZy4gUXVpY2tUaW1lIFZSLCBhIG1vdmllIHdpdGggYSBzcHJpdGUgdHJhY2ssIGV0
Yy4gVGVsbCB0aGUgCisgICAgICAgICAgICAgICAgLy8gTWVkaWFQbGF5ZXJDbGllbnQgdGhhdCB3
ZSB3b24ndCBzdXBwb3J0IGl0LgorICAgICAgICAgICAgICAgIHNhd1Vuc3VwcG9ydGVkVHJhY2tz
KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9IGVs
c2UgaWYgKCFtX2VuYWJsZWRUcmFja0NvdW50KQorICAgICAgICAgICAgbG9hZFN0YXRlID0gUVRN
b3ZpZUxvYWRTdGF0ZUVycm9yOworICAgIH0KKworICAgIC8vICJMb2FkZWQiIGlzIHJlc2VydmVk
IGZvciBmdWxseSBidWZmZXJlZCBtb3ZpZXMsIG5ldmVyIHRoZSBjYXNlIHdoZW4gc3RyZWFtaW5n
CisgICAgaWYgKGxvYWRTdGF0ZSA+PSBRVE1vdmllTG9hZFN0YXRlQ29tcGxldGUgJiYgIW1faXNT
dHJlYW1pbmcpIHsKKyAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TG9hZGVk
OworICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUVub3VnaERhdGE7Cisg
ICAgfSBlbHNlIGlmIChsb2FkU3RhdGUgPj0gUVRNb3ZpZUxvYWRTdGF0ZVBsYXl0aHJvdWdoT0sp
IHsKKyAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVFbm91Z2hEYXRhOwor
ICAgIH0gZWxzZSBpZiAobG9hZFN0YXRlID49IFFUTW92aWVMb2FkU3RhdGVQbGF5YWJsZSkgewor
ICAgICAgICAvLyBGSVhNRTogVGhpcyBtaWdodCBub3Qgd29yayBjb3JyZWN0bHkgaW4gc3RyZWFt
aW5nIGNhc2UsIDxyZGFyOi8vcHJvYmxlbS81NjkzOTY3PgorICAgICAgICBtX3JlYWR5U3RhdGUg
PSBjdXJyZW50VGltZSgpIDwgbWF4VGltZUxvYWRlZCgpID8gTWVkaWFQbGF5ZXI6OkhhdmVGdXR1
cmVEYXRhIDogTWVkaWFQbGF5ZXI6OkhhdmVDdXJyZW50RGF0YTsKKyAgICB9IGVsc2UgaWYgKGxv
YWRTdGF0ZSA+PSBRVE1vdmllTG9hZFN0YXRlTG9hZGVkKSB7CisgICAgICAgIG1fcmVhZHlTdGF0
ZSA9IE1lZGlhUGxheWVyOjpIYXZlTWV0YWRhdGE7CisgICAgfSBlbHNlIGlmIChsb2FkU3RhdGUg
PiBRVE1vdmllTG9hZFN0YXRlRXJyb3IpIHsKKyAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRp
YVBsYXllcjo6TG9hZGluZzsKKyAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6Okhh
dmVOb3RoaW5nOyAgICAgICAgCisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG1fcGxheWVyLT5p
bk1lZGlhRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgLy8gU29tZXRoaW5nIHdlbnQgd3Jvbmcg
aW4gdGhlIGxvYWRpbmcgb2YgbWVkaWEgd2l0aGluIGEgc3RhbmRhbG9uZSBmaWxlLiAKKyAgICAg
ICAgICAgIC8vIFRoaXMgY2FuIG9jY3VyIHdpdGggY2hhaW5lZCByZWYgbW92aWVzIHRoYXQgZXZl
bnR1YWxseSByZXNvbHZlIHRvIGEKKyAgICAgICAgICAgIC8vIGZpbGUgd2UgZG9uJ3Qgc3VwcG9y
dC4KKyAgICAgICAgICAgIHNhd1Vuc3VwcG9ydGVkVHJhY2tzKCk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBmbG9hdCBsb2FkZWQgPSBtYXhUaW1lTG9hZGVkKCk7
CisgICAgICAgIGlmICghbG9hZGVkKQorICAgICAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQ
bGF5ZXI6OkhhdmVOb3RoaW5nOworCisgICAgICAgIGlmICghbV9lbmFibGVkVHJhY2tDb3VudCkK
KyAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkZvcm1hdEVycm9yOwor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZGlmZmVyZW50
aWF0ZSBiZXR3ZWVuIGxvYWQvbmV0d29yayBlcnJvcnMgYW5kIGRlY29kZSBlcnJvcnMgPHJkYXI6
Ly9wcm9ibGVtLzU2MDU2OTI+CisgICAgICAgICAgICBpZiAobG9hZGVkID4gMCkKKyAgICAgICAg
ICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpEZWNvZGVFcnJvcjsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6
SGF2ZU5vdGhpbmc7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoaXNSZWFkeUZvclJlbmRl
cmluZygpICYmICFoYXNTZXRVcFZpZGVvUmVuZGVyaW5nKCkpCisgICAgICAgIHNldFVwVmlkZW9S
ZW5kZXJpbmcoKTsKKworICAgIGlmIChzZWVraW5nKCkpCisgICAgICAgIG1fcmVhZHlTdGF0ZSA9
IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZzsKKyAgICAKKyAgICBpZiAobV9uZXR3b3JrU3RhdGUg
IT0gb2xkTmV0d29ya1N0YXRlKQorICAgICAgICBtX3BsYXllci0+bmV0d29ya1N0YXRlQ2hhbmdl
ZCgpOworICAgIGlmIChtX3JlYWR5U3RhdGUgIT0gb2xkUmVhZHlTdGF0ZSkKKyAgICAgICAgbV9w
bGF5ZXItPnJlYWR5U3RhdGVDaGFuZ2VkKCk7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRl
Ojppc1JlYWR5Rm9yUmVuZGVyaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9yZWFkeVN0YXRl
ID49IE1lZGlhUGxheWVyOjpIYXZlTWV0YWRhdGEgJiYgbV9wbGF5ZXItPnZpc2libGUoKTsKK30K
Kwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNhd1Vuc3VwcG9ydGVkVHJhY2tzKCkKK3sKKyAg
ICBtX3F0TW92aWUtPnNldERpc2FibGVkKHRydWUpOworICAgIG1faGFzVW5zdXBwb3J0ZWRUcmFj
a3MgPSB0cnVlOworICAgIG1fcGxheWVyLT5tZWRpYVBsYXllckNsaWVudCgpLT5tZWRpYVBsYXll
clNhd1Vuc3VwcG9ydGVkVHJhY2tzKG1fcGxheWVyKTsKK30KKwordm9pZCBNZWRpYVBsYXllclBy
aXZhdGU6OmRpZEVuZCgpCit7CisgICAgaWYgKG1faGFzVW5zdXBwb3J0ZWRUcmFja3MpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fc3RhcnRlZFBsYXlpbmcgPSBmYWxzZTsKKyNpZiBEUkFXX0ZS
QU1FX1JBVEUKKyAgICBtX3RpbWVTdG9wcGVkUGxheWluZyA9IFdURjo6Y3VycmVudFRpbWUoKTsK
KyNlbmRpZgorICAgIHVwZGF0ZVN0YXRlcygpOworICAgIG1fcGxheWVyLT50aW1lQ2hhbmdlZCgp
OworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0U2l6ZShjb25zdCBJbnRTaXplJiBz
aXplKSAKK3sgCisgICAgaWYgKG1faGFzVW5zdXBwb3J0ZWRUcmFja3MgfHwgIW1fcXRNb3ZpZSB8
fCBtX3NpemUgPT0gc2l6ZSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fc2l6ZSA9IHNpemU7Cisg
ICAgbV9xdE1vdmllLT5zZXRTaXplKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Cit9CisK
K3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKK3sKKyAg
ICBpZiAobV9oYXNVbnN1cHBvcnRlZFRyYWNrcyB8fCAhbV9xdE1vdmllIHx8IG1fdmlzaWJsZSA9
PSB2aXNpYmxlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3F0TW92aWUtPnNldFZpc2libGUo
dmlzaWJsZSk7CisgICAgbV92aXNpYmxlID0gdmlzaWJsZTsKKyAgICBpZiAobV92aXNpYmxlKSB7
CisgICAgICAgIGlmIChpc1JlYWR5Rm9yUmVuZGVyaW5nKCkpCisgICAgICAgICAgICBzZXRVcFZp
ZGVvUmVuZGVyaW5nKCk7CisgICAgfSBlbHNlCisgICAgICAgIHRlYXJEb3duVmlkZW9SZW5kZXJp
bmcoKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnBhaW50KEdyYXBoaWNzQ29udGV4
dCogcCwgY29uc3QgSW50UmVjdCYgcikKK3sKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCisgICAgaWYgKG1fcXRWaWRlb0xheWVyKQorICAgICAgICByZXR1cm47CisjZW5kaWYKKyAg
ICBpZiAocC0+cGFpbnRpbmdEaXNhYmxlZCgpIHx8ICFtX3F0TW92aWUgfHwgbV9oYXNVbnN1cHBv
cnRlZFRyYWNrcykKKyAgICAgICAgcmV0dXJuOworCisgICAgYm9vbCB1c2luZ1RlbXBCaXRtYXAg
PSBmYWxzZTsKKyAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0OjpXaW5kb3dzQml0bWFwPiBiaXRt
YXA7CisgICAgSERDIGhkYyA9IHAtPmdldFdpbmRvd3NDb250ZXh0KHIpOworICAgIGlmICghaGRj
KSB7CisgICAgICAgIC8vIFRoZSBncmFwaGljcyBjb250ZXh0IGRvZXNuJ3QgaGF2ZSBhbiBhc3Nv
Y2lhdGVkIEhEQyBzbyBjcmVhdGUgYSB0ZW1wb3JhcnkKKyAgICAgICAgLy8gYml0bWFwIHdoZXJl
IFFUTW92aWVXaW4gY2FuIGRyYXcgdGhlIGZyYW1lIGFuZCB3ZSBjYW4gY29weSBpdC4KKyAgICAg
ICAgdXNpbmdUZW1wQml0bWFwID0gdHJ1ZTsKKyAgICAgICAgYml0bWFwLnNldChwLT5jcmVhdGVX
aW5kb3dzQml0bWFwKHIuc2l6ZSgpKSk7CisgICAgICAgIGhkYyA9IGJpdG1hcC0+aGRjKCk7CisK
KyAgICAgICAgLy8gRklYTUU6IGlzIHRoaXMgbmVjZXNzYXJ5Pz8KKyAgICAgICAgWEZPUk0geGZv
cm07CisgICAgICAgIHhmb3JtLmVNMTEgPSAxLjBmOworICAgICAgICB4Zm9ybS5lTTEyID0gMC4w
ZjsKKyAgICAgICAgeGZvcm0uZU0yMSA9IDAuMGY7CisgICAgICAgIHhmb3JtLmVNMjIgPSAxLjBm
OworICAgICAgICB4Zm9ybS5lRHggPSAtci54KCk7CisgICAgICAgIHhmb3JtLmVEeSA9IC1yLnko
KTsKKyAgICAgICAgU2V0V29ybGRUcmFuc2Zvcm0oaGRjLCAmeGZvcm0pOworICAgIH0KKworICAg
IG1fcXRNb3ZpZS0+cGFpbnQoaGRjLCByLngoKSwgci55KCkpOworICAgIGlmICh1c2luZ1RlbXBC
aXRtYXApCisgICAgICAgIHAtPmRyYXdXaW5kb3dzQml0bWFwKGJpdG1hcC5nZXQoKSwgci50b3BM
ZWZ0KCkpOworICAgIGVsc2UKKyAgICAgICAgcC0+cmVsZWFzZVdpbmRvd3NDb250ZXh0KGhkYywg
cik7CisKKyAgICBwYWludENvbXBsZXRlZCgqcCwgcik7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlOjpwYWludENvbXBsZXRlZChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IElu
dFJlY3QmIHJlY3QpCit7CisgICAgbV9uZXdGcmFtZUF2YWlsYWJsZSA9IGZhbHNlOworCisjaWYg
RFJBV19GUkFNRV9SQVRFCisgICAgaWYgKG1fZnJhbWVDb3VudFdoaWxlUGxheWluZyA+IDEwKSB7
CisgICAgICAgIGRvdWJsZSBpbnRlcnZhbCA9ICBtX3N0YXJ0ZWRQbGF5aW5nID8gV1RGOjpjdXJy
ZW50VGltZSgpIC0gbV90aW1lU3RhcnRlZFBsYXlpbmcgOiBtX3RpbWVTdG9wcGVkUGxheWluZyAt
IG1fdGltZVN0YXJ0ZWRQbGF5aW5nOworICAgICAgICBkb3VibGUgZnJhbWVSYXRlID0gKG1fZnJh
bWVDb3VudFdoaWxlUGxheWluZyAtIDEpIC8gaW50ZXJ2YWw7CisgICAgICAgIENHQ29udGV4dFJl
ZiBjZ0NvbnRleHQgPSBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOworICAgICAgICBDR1JlY3Qg
ZHJhd1JlY3QgPSByZWN0OworCisgICAgICAgIGNoYXIgdGV4dFs4XTsKKyAgICAgICAgX3NucHJp
bnRmKHRleHQsIHNpemVvZih0ZXh0KSwgIiUxLjJmIiwgZnJhbWVSYXRlKTsKKworICAgICAgICBz
dGF0aWMgY29uc3QgaW50IGZvbnRTaXplID0gMjU7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQg
Zm9udENoYXJXaWR0aCA9IDEyOworICAgICAgICBzdGF0aWMgY29uc3QgaW50IGJveEhlaWdodCA9
IDI1OworICAgICAgICBzdGF0aWMgY29uc3QgaW50IGJveEJvcmRlcldpZHRoID0gNDsKKyAgICAg
ICAgZHJhd1JlY3Quc2l6ZS53aWR0aCA9IGJveEJvcmRlcldpZHRoICogMiArIGZvbnRDaGFyV2lk
dGggKiBzdHJsZW4odGV4dCk7CisgICAgICAgIGRyYXdSZWN0LnNpemUuaGVpZ2h0ID0gYm94SGVp
Z2h0OworCisgICAgICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY2dDb250ZXh0KTsKKyNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgICAgIGlmIChtX3F0VmlkZW9MYXllcikKKyAg
ICAgICAgICAgIENHQ29udGV4dFNjYWxlQ1RNKGNnQ29udGV4dCwgMSwgLTEpOworICAgICAgICBD
R0NvbnRleHRUcmFuc2xhdGVDVE0oY2dDb250ZXh0LCByZWN0LndpZHRoKCkgLSBkcmF3UmVjdC5z
aXplLndpZHRoLCBtX3F0VmlkZW9MYXllciA/IC1yZWN0LmhlaWdodCgpIDogMCk7CisjZWxzZQor
ICAgICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY2dDb250ZXh0LCByZWN0LndpZHRoKCkgLSBk
cmF3UmVjdC5zaXplLndpZHRoLCAwKTsKKyNlbmRpZgorICAgICAgICBzdGF0aWMgY29uc3QgQ0dG
bG9hdCBiYWNrZ3JvdW5kQ29sb3JbNF0gPSB7IDAuOTgsIDAuOTgsIDAuODIsIDAuOCB9OworICAg
ICAgICBDR0NvbnRleHRTZXRGaWxsQ29sb3IoY2dDb250ZXh0LCBiYWNrZ3JvdW5kQ29sb3IpOwor
ICAgICAgICBDR0NvbnRleHRGaWxsUmVjdChjZ0NvbnRleHQsIGRyYXdSZWN0KTsKKworICAgICAg
ICBzdGF0aWMgY29uc3QgQ0dGbG9hdCB0ZXh0Q29sb3JbNF0gPSB7IDAsIDAsIDAsIDEgfTsKKyAg
ICAgICAgQ0dDb250ZXh0U2V0RmlsbENvbG9yKGNnQ29udGV4dCwgdGV4dENvbG9yKTsKKyAgICAg
ICAgQ0dDb250ZXh0U2V0VGV4dE1hdHJpeChjZ0NvbnRleHQsIENHQWZmaW5lVHJhbnNmb3JtTWFr
ZVNjYWxlKDEsIC0xKSk7CisgICAgICAgIENHQ29udGV4dFNlbGVjdEZvbnQoY2dDb250ZXh0LCAi
SGVsdmV0aWNhIiwgZm9udFNpemUsIGtDR0VuY29kaW5nTWFjUm9tYW4pOworCisgICAgICAgIENH
Q29udGV4dFNob3dUZXh0QXRQb2ludChjZ0NvbnRleHQsIGRyYXdSZWN0Lm9yaWdpbi54ICsgYm94
Qm9yZGVyV2lkdGgsIGRyYXdSZWN0Lm9yaWdpbi55ICsgYm94SGVpZ2h0IC0gYm94Qm9yZGVyV2lk
dGgsIHRleHQsIHN0cmxlbih0ZXh0KSk7CisgICAgICAgIAorICAgICAgICBDR0NvbnRleHRSZXN0
b3JlR1N0YXRlKGNnQ29udGV4dCk7ICAgICAgICAKKyAgICB9CisjZW5kaWYKK30KKworc3RhdGlj
IEhhc2hTZXQ8U3RyaW5nPiBtaW1lVHlwZUNhY2hlKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKEhhc2hTZXQ8U3RyaW5nPiwgdHlwZUNhY2hlLCAoKSk7CisgICAgc3RhdGljIGJvb2wgdHlw
ZUxpc3RJbml0aWFsaXplZCA9IGZhbHNlOworCisgICAgaWYgKCF0eXBlTGlzdEluaXRpYWxpemVk
KSB7CisgICAgICAgIHVuc2lnbmVkIGNvdW50ID0gUVRNb3ZpZVdpbjo6Y291bnRTdXBwb3J0ZWRU
eXBlcygpOworICAgICAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgY291bnQ7IG4rKykgewor
ICAgICAgICAgICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcjsKKyAgICAgICAgICAgIHVuc2lnbmVk
IGxlbjsKKyAgICAgICAgICAgIFFUTW92aWVXaW46OmdldFN1cHBvcnRlZFR5cGUobiwgY2hhcmFj
dGVyLCBsZW4pOworICAgICAgICAgICAgaWYgKGxlbikKKyAgICAgICAgICAgICAgICB0eXBlQ2Fj
aGUuYWRkKFN0cmluZyhjaGFyYWN0ZXIsIGxlbikpOworICAgICAgICB9CisKKyAgICAgICAgdHlw
ZUxpc3RJbml0aWFsaXplZCA9IHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiB0eXBlQ2Fj
aGU7Cit9IAorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6Z2V0U3VwcG9ydGVkVHlwZXMoSGFz
aFNldDxTdHJpbmc+JiB0eXBlcykKK3sKKyAgICB0eXBlcyA9IG1pbWVUeXBlQ2FjaGUoKTsKK30g
CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlOjppc0F2YWlsYWJsZSgpCit7CisgICAgcmV0dXJu
IFFUTW92aWVXaW46OmluaXRpYWxpemVRdWlja1RpbWUoKTsKK30KKworTWVkaWFQbGF5ZXI6OlN1
cHBvcnRzVHlwZSBNZWRpYVBsYXllclByaXZhdGU6OnN1cHBvcnRzVHlwZShjb25zdCBTdHJpbmcm
IHR5cGUsIGNvbnN0IFN0cmluZyYgY29kZWNzKQoreworICAgIC8vIG9ubHkgcmV0dXJuICJJc1N1
cHBvcnRlZCIgaWYgdGhlcmUgaXMgbm8gY29kZWNzIHBhcmFtZXRlciBmb3Igbm93IGFzIHRoZXJl
IGlzIG5vIHdheSB0byBhc2sgUVQgaWYgaXQgc3VwcG9ydHMgYW4KKyAgICAvLyAgZXh0ZW5kZWQg
TUlNRSB0eXBlCisgICAgcmV0dXJuIG1pbWVUeXBlQ2FjaGUoKS5jb250YWlucyh0eXBlKSA/IChj
b2RlY3MuaXNFbXB0eSgpID8gTWVkaWFQbGF5ZXI6Ok1heUJlU3VwcG9ydGVkIDogTWVkaWFQbGF5
ZXI6OklzU3VwcG9ydGVkKSA6IE1lZGlhUGxheWVyOjpJc05vdFN1cHBvcnRlZDsKK30KKwordm9p
ZCBNZWRpYVBsYXllclByaXZhdGU6Om1vdmllRW5kZWQoUVRNb3ZpZVdpbiogbW92aWUpCit7Cisg
ICAgaWYgKG1faGFzVW5zdXBwb3J0ZWRUcmFja3MpCisgICAgICAgIHJldHVybjsKKworICAgIEFT
U0VSVChtX3F0TW92aWUuZ2V0KCkgPT0gbW92aWUpOworICAgIGRpZEVuZCgpOworfQorCit2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZTo6bW92aWVMb2FkU3RhdGVDaGFuZ2VkKFFUTW92aWVXaW4qIG1v
dmllKQoreworICAgIGlmIChtX2hhc1Vuc3VwcG9ydGVkVHJhY2tzKQorICAgICAgICByZXR1cm47
CisKKyAgICBBU1NFUlQobV9xdE1vdmllLmdldCgpID09IG1vdmllKTsKKyAgICB1cGRhdGVTdGF0
ZXMoKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6Om1vdmllVGltZUNoYW5nZWQoUVRN
b3ZpZVdpbiogbW92aWUpCit7CisgICAgaWYgKG1faGFzVW5zdXBwb3J0ZWRUcmFja3MpCisgICAg
ICAgIHJldHVybjsKKworICAgIEFTU0VSVChtX3F0TW92aWUuZ2V0KCkgPT0gbW92aWUpOworICAg
IHVwZGF0ZVN0YXRlcygpOworICAgIG1fcGxheWVyLT50aW1lQ2hhbmdlZCgpOworfQorCit2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZTo6bW92aWVOZXdJbWFnZUF2YWlsYWJsZShRVE1vdmllV2luKiBt
b3ZpZSkKK3sKKyAgICBpZiAobV9oYXNVbnN1cHBvcnRlZFRyYWNrcykKKyAgICAgICAgcmV0dXJu
OworCisgICAgQVNTRVJUKG1fcXRNb3ZpZS5nZXQoKSA9PSBtb3ZpZSk7CisjaWYgRFJBV19GUkFN
RV9SQVRFCisgICAgaWYgKG1fc3RhcnRlZFBsYXlpbmcpIHsKKyAgICAgICAgbV9mcmFtZUNvdW50
V2hpbGVQbGF5aW5nKys7CisgICAgICAgIC8vIFRvIGVsaW1pbmF0ZSBwcmVyb2xsIGNvc3RzIGZy
b20gb3VyIGNhbGN1bGF0aW9uLCBvdXIgZnJhbWUgcmF0ZSBjYWxjdWxhdGlvbiBleGNsdWRlcwor
ICAgICAgICAvLyB0aGUgZmlyc3QgZnJhbWUgZHJhd24gYWZ0ZXIgcGxheWJhY2sgc3RhcnRzLgor
ICAgICAgICBpZiAobV9mcmFtZUNvdW50V2hpbGVQbGF5aW5nID09IDEpCisgICAgICAgICAgICBt
X3RpbWVTdGFydGVkUGxheWluZyA9IFdURjo6Y3VycmVudFRpbWUoKTsKKyAgICB9CisjZW5kaWYK
KworICAgIG1fbmV3RnJhbWVBdmFpbGFibGUgPSB0cnVlOworCisjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQorICAgIGlmIChtX3F0VmlkZW9MYXllcikKKyAgICAgICAgbV9xdFZpZGVv
TGF5ZXItPnBsYXRmb3JtTGF5ZXIoKS0+c2V0TmVlZHNEaXNwbGF5KCk7CisgICAgZWxzZQorI2Vu
ZGlmCisgICAgICAgIG1fcGxheWVyLT5yZXBhaW50KCk7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQ
cml2YXRlOjpoYXNTaW5nbGVTZWN1cml0eU9yaWdpbigpIGNvbnN0Cit7CisgICAgLy8gV2UgdGVs
bCBxdWlja3RpbWUgdG8gZGlzYWxsb3cgcmVzb3VyY2VzIHRoYXQgY29tZSBmcm9tIGRpZmZlcmVu
dCBvcmlnaW5zCisgICAgLy8gc28gd2UgYWxsIG1lZGlhIGlzIHNpbmdsZSBvcmlnaW4uCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK01lZGlhUGxheWVyUHJpdmF0ZTo6TWVkaWFSZW5kZXJpbmdNb2Rl
IE1lZGlhUGxheWVyUHJpdmF0ZTo6Y3VycmVudFJlbmRlcmluZ01vZGUoKSBjb25zdAoreworICAg
IGlmICghbV9xdE1vdmllKQorICAgICAgICByZXR1cm4gTWVkaWFSZW5kZXJpbmdOb25lOworCisj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIGlmIChtX3F0VmlkZW9MYXllcikK
KyAgICAgICAgcmV0dXJuIE1lZGlhUmVuZGVyaW5nTW92aWVMYXllcjsKKyNlbmRpZgorCisgICAg
cmV0dXJuIE1lZGlhUmVuZGVyaW5nU29mdHdhcmVSZW5kZXJlcjsKK30KKworTWVkaWFQbGF5ZXJQ
cml2YXRlOjpNZWRpYVJlbmRlcmluZ01vZGUgTWVkaWFQbGF5ZXJQcml2YXRlOjpwcmVmZXJyZWRS
ZW5kZXJpbmdNb2RlKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcGxheWVyLT5mcmFtZVZpZXcoKSB8
fCAhbV9xdE1vdmllKQorICAgICAgICByZXR1cm4gTWVkaWFSZW5kZXJpbmdOb25lOworCisjaWYg
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIGlmIChzdXBwb3J0c0FjY2VsZXJhdGVk
UmVuZGVyaW5nKCkgJiYgbV9wbGF5ZXItPm1lZGlhUGxheWVyQ2xpZW50KCktPm1lZGlhUGxheWVy
UmVuZGVyaW5nQ2FuQmVBY2NlbGVyYXRlZChtX3BsYXllcikpCisgICAgICAgIHJldHVybiBNZWRp
YVJlbmRlcmluZ01vdmllTGF5ZXI7CisjZW5kaWYKKworICAgIHJldHVybiBNZWRpYVJlbmRlcmlu
Z1NvZnR3YXJlUmVuZGVyZXI7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRVcFZp
ZGVvUmVuZGVyaW5nKCkKK3sKKyAgICBNZWRpYVJlbmRlcmluZ01vZGUgY3VycmVudE1vZGUgPSBj
dXJyZW50UmVuZGVyaW5nTW9kZSgpOworICAgIE1lZGlhUmVuZGVyaW5nTW9kZSBwcmVmZXJyZWRN
b2RlID0gcHJlZmVycmVkUmVuZGVyaW5nTW9kZSgpOworCisjaWYgIVVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKKyAgICBBU1NFUlQocHJlZmVycmVkTW9kZSAhPSBNZWRpYVJlbmRlcmluZ01v
dmllTGF5ZXIpOworI2VuZGlmCisKKyAgICBpZiAoY3VycmVudE1vZGUgPT0gcHJlZmVycmVkTW9k
ZSAmJiBjdXJyZW50TW9kZSAhPSBNZWRpYVJlbmRlcmluZ05vbmUpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmIChjdXJyZW50TW9kZSAhPSBNZWRpYVJlbmRlcmluZ05vbmUpICAKKyAgICAgICAg
dGVhckRvd25WaWRlb1JlbmRlcmluZygpOworCisgICAgaWYgKHByZWZlcnJlZE1vZGUgPT0gTWVk
aWFSZW5kZXJpbmdNb3ZpZUxheWVyKQorICAgICAgICBjcmVhdGVMYXllckZvck1vdmllKCk7CisK
KyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgaWYgKGN1cnJlbnRNb2RlID09
IE1lZGlhUmVuZGVyaW5nTW92aWVMYXllciB8fCBwcmVmZXJyZWRNb2RlID09IE1lZGlhUmVuZGVy
aW5nTW92aWVMYXllcikKKyAgICAgICAgbV9wbGF5ZXItPm1lZGlhUGxheWVyQ2xpZW50KCktPm1l
ZGlhUGxheWVyUmVuZGVyaW5nTW9kZUNoYW5nZWQobV9wbGF5ZXIpOworI2VuZGlmCit9CisKK3Zv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlOjp0ZWFyRG93blZpZGVvUmVuZGVyaW5nKCkKK3sKKyNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgaWYgKG1fcXRWaWRlb0xheWVyKQorICAg
ICAgICBkZXN0cm95TGF5ZXJGb3JNb3ZpZSgpOworI2VuZGlmCit9CisKK2Jvb2wgTWVkaWFQbGF5
ZXJQcml2YXRlOjpoYXNTZXRVcFZpZGVvUmVuZGVyaW5nKCkgY29uc3QKK3sKKyNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgcmV0dXJuIG1fcXRWaWRlb0xheWVyIHx8IGN1cnJl
bnRSZW5kZXJpbmdNb2RlKCkgIT0gTWVkaWFSZW5kZXJpbmdNb3ZpZUxheWVyOworI2Vsc2UKKyAg
ICByZXR1cm4gdHJ1ZTsKKyNlbmRpZgorfQorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQorCisvLyBVcC1jYWxsIGZyb20gY29tcG9zaXRpbmcgbGF5ZXIgZHJhd2luZyBjYWxsYmFj
ay4KK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpwYWludENvbnRlbnRzKGNvbnN0IEdyYXBoaWNz
TGF5ZXIqLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIEdyYXBoaWNzTGF5ZXJQYWludGluZ1Bo
YXNlLCBjb25zdCBJbnRSZWN0JikKK3sKKyAgICAgaWYgKG1faGFzVW5zdXBwb3J0ZWRUcmFja3Mp
CisgICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQoc3VwcG9ydHNBY2NlbGVyYXRlZFJlbmRl
cmluZygpKTsKKworICAgIC8vIE5vIHJlYXNvbiB0byByZXBsYWNlIHRoZSBjdXJyZW50IGxheWVy
IGltYWdlIHVubGVzcyB3ZSBoYXZlIHNvbWV0aGluZyBuZXcgdG8gc2hvdy4KKyAgICBpZiAoIW1f
bmV3RnJhbWVBdmFpbGFibGUpCisgICAgICAgIHJldHVybjsKKworICAgIHN0YXRpYyBDR0NvbG9y
U3BhY2VSZWYgY29sb3JTcGFjZSA9IENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpOworICAg
IHZvaWQqIGJ1ZmZlcjsKKyAgICB1bnNpZ25lZCBiaXRzUGVyUGl4ZWw7CisgICAgdW5zaWduZWQg
cm93Qnl0ZXM7CisgICAgdW5zaWduZWQgd2lkdGg7CisgICAgdW5zaWduZWQgaGVpZ2h0OworCisg
ICAgbV9xdE1vdmllLT5nZXRDdXJyZW50RnJhbWVJbmZvKGJ1ZmZlciwgYml0c1BlclBpeGVsLCBy
b3dCeXRlcywgd2lkdGgsIGhlaWdodCk7CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVy
biA7CisKKyAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBkYXRhKEFkb3B0Q0YsIENGRGF0YUNyZWF0
ZVdpdGhCeXRlc05vQ29weSgwLCBzdGF0aWNfY2FzdDxVSW50OCo+KGJ1ZmZlciksIHJvd0J5dGVz
ICogaGVpZ2h0LCBrQ0ZBbGxvY2F0b3JOdWxsKSk7CisgICAgUmV0YWluUHRyPENHRGF0YVByb3Zp
ZGVyUmVmPiBwcm92aWRlcihBZG9wdENGLCBDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhDRkRhdGEo
ZGF0YS5nZXQoKSkpOworICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBmcmFtZUltYWdlKEFkb3B0
Q0YsIENHSW1hZ2VDcmVhdGUod2lkdGgsIGhlaWdodCwgOCwgYml0c1BlclBpeGVsLCByb3dCeXRl
cywgY29sb3JTcGFjZSwgCisgICAgICAgIGtDR0JpdG1hcEJ5dGVPcmRlcjMyTGl0dGxlIHwga0NH
SW1hZ2VBbHBoYUZpcnN0LCBwcm92aWRlci5nZXQoKSwgMCwgZmFsc2UsIGtDR1JlbmRlcmluZ0lu
dGVudERlZmF1bHQpKTsKKyAgICBpZiAoIWZyYW1lSW1hZ2UpCisgICAgICAgIHJldHVybjsKKwor
ICAgIEludFJlY3QgcmVjdCgwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsK
KyAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwg
ZnJhbWVJbWFnZS5nZXQoKSk7IAorICAgIHBhaW50Q29tcGxldGVkKGNvbnRleHQsIHJlY3QpOwor
fQorI2VuZGlmCisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpjcmVhdGVMYXllckZvck1vdmll
KCkKK3sKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgQVNTRVJUKHN1cHBv
cnRzQWNjZWxlcmF0ZWRSZW5kZXJpbmcoKSk7CisKKyAgICBpZiAoIW1fcXRNb3ZpZSB8fCBtX3F0
VmlkZW9MYXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gQ3JlYXRlIGEgR3JhcGhpY3NM
YXllciB0aGF0IHdvbid0IGJlIGluc2VydGVkIGRpcmVjdGx5IGludG8gdGhlIHJlbmRlciB0cmVl
LCBidXQgd2lsbCB1c2VkIAorICAgIC8vIGFzIGEgd3JhcHBlciBmb3IgYSBXS0NBQ0ZMYXllciB3
aGljaCBnZXRzIGluc2VydGVkIGFzIHRoZSBjb250ZW50IGxheWVyIG9mIHRoZSB2aWRlbyAKKyAg
ICAvLyByZW5kZXJlcidzIEdyYXBoaWNzTGF5ZXIuCisgICAgbV9xdFZpZGVvTGF5ZXIuc2V0KG5l
dyBHcmFwaGljc0xheWVyQ0FDRih0aGlzKSk7CisgICAgaWYgKCFtX3F0VmlkZW9MYXllcikKKyAg
ICAgICAgcmV0dXJuOworCisgICAgLy8gTWFyayB0aGUgbGF5ZXIgYXMgZHJhd2luZyBpdHNlbGYs
IGFuY2hvcmVkIGluIHRoZSB0b3AgbGVmdCwgYW5kIGJvdHRvbS11cC4KKyAgICBtX3F0VmlkZW9M
YXllci0+c2V0RHJhd3NDb250ZW50KHRydWUpOworICAgIG1fcXRWaWRlb0xheWVyLT5zZXRBbmNo
b3JQb2ludChGbG9hdFBvaW50M0QoKSk7CisgICAgbV9xdFZpZGVvTGF5ZXItPnNldENvbnRlbnRz
T3JpZW50YXRpb24oR3JhcGhpY3NMYXllcjo6Q29tcG9zaXRpbmdDb29yZGluYXRlc0JvdHRvbVVw
KTsKKyNpZm5kZWYgTkRFQlVHCisgICAgbV9xdFZpZGVvTGF5ZXItPnNldE5hbWUoIlZpZGVvIGxh
eWVyIik7CisjZW5kaWYKKyAgICAvLyBUaGUgbGF5ZXIgd2lsbCBnZXQgaG9va2VkIHVwIHZpYSBS
ZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdyYXBoaWNzTGF5ZXJDb25maWd1cmF0aW9uKCkuCisj
ZW5kaWYKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmRlc3Ryb3lMYXllckZvck1vdmll
KCkKK3sKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgaWYgKCFtX3F0Vmlk
ZW9MYXllcikKKyAgICAgICAgcmV0dXJuOworICAgIG1fcXRWaWRlb0xheWVyID0gMDsKKyNlbmRp
ZgorfQorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorYm9vbCBNZWRpYVBsYXll
clByaXZhdGU6OnN1cHBvcnRzQWNjZWxlcmF0ZWRSZW5kZXJpbmcoKSBjb25zdAoreworICAgIHJl
dHVybiBpc1JlYWR5Rm9yUmVuZGVyaW5nKCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
OjphY2NlbGVyYXRlZFJlbmRlcmluZ1N0YXRlQ2hhbmdlZCgpCit7CisgICAgLy8gU2V0IHVwIG9y
IGNoYW5nZSB0aGUgcmVuZGVyaW5nIHBhdGggaWYgbmVjZXNzYXJ5LgorICAgIHNldFVwVmlkZW9S
ZW5kZXJpbmcoKTsKK30KKworI2VuZGlmCisKKworfQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENv
bnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRp
YVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0LmgJKHJldmlzaW9uIDU4NTk2KQko
ZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVRdWlj
a1RpbWVXaW4uaDo1ODU5NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlh
UGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDE5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSwgMjAx
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgTWVkaWFQ
bGF5ZXJQcml2YXRlUVRLaXRfaAorI2RlZmluZSBNZWRpYVBsYXllclByaXZhdGVRVEtpdF9oCisK
KyNpZiBFTkFCTEUoVklERU8pCisKKyNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGUuaCIKKyNp
bmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgPFFUTW92aWVXaW4uaD4KKyNpbmNsdWRlIDx3dGYv
T3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCisjaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJDbGllbnQuaCIKKyNlbmRp
ZiAKKworI2lmbmRlZiBEUkFXX0ZSQU1FX1JBVEUKKyNkZWZpbmUgRFJBV19GUkFNRV9SQVRFIDAK
KyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCBDR0ltYWdlICpDR0ltYWdlUmVmOworCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKK2NsYXNzIEludFNpemU7Citj
bGFzcyBJbnRSZWN0OworY2xhc3MgU3RyaW5nOworCitjbGFzcyBNZWRpYVBsYXllclByaXZhdGUg
OiBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlLCBwdWJsaWMgUVRNb3ZpZVdpbkNs
aWVudCAKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgICAgICwgcHVibGlj
IEdyYXBoaWNzTGF5ZXJDbGllbnQKKyNlbmRpZiAKK3sKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9p
ZCByZWdpc3Rlck1lZGlhRW5naW5lKE1lZGlhRW5naW5lUmVnaXN0cmFyKTsKKworICAgIH5NZWRp
YVBsYXllclByaXZhdGUoKTsKKworcHJpdmF0ZToKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKKyAgICAvLyBHcmFwaGljc0xheWVyQ2xpZW50IG1ldGhvZHMKKyAgICB2aXJ0dWFs
IHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBHcmFwaGljc0xheWVyKiwgR3JhcGhpY3NDb250ZXh0
JiwgR3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IEludFJlY3QmIGluQ2xpcCk7Cisg
ICAgdmlydHVhbCB2b2lkIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgR3JhcGhpY3NMYXll
ciosIGRvdWJsZSB0aW1lKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5U3luY1JlcXVpcmVk
KGNvbnN0IEdyYXBoaWNzTGF5ZXIqKSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2hvd0RlYnVnQm9y
ZGVycygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIHNob3dSZXBh
aW50Q291bnRlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisjZW5kaWYgCisKKyAgICBNZWRp
YVBsYXllclByaXZhdGUoTWVkaWFQbGF5ZXIqKTsKKworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0
c0Z1bGxzY3JlZW4oKSBjb25zdDsKKyAgICB2aXJ0dWFsIFBsYXRmb3JtTWVkaWEgcGxhdGZvcm1N
ZWRpYSgpIGNvbnN0OworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICBQbGF0
Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Q7CisjZW5kaWYKKworICAgIEludFNpemUg
bmF0dXJhbFNpemUoKSBjb25zdDsKKyAgICBib29sIGhhc1ZpZGVvKCkgY29uc3Q7CisgICAgYm9v
bCBoYXNBdWRpbygpIGNvbnN0OworCisgICAgdm9pZCBsb2FkKGNvbnN0IFN0cmluZyYgdXJsKTsK
KyAgICB2b2lkIGNhbmNlbExvYWQoKTsKKyAgICAKKyAgICB2b2lkIHBsYXkoKTsKKyAgICB2b2lk
IHBhdXNlKCk7ICAgIAorICAgIAorICAgIGJvb2wgcGF1c2VkKCkgY29uc3Q7CisgICAgYm9vbCBz
ZWVraW5nKCkgY29uc3Q7CisgICAgCisgICAgZmxvYXQgZHVyYXRpb24oKSBjb25zdDsKKyAgICBm
bG9hdCBjdXJyZW50VGltZSgpIGNvbnN0OworICAgIHZvaWQgc2VlayhmbG9hdCB0aW1lKTsKKyAg
ICAKKyAgICB2b2lkIHNldFJhdGUoZmxvYXQpOworICAgIHZvaWQgc2V0Vm9sdW1lKGZsb2F0KTsK
KyAgICB2b2lkIHNldFByZXNlcnZlc1BpdGNoKGJvb2wpOworICAgIAorICAgIE1lZGlhUGxheWVy
OjpOZXR3b3JrU3RhdGUgbmV0d29ya1N0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9uZXR3b3JrU3Rh
dGU7IH0KKyAgICBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSByZWFkeVN0YXRlKCkgY29uc3QgeyBy
ZXR1cm4gbV9yZWFkeVN0YXRlOyB9CisgICAgCisgICAgUGFzc1JlZlB0cjxUaW1lUmFuZ2VzPiBi
dWZmZXJlZCgpIGNvbnN0OworICAgIGZsb2F0IG1heFRpbWVTZWVrYWJsZSgpIGNvbnN0OworICAg
IHVuc2lnbmVkIGJ5dGVzTG9hZGVkKCkgY29uc3Q7CisgICAgdW5zaWduZWQgdG90YWxCeXRlcygp
IGNvbnN0OworICAgIAorICAgIHZvaWQgc2V0VmlzaWJsZShib29sKTsKKyAgICB2b2lkIHNldFNp
emUoY29uc3QgSW50U2l6ZSYpOworICAgIAorICAgIHZvaWQgbG9hZFN0YXRlQ2hhbmdlZCgpOwor
ICAgIHZvaWQgZGlkRW5kKCk7CisgICAgCisgICAgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQq
LCBjb25zdCBJbnRSZWN0Jik7CisgICAgdm9pZCBwYWludENvbXBsZXRlZChHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICBib29sIGhhc1NpbmdsZVNlY3VyaXR5T3JpZ2lu
KCkgY29uc3Q7CisKKyAgICBib29sIGhhc0Nsb3NlZENhcHRpb25zKCkgY29uc3Q7CisgICAgdm9p
ZCBzZXRDbG9zZWRDYXB0aW9uc1Zpc2libGUoYm9vbCk7CisKKyAgICB2b2lkIHVwZGF0ZVN0YXRl
cygpOworICAgIHZvaWQgZG9TZWVrKCk7CisgICAgdm9pZCBjYW5jZWxTZWVrKCk7CisgICAgdm9p
ZCBzZWVrVGltZXJGaXJlZChUaW1lcjxNZWRpYVBsYXllclByaXZhdGU+Kik7CisgICAgZmxvYXQg
bWF4VGltZUxvYWRlZCgpIGNvbnN0OworICAgIHZvaWQgc2F3VW5zdXBwb3J0ZWRUcmFja3MoKTsK
KworICAgIHZpcnR1YWwgdm9pZCBtb3ZpZUVuZGVkKFFUTW92aWVXaW4qKTsKKyAgICB2aXJ0dWFs
IHZvaWQgbW92aWVMb2FkU3RhdGVDaGFuZ2VkKFFUTW92aWVXaW4qKTsKKyAgICB2aXJ0dWFsIHZv
aWQgbW92aWVUaW1lQ2hhbmdlZChRVE1vdmllV2luKik7CisgICAgdmlydHVhbCB2b2lkIG1vdmll
TmV3SW1hZ2VBdmFpbGFibGUoUVRNb3ZpZVdpbiopOworCisgICAgLy8gZW5naW5lIHN1cHBvcnQK
KyAgICBzdGF0aWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlKiBjcmVhdGUoTWVkaWFQbGF5
ZXIqKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZz4m
IHR5cGVzKTsKKyAgICBzdGF0aWMgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBzdXBwb3J0c1R5
cGUoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGNvZGVjcyk7CisgICAgc3RhdGlj
IGJvb2wgaXNBdmFpbGFibGUoKTsKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
KyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNBY2NlbGVyYXRlZFJlbmRlcmluZygpIGNvbnN0Owor
ICAgIHZpcnR1YWwgdm9pZCBhY2NlbGVyYXRlZFJlbmRlcmluZ1N0YXRlQ2hhbmdlZCgpOworI2Vu
ZGlmCisKKyAgICBlbnVtIE1lZGlhUmVuZGVyaW5nTW9kZSB7IE1lZGlhUmVuZGVyaW5nTm9uZSwg
TWVkaWFSZW5kZXJpbmdTb2Z0d2FyZVJlbmRlcmVyLCBNZWRpYVJlbmRlcmluZ01vdmllTGF5ZXIg
fTsKKyAgICBNZWRpYVJlbmRlcmluZ01vZGUgY3VycmVudFJlbmRlcmluZ01vZGUoKSBjb25zdDsK
KyAgICBNZWRpYVJlbmRlcmluZ01vZGUgcHJlZmVycmVkUmVuZGVyaW5nTW9kZSgpIGNvbnN0Owor
ICAgIGJvb2wgaXNSZWFkeUZvclJlbmRlcmluZygpIGNvbnN0OworCisgICAgdm9pZCBzZXRVcFZp
ZGVvUmVuZGVyaW5nKCk7CisgICAgdm9pZCB0ZWFyRG93blZpZGVvUmVuZGVyaW5nKCk7CisgICAg
Ym9vbCBoYXNTZXRVcFZpZGVvUmVuZGVyaW5nKCkgY29uc3Q7CisKKyAgICB2b2lkIGNyZWF0ZUxh
eWVyRm9yTW92aWUoKTsKKyAgICB2b2lkIGRlc3Ryb3lMYXllckZvck1vdmllKCk7CisKKyAgICB2
b2lkIHNldFVwQ29va2llc0ZvclF1aWNrVGltZShjb25zdCBTdHJpbmcmIHVybCk7CisgICAgU3Ry
aW5nIHJmYzI2MTZEYXRlU3RyaW5nRnJvbVRpbWUoQ0ZBYnNvbHV0ZVRpbWUpOworCisgICAgTWVk
aWFQbGF5ZXIqIG1fcGxheWVyOworICAgIE93blB0cjxRVE1vdmllV2luPiBtX3F0TW92aWU7Cisj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIE93blB0cjxHcmFwaGljc0xheWVy
PiBtX3F0VmlkZW9MYXllcjsKKyNlbmRpZgorICAgIGZsb2F0IG1fc2Vla1RvOworICAgIFRpbWVy
PE1lZGlhUGxheWVyUHJpdmF0ZT4gbV9zZWVrVGltZXI7CisgICAgSW50U2l6ZSBtX3NpemU7Cisg
ICAgTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBtX25ldHdvcmtTdGF0ZTsKKyAgICBNZWRpYVBs
YXllcjo6UmVhZHlTdGF0ZSBtX3JlYWR5U3RhdGU7CisgICAgdW5zaWduZWQgbV9lbmFibGVkVHJh
Y2tDb3VudDsKKyAgICB1bnNpZ25lZCBtX3RvdGFsVHJhY2tDb3VudDsKKyAgICBib29sIG1faGFz
VW5zdXBwb3J0ZWRUcmFja3M7CisgICAgYm9vbCBtX3N0YXJ0ZWRQbGF5aW5nOworICAgIGJvb2wg
bV9pc1N0cmVhbWluZzsKKyAgICBib29sIG1fdmlzaWJsZTsKKyAgICBib29sIG1fbmV3RnJhbWVB
dmFpbGFibGU7CisjaWYgRFJBV19GUkFNRV9SQVRFCisgICAgZG91YmxlIG1fZnJhbWVDb3VudFdo
aWxlUGxheWluZzsKKyAgICBkb3VibGUgbV90aW1lU3RhcnRlZFBsYXlpbmc7CisgICAgZG91Ymxl
IG1fdGltZVN0b3BwZWRQbGF5aW5nOworI2VuZGlmCit9OworCit9CisKKyNlbmRpZgorI2VuZGlm
</data>
<flag name="review"
          id="39156"
          type_id="1"
          status="+"
          setter="eric.carlson"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55056</attachid>
            <date>2010-05-04 15:30:05 -0700</date>
            <delta_ts>2010-05-06 22:47:29 -0700</delta_ts>
            <desc>Part 4.2: WebCore: New class MediaPlayerPrivateQuickTimeVisualContext, the modification</desc>
            <filename>7569713-MediaPlayerPrivateQuickTimeVisualContext-Part2.patch</filename>
            <type>text/plain</type>
            <size>41245</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1
aWNrVGltZVZpc3VhbENvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQuY3Bw
CShyZXZpc2lvbiA1ODU5NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlh
UGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKICNpZiBFTkFCTEUoVklERU8p
Ci0jaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lV2luLmgiCisjaW5jbHVkZSAi
TWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dC5oIgogCiAjaW5jbHVkZSAi
Q29va2llLmgiCiAjaW5jbHVkZSAiQ29va2llSmFyLmgiCkBAIC0zNCw3ICszNCwxMSBAQAogI2lu
Y2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1
ZGUgIktVUkwuaCIKLSNpbmNsdWRlICJRVE1vdmllV2luLmgiCisjaW5jbHVkZSAiTWVkaWFQbGF5
ZXJQcml2YXRlVGFza1RpbWVyLmgiCisjaW5jbHVkZSAiUVRDRkRpY3Rpb25hcnkuaCIKKyNpbmNs
dWRlICJRVE1vdmllLmgiCisjaW5jbHVkZSAiUVRNb3ZpZVRhc2suaCIKKyNpbmNsdWRlICJRVE1v
dmllVmlzdWFsQ29udGV4dC5oIgogI2luY2x1ZGUgIlNjcm9sbFZpZXcuaCIKICNpbmNsdWRlICJT
b2Z0TGlua2luZy5oIgogI2luY2x1ZGUgIlN0cmluZ0J1aWxkZXIuaCIKQEAgLTQ0LDYgKzQ4LDcg
QEAKICNpbmNsdWRlIDxXaW5pbmV0Lmg+CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAj
aW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2lu
Y2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgog
CkBAIC01MiwzOCArNTcsNjggQEAKICNpbmNsdWRlICJXS0NBQ0ZMYXllci5oIgogI2VuZGlmCiAK
LSNpZiBEUkFXX0ZSQU1FX1JBVEUKLSNpbmNsdWRlICJGb250LmgiCi0jaW5jbHVkZSAiRnJhbWVW
aWV3LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1
ZGUgIlJlbmRlck9iamVjdC5oIgotI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCi0jaW5jbHVkZSAi
V2luZG93cy5oIgotI2VuZGlmCi0KIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKK2NvbnN0IENGU3Ry
aW5nUmVmIGtNaW5RdWFydHpDb3JlVmVyc2lvbiA9IENGU1RSKCIxLjAuNDMuMCIpOworY29uc3Qg
Q0ZTdHJpbmdSZWYga01pbkNvcmVWaWRlb1ZlcnNpb24gPSBDRlNUUigiMS4wLjAuMiIpOworCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNPRlRfTElOS19MSUJSQVJZKFdpbmluZXQpCiBTT0ZUX0xJ
TksoV2luaW5ldCwgSW50ZXJuZXRTZXRDb29raWVFeFcsIERXT1JELCBXSU5BUEksIChMUENXU1RS
IGxwc3pVcmwsIExQQ1dTVFIgbHBzekNvb2tpZU5hbWUsIExQQ1dTVFIgbHBzekNvb2tpZURhdGEs
IERXT1JEIGR3RmxhZ3MsIERXT1JEX1BUUiBkd1Jlc2VydmVkKSwgKGxwc3pVcmwsIGxwc3pDb29r
aWVOYW1lLCBscHN6Q29va2llRGF0YSwgZHdGbGFncywgZHdSZXNlcnZlZCkpCiAKLU1lZGlhUGxh
eWVyUHJpdmF0ZUludGVyZmFjZSogTWVkaWFQbGF5ZXJQcml2YXRlOjpjcmVhdGUoTWVkaWFQbGF5
ZXIqIHBsYXllcikgCisvLyBJbnRlcmZhY2UgZGVjbGFyYXRpb24gZm9yIE1lZGlhUGxheWVyUHJp
dmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQncyBRVE1vdmllQ2xpZW50IGFnZ3JlZ2F0ZQorY2xh
c3MgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6TW92aWVDbGllbnQg
OiBwdWJsaWMgUVRNb3ZpZUNsaWVudCB7CitwdWJsaWM6CisgICAgTW92aWVDbGllbnQoTWVkaWFQ
bGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dCogcGFyZW50KSA6IG1fcGFyZW50KHBh
cmVudCkge30KKyAgICB2aXJ0dWFsIH5Nb3ZpZUNsaWVudCgpIHsgbV9wYXJlbnQgPSAwOyB9Cisg
ICAgdmlydHVhbCB2b2lkIG1vdmllRW5kZWQoUVRNb3ZpZSopOworICAgIHZpcnR1YWwgdm9pZCBt
b3ZpZUxvYWRTdGF0ZUNoYW5nZWQoUVRNb3ZpZSopOworICAgIHZpcnR1YWwgdm9pZCBtb3ZpZVRp
bWVDaGFuZ2VkKFFUTW92aWUqKTsKK3ByaXZhdGU6CisgICAgTWVkaWFQbGF5ZXJQcml2YXRlUXVp
Y2tUaW1lVmlzdWFsQ29udGV4dCogbV9wYXJlbnQ7Cit9OworCisvLyBJbnRlcmZhY2UgZGVjbGFy
YXRpb24gZm9yIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQncyBHcmFw
aGljc0xheWVyQ2xpZW50IGFnZ3JlZ2F0ZQorY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tU
aW1lVmlzdWFsQ29udGV4dDo6TGF5ZXJDbGllbnQgOiBwdWJsaWMgR3JhcGhpY3NMYXllckNsaWVu
dCB7CitwdWJsaWM6CisgICAgTGF5ZXJDbGllbnQoTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1l
VmlzdWFsQ29udGV4dCogcGFyZW50KSA6IG1fcGFyZW50KHBhcmVudCkge30KKyAgICB2aXJ0dWFs
IH5MYXllckNsaWVudCgpIHsgbV9wYXJlbnQgPSAwOyB9CisgICAgdmlydHVhbCB2b2lkIHBhaW50
Q29udGVudHMoY29uc3QgR3JhcGhpY3NMYXllciosIEdyYXBoaWNzQ29udGV4dCYsIEdyYXBoaWNz
TGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBJbnRSZWN0JiBpbkNsaXApOworICAgIHZpcnR1YWwg
dm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBkb3VibGUg
dGltZSkgeyB9CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeVN5bmNSZXF1aXJlZChjb25zdCBHcmFw
aGljc0xheWVyKikgeyB9CisgICAgdmlydHVhbCBib29sIHNob3dEZWJ1Z0JvcmRlcnMoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBzaG93UmVwYWludENvdW50ZXIo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorcHJpdmF0ZToKKyAgICBNZWRpYVBsYXllclByaXZh
dGVRdWlja1RpbWVWaXN1YWxDb250ZXh0KiBtX3BhcmVudDsKK307CisKK2NsYXNzIE1lZGlhUGxh
eWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OlZpc3VhbENvbnRleHRDbGllbnQgOiBw
dWJsaWMgUVRNb3ZpZVZpc3VhbENvbnRleHRDbGllbnQgeworcHVibGljOgorICAgIFZpc3VhbENv
bnRleHRDbGllbnQoTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dCogcGFy
ZW50KSA6IG1fcGFyZW50KHBhcmVudCkge30KKyAgICB2aXJ0dWFsIH5WaXN1YWxDb250ZXh0Q2xp
ZW50KCkgeyBtX3BhcmVudCA9IDA7IH0KKyAgICB2b2lkIGltYWdlQXZhaWxhYmxlRm9yVGltZShj
b25zdCBRVENWVGltZVN0YW1wKik7CisgICAgc3RhdGljIHZvaWQgcmV0cmlldmVDdXJyZW50SW1h
Z2VQcm9jKHZvaWQqKTsKK3ByaXZhdGU6CisgICAgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1l
VmlzdWFsQ29udGV4dCogbV9wYXJlbnQ7Cit9OworCitNZWRpYVBsYXllclByaXZhdGVJbnRlcmZh
Y2UqIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OmNyZWF0ZShNZWRp
YVBsYXllciogcGxheWVyKSAKIHsgCi0gICAgcmV0dXJuIG5ldyBNZWRpYVBsYXllclByaXZhdGUo
cGxheWVyKTsKKyAgICByZXR1cm4gbmV3IE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3Vh
bENvbnRleHQocGxheWVyKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnJlZ2lzdGVy
TWVkaWFFbmdpbmUoTWVkaWFFbmdpbmVSZWdpc3RyYXIgcmVnaXN0cmFyKQordm9pZCBNZWRpYVBs
YXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpyZWdpc3Rlck1lZGlhRW5naW5lKE1l
ZGlhRW5naW5lUmVnaXN0cmFyIHJlZ2lzdHJhcikKIHsKICAgICBpZiAoaXNBdmFpbGFibGUoKSkK
ICAgICAgICAgcmVnaXN0cmFyKGNyZWF0ZSwgZ2V0U3VwcG9ydGVkVHlwZXMsIHN1cHBvcnRzVHlw
ZSk7CiB9CiAKLU1lZGlhUGxheWVyUHJpdmF0ZTo6TWVkaWFQbGF5ZXJQcml2YXRlKE1lZGlhUGxh
eWVyKiBwbGF5ZXIpCitNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpN
ZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0KE1lZGlhUGxheWVyKiBwbGF5
ZXIpCiAgICAgOiBtX3BsYXllcihwbGF5ZXIpCiAgICAgLCBtX3NlZWtUbygtMSkKLSAgICAsIG1f
c2Vla1RpbWVyKHRoaXMsICZNZWRpYVBsYXllclByaXZhdGU6OnNlZWtUaW1lckZpcmVkKQorICAg
ICwgbV9zZWVrVGltZXIodGhpcywgJk1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENv
bnRleHQ6OnNlZWtUaW1lckZpcmVkKQorICAgICwgbV92aXN1YWxDb250ZXh0VGltZXIodGhpcywg
Jk1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OnZpc3VhbENvbnRleHRU
aW1lckZpcmVkKQogICAgICwgbV9uZXR3b3JrU3RhdGUoTWVkaWFQbGF5ZXI6OkVtcHR5KQogICAg
ICwgbV9yZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpIYXZlTm90aGluZykKICAgICAsIG1fZW5hYmxl
ZFRyYWNrQ291bnQoMCkKQEAgLTkzLDgzICsxMjgsMzkgQEAgTWVkaWFQbGF5ZXJQcml2YXRlOjpN
ZWRpYVBsYXllclByaXZhdGUoTQogICAgICwgbV9pc1N0cmVhbWluZyhmYWxzZSkKICAgICAsIG1f
dmlzaWJsZShmYWxzZSkKICAgICAsIG1fbmV3RnJhbWVBdmFpbGFibGUoZmFsc2UpCi0jaWYgRFJB
V19GUkFNRV9SQVRFCi0gICAgLCBtX2ZyYW1lQ291bnRXaGlsZVBsYXlpbmcoMCkKLSAgICAsIG1f
dGltZVN0YXJ0ZWRQbGF5aW5nKDApCi0gICAgLCBtX3RpbWVTdG9wcGVkUGxheWluZygwKQotI2Vu
ZGlmCisgICAgLCBtX21vdmllQ2xpZW50KG5ldyBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVW
aXN1YWxDb250ZXh0OjpNb3ZpZUNsaWVudCh0aGlzKSkKKyAgICAsIG1fbGF5ZXJDbGllbnQobmV3
IE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OkxheWVyQ2xpZW50KHRo
aXMpKQorICAgICwgbV92aXN1YWxDb250ZXh0Q2xpZW50KG5ldyBNZWRpYVBsYXllclByaXZhdGVR
dWlja1RpbWVWaXN1YWxDb250ZXh0OjpWaXN1YWxDb250ZXh0Q2xpZW50KHRoaXMpKQogewogfQog
Ci1NZWRpYVBsYXllclByaXZhdGU6On5NZWRpYVBsYXllclByaXZhdGUoKQorTWVkaWFQbGF5ZXJQ
cml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6fk1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGlt
ZVZpc3VhbENvbnRleHQoKQogewogICAgIHRlYXJEb3duVmlkZW9SZW5kZXJpbmcoKTsKKyAgICBj
YW5jZWxDYWxsT25NYWluVGhyZWFkKCZWaXN1YWxDb250ZXh0Q2xpZW50OjpyZXRyaWV2ZUN1cnJl
bnRJbWFnZVByb2MsIHRoaXMpOwogfQogCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6c3VwcG9y
dHNGdWxsc2NyZWVuKCkgY29uc3QKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlz
dWFsQ29udGV4dDo6c3VwcG9ydHNGdWxsc2NyZWVuKCkgY29uc3QKIHsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotUGxhdGZvcm1NZWRpYSBNZWRpYVBsYXllclByaXZhdGU6OnBsYXRmb3JtTWVkaWEo
KSBjb25zdAorUGxhdGZvcm1NZWRpYSBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxD
b250ZXh0OjpwbGF0Zm9ybU1lZGlhKCkgY29uc3QKIHsKICAgICBQbGF0Zm9ybU1lZGlhIHA7Ci0g
ICAgcC5xdE1vdmllID0gcmVpbnRlcnByZXRfY2FzdDxRVE1vdmllKj4obV9xdE1vdmllLmdldCgp
KTsKKyAgICBwLnF0TW92aWUgPSBtX21vdmllLmdldCgpOworICAgIHAucXRHV29ybGQgPSAwOwog
ICAgIHJldHVybiBwOwogfQogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotUGxh
dGZvcm1MYXllciogTWVkaWFQbGF5ZXJQcml2YXRlOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKK1Bs
YXRmb3JtTGF5ZXIqIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OnBs
YXRmb3JtTGF5ZXIoKSBjb25zdAogewogICAgIHJldHVybiBtX3F0VmlkZW9MYXllciA/IG1fcXRW
aWRlb0xheWVyLT5wbGF0Zm9ybUxheWVyKCkgOiAwOwogfQogI2VuZGlmCiAKLWNsYXNzIFRhc2tU
aW1lciA6IFRpbWVyQmFzZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZSgp
OwotICAgIAotcHJpdmF0ZToKLSAgICBzdGF0aWMgdm9pZCBzZXRUYXNrVGltZXJEZWxheShkb3Vi
bGUpOwotICAgIHN0YXRpYyB2b2lkIHN0b3BUYXNrVGltZXIoKTsKLQotICAgIHZvaWQgZmlyZWQo
KTsKLQotICAgIHN0YXRpYyBUYXNrVGltZXIqIHNfdGltZXI7Ci19OwotCi1UYXNrVGltZXIqIFRh
c2tUaW1lcjo6c190aW1lciA9IDA7Ci0KLXZvaWQgVGFza1RpbWVyOjppbml0aWFsaXplKCkKLXsK
LSAgICBpZiAoc190aW1lcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc190aW1lciA9IG5ldyBU
YXNrVGltZXI7Ci0KLSAgICBRVE1vdmllV2luOjpzZXRUYXNrVGltZXJGdW5jcyhzZXRUYXNrVGlt
ZXJEZWxheSwgc3RvcFRhc2tUaW1lcik7Ci19Ci0KLXZvaWQgVGFza1RpbWVyOjpzZXRUYXNrVGlt
ZXJEZWxheShkb3VibGUgZGVsYXlJblNlY29uZHMpCi17Ci0gICAgQVNTRVJUKHNfdGltZXIpOwot
Ci0gICAgc190aW1lci0+c3RhcnRPbmVTaG90KGRlbGF5SW5TZWNvbmRzKTsKLX0KLQotdm9pZCBU
YXNrVGltZXI6OnN0b3BUYXNrVGltZXIoKQotewotICAgIEFTU0VSVChzX3RpbWVyKTsKLQotICAg
IHNfdGltZXItPnN0b3AoKTsKLX0KLQotdm9pZCBUYXNrVGltZXI6OmZpcmVkKCkKLXsKLSAgICBR
VE1vdmllV2luOjp0YXNrVGltZXJGaXJlZCgpOwotfQotCi1TdHJpbmcgTWVkaWFQbGF5ZXJQcml2
YXRlOjpyZmMyNjE2RGF0ZVN0cmluZ0Zyb21UaW1lKENGQWJzb2x1dGVUaW1lIHRpbWUpCitTdHJp
bmcgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6cmZjMjYxNkRhdGVT
dHJpbmdGcm9tVGltZShDRkFic29sdXRlVGltZSB0aW1lKQogewogICAgIHN0YXRpYyBjb25zdCBj
aGFyKiBjb25zdCBkYXlTdHJpbmdzW10gPSB7ICJNb24iLCAiVHVlIiwgIldlZCIsICJUaHUiLCAi
RnJpIiwgIlNhdCIsICJTdW4iIH07CiAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IG1vbnRo
U3RyaW5nc1tdID0geyAiSmFuIiwgIkZlYiIsICJNYXIiLCAiQXByIiwgIk1heSIsICJKdW4iLCAi
SnVsIiwgIkF1ZyIsICJTZXAiLCAiT2N0IiwgIk5vdiIsICJEZWMiIH07CkBAIC0yMDcsOCArMTk4
LDcgQEAgc3RhdGljIHZvaWQgYWRkQ29va2llUGFyYW0oU3RyaW5nQnVpbGRlcgogICAgIH0KIH0K
IAotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0VXBDb29raWVzRm9yUXVpY2tUaW1lKGNv
bnN0IFN0cmluZyYgdXJsKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxD
b250ZXh0OjpzZXRVcENvb2tpZXNGb3JRdWlja1RpbWUoY29uc3QgU3RyaW5nJiB1cmwpCiB7CiAg
ICAgLy8gV2ViQ29yZSBsb2FkZWQgdGhlIHBhZ2Ugd2l0aCB0aGUgbW92aWUgVVJMIHdpdGggQ0ZO
ZXR3b3JrIGJ1dCBRdWlja1RpbWUgd2lsbCAKICAgICAvLyB1c2UgV2luSU5ldCB0byBkb3dubG9h
ZCB0aGUgbW92aWUsIHNvIHdlIG5lZWQgdG8gY29weSBhbnkgY29va2llcyBuZWVkZWQgdG8KQEAg
LTI2MCw5ICsyNTAsOSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0VXBDb29raWVzRm9y
CiAgICAgfQogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6bG9hZChjb25zdCBTdHJpbmcm
IHVybCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6bG9h
ZChjb25zdCBTdHJpbmcmIHVybCkKIHsKLSAgICBpZiAoIVFUTW92aWVXaW46OmluaXRpYWxpemVR
dWlja1RpbWUoKSkgeworICAgIGlmICghUVRNb3ZpZTo6aW5pdGlhbGl6ZVF1aWNrVGltZSgpKSB7
CiAgICAgICAgIC8vIEZJWE1FOiBpcyB0aGlzIHRoZSByaWdodCBlcnJvciB0byByZXR1cm4/CiAg
ICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkRlY29kZUVycm9yOyAKICAgICAg
ICAgbV9wbGF5ZXItPm5ldHdvcmtTdGF0ZUNoYW5nZWQoKTsKQEAgLTI3MCw3ICsyNjAsNyBAQCB2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6bG9hZChjb25zdCBTdHJpCiAgICAgfQogCiAgICAgLy8g
SW5pdGlhbGl6ZSB0aGUgdGFzayB0aW1lci4KLSAgICBUYXNrVGltZXI6OmluaXRpYWxpemUoKTsK
KyAgICBNZWRpYVBsYXllclByaXZhdGVUYXNrVGltZXI6OmluaXRpYWxpemUoKTsKIAogICAgIGlm
IChtX25ldHdvcmtTdGF0ZSAhPSBNZWRpYVBsYXllcjo6TG9hZGluZykgewogICAgICAgICBtX25l
dHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpMb2FkaW5nOwpAQCAtMjg0LDU0ICsyNzQsNTMgQEAg
dm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmxvYWQoY29uc3QgU3RyaQogCiAgICAgc2V0VXBDb29r
aWVzRm9yUXVpY2tUaW1lKHVybCk7CiAKLSAgICBtX3F0TW92aWUuc2V0KG5ldyBRVE1vdmllV2lu
KHRoaXMpKTsKLSAgICBtX3F0TW92aWUtPmxvYWQodXJsLmNoYXJhY3RlcnMoKSwgdXJsLmxlbmd0
aCgpLCBtX3BsYXllci0+cHJlc2VydmVzUGl0Y2goKSk7Ci0gICAgbV9xdE1vdmllLT5zZXRWb2x1
bWUobV9wbGF5ZXItPnZvbHVtZSgpKTsKLSAgICBtX3F0TW92aWUtPnNldFZpc2libGUobV9wbGF5
ZXItPnZpc2libGUoKSk7CisgICAgbV9tb3ZpZSA9IGFkb3B0UmVmKG5ldyBRVE1vdmllKG1fbW92
aWVDbGllbnQuZ2V0KCkpKTsKKyAgICBtX21vdmllLT5sb2FkKHVybC5jaGFyYWN0ZXJzKCksIHVy
bC5sZW5ndGgoKSwgbV9wbGF5ZXItPnByZXNlcnZlc1BpdGNoKCkpOworICAgIG1fbW92aWUtPnNl
dFZvbHVtZShtX3BsYXllci0+dm9sdW1lKCkpOworCisgICAgQ0ZEaWN0aW9uYXJ5UmVmIG9wdGlv
bnMgPSBRVE1vdmllVmlzdWFsQ29udGV4dDo6Z2V0Q0dJbWFnZU9wdGlvbnMoKTsKKyAgICBtX3Zp
c3VhbENvbnRleHQgPSBhZG9wdFJlZihuZXcgUVRNb3ZpZVZpc3VhbENvbnRleHQobV92aXN1YWxD
b250ZXh0Q2xpZW50LmdldCgpLCBvcHRpb25zKSk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlOjpwbGF5KCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4
dDo6cGxheSgpCiB7Ci0gICAgaWYgKCFtX3F0TW92aWUpCisgICAgaWYgKCFtX21vdmllKQogICAg
ICAgICByZXR1cm47CiAgICAgbV9zdGFydGVkUGxheWluZyA9IHRydWU7Ci0jaWYgRFJBV19GUkFN
RV9SQVRFCi0gICAgbV9mcmFtZUNvdW50V2hpbGVQbGF5aW5nID0gMDsKLSNlbmRpZgogCi0gICAg
bV9xdE1vdmllLT5wbGF5KCk7CisgICAgbV9tb3ZpZS0+cGxheSgpOworICAgIG1fdmlzdWFsQ29u
dGV4dFRpbWVyLnN0YXJ0UmVwZWF0aW5nKDEuMCAvIDMwKTsKIH0KIAotdm9pZCBNZWRpYVBsYXll
clByaXZhdGU6OnBhdXNlKCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFs
Q29udGV4dDo6cGF1c2UoKQogewotICAgIGlmICghbV9xdE1vdmllKQorICAgIGlmICghbV9tb3Zp
ZSkKICAgICAgICAgcmV0dXJuOwogICAgIG1fc3RhcnRlZFBsYXlpbmcgPSBmYWxzZTsKLSNpZiBE
UkFXX0ZSQU1FX1JBVEUKLSAgICBtX3RpbWVTdG9wcGVkUGxheWluZyA9IFdURjo6Y3VycmVudFRp
bWUoKTsKLSNlbmRpZgotICAgIG1fcXRNb3ZpZS0+cGF1c2UoKTsKKworICAgIG1fbW92aWUtPnBh
dXNlKCk7CisgICAgbV92aXN1YWxDb250ZXh0VGltZXIuc3RvcCgpOwogfQogCi1mbG9hdCBNZWRp
YVBsYXllclByaXZhdGU6OmR1cmF0aW9uKCkgY29uc3QKK2Zsb2F0IE1lZGlhUGxheWVyUHJpdmF0
ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OmR1cmF0aW9uKCkgY29uc3QKIHsKLSAgICBpZiAoIW1f
cXRNb3ZpZSkKKyAgICBpZiAoIW1fbW92aWUpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVy
biBtX3F0TW92aWUtPmR1cmF0aW9uKCk7CisgICAgcmV0dXJuIG1fbW92aWUtPmR1cmF0aW9uKCk7
CiB9CiAKLWZsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZTo6Y3VycmVudFRpbWUoKSBjb25zdAorZmxv
YXQgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6Y3VycmVudFRpbWUo
KSBjb25zdAogewotICAgIGlmICghbV9xdE1vdmllKQorICAgIGlmICghbV9tb3ZpZSkKICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIG1fcXRNb3ZpZS0+Y3VycmVudFRpbWUoKTsKKyAgICBy
ZXR1cm4gbV9tb3ZpZS0+Y3VycmVudFRpbWUoKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZh
dGU6OnNlZWsoZmxvYXQgdGltZSkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlz
dWFsQ29udGV4dDo6c2VlayhmbG9hdCB0aW1lKQogewogICAgIGNhbmNlbFNlZWsoKTsKICAgICAK
LSAgICBpZiAoIW1fcXRNb3ZpZSkKKyAgICBpZiAoIW1fbW92aWUpCiAgICAgICAgIHJldHVybjsK
ICAgICAKICAgICBpZiAodGltZSA+IGR1cmF0aW9uKCkpCkBAIC0zNDQsMjggKzMzMywyOCBAQCB2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2VlayhmbG9hdCB0aW1lCiAgICAgICAgIG1fc2Vla1Rp
bWVyLnN0YXJ0KDAsIDAuNWYpOwogfQogICAgIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmRv
U2VlaygpIAordm9pZCBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0Ojpk
b1NlZWsoKSAKIHsKLSAgICBmbG9hdCBvbGRSYXRlID0gbV9xdE1vdmllLT5yYXRlKCk7CisgICAg
ZmxvYXQgb2xkUmF0ZSA9IG1fbW92aWUtPnJhdGUoKTsKICAgICBpZiAob2xkUmF0ZSkKLSAgICAg
ICAgbV9xdE1vdmllLT5zZXRSYXRlKDApOwotICAgIG1fcXRNb3ZpZS0+c2V0Q3VycmVudFRpbWUo
bV9zZWVrVG8pOworICAgICAgICBtX21vdmllLT5zZXRSYXRlKDApOworICAgIG1fbW92aWUtPnNl
dEN1cnJlbnRUaW1lKG1fc2Vla1RvKTsKICAgICBmbG9hdCB0aW1lQWZ0ZXJTZWVrID0gY3VycmVu
dFRpbWUoKTsKICAgICAvLyByZXN0b3JlIHBsYXliYWNrIG9ubHkgaWYgbm90IGF0IGVuZCwgb3Ro
ZXdpc2UgUVRNb3ZpZSB3aWxsIGxvb3AKICAgICBpZiAob2xkUmF0ZSAmJiB0aW1lQWZ0ZXJTZWVr
IDwgZHVyYXRpb24oKSkKLSAgICAgICAgbV9xdE1vdmllLT5zZXRSYXRlKG9sZFJhdGUpOworICAg
ICAgICBtX21vdmllLT5zZXRSYXRlKG9sZFJhdGUpOwogICAgIGNhbmNlbFNlZWsoKTsKIH0KIAot
dm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmNhbmNlbFNlZWsoKQordm9pZCBNZWRpYVBsYXllclBy
aXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpjYW5jZWxTZWVrKCkKIHsKICAgICBtX3NlZWtU
byA9IC0xOwogICAgIG1fc2Vla1RpbWVyLnN0b3AoKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclBy
aXZhdGU6OnNlZWtUaW1lckZpcmVkKFRpbWVyPE1lZGlhUGxheWVyUHJpdmF0ZT4qKQordm9pZCBN
ZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpzZWVrVGltZXJGaXJlZChU
aW1lcjxNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0PiopCiB7ICAgICAg
ICAKLSAgICBpZiAoIW1fcXRNb3ZpZSB8fCAhc2Vla2luZygpIHx8IGN1cnJlbnRUaW1lKCkgPT0g
bV9zZWVrVG8pIHsKKyAgICBpZiAoIW1fbW92aWUgfHwgIXNlZWtpbmcoKSB8fCBjdXJyZW50VGlt
ZSgpID09IG1fc2Vla1RvKSB7CiAgICAgICAgIGNhbmNlbFNlZWsoKTsKICAgICAgICAgdXBkYXRl
U3RhdGVzKCk7CiAgICAgICAgIG1fcGxheWVyLT50aW1lQ2hhbmdlZCgpOyAKQEAgLTM4NCw4MCAr
MzczLDg1IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZWVrVGltZXJGaXJlZCgKICAgICB9
CiB9CiAKLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlOjpwYXVzZWQoKSBjb25zdAorYm9vbCBNZWRp
YVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpwYXVzZWQoKSBjb25zdAogewot
ICAgIGlmICghbV9xdE1vdmllKQorICAgIGlmICghbV9tb3ZpZSkKICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgcmV0dXJuIG1fcXRNb3ZpZS0+cmF0ZSgpID09IDAuMGY7CisgICAgcmV0dXJuICgh
bV9tb3ZpZS0+cmF0ZSgpKTsKIH0KIAotYm9vbCBNZWRpYVBsYXllclByaXZhdGU6OnNlZWtpbmco
KSBjb25zdAorYm9vbCBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0Ojpz
ZWVraW5nKCkgY29uc3QKIHsKLSAgICBpZiAoIW1fcXRNb3ZpZSkKKyAgICBpZiAoIW1fbW92aWUp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gbV9zZWVrVG8gPj0gMDsKIH0KIAot
SW50U2l6ZSBNZWRpYVBsYXllclByaXZhdGU6Om5hdHVyYWxTaXplKCkgY29uc3QKK0ludFNpemUg
TWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6bmF0dXJhbFNpemUoKSBj
b25zdAogewotICAgIGlmICghbV9xdE1vdmllKQorICAgIGlmICghbV9tb3ZpZSkKICAgICAgICAg
cmV0dXJuIEludFNpemUoKTsKICAgICBpbnQgd2lkdGg7CiAgICAgaW50IGhlaWdodDsKLSAgICBt
X3F0TW92aWUtPmdldE5hdHVyYWxTaXplKHdpZHRoLCBoZWlnaHQpOworICAgIG1fbW92aWUtPmdl
dE5hdHVyYWxTaXplKHdpZHRoLCBoZWlnaHQpOwogICAgIHJldHVybiBJbnRTaXplKHdpZHRoLCBo
ZWlnaHQpOwogfQogCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6aGFzVmlkZW8oKSBjb25zdAor
Ym9vbCBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpoYXNWaWRlbygp
IGNvbnN0CiB7Ci0gICAgaWYgKCFtX3F0TW92aWUpCisgICAgaWYgKCFtX21vdmllKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIG1fcXRNb3ZpZS0+aGFzVmlkZW8oKTsKKyAgICBy
ZXR1cm4gbV9tb3ZpZS0+aGFzVmlkZW8oKTsKIH0KIAotYm9vbCBNZWRpYVBsYXllclByaXZhdGU6
Omhhc0F1ZGlvKCkgY29uc3QKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFs
Q29udGV4dDo6aGFzQXVkaW8oKSBjb25zdAogewotICAgIGlmICghbV9xdE1vdmllKQorICAgIGlm
ICghbV9tb3ZpZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBtX3F0TW92aWUt
Pmhhc0F1ZGlvKCk7CisgICAgcmV0dXJuIG1fbW92aWUtPmhhc0F1ZGlvKCk7CiB9CiAKLXZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRWb2x1bWUoZmxvYXQgdm9sdW1lKQordm9pZCBNZWRpYVBs
YXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpzZXRWb2x1bWUoZmxvYXQgdm9sdW1l
KQogewotICAgIGlmICghbV9xdE1vdmllKQorICAgIGlmICghbV9tb3ZpZSkKICAgICAgICAgcmV0
dXJuOwotICAgIG1fcXRNb3ZpZS0+c2V0Vm9sdW1lKHZvbHVtZSk7CisgICAgbV9tb3ZpZS0+c2V0
Vm9sdW1lKHZvbHVtZSk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRSYXRlKGZs
b2F0IHJhdGUpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6
OnNldFJhdGUoZmxvYXQgcmF0ZSkKIHsKLSAgICBpZiAoIW1fcXRNb3ZpZSkKKyAgICBpZiAoIW1f
bW92aWUpCiAgICAgICAgIHJldHVybjsKLSAgICBtX3F0TW92aWUtPnNldFJhdGUocmF0ZSk7CisK
KyAgICAvLyBEbyBub3QgY2FsbCBzZXRSYXRlKC4uLikgdW5sZXNzIHdlIGhhdmUgc3RhcnRlZCBw
bGF5aW5nOyBvdGhlcndpc2UKKyAgICAvLyBRdWlja1RpbWUncyBWaXN1YWxDb250ZXh0IGNhbiBn
ZXQgd2VkZ2VkIHdhaXRpbmcgZm9yIGEgcmF0ZSBjaGFuZ2UKKyAgICAvLyBjYWxsIHdoaWNoIHdp
bGwgbmV2ZXIgY29tZS4KKyAgICBpZiAobV9zdGFydGVkUGxheWluZykKKyAgICAgICAgbV9tb3Zp
ZS0+c2V0UmF0ZShyYXRlKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNldFByZXNl
cnZlc1BpdGNoKGJvb2wgcHJlc2VydmVzUGl0Y2gpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF1
aWNrVGltZVZpc3VhbENvbnRleHQ6OnNldFByZXNlcnZlc1BpdGNoKGJvb2wgcHJlc2VydmVzUGl0
Y2gpCiB7Ci0gICAgaWYgKCFtX3F0TW92aWUpCisgICAgaWYgKCFtX21vdmllKQogICAgICAgICBy
ZXR1cm47Ci0gICAgbV9xdE1vdmllLT5zZXRQcmVzZXJ2ZXNQaXRjaChwcmVzZXJ2ZXNQaXRjaCk7
CisgICAgbV9tb3ZpZS0+c2V0UHJlc2VydmVzUGl0Y2gocHJlc2VydmVzUGl0Y2gpOwogfQogCi1i
b29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6aGFzQ2xvc2VkQ2FwdGlvbnMoKSBjb25zdAorYm9vbCBN
ZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpoYXNDbG9zZWRDYXB0aW9u
cygpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX3F0TW92aWUpCisgICAgaWYgKCFtX21vdmllKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIG1fcXRNb3ZpZS0+aGFzQ2xvc2VkQ2FwdGlv
bnMoKTsKKyAgICByZXR1cm4gbV9tb3ZpZS0+aGFzQ2xvc2VkQ2FwdGlvbnMoKTsKIH0KIAotdm9p
ZCBNZWRpYVBsYXllclByaXZhdGU6OnNldENsb3NlZENhcHRpb25zVmlzaWJsZShib29sIHZpc2li
bGUpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OnNldENs
b3NlZENhcHRpb25zVmlzaWJsZShib29sIHZpc2libGUpCiB7Ci0gICAgaWYgKCFtX3F0TW92aWUp
CisgICAgaWYgKCFtX21vdmllKQogICAgICAgICByZXR1cm47Ci0gICAgbV9xdE1vdmllLT5zZXRD
bG9zZWRDYXB0aW9uc1Zpc2libGUodmlzaWJsZSk7CisgICAgbV9tb3ZpZS0+c2V0Q2xvc2VkQ2Fw
dGlvbnNWaXNpYmxlKHZpc2libGUpOwogfQogCi1QYXNzUmVmUHRyPFRpbWVSYW5nZXM+IE1lZGlh
UGxheWVyUHJpdmF0ZTo6YnVmZmVyZWQoKSBjb25zdAorUGFzc1JlZlB0cjxUaW1lUmFuZ2VzPiBN
ZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpidWZmZXJlZCgpIGNvbnN0
CiB7CiAgICAgUmVmUHRyPFRpbWVSYW5nZXM+IHRpbWVSYW5nZXMgPSBUaW1lUmFuZ2VzOjpjcmVh
dGUoKTsKICAgICBmbG9hdCBsb2FkZWQgPSBtYXhUaW1lTG9hZGVkKCk7CkBAIC00NjcsMjIgKzQ2
MSwyMiBAQCBQYXNzUmVmUHRyPFRpbWVSYW5nZXM+IE1lZGlhUGxheWVyUHJpdmF0CiAgICAgcmV0
dXJuIHRpbWVSYW5nZXMucmVsZWFzZSgpOwogfQogCi1mbG9hdCBNZWRpYVBsYXllclByaXZhdGU6
Om1heFRpbWVTZWVrYWJsZSgpIGNvbnN0CitmbG9hdCBNZWRpYVBsYXllclByaXZhdGVRdWlja1Rp
bWVWaXN1YWxDb250ZXh0OjptYXhUaW1lU2Vla2FibGUoKSBjb25zdAogewogICAgIC8vIGluZmlu
aXRlIGR1cmF0aW9uIG1lYW5zIGxpdmUgc3RyZWFtCiAgICAgcmV0dXJuICFpc2Zpbml0ZShkdXJh
dGlvbigpKSA/IDAgOiBtYXhUaW1lTG9hZGVkKCk7CiB9CiAKLWZsb2F0IE1lZGlhUGxheWVyUHJp
dmF0ZTo6bWF4VGltZUxvYWRlZCgpIGNvbnN0CitmbG9hdCBNZWRpYVBsYXllclByaXZhdGVRdWlj
a1RpbWVWaXN1YWxDb250ZXh0OjptYXhUaW1lTG9hZGVkKCkgY29uc3QKIHsKLSAgICBpZiAoIW1f
cXRNb3ZpZSkKKyAgICBpZiAoIW1fbW92aWUpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVy
biBtX3F0TW92aWUtPm1heFRpbWVMb2FkZWQoKTsgCisgICAgcmV0dXJuIG1fbW92aWUtPm1heFRp
bWVMb2FkZWQoKTsgCiB9CiAKLXVuc2lnbmVkIE1lZGlhUGxheWVyUHJpdmF0ZTo6Ynl0ZXNMb2Fk
ZWQoKSBjb25zdAordW5zaWduZWQgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29u
dGV4dDo6Ynl0ZXNMb2FkZWQoKSBjb25zdAogewotICAgIGlmICghbV9xdE1vdmllKQorICAgIGlm
ICghbV9tb3ZpZSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgZmxvYXQgZHVyID0gZHVyYXRpb24o
KTsKICAgICBmbG9hdCBtYXhUaW1lID0gbWF4VGltZUxvYWRlZCgpOwpAQCAtNDkxLDE0ICs0ODUs
MTQgQEAgdW5zaWduZWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpieXRlc0xvYWRlZAogICAgIHJldHVy
biB0b3RhbEJ5dGVzKCkgKiBtYXhUaW1lIC8gZHVyOwogfQogCi11bnNpZ25lZCBNZWRpYVBsYXll
clByaXZhdGU6OnRvdGFsQnl0ZXMoKSBjb25zdAordW5zaWduZWQgTWVkaWFQbGF5ZXJQcml2YXRl
UXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6dG90YWxCeXRlcygpIGNvbnN0CiB7Ci0gICAgaWYgKCFt
X3F0TW92aWUpCisgICAgaWYgKCFtX21vdmllKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1
cm4gbV9xdE1vdmllLT5kYXRhU2l6ZSgpOworICAgIHJldHVybiBtX21vdmllLT5kYXRhU2l6ZSgp
OwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6Y2FuY2VsTG9hZCgpCit2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OmNhbmNlbExvYWQoKQogewogICAg
IGlmIChtX25ldHdvcmtTdGF0ZSA8IE1lZGlhUGxheWVyOjpMb2FkaW5nIHx8IG1fbmV0d29ya1N0
YXRlID09IE1lZGlhUGxheWVyOjpMb2FkZWQpCiAgICAgICAgIHJldHVybjsKQEAgLTUwNiwyMCAr
NTAwLDIwIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpjYW5jZWxMb2FkKCkKICAgICB0ZWFy
RG93blZpZGVvUmVuZGVyaW5nKCk7CiAKICAgICAvLyBDYW5jZWwgdGhlIGxvYWQgYnkgZGVzdHJv
eWluZyB0aGUgbW92aWUuCi0gICAgbV9xdE1vdmllLmNsZWFyKCk7CisgICAgbV9tb3ZpZS5jbGVh
cigpOwogCiAgICAgdXBkYXRlU3RhdGVzKCk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
Ojp1cGRhdGVTdGF0ZXMoKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxD
b250ZXh0Ojp1cGRhdGVTdGF0ZXMoKQogewogICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUg
b2xkTmV0d29ya1N0YXRlID0gbV9uZXR3b3JrU3RhdGU7CiAgICAgTWVkaWFQbGF5ZXI6OlJlYWR5
U3RhdGUgb2xkUmVhZHlTdGF0ZSA9IG1fcmVhZHlTdGF0ZTsKICAgCi0gICAgbG9uZyBsb2FkU3Rh
dGUgPSBtX3F0TW92aWUgPyBtX3F0TW92aWUtPmxvYWRTdGF0ZSgpIDogUVRNb3ZpZUxvYWRTdGF0
ZUVycm9yOworICAgIGxvbmcgbG9hZFN0YXRlID0gbV9tb3ZpZSA/IG1fbW92aWUtPmxvYWRTdGF0
ZSgpIDogUVRNb3ZpZUxvYWRTdGF0ZUVycm9yOwogCiAgICAgaWYgKGxvYWRTdGF0ZSA+PSBRVE1v
dmllTG9hZFN0YXRlTG9hZGVkICYmIG1fcmVhZHlTdGF0ZSA8IE1lZGlhUGxheWVyOjpIYXZlTWV0
YWRhdGEpIHsKLSAgICAgICAgbV9xdE1vdmllLT5kaXNhYmxlVW5zdXBwb3J0ZWRUcmFja3MobV9l
bmFibGVkVHJhY2tDb3VudCwgbV90b3RhbFRyYWNrQ291bnQpOworICAgICAgICBtX21vdmllLT5k
aXNhYmxlVW5zdXBwb3J0ZWRUcmFja3MobV9lbmFibGVkVHJhY2tDb3VudCwgbV90b3RhbFRyYWNr
Q291bnQpOwogICAgICAgICBpZiAobV9wbGF5ZXItPmluTWVkaWFEb2N1bWVudCgpKSB7CiAgICAg
ICAgICAgICBpZiAoIW1fZW5hYmxlZFRyYWNrQ291bnQgfHwgbV9lbmFibGVkVHJhY2tDb3VudCAh
PSBtX3RvdGFsVHJhY2tDb3VudCkgewogICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSB0eXBl
IG9mIG1lZGlhIHRoYXQgd2UgZG8gbm90IGhhbmRsZSBkaXJlY3RseSB3aXRoIGEgPHZpZGVvPiAK
QEAgLTU4Miw0NSArNTc2LDQxIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjp1cGRhdGVTdGF0
ZXMoKQogICAgICAgICBtX3BsYXllci0+cmVhZHlTdGF0ZUNoYW5nZWQoKTsKIH0KIAotYm9vbCBN
ZWRpYVBsYXllclByaXZhdGU6OmlzUmVhZHlGb3JSZW5kZXJpbmcoKSBjb25zdAorYm9vbCBNZWRp
YVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0Ojppc1JlYWR5Rm9yUmVuZGVyaW5n
KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9yZWFkeVN0YXRlID49IE1lZGlhUGxheWVyOjpIYXZl
TWV0YWRhdGEgJiYgbV9wbGF5ZXItPnZpc2libGUoKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclBy
aXZhdGU6OnNhd1Vuc3VwcG9ydGVkVHJhY2tzKCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXVp
Y2tUaW1lVmlzdWFsQ29udGV4dDo6c2F3VW5zdXBwb3J0ZWRUcmFja3MoKQogewotICAgIG1fcXRN
b3ZpZS0+c2V0RGlzYWJsZWQodHJ1ZSk7CisgICAgbV9tb3ZpZS0+c2V0RGlzYWJsZWQodHJ1ZSk7
CiAgICAgbV9oYXNVbnN1cHBvcnRlZFRyYWNrcyA9IHRydWU7CiAgICAgbV9wbGF5ZXItPm1lZGlh
UGxheWVyQ2xpZW50KCktPm1lZGlhUGxheWVyU2F3VW5zdXBwb3J0ZWRUcmFja3MobV9wbGF5ZXIp
OwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6ZGlkRW5kKCkKK3ZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6ZGlkRW5kKCkKIHsKICAgICBpZiAobV9o
YXNVbnN1cHBvcnRlZFRyYWNrcykKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9zdGFydGVkUGxh
eWluZyA9IGZhbHNlOwotI2lmIERSQVdfRlJBTUVfUkFURQotICAgIG1fdGltZVN0b3BwZWRQbGF5
aW5nID0gV1RGOjpjdXJyZW50VGltZSgpOwotI2VuZGlmCisKICAgICB1cGRhdGVTdGF0ZXMoKTsK
ICAgICBtX3BsYXllci0+dGltZUNoYW5nZWQoKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZh
dGU6OnNldFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkgCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OnNldFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkgCiB7
IAotICAgIGlmIChtX2hhc1Vuc3VwcG9ydGVkVHJhY2tzIHx8ICFtX3F0TW92aWUgfHwgbV9zaXpl
ID09IHNpemUpCisgICAgaWYgKG1faGFzVW5zdXBwb3J0ZWRUcmFja3MgfHwgIW1fbW92aWUgfHwg
bV9zaXplID09IHNpemUpCiAgICAgICAgIHJldHVybjsKICAgICBtX3NpemUgPSBzaXplOwotICAg
IG1fcXRNb3ZpZS0+c2V0U2l6ZShzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwogfQogCi12
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0VmlzaWJsZShib29sIHZpc2libGUpCit2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OnNldFZpc2libGUoYm9vbCB2
aXNpYmxlKQogewotICAgIGlmIChtX2hhc1Vuc3VwcG9ydGVkVHJhY2tzIHx8ICFtX3F0TW92aWUg
fHwgbV92aXNpYmxlID09IHZpc2libGUpCisgICAgaWYgKG1faGFzVW5zdXBwb3J0ZWRUcmFja3Mg
fHwgIW1fbW92aWUgfHwgbV92aXNpYmxlID09IHZpc2libGUpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIG1fcXRNb3ZpZS0+c2V0VmlzaWJsZSh2aXNpYmxlKTsKICAgICBtX3Zpc2libGUgPSB2aXNp
YmxlOwogICAgIGlmIChtX3Zpc2libGUpIHsKICAgICAgICAgaWYgKGlzUmVhZHlGb3JSZW5kZXJp
bmcoKSkKQEAgLTYyOSw4OCArNjE5LDEzOCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0
VmlzaWJsZShib29sCiAgICAgICAgIHRlYXJEb3duVmlkZW9SZW5kZXJpbmcoKTsKIH0KIAotdm9p
ZCBNZWRpYVBsYXllclByaXZhdGU6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogcCwgY29uc3QgSW50
UmVjdCYgcikKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6
cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBwLCBjb25zdCBJbnRSZWN0JiByKQogewogI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICBpZiAobV9xdFZpZGVvTGF5ZXIpCiAgICAgICAg
IHJldHVybjsKICNlbmRpZgotICAgIGlmIChwLT5wYWludGluZ0Rpc2FibGVkKCkgfHwgIW1fcXRN
b3ZpZSB8fCBtX2hhc1Vuc3VwcG9ydGVkVHJhY2tzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBi
b29sIHVzaW5nVGVtcEJpdG1hcCA9IGZhbHNlOwotICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ6
OldpbmRvd3NCaXRtYXA+IGJpdG1hcDsKLSAgICBIREMgaGRjID0gcC0+Z2V0V2luZG93c0NvbnRl
eHQocik7Ci0gICAgaWYgKCFoZGMpIHsKLSAgICAgICAgLy8gVGhlIGdyYXBoaWNzIGNvbnRleHQg
ZG9lc24ndCBoYXZlIGFuIGFzc29jaWF0ZWQgSERDIHNvIGNyZWF0ZSBhIHRlbXBvcmFyeQotICAg
ICAgICAvLyBiaXRtYXAgd2hlcmUgUVRNb3ZpZVdpbiBjYW4gZHJhdyB0aGUgZnJhbWUgYW5kIHdl
IGNhbiBjb3B5IGl0LgotICAgICAgICB1c2luZ1RlbXBCaXRtYXAgPSB0cnVlOwotICAgICAgICBi
aXRtYXAuc2V0KHAtPmNyZWF0ZVdpbmRvd3NCaXRtYXAoci5zaXplKCkpKTsKLSAgICAgICAgaGRj
ID0gYml0bWFwLT5oZGMoKTsKLQotICAgICAgICAvLyBGSVhNRTogaXMgdGhpcyBuZWNlc3Nhcnk/
PwotICAgICAgICBYRk9STSB4Zm9ybTsKLSAgICAgICAgeGZvcm0uZU0xMSA9IDEuMGY7Ci0gICAg
ICAgIHhmb3JtLmVNMTIgPSAwLjBmOwotICAgICAgICB4Zm9ybS5lTTIxID0gMC4wZjsKLSAgICAg
ICAgeGZvcm0uZU0yMiA9IDEuMGY7Ci0gICAgICAgIHhmb3JtLmVEeCA9IC1yLngoKTsKLSAgICAg
ICAgeGZvcm0uZUR5ID0gLXIueSgpOwotICAgICAgICBTZXRXb3JsZFRyYW5zZm9ybShoZGMsICZ4
Zm9ybSk7Ci0gICAgfQotCi0gICAgbV9xdE1vdmllLT5wYWludChoZGMsIHIueCgpLCByLnkoKSk7
Ci0gICAgaWYgKHVzaW5nVGVtcEJpdG1hcCkKLSAgICAgICAgcC0+ZHJhd1dpbmRvd3NCaXRtYXAo
Yml0bWFwLmdldCgpLCByLnRvcExlZnQoKSk7Ci0gICAgZWxzZQotICAgICAgICBwLT5yZWxlYXNl
V2luZG93c0NvbnRleHQoaGRjLCByKTsKIAogICAgIHBhaW50Q29tcGxldGVkKCpwLCByKTsKIH0K
IAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnBhaW50Q29tcGxldGVkKEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
UXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6cGFpbnRDb21wbGV0ZWQoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIG1fbmV3RnJhbWVBdmFpbGFibGUg
PSBmYWxzZTsKK30KIAotI2lmIERSQVdfRlJBTUVfUkFURQotICAgIGlmIChtX2ZyYW1lQ291bnRX
aGlsZVBsYXlpbmcgPiAxMCkgewotICAgICAgICBkb3VibGUgaW50ZXJ2YWwgPSAgbV9zdGFydGVk
UGxheWluZyA/IFdURjo6Y3VycmVudFRpbWUoKSAtIG1fdGltZVN0YXJ0ZWRQbGF5aW5nIDogbV90
aW1lU3RvcHBlZFBsYXlpbmcgLSBtX3RpbWVTdGFydGVkUGxheWluZzsKLSAgICAgICAgZG91Ymxl
IGZyYW1lUmF0ZSA9IChtX2ZyYW1lQ291bnRXaGlsZVBsYXlpbmcgLSAxKSAvIGludGVydmFsOwot
ICAgICAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gY29udGV4dC5wbGF0Zm9ybUNvbnRleHQo
KTsKLSAgICAgICAgQ0dSZWN0IGRyYXdSZWN0ID0gcmVjdDsKLQotICAgICAgICBjaGFyIHRleHRb
OF07Ci0gICAgICAgIF9zbnByaW50Zih0ZXh0LCBzaXplb2YodGV4dCksICIlMS4yZiIsIGZyYW1l
UmF0ZSk7Ci0KLSAgICAgICAgc3RhdGljIGNvbnN0IGludCBmb250U2l6ZSA9IDI1OwotICAgICAg
ICBzdGF0aWMgY29uc3QgaW50IGZvbnRDaGFyV2lkdGggPSAxMjsKLSAgICAgICAgc3RhdGljIGNv
bnN0IGludCBib3hIZWlnaHQgPSAyNTsKLSAgICAgICAgc3RhdGljIGNvbnN0IGludCBib3hCb3Jk
ZXJXaWR0aCA9IDQ7Ci0gICAgICAgIGRyYXdSZWN0LnNpemUud2lkdGggPSBib3hCb3JkZXJXaWR0
aCAqIDIgKyBmb250Q2hhcldpZHRoICogc3RybGVuKHRleHQpOwotICAgICAgICBkcmF3UmVjdC5z
aXplLmhlaWdodCA9IGJveEhlaWdodDsKLQotICAgICAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNn
Q29udGV4dCk7Ci0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgICAgICBpZiAo
bV9xdFZpZGVvTGF5ZXIpCi0gICAgICAgICAgICBDR0NvbnRleHRTY2FsZUNUTShjZ0NvbnRleHQs
IDEsIC0xKTsKLSAgICAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNnQ29udGV4dCwgcmVjdC53
aWR0aCgpIC0gZHJhd1JlY3Quc2l6ZS53aWR0aCwgbV9xdFZpZGVvTGF5ZXIgPyAtcmVjdC5oZWln
aHQoKSA6IDApOwotI2Vsc2UKLSAgICAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNnQ29udGV4
dCwgcmVjdC53aWR0aCgpIC0gZHJhd1JlY3Quc2l6ZS53aWR0aCwgMCk7Ci0jZW5kaWYKLSAgICAg
ICAgc3RhdGljIGNvbnN0IENHRmxvYXQgYmFja2dyb3VuZENvbG9yWzRdID0geyAwLjk4LCAwLjk4
LCAwLjgyLCAwLjggfTsKLSAgICAgICAgQ0dDb250ZXh0U2V0RmlsbENvbG9yKGNnQ29udGV4dCwg
YmFja2dyb3VuZENvbG9yKTsKLSAgICAgICAgQ0dDb250ZXh0RmlsbFJlY3QoY2dDb250ZXh0LCBk
cmF3UmVjdCk7Ci0KLSAgICAgICAgc3RhdGljIGNvbnN0IENHRmxvYXQgdGV4dENvbG9yWzRdID0g
eyAwLCAwLCAwLCAxIH07Ci0gICAgICAgIENHQ29udGV4dFNldEZpbGxDb2xvcihjZ0NvbnRleHQs
IHRleHRDb2xvcik7Ci0gICAgICAgIENHQ29udGV4dFNldFRleHRNYXRyaXgoY2dDb250ZXh0LCBD
R0FmZmluZVRyYW5zZm9ybU1ha2VTY2FsZSgxLCAtMSkpOwotICAgICAgICBDR0NvbnRleHRTZWxl
Y3RGb250KGNnQ29udGV4dCwgIkhlbHZldGljYSIsIGZvbnRTaXplLCBrQ0dFbmNvZGluZ01hY1Jv
bWFuKTsKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6Vmlz
dWFsQ29udGV4dENsaWVudDo6cmV0cmlldmVDdXJyZW50SW1hZ2VQcm9jKHZvaWQqIHJlZmNvbikK
K3sKKyAgICBzdGF0aWNfY2FzdDxNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250
ZXh0Kj4ocmVmY29uKS0+cmV0cmlldmVDdXJyZW50SW1hZ2UoKTsKK30KKwordm9pZCBNZWRpYVBs
YXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpWaXN1YWxDb250ZXh0Q2xpZW50Ojpp
bWFnZUF2YWlsYWJsZUZvclRpbWUoY29uc3QgUVRDVlRpbWVTdGFtcCogdGltZVN0YW1wKQorewor
ICAgIC8vIFRoaXMgY2FsbCBtYXkgY29tZSBpbiBvbiBhbm90aGVyIHRocmVhZCwgc28gbWFyc2hh
bGwgdG8gdGhlIG1haW4gdGhyZWFkIGZpcnN0OgorICAgIGNhbGxPbk1haW5UaHJlYWQoJnJldHJp
ZXZlQ3VycmVudEltYWdlUHJvYywgbV9wYXJlbnQpOworCisgICAgLy8gY2FsbE9uTWFpblRocmVh
ZCBtdXN0IGJlIHBhaXJlZCB3aXRoIGNhbmNlbENhbGxPbk1haW5UaHJlYWQgaW4gdGhlIGRlc3Ry
dWN0b3IsCisgICAgLy8gaW4gY2FzZSB0aGlzIG9iamVjdCBpcyBkZWxldGVkIGJlZm9yZSB0aGUg
bWFpbiB0aHJlYWQgcmVxdWVzdCBpcyBoYW5kbGVkLgorfQorCit2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OnZpc3VhbENvbnRleHRUaW1lckZpcmVkKFRpbWVy
PE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ+KikKK3sKKyAgICByZXRy
aWV2ZUN1cnJlbnRJbWFnZSgpOworfQorCitzdGF0aWMgQ0ZEaWN0aW9uYXJ5UmVmIFFUQ0ZEaWN0
aW9uYXJ5Q3JlYXRlV2l0aERhdGFDYWxsYmFjayhDRkFsbG9jYXRvclJlZiBhbGxvY2F0b3IsIGNv
bnN0IFVJbnQ4KiBieXRlcywgQ0ZJbmRleCBsZW5ndGgpCit7CisgICAgQ0ZEYXRhUmVmIGRhdGEg
PSBDRkRhdGFDcmVhdGVXaXRoQnl0ZXNOb0NvcHkoYWxsb2NhdG9yLCBieXRlcywgbGVuZ3RoLCAw
KTsKKyAgICBpZiAoIWRhdGEpCisgICAgICAgIHJldHVybiAwOwogCi0gICAgICAgIENHQ29udGV4
dFNob3dUZXh0QXRQb2ludChjZ0NvbnRleHQsIGRyYXdSZWN0Lm9yaWdpbi54ICsgYm94Qm9yZGVy
V2lkdGgsIGRyYXdSZWN0Lm9yaWdpbi55ICsgYm94SGVpZ2h0IC0gYm94Qm9yZGVyV2lkdGgsIHRl
eHQsIHN0cmxlbih0ZXh0KSk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Q0ZEaWN0aW9u
YXJ5UmVmPihDRlByb3BlcnR5TGlzdENyZWF0ZUZyb21YTUxEYXRhKGFsbG9jYXRvciwgZGF0YSwg
a0NGUHJvcGVydHlMaXN0SW1tdXRhYmxlLCAwKSk7Cit9CisKK3N0YXRpYyBDR0ltYWdlUmVmIENy
ZWF0ZUNHSW1hZ2VGcm9tUGl4ZWxCdWZmZXIoUVRQaXhlbEJ1ZmZlciBidWZmZXIpCit7CisgICAg
Q0dEYXRhUHJvdmlkZXJSZWYgcHJvdmlkZXIgPSAwOworICAgIENHQ29sb3JTcGFjZVJlZiBjb2xv
clNwYWNlID0gMDsKKyAgICBDR0ltYWdlUmVmIGltYWdlID0gMDsKKworICAgIHNpemVfdCBiaXRz
UGVyQ29tcG9uZW50ID0gMDsKKyAgICBzaXplX3QgYml0c1BlclBpeGVsID0gMDsKKyAgICBDR0lt
YWdlQWxwaGFJbmZvIGFscGhhSW5mbyA9IGtDR0ltYWdlQWxwaGFOb25lOwogICAgICAgICAKLSAg
ICAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjZ0NvbnRleHQpOyAgICAgICAgCisgICAgaWYg
KGJ1ZmZlci5waXhlbEZvcm1hdElzMzJCR1JBKCkpIHsKKyAgICAgICAgYml0c1BlckNvbXBvbmVu
dCA9IDg7CisgICAgICAgIGJpdHNQZXJQaXhlbCA9IDMyOworICAgICAgICBhbHBoYUluZm8gPSAo
Q0dJbWFnZUFscGhhSW5mbykoa0NHSW1hZ2VBbHBoYU5vbmVTa2lwRmlyc3QgfCBrQ0dCaXRtYXBC
eXRlT3JkZXIzMkxpdHRsZSk7CisgICAgfSBlbHNlIGlmIChidWZmZXIucGl4ZWxGb3JtYXRJczMy
QVJHQigpKSB7CisgICAgICAgIGJpdHNQZXJDb21wb25lbnQgPSA4OworICAgICAgICBiaXRzUGVy
UGl4ZWwgPSAzMjsKKyAgICAgICAgYWxwaGFJbmZvID0gKENHSW1hZ2VBbHBoYUluZm8pKGtDR0lt
YWdlQWxwaGFOb25lU2tpcExhc3QgfCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkJpZyk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgLy8gQWxsIG90aGVyIHBpeGVsIGZvcm1hdHMgYXJlIGN1cnJlbnRseSB1
bnN1cHBvcnRlZDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQorCisgICAg
Q0dEYXRhUHJvdmlkZXJEaXJlY3RBY2Nlc3NDYWxsYmFja3MgY2FsbGJhY2tzID0geworICAgICAg
ICAmUVRQaXhlbEJ1ZmZlcjo6ZGF0YVByb3ZpZGVyR2V0Qnl0ZVBvaW50ZXJDYWxsYmFjaywKKyAg
ICAgICAgJlFUUGl4ZWxCdWZmZXI6OmRhdGFQcm92aWRlclJlbGVhc2VCeXRlUG9pbnRlckNhbGxi
YWNrLAorICAgICAgICAmUVRQaXhlbEJ1ZmZlcjo6ZGF0YVByb3ZpZGVyR2V0Qnl0ZXNBdFBvc2l0
aW9uQ2FsbGJhY2ssCisgICAgICAgICZRVFBpeGVsQnVmZmVyOjpkYXRhUHJvdmlkZXJSZWxlYXNl
SW5mb0NhbGxiYWNrLAorICAgIH07CisgICAgCisgICAgLy8gQ29sb3JzcGFjZSBzaG91bGQgYmUg
ZGV2aWNlLCBzbyB0aGF0IFF1YXJ0eiBkb2VzIG5vdCBoYXZlIHRvIGRvIGFuIGV4dHJhIHJlbmRl
ci4KKyAgICBjb2xvclNwYWNlID0gQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdCKCk7CisgICAg
cmVxdWlyZShjb2xvclNwYWNlLCBCYWlsKTsKKyAgICAgICAgICAgIAorICAgIHByb3ZpZGVyID0g
Q0dEYXRhUHJvdmlkZXJDcmVhdGVEaXJlY3RBY2Nlc3MoYnVmZmVyLnBpeGVsQnVmZmVyUmVmKCks
IGJ1ZmZlci5kYXRhU2l6ZSgpLCAmY2FsbGJhY2tzKTsKKyAgICByZXF1aXJlKHByb3ZpZGVyLCBC
YWlsKTsKKworICAgIC8vIENHRGF0YVByb3ZpZGVyIGRvZXMgbm90IHJldGFpbiB0aGUgYnVmZmVy
LCBidXQgaXQgd2lsbCByZWxlYXNlIGl0IGxhdGVyLCBzbyBkbyBhbiBleHRyYSByZXRhaW4gaGVy
ZToKKyAgICBRVFBpeGVsQnVmZmVyOjpyZXRhaW5DYWxsYmFjayhidWZmZXIucGl4ZWxCdWZmZXJS
ZWYoKSk7CisgICAgICAgIAorICAgIGltYWdlID0gQ0dJbWFnZUNyZWF0ZShidWZmZXIud2lkdGgo
KSwgYnVmZmVyLmhlaWdodCgpLCBiaXRzUGVyQ29tcG9uZW50LCBiaXRzUGVyUGl4ZWwsIGJ1ZmZl
ci5ieXRlc1BlclJvdygpLCBjb2xvclNwYWNlLCBhbHBoYUluZm8sIHByb3ZpZGVyLCAwLCBmYWxz
ZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCk7CisgCitCYWlsOgorICAgIC8vIE9uY2UgdGhl
IGltYWdlIGlzIGNyZWF0ZWQgd2UgY2FuIHJlbGVhc2Ugb3VyIHJlZmVyZW5jZSB0byB0aGUgcHJv
dmlkZXIgYW5kIHRoZSBjb2xvcnNwYWNlLCB0aGV5IGFyZSByZXRhaW5lZCBieSB0aGUgaW1hZ2UK
KyAgICBpZiAocHJvdmlkZXIpCisgICAgICAgIENHRGF0YVByb3ZpZGVyUmVsZWFzZShwcm92aWRl
cik7CisgICAgaWYgKGNvbG9yU3BhY2UpCisgICAgICAgIENHQ29sb3JTcGFjZVJlbGVhc2UoY29s
b3JTcGFjZSk7CisgCisgICAgcmV0dXJuIGltYWdlOworfQorCisKK3ZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6cmV0cmlldmVDdXJyZW50SW1hZ2UoKQorewor
ICAgIGlmICghbV92aXN1YWxDb250ZXh0KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1f
cXRWaWRlb0xheWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBRVFBpeGVsQnVmZmVyIGJ1ZmZl
ciA9IG1fdmlzdWFsQ29udGV4dC0+aW1hZ2VGb3JUaW1lKDApOworICAgIGlmICghYnVmZmVyLnBp
eGVsQnVmZmVyUmVmKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFdLQ0FDRkxheWVyKiBsYXll
ciA9IHN0YXRpY19jYXN0PFdLQ0FDRkxheWVyKj4obV9xdFZpZGVvTGF5ZXItPnBsYXRmb3JtTGF5
ZXIoKSk7CisKKyAgICBpZiAoIWJ1ZmZlci5sb2NrQmFzZUFkZHJlc3MoKSkgeworI2lmbmRlZiBO
REVCVUcKKyAgICAgICAgLy8gRGVidWcgUXVpY2tUaW1lIGxpbmtzIGFnYWluc3QgYSBub24tRGVi
dWcgdmVyc2lvbiBvZiBDb3JlRm91bmRhdGlvbiwgc28gdGhlIENGRGljdGlvbmFyeSBhdHRhY2hl
ZCB0byB0aGUgQ1ZQaXhlbEJ1ZmZlciBjYW5ub3QgYmUgZGlyZWN0bHkgcGFzc2VkIG9uIGludG8g
dGhlIENBSW1hZ2VRdWV1ZSB3aXRob3V0IGJlaW5nIGNvbnZlcnRlZCB0byBhIG5vbi1EZWJ1ZyBD
RkRpY3Rpb25hcnk6CisgICAgICAgIENGRGljdGlvbmFyeVJlZiBhdHRhY2htZW50cyA9IFFUQ0ZE
aWN0aW9uYXJ5Q3JlYXRlQ29weVdpdGhEYXRhQ2FsbGJhY2soa0NGQWxsb2NhdG9yRGVmYXVsdCwg
YnVmZmVyLmF0dGFjaG1lbnRzKCksICZRVENGRGljdGlvbmFyeUNyZWF0ZVdpdGhEYXRhQ2FsbGJh
Y2spOworI2Vsc2UKKyAgICAgICAgLy8gSG93ZXZlciwgdGhpcyBpcyB1bm5lY3NzZXNhcnkgaW4g
dGhlIG5vbi1EZWJ1ZyBjYXNlOgorICAgICAgICBDRkRpY3Rpb25hcnlSZWYgYXR0YWNobWVudHMg
PSBzdGF0aWNfY2FzdDxDRkRpY3Rpb25hcnlSZWY+KENGUmV0YWluKGJ1ZmZlci5hdHRhY2htZW50
cygpKSk7CiAjZW5kaWYKKworICAgICAgICBDRlRpbWVJbnRlcnZhbCBpbWFnZVRpbWUgPSBRVE1v
dmllVmlzdWFsQ29udGV4dDo6Y3VycmVudEhvc3RUaW1lKCk7CisKKyAgICAgICAgQ0dJbWFnZVJl
ZiBpbWFnZSA9IENyZWF0ZUNHSW1hZ2VGcm9tUGl4ZWxCdWZmZXIoYnVmZmVyKTsKKyAgICAgICAg
bGF5ZXItPnNldENvbnRlbnRzKGltYWdlKTsKKyAgICAgICAgQ0dJbWFnZVJlbGVhc2UoaW1hZ2Up
OworCisgICAgICAgIGlmIChhdHRhY2htZW50cykKKyAgICAgICAgICAgIENGUmVsZWFzZShhdHRh
Y2htZW50cyk7CisKKyAgICAgICAgYnVmZmVyLnVubG9ja0Jhc2VBZGRyZXNzKCk7CisgICAgICAg
IGxheWVyLT5yb290TGF5ZXIoKS0+c2V0TmVlZHNSZW5kZXIoKTsKKyAgICB9CisgICAgbV92aXN1
YWxDb250ZXh0LT50YXNrKCk7CiB9CiAKIHN0YXRpYyBIYXNoU2V0PFN0cmluZz4gbWltZVR5cGVD
YWNoZSgpCkBAIC03MTksMTEgKzc1OSwxMSBAQCBzdGF0aWMgSGFzaFNldDxTdHJpbmc+IG1pbWVU
eXBlQ2FjaGUoKQogICAgIHN0YXRpYyBib29sIHR5cGVMaXN0SW5pdGlhbGl6ZWQgPSBmYWxzZTsK
IAogICAgIGlmICghdHlwZUxpc3RJbml0aWFsaXplZCkgewotICAgICAgICB1bnNpZ25lZCBjb3Vu
dCA9IFFUTW92aWVXaW46OmNvdW50U3VwcG9ydGVkVHlwZXMoKTsKKyAgICAgICAgdW5zaWduZWQg
Y291bnQgPSBRVE1vdmllOjpjb3VudFN1cHBvcnRlZFR5cGVzKCk7CiAgICAgICAgIGZvciAodW5z
aWduZWQgbiA9IDA7IG4gPCBjb3VudDsgbisrKSB7CiAgICAgICAgICAgICBjb25zdCBVQ2hhciog
Y2hhcmFjdGVyOwogICAgICAgICAgICAgdW5zaWduZWQgbGVuOwotICAgICAgICAgICAgUVRNb3Zp
ZVdpbjo6Z2V0U3VwcG9ydGVkVHlwZShuLCBjaGFyYWN0ZXIsIGxlbik7CisgICAgICAgICAgICBR
VE1vdmllOjpnZXRTdXBwb3J0ZWRUeXBlKG4sIGNoYXJhY3RlciwgbGVuKTsKICAgICAgICAgICAg
IGlmIChsZW4pCiAgICAgICAgICAgICAgICAgdHlwZUNhY2hlLmFkZChTdHJpbmcoY2hhcmFjdGVy
LCBsZW4pKTsKICAgICAgICAgfQpAQCAtNzMyLDg5ICs3NzIsNjUgQEAgc3RhdGljIEhhc2hTZXQ8
U3RyaW5nPiBtaW1lVHlwZUNhY2hlKCkKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIHR5cGVDYWNo
ZTsKLX0gCit9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpnZXRTdXBwb3J0ZWRUeXBlcyhI
YXNoU2V0PFN0cmluZz4mIHR5cGVzKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVW
aXN1YWxDb250ZXh0OjpnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZz4mIHR5cGVzKQog
ewogICAgIHR5cGVzID0gbWltZVR5cGVDYWNoZSgpOwogfSAKIAotYm9vbCBNZWRpYVBsYXllclBy
aXZhdGU6OmlzQXZhaWxhYmxlKCkKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlz
dWFsQ29udGV4dDo6aXNBdmFpbGFibGUoKQogewotICAgIHJldHVybiBRVE1vdmllV2luOjppbml0
aWFsaXplUXVpY2tUaW1lKCk7CisgICAgcmV0dXJuIFFUTW92aWU6OmluaXRpYWxpemVRdWlja1Rp
bWUoKTsKIH0KIAotTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBNZWRpYVBsYXllclByaXZhdGU6
OnN1cHBvcnRzVHlwZShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgY29kZWNzKQor
TWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1
YWxDb250ZXh0OjpzdXBwb3J0c1R5cGUoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcm
IGNvZGVjcykKIHsKICAgICAvLyBvbmx5IHJldHVybiAiSXNTdXBwb3J0ZWQiIGlmIHRoZXJlIGlz
IG5vIGNvZGVjcyBwYXJhbWV0ZXIgZm9yIG5vdyBhcyB0aGVyZSBpcyBubyB3YXkgdG8gYXNrIFFU
IGlmIGl0IHN1cHBvcnRzIGFuCiAgICAgLy8gIGV4dGVuZGVkIE1JTUUgdHlwZQogICAgIHJldHVy
biBtaW1lVHlwZUNhY2hlKCkuY29udGFpbnModHlwZSkgPyAoY29kZWNzLmlzRW1wdHkoKSA/IE1l
ZGlhUGxheWVyOjpNYXlCZVN1cHBvcnRlZCA6IE1lZGlhUGxheWVyOjpJc1N1cHBvcnRlZCkgOiBN
ZWRpYVBsYXllcjo6SXNOb3RTdXBwb3J0ZWQ7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
Ojptb3ZpZUVuZGVkKFFUTW92aWVXaW4qIG1vdmllKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVR
dWlja1RpbWVWaXN1YWxDb250ZXh0OjpNb3ZpZUNsaWVudDo6bW92aWVFbmRlZChRVE1vdmllKiBt
b3ZpZSkKIHsKLSAgICBpZiAobV9oYXNVbnN1cHBvcnRlZFRyYWNrcykKKyAgICBpZiAobV9wYXJl
bnQtPm1faGFzVW5zdXBwb3J0ZWRUcmFja3MpCiAgICAgICAgIHJldHVybjsKIAotICAgIEFTU0VS
VChtX3F0TW92aWUuZ2V0KCkgPT0gbW92aWUpOwotICAgIGRpZEVuZCgpOwotfQotCi12b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZTo6bW92aWVMb2FkU3RhdGVDaGFuZ2VkKFFUTW92aWVXaW4qIG1vdmll
KQotewotICAgIGlmIChtX2hhc1Vuc3VwcG9ydGVkVHJhY2tzKQotICAgICAgICByZXR1cm47Cisg
ICAgbV9wYXJlbnQtPm1fdmlzdWFsQ29udGV4dFRpbWVyLnN0b3AoKTsKIAotICAgIEFTU0VSVCht
X3F0TW92aWUuZ2V0KCkgPT0gbW92aWUpOwotICAgIHVwZGF0ZVN0YXRlcygpOworICAgIEFTU0VS
VChtX3BhcmVudC0+bV9tb3ZpZS5nZXQoKSA9PSBtb3ZpZSk7CisgICAgbV9wYXJlbnQtPmRpZEVu
ZCgpOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6bW92aWVUaW1lQ2hhbmdlZChRVE1v
dmllV2luKiBtb3ZpZSkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29u
dGV4dDo6TW92aWVDbGllbnQ6Om1vdmllTG9hZFN0YXRlQ2hhbmdlZChRVE1vdmllKiBtb3ZpZSkK
IHsKLSAgICBpZiAobV9oYXNVbnN1cHBvcnRlZFRyYWNrcykKKyAgICBpZiAobV9wYXJlbnQtPm1f
aGFzVW5zdXBwb3J0ZWRUcmFja3MpCiAgICAgICAgIHJldHVybjsKIAotICAgIEFTU0VSVChtX3F0
TW92aWUuZ2V0KCkgPT0gbW92aWUpOwotICAgIHVwZGF0ZVN0YXRlcygpOwotICAgIG1fcGxheWVy
LT50aW1lQ2hhbmdlZCgpOworICAgIEFTU0VSVChtX3BhcmVudC0+bV9tb3ZpZS5nZXQoKSA9PSBt
b3ZpZSk7CisgICAgbV9wYXJlbnQtPnVwZGF0ZVN0YXRlcygpOwogfQogCi12b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZTo6bW92aWVOZXdJbWFnZUF2YWlsYWJsZShRVE1vdmllV2luKiBtb3ZpZSkKK3Zv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6TW92aWVDbGllbnQ6
Om1vdmllVGltZUNoYW5nZWQoUVRNb3ZpZSogbW92aWUpCiB7Ci0gICAgaWYgKG1faGFzVW5zdXBw
b3J0ZWRUcmFja3MpCisgICAgaWYgKG1fcGFyZW50LT5tX2hhc1Vuc3VwcG9ydGVkVHJhY2tzKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQobV9xdE1vdmllLmdldCgpID09IG1vdmllKTsK
LSNpZiBEUkFXX0ZSQU1FX1JBVEUKLSAgICBpZiAobV9zdGFydGVkUGxheWluZykgewotICAgICAg
ICBtX2ZyYW1lQ291bnRXaGlsZVBsYXlpbmcrKzsKLSAgICAgICAgLy8gVG8gZWxpbWluYXRlIHBy
ZXJvbGwgY29zdHMgZnJvbSBvdXIgY2FsY3VsYXRpb24sIG91ciBmcmFtZSByYXRlIGNhbGN1bGF0
aW9uIGV4Y2x1ZGVzCi0gICAgICAgIC8vIHRoZSBmaXJzdCBmcmFtZSBkcmF3biBhZnRlciBwbGF5
YmFjayBzdGFydHMuCi0gICAgICAgIGlmIChtX2ZyYW1lQ291bnRXaGlsZVBsYXlpbmcgPT0gMSkK
LSAgICAgICAgICAgIG1fdGltZVN0YXJ0ZWRQbGF5aW5nID0gV1RGOjpjdXJyZW50VGltZSgpOwot
ICAgIH0KLSNlbmRpZgotCi0gICAgbV9uZXdGcmFtZUF2YWlsYWJsZSA9IHRydWU7Ci0KLSNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgaWYgKG1fcXRWaWRlb0xheWVyKQotICAg
ICAgICBtX3F0VmlkZW9MYXllci0+cGxhdGZvcm1MYXllcigpLT5zZXROZWVkc0Rpc3BsYXkoKTsK
LSAgICBlbHNlCi0jZW5kaWYKLSAgICAgICAgbV9wbGF5ZXItPnJlcGFpbnQoKTsKKyAgICBBU1NF
UlQobV9wYXJlbnQtPm1fbW92aWUuZ2V0KCkgPT0gbW92aWUpOworICAgIG1fcGFyZW50LT51cGRh
dGVTdGF0ZXMoKTsKKyAgICBtX3BhcmVudC0+bV9wbGF5ZXItPnRpbWVDaGFuZ2VkKCk7CiB9CiAK
LWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlOjpoYXNTaW5nbGVTZWN1cml0eU9yaWdpbigpIGNvbnN0
Citib29sIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6Omhhc1Npbmds
ZVNlY3VyaXR5T3JpZ2luKCkgY29uc3QKIHsKICAgICAvLyBXZSB0ZWxsIHF1aWNrdGltZSB0byBk
aXNhbGxvdyByZXNvdXJjZXMgdGhhdCBjb21lIGZyb20gZGlmZmVyZW50IG9yaWdpbnMKICAgICAv
LyBzbyB3ZSBhbGwgbWVkaWEgaXMgc2luZ2xlIG9yaWdpbi4KICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotTWVkaWFQbGF5ZXJQcml2YXRlOjpNZWRpYVJlbmRlcmluZ01vZGUgTWVkaWFQbGF5ZXJQcml2
YXRlOjpjdXJyZW50UmVuZGVyaW5nTW9kZSgpIGNvbnN0CitNZWRpYVBsYXllclByaXZhdGVRdWlj
a1RpbWVWaXN1YWxDb250ZXh0OjpNZWRpYVJlbmRlcmluZ01vZGUgTWVkaWFQbGF5ZXJQcml2YXRl
UXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6Y3VycmVudFJlbmRlcmluZ01vZGUoKSBjb25zdAogewot
ICAgIGlmICghbV9xdE1vdmllKQorICAgIGlmICghbV9tb3ZpZSkKICAgICAgICAgcmV0dXJuIE1l
ZGlhUmVuZGVyaW5nTm9uZTsKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKQEAg
LTgyNSw5ICs4NDEsOSBAQCBNZWRpYVBsYXllclByaXZhdGU6Ok1lZGlhUmVuZGVyaW5nTW9kZSBN
CiAgICAgcmV0dXJuIE1lZGlhUmVuZGVyaW5nU29mdHdhcmVSZW5kZXJlcjsKIH0KIAotTWVkaWFQ
bGF5ZXJQcml2YXRlOjpNZWRpYVJlbmRlcmluZ01vZGUgTWVkaWFQbGF5ZXJQcml2YXRlOjpwcmVm
ZXJyZWRSZW5kZXJpbmdNb2RlKCkgY29uc3QKK01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZp
c3VhbENvbnRleHQ6Ok1lZGlhUmVuZGVyaW5nTW9kZSBNZWRpYVBsYXllclByaXZhdGVRdWlja1Rp
bWVWaXN1YWxDb250ZXh0OjpwcmVmZXJyZWRSZW5kZXJpbmdNb2RlKCkgY29uc3QKIHsKLSAgICBp
ZiAoIW1fcGxheWVyLT5mcmFtZVZpZXcoKSB8fCAhbV9xdE1vdmllKQorICAgIGlmICghbV9wbGF5
ZXItPmZyYW1lVmlldygpIHx8ICFtX21vdmllKQogICAgICAgICByZXR1cm4gTWVkaWFSZW5kZXJp
bmdOb25lOwogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpAQCAtODM4LDcgKzg1
NCw3IEBAIE1lZGlhUGxheWVyUHJpdmF0ZTo6TWVkaWFSZW5kZXJpbmdNb2RlIE0KICAgICByZXR1
cm4gTWVkaWFSZW5kZXJpbmdTb2Z0d2FyZVJlbmRlcmVyOwogfQogCi12b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZTo6c2V0VXBWaWRlb1JlbmRlcmluZygpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF1
aWNrVGltZVZpc3VhbENvbnRleHQ6OnNldFVwVmlkZW9SZW5kZXJpbmcoKQogewogICAgIE1lZGlh
UmVuZGVyaW5nTW9kZSBjdXJyZW50TW9kZSA9IGN1cnJlbnRSZW5kZXJpbmdNb2RlKCk7CiAgICAg
TWVkaWFSZW5kZXJpbmdNb2RlIHByZWZlcnJlZE1vZGUgPSBwcmVmZXJyZWRSZW5kZXJpbmdNb2Rl
KCk7CkBAIC04NjAsMTcgKzg3NiwyMSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0VXBW
aWRlb1JlbmRlCiAgICAgaWYgKGN1cnJlbnRNb2RlID09IE1lZGlhUmVuZGVyaW5nTW92aWVMYXll
ciB8fCBwcmVmZXJyZWRNb2RlID09IE1lZGlhUmVuZGVyaW5nTW92aWVMYXllcikKICAgICAgICAg
bV9wbGF5ZXItPm1lZGlhUGxheWVyQ2xpZW50KCktPm1lZGlhUGxheWVyUmVuZGVyaW5nTW9kZUNo
YW5nZWQobV9wbGF5ZXIpOwogI2VuZGlmCisKKyAgICBtX3Zpc3VhbENvbnRleHQtPnNldE1vdmll
KG1fbW92aWUuZ2V0KCkpOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6dGVhckRvd25W
aWRlb1JlbmRlcmluZygpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENv
bnRleHQ6OnRlYXJEb3duVmlkZW9SZW5kZXJpbmcoKQogewogI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKICAgICBpZiAobV9xdFZpZGVvTGF5ZXIpCiAgICAgICAgIGRlc3Ryb3lMYXll
ckZvck1vdmllKCk7CiAjZW5kaWYKKworICAgIG1fdmlzdWFsQ29udGV4dC0+c2V0TW92aWUoMCk7
CiB9CiAKLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlOjpoYXNTZXRVcFZpZGVvUmVuZGVyaW5nKCkg
Y29uc3QKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6aGFz
U2V0VXBWaWRlb1JlbmRlcmluZygpIGNvbnN0CiB7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQogICAgIHJldHVybiBtX3F0VmlkZW9MYXllciB8fCBjdXJyZW50UmVuZGVyaW5nTW9k
ZSgpICE9IE1lZGlhUmVuZGVyaW5nTW92aWVMYXllcjsKQEAgLTg3OSw1NiArODk5LDE4IEBAIGJv
b2wgTWVkaWFQbGF5ZXJQcml2YXRlOjpoYXNTZXRVcFZpZGVvUmUKICNlbmRpZgogfQogCi0jaWYg
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotCi0vLyBVcC1jYWxsIGZyb20gY29tcG9zaXRp
bmcgbGF5ZXIgZHJhd2luZyBjYWxsYmFjay4KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpwYWlu
dENvbnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IEdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBJbnRSZWN0JikKLXsKLSAgICAgaWYg
KG1faGFzVW5zdXBwb3J0ZWRUcmFja3MpCi0gICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQo
c3VwcG9ydHNBY2NlbGVyYXRlZFJlbmRlcmluZygpKTsKLQotICAgIC8vIE5vIHJlYXNvbiB0byBy
ZXBsYWNlIHRoZSBjdXJyZW50IGxheWVyIGltYWdlIHVubGVzcyB3ZSBoYXZlIHNvbWV0aGluZyBu
ZXcgdG8gc2hvdy4KLSAgICBpZiAoIW1fbmV3RnJhbWVBdmFpbGFibGUpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIHN0YXRpYyBDR0NvbG9yU3BhY2VSZWYgY29sb3JTcGFjZSA9IENHQ29sb3JTcGFj
ZUNyZWF0ZURldmljZVJHQigpOwotICAgIHZvaWQqIGJ1ZmZlcjsKLSAgICB1bnNpZ25lZCBiaXRz
UGVyUGl4ZWw7Ci0gICAgdW5zaWduZWQgcm93Qnl0ZXM7Ci0gICAgdW5zaWduZWQgd2lkdGg7Ci0g
ICAgdW5zaWduZWQgaGVpZ2h0OwotCi0gICAgbV9xdE1vdmllLT5nZXRDdXJyZW50RnJhbWVJbmZv
KGJ1ZmZlciwgYml0c1BlclBpeGVsLCByb3dCeXRlcywgd2lkdGgsIGhlaWdodCk7Ci0gICAgaWYg
KCFidWZmZXIpCi0gICAgICAgIHJldHVybiA7Ci0KLSAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBk
YXRhKEFkb3B0Q0YsIENGRGF0YUNyZWF0ZVdpdGhCeXRlc05vQ29weSgwLCBzdGF0aWNfY2FzdDxV
SW50OCo+KGJ1ZmZlciksIHJvd0J5dGVzICogaGVpZ2h0LCBrQ0ZBbGxvY2F0b3JOdWxsKSk7Ci0g
ICAgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVyUmVmPiBwcm92aWRlcihBZG9wdENGLCBDR0RhdGFQ
cm92aWRlckNyZWF0ZVdpdGhDRkRhdGEoZGF0YS5nZXQoKSkpOwotICAgIFJldGFpblB0cjxDR0lt
YWdlUmVmPiBmcmFtZUltYWdlKEFkb3B0Q0YsIENHSW1hZ2VDcmVhdGUod2lkdGgsIGhlaWdodCwg
OCwgYml0c1BlclBpeGVsLCByb3dCeXRlcywgY29sb3JTcGFjZSwgCi0gICAgICAgIGtDR0JpdG1h
cEJ5dGVPcmRlcjMyTGl0dGxlIHwga0NHSW1hZ2VBbHBoYUZpcnN0LCBwcm92aWRlci5nZXQoKSwg
MCwgZmFsc2UsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpKTsKLSAgICBpZiAoIWZyYW1lSW1h
Z2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIEludFJlY3QgcmVjdCgwLCAwLCBtX3NpemUud2lk
dGgoKSwgbV9zaXplLmhlaWdodCgpKTsKLSAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dC5w
bGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwgZnJhbWVJbWFnZS5nZXQoKSk7IAotICAgIHBhaW50Q29t
cGxldGVkKGNvbnRleHQsIHJlY3QpOwotfQotI2VuZGlmCi0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlOjpjcmVhdGVMYXllckZvck1vdmllKCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tU
aW1lVmlzdWFsQ29udGV4dDo6Y3JlYXRlTGF5ZXJGb3JNb3ZpZSgpCiB7CiAjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIEFTU0VSVChzdXBwb3J0c0FjY2VsZXJhdGVkUmVuZGVy
aW5nKCkpOwogCi0gICAgaWYgKCFtX3F0TW92aWUgfHwgbV9xdFZpZGVvTGF5ZXIpCisgICAgaWYg
KCFtX21vdmllIHx8IG1fcXRWaWRlb0xheWVyKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBD
cmVhdGUgYSBHcmFwaGljc0xheWVyIHRoYXQgd29uJ3QgYmUgaW5zZXJ0ZWQgZGlyZWN0bHkgaW50
byB0aGUgcmVuZGVyIHRyZWUsIGJ1dCB3aWxsIHVzZWQgCiAgICAgLy8gYXMgYSB3cmFwcGVyIGZv
ciBhIFdLQ0FDRkxheWVyIHdoaWNoIGdldHMgaW5zZXJ0ZWQgYXMgdGhlIGNvbnRlbnQgbGF5ZXIg
b2YgdGhlIHZpZGVvIAogICAgIC8vIHJlbmRlcmVyJ3MgR3JhcGhpY3NMYXllci4KLSAgICBtX3F0
VmlkZW9MYXllci5zZXQobmV3IEdyYXBoaWNzTGF5ZXJDQUNGKHRoaXMpKTsKKyAgICBtX3F0Vmlk
ZW9MYXllci5zZXQobmV3IEdyYXBoaWNzTGF5ZXJDQUNGKG1fbGF5ZXJDbGllbnQuZ2V0KCkpKTsK
ICAgICBpZiAoIW1fcXRWaWRlb0xheWVyKQogICAgICAgICByZXR1cm47CiAKQEAgLTk0Myw3ICs5
MjUsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6Y3JlYXRlTGF5ZXJGb3JNCiAjZW5kaWYK
IH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmRlc3Ryb3lMYXllckZvck1vdmllKCkKK3Zv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6ZGVzdHJveUxheWVy
Rm9yTW92aWUoKQogewogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICBpZiAo
IW1fcXRWaWRlb0xheWVyKQpAQCAtOTUyLDEzICs5MzQsMTcgQEAgdm9pZCBNZWRpYVBsYXllclBy
aXZhdGU6OmRlc3Ryb3lMYXllckZvcgogI2VuZGlmCiB9CiAKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6TGF5ZXJDbGllbnQ6OnBhaW50Q29udGVudHMoY29u
c3QgR3JhcGhpY3NMYXllciosIEdyYXBoaWNzQ29udGV4dCYsIEdyYXBoaWNzTGF5ZXJQYWludGlu
Z1BoYXNlLCBjb25zdCBJbnRSZWN0JiBpbkNsaXApCit7Cit9CisKICNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6c3VwcG9ydHNBY2NlbGVy
YXRlZFJlbmRlcmluZygpIGNvbnN0Citib29sIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZp
c3VhbENvbnRleHQ6OnN1cHBvcnRzQWNjZWxlcmF0ZWRSZW5kZXJpbmcoKSBjb25zdAogewogICAg
IHJldHVybiBpc1JlYWR5Rm9yUmVuZGVyaW5nKCk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlOjphY2NlbGVyYXRlZFJlbmRlcmluZ1N0YXRlQ2hhbmdlZCgpCit2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OmFjY2VsZXJhdGVkUmVuZGVyaW5nU3RhdGVD
aGFuZ2VkKCkKIHsKICAgICAvLyBTZXQgdXAgb3IgY2hhbmdlIHRoZSByZW5kZXJpbmcgcGF0aCBp
ZiBuZWNlc3NhcnkuCiAgICAgc2V0VXBWaWRlb1JlbmRlcmluZygpOwpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29u
dGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlh
UGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQuaAkocmV2aXNpb24gNTg1OTYpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVRdWlja1Rp
bWVWaXN1YWxDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDI2ICsyMywyNSBAQAogICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBNZWRpYVBsYXllclByaXZhdGVRVEtpdF9oCi0j
ZGVmaW5lIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0X2gKKyNpZm5kZWYgTWVkaWFQbGF5ZXJQcml2
YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dF9oCisjZGVmaW5lIE1lZGlhUGxheWVyUHJpdmF0ZVF1
aWNrVGltZVZpc3VhbENvbnRleHRfaAogCiAjaWYgRU5BQkxFKFZJREVPKQogCisjaW5jbHVkZSAi
R3JhcGhpY3NMYXllckNsaWVudC5oIgogI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZS5oIgog
I2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVkZSA8UVRNb3ZpZVdpbi5oPgogI2luY2x1ZGUgPHd0
Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAKLSNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCi0jaW5jbHVkZSAiR3JhcGhpY3NMYXllckNsaWVudC5oIgotI2Vu
ZGlmIAotCiAjaWZuZGVmIERSQVdfRlJBTUVfUkFURQogI2RlZmluZSBEUkFXX0ZSQU1FX1JBVEUg
MAogI2VuZGlmCiAKIHR5cGVkZWYgc3RydWN0IENHSW1hZ2UgKkNHSW1hZ2VSZWY7CitjbGFzcyBR
VE1vdmllOworY2xhc3MgUVRNb3ZpZVZpc3VhbENvbnRleHQ7CitjbGFzcyBXS0NBSW1hZ2VRdWV1
ZTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01MSwzNCArNTAsMTggQEAgY2xhc3MgSW50
U2l6ZTsKIGNsYXNzIEludFJlY3Q7CiBjbGFzcyBTdHJpbmc7CiAKLWNsYXNzIE1lZGlhUGxheWVy
UHJpdmF0ZSA6IHB1YmxpYyBNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2UsIHB1YmxpYyBRVE1v
dmllV2luQ2xpZW50IAotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICAgICAg
LCBwdWJsaWMgR3JhcGhpY3NMYXllckNsaWVudAotI2VuZGlmIAoteworY2xhc3MgTWVkaWFQbGF5
ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dCA6IHB1YmxpYyBNZWRpYVBsYXllclByaXZh
dGVJbnRlcmZhY2UgewogcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyTWVkaWFFbmdp
bmUoTWVkaWFFbmdpbmVSZWdpc3RyYXIpOwogCi0gICAgfk1lZGlhUGxheWVyUHJpdmF0ZSgpOwor
ICAgIH5NZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0KCk7CiAKIHByaXZh
dGU6Ci0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgLy8gR3JhcGhpY3NM
YXllckNsaWVudCBtZXRob2RzCi0gICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoY29uc3Qg
R3JhcGhpY3NMYXllciosIEdyYXBoaWNzQ29udGV4dCYsIEdyYXBoaWNzTGF5ZXJQYWludGluZ1Bo
YXNlLCBjb25zdCBJbnRSZWN0JiBpbkNsaXApOwotICAgIHZpcnR1YWwgdm9pZCBub3RpZnlBbmlt
YXRpb25TdGFydGVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBkb3VibGUgdGltZSkgeyB9Ci0gICAg
dmlydHVhbCB2b2lkIG5vdGlmeVN5bmNSZXF1aXJlZChjb25zdCBHcmFwaGljc0xheWVyKikgeyB9
Ci0gICAgdmlydHVhbCBib29sIHNob3dEZWJ1Z0JvcmRlcnMoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBzaG93UmVwYWludENvdW50ZXIoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQotI2VuZGlmIAotCi0gICAgTWVkaWFQbGF5ZXJQcml2YXRlKE1lZGlhUGxheWVy
Kik7CisgICAgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dChNZWRpYVBs
YXllciopOwogCiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRnVsbHNjcmVlbigpIGNvbnN0Owog
ICAgIHZpcnR1YWwgUGxhdGZvcm1NZWRpYSBwbGF0Zm9ybU1lZGlhKCkgY29uc3Q7Ci0jaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5
ZXIoKSBjb25zdDsKLSNlbmRpZgogCiAgICAgSW50U2l6ZSBuYXR1cmFsU2l6ZSgpIGNvbnN0Owog
ICAgIGJvb2wgaGFzVmlkZW8oKSBjb25zdDsKQEAgLTEyNiwyNSArMTA5LDE4IEBAIHByaXZhdGU6
CiAgICAgdm9pZCB1cGRhdGVTdGF0ZXMoKTsKICAgICB2b2lkIGRvU2VlaygpOwogICAgIHZvaWQg
Y2FuY2VsU2VlaygpOwotICAgIHZvaWQgc2Vla1RpbWVyRmlyZWQoVGltZXI8TWVkaWFQbGF5ZXJQ
cml2YXRlPiopOworICAgIHZvaWQgc2Vla1RpbWVyRmlyZWQoVGltZXI8TWVkaWFQbGF5ZXJQcml2
YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dD4qKTsKICAgICBmbG9hdCBtYXhUaW1lTG9hZGVkKCkg
Y29uc3Q7CiAgICAgdm9pZCBzYXdVbnN1cHBvcnRlZFRyYWNrcygpOwogCi0gICAgdmlydHVhbCB2
b2lkIG1vdmllRW5kZWQoUVRNb3ZpZVdpbiopOwotICAgIHZpcnR1YWwgdm9pZCBtb3ZpZUxvYWRT
dGF0ZUNoYW5nZWQoUVRNb3ZpZVdpbiopOwotICAgIHZpcnR1YWwgdm9pZCBtb3ZpZVRpbWVDaGFu
Z2VkKFFUTW92aWVXaW4qKTsKLSAgICB2aXJ0dWFsIHZvaWQgbW92aWVOZXdJbWFnZUF2YWlsYWJs
ZShRVE1vdmllV2luKik7Ci0KICAgICAvLyBlbmdpbmUgc3VwcG9ydAogICAgIHN0YXRpYyBNZWRp
YVBsYXllclByaXZhdGVJbnRlcmZhY2UqIGNyZWF0ZShNZWRpYVBsYXllciopOwogICAgIHN0YXRp
YyB2b2lkIGdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5nPiYgdHlwZXMpOwogICAgIHN0
YXRpYyBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIHN1cHBvcnRzVHlwZShjb25zdCBTdHJpbmcm
IHR5cGUsIGNvbnN0IFN0cmluZyYgY29kZWNzKTsKICAgICBzdGF0aWMgYm9vbCBpc0F2YWlsYWJs
ZSgpOwogCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIHZpcnR1YWwgYm9v
bCBzdXBwb3J0c0FjY2VsZXJhdGVkUmVuZGVyaW5nKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lk
IGFjY2VsZXJhdGVkUmVuZGVyaW5nU3RhdGVDaGFuZ2VkKCk7Ci0jZW5kaWYKIAogICAgIGVudW0g
TWVkaWFSZW5kZXJpbmdNb2RlIHsgTWVkaWFSZW5kZXJpbmdOb25lLCBNZWRpYVJlbmRlcmluZ1Nv
ZnR3YXJlUmVuZGVyZXIsIE1lZGlhUmVuZGVyaW5nTW92aWVMYXllciB9OwogICAgIE1lZGlhUmVu
ZGVyaW5nTW9kZSBjdXJyZW50UmVuZGVyaW5nTW9kZSgpIGNvbnN0OwpAQCAtMTYxLDEzICsxMzcs
MjggQEAgcHJpdmF0ZToKICAgICB2b2lkIHNldFVwQ29va2llc0ZvclF1aWNrVGltZShjb25zdCBT
dHJpbmcmIHVybCk7CiAgICAgU3RyaW5nIHJmYzI2MTZEYXRlU3RyaW5nRnJvbVRpbWUoQ0ZBYnNv
bHV0ZVRpbWUpOwogCisgICAgdm9pZCB2aXN1YWxDb250ZXh0VGltZXJGaXJlZChUaW1lcjxNZWRp
YVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0PiopOworICAgIHZvaWQgcmV0cmll
dmVDdXJyZW50SW1hZ2UoKTsKKworICAgIGNsYXNzIE1vdmllQ2xpZW50OworICAgIGZyaWVuZCBj
bGFzcyBNb3ZpZUNsaWVudDsKKyAgICBPd25QdHI8TW92aWVDbGllbnQ+IG1fbW92aWVDbGllbnQ7
CisKKyAgICBjbGFzcyBMYXllckNsaWVudDsKKyAgICBmcmllbmQgY2xhc3MgTGF5ZXJDbGllbnQ7
CisgICAgT3duUHRyPExheWVyQ2xpZW50PiBtX2xheWVyQ2xpZW50OworCisgICAgY2xhc3MgVmlz
dWFsQ29udGV4dENsaWVudDsKKyAgICBmcmllbmQgY2xhc3MgVmlzdWFsQ29udGV4dENsaWVudDsK
KyAgICBPd25QdHI8VmlzdWFsQ29udGV4dENsaWVudD4gbV92aXN1YWxDb250ZXh0Q2xpZW50Owor
CiAgICAgTWVkaWFQbGF5ZXIqIG1fcGxheWVyOwotICAgIE93blB0cjxRVE1vdmllV2luPiBtX3F0
TW92aWU7Ci0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIFJlZlB0cjxRVE1v
dmllPiBtX21vdmllOwogICAgIE93blB0cjxHcmFwaGljc0xheWVyPiBtX3F0VmlkZW9MYXllcjsK
LSNlbmRpZgorICAgIFJlZlB0cjxRVE1vdmllVmlzdWFsQ29udGV4dD4gbV92aXN1YWxDb250ZXh0
OwogICAgIGZsb2F0IG1fc2Vla1RvOwotICAgIFRpbWVyPE1lZGlhUGxheWVyUHJpdmF0ZT4gbV9z
ZWVrVGltZXI7CisgICAgVGltZXI8TWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29u
dGV4dD4gbV9zZWVrVGltZXI7CisgICAgVGltZXI8TWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1l
VmlzdWFsQ29udGV4dD4gbV92aXN1YWxDb250ZXh0VGltZXI7CiAgICAgSW50U2l6ZSBtX3NpemU7
CiAgICAgTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBtX25ldHdvcmtTdGF0ZTsKICAgICBNZWRp
YVBsYXllcjo6UmVhZHlTdGF0ZSBtX3JlYWR5U3RhdGU7Cg==
</data>
<flag name="review"
          id="39155"
          type_id="1"
          status="+"
          setter="eric.carlson"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55057</attachid>
            <date>2010-05-04 15:32:43 -0700</date>
            <delta_ts>2010-05-05 17:25:28 -0700</delta_ts>
            <desc>Part 2: QTMovieWin: New Classes QTPixelBuffer, QTCFDictionary, and QTMovieVisualContext</desc>
            <filename>7569713-QTMovieWin-NewClasses.patch</filename>
            <type>text/plain</type>
            <size>27797</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUQ0ZEaWN0aW9uYXJ5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVENGRGljdGlvbmFy
eS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVENG
RGljdGlvbmFyeS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUsIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlFUQ0ZE
aWN0aW9uYXJ5LmgiCisKKyNpbmNsdWRlIDxDRkRhdGEuaD4KKyNpbmNsdWRlIDx3aW5kb3dzLmg+
CisKK0NGRGF0YVJlZiBRVENGUHJvcGVydHlMaXN0Q3JlYXRlWE1MRGF0YShDRkFsbG9jYXRvclJl
ZiBhbGxvY2F0b3IsIENGUHJvcGVydHlMaXN0UmVmIHByb3BlcnR5TGlzdCkKK3sKKworICAgIHR5
cGVkZWYgQ0ZEYXRhUmVmICgqIHBmbkNGUHJvcGVydHlMaXN0Q3JlYXRlWE1MRGF0YSkoQ0ZBbGxv
Y2F0b3JSZWYgYWxsb2NhdG9yLCBDRlByb3BlcnR5TGlzdFJlZiBwcm9wZXJ0eUxpc3QpOworICAg
IHN0YXRpYyBwZm5DRlByb3BlcnR5TGlzdENyZWF0ZVhNTERhdGEgcENGUHJvcGVydHlMaXN0Q3Jl
YXRlWE1MRGF0YSA9IDA7CisgICAgaWYgKCFwQ0ZQcm9wZXJ0eUxpc3RDcmVhdGVYTUxEYXRhKSB7
CisgICAgICAgIEhNT0RVTEUgcXRjZkRMTCA9IExvYWRMaWJyYXJ5VyhMIlFUQ0YuZGxsIik7Cisg
ICAgICAgIGlmIChxdGNmRExMKQorICAgICAgICAgICAgcENGUHJvcGVydHlMaXN0Q3JlYXRlWE1M
RGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8cGZuQ0ZQcm9wZXJ0eUxpc3RDcmVhdGVYTUxEYXRhPihH
ZXRQcm9jQWRkcmVzcyhxdGNmRExMLCAiUVRDRl9DRlByb3BlcnR5TGlzdENyZWF0ZVhNTERhdGEi
KSk7CisgICAgfQorCisgICAgaWYgKHBDRlByb3BlcnR5TGlzdENyZWF0ZVhNTERhdGEpCisgICAg
ICAgIHJldHVybiBwQ0ZQcm9wZXJ0eUxpc3RDcmVhdGVYTUxEYXRhKGFsbG9jYXRvciwgcHJvcGVy
dHlMaXN0KTsKKyAgICByZXR1cm4gMDsKK30KKworQ0ZEaWN0aW9uYXJ5UmVmIFFUQ0ZEaWN0aW9u
YXJ5Q3JlYXRlQ29weVdpdGhEYXRhQ2FsbGJhY2soQ0ZBbGxvY2F0b3JSZWYgYWxsb2NhdG9yLCBD
RkRpY3Rpb25hcnlSZWYgZGljdGlvbmFyeSwgUVRDRkRpY3RvbmFyeUNyZWF0ZUZyb21EYXRhQ2Fs
bGJhY2sgY2FsbGJhY2spIAoreworICAgIEFTU0VSVChkaWN0aW9uYXJ5KTsKKyAgICBBU1NFUlQo
Y2FsbGJhY2spOworCisgICAgQ0ZEYXRhUmVmIGRhdGEgPSBRVENGUHJvcGVydHlMaXN0Q3JlYXRl
WE1MRGF0YShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBkaWN0aW9uYXJ5KTsKKyAgICBDRkRpY3Rpb25h
cnlSZWYgb3V0cHV0RGljdGlvbmFyeSA9IGNhbGxiYWNrKGFsbG9jYXRvciwgQ0ZEYXRhR2V0Qnl0
ZVB0cihkYXRhKSwgQ0ZEYXRhR2V0TGVuZ3RoKGRhdGEpKTsKKyAgICBpZiAoZGF0YSkKKyAgICAg
ICAgQ0ZSZWxlYXNlKGRhdGEpOworCisgICAgcmV0dXJuIG91dHB1dERpY3Rpb25hcnk7Cit9Cklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVENGRGljdGlvbmFyeS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUQ0ZEaWN0aW9uYXJ5LmgJ
KHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVENGRGljdGlv
bmFyeS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIFFUQ0ZEaWN0aW9uYXJ5X2gKKyNkZWZpbmUgUVRDRkRpY3Rpb25h
cnlfaAorCisjaWZkZWYgUVRNT1ZJRVdJTl9FWFBPUlRTCisjZGVmaW5lIFFUTU9WSUVXSU5fQVBJ
IF9fZGVjbHNwZWMoZGxsZXhwb3J0KQorI2Vsc2UKKyNkZWZpbmUgUVRNT1ZJRVdJTl9BUEkgX19k
ZWNsc3BlYyhkbGxpbXBvcnQpCisjZW5kaWYKKworI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NG
QmFzZS5oPgorCit0eXBlZGVmIGNvbnN0IHN0cnVjdCBfX0NGRGljdGlvbmFyeSAqIENGRGljdGlv
bmFyeVJlZjsKK3R5cGVkZWYgY29uc3Qgc3RydWN0IF9fQ0ZBbGxvY2F0b3IgKiBDRkFsbG9jYXRv
clJlZjsKKwordHlwZWRlZiBDRkRpY3Rpb25hcnlSZWYgKCogUVRDRkRpY3RvbmFyeUNyZWF0ZUZy
b21EYXRhQ2FsbGJhY2spKENGQWxsb2NhdG9yUmVmLCBjb25zdCBVSW50OCosIENGSW5kZXgpOwor
CitRVE1PVklFV0lOX0FQSSBDRkRpY3Rpb25hcnlSZWYgUVRDRkRpY3Rpb25hcnlDcmVhdGVDb3B5
V2l0aERhdGFDYWxsYmFjayhDRkFsbG9jYXRvclJlZiwgQ0ZEaWN0aW9uYXJ5UmVmLCBRVENGRGlj
dG9uYXJ5Q3JlYXRlRnJvbURhdGFDYWxsYmFjayk7CisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vUVRNb3ZpZVZpc3VhbENvbnRleHQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWVWaXN1YWxDb250ZXh0LmNw
cAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWVW
aXN1YWxDb250ZXh0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNTQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUsIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJRVE1v
dmllVmlzdWFsQ29udGV4dC5oIgorCisjaW5jbHVkZSAiUVRNb3ZpZVRhc2suaCIKKyNpbmNsdWRl
IDxDVkJhc2UuaD4KKyNpbmNsdWRlIDxDVkhvc3RUaW1lLmg+CisjaW5jbHVkZSA8SW1hZ2VDb21w
cmVzc2lvbi5oPgorI2luY2x1ZGUgPE1vdmllcy5oPgorI2luY2x1ZGUgPGQzZDl0eXBlcy5oPgor
I2luY2x1ZGUgPHdpbmRvd3MuaD4KKworc3RydWN0IFFUQ1ZUaW1lU3RhbXAgeworICAgIENWVGlt
ZVN0YW1wIHQ7Cit9OworCitjbGFzcyBRVE1vdmllVmlzdWFsQ29udGV4dFByaXYgeworcHVibGlj
OgorICAgIFFUTW92aWVWaXN1YWxDb250ZXh0UHJpdihRVE1vdmllVmlzdWFsQ29udGV4dCogcGFy
ZW50LCBRVE1vdmllVmlzdWFsQ29udGV4dENsaWVudCogY2xpZW50LCBDRkRpY3Rpb25hcnlSZWYg
b3B0aW9ucyk7CisgICAgflFUTW92aWVWaXN1YWxDb250ZXh0UHJpdigpOworCisgICAgYm9vbCBp
c0ltYWdlQXZhaWxhYmxlRm9yVGltZShjb25zdCBRVENWVGltZVN0YW1wKikgY29uc3Q7CisgICAg
UVRQaXhlbEJ1ZmZlciBpbWFnZUZvclRpbWUoY29uc3QgUVRDVlRpbWVTdGFtcCopOworICAgIHZv
aWQgdGFzaygpOworCisgICAgUVRWaXN1YWxDb250ZXh0UmVmIHZpc3VhbENvbnRleHRSZWYoKTsK
KworICAgIHZvaWQgc2V0TW92aWUoUGFzc1JlZlB0cjxRVE1vdmllPik7CisgICAgUVRNb3ZpZSog
bW92aWUoKSBjb25zdDsKKyAgICAKKyAgICBzdGF0aWMgdm9pZCBpbWFnZUF2YWlsYWJsZUNhbGxi
YWNrKFFUVmlzdWFsQ29udGV4dFJlZiB2aXN1YWxDb250ZXh0LCBjb25zdCBDVlRpbWVTdGFtcCAq
dGltZVN0YW1wLCB2b2lkICpyZWZDb24pOworCitwcml2YXRlOgorICAgIFFUTW92aWVWaXN1YWxD
b250ZXh0KiBtX3BhcmVudDsKKyAgICBRVE1vdmllVmlzdWFsQ29udGV4dENsaWVudCogbV9jbGll
bnQ7CisgICAgUVRWaXN1YWxDb250ZXh0UmVmIG1fdmlzdWFsQ29udGV4dDsKKyAgICBSZWZQdHI8
UVRNb3ZpZT4gbV9tb3ZpZTsKKworfTsKKworUVRNb3ZpZVZpc3VhbENvbnRleHRQcml2OjpRVE1v
dmllVmlzdWFsQ29udGV4dFByaXYoUVRNb3ZpZVZpc3VhbENvbnRleHQqIHBhcmVudCwgUVRNb3Zp
ZVZpc3VhbENvbnRleHRDbGllbnQqIGNsaWVudCwgQ0ZEaWN0aW9uYXJ5UmVmIG9wdGlvbnMpIAor
ICAgICAgICA6IG1fcGFyZW50KHBhcmVudCkKKyAgICAgICAgLCBtX2NsaWVudChjbGllbnQpCisg
ICAgICAgICwgbV92aXN1YWxDb250ZXh0KDApCit7CisgICAgdHlwZWRlZiBPU1N0YXR1cyAoIF9f
Y2RlY2wgKnBmblFUUGl4ZWxCdWZmZXJDb250ZXh0Q3JlYXRlKShDRkFsbG9jYXRvclJlZiwgQ0ZE
aWN0aW9uYXJ5UmVmLCBRVFZpc3VhbENvbnRleHRSZWYqKTsKKyAgICBzdGF0aWMgcGZuUVRQaXhl
bEJ1ZmZlckNvbnRleHRDcmVhdGUgcFBpeGVsQnVmZmVyQ29udGV4dENyZWF0ZSA9IDA7CisgICAg
aWYgKCFwUGl4ZWxCdWZmZXJDb250ZXh0Q3JlYXRlKSB7CisgICAgICAgIEhNT0RVTEUgcXRtbERM
TCA9IDo6TG9hZExpYnJhcnlXKEwiUVRNTENsaWVudC5kbGwiKTsKKyAgICAgICAgaWYgKCFxdG1s
RExMKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBwUGl4ZWxCdWZmZXJDb250ZXh0Q3Jl
YXRlID0gcmVpbnRlcnByZXRfY2FzdDxwZm5RVFBpeGVsQnVmZmVyQ29udGV4dENyZWF0ZT4oR2V0
UHJvY0FkZHJlc3MocXRtbERMTCwgIlFUUGl4ZWxCdWZmZXJDb250ZXh0Q3JlYXRlIikpOworICAg
ICAgICBpZiAoIXBQaXhlbEJ1ZmZlckNvbnRleHRDcmVhdGUpIAorICAgICAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIE9TU3RhdHVzIHN0YXR1cyA9IHBQaXhlbEJ1ZmZlckNvbnRleHRDcmVh
dGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgb3B0aW9ucywgJm1fdmlzdWFsQ29udGV4dCk7CisgICAg
aWYgKHN0YXR1cyA9PSBub0VyciAmJiBtX3Zpc3VhbENvbnRleHQpCisgICAgICAgIFFUVmlzdWFs
Q29udGV4dFNldEltYWdlQXZhaWxhYmxlQ2FsbGJhY2sobV92aXN1YWxDb250ZXh0LCAmUVRNb3Zp
ZVZpc3VhbENvbnRleHRQcml2OjppbWFnZUF2YWlsYWJsZUNhbGxiYWNrLCBzdGF0aWNfY2FzdDx2
b2lkKj4odGhpcykpOworfQorCitRVE1vdmllVmlzdWFsQ29udGV4dFByaXY6On5RVE1vdmllVmlz
dWFsQ29udGV4dFByaXYoKQoreworfQorCitib29sIFFUTW92aWVWaXN1YWxDb250ZXh0UHJpdjo6
aXNJbWFnZUF2YWlsYWJsZUZvclRpbWUoY29uc3QgUVRDVlRpbWVTdGFtcCogdGltZVN0YW1wKSBj
b25zdAoreworICAgIGlmICghbV92aXN1YWxDb250ZXh0KQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICByZXR1cm4gUVRWaXN1YWxDb250ZXh0SXNOZXdJbWFnZUF2YWlsYWJsZShtX3Zpc3Vh
bENvbnRleHQsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQ1ZUaW1lU3RhbXAqPih0aW1lU3RhbXAp
KTsgCit9CisKK1FUUGl4ZWxCdWZmZXIgUVRNb3ZpZVZpc3VhbENvbnRleHRQcml2OjppbWFnZUZv
clRpbWUoY29uc3QgUVRDVlRpbWVTdGFtcCogdGltZVN0YW1wKQoreworICAgIFFUUGl4ZWxCdWZm
ZXIgcGl4ZWxCdWZmZXI7CisgICAgaWYgKG1fdmlzdWFsQ29udGV4dCkgeworICAgICAgICBDVklt
YWdlQnVmZmVyUmVmIG5ld0ltYWdlID0gMDsKKyAgICAgICAgT1NTdGF0dXMgc3RhdHVzID0gUVRW
aXN1YWxDb250ZXh0Q29weUltYWdlRm9yVGltZShtX3Zpc3VhbENvbnRleHQsIGtDRkFsbG9jYXRv
ckRlZmF1bHQsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQ1ZUaW1lU3RhbXAqPih0aW1lU3RhbXAp
LCAmbmV3SW1hZ2UpOworICAgICAgICBpZiAoc3RhdHVzID09IG5vRXJyKQorICAgICAgICAgICAg
cGl4ZWxCdWZmZXIuYWRvcHQobmV3SW1hZ2UpOworICAgIH0KKyAgICByZXR1cm4gcGl4ZWxCdWZm
ZXI7Cit9CisKK3ZvaWQgUVRNb3ZpZVZpc3VhbENvbnRleHRQcml2Ojp0YXNrKCkKK3sKKyAgICBp
ZiAobV92aXN1YWxDb250ZXh0KQorICAgICAgICBRVFZpc3VhbENvbnRleHRUYXNrKG1fdmlzdWFs
Q29udGV4dCk7Cit9CisKK1FUVmlzdWFsQ29udGV4dFJlZiBRVE1vdmllVmlzdWFsQ29udGV4dFBy
aXY6OnZpc3VhbENvbnRleHRSZWYoKSAKK3sKKyAgICByZXR1cm4gbV92aXN1YWxDb250ZXh0Owor
fQorCit2b2lkIFFUTW92aWVWaXN1YWxDb250ZXh0UHJpdjo6c2V0TW92aWUoUGFzc1JlZlB0cjxR
VE1vdmllPiBtb3ZpZSkKK3sKKyAgICBpZiAobW92aWUgPT0gbV9tb3ZpZSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKG1fbW92aWUpIHsKKyAgICAgICAgU2V0TW92aWVWaXN1YWxDb250ZXh0
KG1fbW92aWUtPmdldE1vdmllSGFuZGxlKCksIDApOworICAgICAgICBtX21vdmllID0gMDsKKyAg
ICB9CisKKyAgICBpZiAobW92aWUpCisgICAgICAgIE9TU3RhdHVzIHN0YXR1cyA9IFNldE1vdmll
VmlzdWFsQ29udGV4dChtb3ZpZS0+Z2V0TW92aWVIYW5kbGUoKSwgbV92aXN1YWxDb250ZXh0KTsK
KyAgICAKKyAgICBtX21vdmllID0gbW92aWU7Cit9CisKK1FUTW92aWUqIFFUTW92aWVWaXN1YWxD
b250ZXh0UHJpdjo6bW92aWUoKSBjb25zdAoreworICAgIHJldHVybiBtX21vdmllLmdldCgpOwor
fQorCit2b2lkIFFUTW92aWVWaXN1YWxDb250ZXh0UHJpdjo6aW1hZ2VBdmFpbGFibGVDYWxsYmFj
ayhRVFZpc3VhbENvbnRleHRSZWYgdmlzdWFsQ29udGV4dCwgY29uc3QgQ1ZUaW1lU3RhbXAgKnRp
bWVTdGFtcCwgdm9pZCAqcmVmQ29uKSAKK3sKKyAgICBpZiAoIXJlZkNvbikKKyAgICAgICAgcmV0
dXJuOworCisgICAgUVRNb3ZpZVZpc3VhbENvbnRleHRQcml2KiB2YyA9IHN0YXRpY19jYXN0PFFU
TW92aWVWaXN1YWxDb250ZXh0UHJpdio+KHJlZkNvbik7CisgICAgaWYgKCF2Yy0+bV9jbGllbnQp
CisgICAgICAgIHJldHVybjsKKworICAgIHZjLT5tX2NsaWVudC0+aW1hZ2VBdmFpbGFibGVGb3JU
aW1lKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgUVRDVlRpbWVTdGFtcCo+KHRpbWVTdGFtcCkpOwor
fQorCitzdGF0aWMgT1NTdGF0dXMgU2V0TnVtYmVyVmFsdWUoQ0ZNdXRhYmxlRGljdGlvbmFyeVJl
ZiBpbkRpY3QsIENGU3RyaW5nUmVmIGluS2V5LCBTSW50MzIgaW5WYWx1ZSkKK3sKKyAgICBDRk51
bWJlclJlZiBudW1iZXI7CisgCisgICAgbnVtYmVyID0gQ0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2Nh
dG9yRGVmYXVsdCwga0NGTnVtYmVyU0ludDMyVHlwZSwgJmluVmFsdWUpOworICAgIGlmICghbnVt
YmVyKSAKKyAgICAgICAgcmV0dXJuIGNvcmVGb3VuZGF0aW9uVW5rbm93bkVycjsKKyAKKyAgICBD
RkRpY3Rpb25hcnlTZXRWYWx1ZShpbkRpY3QsIGluS2V5LCBudW1iZXIpOworIAorICAgIENGUmVs
ZWFzZShudW1iZXIpOworIAorICAgIHJldHVybiBub0VycjsKK30KKworQ0ZEaWN0aW9uYXJ5UmVm
IFFUTW92aWVWaXN1YWxDb250ZXh0OjpnZXRDR0ltYWdlT3B0aW9ucygpCit7CisgICAgc3RhdGlj
IENGRGljdGlvbmFyeVJlZiBvcHRpb25zID0gMDsKKworICAgIGlmICghb3B0aW9ucykgeworICAg
ICAgICBDRk11dGFibGVEaWN0aW9uYXJ5UmVmICBwaXhlbEJ1ZmZlck9wdGlvbnMgPSAwOworICAg
ICAgICBDRk11dGFibGVEaWN0aW9uYXJ5UmVmICB2aXN1YWxDb250ZXh0T3B0aW9ucyA9IDA7Cisg
ICAgICAgIE9TU3RhdHVzICAgICAgICAgICAgICAgIHN0YXR1cyA9IG5vRXJyOworICAgICAgICAK
KyAgICAgICAgLy8gUGl4ZWwgQnVmZmVyIGF0dHJpYnV0ZXMKKyAgICAgICAgcGl4ZWxCdWZmZXJP
cHRpb25zID0gQ0ZEaWN0aW9uYXJ5Q3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAw
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNh
bGxCYWNrcyk7CisKKyAgICAgICAgLy8gVXNlIHRoZSBrMzJCR1JBUGl4ZWxGb3JtYXQsIGFzIFF1
YXJ0ekNvcmUgd2lsbCBiZSBhYmxlIHRvIHVzZSB0aGUgcGl4ZWxzIGRpcmVjdGx5LAorICAgICAg
ICAvLyB3aXRob3V0IG5lZWRpbmcgYW4gYWRpdGlvbmFsIGNvcHkgb3IgcmVuZGVyaW5nIHBhc3M6
cworICAgICAgICBTZXROdW1iZXJWYWx1ZShwaXhlbEJ1ZmZlck9wdGlvbnMsIGtDVlBpeGVsQnVm
ZmVyUGl4ZWxGb3JtYXRUeXBlS2V5LCBrMzJCR1JBUGl4ZWxGb3JtYXQpOworICAgICAgICAgICAg
CisgICAgICAgIC8vIGFsaWdubWVudAorICAgICAgICBTZXROdW1iZXJWYWx1ZShwaXhlbEJ1ZmZl
ck9wdGlvbnMsIGtDVlBpeGVsQnVmZmVyQnl0ZXNQZXJSb3dBbGlnbm1lbnRLZXksIDE2KTsKKwor
ICAgICAgICAvLyBjb21wYXRhYmlsaXR5CisgICAgICAgIFNldE51bWJlclZhbHVlKHBpeGVsQnVm
ZmVyT3B0aW9ucywga0NWUGl4ZWxCdWZmZXJDR0ltYWdlQ29tcGF0aWJpbGl0eUtleSwgMSk7Cisg
ICAgIAorICAgICAgICAvLyBRVCBWaXN1YWwgQ29udGV4dCBhdHRyaWJ1dGVzCisgICAgICAgIHZp
c3VhbENvbnRleHRPcHRpb25zID0gQ0ZEaWN0aW9uYXJ5Q3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0
b3JEZWZhdWx0LCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtDRlR5cGVE
aWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpOworICAgICAKKyAgICAgICAgLy8gc2V0IHRoZSBwaXhl
bCBidWZmZXIgYXR0cmlidXRlcyBmb3IgdGhlIHZpc3VhbCBjb250ZXh0CisgICAgICAgIENGRGlj
dGlvbmFyeVNldFZhbHVlKHZpc3VhbENvbnRleHRPcHRpb25zLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBrUVRWaXN1YWxDb250ZXh0UGl4ZWxCdWZmZXJBdHRyaWJ1dGVzS2V5LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwaXhlbEJ1ZmZlck9wdGlvbnMpOworCisgICAgICAg
IGlmIChwaXhlbEJ1ZmZlck9wdGlvbnMpCisgICAgICAgICAgICBDRlJlbGVhc2UocGl4ZWxCdWZm
ZXJPcHRpb25zKTsKKyAgICAKKyAgICAgICAgb3B0aW9ucyA9IHZpc3VhbENvbnRleHRPcHRpb25z
OworICAgIH0KKworICAgIHJldHVybiBvcHRpb25zOworfQorCitRVE1vdmllVmlzdWFsQ29udGV4
dDo6UVRNb3ZpZVZpc3VhbENvbnRleHQoUVRNb3ZpZVZpc3VhbENvbnRleHRDbGllbnQqIGNsaWVu
dCwgQ0ZEaWN0aW9uYXJ5UmVmIG9wdGlvbnMpIAorICAgIDogbV9wcml2YXRlKG5ldyBRVE1vdmll
VmlzdWFsQ29udGV4dFByaXYodGhpcywgY2xpZW50LCBvcHRpb25zKSkKK3sKK30KKworUVRNb3Zp
ZVZpc3VhbENvbnRleHQ6On5RVE1vdmllVmlzdWFsQ29udGV4dCgpCit7Cit9CisKK2Jvb2wgUVRN
b3ZpZVZpc3VhbENvbnRleHQ6OmlzSW1hZ2VBdmFpbGFibGVGb3JUaW1lKGNvbnN0IFFUQ1ZUaW1l
U3RhbXAqIHRpbWVTdGFtcCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5pc0ltYWdl
QXZhaWxhYmxlRm9yVGltZSh0aW1lU3RhbXApOworfQorCitRVFBpeGVsQnVmZmVyIFFUTW92aWVW
aXN1YWxDb250ZXh0OjppbWFnZUZvclRpbWUoY29uc3QgUVRDVlRpbWVTdGFtcCogdGltZVN0YW1w
KQoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmltYWdlRm9yVGltZSh0aW1lU3RhbXApOworfQor
Cit2b2lkIFFUTW92aWVWaXN1YWxDb250ZXh0Ojp0YXNrKCkKK3sKKyAgICBtX3ByaXZhdGUtPnRh
c2soKTsKK30KKworUVRWaXN1YWxDb250ZXh0UmVmIFFUTW92aWVWaXN1YWxDb250ZXh0Ojp2aXN1
YWxDb250ZXh0UmVmKCkgCit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+dmlzdWFsQ29udGV4dFJl
ZigpOworfQorCit2b2lkIFFUTW92aWVWaXN1YWxDb250ZXh0OjpzZXRNb3ZpZShQYXNzUmVmUHRy
PFFUTW92aWU+IG1vdmllKQoreworICAgIG1fcHJpdmF0ZS0+c2V0TW92aWUobW92aWUpOworfQor
CitRVE1vdmllKiBRVE1vdmllVmlzdWFsQ29udGV4dDo6bW92aWUoKSBjb25zdAoreworICAgIHJl
dHVybiBtX3ByaXZhdGUtPm1vdmllKCk7Cit9CisKK2RvdWJsZSBRVE1vdmllVmlzdWFsQ29udGV4
dDo6Y3VycmVudEhvc3RUaW1lKCkKK3sKKyAgICByZXR1cm4gQ1ZHZXRDdXJyZW50SG9zdFRpbWUo
KSAvIENWR2V0SG9zdENsb2NrRnJlcXVlbmN5KCk7Cit9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9RVE1vdmllVmlzdWFsQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWVWaXN1YWxDb250ZXh0LmgJKHJldmlzaW9u
IDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVE1vdmllVmlzdWFsQ29udGV4
dC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA3LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIFFUTW92aWVWaXN1YWxDb250ZXh0X2gKKyNkZWZpbmUgUVRNb3ZpZVZp
c3VhbENvbnRleHRfaAorCisjaWZkZWYgUVRNT1ZJRVdJTl9FWFBPUlRTCisjZGVmaW5lIFFUTU9W
SUVXSU5fQVBJIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQorI2Vsc2UKKyNkZWZpbmUgUVRNT1ZJRVdJ
Tl9BUEkgX19kZWNsc3BlYyhkbGxpbXBvcnQpCisjZW5kaWYKKworI2luY2x1ZGUgIlFUTW92aWUu
aCIKKyNpbmNsdWRlICJRVE1vdmllVGFzay5oIgorI2luY2x1ZGUgIlFUUGl4ZWxCdWZmZXIuaCIK
KyNpbmNsdWRlIDxXVEYvT3duUHRyLmg+CisjaW5jbHVkZSA8V1RGL1JlZkNvdW50ZWQuaD4KKwor
dHlwZWRlZiBzdHJ1Y3QgT3BhcXVlUVRWaXN1YWxDb250ZXh0KiAgIFFUVmlzdWFsQ29udGV4dFJl
ZjsKKworLy8gUVRDVlRpbWVTdGFtcCBpcyBhIHN0cnVjdCBjb250YWluaW5nIG9ubHkgYSBDVlRp
bWVTdGFtcC4gIFRoaXMgaXMgdG8gCisvLyB3b3JrIGFyb3VuZCB0aGUgaW5hYmlsaXR5IG9mIENW
VGltZVN0YW1wIHRvIGJlIGZvcndhcmQgZGVjbGFyZWQsIGluIAorLy8gYWRkaXRpb24gdG8gaXQg
YmVpbmcgZGVjbGFyZWQgaW4gZGlmZmVyZW50IGhlYWRlciBmaWxlcyB3aGVuIGJ1aWxkaW5nCisv
LyB0aGUgUVRNb3ZpZVdpbiBhbmQgV2ViQ29yZSBwcm9qZWN0cy4KK3N0cnVjdCBRVENWVGltZVN0
YW1wOworCitjbGFzcyBRVE1vdmllVmlzdWFsQ29udGV4dENsaWVudCB7CitwdWJsaWM6CisgICAg
dmlydHVhbCB2b2lkIGltYWdlQXZhaWxhYmxlRm9yVGltZShjb25zdCBRVENWVGltZVN0YW1wKikg
PSAwOworfTsKKworY2xhc3MgUVRNT1ZJRVdJTl9BUEkgUVRNb3ZpZVZpc3VhbENvbnRleHQgOiBw
dWJsaWMgUmVmQ291bnRlZDxRVE1vdmllVmlzdWFsQ29udGV4dD4geworcHVibGljOgorICAgIFFU
TW92aWVWaXN1YWxDb250ZXh0KFFUTW92aWVWaXN1YWxDb250ZXh0Q2xpZW50KiwgQ0ZEaWN0aW9u
YXJ5UmVmIG9wdGlvbnMgPSAwKTsKKyAgICB+UVRNb3ZpZVZpc3VhbENvbnRleHQoKTsKKworICAg
IGJvb2wgaXNJbWFnZUF2YWlsYWJsZUZvclRpbWUoY29uc3QgUVRDVlRpbWVTdGFtcCopIGNvbnN0
OworICAgIFFUUGl4ZWxCdWZmZXIgaW1hZ2VGb3JUaW1lKGNvbnN0IFFUQ1ZUaW1lU3RhbXAqKTsK
KyAgICB2b2lkIHRhc2soKTsKKworICAgIFFUVmlzdWFsQ29udGV4dFJlZiB2aXN1YWxDb250ZXh0
UmVmKCk7CisKKyAgICB2b2lkIHNldE1vdmllKFBhc3NSZWZQdHI8UVRNb3ZpZT4pOworICAgIFFU
TW92aWUqIG1vdmllKCkgY29uc3Q7CisKKyAgICBzdGF0aWMgQ0ZEaWN0aW9uYXJ5UmVmIGdldENH
SW1hZ2VPcHRpb25zKCk7CisgICAgc3RhdGljIGRvdWJsZSBjdXJyZW50SG9zdFRpbWUoKTsKKwor
cHJvdGVjdGVkOgorICAgIHZvaWQgc2V0dXBWaXN1YWxDb250ZXh0KCk7CisKKyAgICBmcmllbmQg
Y2xhc3MgUVRNb3ZpZVZpc3VhbENvbnRleHRQcml2OworICAgIE93blB0cjxRVE1vdmllVmlzdWFs
Q29udGV4dFByaXY+IG1fcHJpdmF0ZTsKK307CisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vUVRQaXhlbEJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRQaXhlbEJ1ZmZlci5jcHAJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVFBpeGVsQnVmZmVyLmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwyMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgs
IDIwMDksIDIwMTAgQXBwbGUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisjaW5j
bHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJRVFBpeGVsQnVmZmVyLmgiCisKKyNpbmNsdWRl
IDxDRlN0cmluZy5oPgorI2luY2x1ZGUgPENHQ29sb3JTcGFjZS5oPgorI2luY2x1ZGUgPENHSW1h
Z2UuaD4KKyNpbmNsdWRlIDxDVlBpeGVsQnVmZmVyLmg+CisjaW5jbHVkZSA8UXVpY2tEcmF3Lmg+
CisjaW5jbHVkZSA8bWVtb3J5Lmg+CisKK1FUUGl4ZWxCdWZmZXI6OlFUUGl4ZWxCdWZmZXIoKSAK
KyAgICA6IG1fcGl4ZWxCdWZmZXIoMCkgCit7Cit9CisKK1FUUGl4ZWxCdWZmZXI6OlFUUGl4ZWxC
dWZmZXIoY29uc3QgUVRQaXhlbEJ1ZmZlciYgcCkgCisgICAgOiBtX3BpeGVsQnVmZmVyKHAubV9w
aXhlbEJ1ZmZlcikgCit7CisgICAgQ1ZQaXhlbEJ1ZmZlclJldGFpbihtX3BpeGVsQnVmZmVyKTsK
K30KKworUVRQaXhlbEJ1ZmZlcjo6UVRQaXhlbEJ1ZmZlcihDVlBpeGVsQnVmZmVyUmVmIHJlZikg
CisgICAgOiBtX3BpeGVsQnVmZmVyKHJlZikKK3sKKyAgICBDVlBpeGVsQnVmZmVyUmV0YWluKG1f
cGl4ZWxCdWZmZXIpOworfQorCitRVFBpeGVsQnVmZmVyOjp+UVRQaXhlbEJ1ZmZlcigpIAorewor
ICAgIGNsZWFyKCk7Cit9CisKK1FUUGl4ZWxCdWZmZXImIFFUUGl4ZWxCdWZmZXI6Om9wZXJhdG9y
PShjb25zdCBRVFBpeGVsQnVmZmVyJiBwKSAKK3sKKyAgICBzZXQocC5tX3BpeGVsQnVmZmVyKTsK
KyAgICByZXR1cm4gKnRoaXM7Cit9CisKK3ZvaWQgUVRQaXhlbEJ1ZmZlcjo6c2V0KENWUGl4ZWxC
dWZmZXJSZWYgcmVmKQoreworICAgIENWUGl4ZWxCdWZmZXJSZXRhaW4ocmVmKTsKKyAgICBDVlBp
eGVsQnVmZmVyUmVsZWFzZShtX3BpeGVsQnVmZmVyKTsKKyAgICBtX3BpeGVsQnVmZmVyID0gcmVm
OworfQorCitDVlBpeGVsQnVmZmVyUmVmIFFUUGl4ZWxCdWZmZXI6OnBpeGVsQnVmZmVyUmVmKCkK
K3sKKyAgICByZXR1cm4gbV9waXhlbEJ1ZmZlcjsKK30KKwordm9pZCBRVFBpeGVsQnVmZmVyOjph
ZG9wdChDVlBpeGVsQnVmZmVyUmVmIHJlZikKK3sKKyAgICBpZiAocmVmID09IG1fcGl4ZWxCdWZm
ZXIpCisgICAgICAgIHJldHVybjsKKyAgICBDVlBpeGVsQnVmZmVyUmVsZWFzZShtX3BpeGVsQnVm
ZmVyKTsKKyAgICBtX3BpeGVsQnVmZmVyID0gcmVmOworfQorCit2b2lkIFFUUGl4ZWxCdWZmZXI6
OmNsZWFyKCkKK3sKKyAgICBDVlBpeGVsQnVmZmVyUmVsZWFzZShtX3BpeGVsQnVmZmVyKTsKKyAg
ICBtX3BpeGVsQnVmZmVyID0gMDsKK30KKworQ1ZSZXR1cm4gUVRQaXhlbEJ1ZmZlcjo6bG9ja0Jh
c2VBZGRyZXNzKCkKK3sKKyAgICByZXR1cm4gQ1ZQaXhlbEJ1ZmZlckxvY2tCYXNlQWRkcmVzcyht
X3BpeGVsQnVmZmVyLCAwKTsKK30KKworQ1ZSZXR1cm4gUVRQaXhlbEJ1ZmZlcjo6dW5sb2NrQmFz
ZUFkZHJlc3MoKQoreworICAgIHJldHVybiBDVlBpeGVsQnVmZmVyVW5sb2NrQmFzZUFkZHJlc3Mo
bV9waXhlbEJ1ZmZlciwgMCk7Cit9CisKK3ZvaWQqIFFUUGl4ZWxCdWZmZXI6OmJhc2VBZGRyZXNz
KCkKK3sKKyAgICByZXR1cm4gQ1ZQaXhlbEJ1ZmZlckdldEJhc2VBZGRyZXNzKG1fcGl4ZWxCdWZm
ZXIpOworfQorCitzaXplX3QgUVRQaXhlbEJ1ZmZlcjo6d2lkdGgoKSBjb25zdAoreworICAgIHJl
dHVybiBDVlBpeGVsQnVmZmVyR2V0V2lkdGgobV9waXhlbEJ1ZmZlcik7Cit9CisKK3NpemVfdCBR
VFBpeGVsQnVmZmVyOjpoZWlnaHQoKSBjb25zdAoreworICAgIHJldHVybiBDVlBpeGVsQnVmZmVy
R2V0SGVpZ2h0KG1fcGl4ZWxCdWZmZXIpOworfQorCit1bnNpZ25lZCBsb25nIFFUUGl4ZWxCdWZm
ZXI6OnBpeGVsRm9ybWF0VHlwZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIENWUGl4ZWxCdWZmZXJH
ZXRQaXhlbEZvcm1hdFR5cGUobV9waXhlbEJ1ZmZlcik7Cit9CisKK2Jvb2wgUVRQaXhlbEJ1ZmZl
cjo6cGl4ZWxGb3JtYXRJczMyQVJHQigpIGNvbnN0Cit7CisgICAgcmV0dXJuIENWUGl4ZWxCdWZm
ZXJHZXRQaXhlbEZvcm1hdFR5cGUobV9waXhlbEJ1ZmZlcikgPT0gazMyQVJHQlBpeGVsRm9ybWF0
OworfQorCitib29sIFFUUGl4ZWxCdWZmZXI6OnBpeGVsRm9ybWF0SXMzMkJHUkEoKSBjb25zdAor
eworICAgIHJldHVybiBDVlBpeGVsQnVmZmVyR2V0UGl4ZWxGb3JtYXRUeXBlKG1fcGl4ZWxCdWZm
ZXIpID09IGszMkJHUkFQaXhlbEZvcm1hdDsKK30KKworc2l6ZV90IFFUUGl4ZWxCdWZmZXI6OmJ5
dGVzUGVyUm93KCkgY29uc3QKK3sKKyAgICByZXR1cm4gQ1ZQaXhlbEJ1ZmZlckdldEJ5dGVzUGVy
Um93KG1fcGl4ZWxCdWZmZXIpOworfQorCitzaXplX3QgUVRQaXhlbEJ1ZmZlcjo6ZGF0YVNpemUo
KSBjb25zdAoreworICAgIHJldHVybiBDVlBpeGVsQnVmZmVyR2V0RGF0YVNpemUobV9waXhlbEJ1
ZmZlcik7Cit9CisKK2Jvb2wgUVRQaXhlbEJ1ZmZlcjo6aXNQbGFuYXIoKSBjb25zdAoreworICAg
IHJldHVybiBDVlBpeGVsQnVmZmVySXNQbGFuYXIobV9waXhlbEJ1ZmZlcik7Cit9CisKK3NpemVf
dCBRVFBpeGVsQnVmZmVyOjpwbGFuZUNvdW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gQ1ZQaXhl
bEJ1ZmZlckdldFBsYW5lQ291bnQobV9waXhlbEJ1ZmZlcik7Cit9CisKK3NpemVfdCBRVFBpeGVs
QnVmZmVyOjp3aWR0aE9mUGxhbmUoc2l6ZV90IHBsYW5lKSBjb25zdAoreworICAgIHJldHVybiBD
VlBpeGVsQnVmZmVyR2V0V2lkdGhPZlBsYW5lKG1fcGl4ZWxCdWZmZXIsIHBsYW5lKTsKK30KKwor
c2l6ZV90IFFUUGl4ZWxCdWZmZXI6OmhlaWdodE9mUGxhbmUoc2l6ZV90IHBsYW5lKSBjb25zdAor
eworICAgIHJldHVybiBDVlBpeGVsQnVmZmVyR2V0SGVpZ2h0T2ZQbGFuZShtX3BpeGVsQnVmZmVy
LCBwbGFuZSk7Cit9CisKK3ZvaWQqIFFUUGl4ZWxCdWZmZXI6OmJhc2VBZGRyZXNzT2ZQbGFuZShz
aXplX3QgcGxhbmUpIGNvbnN0Cit7CisgICAgcmV0dXJuIENWUGl4ZWxCdWZmZXJHZXRCYXNlQWRk
cmVzc09mUGxhbmUobV9waXhlbEJ1ZmZlciwgcGxhbmUpOworfQorCitzaXplX3QgUVRQaXhlbEJ1
ZmZlcjo6Ynl0ZXNQZXJSb3dPZlBsYW5lKHNpemVfdCBwbGFuZSkgY29uc3QKK3sKKyAgICByZXR1
cm4gQ1ZQaXhlbEJ1ZmZlckdldEJ5dGVzUGVyUm93T2ZQbGFuZShtX3BpeGVsQnVmZmVyLCBwbGFu
ZSk7Cit9CisKK3ZvaWQgUVRQaXhlbEJ1ZmZlcjo6Z2V0RXh0ZW5kZWRQaXhlbHMoc2l6ZV90KiBs
ZWZ0LCBzaXplX3QqIHJpZ2h0LCBzaXplX3QqIHRvcCwgc2l6ZV90KiBib3R0b20pIGNvbnN0Cit7
CisgICAgcmV0dXJuIENWUGl4ZWxCdWZmZXJHZXRFeHRlbmRlZFBpeGVscyhtX3BpeGVsQnVmZmVy
LCBsZWZ0LCByaWdodCwgdG9wLCBib3R0b20pOworfQorCitDRkRpY3Rpb25hcnlSZWYgUVRQaXhl
bEJ1ZmZlcjo6YXR0YWNobWVudHMoKSBjb25zdAoreworICAgIHJldHVybiBDVkJ1ZmZlckdldEF0
dGFjaG1lbnRzKG1fcGl4ZWxCdWZmZXIsIGtDVkF0dGFjaG1lbnRNb2RlX1Nob3VsZFByb3BhZ2F0
ZSk7Cit9CisKK3ZvaWQgUVRQaXhlbEJ1ZmZlcjo6cmV0YWluQ2FsbGJhY2sodm9pZCogcmVmY29u
KQoreworICAgIENWUGl4ZWxCdWZmZXJSZXRhaW4oc3RhdGljX2Nhc3Q8Q1ZQaXhlbEJ1ZmZlclJl
Zj4ocmVmY29uKSk7Cit9CisKK3ZvaWQgUVRQaXhlbEJ1ZmZlcjo6cmVsZWFzZUNhbGxiYWNrKHZv
aWQqIHJlZmNvbikKK3sKKyAgICBDVlBpeGVsQnVmZmVyUmVsZWFzZShzdGF0aWNfY2FzdDxDVlBp
eGVsQnVmZmVyUmVmPihyZWZjb24pKTsKK30KKwordm9pZCBRVFBpeGVsQnVmZmVyOjppbWFnZVF1
ZXVlUmVsZWFzZUNhbGxiYWNrKHVuc2lnbmVkIGludCB0eXBlLCB1aW50NjRfdCBpZCwgdm9pZCog
cmVmY29uKQoreworICAgIENWUGl4ZWxCdWZmZXJSZWxlYXNlKHN0YXRpY19jYXN0PENWUGl4ZWxC
dWZmZXJSZWY+KHJlZmNvbikpOworfQorCit2b2lkIFFUUGl4ZWxCdWZmZXI6OmRhdGFQcm92aWRl
clJlbGVhc2VCeXRlUG9pbnRlckNhbGxiYWNrKHZvaWQqIHJlZmNvbiwgY29uc3Qgdm9pZCogcG9p
bnRlcikKK3sKKyAgICBDVlBpeGVsQnVmZmVyVW5sb2NrQmFzZUFkZHJlc3Moc3RhdGljX2Nhc3Q8
Q1ZQaXhlbEJ1ZmZlclJlZj4ocmVmY29uKSwgMCk7Cit9CisKK2NvbnN0IHZvaWQqIFFUUGl4ZWxC
dWZmZXI6OmRhdGFQcm92aWRlckdldEJ5dGVQb2ludGVyQ2FsbGJhY2sodm9pZCogcmVmY29uKQor
eworICAgIENWUGl4ZWxCdWZmZXJMb2NrQmFzZUFkZHJlc3Moc3RhdGljX2Nhc3Q8Q1ZQaXhlbEJ1
ZmZlclJlZj4ocmVmY29uKSwgMCk7CisgICAgcmV0dXJuIENWUGl4ZWxCdWZmZXJHZXRCYXNlQWRk
cmVzcyhzdGF0aWNfY2FzdDxDVlBpeGVsQnVmZmVyUmVmPihyZWZjb24pKTsKK30KKworc2l6ZV90
IFFUUGl4ZWxCdWZmZXI6OmRhdGFQcm92aWRlckdldEJ5dGVzQXRQb3NpdGlvbkNhbGxiYWNrKHZv
aWQqIHJlZmNvbiwgdm9pZCogYnVmZmVyLCBzaXplX3QgcG9zaXRpb24sIHNpemVfdCBjb3VudCkK
K3sKKyAgICBjaGFyKiBkYXRhID0gKGNoYXIqKUNWUGl4ZWxCdWZmZXJHZXRCYXNlQWRkcmVzcyhz
dGF0aWNfY2FzdDxDVlBpeGVsQnVmZmVyUmVmPihyZWZjb24pKTsKKyAgICBzaXplX3Qgc2l6ZSA9
IENWUGl4ZWxCdWZmZXJHZXREYXRhU2l6ZShzdGF0aWNfY2FzdDxDVlBpeGVsQnVmZmVyUmVmPihy
ZWZjb24pKTsKKyAgICBpZiAoc2l6ZSAtIHBvc2l0aW9uIDwgY291bnQpCisgICAgICAgIGNvdW50
ID0gc2l6ZSAtIHBvc2l0aW9uOworCisgICAgbWVtY3B5KGJ1ZmZlciwgZGF0YStwb3NpdGlvbiwg
Y291bnQpOworICAgIHJldHVybiBjb3VudDsKK30KKwordm9pZCBRVFBpeGVsQnVmZmVyOjpkYXRh
UHJvdmlkZXJSZWxlYXNlSW5mb0NhbGxiYWNrKHZvaWQqIHJlZmNvbikKK3sKKyAgICBDVlBpeGVs
QnVmZmVyUmVsZWFzZShzdGF0aWNfY2FzdDxDVlBpeGVsQnVmZmVyUmVmPihyZWZjb24pKTsKK30K
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUUGl4ZWxCdWZmZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVFBpeGVsQnVmZmVyLmgJ
KHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVFBpeGVsQnVm
ZmVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgUVRQaXhlbEJ1ZmZlcl9oCisjZGVmaW5lIFFUUGl4ZWxCdWZmZXJf
aAorCisjaWZkZWYgUVRNT1ZJRVdJTl9FWFBPUlRTCisjZGVmaW5lIFFUTU9WSUVXSU5fQVBJIF9f
ZGVjbHNwZWMoZGxsZXhwb3J0KQorI2Vsc2UKKyNkZWZpbmUgUVRNT1ZJRVdJTl9BUEkgX19kZWNs
c3BlYyhkbGxpbXBvcnQpCisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGludC5oPgorCit0eXBlZGVm
IHN0cnVjdCBfX0NWQnVmZmVyICpDVkJ1ZmZlclJlZjsKK3R5cGVkZWYgQ1ZCdWZmZXJSZWYgQ1ZQ
aXhlbEJ1ZmZlclJlZjsKK3R5cGVkZWYgc3RydWN0IENHSW1hZ2UqIENHSW1hZ2VSZWY7Cit0eXBl
ZGVmIGludDMyX3QgQ1ZSZXR1cm47Cit0eXBlZGVmIGNvbnN0IHN0cnVjdCBfX0NGRGljdGlvbmFy
eSAqIENGRGljdGlvbmFyeVJlZjsKKworLy8gUVRQaXhlbEJ1ZmZlciB3cmFwcyBRdWlja1RpbWUn
cyBpbXBsZW1lbnRhdGlvbiBvZiBDVlBpeGVsQnVmZmVyLCBzbyBpdHMgZnVuY3Rpb25zIGFyZQor
Ly8gc2FmZSB0byBjYWxsIHdpdGhpbiBXZWJLaXQuCitjbGFzcyBRVE1PVklFV0lOX0FQSSBRVFBp
eGVsQnVmZmVyIHsKK3B1YmxpYzoKKyAgICBRVFBpeGVsQnVmZmVyKCk7CisgICAgUVRQaXhlbEJ1
ZmZlcihjb25zdCBRVFBpeGVsQnVmZmVyJik7CisgICAgUVRQaXhlbEJ1ZmZlcihDVlBpeGVsQnVm
ZmVyUmVmKTsKKyAgICBRVFBpeGVsQnVmZmVyJiBvcGVyYXRvcj0oY29uc3QgUVRQaXhlbEJ1ZmZl
ciYpOworICAgIH5RVFBpeGVsQnVmZmVyKCk7CisKKyAgICB2b2lkIHNldChDVlBpeGVsQnVmZmVy
UmVmKTsKKyAgICBDVlBpeGVsQnVmZmVyUmVmIHBpeGVsQnVmZmVyUmVmKCk7CisgICAgdm9pZCBh
ZG9wdChDVlBpeGVsQnVmZmVyUmVmKTsKKyAgICB2b2lkIGNsZWFyKCk7CisKKyAgICBDVlJldHVy
biBsb2NrQmFzZUFkZHJlc3MoKTsKKyAgICBDVlJldHVybiB1bmxvY2tCYXNlQWRkcmVzcygpOwor
ICAgIHZvaWQqIGJhc2VBZGRyZXNzKCk7CisKKyAgICBzaXplX3Qgd2lkdGgoKSBjb25zdDsKKyAg
ICBzaXplX3QgaGVpZ2h0KCkgY29uc3Q7CisgICAgdW5zaWduZWQgbG9uZyBwaXhlbEZvcm1hdFR5
cGUoKSBjb25zdDsKKyAgICBib29sIHBpeGVsRm9ybWF0SXMzMkFSR0IoKSBjb25zdDsKKyAgICBi
b29sIHBpeGVsRm9ybWF0SXMzMkJHUkEoKSBjb25zdDsKKyAgICBzaXplX3QgYnl0ZXNQZXJSb3co
KSBjb25zdDsKKyAgICBzaXplX3QgZGF0YVNpemUoKSBjb25zdDsKKworICAgIGJvb2wgaXNQbGFu
YXIoKSBjb25zdDsKKyAgICBzaXplX3QgcGxhbmVDb3VudCgpIGNvbnN0OworICAgIHNpemVfdCB3
aWR0aE9mUGxhbmUoc2l6ZV90KSBjb25zdDsKKyAgICBzaXplX3QgaGVpZ2h0T2ZQbGFuZShzaXpl
X3QpIGNvbnN0OworICAgIHZvaWQqIGJhc2VBZGRyZXNzT2ZQbGFuZShzaXplX3QpIGNvbnN0Owor
ICAgIHNpemVfdCBieXRlc1BlclJvd09mUGxhbmUoc2l6ZV90KSBjb25zdDsKKworICAgIHZvaWQg
Z2V0RXh0ZW5kZWRQaXhlbHMoc2l6ZV90KiBsZWZ0LCBzaXplX3QqIHJpZ2h0LCBzaXplX3QqIHRv
cCwgc2l6ZV90KiBib3R0b20pIGNvbnN0OworICAgIENGRGljdGlvbmFyeVJlZiBhdHRhY2htZW50
cygpIGNvbnN0OworCisgICAgLy8gR2VuZXJpYyBDRlJldGFpbi9DRlJlbGVhc2UgY2FsbGJhY2tz
CisgICAgc3RhdGljIHZvaWQgcmVsZWFzZUNhbGxiYWNrKHZvaWQqIHJlZmNvbik7CisgICAgc3Rh
dGljIHZvaWQgcmV0YWluQ2FsbGJhY2sodm9pZCogcmVmY29uKTsKKworICAgIC8vIENBSW1hZ2VR
dWV1ZSBjYWxsYmFja3MKKyAgICBzdGF0aWMgdm9pZCBpbWFnZVF1ZXVlUmVsZWFzZUNhbGxiYWNr
KHVuc2lnbmVkIGludCB0eXBlLCB1aW50NjRfdCBpZCwgdm9pZCogcmVmY29uKTsKKworICAgIC8v
IENHRGF0YVByb3ZpZGVyIGNhbGxiYWNrcworICAgIHN0YXRpYyB2b2lkIGRhdGFQcm92aWRlclJl
bGVhc2VCeXRlUG9pbnRlckNhbGxiYWNrKHZvaWQqIHJlZmNvbiwgY29uc3Qgdm9pZCogcG9pbnRl
cik7CisgICAgc3RhdGljIGNvbnN0IHZvaWQqIGRhdGFQcm92aWRlckdldEJ5dGVQb2ludGVyQ2Fs
bGJhY2sodm9pZCogcmVmY29uKTsKKyAgICBzdGF0aWMgc2l6ZV90IGRhdGFQcm92aWRlckdldEJ5
dGVzQXRQb3NpdGlvbkNhbGxiYWNrKHZvaWQqIHJlZmNvbiwgdm9pZCogYnVmZmVyLCBzaXplX3Qg
cG9zaXRpb24sIHNpemVfdCBjb3VudCk7CisgICAgc3RhdGljIHZvaWQgZGF0YVByb3ZpZGVyUmVs
ZWFzZUluZm9DYWxsYmFjayh2b2lkKiByZWZjb24pOworCitwcml2YXRlOgorICAgIENWUGl4ZWxC
dWZmZXJSZWYgbV9waXhlbEJ1ZmZlcjsKK307CisKKyNlbmRpZgo=
</data>
<flag name="review"
          id="39157"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55058</attachid>
            <date>2010-05-04 15:35:18 -0700</date>
            <delta_ts>2010-05-05 13:23:22 -0700</delta_ts>
            <desc>Part 1.1: QTMovieWin: The breakup of QTMovieWin</desc>
            <filename>7569713-QTMovieWin-NewClasses.patch</filename>
            <type>text/plain</type>
            <size>27797</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUQ0ZEaWN0aW9uYXJ5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVENGRGljdGlvbmFy
eS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVENG
RGljdGlvbmFyeS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUsIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlFUQ0ZE
aWN0aW9uYXJ5LmgiCisKKyNpbmNsdWRlIDxDRkRhdGEuaD4KKyNpbmNsdWRlIDx3aW5kb3dzLmg+
CisKK0NGRGF0YVJlZiBRVENGUHJvcGVydHlMaXN0Q3JlYXRlWE1MRGF0YShDRkFsbG9jYXRvclJl
ZiBhbGxvY2F0b3IsIENGUHJvcGVydHlMaXN0UmVmIHByb3BlcnR5TGlzdCkKK3sKKworICAgIHR5
cGVkZWYgQ0ZEYXRhUmVmICgqIHBmbkNGUHJvcGVydHlMaXN0Q3JlYXRlWE1MRGF0YSkoQ0ZBbGxv
Y2F0b3JSZWYgYWxsb2NhdG9yLCBDRlByb3BlcnR5TGlzdFJlZiBwcm9wZXJ0eUxpc3QpOworICAg
IHN0YXRpYyBwZm5DRlByb3BlcnR5TGlzdENyZWF0ZVhNTERhdGEgcENGUHJvcGVydHlMaXN0Q3Jl
YXRlWE1MRGF0YSA9IDA7CisgICAgaWYgKCFwQ0ZQcm9wZXJ0eUxpc3RDcmVhdGVYTUxEYXRhKSB7
CisgICAgICAgIEhNT0RVTEUgcXRjZkRMTCA9IExvYWRMaWJyYXJ5VyhMIlFUQ0YuZGxsIik7Cisg
ICAgICAgIGlmIChxdGNmRExMKQorICAgICAgICAgICAgcENGUHJvcGVydHlMaXN0Q3JlYXRlWE1M
RGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8cGZuQ0ZQcm9wZXJ0eUxpc3RDcmVhdGVYTUxEYXRhPihH
ZXRQcm9jQWRkcmVzcyhxdGNmRExMLCAiUVRDRl9DRlByb3BlcnR5TGlzdENyZWF0ZVhNTERhdGEi
KSk7CisgICAgfQorCisgICAgaWYgKHBDRlByb3BlcnR5TGlzdENyZWF0ZVhNTERhdGEpCisgICAg
ICAgIHJldHVybiBwQ0ZQcm9wZXJ0eUxpc3RDcmVhdGVYTUxEYXRhKGFsbG9jYXRvciwgcHJvcGVy
dHlMaXN0KTsKKyAgICByZXR1cm4gMDsKK30KKworQ0ZEaWN0aW9uYXJ5UmVmIFFUQ0ZEaWN0aW9u
YXJ5Q3JlYXRlQ29weVdpdGhEYXRhQ2FsbGJhY2soQ0ZBbGxvY2F0b3JSZWYgYWxsb2NhdG9yLCBD
RkRpY3Rpb25hcnlSZWYgZGljdGlvbmFyeSwgUVRDRkRpY3RvbmFyeUNyZWF0ZUZyb21EYXRhQ2Fs
bGJhY2sgY2FsbGJhY2spIAoreworICAgIEFTU0VSVChkaWN0aW9uYXJ5KTsKKyAgICBBU1NFUlQo
Y2FsbGJhY2spOworCisgICAgQ0ZEYXRhUmVmIGRhdGEgPSBRVENGUHJvcGVydHlMaXN0Q3JlYXRl
WE1MRGF0YShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBkaWN0aW9uYXJ5KTsKKyAgICBDRkRpY3Rpb25h
cnlSZWYgb3V0cHV0RGljdGlvbmFyeSA9IGNhbGxiYWNrKGFsbG9jYXRvciwgQ0ZEYXRhR2V0Qnl0
ZVB0cihkYXRhKSwgQ0ZEYXRhR2V0TGVuZ3RoKGRhdGEpKTsKKyAgICBpZiAoZGF0YSkKKyAgICAg
ICAgQ0ZSZWxlYXNlKGRhdGEpOworCisgICAgcmV0dXJuIG91dHB1dERpY3Rpb25hcnk7Cit9Cklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVENGRGljdGlvbmFyeS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUQ0ZEaWN0aW9uYXJ5LmgJ
KHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVENGRGljdGlv
bmFyeS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIFFUQ0ZEaWN0aW9uYXJ5X2gKKyNkZWZpbmUgUVRDRkRpY3Rpb25h
cnlfaAorCisjaWZkZWYgUVRNT1ZJRVdJTl9FWFBPUlRTCisjZGVmaW5lIFFUTU9WSUVXSU5fQVBJ
IF9fZGVjbHNwZWMoZGxsZXhwb3J0KQorI2Vsc2UKKyNkZWZpbmUgUVRNT1ZJRVdJTl9BUEkgX19k
ZWNsc3BlYyhkbGxpbXBvcnQpCisjZW5kaWYKKworI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NG
QmFzZS5oPgorCit0eXBlZGVmIGNvbnN0IHN0cnVjdCBfX0NGRGljdGlvbmFyeSAqIENGRGljdGlv
bmFyeVJlZjsKK3R5cGVkZWYgY29uc3Qgc3RydWN0IF9fQ0ZBbGxvY2F0b3IgKiBDRkFsbG9jYXRv
clJlZjsKKwordHlwZWRlZiBDRkRpY3Rpb25hcnlSZWYgKCogUVRDRkRpY3RvbmFyeUNyZWF0ZUZy
b21EYXRhQ2FsbGJhY2spKENGQWxsb2NhdG9yUmVmLCBjb25zdCBVSW50OCosIENGSW5kZXgpOwor
CitRVE1PVklFV0lOX0FQSSBDRkRpY3Rpb25hcnlSZWYgUVRDRkRpY3Rpb25hcnlDcmVhdGVDb3B5
V2l0aERhdGFDYWxsYmFjayhDRkFsbG9jYXRvclJlZiwgQ0ZEaWN0aW9uYXJ5UmVmLCBRVENGRGlj
dG9uYXJ5Q3JlYXRlRnJvbURhdGFDYWxsYmFjayk7CisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vUVRNb3ZpZVZpc3VhbENvbnRleHQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWVWaXN1YWxDb250ZXh0LmNw
cAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWVW
aXN1YWxDb250ZXh0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNTQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUsIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJRVE1v
dmllVmlzdWFsQ29udGV4dC5oIgorCisjaW5jbHVkZSAiUVRNb3ZpZVRhc2suaCIKKyNpbmNsdWRl
IDxDVkJhc2UuaD4KKyNpbmNsdWRlIDxDVkhvc3RUaW1lLmg+CisjaW5jbHVkZSA8SW1hZ2VDb21w
cmVzc2lvbi5oPgorI2luY2x1ZGUgPE1vdmllcy5oPgorI2luY2x1ZGUgPGQzZDl0eXBlcy5oPgor
I2luY2x1ZGUgPHdpbmRvd3MuaD4KKworc3RydWN0IFFUQ1ZUaW1lU3RhbXAgeworICAgIENWVGlt
ZVN0YW1wIHQ7Cit9OworCitjbGFzcyBRVE1vdmllVmlzdWFsQ29udGV4dFByaXYgeworcHVibGlj
OgorICAgIFFUTW92aWVWaXN1YWxDb250ZXh0UHJpdihRVE1vdmllVmlzdWFsQ29udGV4dCogcGFy
ZW50LCBRVE1vdmllVmlzdWFsQ29udGV4dENsaWVudCogY2xpZW50LCBDRkRpY3Rpb25hcnlSZWYg
b3B0aW9ucyk7CisgICAgflFUTW92aWVWaXN1YWxDb250ZXh0UHJpdigpOworCisgICAgYm9vbCBp
c0ltYWdlQXZhaWxhYmxlRm9yVGltZShjb25zdCBRVENWVGltZVN0YW1wKikgY29uc3Q7CisgICAg
UVRQaXhlbEJ1ZmZlciBpbWFnZUZvclRpbWUoY29uc3QgUVRDVlRpbWVTdGFtcCopOworICAgIHZv
aWQgdGFzaygpOworCisgICAgUVRWaXN1YWxDb250ZXh0UmVmIHZpc3VhbENvbnRleHRSZWYoKTsK
KworICAgIHZvaWQgc2V0TW92aWUoUGFzc1JlZlB0cjxRVE1vdmllPik7CisgICAgUVRNb3ZpZSog
bW92aWUoKSBjb25zdDsKKyAgICAKKyAgICBzdGF0aWMgdm9pZCBpbWFnZUF2YWlsYWJsZUNhbGxi
YWNrKFFUVmlzdWFsQ29udGV4dFJlZiB2aXN1YWxDb250ZXh0LCBjb25zdCBDVlRpbWVTdGFtcCAq
dGltZVN0YW1wLCB2b2lkICpyZWZDb24pOworCitwcml2YXRlOgorICAgIFFUTW92aWVWaXN1YWxD
b250ZXh0KiBtX3BhcmVudDsKKyAgICBRVE1vdmllVmlzdWFsQ29udGV4dENsaWVudCogbV9jbGll
bnQ7CisgICAgUVRWaXN1YWxDb250ZXh0UmVmIG1fdmlzdWFsQ29udGV4dDsKKyAgICBSZWZQdHI8
UVRNb3ZpZT4gbV9tb3ZpZTsKKworfTsKKworUVRNb3ZpZVZpc3VhbENvbnRleHRQcml2OjpRVE1v
dmllVmlzdWFsQ29udGV4dFByaXYoUVRNb3ZpZVZpc3VhbENvbnRleHQqIHBhcmVudCwgUVRNb3Zp
ZVZpc3VhbENvbnRleHRDbGllbnQqIGNsaWVudCwgQ0ZEaWN0aW9uYXJ5UmVmIG9wdGlvbnMpIAor
ICAgICAgICA6IG1fcGFyZW50KHBhcmVudCkKKyAgICAgICAgLCBtX2NsaWVudChjbGllbnQpCisg
ICAgICAgICwgbV92aXN1YWxDb250ZXh0KDApCit7CisgICAgdHlwZWRlZiBPU1N0YXR1cyAoIF9f
Y2RlY2wgKnBmblFUUGl4ZWxCdWZmZXJDb250ZXh0Q3JlYXRlKShDRkFsbG9jYXRvclJlZiwgQ0ZE
aWN0aW9uYXJ5UmVmLCBRVFZpc3VhbENvbnRleHRSZWYqKTsKKyAgICBzdGF0aWMgcGZuUVRQaXhl
bEJ1ZmZlckNvbnRleHRDcmVhdGUgcFBpeGVsQnVmZmVyQ29udGV4dENyZWF0ZSA9IDA7CisgICAg
aWYgKCFwUGl4ZWxCdWZmZXJDb250ZXh0Q3JlYXRlKSB7CisgICAgICAgIEhNT0RVTEUgcXRtbERM
TCA9IDo6TG9hZExpYnJhcnlXKEwiUVRNTENsaWVudC5kbGwiKTsKKyAgICAgICAgaWYgKCFxdG1s
RExMKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBwUGl4ZWxCdWZmZXJDb250ZXh0Q3Jl
YXRlID0gcmVpbnRlcnByZXRfY2FzdDxwZm5RVFBpeGVsQnVmZmVyQ29udGV4dENyZWF0ZT4oR2V0
UHJvY0FkZHJlc3MocXRtbERMTCwgIlFUUGl4ZWxCdWZmZXJDb250ZXh0Q3JlYXRlIikpOworICAg
ICAgICBpZiAoIXBQaXhlbEJ1ZmZlckNvbnRleHRDcmVhdGUpIAorICAgICAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIE9TU3RhdHVzIHN0YXR1cyA9IHBQaXhlbEJ1ZmZlckNvbnRleHRDcmVh
dGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgb3B0aW9ucywgJm1fdmlzdWFsQ29udGV4dCk7CisgICAg
aWYgKHN0YXR1cyA9PSBub0VyciAmJiBtX3Zpc3VhbENvbnRleHQpCisgICAgICAgIFFUVmlzdWFs
Q29udGV4dFNldEltYWdlQXZhaWxhYmxlQ2FsbGJhY2sobV92aXN1YWxDb250ZXh0LCAmUVRNb3Zp
ZVZpc3VhbENvbnRleHRQcml2OjppbWFnZUF2YWlsYWJsZUNhbGxiYWNrLCBzdGF0aWNfY2FzdDx2
b2lkKj4odGhpcykpOworfQorCitRVE1vdmllVmlzdWFsQ29udGV4dFByaXY6On5RVE1vdmllVmlz
dWFsQ29udGV4dFByaXYoKQoreworfQorCitib29sIFFUTW92aWVWaXN1YWxDb250ZXh0UHJpdjo6
aXNJbWFnZUF2YWlsYWJsZUZvclRpbWUoY29uc3QgUVRDVlRpbWVTdGFtcCogdGltZVN0YW1wKSBj
b25zdAoreworICAgIGlmICghbV92aXN1YWxDb250ZXh0KQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICByZXR1cm4gUVRWaXN1YWxDb250ZXh0SXNOZXdJbWFnZUF2YWlsYWJsZShtX3Zpc3Vh
bENvbnRleHQsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQ1ZUaW1lU3RhbXAqPih0aW1lU3RhbXAp
KTsgCit9CisKK1FUUGl4ZWxCdWZmZXIgUVRNb3ZpZVZpc3VhbENvbnRleHRQcml2OjppbWFnZUZv
clRpbWUoY29uc3QgUVRDVlRpbWVTdGFtcCogdGltZVN0YW1wKQoreworICAgIFFUUGl4ZWxCdWZm
ZXIgcGl4ZWxCdWZmZXI7CisgICAgaWYgKG1fdmlzdWFsQ29udGV4dCkgeworICAgICAgICBDVklt
YWdlQnVmZmVyUmVmIG5ld0ltYWdlID0gMDsKKyAgICAgICAgT1NTdGF0dXMgc3RhdHVzID0gUVRW
aXN1YWxDb250ZXh0Q29weUltYWdlRm9yVGltZShtX3Zpc3VhbENvbnRleHQsIGtDRkFsbG9jYXRv
ckRlZmF1bHQsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQ1ZUaW1lU3RhbXAqPih0aW1lU3RhbXAp
LCAmbmV3SW1hZ2UpOworICAgICAgICBpZiAoc3RhdHVzID09IG5vRXJyKQorICAgICAgICAgICAg
cGl4ZWxCdWZmZXIuYWRvcHQobmV3SW1hZ2UpOworICAgIH0KKyAgICByZXR1cm4gcGl4ZWxCdWZm
ZXI7Cit9CisKK3ZvaWQgUVRNb3ZpZVZpc3VhbENvbnRleHRQcml2Ojp0YXNrKCkKK3sKKyAgICBp
ZiAobV92aXN1YWxDb250ZXh0KQorICAgICAgICBRVFZpc3VhbENvbnRleHRUYXNrKG1fdmlzdWFs
Q29udGV4dCk7Cit9CisKK1FUVmlzdWFsQ29udGV4dFJlZiBRVE1vdmllVmlzdWFsQ29udGV4dFBy
aXY6OnZpc3VhbENvbnRleHRSZWYoKSAKK3sKKyAgICByZXR1cm4gbV92aXN1YWxDb250ZXh0Owor
fQorCit2b2lkIFFUTW92aWVWaXN1YWxDb250ZXh0UHJpdjo6c2V0TW92aWUoUGFzc1JlZlB0cjxR
VE1vdmllPiBtb3ZpZSkKK3sKKyAgICBpZiAobW92aWUgPT0gbV9tb3ZpZSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKG1fbW92aWUpIHsKKyAgICAgICAgU2V0TW92aWVWaXN1YWxDb250ZXh0
KG1fbW92aWUtPmdldE1vdmllSGFuZGxlKCksIDApOworICAgICAgICBtX21vdmllID0gMDsKKyAg
ICB9CisKKyAgICBpZiAobW92aWUpCisgICAgICAgIE9TU3RhdHVzIHN0YXR1cyA9IFNldE1vdmll
VmlzdWFsQ29udGV4dChtb3ZpZS0+Z2V0TW92aWVIYW5kbGUoKSwgbV92aXN1YWxDb250ZXh0KTsK
KyAgICAKKyAgICBtX21vdmllID0gbW92aWU7Cit9CisKK1FUTW92aWUqIFFUTW92aWVWaXN1YWxD
b250ZXh0UHJpdjo6bW92aWUoKSBjb25zdAoreworICAgIHJldHVybiBtX21vdmllLmdldCgpOwor
fQorCit2b2lkIFFUTW92aWVWaXN1YWxDb250ZXh0UHJpdjo6aW1hZ2VBdmFpbGFibGVDYWxsYmFj
ayhRVFZpc3VhbENvbnRleHRSZWYgdmlzdWFsQ29udGV4dCwgY29uc3QgQ1ZUaW1lU3RhbXAgKnRp
bWVTdGFtcCwgdm9pZCAqcmVmQ29uKSAKK3sKKyAgICBpZiAoIXJlZkNvbikKKyAgICAgICAgcmV0
dXJuOworCisgICAgUVRNb3ZpZVZpc3VhbENvbnRleHRQcml2KiB2YyA9IHN0YXRpY19jYXN0PFFU
TW92aWVWaXN1YWxDb250ZXh0UHJpdio+KHJlZkNvbik7CisgICAgaWYgKCF2Yy0+bV9jbGllbnQp
CisgICAgICAgIHJldHVybjsKKworICAgIHZjLT5tX2NsaWVudC0+aW1hZ2VBdmFpbGFibGVGb3JU
aW1lKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgUVRDVlRpbWVTdGFtcCo+KHRpbWVTdGFtcCkpOwor
fQorCitzdGF0aWMgT1NTdGF0dXMgU2V0TnVtYmVyVmFsdWUoQ0ZNdXRhYmxlRGljdGlvbmFyeVJl
ZiBpbkRpY3QsIENGU3RyaW5nUmVmIGluS2V5LCBTSW50MzIgaW5WYWx1ZSkKK3sKKyAgICBDRk51
bWJlclJlZiBudW1iZXI7CisgCisgICAgbnVtYmVyID0gQ0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2Nh
dG9yRGVmYXVsdCwga0NGTnVtYmVyU0ludDMyVHlwZSwgJmluVmFsdWUpOworICAgIGlmICghbnVt
YmVyKSAKKyAgICAgICAgcmV0dXJuIGNvcmVGb3VuZGF0aW9uVW5rbm93bkVycjsKKyAKKyAgICBD
RkRpY3Rpb25hcnlTZXRWYWx1ZShpbkRpY3QsIGluS2V5LCBudW1iZXIpOworIAorICAgIENGUmVs
ZWFzZShudW1iZXIpOworIAorICAgIHJldHVybiBub0VycjsKK30KKworQ0ZEaWN0aW9uYXJ5UmVm
IFFUTW92aWVWaXN1YWxDb250ZXh0OjpnZXRDR0ltYWdlT3B0aW9ucygpCit7CisgICAgc3RhdGlj
IENGRGljdGlvbmFyeVJlZiBvcHRpb25zID0gMDsKKworICAgIGlmICghb3B0aW9ucykgeworICAg
ICAgICBDRk11dGFibGVEaWN0aW9uYXJ5UmVmICBwaXhlbEJ1ZmZlck9wdGlvbnMgPSAwOworICAg
ICAgICBDRk11dGFibGVEaWN0aW9uYXJ5UmVmICB2aXN1YWxDb250ZXh0T3B0aW9ucyA9IDA7Cisg
ICAgICAgIE9TU3RhdHVzICAgICAgICAgICAgICAgIHN0YXR1cyA9IG5vRXJyOworICAgICAgICAK
KyAgICAgICAgLy8gUGl4ZWwgQnVmZmVyIGF0dHJpYnV0ZXMKKyAgICAgICAgcGl4ZWxCdWZmZXJP
cHRpb25zID0gQ0ZEaWN0aW9uYXJ5Q3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAw
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNh
bGxCYWNrcyk7CisKKyAgICAgICAgLy8gVXNlIHRoZSBrMzJCR1JBUGl4ZWxGb3JtYXQsIGFzIFF1
YXJ0ekNvcmUgd2lsbCBiZSBhYmxlIHRvIHVzZSB0aGUgcGl4ZWxzIGRpcmVjdGx5LAorICAgICAg
ICAvLyB3aXRob3V0IG5lZWRpbmcgYW4gYWRpdGlvbmFsIGNvcHkgb3IgcmVuZGVyaW5nIHBhc3M6
cworICAgICAgICBTZXROdW1iZXJWYWx1ZShwaXhlbEJ1ZmZlck9wdGlvbnMsIGtDVlBpeGVsQnVm
ZmVyUGl4ZWxGb3JtYXRUeXBlS2V5LCBrMzJCR1JBUGl4ZWxGb3JtYXQpOworICAgICAgICAgICAg
CisgICAgICAgIC8vIGFsaWdubWVudAorICAgICAgICBTZXROdW1iZXJWYWx1ZShwaXhlbEJ1ZmZl
ck9wdGlvbnMsIGtDVlBpeGVsQnVmZmVyQnl0ZXNQZXJSb3dBbGlnbm1lbnRLZXksIDE2KTsKKwor
ICAgICAgICAvLyBjb21wYXRhYmlsaXR5CisgICAgICAgIFNldE51bWJlclZhbHVlKHBpeGVsQnVm
ZmVyT3B0aW9ucywga0NWUGl4ZWxCdWZmZXJDR0ltYWdlQ29tcGF0aWJpbGl0eUtleSwgMSk7Cisg
ICAgIAorICAgICAgICAvLyBRVCBWaXN1YWwgQ29udGV4dCBhdHRyaWJ1dGVzCisgICAgICAgIHZp
c3VhbENvbnRleHRPcHRpb25zID0gQ0ZEaWN0aW9uYXJ5Q3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0
b3JEZWZhdWx0LCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtDRlR5cGVE
aWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpOworICAgICAKKyAgICAgICAgLy8gc2V0IHRoZSBwaXhl
bCBidWZmZXIgYXR0cmlidXRlcyBmb3IgdGhlIHZpc3VhbCBjb250ZXh0CisgICAgICAgIENGRGlj
dGlvbmFyeVNldFZhbHVlKHZpc3VhbENvbnRleHRPcHRpb25zLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBrUVRWaXN1YWxDb250ZXh0UGl4ZWxCdWZmZXJBdHRyaWJ1dGVzS2V5LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwaXhlbEJ1ZmZlck9wdGlvbnMpOworCisgICAgICAg
IGlmIChwaXhlbEJ1ZmZlck9wdGlvbnMpCisgICAgICAgICAgICBDRlJlbGVhc2UocGl4ZWxCdWZm
ZXJPcHRpb25zKTsKKyAgICAKKyAgICAgICAgb3B0aW9ucyA9IHZpc3VhbENvbnRleHRPcHRpb25z
OworICAgIH0KKworICAgIHJldHVybiBvcHRpb25zOworfQorCitRVE1vdmllVmlzdWFsQ29udGV4
dDo6UVRNb3ZpZVZpc3VhbENvbnRleHQoUVRNb3ZpZVZpc3VhbENvbnRleHRDbGllbnQqIGNsaWVu
dCwgQ0ZEaWN0aW9uYXJ5UmVmIG9wdGlvbnMpIAorICAgIDogbV9wcml2YXRlKG5ldyBRVE1vdmll
VmlzdWFsQ29udGV4dFByaXYodGhpcywgY2xpZW50LCBvcHRpb25zKSkKK3sKK30KKworUVRNb3Zp
ZVZpc3VhbENvbnRleHQ6On5RVE1vdmllVmlzdWFsQ29udGV4dCgpCit7Cit9CisKK2Jvb2wgUVRN
b3ZpZVZpc3VhbENvbnRleHQ6OmlzSW1hZ2VBdmFpbGFibGVGb3JUaW1lKGNvbnN0IFFUQ1ZUaW1l
U3RhbXAqIHRpbWVTdGFtcCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5pc0ltYWdl
QXZhaWxhYmxlRm9yVGltZSh0aW1lU3RhbXApOworfQorCitRVFBpeGVsQnVmZmVyIFFUTW92aWVW
aXN1YWxDb250ZXh0OjppbWFnZUZvclRpbWUoY29uc3QgUVRDVlRpbWVTdGFtcCogdGltZVN0YW1w
KQoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmltYWdlRm9yVGltZSh0aW1lU3RhbXApOworfQor
Cit2b2lkIFFUTW92aWVWaXN1YWxDb250ZXh0Ojp0YXNrKCkKK3sKKyAgICBtX3ByaXZhdGUtPnRh
c2soKTsKK30KKworUVRWaXN1YWxDb250ZXh0UmVmIFFUTW92aWVWaXN1YWxDb250ZXh0Ojp2aXN1
YWxDb250ZXh0UmVmKCkgCit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+dmlzdWFsQ29udGV4dFJl
ZigpOworfQorCit2b2lkIFFUTW92aWVWaXN1YWxDb250ZXh0OjpzZXRNb3ZpZShQYXNzUmVmUHRy
PFFUTW92aWU+IG1vdmllKQoreworICAgIG1fcHJpdmF0ZS0+c2V0TW92aWUobW92aWUpOworfQor
CitRVE1vdmllKiBRVE1vdmllVmlzdWFsQ29udGV4dDo6bW92aWUoKSBjb25zdAoreworICAgIHJl
dHVybiBtX3ByaXZhdGUtPm1vdmllKCk7Cit9CisKK2RvdWJsZSBRVE1vdmllVmlzdWFsQ29udGV4
dDo6Y3VycmVudEhvc3RUaW1lKCkKK3sKKyAgICByZXR1cm4gQ1ZHZXRDdXJyZW50SG9zdFRpbWUo
KSAvIENWR2V0SG9zdENsb2NrRnJlcXVlbmN5KCk7Cit9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9RVE1vdmllVmlzdWFsQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWVWaXN1YWxDb250ZXh0LmgJKHJldmlzaW9u
IDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVE1vdmllVmlzdWFsQ29udGV4
dC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA3LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIFFUTW92aWVWaXN1YWxDb250ZXh0X2gKKyNkZWZpbmUgUVRNb3ZpZVZp
c3VhbENvbnRleHRfaAorCisjaWZkZWYgUVRNT1ZJRVdJTl9FWFBPUlRTCisjZGVmaW5lIFFUTU9W
SUVXSU5fQVBJIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQorI2Vsc2UKKyNkZWZpbmUgUVRNT1ZJRVdJ
Tl9BUEkgX19kZWNsc3BlYyhkbGxpbXBvcnQpCisjZW5kaWYKKworI2luY2x1ZGUgIlFUTW92aWUu
aCIKKyNpbmNsdWRlICJRVE1vdmllVGFzay5oIgorI2luY2x1ZGUgIlFUUGl4ZWxCdWZmZXIuaCIK
KyNpbmNsdWRlIDxXVEYvT3duUHRyLmg+CisjaW5jbHVkZSA8V1RGL1JlZkNvdW50ZWQuaD4KKwor
dHlwZWRlZiBzdHJ1Y3QgT3BhcXVlUVRWaXN1YWxDb250ZXh0KiAgIFFUVmlzdWFsQ29udGV4dFJl
ZjsKKworLy8gUVRDVlRpbWVTdGFtcCBpcyBhIHN0cnVjdCBjb250YWluaW5nIG9ubHkgYSBDVlRp
bWVTdGFtcC4gIFRoaXMgaXMgdG8gCisvLyB3b3JrIGFyb3VuZCB0aGUgaW5hYmlsaXR5IG9mIENW
VGltZVN0YW1wIHRvIGJlIGZvcndhcmQgZGVjbGFyZWQsIGluIAorLy8gYWRkaXRpb24gdG8gaXQg
YmVpbmcgZGVjbGFyZWQgaW4gZGlmZmVyZW50IGhlYWRlciBmaWxlcyB3aGVuIGJ1aWxkaW5nCisv
LyB0aGUgUVRNb3ZpZVdpbiBhbmQgV2ViQ29yZSBwcm9qZWN0cy4KK3N0cnVjdCBRVENWVGltZVN0
YW1wOworCitjbGFzcyBRVE1vdmllVmlzdWFsQ29udGV4dENsaWVudCB7CitwdWJsaWM6CisgICAg
dmlydHVhbCB2b2lkIGltYWdlQXZhaWxhYmxlRm9yVGltZShjb25zdCBRVENWVGltZVN0YW1wKikg
PSAwOworfTsKKworY2xhc3MgUVRNT1ZJRVdJTl9BUEkgUVRNb3ZpZVZpc3VhbENvbnRleHQgOiBw
dWJsaWMgUmVmQ291bnRlZDxRVE1vdmllVmlzdWFsQ29udGV4dD4geworcHVibGljOgorICAgIFFU
TW92aWVWaXN1YWxDb250ZXh0KFFUTW92aWVWaXN1YWxDb250ZXh0Q2xpZW50KiwgQ0ZEaWN0aW9u
YXJ5UmVmIG9wdGlvbnMgPSAwKTsKKyAgICB+UVRNb3ZpZVZpc3VhbENvbnRleHQoKTsKKworICAg
IGJvb2wgaXNJbWFnZUF2YWlsYWJsZUZvclRpbWUoY29uc3QgUVRDVlRpbWVTdGFtcCopIGNvbnN0
OworICAgIFFUUGl4ZWxCdWZmZXIgaW1hZ2VGb3JUaW1lKGNvbnN0IFFUQ1ZUaW1lU3RhbXAqKTsK
KyAgICB2b2lkIHRhc2soKTsKKworICAgIFFUVmlzdWFsQ29udGV4dFJlZiB2aXN1YWxDb250ZXh0
UmVmKCk7CisKKyAgICB2b2lkIHNldE1vdmllKFBhc3NSZWZQdHI8UVRNb3ZpZT4pOworICAgIFFU
TW92aWUqIG1vdmllKCkgY29uc3Q7CisKKyAgICBzdGF0aWMgQ0ZEaWN0aW9uYXJ5UmVmIGdldENH
SW1hZ2VPcHRpb25zKCk7CisgICAgc3RhdGljIGRvdWJsZSBjdXJyZW50SG9zdFRpbWUoKTsKKwor
cHJvdGVjdGVkOgorICAgIHZvaWQgc2V0dXBWaXN1YWxDb250ZXh0KCk7CisKKyAgICBmcmllbmQg
Y2xhc3MgUVRNb3ZpZVZpc3VhbENvbnRleHRQcml2OworICAgIE93blB0cjxRVE1vdmllVmlzdWFs
Q29udGV4dFByaXY+IG1fcHJpdmF0ZTsKK307CisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vUVRQaXhlbEJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRQaXhlbEJ1ZmZlci5jcHAJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVFBpeGVsQnVmZmVyLmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwyMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgs
IDIwMDksIDIwMTAgQXBwbGUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisjaW5j
bHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJRVFBpeGVsQnVmZmVyLmgiCisKKyNpbmNsdWRl
IDxDRlN0cmluZy5oPgorI2luY2x1ZGUgPENHQ29sb3JTcGFjZS5oPgorI2luY2x1ZGUgPENHSW1h
Z2UuaD4KKyNpbmNsdWRlIDxDVlBpeGVsQnVmZmVyLmg+CisjaW5jbHVkZSA8UXVpY2tEcmF3Lmg+
CisjaW5jbHVkZSA8bWVtb3J5Lmg+CisKK1FUUGl4ZWxCdWZmZXI6OlFUUGl4ZWxCdWZmZXIoKSAK
KyAgICA6IG1fcGl4ZWxCdWZmZXIoMCkgCit7Cit9CisKK1FUUGl4ZWxCdWZmZXI6OlFUUGl4ZWxC
dWZmZXIoY29uc3QgUVRQaXhlbEJ1ZmZlciYgcCkgCisgICAgOiBtX3BpeGVsQnVmZmVyKHAubV9w
aXhlbEJ1ZmZlcikgCit7CisgICAgQ1ZQaXhlbEJ1ZmZlclJldGFpbihtX3BpeGVsQnVmZmVyKTsK
K30KKworUVRQaXhlbEJ1ZmZlcjo6UVRQaXhlbEJ1ZmZlcihDVlBpeGVsQnVmZmVyUmVmIHJlZikg
CisgICAgOiBtX3BpeGVsQnVmZmVyKHJlZikKK3sKKyAgICBDVlBpeGVsQnVmZmVyUmV0YWluKG1f
cGl4ZWxCdWZmZXIpOworfQorCitRVFBpeGVsQnVmZmVyOjp+UVRQaXhlbEJ1ZmZlcigpIAorewor
ICAgIGNsZWFyKCk7Cit9CisKK1FUUGl4ZWxCdWZmZXImIFFUUGl4ZWxCdWZmZXI6Om9wZXJhdG9y
PShjb25zdCBRVFBpeGVsQnVmZmVyJiBwKSAKK3sKKyAgICBzZXQocC5tX3BpeGVsQnVmZmVyKTsK
KyAgICByZXR1cm4gKnRoaXM7Cit9CisKK3ZvaWQgUVRQaXhlbEJ1ZmZlcjo6c2V0KENWUGl4ZWxC
dWZmZXJSZWYgcmVmKQoreworICAgIENWUGl4ZWxCdWZmZXJSZXRhaW4ocmVmKTsKKyAgICBDVlBp
eGVsQnVmZmVyUmVsZWFzZShtX3BpeGVsQnVmZmVyKTsKKyAgICBtX3BpeGVsQnVmZmVyID0gcmVm
OworfQorCitDVlBpeGVsQnVmZmVyUmVmIFFUUGl4ZWxCdWZmZXI6OnBpeGVsQnVmZmVyUmVmKCkK
K3sKKyAgICByZXR1cm4gbV9waXhlbEJ1ZmZlcjsKK30KKwordm9pZCBRVFBpeGVsQnVmZmVyOjph
ZG9wdChDVlBpeGVsQnVmZmVyUmVmIHJlZikKK3sKKyAgICBpZiAocmVmID09IG1fcGl4ZWxCdWZm
ZXIpCisgICAgICAgIHJldHVybjsKKyAgICBDVlBpeGVsQnVmZmVyUmVsZWFzZShtX3BpeGVsQnVm
ZmVyKTsKKyAgICBtX3BpeGVsQnVmZmVyID0gcmVmOworfQorCit2b2lkIFFUUGl4ZWxCdWZmZXI6
OmNsZWFyKCkKK3sKKyAgICBDVlBpeGVsQnVmZmVyUmVsZWFzZShtX3BpeGVsQnVmZmVyKTsKKyAg
ICBtX3BpeGVsQnVmZmVyID0gMDsKK30KKworQ1ZSZXR1cm4gUVRQaXhlbEJ1ZmZlcjo6bG9ja0Jh
c2VBZGRyZXNzKCkKK3sKKyAgICByZXR1cm4gQ1ZQaXhlbEJ1ZmZlckxvY2tCYXNlQWRkcmVzcyht
X3BpeGVsQnVmZmVyLCAwKTsKK30KKworQ1ZSZXR1cm4gUVRQaXhlbEJ1ZmZlcjo6dW5sb2NrQmFz
ZUFkZHJlc3MoKQoreworICAgIHJldHVybiBDVlBpeGVsQnVmZmVyVW5sb2NrQmFzZUFkZHJlc3Mo
bV9waXhlbEJ1ZmZlciwgMCk7Cit9CisKK3ZvaWQqIFFUUGl4ZWxCdWZmZXI6OmJhc2VBZGRyZXNz
KCkKK3sKKyAgICByZXR1cm4gQ1ZQaXhlbEJ1ZmZlckdldEJhc2VBZGRyZXNzKG1fcGl4ZWxCdWZm
ZXIpOworfQorCitzaXplX3QgUVRQaXhlbEJ1ZmZlcjo6d2lkdGgoKSBjb25zdAoreworICAgIHJl
dHVybiBDVlBpeGVsQnVmZmVyR2V0V2lkdGgobV9waXhlbEJ1ZmZlcik7Cit9CisKK3NpemVfdCBR
VFBpeGVsQnVmZmVyOjpoZWlnaHQoKSBjb25zdAoreworICAgIHJldHVybiBDVlBpeGVsQnVmZmVy
R2V0SGVpZ2h0KG1fcGl4ZWxCdWZmZXIpOworfQorCit1bnNpZ25lZCBsb25nIFFUUGl4ZWxCdWZm
ZXI6OnBpeGVsRm9ybWF0VHlwZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIENWUGl4ZWxCdWZmZXJH
ZXRQaXhlbEZvcm1hdFR5cGUobV9waXhlbEJ1ZmZlcik7Cit9CisKK2Jvb2wgUVRQaXhlbEJ1ZmZl
cjo6cGl4ZWxGb3JtYXRJczMyQVJHQigpIGNvbnN0Cit7CisgICAgcmV0dXJuIENWUGl4ZWxCdWZm
ZXJHZXRQaXhlbEZvcm1hdFR5cGUobV9waXhlbEJ1ZmZlcikgPT0gazMyQVJHQlBpeGVsRm9ybWF0
OworfQorCitib29sIFFUUGl4ZWxCdWZmZXI6OnBpeGVsRm9ybWF0SXMzMkJHUkEoKSBjb25zdAor
eworICAgIHJldHVybiBDVlBpeGVsQnVmZmVyR2V0UGl4ZWxGb3JtYXRUeXBlKG1fcGl4ZWxCdWZm
ZXIpID09IGszMkJHUkFQaXhlbEZvcm1hdDsKK30KKworc2l6ZV90IFFUUGl4ZWxCdWZmZXI6OmJ5
dGVzUGVyUm93KCkgY29uc3QKK3sKKyAgICByZXR1cm4gQ1ZQaXhlbEJ1ZmZlckdldEJ5dGVzUGVy
Um93KG1fcGl4ZWxCdWZmZXIpOworfQorCitzaXplX3QgUVRQaXhlbEJ1ZmZlcjo6ZGF0YVNpemUo
KSBjb25zdAoreworICAgIHJldHVybiBDVlBpeGVsQnVmZmVyR2V0RGF0YVNpemUobV9waXhlbEJ1
ZmZlcik7Cit9CisKK2Jvb2wgUVRQaXhlbEJ1ZmZlcjo6aXNQbGFuYXIoKSBjb25zdAoreworICAg
IHJldHVybiBDVlBpeGVsQnVmZmVySXNQbGFuYXIobV9waXhlbEJ1ZmZlcik7Cit9CisKK3NpemVf
dCBRVFBpeGVsQnVmZmVyOjpwbGFuZUNvdW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gQ1ZQaXhl
bEJ1ZmZlckdldFBsYW5lQ291bnQobV9waXhlbEJ1ZmZlcik7Cit9CisKK3NpemVfdCBRVFBpeGVs
QnVmZmVyOjp3aWR0aE9mUGxhbmUoc2l6ZV90IHBsYW5lKSBjb25zdAoreworICAgIHJldHVybiBD
VlBpeGVsQnVmZmVyR2V0V2lkdGhPZlBsYW5lKG1fcGl4ZWxCdWZmZXIsIHBsYW5lKTsKK30KKwor
c2l6ZV90IFFUUGl4ZWxCdWZmZXI6OmhlaWdodE9mUGxhbmUoc2l6ZV90IHBsYW5lKSBjb25zdAor
eworICAgIHJldHVybiBDVlBpeGVsQnVmZmVyR2V0SGVpZ2h0T2ZQbGFuZShtX3BpeGVsQnVmZmVy
LCBwbGFuZSk7Cit9CisKK3ZvaWQqIFFUUGl4ZWxCdWZmZXI6OmJhc2VBZGRyZXNzT2ZQbGFuZShz
aXplX3QgcGxhbmUpIGNvbnN0Cit7CisgICAgcmV0dXJuIENWUGl4ZWxCdWZmZXJHZXRCYXNlQWRk
cmVzc09mUGxhbmUobV9waXhlbEJ1ZmZlciwgcGxhbmUpOworfQorCitzaXplX3QgUVRQaXhlbEJ1
ZmZlcjo6Ynl0ZXNQZXJSb3dPZlBsYW5lKHNpemVfdCBwbGFuZSkgY29uc3QKK3sKKyAgICByZXR1
cm4gQ1ZQaXhlbEJ1ZmZlckdldEJ5dGVzUGVyUm93T2ZQbGFuZShtX3BpeGVsQnVmZmVyLCBwbGFu
ZSk7Cit9CisKK3ZvaWQgUVRQaXhlbEJ1ZmZlcjo6Z2V0RXh0ZW5kZWRQaXhlbHMoc2l6ZV90KiBs
ZWZ0LCBzaXplX3QqIHJpZ2h0LCBzaXplX3QqIHRvcCwgc2l6ZV90KiBib3R0b20pIGNvbnN0Cit7
CisgICAgcmV0dXJuIENWUGl4ZWxCdWZmZXJHZXRFeHRlbmRlZFBpeGVscyhtX3BpeGVsQnVmZmVy
LCBsZWZ0LCByaWdodCwgdG9wLCBib3R0b20pOworfQorCitDRkRpY3Rpb25hcnlSZWYgUVRQaXhl
bEJ1ZmZlcjo6YXR0YWNobWVudHMoKSBjb25zdAoreworICAgIHJldHVybiBDVkJ1ZmZlckdldEF0
dGFjaG1lbnRzKG1fcGl4ZWxCdWZmZXIsIGtDVkF0dGFjaG1lbnRNb2RlX1Nob3VsZFByb3BhZ2F0
ZSk7Cit9CisKK3ZvaWQgUVRQaXhlbEJ1ZmZlcjo6cmV0YWluQ2FsbGJhY2sodm9pZCogcmVmY29u
KQoreworICAgIENWUGl4ZWxCdWZmZXJSZXRhaW4oc3RhdGljX2Nhc3Q8Q1ZQaXhlbEJ1ZmZlclJl
Zj4ocmVmY29uKSk7Cit9CisKK3ZvaWQgUVRQaXhlbEJ1ZmZlcjo6cmVsZWFzZUNhbGxiYWNrKHZv
aWQqIHJlZmNvbikKK3sKKyAgICBDVlBpeGVsQnVmZmVyUmVsZWFzZShzdGF0aWNfY2FzdDxDVlBp
eGVsQnVmZmVyUmVmPihyZWZjb24pKTsKK30KKwordm9pZCBRVFBpeGVsQnVmZmVyOjppbWFnZVF1
ZXVlUmVsZWFzZUNhbGxiYWNrKHVuc2lnbmVkIGludCB0eXBlLCB1aW50NjRfdCBpZCwgdm9pZCog
cmVmY29uKQoreworICAgIENWUGl4ZWxCdWZmZXJSZWxlYXNlKHN0YXRpY19jYXN0PENWUGl4ZWxC
dWZmZXJSZWY+KHJlZmNvbikpOworfQorCit2b2lkIFFUUGl4ZWxCdWZmZXI6OmRhdGFQcm92aWRl
clJlbGVhc2VCeXRlUG9pbnRlckNhbGxiYWNrKHZvaWQqIHJlZmNvbiwgY29uc3Qgdm9pZCogcG9p
bnRlcikKK3sKKyAgICBDVlBpeGVsQnVmZmVyVW5sb2NrQmFzZUFkZHJlc3Moc3RhdGljX2Nhc3Q8
Q1ZQaXhlbEJ1ZmZlclJlZj4ocmVmY29uKSwgMCk7Cit9CisKK2NvbnN0IHZvaWQqIFFUUGl4ZWxC
dWZmZXI6OmRhdGFQcm92aWRlckdldEJ5dGVQb2ludGVyQ2FsbGJhY2sodm9pZCogcmVmY29uKQor
eworICAgIENWUGl4ZWxCdWZmZXJMb2NrQmFzZUFkZHJlc3Moc3RhdGljX2Nhc3Q8Q1ZQaXhlbEJ1
ZmZlclJlZj4ocmVmY29uKSwgMCk7CisgICAgcmV0dXJuIENWUGl4ZWxCdWZmZXJHZXRCYXNlQWRk
cmVzcyhzdGF0aWNfY2FzdDxDVlBpeGVsQnVmZmVyUmVmPihyZWZjb24pKTsKK30KKworc2l6ZV90
IFFUUGl4ZWxCdWZmZXI6OmRhdGFQcm92aWRlckdldEJ5dGVzQXRQb3NpdGlvbkNhbGxiYWNrKHZv
aWQqIHJlZmNvbiwgdm9pZCogYnVmZmVyLCBzaXplX3QgcG9zaXRpb24sIHNpemVfdCBjb3VudCkK
K3sKKyAgICBjaGFyKiBkYXRhID0gKGNoYXIqKUNWUGl4ZWxCdWZmZXJHZXRCYXNlQWRkcmVzcyhz
dGF0aWNfY2FzdDxDVlBpeGVsQnVmZmVyUmVmPihyZWZjb24pKTsKKyAgICBzaXplX3Qgc2l6ZSA9
IENWUGl4ZWxCdWZmZXJHZXREYXRhU2l6ZShzdGF0aWNfY2FzdDxDVlBpeGVsQnVmZmVyUmVmPihy
ZWZjb24pKTsKKyAgICBpZiAoc2l6ZSAtIHBvc2l0aW9uIDwgY291bnQpCisgICAgICAgIGNvdW50
ID0gc2l6ZSAtIHBvc2l0aW9uOworCisgICAgbWVtY3B5KGJ1ZmZlciwgZGF0YStwb3NpdGlvbiwg
Y291bnQpOworICAgIHJldHVybiBjb3VudDsKK30KKwordm9pZCBRVFBpeGVsQnVmZmVyOjpkYXRh
UHJvdmlkZXJSZWxlYXNlSW5mb0NhbGxiYWNrKHZvaWQqIHJlZmNvbikKK3sKKyAgICBDVlBpeGVs
QnVmZmVyUmVsZWFzZShzdGF0aWNfY2FzdDxDVlBpeGVsQnVmZmVyUmVmPihyZWZjb24pKTsKK30K
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUUGl4ZWxCdWZmZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVFBpeGVsQnVmZmVyLmgJ
KHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVFBpeGVsQnVm
ZmVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgUVRQaXhlbEJ1ZmZlcl9oCisjZGVmaW5lIFFUUGl4ZWxCdWZmZXJf
aAorCisjaWZkZWYgUVRNT1ZJRVdJTl9FWFBPUlRTCisjZGVmaW5lIFFUTU9WSUVXSU5fQVBJIF9f
ZGVjbHNwZWMoZGxsZXhwb3J0KQorI2Vsc2UKKyNkZWZpbmUgUVRNT1ZJRVdJTl9BUEkgX19kZWNs
c3BlYyhkbGxpbXBvcnQpCisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGludC5oPgorCit0eXBlZGVm
IHN0cnVjdCBfX0NWQnVmZmVyICpDVkJ1ZmZlclJlZjsKK3R5cGVkZWYgQ1ZCdWZmZXJSZWYgQ1ZQ
aXhlbEJ1ZmZlclJlZjsKK3R5cGVkZWYgc3RydWN0IENHSW1hZ2UqIENHSW1hZ2VSZWY7Cit0eXBl
ZGVmIGludDMyX3QgQ1ZSZXR1cm47Cit0eXBlZGVmIGNvbnN0IHN0cnVjdCBfX0NGRGljdGlvbmFy
eSAqIENGRGljdGlvbmFyeVJlZjsKKworLy8gUVRQaXhlbEJ1ZmZlciB3cmFwcyBRdWlja1RpbWUn
cyBpbXBsZW1lbnRhdGlvbiBvZiBDVlBpeGVsQnVmZmVyLCBzbyBpdHMgZnVuY3Rpb25zIGFyZQor
Ly8gc2FmZSB0byBjYWxsIHdpdGhpbiBXZWJLaXQuCitjbGFzcyBRVE1PVklFV0lOX0FQSSBRVFBp
eGVsQnVmZmVyIHsKK3B1YmxpYzoKKyAgICBRVFBpeGVsQnVmZmVyKCk7CisgICAgUVRQaXhlbEJ1
ZmZlcihjb25zdCBRVFBpeGVsQnVmZmVyJik7CisgICAgUVRQaXhlbEJ1ZmZlcihDVlBpeGVsQnVm
ZmVyUmVmKTsKKyAgICBRVFBpeGVsQnVmZmVyJiBvcGVyYXRvcj0oY29uc3QgUVRQaXhlbEJ1ZmZl
ciYpOworICAgIH5RVFBpeGVsQnVmZmVyKCk7CisKKyAgICB2b2lkIHNldChDVlBpeGVsQnVmZmVy
UmVmKTsKKyAgICBDVlBpeGVsQnVmZmVyUmVmIHBpeGVsQnVmZmVyUmVmKCk7CisgICAgdm9pZCBh
ZG9wdChDVlBpeGVsQnVmZmVyUmVmKTsKKyAgICB2b2lkIGNsZWFyKCk7CisKKyAgICBDVlJldHVy
biBsb2NrQmFzZUFkZHJlc3MoKTsKKyAgICBDVlJldHVybiB1bmxvY2tCYXNlQWRkcmVzcygpOwor
ICAgIHZvaWQqIGJhc2VBZGRyZXNzKCk7CisKKyAgICBzaXplX3Qgd2lkdGgoKSBjb25zdDsKKyAg
ICBzaXplX3QgaGVpZ2h0KCkgY29uc3Q7CisgICAgdW5zaWduZWQgbG9uZyBwaXhlbEZvcm1hdFR5
cGUoKSBjb25zdDsKKyAgICBib29sIHBpeGVsRm9ybWF0SXMzMkFSR0IoKSBjb25zdDsKKyAgICBi
b29sIHBpeGVsRm9ybWF0SXMzMkJHUkEoKSBjb25zdDsKKyAgICBzaXplX3QgYnl0ZXNQZXJSb3co
KSBjb25zdDsKKyAgICBzaXplX3QgZGF0YVNpemUoKSBjb25zdDsKKworICAgIGJvb2wgaXNQbGFu
YXIoKSBjb25zdDsKKyAgICBzaXplX3QgcGxhbmVDb3VudCgpIGNvbnN0OworICAgIHNpemVfdCB3
aWR0aE9mUGxhbmUoc2l6ZV90KSBjb25zdDsKKyAgICBzaXplX3QgaGVpZ2h0T2ZQbGFuZShzaXpl
X3QpIGNvbnN0OworICAgIHZvaWQqIGJhc2VBZGRyZXNzT2ZQbGFuZShzaXplX3QpIGNvbnN0Owor
ICAgIHNpemVfdCBieXRlc1BlclJvd09mUGxhbmUoc2l6ZV90KSBjb25zdDsKKworICAgIHZvaWQg
Z2V0RXh0ZW5kZWRQaXhlbHMoc2l6ZV90KiBsZWZ0LCBzaXplX3QqIHJpZ2h0LCBzaXplX3QqIHRv
cCwgc2l6ZV90KiBib3R0b20pIGNvbnN0OworICAgIENGRGljdGlvbmFyeVJlZiBhdHRhY2htZW50
cygpIGNvbnN0OworCisgICAgLy8gR2VuZXJpYyBDRlJldGFpbi9DRlJlbGVhc2UgY2FsbGJhY2tz
CisgICAgc3RhdGljIHZvaWQgcmVsZWFzZUNhbGxiYWNrKHZvaWQqIHJlZmNvbik7CisgICAgc3Rh
dGljIHZvaWQgcmV0YWluQ2FsbGJhY2sodm9pZCogcmVmY29uKTsKKworICAgIC8vIENBSW1hZ2VR
dWV1ZSBjYWxsYmFja3MKKyAgICBzdGF0aWMgdm9pZCBpbWFnZVF1ZXVlUmVsZWFzZUNhbGxiYWNr
KHVuc2lnbmVkIGludCB0eXBlLCB1aW50NjRfdCBpZCwgdm9pZCogcmVmY29uKTsKKworICAgIC8v
IENHRGF0YVByb3ZpZGVyIGNhbGxiYWNrcworICAgIHN0YXRpYyB2b2lkIGRhdGFQcm92aWRlclJl
bGVhc2VCeXRlUG9pbnRlckNhbGxiYWNrKHZvaWQqIHJlZmNvbiwgY29uc3Qgdm9pZCogcG9pbnRl
cik7CisgICAgc3RhdGljIGNvbnN0IHZvaWQqIGRhdGFQcm92aWRlckdldEJ5dGVQb2ludGVyQ2Fs
bGJhY2sodm9pZCogcmVmY29uKTsKKyAgICBzdGF0aWMgc2l6ZV90IGRhdGFQcm92aWRlckdldEJ5
dGVzQXRQb3NpdGlvbkNhbGxiYWNrKHZvaWQqIHJlZmNvbiwgdm9pZCogYnVmZmVyLCBzaXplX3Qg
cG9zaXRpb24sIHNpemVfdCBjb3VudCk7CisgICAgc3RhdGljIHZvaWQgZGF0YVByb3ZpZGVyUmVs
ZWFzZUluZm9DYWxsYmFjayh2b2lkKiByZWZjb24pOworCitwcml2YXRlOgorICAgIENWUGl4ZWxC
dWZmZXJSZWYgbV9waXhlbEJ1ZmZlcjsKK307CisKKyNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55063</attachid>
            <date>2010-05-04 15:39:34 -0700</date>
            <delta_ts>2010-05-06 13:09:36 -0700</delta_ts>
            <desc>ChangeLog changes. </desc>
            <filename>7569713-ChangeLog.patch</filename>
            <type>text/plain</type>
            <size>11163</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1ODc4MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjMyIEBACisyMDEwLTA1LTA0ICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNh
ZmFyaSBwZWdzIENQVSBhbmQgZHJvcHMgdG9ucyBvZiBmcmFtZXMgdXNpbmcgSFRNTDUgVmltZW8g
cGxheWVyCisgICAgICAgIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MzQwMDU+CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83NTY5NzEzPgorICAgICAgICAKKyAgICAg
ICAgSFRNTE1lZGlhRWxlbWVudDo6ZW50ZXJGdWxsc2NyZWVuIGFuZCBleGl0RnVsbHNjcmVlbiB3
ZXJlIHJlYXJyYW5nZWQgc29tZXdoYXQgdG8gCisgICAgICAgIGRlYWwgd2l0aCB0aGUgcG9zc2li
aWxpdHkgdGhhdCBvbmUgY291bGQgYmUgY2FsbGVkIGZyb20gaW5zaWRlIHRoZSBvdGhlciBhbmQg
b3ZlcndyaXRlCisgICAgICAgIHRoZSBtX2lzRnVsbHNjcmVlbiBtZW1iZXIuCisKKyAgICAgICAg
KiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlh
RWxlbWVudDo6ZW50ZXJGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVs
ZW1lbnQ6OmV4aXRGdWxsc2NyZWVuKToKKworMjAxMC0wNS0wNCAgSmVyIE5vYmxlICA8amVyLm5v
YmxlQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBTYWZhcmkgcGVncyBDUFUgYW5kIGRyb3BzIHRvbnMgb2YgZnJhbWVzIHVzaW5nIEhU
TUw1IFZpbWVvIHBsYXllcgorICAgICAgICA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTM0MDA1PgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzU2OTcxMz4KKworICAg
ICAgICBUaGUgb3JpZ2luYWwgZnVuY3Rpb25hbGl0eSBvZiBRVE1vdmllV2luIGhhcyBiZWVuIHNw
bGl0IGJldHdlZW4gUVRNb3ZpZUdXb3JsZCwgCisgICAgICAgIGFuZCBhIG5ldyBjbGFzczogUVRN
b3ZpZS4gIFFUTW92aWUgY29udGFpbnMgYWxsIHRoZSAiY29udHJvbGxlciIgcGFydHMgKGNoYW5n
aW5nCisgICAgICAgIHRoZSByYXRlLCBzZWVraW5nLCBldGMpIHdoaWxlIFFUTW92aWVHV29ybGQg
cmV0YWlucyBhbGwgdGhlIGRyYXdpbmcgY29kZS4gIFFUTW92aWVHV29ybGQKKyAgICAgICAgbm93
IHRha2VzIGEgUVRNb3ZpZSwgYW5kIGFzIHN1Y2ggUVRNb3ZpZSBpcyBub3cgcmV0YWluYWJsZS4g
IFFUTW92aWVHV29ybGQgcmVnaXN0ZXJzCisgICAgICAgIGl0c2VsZiBhcyBhIGNsaWVudCBvZiBR
VE1vdmllLCBzbyB0aGF0IGl0IGNhbiByZWNlaXZlIGxvYWQtc3RhdGUgbm90aWZpY2F0aW9ucywK
KyAgICAgICAgYW5kIHRodXMgUVRNb3ZpZSBtdXN0IG5vdyBzdXBwb3J0IG11bHRpcGxlIGNsaWVu
dHMuICBNb3ZpZSB0YXNraW5nIHRpbWVyIHN1cHBvcnQKKyAgICAgICAgaGFzIGJlZW4gbW92ZWQg
aW50byBpdHMgb3duIGNsYXNzIChRVE1vdmllVGFzaykgYW5kIHdpbGwgYmUgYWRkcmVzc2VkIGlu
IGEgZnV0dXJlIAorICAgICAgICBwYXRjaC4gIE1vc3Qgb2YgdGhlIGZ1bmN0aW9ucyBsaXN0ZWQg
YmVsb3cgb25seSBjaGFuZ2VkIHNvIG11Y2ggYXMgdGhlaXIgY2xhc3MgbmFtZSBjaGFuZ2VkLgor
ICAgICAgICAKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRNb3ZpZS5jcHA6IENv
cGllZCBmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWVXaW4uY3BwLgor
ICAgICAgICAoUVRNb3ZpZVByaXZhdGU6OlFUTW92aWVQcml2YXRlKToKKyAgICAgICAgKFFUTW92
aWVQcml2YXRlOjp+UVRNb3ZpZVByaXZhdGUpOgorICAgICAgICAoUVRNb3ZpZVByaXZhdGU6OnN0
YXJ0VGFzayk6CisgICAgICAgIChRVE1vdmllUHJpdmF0ZTo6ZW5kVGFzayk6CisgICAgICAgIChR
VE1vdmllUHJpdmF0ZTo6dGFzayk6CisgICAgICAgIChRVE1vdmllUHJpdmF0ZTo6Y3JlYXRlTW92
aWVDb250cm9sbGVyKToKKyAgICAgICAgKFFUTW92aWU6OlFUTW92aWUpOgorICAgICAgICAoUVRN
b3ZpZTo6flFUTW92aWUpOgorICAgICAgICAoUVRNb3ZpZTo6YWRkQ2xpZW50KToKKyAgICAgICAg
KFFUTW92aWU6OnJlbW92ZUNsaWVudCk6CisgICAgICAgIChRVE1vdmllOjpwbGF5KToKKyAgICAg
ICAgKFFUTW92aWU6OnBhdXNlKToKKyAgICAgICAgKFFUTW92aWU6OnJhdGUpOgorICAgICAgICAo
UVRNb3ZpZTo6c2V0UmF0ZSk6CisgICAgICAgIChRVE1vdmllOjpkdXJhdGlvbik6CisgICAgICAg
IChRVE1vdmllOjpjdXJyZW50VGltZSk6CisgICAgICAgIChRVE1vdmllOjpzZXRDdXJyZW50VGlt
ZSk6CisgICAgICAgIChRVE1vdmllOjpzZXRWb2x1bWUpOgorICAgICAgICAoUVRNb3ZpZTo6c2V0
UHJlc2VydmVzUGl0Y2gpOgorICAgICAgICAoUVRNb3ZpZTo6ZGF0YVNpemUpOgorICAgICAgICAo
UVRNb3ZpZTo6bWF4VGltZUxvYWRlZCk6CisgICAgICAgIChRVE1vdmllOjpsb2FkU3RhdGUpOgor
ICAgICAgICAoUVRNb3ZpZTo6Z2V0TmF0dXJhbFNpemUpOgorICAgICAgICAoUVRNb3ZpZTo6bG9h
ZCk6CisgICAgICAgIChRVE1vdmllOjpkaXNhYmxlVW5zdXBwb3J0ZWRUcmFja3MpOgorICAgICAg
ICAoUVRNb3ZpZTo6aXNEaXNhYmxlZCk6CisgICAgICAgIChRVE1vdmllOjpzZXREaXNhYmxlZCk6
CisgICAgICAgIChRVE1vdmllOjpoYXNWaWRlbyk6CisgICAgICAgIChRVE1vdmllOjpoYXNBdWRp
byk6CisgICAgICAgIChRVE1vdmllOjpoYXNDbG9zZWRDYXB0aW9ucyk6CisgICAgICAgIChRVE1v
dmllOjpzZXRDbG9zZWRDYXB0aW9uc1Zpc2libGUpOgorICAgICAgICAoUVRNb3ZpZTo6Y291bnRT
dXBwb3J0ZWRUeXBlcyk6CisgICAgICAgIChRVE1vdmllOjpnZXRTdXBwb3J0ZWRUeXBlKToKKyAg
ICAgICAgKFFUTW92aWU6OmluaXRpYWxpemVRdWlja1RpbWUpOgorICAgICAgICAoUVRNb3ZpZTo6
Z2V0TW92aWVIYW5kbGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVE1vdmll
Lmg6IENvcGllZCBmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWVXaW4u
aC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRNb3ZpZUdXb3JsZC5jcHA6IENv
cGllZCBmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWVXaW4uY3BwLgor
ICAgICAgICAoUVRNb3ZpZUdXb3JsZFByaXZhdGU6OlFUTW92aWVHV29ybGRQcml2YXRlKToKKyAg
ICAgICAgKFFUTW92aWVHV29ybGRQcml2YXRlOjp+UVRNb3ZpZUdXb3JsZFByaXZhdGUpOgorICAg
ICAgICAoUVRNb3ZpZUdXb3JsZFByaXZhdGU6OmNhY2hlTW92aWVTY2FsZSk6CisgICAgICAgICht
b3ZpZURyYXdpbmdDb21wbGV0ZVByb2MpOgorICAgICAgICAoUVRNb3ZpZUdXb3JsZFByaXZhdGU6
OnJlZ2lzdGVyRHJhd2luZ0NhbGxiYWNrKToKKyAgICAgICAgKFFUTW92aWVHV29ybGRQcml2YXRl
Ojp1bnJlZ2lzdGVyRHJhd2luZ0NhbGxiYWNrKToKKyAgICAgICAgKFFUTW92aWVHV29ybGRQcml2
YXRlOjpkcmF3aW5nQ29tcGxldGUpOgorICAgICAgICAoUVRNb3ZpZUdXb3JsZFByaXZhdGU6OnVw
ZGF0ZUdXb3JsZCk6CisgICAgICAgIChRVE1vdmllR1dvcmxkUHJpdmF0ZTo6Y3JlYXRlR1dvcmxk
KToKKyAgICAgICAgKFFUTW92aWVHV29ybGRQcml2YXRlOjpjbGVhckdXb3JsZCk6CisgICAgICAg
IChRVE1vdmllR1dvcmxkUHJpdmF0ZTo6c2V0U2l6ZSk6CisgICAgICAgIChRVE1vdmllR1dvcmxk
UHJpdmF0ZTo6dXBkYXRlTW92aWVTaXplKToKKyAgICAgICAgKFFUTW92aWVHV29ybGRQcml2YXRl
OjpkZWxldGVHV29ybGQpOgorICAgICAgICAoUVRNb3ZpZUdXb3JsZFByaXZhdGU6Om1vdmllRW5k
ZWQpOgorICAgICAgICAoUVRNb3ZpZUdXb3JsZFByaXZhdGU6Om1vdmllTG9hZFN0YXRlQ2hhbmdl
ZCk6CisgICAgICAgIChRVE1vdmllR1dvcmxkUHJpdmF0ZTo6bW92aWVUaW1lQ2hhbmdlZCk6Cisg
ICAgICAgIChRVE1vdmllR1dvcmxkOjpRVE1vdmllR1dvcmxkKToKKyAgICAgICAgKFFUTW92aWVH
V29ybGQ6On5RVE1vdmllR1dvcmxkKToKKyAgICAgICAgKFFUTW92aWVHV29ybGQ6OnNldFNpemUp
OgorICAgICAgICAoUVRNb3ZpZUdXb3JsZDo6c2V0VmlzaWJsZSk6CisgICAgICAgIChRVE1vdmll
R1dvcmxkOjpnZXRDdXJyZW50RnJhbWVJbmZvKToKKyAgICAgICAgKFFUTW92aWVHV29ybGQ6OnBh
aW50KToKKyAgICAgICAgKFFUTW92aWVHV29ybGQ6OnNldERpc2FibGVkKToKKyAgICAgICAgKFFU
TW92aWVHV29ybGQ6OmlzRGlzYWJsZWQpOgorICAgICAgICAoUVRNb3ZpZUdXb3JsZDo6ZnVsbHNj
cmVlblduZFByb2MpOgorICAgICAgICAoUVRNb3ZpZUdXb3JsZDo6ZW50ZXJGdWxsc2NyZWVuKToK
KyAgICAgICAgKFFUTW92aWVHV29ybGQ6OmV4aXRGdWxsc2NyZWVuKToKKyAgICAgICAgKFFUTW92
aWVHV29ybGQ6OnNldE1vdmllKToKKyAgICAgICAgKFFUTW92aWVHV29ybGQ6Om1vdmllKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRNb3ZpZUdXb3JsZC5oOiBDb3BpZWQgZnJv
bSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVE1vdmllV2luLmguCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWVUYXNrLmNwcDogQWRkZWQuCisgICAgICAgIChR
VE1vdmllVGFzazo6UVRNb3ZpZVRhc2spOgorICAgICAgICAoUVRNb3ZpZVRhc2s6On5RVE1vdmll
VGFzayk6CisgICAgICAgIChRVE1vdmllVGFzazo6c2hhcmVkVGFzayk6CisgICAgICAgIChRVE1v
dmllVGFzazo6dXBkYXRlVGFza1RpbWVyKToKKyAgICAgICAgKFFUTW92aWVUYXNrOjpmaXJlVGFz
a0NsaWVudHMpOgorICAgICAgICAoUVRNb3ZpZVRhc2s6OmFkZFRhc2tDbGllbnQpOgorICAgICAg
ICAoUVRNb3ZpZVRhc2s6OnJlbW92ZVRhc2tDbGllbnQpOgorICAgICAgICAoUVRNb3ZpZVRhc2s6
OnNldFRhc2tUaW1lckZ1bmNzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRN
b3ZpZVRhc2suaDogQWRkZWQuCisKKzIwMTAtMDUtMDQgIEplciBOb2JsZSAgPGplci5ub2JsZUBh
cHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgU2FmYXJpIHBlZ3MgQ1BVIGFuZCBkcm9wcyB0b25zIG9mIGZyYW1lcyB1c2luZyBIVE1MNSBW
aW1lbyBwbGF5ZXIKKyAgICAgICAgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0zNDAwNT4KKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc1Njk3MTM+CisKKyAgICAgICAg
TWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dCBoYXMgYmVlbiBhZGRlZCBh
cyBhIAorICAgICAgICBzdXBwb3J0ZWQgTWVkaWFQbGF5ZXIgaW1wbGVtZW50YXRpb24uICBNZWRp
YVBsYXllclByaXZhdGVRdWlja1RpbWVXaW4KKyAgICAgICAgaGFzIGJlZW4gbGVmdCBhcyBhIGZh
bGxiYWNrIE1lZGlhUGxheWVyIGltcGxlbWVudGF0aW9uIGZvciB0aG9zZSBtZWRpYQorICAgICAg
ICB0eXBlcyB3aGljaCBkbyBub3Qgc3VwcG9ydCB2aXN1YWwgY29udGV4dHMgKGN1cnJlbnRseSwg
bm9uZSkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjppbnN0YWxsZWRNZWRpYUVuZ2luZXMpOgorCisyMDEwLTA1LTA0ICBK
ZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFNhZmFyaSBwZWdzIENQVSBhbmQgZHJvcHMgdG9ucyBv
ZiBmcmFtZXMgdXNpbmcgSFRNTDUgVmltZW8gcGxheWVyCisgICAgICAgIDxodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQwMDU+CisgICAgICAgIDxyZGFyOi8vcHJvYmxl
bS83NTY5NzEzPgorCisgICAgICAgIE1lZGlhUGxheWVyUHJpdmF0ZVRhc2tUaW1lciBoYXMgYmVl
biBicm9rZW4gb3V0IGZyb20gTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lV2luOjpUYXNrVGlt
ZXIKKyAgICAgICAgc28gdGhhdCBtdWx0aXBsZSBjbGllbnRzIGNhbiBzaGFyZSBpdHMgaW1wbGVt
ZW50YXRpb24uICBJdCB3b3JrcyB3aXRoIHRoZSBuZXcgCisgICAgICAgIFFUTW92aWVUYXNrVGlt
ZXIgdG8gcHJvdmlkZSB0aW1lciBzdXBwb3J0IHRvIFFUTW92aWVUYXNrVGltZXIgY2xpZW50cy4K
KyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJp
dmF0ZVRhc2tUaW1lci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlVGFza1RpbWVyOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZVRhc2tUaW1lcjo6c2V0RGVsYXkpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlVGFza1RpbWVyOjpzdG9wVGFza1RpbWVyKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZVRhc2tUaW1lcjo6ZmlyZWQpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVUYXNrVGltZXIuaDogQWRkZWQuCisKKzIw
MTAtMDUtMDQgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU2FmYXJpIHBlZ3MgQ1BVIGFuZCBk
cm9wcyB0b25zIG9mIGZyYW1lcyB1c2luZyBIVE1MNSBWaW1lbyBwbGF5ZXIKKyAgICAgICAgPGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNDAwNT4KKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzc1Njk3MTM+CisKKyAgICAgICAgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tU
aW1lVmlzdWFsQ29udGV4dCBpcyBhIG5ldyBNZWRpYVBsYXllclByaXZhdGUgaW1wbGVtZW50YXRp
b24KKyAgICAgICAgd2hpY2ggdXNlcyBRVE1vdmllVmlzdWFsQ29udGV4dCBpbnN0ZWFkIG9mIFFU
TW92aWVXaW4gdG8gcmVuZGVyIHZpZGVvIGZyYW1lcy4gTXVjaAorICAgICAgICBsaWtlIE1lZGlh
UGxheWVyUHJpdmF0ZVF1aWNrVGltZVdpbiwgTVBQUVRWaXN1YWxDb250ZXh0IGJyZWFrcyBvdXQg
UVRNb3ZpZSBhbmQgCisgICAgICAgIFFUTW92aWVWaXN1YWxDb250ZXh0LCBhbmQgdXNlcyB0aGUg
bmV3bHkgc2hhcmVkIE1lZGlhUGxheWVyUHJpdmF0ZVRhc2tUaW1lci4gIEl0IGFsc28KKyAgICAg
ICAgdXNlcyBhZ2dyZWdhdGlvbiAoaW4gdGhlIGZvcm0gb2YgZnJpZW5kIGNsYXNzZXMpIGluc3Rl
YWQgb2YgbXVsdGlwbGUgaW5oZXJpdGVuY2UgCisgICAgICAgIHRvIGltcGxlbWVudCBpdHMgdmFy
aW91cyBjbGllbnQgY2FsbGJhY2tzLCBzbyBhcyBub3QgdG8gZXhwb3NlIGl0cyBvd24gY2xpZW50
cyB0bworICAgICAgICB0aGUgUVRNb3ZpZSBjbGFzc2VzLgorCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQuY3Bw
OiBDb3BpZWQgZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclBy
aXZhdGVRdWlja1RpbWVXaW4uY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9N
ZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0Lmg6IENvcGllZCBmcm9tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVdp
bi5oLgorCisyMDEwLTA1LTA0ICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNhZmFyaSBwZWdz
IENQVSBhbmQgZHJvcHMgdG9ucyBvZiBmcmFtZXMgdXNpbmcgSFRNTDUgVmltZW8gcGxheWVyCisg
ICAgICAgIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQwMDU+Cisg
ICAgICAgIDxyZGFyOi8vcHJvYmxlbS83NTY5NzEzPgorICAgICAgICAKKyAgICAgICAgTWVkaWFQ
bGF5ZXJQcml2YXRlUXVpY2tUaW1lV2luIGhhcyBiZWVuIG1vZGlmaWVkIHRvIHN1cHBvcnQgdGhl
IG5ldyBiaWZ1cmNhdGVkIAorICAgICAgICBRVE1vdmllL1FUTW92aWVXaW4gY2xhc3Nlcy4gIEl0
J3MgcHJpdmF0ZSBUYXNrVGltZXIgY2xhc3MgaGFzIGJlZW4gYnJva2VuIG91dAorICAgICAgICBp
bnRvIGEgbmV3IHRvcC1sZXZlbCBjbGFzcyAoTWVkaWFQbGF5ZXJQcml2YXRlVGFza1RpbWVyKSB3
aGljaCB3aWxsIGJlIGFkZHJlc3NlZAorICAgICAgICBpbiBhIGZ1dHVyZSBwYXRjaC4gCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1l
V2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6fk1lZGlhUGxh
eWVyUHJpdmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OmxvYWQp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpwYXVzZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0VmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGU6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6Om1pbWVUeXBlQ2Fj
aGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjppc0F2YWlsYWJsZSk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6Om1vdmllRW5kZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjptb3ZpZUxvYWRTdGF0ZUNoYW5nZWQp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjptb3ZpZVRpbWVDaGFuZ2Vk
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6bW92aWVOZXdJbWFnZUF2
YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnBhaW50Q29u
dGVudHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZh
dGVRdWlja1RpbWVXaW4uaDoKKworMjAxMC0wNS0wNCAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFw
cGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBTYWZhcmkgcGVncyBDUFUgYW5kIGRyb3BzIHRvbnMgb2YgZnJhbWVzIHVzaW5nIEhUTUw1IFZp
bWVvIHBsYXllcgorICAgICAgICA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTM0MDA1PgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzU2OTcxMz4KKworICAgICAgICBR
VENGRGljdGlvbmFyeSBkZWZpbmVzIGZ1bmN0aW9ucyB3aGljaCBoZWxwIHNlcmlhbGl6ZSBhbmQg
dW5zZXJpYWxpemUKKyAgICAgICAgQ0ZEaWN0aW9uYXJpZXMuICBUaGlzIGlzIG5lY2Vzc2FyeSBi
ZWNhdXNlIFF1aWNrVGltZSBsaW5rcyBhZ2FpbnN0IGEgCisgICAgICAgIG5vbi1kZWJ1ZyBDb3Jl
Rm91bmRhdGlvbiBpbiBvdXIgZGVidWcgYnVpbGQsIGFuZCBwYXNzaW5nIG5vbi1kZWJ1ZyAKKyAg
ICAgICAgQ0ZEaWN0aW9uYXJpZXMgdG8gYSBkZWJ1ZyBDRiB3aWxsIGNhdXNlIGEgY3Jhc2guCisg
ICAgICAgIAorICAgICAgICBRVE1vdmllVGFzayBpcyBhIG5ldyBjbGFzcyBjb250YWluaW5nIHRo
ZSB0YXNraW5nIGZ1bmN0aW9uYWxpdHkgYnJva2VuCisgICAgICAgIG91dCBmcm9tIFFUTW92aWVX
aW4uICBUaGlzIGlzIG5lY2Vzc2FyeSBub3cgdGhhdCB0aGUgdGFza2luZworICAgICAgICBmdW5j
dGlvbmFsaXR5IGlzIG5lZWRlZCBpbiBtdWx0aXBsZSBmaWxlcy9jbGFzc2VzLgorICAgICAgICAK
KyAgICAgICAgUVRQaXhlbEJ1ZmZlciBpcyBhIEMrKyB3cmFwcGVyIGZvciBDVlBpeGVsQnVmZmVy
cywgbmVjZXNzYXJ5IGJlY2F1c2UKKyAgICAgICAgbGlrZSB0aGUgQ0YgY2FzZSBhYm92ZSwgUXVp
Y2tUaW1lIGhhcyBpdHMgb3duIGltcGxlbWVudGF0aW9uIG9mIENvcmVWaWRlbworICAgICAgICBh
bmQgaXRzIENWIHR5cGVzIGNhbm5vdCBiZSB1c2VkIHdpdGggdGhlIEFBUyB2ZXJzaW9uIG9mIENv
cmVWaWRlby4KKyAgICAgICAgCisgICAgICAgIFFUTW92aWVWaXN1YWxDb250ZXh0IGlzIHRoZSBu
ZXcgZHJhd2luZyBpbXBsZW1lbnRhdGlvbiwgcGFyYWxsZWwgdG8gCisgICAgICAgIFFUTW92aWVX
aW4uICBJdCBjdXJyZW50bHkgdXNlcyBhIHNvZnR3YXJlIHJlbmRlcmluZyBwYXRoLCBidXQgY2Fu
IGJlCisgICAgICAgIGV4dGVuZGVkIGluIHRoZSBmdXR1cmUgdG8gc3VwcG9ydCBoYXJkd2FyZSBy
ZW5kZXJpbmcuCisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVENG
RGljdGlvbmFyeS5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9R
VENGRGljdGlvbmFyeS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
UVRNb3ZpZVRhc2suY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
UVRNb3ZpZVRhc2suaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FU
TW92aWVWaXN1YWxDb250ZXh0LmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL1FUTW92aWVWaXN1YWxDb250ZXh0Lmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9RVFBpeGVsQnVmZmVyLmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL1FUUGl4ZWxCdWZmZXIuaDogQWRkZWQuCisKIDIwMTAtMDUtMDQgIEtl
bnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERh
dmlkIExldmluIChhbmQgdW5vZmZpY2lhbGx5IGJ5IEVucmljYSBDYXN1Y2NpKS4K
</data>
<flag name="review"
          id="39162"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55149</attachid>
            <date>2010-05-05 13:23:22 -0700</date>
            <delta_ts>2010-05-07 09:29:19 -0700</delta_ts>
            <desc>Part 1.1: QTMovieWin: The breakup of QTMovieWin</desc>
            <filename>7569713-QTMovieWin-Breakup.patch</filename>
            <type>text/plain</type>
            <size>169379</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWUuY3BwCShyZXZpc2lv
biA1ODU5NikJKGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRNb3ZpZVdpbi5j
cHA6NTg1OTYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVE1vdmllLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJRVE1vdmllV2luLmgiCisKKy8v
IFB1dCBNb3ZpZXMuaCBmaXJzdCBzbyBidWlsZCBmYWlsdXJlcyBoZXJlIHBvaW50IGNsZWFybHkg
dG8gUXVpY2tUaW1lCisjaW5jbHVkZSA8TW92aWVzLmg+CisKKyNpbmNsdWRlICJRVE1vdmllV2lu
VGltZXIuaCIKKyNpbmNsdWRlIDxHWE1hdGguaD4KKyNpbmNsdWRlIDxRVE1MLmg+CisjaW5jbHVk
ZSA8UXVpY2tUaW1lQ29tcG9uZW50cy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Cisj
aW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK3N0YXRpYyBj
b25zdCBsb25nIG1pbmltdW1RdWlja1RpbWVWZXJzaW9uID0gMHgwNzMwMDAwMDsgLy8gNy4zCisK
K3N0YXRpYyBjb25zdCBsb25nIGNsb3NlZENhcHRpb25UcmFja1R5cGUgPSAnY2xjcCc7CitzdGF0
aWMgY29uc3QgbG9uZyBzdWJUaXRsZVRyYWNrVHlwZSA9ICdzYnRsJzsKK3N0YXRpYyBjb25zdCBs
b25nIG1wZWc0T2JqZWN0RGVzY3JpcHRpb25UcmFja1R5cGUgPSAnb2RzbSc7CitzdGF0aWMgY29u
c3QgbG9uZyBtcGVnNFNjZW5lRGVzY3JpcHRpb25UcmFja1R5cGUgPSAnc2RzbSc7CitzdGF0aWMg
Y29uc3QgbG9uZyBjbG9zZWRDYXB0aW9uRGlzcGxheVByb3BlcnR5SUQgPSAnZGlzcCc7CitzdGF0
aWMgTFBDVFNUUiBmdWxsc2NyZWVuUVRNb3ZpZVdpblBvaW50ZXJQcm9wID0gVEVYVCgiZnVsbHNj
cmVlblFUTW92aWVXaW5Qb2ludGVyIik7CisKKy8vIFJlc2l6aW5nIEdXb3JsZHMgaXMgc2xvdywg
Z2l2ZSB0aGVtIGEgbWluaW11bSBzaXplIHNvIHNpemUgb2Ygc21hbGwgCisvLyB2aWRlb3MgY2Fu
IGJlIGFuaW1hdGVkIHNtb290aGx5CitzdGF0aWMgY29uc3QgaW50IGNHV29ybGRNaW5XaWR0aCA9
IDY0MDsKK3N0YXRpYyBjb25zdCBpbnQgY0dXb3JsZE1pbkhlaWdodCA9IDM2MDsKKworc3RhdGlj
IGNvbnN0IGZsb2F0IGNOb25Db250aW51b3VzVGltZUNoYW5nZSA9IDAuMmY7CisKK3VuaW9uIFVw
cFBhcmFtIHsKKyAgICBsb25nIGxvbmdWYWx1ZTsKKyAgICB2b2lkKiBwdHI7Cit9OworCitzdGF0
aWMgTW92aWVEcmF3aW5nQ29tcGxldGVVUFAgZ01vdmllRHJhd2luZ0NvbXBsZXRlVVBQID0gMDsK
K3N0YXRpYyBIYXNoU2V0PFFUTW92aWVXaW5Qcml2YXRlKj4qIGdUYXNrTGlzdDsKK3N0YXRpYyBW
ZWN0b3I8Q0ZTdHJpbmdSZWY+KiBnU3VwcG9ydGVkVHlwZXMgPSAwOworc3RhdGljIFNJbnQzMiBx
dWlja1RpbWVWZXJzaW9uID0gMDsKKworc3RhdGljIFFUTW92aWVXaW46OlNldFRhc2tUaW1lckRl
bGF5RnVuYyBnU2V0VGFza1RpbWVyRGVsYXkgPSAwOworc3RhdGljIFFUTW92aWVXaW46OlN0b3BU
YXNrVGltZXJGdW5jIGdTdG9wVGFza1RpbWVyID0gMDsKKworc3RhdGljIHZvaWQgdXBkYXRlVGFz
a1RpbWVyKGludCBtYXhJbnRlcnZhbCA9IDEwMDApCit7CisgICAgaWYgKCFnVGFza0xpc3QtPnNp
emUoKSkgeworICAgICAgICBnU3RvcFRhc2tUaW1lcigpOworICAgICAgICByZXR1cm47ICAgIAor
ICAgIH0KKyAgICAKKyAgICBsb25nIGludGVydmFsSW5NUzsKKyAgICBRVEdldFRpbWVVbnRpbE5l
eHRUYXNrKCZpbnRlcnZhbEluTVMsIDEwMDApOworICAgIGlmIChpbnRlcnZhbEluTVMgPiBtYXhJ
bnRlcnZhbCkKKyAgICAgICAgaW50ZXJ2YWxJbk1TID0gbWF4SW50ZXJ2YWw7CisgICAgZ1NldFRh
c2tUaW1lckRlbGF5KHN0YXRpY19jYXN0PGZsb2F0PihpbnRlcnZhbEluTVMpIC8gMTAwMCk7Cit9
CisKK2NsYXNzIFFUTW92aWVXaW5Qcml2YXRlIDogcHVibGljIE5vbmNvcHlhYmxlIHsKK3B1Ymxp
YzoKKyAgICBRVE1vdmllV2luUHJpdmF0ZSgpOworICAgIH5RVE1vdmllV2luUHJpdmF0ZSgpOwor
ICAgIHZvaWQgdGFzaygpOworICAgIHZvaWQgc3RhcnRUYXNrKCk7CisgICAgdm9pZCBlbmRUYXNr
KCk7CisKKyAgICB2b2lkIGNyZWF0ZU1vdmllQ29udHJvbGxlcigpOworICAgIHZvaWQgcmVnaXN0
ZXJEcmF3aW5nQ2FsbGJhY2soKTsKKyAgICB2b2lkIGRyYXdpbmdDb21wbGV0ZSgpOworICAgIHZv
aWQgdXBkYXRlR1dvcmxkKCk7CisgICAgdm9pZCBjcmVhdGVHV29ybGQoKTsKKyAgICB2b2lkIGRl
bGV0ZUdXb3JsZCgpOworICAgIHZvaWQgY2xlYXJHV29ybGQoKTsKKyAgICB2b2lkIGNhY2hlTW92
aWVTY2FsZSgpOworICAgIHZvaWQgdXBkYXRlTW92aWVTaXplKCk7CisKKyAgICB2b2lkIHNldFNp
emUoaW50LCBpbnQpOworCisgICAgUVRNb3ZpZVdpbiogbV9tb3ZpZVdpbjsKKyAgICBNb3ZpZSBt
X21vdmllOworICAgIE1vdmllQ29udHJvbGxlciBtX21vdmllQ29udHJvbGxlcjsKKyAgICBib29s
IG1fdGFza2luZzsKKyAgICBRVE1vdmllV2luQ2xpZW50KiBtX2NsaWVudDsKKyAgICBsb25nIG1f
bG9hZFN0YXRlOworICAgIGJvb2wgbV9lbmRlZDsKKyAgICBib29sIG1fc2Vla2luZzsKKyAgICBm
bG9hdCBtX2xhc3RNZWRpYVRpbWU7CisgICAgZG91YmxlIG1fbGFzdExvYWRTdGF0ZUNoZWNrVGlt
ZTsKKyAgICBpbnQgbV93aWR0aDsKKyAgICBpbnQgbV9oZWlnaHQ7CisgICAgYm9vbCBtX3Zpc2li
bGU7CisgICAgR1dvcmxkUHRyIG1fZ1dvcmxkOworICAgIGludCBtX2dXb3JsZFdpZHRoOworICAg
IGludCBtX2dXb3JsZEhlaWdodDsKKyAgICBHV29ybGRQdHIgbV9zYXZlZEdXb3JsZDsKKyAgICBs
b25nIG1fbG9hZEVycm9yOworICAgIGZsb2F0IG1fd2lkdGhTY2FsZUZhY3RvcjsKKyAgICBmbG9h
dCBtX2hlaWdodFNjYWxlRmFjdG9yOworICAgIENGVVJMUmVmIG1fY3VycmVudFVSTDsKKyAgICBm
bG9hdCBtX3RpbWVUb1Jlc3RvcmU7CisgICAgZmxvYXQgbV9yYXRlVG9SZXN0b3JlOworI2lmICFB
U1NFUlRfRElTQUJMRUQKKyAgICBib29sIG1fc2NhbGVDYWNoZWQ7CisjZW5kaWYKKyAgICBXaW5k
b3dQdHIgbV9mdWxsc2NyZWVuV2luZG93OworICAgIEdXb3JsZFB0ciBtX2Z1bGxzY3JlZW5Pcmln
R1dvcmxkOworICAgIFJlY3QgbV9mdWxsc2NyZWVuUmVjdDsKKyAgICBRVE1vdmllV2luRnVsbHNj
cmVlbkNsaWVudCogbV9mdWxsc2NyZWVuQ2xpZW50OworICAgIGNoYXIqIG1fZnVsbHNjcmVlblJl
c3RvcmVTdGF0ZTsKK307CisKK1FUTW92aWVXaW5Qcml2YXRlOjpRVE1vdmllV2luUHJpdmF0ZSgp
CisgICAgOiBtX21vdmllV2luKDApCisgICAgLCBtX21vdmllKDApCisgICAgLCBtX21vdmllQ29u
dHJvbGxlcigwKQorICAgICwgbV90YXNraW5nKGZhbHNlKQorICAgICwgbV9jbGllbnQoMCkKKyAg
ICAsIG1fbG9hZFN0YXRlKDApCisgICAgLCBtX2VuZGVkKGZhbHNlKQorICAgICwgbV9zZWVraW5n
KGZhbHNlKQorICAgICwgbV9sYXN0TWVkaWFUaW1lKDApCisgICAgLCBtX2xhc3RMb2FkU3RhdGVD
aGVja1RpbWUoMCkKKyAgICAsIG1fd2lkdGgoMCkKKyAgICAsIG1faGVpZ2h0KDApCisgICAgLCBt
X3Zpc2libGUoZmFsc2UpCisgICAgLCBtX2dXb3JsZCgwKQorICAgICwgbV9nV29ybGRXaWR0aCgw
KQorICAgICwgbV9nV29ybGRIZWlnaHQoMCkKKyAgICAsIG1fc2F2ZWRHV29ybGQoMCkKKyAgICAs
IG1fbG9hZEVycm9yKDApCisgICAgLCBtX3dpZHRoU2NhbGVGYWN0b3IoMSkKKyAgICAsIG1faGVp
Z2h0U2NhbGVGYWN0b3IoMSkKKyAgICAsIG1fY3VycmVudFVSTCgwKQorICAgICwgbV90aW1lVG9S
ZXN0b3JlKC0xLjBmKQorICAgICwgbV9yYXRlVG9SZXN0b3JlKC0xLjBmKQorI2lmICFBU1NFUlRf
RElTQUJMRUQKKyAgICAsIG1fc2NhbGVDYWNoZWQoZmFsc2UpCisjZW5kaWYKKyAgICAsIG1fZnVs
bHNjcmVlbldpbmRvdygwKQorICAgICwgbV9mdWxsc2NyZWVuT3JpZ0dXb3JsZCgwKQorICAgICwg
bV9mdWxsc2NyZWVuQ2xpZW50KDApCisgICAgLCBtX2Z1bGxzY3JlZW5SZXN0b3JlU3RhdGUoMCkK
K3sKKyAgICBSZWN0IHJlY3QgPSB7IDAsIDAsIDAsIDAgfTsKKyAgICBtX2Z1bGxzY3JlZW5SZWN0
ID0gcmVjdDsKK30KKworUVRNb3ZpZVdpblByaXZhdGU6On5RVE1vdmllV2luUHJpdmF0ZSgpCit7
CisgICAgQVNTRVJUKCFtX2Z1bGxzY3JlZW5XaW5kb3cpOworCisgICAgZW5kVGFzaygpOworICAg
IGlmIChtX2dXb3JsZCkKKyAgICAgICAgZGVsZXRlR1dvcmxkKCk7CisgICAgaWYgKG1fbW92aWVD
b250cm9sbGVyKQorICAgICAgICBEaXNwb3NlTW92aWVDb250cm9sbGVyKG1fbW92aWVDb250cm9s
bGVyKTsKKyAgICBpZiAobV9tb3ZpZSkKKyAgICAgICAgRGlzcG9zZU1vdmllKG1fbW92aWUpOwor
ICAgIGlmIChtX2N1cnJlbnRVUkwpCisgICAgICAgIENGUmVsZWFzZShtX2N1cnJlbnRVUkwpOwor
fQorCit2b2lkIFFUTW92aWVXaW46OnRhc2tUaW1lckZpcmVkKCkKK3sKKyAgICAvLyBUaGUgaGFz
aCBjb250ZW50IG1pZ2h0IGNoYW5nZSBkdXJpbmcgdGFzaygpCisgICAgVmVjdG9yPFFUTW92aWVX
aW5Qcml2YXRlKj4gdGFza3M7CisgICAgY29weVRvVmVjdG9yKCpnVGFza0xpc3QsIHRhc2tzKTsK
KyAgICBzaXplX3QgY291bnQgPSB0YXNrcy5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBuID0g
MDsgbiA8IGNvdW50OyArK24pCisgICAgICAgIHRhc2tzW25dLT50YXNrKCk7CisKKyAgICB1cGRh
dGVUYXNrVGltZXIoKTsKK30KKwordm9pZCBRVE1vdmllV2luUHJpdmF0ZTo6c3RhcnRUYXNrKCkg
Cit7CisgICAgaWYgKG1fdGFza2luZykKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghZ1Rhc2tM
aXN0KQorICAgICAgICBnVGFza0xpc3QgPSBuZXcgSGFzaFNldDxRVE1vdmllV2luUHJpdmF0ZSo+
OworICAgIGdUYXNrTGlzdC0+YWRkKHRoaXMpOworICAgIG1fdGFza2luZyA9IHRydWU7CisgICAg
dXBkYXRlVGFza1RpbWVyKCk7Cit9CisKK3ZvaWQgUVRNb3ZpZVdpblByaXZhdGU6OmVuZFRhc2so
KSAKK3sKKyAgICBpZiAoIW1fdGFza2luZykKKyAgICAgICAgcmV0dXJuOworICAgIGdUYXNrTGlz
dC0+cmVtb3ZlKHRoaXMpOworICAgIG1fdGFza2luZyA9IGZhbHNlOworICAgIHVwZGF0ZVRhc2tU
aW1lcigpOworfQorCit2b2lkIFFUTW92aWVXaW5Qcml2YXRlOjpjYWNoZU1vdmllU2NhbGUoKQor
eworICAgIFJlY3QgbmF0dXJhbFJlY3Q7CisgICAgUmVjdCBpbml0aWFsUmVjdDsKKworICAgIEdl
dE1vdmllTmF0dXJhbEJvdW5kc1JlY3QobV9tb3ZpZSwgJm5hdHVyYWxSZWN0KTsKKyAgICBHZXRN
b3ZpZUJveChtX21vdmllLCAmaW5pdGlhbFJlY3QpOworCisgICAgZmxvYXQgbmF0dXJhbFdpZHRo
ID0gbmF0dXJhbFJlY3QucmlnaHQgLSBuYXR1cmFsUmVjdC5sZWZ0OworICAgIGZsb2F0IG5hdHVy
YWxIZWlnaHQgPSBuYXR1cmFsUmVjdC5ib3R0b20gLSBuYXR1cmFsUmVjdC50b3A7CisKKyAgICBp
ZiAobmF0dXJhbFdpZHRoKQorICAgICAgICBtX3dpZHRoU2NhbGVGYWN0b3IgPSAoaW5pdGlhbFJl
Y3QucmlnaHQgLSBpbml0aWFsUmVjdC5sZWZ0KSAvIG5hdHVyYWxXaWR0aDsKKyAgICBpZiAobmF0
dXJhbEhlaWdodCkKKyAgICAgICAgbV9oZWlnaHRTY2FsZUZhY3RvciA9IChpbml0aWFsUmVjdC5i
b3R0b20gLSBpbml0aWFsUmVjdC50b3ApIC8gbmF0dXJhbEhlaWdodDsKKyNpZiAhQVNTRVJUX0RJ
U0FCTEVECisgICAgbV9zY2FsZUNhY2hlZCA9IHRydWU7OworI2VuZGlmCit9CisKK3ZvaWQgUVRN
b3ZpZVdpblByaXZhdGU6OnRhc2soKSAKK3sKKyAgICBBU1NFUlQobV90YXNraW5nKTsKKworICAg
IGlmICghbV9sb2FkRXJyb3IpIHsKKyAgICAgICAgaWYgKG1fbW92aWVDb250cm9sbGVyKQorICAg
ICAgICAgICAgTUNJZGxlKG1fbW92aWVDb250cm9sbGVyKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgTW92aWVzVGFzayhtX21vdmllLCAwKTsKKyAgICB9CisKKyAgICAvLyBHZXRNb3ZpZUxv
YWRTdGF0ZSBkb2N1bWVudGF0aW9uIHNheXMgdGhhdCB5b3Ugc2hvdWxkIG5vdCBjYWxsIGl0IG1v
cmUgb2Z0ZW4gdGhhbiBldmVyeSBxdWFydGVyIG9mIGEgc2Vjb25kLgorICAgIGlmIChzeXN0ZW1U
aW1lKCkgPj0gbV9sYXN0TG9hZFN0YXRlQ2hlY2tUaW1lICsgMC4yNSB8fCBtX2xvYWRFcnJvcikg
eyAKKyAgICAgICAgLy8gSWYgbG9hZCBmYWlscyBRVCdzIGxvYWQgc3RhdGUgaXMgUVRNb3ZpZUxv
YWRTdGF0ZUNvbXBsZXRlLgorICAgICAgICAvLyBUaGlzIGlzIGRpZmZlcmVudCBmcm9tIFFUS2l0
IEFQSSBhbmQgc2VlbXMgc3RyYW5nZS4KKyAgICAgICAgbG9uZyBsb2FkU3RhdGUgPSBtX2xvYWRF
cnJvciA/IFFUTW92aWVMb2FkU3RhdGVFcnJvciA6IEdldE1vdmllTG9hZFN0YXRlKG1fbW92aWUp
OworICAgICAgICBpZiAobG9hZFN0YXRlICE9IG1fbG9hZFN0YXRlKSB7CisKKyAgICAgICAgICAg
IC8vIHdlIG9ubHkgbmVlZCB0byBlcmFzZSB0aGUgbW92aWUgZ3dvcmxkIHdoZW4gdGhlIGxvYWQg
c3RhdGUgY2hhbmdlcyB0byBsb2FkZWQgd2hpbGUgaXQKKyAgICAgICAgICAgIC8vICBpcyB2aXNp
YmxlIGFzIHRoZSBnd29ybGQgaXMgZGVzdHJveWVkL2NyZWF0ZWQgd2hlbiB2aXNpYmlsaXR5IGNo
YW5nZXMKKyAgICAgICAgICAgIGJvb2wgc2hvdWxkUmVzdG9yZVBsYXliYWNrU3RhdGUgPSBmYWxz
ZTsKKyAgICAgICAgICAgIGJvb2wgbW92aWVOZXdseVBsYXlhYmxlID0gbG9hZFN0YXRlID49IFFU
TW92aWVMb2FkU3RhdGVMb2FkZWQgJiYgbV9sb2FkU3RhdGUgPCBRVE1vdmllTG9hZFN0YXRlTG9h
ZGVkOworICAgICAgICAgICAgbV9sb2FkU3RhdGUgPSBsb2FkU3RhdGU7CisgICAgICAgICAgICBp
ZiAobW92aWVOZXdseVBsYXlhYmxlKSB7CisgICAgICAgICAgICAgICAgY2FjaGVNb3ZpZVNjYWxl
KCk7CisgICAgICAgICAgICAgICAgdXBkYXRlTW92aWVTaXplKCk7CisgICAgICAgICAgICAgICAg
aWYgKG1fdmlzaWJsZSkKKyAgICAgICAgICAgICAgICAgICAgY2xlYXJHV29ybGQoKTsKKyAgICAg
ICAgICAgICAgICBzaG91bGRSZXN0b3JlUGxheWJhY2tTdGF0ZSA9IHRydWU7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmICghbV9tb3ZpZUNvbnRyb2xsZXIgJiYgbV9sb2FkU3RhdGUg
Pj0gUVRNb3ZpZUxvYWRTdGF0ZUxvYWRlZCkKKyAgICAgICAgICAgICAgICBjcmVhdGVNb3ZpZUNv
bnRyb2xsZXIoKTsKKyAgICAgICAgICAgIG1fY2xpZW50LT5tb3ZpZUxvYWRTdGF0ZUNoYW5nZWQo
bV9tb3ZpZVdpbik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChzaG91bGRSZXN0b3Jl
UGxheWJhY2tTdGF0ZSAmJiBtX3RpbWVUb1Jlc3RvcmUgIT0gLTEuMGYpIHsKKyAgICAgICAgICAg
ICAgICBtX21vdmllV2luLT5zZXRDdXJyZW50VGltZShtX3RpbWVUb1Jlc3RvcmUpOworICAgICAg
ICAgICAgICAgIG1fdGltZVRvUmVzdG9yZSA9IC0xLjBmOworICAgICAgICAgICAgICAgIG1fbW92
aWVXaW4tPnNldFJhdGUobV9yYXRlVG9SZXN0b3JlKTsKKyAgICAgICAgICAgICAgICBtX3JhdGVU
b1Jlc3RvcmUgPSAtMS4wZjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG1fbW92
aWVXaW4tPm1fZGlzYWJsZWQpIHsKKyAgICAgICAgICAgICAgICBlbmRUYXNrKCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIG1fbGFz
dExvYWRTdGF0ZUNoZWNrVGltZSA9IHN5c3RlbVRpbWUoKTsKKyAgICB9CisKKyAgICBib29sIGVu
ZGVkID0gISFJc01vdmllRG9uZShtX21vdmllKTsKKyAgICBpZiAoZW5kZWQgIT0gbV9lbmRlZCkg
eworICAgICAgICBtX2VuZGVkID0gZW5kZWQ7CisgICAgICAgIGlmIChtX2NsaWVudCAmJiBlbmRl
ZCkKKyAgICAgICAgICAgIG1fY2xpZW50LT5tb3ZpZUVuZGVkKG1fbW92aWVXaW4pOworICAgIH0K
KworICAgIGZsb2F0IHRpbWUgPSBtX21vdmllV2luLT5jdXJyZW50VGltZSgpOworICAgIGlmICh0
aW1lIDwgbV9sYXN0TWVkaWFUaW1lIHx8IHRpbWUgPj0gbV9sYXN0TWVkaWFUaW1lICsgY05vbkNv
bnRpbnVvdXNUaW1lQ2hhbmdlIHx8IG1fc2Vla2luZykgeworICAgICAgICBtX3NlZWtpbmcgPSBm
YWxzZTsKKyAgICAgICAgaWYgKG1fY2xpZW50KQorICAgICAgICAgICAgbV9jbGllbnQtPm1vdmll
VGltZUNoYW5nZWQobV9tb3ZpZVdpbik7CisgICAgfQorICAgIG1fbGFzdE1lZGlhVGltZSA9IHRp
bWU7CisKKyAgICBpZiAobV9sb2FkRXJyb3IpCisgICAgICAgIGVuZFRhc2soKTsKK30KKwordm9p
ZCBRVE1vdmllV2luUHJpdmF0ZTo6Y3JlYXRlTW92aWVDb250cm9sbGVyKCkKK3sKKyAgICBSZWN0
IGJvdW5kczsKKyAgICBsb25nIGZsYWdzOworCisgICAgaWYgKCFtX21vdmllKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAobV9tb3ZpZUNvbnRyb2xsZXIpCisgICAgICAgIERpc3Bvc2VNb3Zp
ZUNvbnRyb2xsZXIobV9tb3ZpZUNvbnRyb2xsZXIpOworCisgICAgR2V0TW92aWVCb3gobV9tb3Zp
ZSwgJmJvdW5kcyk7CisgICAgZmxhZ3MgPSBtY1RvcExlZnRNb3ZpZSB8IG1jTm90VmlzaWJsZTsK
KyAgICBtX21vdmllQ29udHJvbGxlciA9IE5ld01vdmllQ29udHJvbGxlcihtX21vdmllLCAmYm91
bmRzLCBmbGFncyk7CisgICAgaWYgKCFtX21vdmllQ29udHJvbGxlcikKKyAgICAgICAgcmV0dXJu
OworCisgICAgTUNTZXRDb250cm9sbGVyUG9ydChtX21vdmllQ29udHJvbGxlciwgbV9nV29ybGQp
OworICAgIE1DU2V0Q29udHJvbGxlckF0dGFjaGVkKG1fbW92aWVDb250cm9sbGVyLCBmYWxzZSk7
Cit9CisKK3ZvaWQgUVRNb3ZpZVdpblByaXZhdGU6OnJlZ2lzdGVyRHJhd2luZ0NhbGxiYWNrKCkK
K3sKKyAgICBVcHBQYXJhbSBwYXJhbTsKKyAgICBwYXJhbS5wdHIgPSB0aGlzOworICAgIFNldE1v
dmllRHJhd2luZ0NvbXBsZXRlUHJvYyhtX21vdmllLCBtb3ZpZURyYXdpbmdDYWxsV2hlbkNoYW5n
ZWQsIGdNb3ZpZURyYXdpbmdDb21wbGV0ZVVQUCwgcGFyYW0ubG9uZ1ZhbHVlKTsKK30KKwordm9p
ZCBRVE1vdmllV2luUHJpdmF0ZTo6ZHJhd2luZ0NvbXBsZXRlKCkKK3sKKyAgICBpZiAoIW1fZ1dv
cmxkIHx8IG1fbW92aWVXaW4tPm1fZGlzYWJsZWQgfHwgbV9sb2FkU3RhdGUgPCBRVE1vdmllTG9h
ZFN0YXRlTG9hZGVkKQorICAgICAgICByZXR1cm47CisgICAgbV9jbGllbnQtPm1vdmllTmV3SW1h
Z2VBdmFpbGFibGUobV9tb3ZpZVdpbik7Cit9CisKK3ZvaWQgUVRNb3ZpZVdpblByaXZhdGU6OnVw
ZGF0ZUdXb3JsZCgpCit7CisgICAgYm9vbCBzaG91bGRCZVZpc2libGUgPSBtX3Zpc2libGU7Cisg
ICAgaWYgKCFtX2hlaWdodCB8fCAhbV93aWR0aCkKKyAgICAgICAgc2hvdWxkQmVWaXNpYmxlID0g
ZmFsc2U7CisKKyAgICBpZiAoc2hvdWxkQmVWaXNpYmxlICYmICFtX2dXb3JsZCkKKyAgICAgICAg
Y3JlYXRlR1dvcmxkKCk7CisgICAgZWxzZSBpZiAoIXNob3VsZEJlVmlzaWJsZSAmJiBtX2dXb3Js
ZCkKKyAgICAgICAgZGVsZXRlR1dvcmxkKCk7CisgICAgZWxzZSBpZiAobV9nV29ybGQgJiYgKG1f
d2lkdGggPiBtX2dXb3JsZFdpZHRoIHx8IG1faGVpZ2h0ID4gbV9nV29ybGRIZWlnaHQpKSB7Cisg
ICAgICAgIC8vIG5lZWQgYSBiaWdnZXIsIGJldHRlciBnV29ybGQKKyAgICAgICAgZGVsZXRlR1dv
cmxkKCk7CisgICAgICAgIGNyZWF0ZUdXb3JsZCgpOworICAgIH0KK30KKwordm9pZCBRVE1vdmll
V2luUHJpdmF0ZTo6Y3JlYXRlR1dvcmxkKCkKK3sKKyAgICBBU1NFUlQoIW1fZ1dvcmxkKTsKKyAg
ICBpZiAoIW1fbW92aWUgfHwgbV9sb2FkU3RhdGUgPCBRVE1vdmllTG9hZFN0YXRlTG9hZGVkKQor
ICAgICAgICByZXR1cm47CisKKyAgICBtX2dXb3JsZFdpZHRoID0gbWF4KGNHV29ybGRNaW5XaWR0
aCwgbV93aWR0aCk7CisgICAgbV9nV29ybGRIZWlnaHQgPSBtYXgoY0dXb3JsZE1pbkhlaWdodCwg
bV9oZWlnaHQpOworICAgIFJlY3QgYm91bmRzOyAKKyAgICBib3VuZHMudG9wID0gMDsKKyAgICBi
b3VuZHMubGVmdCA9IDA7IAorICAgIGJvdW5kcy5yaWdodCA9IG1fZ1dvcmxkV2lkdGg7CisgICAg
Ym91bmRzLmJvdHRvbSA9IG1fZ1dvcmxkSGVpZ2h0OworICAgIE9TRXJyIGVyciA9IFFUTmV3R1dv
cmxkKCZtX2dXb3JsZCwgazMyQkdSQVBpeGVsRm9ybWF0LCAmYm91bmRzLCAwLCAwLCAwKTsgCisg
ICAgaWYgKGVycikgCisgICAgICAgIHJldHVybjsKKyAgICBHZXRNb3ZpZUdXb3JsZChtX21vdmll
LCAmbV9zYXZlZEdXb3JsZCwgMCk7CisgICAgaWYgKG1fbW92aWVDb250cm9sbGVyKQorICAgICAg
ICBNQ1NldENvbnRyb2xsZXJQb3J0KG1fbW92aWVDb250cm9sbGVyLCBtX2dXb3JsZCk7CisgICAg
U2V0TW92aWVHV29ybGQobV9tb3ZpZSwgbV9nV29ybGQsIDApOworICAgIGJvdW5kcy5yaWdodCA9
IG1fd2lkdGg7CisgICAgYm91bmRzLmJvdHRvbSA9IG1faGVpZ2h0OworICAgIGlmIChtX21vdmll
Q29udHJvbGxlcikKKyAgICAgICAgTUNTZXRDb250cm9sbGVyQm91bmRzUmVjdChtX21vdmllQ29u
dHJvbGxlciwgJmJvdW5kcyk7CisgICAgU2V0TW92aWVCb3gobV9tb3ZpZSwgJmJvdW5kcyk7Cit9
CisKK3ZvaWQgUVRNb3ZpZVdpblByaXZhdGU6OmNsZWFyR1dvcmxkKCkKK3sKKyAgICBpZiAoIW1f
bW92aWV8fCFtX2dXb3JsZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhZlB0ciBzYXZlUG9y
dDsKKyAgICBHZXRQb3J0KCZzYXZlUG9ydCk7IAorICAgIE1hY1NldFBvcnQoKEdyYWZQdHIpbV9n
V29ybGQpOworCisgICAgUmVjdCBib3VuZHM7IAorICAgIGJvdW5kcy50b3AgPSAwOworICAgIGJv
dW5kcy5sZWZ0ID0gMDsgCisgICAgYm91bmRzLnJpZ2h0ID0gbV9nV29ybGRXaWR0aDsKKyAgICBi
b3VuZHMuYm90dG9tID0gbV9nV29ybGRIZWlnaHQ7CisgICAgRXJhc2VSZWN0KCZib3VuZHMpOwor
CisgICAgTWFjU2V0UG9ydChzYXZlUG9ydCk7Cit9CisKK3ZvaWQgUVRNb3ZpZVdpblByaXZhdGU6
OnNldFNpemUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworICAgIGlmIChtX3dpZHRoID09IHdp
ZHRoICYmIG1faGVpZ2h0ID09IGhlaWdodCkKKyAgICAgICAgcmV0dXJuOworICAgIG1fd2lkdGgg
PSB3aWR0aDsKKyAgICBtX2hlaWdodCA9IGhlaWdodDsKKworICAgIC8vIERvIG5vdCBjaGFuZ2Ug
bW92aWUgYm94IGJlZm9yZSByZWFjaGluZyBsb2FkIHN0YXRlIGxvYWRlZCBhcyB3ZSBncmFiCisg
ICAgLy8gdGhlIGluaXRpYWwgc2l6ZSB3aGVuIHRhc2soKSBzZWVzIHRoYXQgc3RhdGUgZm9yIHRo
ZSBmaXJzdCB0aW1lLCBhbmQKKyAgICAvLyB3ZSBuZWVkIHRoZSBpbml0aWFsIHNpemUgdG8gYmUg
YWJsZSB0byBzY2FsZSBtb3ZpZSBwcm9wZXJseS4gCisgICAgaWYgKCFtX21vdmllIHx8IG1fbG9h
ZFN0YXRlIDwgUVRNb3ZpZUxvYWRTdGF0ZUxvYWRlZCkKKyAgICAgICAgcmV0dXJuOworCisjaWYg
IUFTU0VSVF9ESVNBQkxFRAorICAgIEFTU0VSVChtX3NjYWxlQ2FjaGVkKTsKKyNlbmRpZgorCisg
ICAgdXBkYXRlTW92aWVTaXplKCk7Cit9CisKK3ZvaWQgUVRNb3ZpZVdpblByaXZhdGU6OnVwZGF0
ZU1vdmllU2l6ZSgpCit7CisgICAgaWYgKCFtX21vdmllIHx8IG1fbG9hZFN0YXRlIDwgUVRNb3Zp
ZUxvYWRTdGF0ZUxvYWRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVjdCBib3VuZHM7IAor
ICAgIGJvdW5kcy50b3AgPSAwOworICAgIGJvdW5kcy5sZWZ0ID0gMDsgCisgICAgYm91bmRzLnJp
Z2h0ID0gbV93aWR0aDsKKyAgICBib3VuZHMuYm90dG9tID0gbV9oZWlnaHQ7CisgICAgaWYgKG1f
bW92aWVDb250cm9sbGVyKQorICAgICAgICBNQ1NldENvbnRyb2xsZXJCb3VuZHNSZWN0KG1fbW92
aWVDb250cm9sbGVyLCAmYm91bmRzKTsKKyAgICBTZXRNb3ZpZUJveChtX21vdmllLCAmYm91bmRz
KTsKKyAgICB1cGRhdGVHV29ybGQoKTsKK30KKworCit2b2lkIFFUTW92aWVXaW5Qcml2YXRlOjpk
ZWxldGVHV29ybGQoKQoreworICAgIEFTU0VSVChtX2dXb3JsZCk7CisgICAgaWYgKG1fbW92aWVD
b250cm9sbGVyKQorICAgICAgICBNQ1NldENvbnRyb2xsZXJQb3J0KG1fbW92aWVDb250cm9sbGVy
LCBtX3NhdmVkR1dvcmxkKTsKKyAgICBpZiAobV9tb3ZpZSkKKyAgICAgICAgU2V0TW92aWVHV29y
bGQobV9tb3ZpZSwgbV9zYXZlZEdXb3JsZCwgMCk7CisgICAgbV9zYXZlZEdXb3JsZCA9IDA7Cisg
ICAgRGlzcG9zZUdXb3JsZChtX2dXb3JsZCk7IAorICAgIG1fZ1dvcmxkID0gMDsKKyAgICBtX2dX
b3JsZFdpZHRoID0gMDsKKyAgICBtX2dXb3JsZEhlaWdodCA9IDA7Cit9CisKKworUVRNb3ZpZVdp
bjo6UVRNb3ZpZVdpbihRVE1vdmllV2luQ2xpZW50KiBjbGllbnQpCisgICAgOiBtX3ByaXZhdGUo
bmV3IFFUTW92aWVXaW5Qcml2YXRlKCkpCisgICAgLCBtX2Rpc2FibGVkKGZhbHNlKQoreworICAg
IG1fcHJpdmF0ZS0+bV9tb3ZpZVdpbiA9IHRoaXM7CisgICAgbV9wcml2YXRlLT5tX2NsaWVudCA9
IGNsaWVudDsKKyAgICBpbml0aWFsaXplUXVpY2tUaW1lKCk7Cit9CisKK1FUTW92aWVXaW46On5R
VE1vdmllV2luKCkKK3sKKyAgICBkZWxldGUgbV9wcml2YXRlOworfQorCit2b2lkIFFUTW92aWVX
aW46OnBsYXkoKQoreworICAgIG1fcHJpdmF0ZS0+bV90aW1lVG9SZXN0b3JlID0gLTEuMGY7CisK
KyAgICBpZiAobV9wcml2YXRlLT5tX21vdmllQ29udHJvbGxlcikKKyAgICAgICAgTUNEb0FjdGlv
bihtX3ByaXZhdGUtPm1fbW92aWVDb250cm9sbGVyLCBtY0FjdGlvblByZXJvbGxBbmRQbGF5LCAo
dm9pZCAqKUdldE1vdmllUHJlZmVycmVkUmF0ZShtX3ByaXZhdGUtPm1fbW92aWUpKTsKKyAgICBl
bHNlCisgICAgICAgIFN0YXJ0TW92aWUobV9wcml2YXRlLT5tX21vdmllKTsKKyAgICBtX3ByaXZh
dGUtPnN0YXJ0VGFzaygpOworfQorCit2b2lkIFFUTW92aWVXaW46OnBhdXNlKCkKK3sKKyAgICBt
X3ByaXZhdGUtPm1fdGltZVRvUmVzdG9yZSA9IC0xLjBmOworCisgICAgaWYgKG1fcHJpdmF0ZS0+
bV9tb3ZpZUNvbnRyb2xsZXIpCisgICAgICAgIE1DRG9BY3Rpb24obV9wcml2YXRlLT5tX21vdmll
Q29udHJvbGxlciwgbWNBY3Rpb25QbGF5LCAwKTsKKyAgICBlbHNlCisgICAgICAgIFN0b3BNb3Zp
ZShtX3ByaXZhdGUtPm1fbW92aWUpOworICAgIHVwZGF0ZVRhc2tUaW1lcigpOworfQorCitmbG9h
dCBRVE1vdmllV2luOjpyYXRlKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcHJpdmF0ZS0+bV9tb3Zp
ZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIEZpeGVkVG9GbG9hdChHZXRNb3ZpZVJh
dGUobV9wcml2YXRlLT5tX21vdmllKSk7Cit9CisKK3ZvaWQgUVRNb3ZpZVdpbjo6c2V0UmF0ZShm
bG9hdCByYXRlKQoreworICAgIGlmICghbV9wcml2YXRlLT5tX21vdmllKQorICAgICAgICByZXR1
cm47ICAgIAorICAgIG1fcHJpdmF0ZS0+bV90aW1lVG9SZXN0b3JlID0gLTEuMGY7CisgICAgCisg
ICAgaWYgKG1fcHJpdmF0ZS0+bV9tb3ZpZUNvbnRyb2xsZXIpCisgICAgICAgIE1DRG9BY3Rpb24o
bV9wcml2YXRlLT5tX21vdmllQ29udHJvbGxlciwgbWNBY3Rpb25QcmVyb2xsQW5kUGxheSwgKHZv
aWQgKilGbG9hdFRvRml4ZWQocmF0ZSkpOworICAgIGVsc2UKKyAgICAgICAgU2V0TW92aWVSYXRl
KG1fcHJpdmF0ZS0+bV9tb3ZpZSwgRmxvYXRUb0ZpeGVkKHJhdGUpKTsKKyAgICB1cGRhdGVUYXNr
VGltZXIoKTsKK30KKworZmxvYXQgUVRNb3ZpZVdpbjo6ZHVyYXRpb24oKSBjb25zdAoreworICAg
IGlmICghbV9wcml2YXRlLT5tX21vdmllKQorICAgICAgICByZXR1cm4gMDsKKyAgICBUaW1lVmFs
dWUgdmFsID0gR2V0TW92aWVEdXJhdGlvbihtX3ByaXZhdGUtPm1fbW92aWUpOworICAgIFRpbWVT
Y2FsZSBzY2FsZSA9IEdldE1vdmllVGltZVNjYWxlKG1fcHJpdmF0ZS0+bV9tb3ZpZSk7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih2YWwpIC8gc2NhbGU7Cit9CisKK2Zsb2F0IFFUTW92
aWVXaW46OmN1cnJlbnRUaW1lKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcHJpdmF0ZS0+bV9tb3Zp
ZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgVGltZVZhbHVlIHZhbCA9IEdldE1vdmllVGltZSht
X3ByaXZhdGUtPm1fbW92aWUsIDApOworICAgIFRpbWVTY2FsZSBzY2FsZSA9IEdldE1vdmllVGlt
ZVNjYWxlKG1fcHJpdmF0ZS0+bV9tb3ZpZSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0
Pih2YWwpIC8gc2NhbGU7Cit9CisKK3ZvaWQgUVRNb3ZpZVdpbjo6c2V0Q3VycmVudFRpbWUoZmxv
YXQgdGltZSkgY29uc3QKK3sKKyAgICBpZiAoIW1fcHJpdmF0ZS0+bV9tb3ZpZSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV9wcml2YXRlLT5tX3RpbWVUb1Jlc3RvcmUgPSAtMS4wZjsKKyAgICAK
KyAgICBtX3ByaXZhdGUtPm1fc2Vla2luZyA9IHRydWU7CisgICAgVGltZVNjYWxlIHNjYWxlID0g
R2V0TW92aWVUaW1lU2NhbGUobV9wcml2YXRlLT5tX21vdmllKTsKKyAgICBpZiAobV9wcml2YXRl
LT5tX21vdmllQ29udHJvbGxlcil7CisgICAgICAgIFFUUmVzdGFydEF0VGltZVJlY29yZCByZXN0
YXJ0ID0geyB0aW1lICogc2NhbGUgLCAwIH07CisgICAgICAgIE1DRG9BY3Rpb24obV9wcml2YXRl
LT5tX21vdmllQ29udHJvbGxlciwgbWNBY3Rpb25SZXN0YXJ0QXRUaW1lLCAodm9pZCAqKSZyZXN0
YXJ0KTsKKyAgICB9IGVsc2UKKyAgICAgICAgU2V0TW92aWVUaW1lVmFsdWUobV9wcml2YXRlLT5t
X21vdmllLCBUaW1lVmFsdWUodGltZSAqIHNjYWxlKSk7CisgICAgdXBkYXRlVGFza1RpbWVyKCk7
Cit9CisKK3ZvaWQgUVRNb3ZpZVdpbjo6c2V0Vm9sdW1lKGZsb2F0IHZvbHVtZSkKK3sKKyAgICBp
ZiAoIW1fcHJpdmF0ZS0+bV9tb3ZpZSkKKyAgICAgICAgcmV0dXJuOworICAgIFNldE1vdmllVm9s
dW1lKG1fcHJpdmF0ZS0+bV9tb3ZpZSwgc3RhdGljX2Nhc3Q8c2hvcnQ+KHZvbHVtZSAqIDI1Nikp
OworfQorCit2b2lkIFFUTW92aWVXaW46OnNldFByZXNlcnZlc1BpdGNoKGJvb2wgcHJlc2VydmVz
UGl0Y2gpCit7CisgICAgaWYgKCFtX3ByaXZhdGUtPm1fbW92aWUgfHwgIW1fcHJpdmF0ZS0+bV9j
dXJyZW50VVJMKQorICAgICAgICByZXR1cm47CisKKyAgICBPU0VyciBlcnJvcjsKKyAgICBib29s
IHByb3AgPSBmYWxzZTsKKworICAgIGVycm9yID0gUVRHZXRNb3ZpZVByb3BlcnR5KG1fcHJpdmF0
ZS0+bV9tb3ZpZSwga1FUUHJvcGVydHlDbGFzc19BdWRpbywga1FUQXVkaW9Qcm9wZXJ0eUlEX1Jh
dGVDaGFuZ2VzUHJlc2VydmVQaXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
aXplb2Yoa1FUQXVkaW9Qcm9wZXJ0eUlEX1JhdGVDaGFuZ2VzUHJlc2VydmVQaXRjaCksIHN0YXRp
Y19jYXN0PFFUUHJvcGVydHlWYWx1ZVB0cj4oJnByb3ApLCAwKTsKKworICAgIGlmIChlcnJvciB8
fCBwcm9wID09IHByZXNlcnZlc1BpdGNoKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3ByaXZh
dGUtPm1fdGltZVRvUmVzdG9yZSA9IGN1cnJlbnRUaW1lKCk7CisgICAgbV9wcml2YXRlLT5tX3Jh
dGVUb1Jlc3RvcmUgPSByYXRlKCk7CisgICAgbG9hZChtX3ByaXZhdGUtPm1fY3VycmVudFVSTCwg
cHJlc2VydmVzUGl0Y2gpOworfQorCit1bnNpZ25lZCBRVE1vdmllV2luOjpkYXRhU2l6ZSgpIGNv
bnN0Cit7CisgICAgaWYgKCFtX3ByaXZhdGUtPm1fbW92aWUpCisgICAgICAgIHJldHVybiAwOwor
ICAgIHJldHVybiBHZXRNb3ZpZURhdGFTaXplKG1fcHJpdmF0ZS0+bV9tb3ZpZSwgMCwgR2V0TW92
aWVEdXJhdGlvbihtX3ByaXZhdGUtPm1fbW92aWUpKTsKK30KKworZmxvYXQgUVRNb3ZpZVdpbjo6
bWF4VGltZUxvYWRlZCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3ByaXZhdGUtPm1fbW92aWUpCisg
ICAgICAgIHJldHVybiAwOworICAgIFRpbWVWYWx1ZSB2YWw7CisgICAgR2V0TWF4TG9hZGVkVGlt
ZUluTW92aWUobV9wcml2YXRlLT5tX21vdmllLCAmdmFsKTsKKyAgICBUaW1lU2NhbGUgc2NhbGUg
PSBHZXRNb3ZpZVRpbWVTY2FsZShtX3ByaXZhdGUtPm1fbW92aWUpOworICAgIHJldHVybiBzdGF0
aWNfY2FzdDxmbG9hdD4odmFsKSAvIHNjYWxlOworfQorCitsb25nIFFUTW92aWVXaW46OmxvYWRT
dGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bV9sb2FkU3RhdGU7Cit9CisK
K3ZvaWQgUVRNb3ZpZVdpbjo6Z2V0TmF0dXJhbFNpemUoaW50JiB3aWR0aCwgaW50JiBoZWlnaHQp
Cit7CisgICAgUmVjdCByZWN0ID0geyAwLCB9OworCisgICAgaWYgKG1fcHJpdmF0ZS0+bV9tb3Zp
ZSkKKyAgICAgICAgR2V0TW92aWVOYXR1cmFsQm91bmRzUmVjdChtX3ByaXZhdGUtPm1fbW92aWUs
ICZyZWN0KTsKKyAgICB3aWR0aCA9IChyZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0KSAqIG1fcHJpdmF0
ZS0+bV93aWR0aFNjYWxlRmFjdG9yOworICAgIGhlaWdodCA9IChyZWN0LmJvdHRvbSAtIHJlY3Qu
dG9wKSAqIG1fcHJpdmF0ZS0+bV9oZWlnaHRTY2FsZUZhY3RvcjsKK30KKwordm9pZCBRVE1vdmll
V2luOjpzZXRTaXplKGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKyAgICBtX3ByaXZhdGUtPnNl
dFNpemUod2lkdGgsIGhlaWdodCk7CisgICAgdXBkYXRlVGFza1RpbWVyKDApOworfQorCit2b2lk
IFFUTW92aWVXaW46OnNldFZpc2libGUoYm9vbCBiKQoreworICAgIG1fcHJpdmF0ZS0+bV92aXNp
YmxlID0gYjsKKyAgICBtX3ByaXZhdGUtPnVwZGF0ZUdXb3JsZCgpOworfQorCit2b2lkIFFUTW92
aWVXaW46OmdldEN1cnJlbnRGcmFtZUluZm8odm9pZComIGJ1ZmZlciwgdW5zaWduZWQmIGJpdHNQ
ZXJQaXhlbCwgdW5zaWduZWQmIHJvd0J5dGVzLCB1bnNpZ25lZCYgd2lkdGgsIHVuc2lnbmVkJiBo
ZWlnaHQpCit7CisgICAgaWYgKCFtX3ByaXZhdGUtPm1fZ1dvcmxkKSB7CisgICAgICAgIGJ1ZmZl
ciA9IDA7CisgICAgICAgIGJpdHNQZXJQaXhlbCA9IDA7CisgICAgICAgIHJvd0J5dGVzID0gMDsK
KyAgICAgICAgd2lkdGggPSAwOworICAgICAgICBoZWlnaHQgPSAwOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIFBpeE1hcEhhbmRsZSBvZmZzY3JlZW5QaXhNYXAgPSBHZXRHV29ybGRQaXhN
YXAobV9wcml2YXRlLT5tX2dXb3JsZCk7CisgICAgYnVmZmVyID0gKCpvZmZzY3JlZW5QaXhNYXAp
LT5iYXNlQWRkcjsKKyAgICBiaXRzUGVyUGl4ZWwgPSAoKm9mZnNjcmVlblBpeE1hcCktPnBpeGVs
U2l6ZTsKKyAgICByb3dCeXRlcyA9ICgqb2Zmc2NyZWVuUGl4TWFwKS0+cm93Qnl0ZXMgJiAweDNG
RkY7CisgICAgd2lkdGggPSBtX3ByaXZhdGUtPm1fd2lkdGg7CisgICAgaGVpZ2h0ID0gbV9wcml2
YXRlLT5tX2hlaWdodDsKK30KKwordm9pZCBRVE1vdmllV2luOjpwYWludChIREMgaGRjLCBpbnQg
eCwgaW50IHkpCit7CisgICAgaWYgKCFtX3ByaXZhdGUtPm1fZ1dvcmxkKQorICAgICAgICByZXR1
cm47CisKKyAgICBIREMgaGRjU3JjID0gc3RhdGljX2Nhc3Q8SERDPihHZXRQb3J0SERDKHJlaW50
ZXJwcmV0X2Nhc3Q8R3JhZlB0cj4obV9wcml2YXRlLT5tX2dXb3JsZCkpKTsgCisgICAgaWYgKCFo
ZGNTcmMpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEZJWE1FOiBJZiB3ZSBjb3VsZCBkZXRl
cm1pbmUgdGhlIG1vdmllIGhhcyBubyBhbHBoYSwgd2UgY291bGQgdXNlIEJpdEJsdCBmb3IgdGhv
c2UgY2FzZXMsIHdoaWNoIG1pZ2h0IGJlIGZhc3Rlci4KKyAgICBCTEVOREZVTkNUSU9OIGJsZW5k
RnVuY3Rpb247IAorICAgIGJsZW5kRnVuY3Rpb24uQmxlbmRPcCA9IEFDX1NSQ19PVkVSOworICAg
IGJsZW5kRnVuY3Rpb24uQmxlbmRGbGFncyA9IDA7CisgICAgYmxlbmRGdW5jdGlvbi5Tb3VyY2VD
b25zdGFudEFscGhhID0gMjU1OworICAgIGJsZW5kRnVuY3Rpb24uQWxwaGFGb3JtYXQgPSBBQ19T
UkNfQUxQSEE7CisgICAgQWxwaGFCbGVuZChoZGMsIHgsIHksIG1fcHJpdmF0ZS0+bV93aWR0aCwg
bV9wcml2YXRlLT5tX2hlaWdodCwgaGRjU3JjLCAKKyAgICAgICAgIDAsIDAsIG1fcHJpdmF0ZS0+
bV93aWR0aCwgbV9wcml2YXRlLT5tX2hlaWdodCwgYmxlbmRGdW5jdGlvbik7Cit9CisKK3ZvaWQg
UVRNb3ZpZVdpbjo6bG9hZChjb25zdCBVQ2hhciogdXJsLCBpbnQgbGVuLCBib29sIHByZXNlcnZl
c1BpdGNoKQoreworICAgIENGU3RyaW5nUmVmIHVybFN0cmluZ1JlZiA9IENGU3RyaW5nQ3JlYXRl
V2l0aENoYXJhY3RlcnMoa0NGQWxsb2NhdG9yRGVmYXVsdCwgcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBVbmlDaGFyKj4odXJsKSwgbGVuKTsKKyAgICBDRlVSTFJlZiBjZlVSTCA9IENGVVJMQ3JlYXRl
V2l0aFN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCB1cmxTdHJpbmdSZWYsIDApOworCisgICAg
bG9hZChjZlVSTCwgcHJlc2VydmVzUGl0Y2gpOworCisgICAgQ0ZSZWxlYXNlKGNmVVJMKTsKKyAg
ICBDRlJlbGVhc2UodXJsU3RyaW5nUmVmKTsKK30KKwordm9pZCBRVE1vdmllV2luOjpsb2FkKENG
VVJMUmVmIHVybCwgYm9vbCBwcmVzZXJ2ZXNQaXRjaCkKK3sKKyAgICBpZiAoIXVybCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKG1fcHJpdmF0ZS0+bV9tb3ZpZSkgeworICAgICAgICBtX3By
aXZhdGUtPmVuZFRhc2soKTsKKyAgICAgICAgaWYgKG1fcHJpdmF0ZS0+bV9nV29ybGQpCisgICAg
ICAgICAgICBtX3ByaXZhdGUtPmRlbGV0ZUdXb3JsZCgpOworICAgICAgICBpZiAobV9wcml2YXRl
LT5tX21vdmllQ29udHJvbGxlcikKKyAgICAgICAgICAgIERpc3Bvc2VNb3ZpZUNvbnRyb2xsZXIo
bV9wcml2YXRlLT5tX21vdmllQ29udHJvbGxlcik7CisgICAgICAgIG1fcHJpdmF0ZS0+bV9tb3Zp
ZUNvbnRyb2xsZXIgPSAwOworICAgICAgICBEaXNwb3NlTW92aWUobV9wcml2YXRlLT5tX21vdmll
KTsKKyAgICAgICAgbV9wcml2YXRlLT5tX21vdmllID0gMDsKKyAgICAgICAgbV9wcml2YXRlLT5t
X2xvYWRTdGF0ZSA9IDA7CisgICAgfSAgCisKKyAgICAvLyBEZWZpbmUgYSBwcm9wZXJ0eSBhcnJh
eSBmb3IgTmV3TW92aWVGcm9tUHJvcGVydGllcy4gOCBzaG91bGQgYmUgZW5vdWdoIGZvciBvdXIg
bmVlZHMuIAorICAgIFFUTmV3TW92aWVQcm9wZXJ0eUVsZW1lbnQgbW92aWVQcm9wc1s4XTsgCisg
ICAgSXRlbUNvdW50IG1vdmllUHJvcENvdW50ID0gMDsgCisKKyAgICBib29sIGJvb2xUcnVlID0g
dHJ1ZTsKKyAgICAKKyAgICAvLyBEaXNhYmxlIHN0cmVhbWluZyBzdXBwb3J0IGZvciBub3cuIAor
ICAgIENGU3RyaW5nUmVmIHNjaGVtZSA9IENGVVJMQ29weVNjaGVtZSh1cmwpOworICAgIGJvb2wg
aXNSVFNQID0gQ0ZTdHJpbmdIYXNQcmVmaXgoc2NoZW1lLCBDRlNUUigicnRzcDoiKSk7CisgICAg
Q0ZSZWxlYXNlKHNjaGVtZSk7CisKKyAgICBpZiAoaXNSVFNQKSB7CisgICAgICAgIG1fcHJpdmF0
ZS0+bV9sb2FkRXJyb3IgPSBub01vdmllRm91bmQ7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0K
KworICAgIGlmIChtX3ByaXZhdGUtPm1fY3VycmVudFVSTCkgeworICAgICAgICBpZiAobV9wcml2
YXRlLT5tX2N1cnJlbnRVUkwgIT0gdXJsKSB7CisgICAgICAgICAgICBDRlJlbGVhc2UobV9wcml2
YXRlLT5tX2N1cnJlbnRVUkwpOworICAgICAgICAgICAgbV9wcml2YXRlLT5tX2N1cnJlbnRVUkwg
PSB1cmw7CisgICAgICAgICAgICBDRlJldGFpbih1cmwpOworICAgICAgICB9CisgICAgfSBlbHNl
IHsKKyAgICAgICAgbV9wcml2YXRlLT5tX2N1cnJlbnRVUkwgPSB1cmw7CisgICAgICAgIENGUmV0
YWluKHVybCk7CisgICAgfQorCisgICAgLy8gQWRkIHRoZSBtb3ZpZSBkYXRhIGxvY2F0aW9uIHRv
IHRoZSBwcm9wZXJ0eSBhcnJheSAKKyAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9w
Q2xhc3MgPSBrUVRQcm9wZXJ0eUNsYXNzX0RhdGFMb2NhdGlvbjsgCisgICAgbW92aWVQcm9wc1tt
b3ZpZVByb3BDb3VudF0ucHJvcElEID0ga1FURGF0YUxvY2F0aW9uUHJvcGVydHlJRF9DRlVSTDsg
CisgICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcFZhbHVlU2l6ZSA9IHNpemVvZiht
X3ByaXZhdGUtPm1fY3VycmVudFVSTCk7IAorICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRd
LnByb3BWYWx1ZUFkZHJlc3MgPSAmKG1fcHJpdmF0ZS0+bV9jdXJyZW50VVJMKTsgCisgICAgbW92
aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcFN0YXR1cyA9IDA7IAorICAgIG1vdmllUHJvcENv
dW50Kys7IAorCisgICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcENsYXNzID0ga1FU
UHJvcGVydHlDbGFzc19Nb3ZpZUluc3RhbnRpYXRpb247IAorICAgIG1vdmllUHJvcHNbbW92aWVQ
cm9wQ291bnRdLnByb3BJRCA9IGtRVE1vdmllSW5zdGFudGlhdGlvblByb3BlcnR5SURfRG9udEFz
a1VucmVzb2x2ZWREYXRhUmVmczsgCisgICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJv
cFZhbHVlU2l6ZSA9IHNpemVvZihib29sVHJ1ZSk7IAorICAgIG1vdmllUHJvcHNbbW92aWVQcm9w
Q291bnRdLnByb3BWYWx1ZUFkZHJlc3MgPSAmYm9vbFRydWU7IAorICAgIG1vdmllUHJvcHNbbW92
aWVQcm9wQ291bnRdLnByb3BTdGF0dXMgPSAwOyAKKyAgICBtb3ZpZVByb3BDb3VudCsrOyAKKwor
ICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BDbGFzcyA9IGtRVFByb3BlcnR5Q2xh
c3NfTW92aWVJbnN0YW50aWF0aW9uOyAKKyAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5w
cm9wSUQgPSBrUVRNb3ZpZUluc3RhbnRpYXRpb25Qcm9wZXJ0eUlEX0FzeW5jT0s7IAorICAgIG1v
dmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BWYWx1ZVNpemUgPSBzaXplb2YoYm9vbFRydWUp
OyAKKyAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wVmFsdWVBZGRyZXNzID0gJmJv
b2xUcnVlOyAKKyAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wU3RhdHVzID0gMDsg
CisgICAgbW92aWVQcm9wQ291bnQrKzsgCisKKyAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50
XS5wcm9wQ2xhc3MgPSBrUVRQcm9wZXJ0eUNsYXNzX05ld01vdmllUHJvcGVydHk7IAorICAgIG1v
dmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BJRCA9IGtRVE5ld01vdmllUHJvcGVydHlJRF9B
Y3RpdmU7IAorICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BWYWx1ZVNpemUgPSBz
aXplb2YoYm9vbFRydWUpOyAKKyAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wVmFs
dWVBZGRyZXNzID0gJmJvb2xUcnVlOyAKKyAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5w
cm9wU3RhdHVzID0gMDsgCisgICAgbW92aWVQcm9wQ291bnQrKzsgCisKKyAgICBtb3ZpZVByb3Bz
W21vdmllUHJvcENvdW50XS5wcm9wQ2xhc3MgPSBrUVRQcm9wZXJ0eUNsYXNzX05ld01vdmllUHJv
cGVydHk7IAorICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BJRCA9IGtRVE5ld01v
dmllUHJvcGVydHlJRF9Eb250SW50ZXJhY3RXaXRoVXNlcjsgCisgICAgbW92aWVQcm9wc1ttb3Zp
ZVByb3BDb3VudF0ucHJvcFZhbHVlU2l6ZSA9IHNpemVvZihib29sVHJ1ZSk7IAorICAgIG1vdmll
UHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BWYWx1ZUFkZHJlc3MgPSAmYm9vbFRydWU7IAorICAg
IG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BTdGF0dXMgPSAwOyAKKyAgICBtb3ZpZVBy
b3BDb3VudCsrOyAKKworICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BDbGFzcyA9
IGtRVFByb3BlcnR5Q2xhc3NfTW92aWVJbnN0YW50aWF0aW9uOworICAgIG1vdmllUHJvcHNbbW92
aWVQcm9wQ291bnRdLnByb3BJRCA9ICchdXJsJzsKKyAgICBtb3ZpZVByb3BzW21vdmllUHJvcENv
dW50XS5wcm9wVmFsdWVTaXplID0gc2l6ZW9mKGJvb2xUcnVlKTsgCisgICAgbW92aWVQcm9wc1tt
b3ZpZVByb3BDb3VudF0ucHJvcFZhbHVlQWRkcmVzcyA9ICZib29sVHJ1ZTsgCisgICAgbW92aWVQ
cm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcFN0YXR1cyA9IDA7IAorICAgIG1vdmllUHJvcENvdW50
Kys7IAorCisgICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcENsYXNzID0ga1FUUHJv
cGVydHlDbGFzc19Nb3ZpZUluc3RhbnRpYXRpb247IAorICAgIG1vdmllUHJvcHNbbW92aWVQcm9w
Q291bnRdLnByb3BJRCA9ICdzaXRlJzsKKyAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5w
cm9wVmFsdWVTaXplID0gc2l6ZW9mKGJvb2xUcnVlKTsgCisgICAgbW92aWVQcm9wc1ttb3ZpZVBy
b3BDb3VudF0ucHJvcFZhbHVlQWRkcmVzcyA9ICZib29sVHJ1ZTsgCisgICAgbW92aWVQcm9wc1tt
b3ZpZVByb3BDb3VudF0ucHJvcFN0YXR1cyA9IDA7IAorICAgIG1vdmllUHJvcENvdW50Kys7CisK
KyAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wQ2xhc3MgPSBrUVRQcm9wZXJ0eUNs
YXNzX0F1ZGlvOyAKKyAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wSUQgPSBrUVRB
dWRpb1Byb3BlcnR5SURfUmF0ZUNoYW5nZXNQcmVzZXJ2ZVBpdGNoOworICAgIG1vdmllUHJvcHNb
bW92aWVQcm9wQ291bnRdLnByb3BWYWx1ZVNpemUgPSBzaXplb2YocHJlc2VydmVzUGl0Y2gpOyAK
KyAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wVmFsdWVBZGRyZXNzID0gJnByZXNl
cnZlc1BpdGNoOyAKKyAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wU3RhdHVzID0g
MDsgCisgICAgbW92aWVQcm9wQ291bnQrKzsgCisKKyAgICBBU1NFUlQobW92aWVQcm9wQ291bnQg
PD0gc2l6ZW9mKG1vdmllUHJvcHMpL3NpemVvZihtb3ZpZVByb3BzWzBdKSk7CisgICAgbV9wcml2
YXRlLT5tX2xvYWRFcnJvciA9IE5ld01vdmllRnJvbVByb3BlcnRpZXMobW92aWVQcm9wQ291bnQs
IG1vdmllUHJvcHMsIDAsIDAsICZtX3ByaXZhdGUtPm1fbW92aWUpOworCitlbmQ6CisgICAgbV9w
cml2YXRlLT5zdGFydFRhc2soKTsKKyAgICAvLyBnZXQgdGhlIGxvYWQgZmFpbCBjYWxsYmFjayBx
dWlja2x5IAorICAgIGlmIChtX3ByaXZhdGUtPm1fbG9hZEVycm9yKQorICAgICAgICB1cGRhdGVU
YXNrVGltZXIoMCk7CisgICAgZWxzZSB7CisgICAgICAgIE9TVHlwZSBtb2RlID0ga1FUQXBlcnR1
cmVNb2RlX0NsZWFuQXBlcnR1cmU7CisKKyAgICAgICAgLy8gU2V0IHRoZSBhcGVydHVyZSBtb2Rl
IHByb3BlcnR5IG9uIGEgbW92aWUgdG8gc2lnbmFsIHRoYXQgd2Ugd2FudCBhc3BlY3QgcmF0aW8K
KyAgICAgICAgLy8gYW5kIGNsZWFuIGFwZXJ0dXJlIGRpbWVuc2lvbnMuIERvbid0IHdvcnJ5IGFi
b3V0IGVycm9ycywgd2UgY2FuJ3QgZG8gYW55dGhpbmcgaWYKKyAgICAgICAgLy8gdGhlIGluc3Rh
bGxlZCB2ZXJzaW9uIG9mIFFUIGRvZXNuJ3Qgc3VwcG9ydCBpdCBhbmQgaXQgaXNuJ3Qgc2VyaW91
cyBlbm91Z2ggdG8gCisgICAgICAgIC8vIHdhcnJhbnQgZmFpbGluZy4KKyAgICAgICAgUVRTZXRN
b3ZpZVByb3BlcnR5KG1fcHJpdmF0ZS0+bV9tb3ZpZSwga1FUUHJvcGVydHlDbGFzc19WaXN1YWws
IGtRVFZpc3VhbFByb3BlcnR5SURfQXBlcnR1cmVNb2RlLCBzaXplb2YobW9kZSksICZtb2RlKTsK
KyAgICAgICAgbV9wcml2YXRlLT5yZWdpc3RlckRyYXdpbmdDYWxsYmFjaygpOworICAgIH0KK30K
Kwordm9pZCBRVE1vdmllV2luOjpkaXNhYmxlVW5zdXBwb3J0ZWRUcmFja3ModW5zaWduZWQmIGVu
YWJsZWRUcmFja0NvdW50LCB1bnNpZ25lZCYgdG90YWxUcmFja0NvdW50KQoreworICAgIGlmICgh
bV9wcml2YXRlLT5tX21vdmllKSB7CisgICAgICAgIHRvdGFsVHJhY2tDb3VudCA9IDA7CisgICAg
ICAgIGVuYWJsZWRUcmFja0NvdW50ID0gMDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IHN0YXRpYyBIYXNoU2V0PE9TVHlwZT4qIGFsbG93ZWRUcmFja1R5cGVzID0gMDsKKyAgICBpZiAo
IWFsbG93ZWRUcmFja1R5cGVzKSB7CisgICAgICAgIGFsbG93ZWRUcmFja1R5cGVzID0gbmV3IEhh
c2hTZXQ8T1NUeXBlPjsKKyAgICAgICAgYWxsb3dlZFRyYWNrVHlwZXMtPmFkZChWaWRlb01lZGlh
VHlwZSk7CisgICAgICAgIGFsbG93ZWRUcmFja1R5cGVzLT5hZGQoU291bmRNZWRpYVR5cGUpOwor
ICAgICAgICBhbGxvd2VkVHJhY2tUeXBlcy0+YWRkKFRleHRNZWRpYVR5cGUpOworICAgICAgICBh
bGxvd2VkVHJhY2tUeXBlcy0+YWRkKEJhc2VNZWRpYVR5cGUpOworICAgICAgICBhbGxvd2VkVHJh
Y2tUeXBlcy0+YWRkKGNsb3NlZENhcHRpb25UcmFja1R5cGUpOworICAgICAgICBhbGxvd2VkVHJh
Y2tUeXBlcy0+YWRkKHN1YlRpdGxlVHJhY2tUeXBlKTsKKyAgICAgICAgYWxsb3dlZFRyYWNrVHlw
ZXMtPmFkZChtcGVnNE9iamVjdERlc2NyaXB0aW9uVHJhY2tUeXBlKTsKKyAgICAgICAgYWxsb3dl
ZFRyYWNrVHlwZXMtPmFkZChtcGVnNFNjZW5lRGVzY3JpcHRpb25UcmFja1R5cGUpOworICAgICAg
ICBhbGxvd2VkVHJhY2tUeXBlcy0+YWRkKFRpbWVDb2RlTWVkaWFUeXBlKTsKKyAgICAgICAgYWxs
b3dlZFRyYWNrVHlwZXMtPmFkZChUaW1lQ29kZTY0TWVkaWFUeXBlKTsKKyAgICB9CisKKyAgICBs
b25nIHRyYWNrQ291bnQgPSBHZXRNb3ZpZVRyYWNrQ291bnQobV9wcml2YXRlLT5tX21vdmllKTsK
KyAgICBlbmFibGVkVHJhY2tDb3VudCA9IHRyYWNrQ291bnQ7CisgICAgdG90YWxUcmFja0NvdW50
ID0gdHJhY2tDb3VudDsKKworICAgIC8vIFRyYWNrIGluZGV4ZXMgYXJlIDEtYmFzZWQuIHl1Y2su
IFRoZXNlIHRoaW5ncyBtdXN0IGRlc2NlbmQgZnJvbSBvbGQtCisgICAgLy8gc2Nob29sIG1hYyBy
ZXNvdXJjZXMgb3Igc29tZXRoaW5nLgorICAgIGZvciAobG9uZyB0cmFja0luZGV4ID0gMTsgdHJh
Y2tJbmRleCA8PSB0cmFja0NvdW50OyB0cmFja0luZGV4KyspIHsKKyAgICAgICAgLy8gR3JhYiB0
aGUgdHJhY2sgYXQgdGhlIGN1cnJlbnQgaW5kZXguIElmIHRoZXJlIGlzbid0IG9uZSB0aGVyZSwg
dGhlbgorICAgICAgICAvLyB3ZSBjYW4gbW92ZSBvbnRvIHRoZSBuZXh0IG9uZS4KKyAgICAgICAg
VHJhY2sgY3VycmVudFRyYWNrID0gR2V0TW92aWVJbmRUcmFjayhtX3ByaXZhdGUtPm1fbW92aWUs
IHRyYWNrSW5kZXgpOworICAgICAgICBpZiAoIWN1cnJlbnRUcmFjaykKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAKKyAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSB0cmFjayBp
cyBkaXNhYmxlZCBhbHJlYWR5LCB3ZSBzaG91bGQgbW92ZSBhbG9uZy4KKyAgICAgICAgLy8gV2Ug
ZG9uJ3QgbmVlZCB0byByZS1kaXNhYmxlIGl0LgorICAgICAgICBpZiAoIUdldFRyYWNrRW5hYmxl
ZChjdXJyZW50VHJhY2spKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLy8gR3Jh
YiB0aGUgdHJhY2sncyBtZWRpYS4gV2UncmUgZ29pbmcgdG8gY2hlY2sgdG8gc2VlIGlmIHdlIG5l
ZWQgdG8KKyAgICAgICAgLy8gZGlzYWJsZSB0aGUgdHJhY2tzLiBUaGV5IGNvdWxkIGJlIHVuc3Vw
cG9ydGVkLgorICAgICAgICBNZWRpYSB0cmFja01lZGlhID0gR2V0VHJhY2tNZWRpYShjdXJyZW50
VHJhY2spOworICAgICAgICBpZiAoIXRyYWNrTWVkaWEpCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgCisgICAgICAgIC8vIEdyYWIgdGhlIG1lZGlhIHR5cGUgZm9yIHRoaXMgdHJhY2su
IE1ha2Ugc3VyZSB0aGF0IHdlIGRvbid0CisgICAgICAgIC8vIGdldCBhbiBlcnJvciBpbiBkb2lu
ZyBzby4gSWYgd2UgZG8sIHRoZW4gc29tZXRoaW5nIHJlYWxseSBmdW5reSBpcworICAgICAgICAv
LyB3cm9uZy4KKyAgICAgICAgT1NUeXBlIG1lZGlhVHlwZTsKKyAgICAgICAgR2V0TWVkaWFIYW5k
bGVyRGVzY3JpcHRpb24odHJhY2tNZWRpYSwgJm1lZGlhVHlwZSwgbmlsLCBuaWwpOworICAgICAg
ICBPU0VyciBtZWRpYUVyciA9IEdldE1vdmllc0Vycm9yKCk7ICAgIAorICAgICAgICBpZiAobWVk
aWFFcnIgIT0gbm9FcnIpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAg
IGlmICghYWxsb3dlZFRyYWNrVHlwZXMtPmNvbnRhaW5zKG1lZGlhVHlwZSkpIHsKKworICAgICAg
ICAgICAgLy8gRGlmZmVyZW50IG1wZWcgdmFyaWFudHMgaW1wb3J0IGFzIGRpZmZlcmVudCB0cmFj
ayB0eXBlcyBzbyBjaGVjayBmb3IgdGhlICJtcGVnIAorICAgICAgICAgICAgLy8gY2hhcmFjdGVy
aXN0aWMiIGluc3RlYWQgb2YgaGFyZCBjb2RpbmcgdGhlIChjdXJyZW50KSBsaXN0IG9mIG1wZWcg
bWVkaWEgdHlwZXMuCisgICAgICAgICAgICBpZiAoR2V0TW92aWVJbmRUcmFja1R5cGUobV9wcml2
YXRlLT5tX21vdmllLCAxLCAnbXBlZycsIG1vdmllVHJhY2tDaGFyYWN0ZXJpc3RpYyB8IG1vdmll
VHJhY2tFbmFibGVkT25seSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
ICAgIFNldFRyYWNrRW5hYmxlZChjdXJyZW50VHJhY2ssIGZhbHNlKTsKKyAgICAgICAgICAgIC0t
ZW5hYmxlZFRyYWNrQ291bnQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEdyYWIg
dGhlIHRyYWNrIHJlZmVyZW5jZSBjb3VudCBmb3IgY2hhcHRlcnMuIFRoaXMgd2lsbCB0ZWxsIHVz
IGlmIGl0CisgICAgICAgIC8vIGhhcyBjaGFwdGVyIHRyYWNrcyBpbiBpdC4gSWYgdGhlcmUgYXJl
bid0IGFueSByZWZlcmVuY2VzLCB0aGVuIHdlCisgICAgICAgIC8vIGNhbiBtb3ZlIG9uIHRoZSBu
ZXh0IHRyYWNrLgorICAgICAgICBsb25nIHJlZmVyZW5jZUNvdW50ID0gR2V0VHJhY2tSZWZlcmVu
Y2VDb3VudChjdXJyZW50VHJhY2ssIGtUcmFja1JlZmVyZW5jZUNoYXB0ZXJMaXN0KTsKKyAgICAg
ICAgaWYgKHJlZmVyZW5jZUNvdW50IDw9IDApCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgCisgICAgICAgIGxvbmcgcmVmZXJlbmNlSW5kZXggPSAwOyAgICAgICAgCisgICAgICAgIHdo
aWxlICgxKSB7CisgICAgICAgICAgICAvLyBJZiB3ZSBnZXQgbm90aGluZyBoZXJlLCB3ZSd2ZSBv
dmVyc3RlcHBlZCBvdXIgYm91bmRzIGFuZCBjYW4gc3RvcAorICAgICAgICAgICAgLy8gbG9va2lu
Zy4gQ2hhcHRlciBpbmRpY2VzIGhlcmUgYXJlIDEtYmFzZWQgYXMgd2VsbCAtIGhlbmNlLCB0aGUK
KyAgICAgICAgICAgIC8vIHByZS1pbmNyZW1lbnQuCisgICAgICAgICAgICByZWZlcmVuY2VJbmRl
eCsrOworICAgICAgICAgICAgVHJhY2sgY2hhcHRlclRyYWNrID0gR2V0VHJhY2tSZWZlcmVuY2Uo
Y3VycmVudFRyYWNrLCBrVHJhY2tSZWZlcmVuY2VDaGFwdGVyTGlzdCwgcmVmZXJlbmNlSW5kZXgp
OworICAgICAgICAgICAgaWYgKCFjaGFwdGVyVHJhY2spCisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFRyeSB0byBncmFiIHRoZSBtZWRpYSBmb3Ig
dGhlIHRyYWNrLgorICAgICAgICAgICAgTWVkaWEgY2hhcHRlck1lZGlhID0gR2V0VHJhY2tNZWRp
YShjaGFwdGVyVHJhY2spOworICAgICAgICAgICAgaWYgKCFjaGFwdGVyTWVkaWEpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICAgICAgLy8gR3JhYiB0aGUgbWVk
aWEgdHlwZSBmb3IgdGhpcyB0cmFjay4gTWFrZSBzdXJlIHRoYXQgd2UgZG9uJ3QKKyAgICAgICAg
ICAgIC8vIGdldCBhbiBlcnJvciBpbiBkb2luZyBzby4gSWYgd2UgZG8sIHRoZW4gc29tZXRoaW5n
IHJlYWxseQorICAgICAgICAgICAgLy8gZnVua3kgaXMgd3JvbmcuCisgICAgICAgICAgICBPU1R5
cGUgbWVkaWFUeXBlOworICAgICAgICAgICAgR2V0TWVkaWFIYW5kbGVyRGVzY3JpcHRpb24oY2hh
cHRlck1lZGlhLCAmbWVkaWFUeXBlLCBuaWwsIG5pbCk7CisgICAgICAgICAgICBPU0VyciBtZWRp
YUVyciA9IEdldE1vdmllc0Vycm9yKCk7CisgICAgICAgICAgICBpZiAobWVkaWFFcnIgIT0gbm9F
cnIpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IC8vIENoZWNrIHRvIHNlZSBpZiB0aGUgdHJhY2sgaXMgYSB2aWRlbyB0cmFjay4gV2UgZG9uJ3Qg
Y2FyZSBhYm91dAorICAgICAgICAgICAgLy8gb3RoZXIgbm9uLXZpZGVvIHRyYWNrcy4KKyAgICAg
ICAgICAgIGlmIChtZWRpYVR5cGUgIT0gVmlkZW9NZWRpYVR5cGUpCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0
aGUgdHJhY2sgaXMgYWxyZWFkeSBkaXNhYmxlZC4gSWYgaXQgaXMsIHdlCisgICAgICAgICAgICAv
LyBzaG91bGQgbW92ZSBhbG9uZy4KKyAgICAgICAgICAgIGlmICghR2V0VHJhY2tFbmFibGVkKGNo
YXB0ZXJUcmFjaykpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIC8vIERpc2FibGVkIHRoZSBldmlsLCBldmlsIHRyYWNrLgorICAgICAgICAgICAg
U2V0VHJhY2tFbmFibGVkKGNoYXB0ZXJUcmFjaywgZmFsc2UpOworICAgICAgICAgICAgLS1lbmFi
bGVkVHJhY2tDb3VudDsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBRVE1vdmllV2luOjpz
ZXREaXNhYmxlZChib29sIGIpCit7CisgICAgbV9kaXNhYmxlZCA9IGI7Cit9CisKKworYm9vbCBR
VE1vdmllV2luOjpoYXNWaWRlbygpIGNvbnN0Cit7CisgICAgaWYgKCFtX3ByaXZhdGUtPm1fbW92
aWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gKEdldE1vdmllSW5kVHJhY2tU
eXBlKG1fcHJpdmF0ZS0+bV9tb3ZpZSwgMSwgVmlzdWFsTWVkaWFDaGFyYWN0ZXJpc3RpYywgbW92
aWVUcmFja0NoYXJhY3RlcmlzdGljIHwgbW92aWVUcmFja0VuYWJsZWRPbmx5KSk7Cit9CisKK2Jv
b2wgUVRNb3ZpZVdpbjo6aGFzQXVkaW8oKSBjb25zdAoreworICAgIGlmICghbV9wcml2YXRlLT5t
X21vdmllKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIChHZXRNb3ZpZUluZFRy
YWNrVHlwZShtX3ByaXZhdGUtPm1fbW92aWUsIDEsIEF1ZGlvTWVkaWFDaGFyYWN0ZXJpc3RpYywg
bW92aWVUcmFja0NoYXJhY3RlcmlzdGljIHwgbW92aWVUcmFja0VuYWJsZWRPbmx5KSk7Cit9CisK
KworYm9vbCBRVE1vdmllV2luOjpoYXNDbG9zZWRDYXB0aW9ucygpIGNvbnN0IAoreworICAgIGlm
ICghbV9wcml2YXRlLT5tX21vdmllKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJu
IEdldE1vdmllSW5kVHJhY2tUeXBlKG1fcHJpdmF0ZS0+bV9tb3ZpZSwgMSwgY2xvc2VkQ2FwdGlv
blRyYWNrVHlwZSwgbW92aWVUcmFja01lZGlhVHlwZSk7Cit9CisKK3ZvaWQgUVRNb3ZpZVdpbjo6
c2V0Q2xvc2VkQ2FwdGlvbnNWaXNpYmxlKGJvb2wgdmlzaWJsZSkKK3sKKyAgICBpZiAoIW1fcHJp
dmF0ZS0+bV9tb3ZpZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVHJhY2sgY2NUcmFjayA9IEdl
dE1vdmllSW5kVHJhY2tUeXBlKG1fcHJpdmF0ZS0+bV9tb3ZpZSwgMSwgY2xvc2VkQ2FwdGlvblRy
YWNrVHlwZSwgbW92aWVUcmFja01lZGlhVHlwZSk7CisgICAgaWYgKCFjY1RyYWNrKQorICAgICAg
ICByZXR1cm47CisKKyAgICBCb29sZWFuIGRvRGlzcGxheSA9IHZpc2libGU7CisgICAgUVRTZXRU
cmFja1Byb3BlcnR5KGNjVHJhY2ssIGNsb3NlZENhcHRpb25UcmFja1R5cGUsIGNsb3NlZENhcHRp
b25EaXNwbGF5UHJvcGVydHlJRCwgc2l6ZW9mKGRvRGlzcGxheSksICZkb0Rpc3BsYXkpOworfQor
CitwYXNjYWwgT1NFcnIgbW92aWVEcmF3aW5nQ29tcGxldGVQcm9jKE1vdmllIG1vdmllLCBsb25n
IGRhdGEpCit7CisgICAgVXBwUGFyYW0gcGFyYW07CisgICAgcGFyYW0ubG9uZ1ZhbHVlID0gZGF0
YTsKKyAgICBRVE1vdmllV2luUHJpdmF0ZSogbXAgPSBzdGF0aWNfY2FzdDxRVE1vdmllV2luUHJp
dmF0ZSo+KHBhcmFtLnB0cik7CisgICAgaWYgKG1wKQorICAgICAgICBtcC0+ZHJhd2luZ0NvbXBs
ZXRlKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGluaXRpYWxpemVTdXBwb3J0
ZWRUeXBlcygpIAoreworICAgIGlmIChnU3VwcG9ydGVkVHlwZXMpCisgICAgICAgIHJldHVybjsK
KworICAgIGdTdXBwb3J0ZWRUeXBlcyA9IG5ldyBWZWN0b3I8Q0ZTdHJpbmdSZWY+OworICAgIGlm
IChxdWlja1RpbWVWZXJzaW9uIDwgbWluaW11bVF1aWNrVGltZVZlcnNpb24pIHsKKyAgICAgICAg
TE9HX0VSUk9SKCJRdWlja1RpbWUgdmVyc2lvbiAleCBkZXRlY3RlZCwgYXQgbGVhc3QgJXggcmVx
dWlyZWQuIFJldHVybmluZyBlbXB0eSBsaXN0IG9mIHN1cHBvcnRlZCBtZWRpYSBNSU1FIHR5cGVz
LiIsIHF1aWNrVGltZVZlcnNpb24sIG1pbmltdW1RdWlja1RpbWVWZXJzaW9uKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIC8vIFF1aWNrVGltZSBkb2Vzbid0IGhhdmUgYW4gaW1wb3J0
ZXIgZm9yIHZpZGVvL3F1aWNrdGltZS4gQWRkIGl0IG1hbnVhbGx5LgorICAgIGdTdXBwb3J0ZWRU
eXBlcy0+YXBwZW5kKENGU1RSKCJ2aWRlby9xdWlja3RpbWUiKSk7CisKKyAgICBmb3IgKGludCBp
bmRleCA9IDA7IGluZGV4IDwgMjsgaW5kZXgrKykgeworICAgICAgICBDb21wb25lbnREZXNjcmlw
dGlvbiBmaW5kQ0Q7CisKKyAgICAgICAgLy8gbG9vayBhdCBhbGwgbW92aWUgaW1wb3J0ZXJzIHRo
YXQgY2FuIGltcG9ydCBpbiBwbGFjZSBhbmQgYXJlIGluc3RhbGxlZC4gCisgICAgICAgIGZpbmRD
RC5jb21wb25lbnRUeXBlID0gTW92aWVJbXBvcnRUeXBlOworICAgICAgICBmaW5kQ0QuY29tcG9u
ZW50U3ViVHlwZSA9IDA7CisgICAgICAgIGZpbmRDRC5jb21wb25lbnRNYW51ZmFjdHVyZXIgPSAw
OworICAgICAgICBmaW5kQ0QuY29tcG9uZW50RmxhZ3NNYXNrID0gY21wSXNNaXNzaW5nIHwgbW92
aWVJbXBvcnRTdWJUeXBlSXNGaWxlRXh0ZW5zaW9uIHwgY2FuTW92aWVJbXBvcnRJblBsYWNlIHwg
ZG9udEF1dG9GaWxlTW92aWVJbXBvcnQ7CisKKyAgICAgICAgLy8gbG9vayBhdCB0aG9zZSByZWdp
c3RlcmVkIGJ5IEhGUyBmaWxlIHR5cGVzIHRoZSBmaXJzdCB0aW1lIHRocm91Z2gsIGJ5IGZpbGUg
ZXh0ZW5zaW9uIHRoZSBzZWNvbmQgdGltZQorICAgICAgICBmaW5kQ0QuY29tcG9uZW50RmxhZ3Mg
PSBjYW5Nb3ZpZUltcG9ydEluUGxhY2UgfCAoaW5kZXggPyBtb3ZpZUltcG9ydFN1YlR5cGVJc0Zp
bGVFeHRlbnNpb24gOiAwKTsKKyAgICAgICAgCisgICAgICAgIGxvbmcgY29tcG9uZW50Q291bnQg
PSBDb3VudENvbXBvbmVudHMoJmZpbmRDRCk7CisgICAgICAgIGlmICghY29tcG9uZW50Q291bnQp
CisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBDb21wb25lbnQgY29tcCA9IDA7Cisg
ICAgICAgIHdoaWxlIChjb21wID0gRmluZE5leHRDb21wb25lbnQoY29tcCwgJmZpbmRDRCkpIHsK
KyAgICAgICAgICAgIC8vIERvZXMgdGhpcyBjb21wb25lbnQgaGF2ZSBhIE1JTUUgdHlwZSBjb250
YWluZXI/CisgICAgICAgICAgICBDb21wb25lbnREZXNjcmlwdGlvbiBpbmZvQ0Q7CisgICAgICAg
ICAgICBPU0VyciBlcnIgPSBHZXRDb21wb25lbnRJbmZvKGNvbXAsICZpbmZvQ0QsIG5pbCAvKm5h
bWUqLywgbmlsIC8qaW5mbyovLCBuaWwgLyppY29uKi8pOworICAgICAgICAgICAgaWYgKGVycikK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmICghKGluZm9DRC5jb21w
b25lbnRGbGFncyAmIGhhc01vdmllSW1wb3J0TUlNRUxpc3QpKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgUVRBdG9tQ29udGFpbmVyIG1pbWVMaXN0ID0gMDsKKyAgICAg
ICAgICAgIGVyciA9IE1vdmllSW1wb3J0R2V0TUlNRVR5cGVMaXN0KChDb21wb25lbnRJbnN0YW5j
ZSljb21wLCAmbWltZUxpc3QpOworICAgICAgICAgICAgaWYgKGVyciB8fCAhbWltZUxpc3QpCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIC8vIEdyYWIgZXZlcnkgdHlw
ZSBmcm9tIHRoZSBjb250YWluZXIuCisgICAgICAgICAgICBRVExvY2tDb250YWluZXIobWltZUxp
c3QpOworICAgICAgICAgICAgaW50IHR5cGVDb3VudCA9IFFUQ291bnRDaGlsZHJlbk9mVHlwZSht
aW1lTGlzdCwga1BhcmVudEF0b21Jc0NvbnRhaW5lciwga01pbWVJbmZvTWltZVR5cGVUYWcpOwor
ICAgICAgICAgICAgZm9yIChpbnQgdHlwZUluZGV4ID0gMTsgdHlwZUluZGV4IDw9IHR5cGVDb3Vu
dDsgdHlwZUluZGV4KyspIHsKKyAgICAgICAgICAgICAgICBRVEF0b20gbWltZVRhZyA9IFFURmlu
ZENoaWxkQnlJbmRleChtaW1lTGlzdCwgMCwga01pbWVJbmZvTWltZVR5cGVUYWcsIHR5cGVJbmRl
eCwgMCk7CisgICAgICAgICAgICAgICAgaWYgKCFtaW1lVGFnKQorICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBjaGFyKiBhdG9tRGF0YTsKKyAgICAgICAgICAg
ICAgICBsb25nIHR5cGVMZW5ndGg7CisgICAgICAgICAgICAgICAgaWYgKG5vRXJyICE9IFFUR2V0
QXRvbURhdGFQdHIobWltZUxpc3QsIG1pbWVUYWcsICZ0eXBlTGVuZ3RoLCAmYXRvbURhdGEpKQor
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIGNoYXIgdHlw
ZUJ1ZmZlclsyNTZdOworICAgICAgICAgICAgICAgIGlmICh0eXBlTGVuZ3RoID49IHNpemVvZih0
eXBlQnVmZmVyKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAg
ICAgbWVtY3B5KHR5cGVCdWZmZXIsIGF0b21EYXRhLCB0eXBlTGVuZ3RoKTsKKyAgICAgICAgICAg
ICAgICB0eXBlQnVmZmVyW3R5cGVMZW5ndGhdID0gMDsKKworICAgICAgICAgICAgICAgIC8vIE9u
bHkgYWRkICJhdWRpby8uLi4iIGFuZCAidmlkZW8vLi4uIiB0eXBlcy4KKyAgICAgICAgICAgICAg
ICBpZiAoc3RybmNtcCh0eXBlQnVmZmVyLCAiYXVkaW8vIiwgNikgJiYgc3RybmNtcCh0eXBlQnVm
ZmVyLCAidmlkZW8vIiwgNikpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgICAgICAgICAgQ0ZTdHJpbmdSZWYgY2ZNaW1lVHlwZSA9IENGU3RyaW5nQ3JlYXRlV2l0aENT
dHJpbmcoMCwgdHlwZUJ1ZmZlciwga0NGU3RyaW5nRW5jb2RpbmdVVEY4KTsKKyAgICAgICAgICAg
ICAgICBpZiAoIWNmTWltZVR5cGUpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgICAgICAgICAgLy8gT25seSBhZGQgZWFjaCB0eXBlIG9uY2UuCisgICAgICAgICAgICAg
ICAgYm9vbCBhbHJlYWR5QWRkZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBh
ZGRlZEluZGV4ID0gMDsgYWRkZWRJbmRleCA8IGdTdXBwb3J0ZWRUeXBlcy0+c2l6ZSgpOyBhZGRl
ZEluZGV4KyspIHsKKyAgICAgICAgICAgICAgICAgICAgQ0ZTdHJpbmdSZWYgdHlwZSA9IGdTdXBw
b3J0ZWRUeXBlcy0+YXQoYWRkZWRJbmRleCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChrQ0ZD
b21wYXJlRXF1YWxUbyA9PSBDRlN0cmluZ0NvbXBhcmUoY2ZNaW1lVHlwZSwgdHlwZSwga0NGQ29t
cGFyZUNhc2VJbnNlbnNpdGl2ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFscmVhZHlB
ZGRlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIWFscmVh
ZHlBZGRlZCkKKyAgICAgICAgICAgICAgICAgICAgZ1N1cHBvcnRlZFR5cGVzLT5hcHBlbmQoY2ZN
aW1lVHlwZSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBDRlJl
bGVhc2UoY2ZNaW1lVHlwZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBEaXNwb3NlSGFu
ZGxlKG1pbWVMaXN0KTsKKyAgICAgICAgfQorICAgIH0KK30KKwordW5zaWduZWQgUVRNb3ZpZVdp
bjo6Y291bnRTdXBwb3J0ZWRUeXBlcygpCit7CisgICAgaW5pdGlhbGl6ZVN1cHBvcnRlZFR5cGVz
KCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihnU3VwcG9ydGVkVHlwZXMtPnNp
emUoKSk7Cit9CisKK3ZvaWQgUVRNb3ZpZVdpbjo6Z2V0U3VwcG9ydGVkVHlwZSh1bnNpZ25lZCBp
bmRleCwgY29uc3QgVUNoYXIqJiBzdHIsIHVuc2lnbmVkJiBsZW4pCit7CisgICAgaW5pdGlhbGl6
ZVN1cHBvcnRlZFR5cGVzKCk7CisgICAgQVNTRVJUKGluZGV4IDwgZ1N1cHBvcnRlZFR5cGVzLT5z
aXplKCkpOworCisgICAgLy8gQWxsb2NhdGUgc3VmZmljaWVudCBidWZmZXIgdG8gaG9sZCBhbnkg
TUlNRSB0eXBlCisgICAgc3RhdGljIFVuaUNoYXIqIHN0YXRpY0J1ZmZlciA9IDA7CisgICAgaWYg
KCFzdGF0aWNCdWZmZXIpCisgICAgICAgIHN0YXRpY0J1ZmZlciA9IG5ldyBVbmlDaGFyWzMyXTsK
KworICAgIENGU3RyaW5nUmVmIGNmc3RyID0gZ1N1cHBvcnRlZFR5cGVzLT5hdChpbmRleCk7Cisg
ICAgbGVuID0gQ0ZTdHJpbmdHZXRMZW5ndGgoY2ZzdHIpOworICAgIENGUmFuZ2UgcmFuZ2UgPSB7
IDAsIGxlbiB9OworICAgIENGU3RyaW5nR2V0Q2hhcmFjdGVycyhjZnN0ciwgcmFuZ2UsIHN0YXRp
Y0J1ZmZlcik7CisgICAgc3RyID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KHN0YXRp
Y0J1ZmZlcik7CisgICAgCit9CisKK3ZvaWQgUVRNb3ZpZVdpbjo6c2V0VGFza1RpbWVyRnVuY3Mo
U2V0VGFza1RpbWVyRGVsYXlGdW5jIHNldFRhc2tUaW1lckRlbGF5LCBTdG9wVGFza1RpbWVyRnVu
YyBzdG9wVGFza1RpbWVyKQoreworICAgIGdTZXRUYXNrVGltZXJEZWxheSA9IHNldFRhc2tUaW1l
ckRlbGF5OworICAgIGdTdG9wVGFza1RpbWVyID0gc3RvcFRhc2tUaW1lcjsKK30KKworYm9vbCBR
VE1vdmllV2luOjppbml0aWFsaXplUXVpY2tUaW1lKCkgCit7CisgICAgc3RhdGljIGJvb2wgaW5p
dGlhbGl6ZWQgPSBmYWxzZTsKKyAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXphdGlvblN1Y2NlZWRl
ZCA9IGZhbHNlOworICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgaW5pdGlhbGl6ZWQg
PSB0cnVlOworICAgICAgICAvLyBJbml0aWFsaXplIGFuZCBjaGVjayBRdWlja1RpbWUgdmVyc2lv
bgorICAgICAgICBPU0VyciByZXN1bHQgPSBJbml0aWFsaXplUVRNTChrSW5pdGlhbGl6ZVFUTUxF
bmFibGVEb3VibGVCdWZmZXJlZFN1cmZhY2UpOworICAgICAgICBpZiAocmVzdWx0ID09IG5vRXJy
KQorICAgICAgICAgICAgcmVzdWx0ID0gR2VzdGFsdChnZXN0YWx0UXVpY2tUaW1lLCAmcXVpY2tU
aW1lVmVyc2lvbik7CisgICAgICAgIGlmIChyZXN1bHQgIT0gbm9FcnIpIHsKKyAgICAgICAgICAg
IExPR19FUlJPUigiTm8gUXVpY2tUaW1lIGF2YWlsYWJsZS4gRGlzYWJsaW5nIDx2aWRlbz4gYW5k
IDxhdWRpbz4gc3VwcG9ydC4iKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgICAgICBpZiAocXVpY2tUaW1lVmVyc2lvbiA8IG1pbmltdW1RdWlja1RpbWVWZXJzaW9u
KSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIlF1aWNrVGltZSB2ZXJzaW9uICV4IGRldGVjdGVk
LCBhdCBsZWFzdCAleCByZXF1aXJlZC4gRGlzYWJsaW5nIDx2aWRlbz4gYW5kIDxhdWRpbz4gc3Vw
cG9ydC4iLCBxdWlja1RpbWVWZXJzaW9uLCBtaW5pbXVtUXVpY2tUaW1lVmVyc2lvbik7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgRW50ZXJNb3ZpZXMoKTsK
KyAgICAgICAgZ01vdmllRHJhd2luZ0NvbXBsZXRlVVBQID0gTmV3TW92aWVEcmF3aW5nQ29tcGxl
dGVVUFAobW92aWVEcmF3aW5nQ29tcGxldGVQcm9jKTsKKyAgICAgICAgaW5pdGlhbGl6YXRpb25T
dWNjZWVkZWQgPSB0cnVlOworICAgIH0KKyAgICByZXR1cm4gaW5pdGlhbGl6YXRpb25TdWNjZWVk
ZWQ7Cit9CisKK0xSRVNVTFQgUVRNb3ZpZVdpbjo6ZnVsbHNjcmVlblduZFByb2MoSFdORCB3bmQs
IFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3sKKyAgICBRVE1v
dmllV2luKiBtb3ZpZSA9IHN0YXRpY19jYXN0PFFUTW92aWVXaW4qPihHZXRQcm9wKHduZCwgZnVs
bHNjcmVlblFUTW92aWVXaW5Qb2ludGVyUHJvcCkpOworCisgICAgaWYgKG1lc3NhZ2UgPT0gV01f
REVTVFJPWSkKKyAgICAgICAgUmVtb3ZlUHJvcCh3bmQsIGZ1bGxzY3JlZW5RVE1vdmllV2luUG9p
bnRlclByb3ApOworCisgICAgaWYgKCFtb3ZpZSkKKyAgICAgICAgcmV0dXJuIERlZldpbmRvd1By
b2Mod25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7CisKKyAgICByZXR1cm4gbW92aWUtPm1f
cHJpdmF0ZS0+bV9mdWxsc2NyZWVuQ2xpZW50LT5mdWxsc2NyZWVuQ2xpZW50V25kUHJvYyh3bmQs
IG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtKTsKK30KKworSFdORCBRVE1vdmllV2luOjplbnRlckZ1
bGxzY3JlZW4oUVRNb3ZpZVdpbkZ1bGxzY3JlZW5DbGllbnQqIGNsaWVudCkKK3sKKyAgICBtX3By
aXZhdGUtPm1fZnVsbHNjcmVlbkNsaWVudCA9IGNsaWVudDsKKyAgICAKKyAgICBCZWdpbkZ1bGxT
Y3JlZW4oJm1fcHJpdmF0ZS0+bV9mdWxsc2NyZWVuUmVzdG9yZVN0YXRlLCAwLCAwLCAwLCAmbV9w
cml2YXRlLT5tX2Z1bGxzY3JlZW5XaW5kb3csIDAsIGZ1bGxTY3JlZW5BbGxvd0V2ZW50cyk7IAor
ICAgIFFUTUxTZXRXaW5kb3dXbmRQcm9jKG1fcHJpdmF0ZS0+bV9mdWxsc2NyZWVuV2luZG93LCBm
dWxsc2NyZWVuV25kUHJvYyk7CisgICAgQ3JlYXRlUG9ydEFzc29jaWF0aW9uKEdldFBvcnROYXRp
dmVXaW5kb3cobV9wcml2YXRlLT5tX2Z1bGxzY3JlZW5XaW5kb3cpLCAwLCAwKTsKKworICAgIEdl
dE1vdmllQm94KG1fcHJpdmF0ZS0+bV9tb3ZpZSwgJm1fcHJpdmF0ZS0+bV9mdWxsc2NyZWVuUmVj
dCk7CisgICAgR2V0TW92aWVHV29ybGQobV9wcml2YXRlLT5tX21vdmllLCAmbV9wcml2YXRlLT5t
X2Z1bGxzY3JlZW5PcmlnR1dvcmxkLCAwKTsKKyAgICBTZXRNb3ZpZUdXb3JsZChtX3ByaXZhdGUt
Pm1fbW92aWUsIHJlaW50ZXJwcmV0X2Nhc3Q8Q0dyYWZQdHI+KG1fcHJpdmF0ZS0+bV9mdWxsc2Ny
ZWVuV2luZG93KSwgR2V0R1dvcmxkRGV2aWNlKHJlaW50ZXJwcmV0X2Nhc3Q8Q0dyYWZQdHI+KG1f
cHJpdmF0ZS0+bV9mdWxsc2NyZWVuV2luZG93KSkpOworCisgICAgLy8gU2V0IHRoZSBzaXplIG9m
IHRoZSBib3ggdG8gcHJlc2VydmUgYXNwZWN0IHJhdGlvCisgICAgUmVjdCByZWN0ID0gbV9wcml2
YXRlLT5tX2Z1bGxzY3JlZW5XaW5kb3ctPnBvcnRSZWN0OworCisgICAgZmxvYXQgbW92aWVSYXRp
byA9IHN0YXRpY19jYXN0PGZsb2F0PihtX3ByaXZhdGUtPm1fd2lkdGgpIC8gbV9wcml2YXRlLT5t
X2hlaWdodDsKKyAgICBpbnQgd2luZG93V2lkdGggPSAgcmVjdC5yaWdodCAtIHJlY3QubGVmdDsK
KyAgICBpbnQgd2luZG93SGVpZ2h0ID0gcmVjdC5ib3R0b20gLSByZWN0LnRvcDsKKyAgICBmbG9h
dCB3aW5kb3dSYXRpbyA9IHN0YXRpY19jYXN0PGZsb2F0Pih3aW5kb3dXaWR0aCkgLyB3aW5kb3dI
ZWlnaHQ7CisgICAgaW50IGFjdHVhbFdpZHRoID0gKHdpbmRvd1JhdGlvID4gbW92aWVSYXRpbykg
PyAod2luZG93SGVpZ2h0ICogbW92aWVSYXRpbykgOiB3aW5kb3dXaWR0aDsKKyAgICBpbnQgYWN0
dWFsSGVpZ2h0ID0gKHdpbmRvd1JhdGlvIDwgbW92aWVSYXRpbykgPyAod2luZG93V2lkdGggLyBt
b3ZpZVJhdGlvKSA6IHdpbmRvd0hlaWdodDsKKyAgICBpbnQgb2Zmc2V0WCA9ICh3aW5kb3dXaWR0
aCAtIGFjdHVhbFdpZHRoKSAvIDI7CisgICAgaW50IG9mZnNldFkgPSAod2luZG93SGVpZ2h0IC0g
YWN0dWFsSGVpZ2h0KSAvIDI7CisKKyAgICByZWN0LmxlZnQgPSBvZmZzZXRYOworICAgIHJlY3Qu
cmlnaHQgPSBvZmZzZXRYICsgYWN0dWFsV2lkdGg7CisgICAgcmVjdC50b3AgPSBvZmZzZXRZOwor
ICAgIHJlY3QuYm90dG9tID0gb2Zmc2V0WSArIGFjdHVhbEhlaWdodDsKKworICAgIFNldE1vdmll
Qm94KG1fcHJpdmF0ZS0+bV9tb3ZpZSwgJnJlY3QpOworICAgIFNob3dIaWRlVGFza0Jhcih0cnVl
KTsKKworICAgIC8vIFNldCB0aGUgJ3RoaXMnIHBvaW50ZXIgb24gdGhlIEhXTkQKKyAgICBIV05E
IHduZCA9IHN0YXRpY19jYXN0PEhXTkQ+KEdldFBvcnROYXRpdmVXaW5kb3cobV9wcml2YXRlLT5t
X2Z1bGxzY3JlZW5XaW5kb3cpKTsKKyAgICBTZXRQcm9wKHduZCwgZnVsbHNjcmVlblFUTW92aWVX
aW5Qb2ludGVyUHJvcCwgc3RhdGljX2Nhc3Q8SEFORExFPih0aGlzKSk7CisKKyAgICByZXR1cm4g
d25kOworfQorCit2b2lkIFFUTW92aWVXaW46OmV4aXRGdWxsc2NyZWVuKCkKK3sKKyAgICBpZiAo
IW1fcHJpdmF0ZS0+bV9mdWxsc2NyZWVuV2luZG93KQorICAgICAgICByZXR1cm47CisKKyAgICBI
V05EIHduZCA9IHN0YXRpY19jYXN0PEhXTkQ+KEdldFBvcnROYXRpdmVXaW5kb3cobV9wcml2YXRl
LT5tX2Z1bGxzY3JlZW5XaW5kb3cpKTsKKyAgICBEZXN0cm95UG9ydEFzc29jaWF0aW9uKHJlaW50
ZXJwcmV0X2Nhc3Q8Q0dyYWZQdHI+KG1fcHJpdmF0ZS0+bV9mdWxsc2NyZWVuV2luZG93KSk7Cisg
ICAgU2V0TW92aWVHV29ybGQobV9wcml2YXRlLT5tX21vdmllLCBtX3ByaXZhdGUtPm1fZnVsbHNj
cmVlbk9yaWdHV29ybGQsIDApOworICAgIEVuZEZ1bGxTY3JlZW4obV9wcml2YXRlLT5tX2Z1bGxz
Y3JlZW5SZXN0b3JlU3RhdGUsIDBMKTsKKyAgICBTZXRNb3ZpZUJveChtX3ByaXZhdGUtPm1fbW92
aWUsICZtX3ByaXZhdGUtPm1fZnVsbHNjcmVlblJlY3QpOworICAgIG1fcHJpdmF0ZS0+bV9mdWxs
c2NyZWVuV2luZG93ID0gMDsKK30KKworQk9PTCBXSU5BUEkgRGxsTWFpbihISU5TVEFOQ0UgaGlu
c3RETEwsIERXT1JEIGZkd1JlYXNvbiwgTFBWT0lEIGxwdlJlc2VydmVkKQoreworICAgIHN3aXRj
aCAoZmR3UmVhc29uKSB7CisgICAgY2FzZSBETExfUFJPQ0VTU19BVFRBQ0g6CisgICAgICAgIHJl
dHVybiBUUlVFOworICAgIGNhc2UgRExMX1BST0NFU1NfREVUQUNIOgorICAgIGNhc2UgRExMX1RI
UkVBRF9BVFRBQ0g6CisgICAgY2FzZSBETExfVEhSRUFEX0RFVEFDSDoKKyAgICAgICAgcmV0dXJu
IEZBTFNFOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gRkFM
U0U7Cit9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVE1vdmllLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVE1vdmllLmNwcAko
cmV2aXNpb24gNTg1OTYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVE1vdmll
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsMTcgKzI0LDE1IEBACiAgKi8KICNpbmNsdWRlICJj
b25maWcuaCIKIAotI2luY2x1ZGUgIlFUTW92aWVXaW4uaCIKLQotLy8gUHV0IE1vdmllcy5oIGZp
cnN0IHNvIGJ1aWxkIGZhaWx1cmVzIGhlcmUgcG9pbnQgY2xlYXJseSB0byBRdWlja1RpbWUKLSNp
bmNsdWRlIDxNb3ZpZXMuaD4KKyNpbmNsdWRlICJRVE1vdmllLmgiCiAKKyNpbmNsdWRlICJRVE1v
dmllVGFzay5oIgogI2luY2x1ZGUgIlFUTW92aWVXaW5UaW1lci5oIgogI2luY2x1ZGUgPEdYTWF0
aC5oPgorI2luY2x1ZGUgPE1vdmllcy5oPgogI2luY2x1ZGUgPFFUTUwuaD4KICNpbmNsdWRlIDxR
dWlja1RpbWVDb21wb25lbnRzLmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNs
dWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtNDcsNyArNDUsNyBAQCBzdGF0aWMgY29uc3QgbG9uZyBz
dWJUaXRsZVRyYWNrVHlwZSA9ICdzCiBzdGF0aWMgY29uc3QgbG9uZyBtcGVnNE9iamVjdERlc2Ny
aXB0aW9uVHJhY2tUeXBlID0gJ29kc20nOwogc3RhdGljIGNvbnN0IGxvbmcgbXBlZzRTY2VuZURl
c2NyaXB0aW9uVHJhY2tUeXBlID0gJ3Nkc20nOwogc3RhdGljIGNvbnN0IGxvbmcgY2xvc2VkQ2Fw
dGlvbkRpc3BsYXlQcm9wZXJ0eUlEID0gJ2Rpc3AnOwotc3RhdGljIExQQ1RTVFIgZnVsbHNjcmVl
blFUTW92aWVXaW5Qb2ludGVyUHJvcCA9IFRFWFQoImZ1bGxzY3JlZW5RVE1vdmllV2luUG9pbnRl
ciIpOworc3RhdGljIExQQ1RTVFIgZnVsbHNjcmVlblFUTW92aWVQb2ludGVyUHJvcCA9IFRFWFQo
ImZ1bGxzY3JlZW5RVE1vdmllUG9pbnRlciIpOwogCiAvLyBSZXNpemluZyBHV29ybGRzIGlzIHNs
b3csIGdpdmUgdGhlbSBhIG1pbmltdW0gc2l6ZSBzbyBzaXplIG9mIHNtYWxsIAogLy8gdmlkZW9z
IGNhbiBiZSBhbmltYXRlZCBzbW9vdGhseQpAQCAtNjEsNTMgKzU5LDI1IEBAIHVuaW9uIFVwcFBh
cmFtIHsKICAgICB2b2lkKiBwdHI7CiB9OwogCi1zdGF0aWMgTW92aWVEcmF3aW5nQ29tcGxldGVV
UFAgZ01vdmllRHJhd2luZ0NvbXBsZXRlVVBQID0gMDsKLXN0YXRpYyBIYXNoU2V0PFFUTW92aWVX
aW5Qcml2YXRlKj4qIGdUYXNrTGlzdDsKIHN0YXRpYyBWZWN0b3I8Q0ZTdHJpbmdSZWY+KiBnU3Vw
cG9ydGVkVHlwZXMgPSAwOwogc3RhdGljIFNJbnQzMiBxdWlja1RpbWVWZXJzaW9uID0gMDsKIAot
c3RhdGljIFFUTW92aWVXaW46OlNldFRhc2tUaW1lckRlbGF5RnVuYyBnU2V0VGFza1RpbWVyRGVs
YXkgPSAwOwotc3RhdGljIFFUTW92aWVXaW46OlN0b3BUYXNrVGltZXJGdW5jIGdTdG9wVGFza1Rp
bWVyID0gMDsKLQotc3RhdGljIHZvaWQgdXBkYXRlVGFza1RpbWVyKGludCBtYXhJbnRlcnZhbCA9
IDEwMDApCi17Ci0gICAgaWYgKCFnVGFza0xpc3QtPnNpemUoKSkgewotICAgICAgICBnU3RvcFRh
c2tUaW1lcigpOwotICAgICAgICByZXR1cm47ICAgIAotICAgIH0KLSAgICAKLSAgICBsb25nIGlu
dGVydmFsSW5NUzsKLSAgICBRVEdldFRpbWVVbnRpbE5leHRUYXNrKCZpbnRlcnZhbEluTVMsIDEw
MDApOwotICAgIGlmIChpbnRlcnZhbEluTVMgPiBtYXhJbnRlcnZhbCkKLSAgICAgICAgaW50ZXJ2
YWxJbk1TID0gbWF4SW50ZXJ2YWw7Ci0gICAgZ1NldFRhc2tUaW1lckRlbGF5KHN0YXRpY19jYXN0
PGZsb2F0PihpbnRlcnZhbEluTVMpIC8gMTAwMCk7Ci19Ci0KLWNsYXNzIFFUTW92aWVXaW5Qcml2
YXRlIDogcHVibGljIE5vbmNvcHlhYmxlIHsKK2NsYXNzIFFUTW92aWVQcml2YXRlIDogcHVibGlj
IE5vbmNvcHlhYmxlLCBwdWJsaWMgUVRNb3ZpZVRhc2tDbGllbnQgewogcHVibGljOgotICAgIFFU
TW92aWVXaW5Qcml2YXRlKCk7Ci0gICAgflFUTW92aWVXaW5Qcml2YXRlKCk7CisgICAgUVRNb3Zp
ZVByaXZhdGUoKTsKKyAgICB+UVRNb3ZpZVByaXZhdGUoKTsKICAgICB2b2lkIHRhc2soKTsKICAg
ICB2b2lkIHN0YXJ0VGFzaygpOwogICAgIHZvaWQgZW5kVGFzaygpOwogCiAgICAgdm9pZCBjcmVh
dGVNb3ZpZUNvbnRyb2xsZXIoKTsKLSAgICB2b2lkIHJlZ2lzdGVyRHJhd2luZ0NhbGxiYWNrKCk7
Ci0gICAgdm9pZCBkcmF3aW5nQ29tcGxldGUoKTsKLSAgICB2b2lkIHVwZGF0ZUdXb3JsZCgpOwot
ICAgIHZvaWQgY3JlYXRlR1dvcmxkKCk7Ci0gICAgdm9pZCBkZWxldGVHV29ybGQoKTsKLSAgICB2
b2lkIGNsZWFyR1dvcmxkKCk7Ci0gICAgdm9pZCBjYWNoZU1vdmllU2NhbGUoKTsKLSAgICB2b2lk
IHVwZGF0ZU1vdmllU2l6ZSgpOwotCi0gICAgdm9pZCBzZXRTaXplKGludCwgaW50KTsKIAotICAg
IFFUTW92aWVXaW4qIG1fbW92aWVXaW47CisgICAgUVRNb3ZpZSogbV9tb3ZpZVdpbjsKICAgICBN
b3ZpZSBtX21vdmllOwogICAgIE1vdmllQ29udHJvbGxlciBtX21vdmllQ29udHJvbGxlcjsKICAg
ICBib29sIG1fdGFza2luZzsKLSAgICBRVE1vdmllV2luQ2xpZW50KiBtX2NsaWVudDsKKyAgICBi
b29sIG1fZGlzYWJsZWQ7CisgICAgVmVjdG9yPFFUTW92aWVDbGllbnQqPiBtX2NsaWVudHM7CiAg
ICAgbG9uZyBtX2xvYWRTdGF0ZTsKICAgICBib29sIG1fZW5kZWQ7CiAgICAgYm9vbCBtX3NlZWtp
bmc7CkBAIC0xMTYsMTAgKzg2LDYgQEAgcHVibGljOgogICAgIGludCBtX3dpZHRoOwogICAgIGlu
dCBtX2hlaWdodDsKICAgICBib29sIG1fdmlzaWJsZTsKLSAgICBHV29ybGRQdHIgbV9nV29ybGQ7
Ci0gICAgaW50IG1fZ1dvcmxkV2lkdGg7Ci0gICAgaW50IG1fZ1dvcmxkSGVpZ2h0OwotICAgIEdX
b3JsZFB0ciBtX3NhdmVkR1dvcmxkOwogICAgIGxvbmcgbV9sb2FkRXJyb3I7CiAgICAgZmxvYXQg
bV93aWR0aFNjYWxlRmFjdG9yOwogICAgIGZsb2F0IG1faGVpZ2h0U2NhbGVGYWN0b3I7CkBAIC0x
MjksMTkgKzk1LDEzIEBAIHB1YmxpYzoKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgYm9vbCBt
X3NjYWxlQ2FjaGVkOwogI2VuZGlmCi0gICAgV2luZG93UHRyIG1fZnVsbHNjcmVlbldpbmRvdzsK
LSAgICBHV29ybGRQdHIgbV9mdWxsc2NyZWVuT3JpZ0dXb3JsZDsKLSAgICBSZWN0IG1fZnVsbHNj
cmVlblJlY3Q7Ci0gICAgUVRNb3ZpZVdpbkZ1bGxzY3JlZW5DbGllbnQqIG1fZnVsbHNjcmVlbkNs
aWVudDsKLSAgICBjaGFyKiBtX2Z1bGxzY3JlZW5SZXN0b3JlU3RhdGU7CiB9OwogCi1RVE1vdmll
V2luUHJpdmF0ZTo6UVRNb3ZpZVdpblByaXZhdGUoKQorUVRNb3ZpZVByaXZhdGU6OlFUTW92aWVQ
cml2YXRlKCkKICAgICA6IG1fbW92aWVXaW4oMCkKICAgICAsIG1fbW92aWUoMCkKICAgICAsIG1f
bW92aWVDb250cm9sbGVyKDApCiAgICAgLCBtX3Rhc2tpbmcoZmFsc2UpCi0gICAgLCBtX2NsaWVu
dCgwKQogICAgICwgbV9sb2FkU3RhdGUoMCkKICAgICAsIG1fZW5kZWQoZmFsc2UpCiAgICAgLCBt
X3NlZWtpbmcoZmFsc2UpCkBAIC0xNTAsMzUgKzExMCwyMiBAQCBRVE1vdmllV2luUHJpdmF0ZTo6
UVRNb3ZpZVdpblByaXZhdGUoKQogICAgICwgbV93aWR0aCgwKQogICAgICwgbV9oZWlnaHQoMCkK
ICAgICAsIG1fdmlzaWJsZShmYWxzZSkKLSAgICAsIG1fZ1dvcmxkKDApCi0gICAgLCBtX2dXb3Js
ZFdpZHRoKDApCi0gICAgLCBtX2dXb3JsZEhlaWdodCgwKQotICAgICwgbV9zYXZlZEdXb3JsZCgw
KQogICAgICwgbV9sb2FkRXJyb3IoMCkKICAgICAsIG1fd2lkdGhTY2FsZUZhY3RvcigxKQogICAg
ICwgbV9oZWlnaHRTY2FsZUZhY3RvcigxKQogICAgICwgbV9jdXJyZW50VVJMKDApCiAgICAgLCBt
X3RpbWVUb1Jlc3RvcmUoLTEuMGYpCiAgICAgLCBtX3JhdGVUb1Jlc3RvcmUoLTEuMGYpCisgICAg
LCBtX2Rpc2FibGVkKGZhbHNlKQogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICAsIG1fc2NhbGVD
YWNoZWQoZmFsc2UpCiAjZW5kaWYKLSAgICAsIG1fZnVsbHNjcmVlbldpbmRvdygwKQotICAgICwg
bV9mdWxsc2NyZWVuT3JpZ0dXb3JsZCgwKQotICAgICwgbV9mdWxsc2NyZWVuQ2xpZW50KDApCi0g
ICAgLCBtX2Z1bGxzY3JlZW5SZXN0b3JlU3RhdGUoMCkKIHsKLSAgICBSZWN0IHJlY3QgPSB7IDAs
IDAsIDAsIDAgfTsKLSAgICBtX2Z1bGxzY3JlZW5SZWN0ID0gcmVjdDsKIH0KIAotUVRNb3ZpZVdp
blByaXZhdGU6On5RVE1vdmllV2luUHJpdmF0ZSgpCitRVE1vdmllUHJpdmF0ZTo6flFUTW92aWVQ
cml2YXRlKCkKIHsKLSAgICBBU1NFUlQoIW1fZnVsbHNjcmVlbldpbmRvdyk7Ci0KICAgICBlbmRU
YXNrKCk7Ci0gICAgaWYgKG1fZ1dvcmxkKQotICAgICAgICBkZWxldGVHV29ybGQoKTsKICAgICBp
ZiAobV9tb3ZpZUNvbnRyb2xsZXIpCiAgICAgICAgIERpc3Bvc2VNb3ZpZUNvbnRyb2xsZXIobV9t
b3ZpZUNvbnRyb2xsZXIpOwogICAgIGlmIChtX21vdmllKQpAQCAtMTg3LDU5ICsxMzQsMjUgQEAg
UVRNb3ZpZVdpblByaXZhdGU6On5RVE1vdmllV2luUHJpdmF0ZSgpCiAgICAgICAgIENGUmVsZWFz
ZShtX2N1cnJlbnRVUkwpOwogfQogCi12b2lkIFFUTW92aWVXaW46OnRhc2tUaW1lckZpcmVkKCkK
LXsKLSAgICAvLyBUaGUgaGFzaCBjb250ZW50IG1pZ2h0IGNoYW5nZSBkdXJpbmcgdGFzaygpCi0g
ICAgVmVjdG9yPFFUTW92aWVXaW5Qcml2YXRlKj4gdGFza3M7Ci0gICAgY29weVRvVmVjdG9yKCpn
VGFza0xpc3QsIHRhc2tzKTsKLSAgICBzaXplX3QgY291bnQgPSB0YXNrcy5zaXplKCk7Ci0gICAg
Zm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IGNvdW50OyArK24pCi0gICAgICAgIHRhc2tzW25dLT50
YXNrKCk7Ci0KLSAgICB1cGRhdGVUYXNrVGltZXIoKTsKLX0KLQotdm9pZCBRVE1vdmllV2luUHJp
dmF0ZTo6c3RhcnRUYXNrKCkgCit2b2lkIFFUTW92aWVQcml2YXRlOjpzdGFydFRhc2soKSAKIHsK
LSAgICBpZiAobV90YXNraW5nKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFnVGFza0xpc3Qp
Ci0gICAgICAgIGdUYXNrTGlzdCA9IG5ldyBIYXNoU2V0PFFUTW92aWVXaW5Qcml2YXRlKj47Ci0g
ICAgZ1Rhc2tMaXN0LT5hZGQodGhpcyk7Ci0gICAgbV90YXNraW5nID0gdHJ1ZTsKLSAgICB1cGRh
dGVUYXNrVGltZXIoKTsKLX0KLQotdm9pZCBRVE1vdmllV2luUHJpdmF0ZTo6ZW5kVGFzaygpIAot
ewotICAgIGlmICghbV90YXNraW5nKQotICAgICAgICByZXR1cm47Ci0gICAgZ1Rhc2tMaXN0LT5y
ZW1vdmUodGhpcyk7Ci0gICAgbV90YXNraW5nID0gZmFsc2U7Ci0gICAgdXBkYXRlVGFza1RpbWVy
KCk7CisgICAgaWYgKCFtX3Rhc2tpbmcpIHsKKyAgICAgICAgUVRNb3ZpZVRhc2s6OnNoYXJlZFRh
c2soKS0+YWRkVGFza0NsaWVudCh0aGlzKTsKKyAgICAgICAgbV90YXNraW5nID0gdHJ1ZTsKKyAg
ICB9CisgICAgUVRNb3ZpZVRhc2s6OnNoYXJlZFRhc2soKS0+dXBkYXRlVGFza1RpbWVyKCk7CiB9
CiAKLXZvaWQgUVRNb3ZpZVdpblByaXZhdGU6OmNhY2hlTW92aWVTY2FsZSgpCit2b2lkIFFUTW92
aWVQcml2YXRlOjplbmRUYXNrKCkgCiB7Ci0gICAgUmVjdCBuYXR1cmFsUmVjdDsKLSAgICBSZWN0
IGluaXRpYWxSZWN0OwotCi0gICAgR2V0TW92aWVOYXR1cmFsQm91bmRzUmVjdChtX21vdmllLCAm
bmF0dXJhbFJlY3QpOwotICAgIEdldE1vdmllQm94KG1fbW92aWUsICZpbml0aWFsUmVjdCk7Ci0K
LSAgICBmbG9hdCBuYXR1cmFsV2lkdGggPSBuYXR1cmFsUmVjdC5yaWdodCAtIG5hdHVyYWxSZWN0
LmxlZnQ7Ci0gICAgZmxvYXQgbmF0dXJhbEhlaWdodCA9IG5hdHVyYWxSZWN0LmJvdHRvbSAtIG5h
dHVyYWxSZWN0LnRvcDsKLQotICAgIGlmIChuYXR1cmFsV2lkdGgpCi0gICAgICAgIG1fd2lkdGhT
Y2FsZUZhY3RvciA9IChpbml0aWFsUmVjdC5yaWdodCAtIGluaXRpYWxSZWN0LmxlZnQpIC8gbmF0
dXJhbFdpZHRoOwotICAgIGlmIChuYXR1cmFsSGVpZ2h0KQotICAgICAgICBtX2hlaWdodFNjYWxl
RmFjdG9yID0gKGluaXRpYWxSZWN0LmJvdHRvbSAtIGluaXRpYWxSZWN0LnRvcCkgLyBuYXR1cmFs
SGVpZ2h0OwotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICBtX3NjYWxlQ2FjaGVkID0gdHJ1ZTs7
Ci0jZW5kaWYKKyAgICBpZiAobV90YXNraW5nKSB7CisgICAgICAgIFFUTW92aWVUYXNrOjpzaGFy
ZWRUYXNrKCktPnJlbW92ZVRhc2tDbGllbnQodGhpcyk7CisgICAgICAgIG1fdGFza2luZyA9IGZh
bHNlOworICAgIH0KKyAgICBRVE1vdmllVGFzazo6c2hhcmVkVGFzaygpLT51cGRhdGVUYXNrVGlt
ZXIoKTsKIH0KIAotdm9pZCBRVE1vdmllV2luUHJpdmF0ZTo6dGFzaygpIAordm9pZCBRVE1vdmll
UHJpdmF0ZTo6dGFzaygpIAogewogICAgIEFTU0VSVChtX3Rhc2tpbmcpOwogCkBAIC0yNTYsMjMg
KzE2OSwxOSBAQCB2b2lkIFFUTW92aWVXaW5Qcml2YXRlOjp0YXNrKCkKICAgICAgICAgLy8gVGhp
cyBpcyBkaWZmZXJlbnQgZnJvbSBRVEtpdCBBUEkgYW5kIHNlZW1zIHN0cmFuZ2UuCiAgICAgICAg
IGxvbmcgbG9hZFN0YXRlID0gbV9sb2FkRXJyb3IgPyBRVE1vdmllTG9hZFN0YXRlRXJyb3IgOiBH
ZXRNb3ZpZUxvYWRTdGF0ZShtX21vdmllKTsKICAgICAgICAgaWYgKGxvYWRTdGF0ZSAhPSBtX2xv
YWRTdGF0ZSkgewotCiAgICAgICAgICAgICAvLyB3ZSBvbmx5IG5lZWQgdG8gZXJhc2UgdGhlIG1v
dmllIGd3b3JsZCB3aGVuIHRoZSBsb2FkIHN0YXRlIGNoYW5nZXMgdG8gbG9hZGVkIHdoaWxlIGl0
CiAgICAgICAgICAgICAvLyAgaXMgdmlzaWJsZSBhcyB0aGUgZ3dvcmxkIGlzIGRlc3Ryb3llZC9j
cmVhdGVkIHdoZW4gdmlzaWJpbGl0eSBjaGFuZ2VzCiAgICAgICAgICAgICBib29sIHNob3VsZFJl
c3RvcmVQbGF5YmFja1N0YXRlID0gZmFsc2U7CiAgICAgICAgICAgICBib29sIG1vdmllTmV3bHlQ
bGF5YWJsZSA9IGxvYWRTdGF0ZSA+PSBRVE1vdmllTG9hZFN0YXRlTG9hZGVkICYmIG1fbG9hZFN0
YXRlIDwgUVRNb3ZpZUxvYWRTdGF0ZUxvYWRlZDsKICAgICAgICAgICAgIG1fbG9hZFN0YXRlID0g
bG9hZFN0YXRlOwotICAgICAgICAgICAgaWYgKG1vdmllTmV3bHlQbGF5YWJsZSkgewotICAgICAg
ICAgICAgICAgIGNhY2hlTW92aWVTY2FsZSgpOwotICAgICAgICAgICAgICAgIHVwZGF0ZU1vdmll
U2l6ZSgpOwotICAgICAgICAgICAgICAgIGlmIChtX3Zpc2libGUpCi0gICAgICAgICAgICAgICAg
ICAgIGNsZWFyR1dvcmxkKCk7CisgICAgICAgICAgICBpZiAobW92aWVOZXdseVBsYXlhYmxlKQog
ICAgICAgICAgICAgICAgIHNob3VsZFJlc3RvcmVQbGF5YmFja1N0YXRlID0gdHJ1ZTsKLSAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKCFtX21vdmllQ29udHJvbGxlciAmJiBtX2xvYWRT
dGF0ZSA+PSBRVE1vdmllTG9hZFN0YXRlTG9hZGVkKQogICAgICAgICAgICAgICAgIGNyZWF0ZU1v
dmllQ29udHJvbGxlcigpOwotICAgICAgICAgICAgbV9jbGllbnQtPm1vdmllTG9hZFN0YXRlQ2hh
bmdlZChtX21vdmllV2luKTsKKworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X2NsaWVudHMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgbV9jbGllbnRzW2ldLT5tb3Zp
ZUxvYWRTdGF0ZUNoYW5nZWQobV9tb3ZpZVdpbik7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IGlmIChzaG91bGRSZXN0b3JlUGxheWJhY2tTdGF0ZSAmJiBtX3RpbWVUb1Jlc3RvcmUgIT0gLTEu
MGYpIHsKICAgICAgICAgICAgICAgICBtX21vdmllV2luLT5zZXRDdXJyZW50VGltZShtX3RpbWVU
b1Jlc3RvcmUpOwpAQCAtMjgxLDcgKzE5MCw3IEBAIHZvaWQgUVRNb3ZpZVdpblByaXZhdGU6OnRh
c2soKQogICAgICAgICAgICAgICAgIG1fcmF0ZVRvUmVzdG9yZSA9IC0xLjBmOwogICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICBpZiAobV9tb3ZpZVdpbi0+bV9kaXNhYmxlZCkgeworICAgICAg
ICAgICAgaWYgKG1fZGlzYWJsZWQpIHsKICAgICAgICAgICAgICAgICBlbmRUYXNrKCk7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQpAQCAtMjkyLDIzICsyMDEsMjcgQEAg
dm9pZCBRVE1vdmllV2luUHJpdmF0ZTo6dGFzaygpCiAgICAgYm9vbCBlbmRlZCA9ICEhSXNNb3Zp
ZURvbmUobV9tb3ZpZSk7CiAgICAgaWYgKGVuZGVkICE9IG1fZW5kZWQpIHsKICAgICAgICAgbV9l
bmRlZCA9IGVuZGVkOwotICAgICAgICBpZiAobV9jbGllbnQgJiYgZW5kZWQpCi0gICAgICAgICAg
ICBtX2NsaWVudC0+bW92aWVFbmRlZChtX21vdmllV2luKTsKKyAgICAgICAgaWYgKGVuZGVkKSB7
CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY2xpZW50cy5zaXplKCk7ICsr
aSkKKyAgICAgICAgICAgICAgIG1fY2xpZW50c1tpXS0+bW92aWVFbmRlZChtX21vdmllV2luKTsK
KyAgICAgICAgfQogICAgIH0KIAogICAgIGZsb2F0IHRpbWUgPSBtX21vdmllV2luLT5jdXJyZW50
VGltZSgpOwogICAgIGlmICh0aW1lIDwgbV9sYXN0TWVkaWFUaW1lIHx8IHRpbWUgPj0gbV9sYXN0
TWVkaWFUaW1lICsgY05vbkNvbnRpbnVvdXNUaW1lQ2hhbmdlIHx8IG1fc2Vla2luZykgewogICAg
ICAgICBtX3NlZWtpbmcgPSBmYWxzZTsKLSAgICAgICAgaWYgKG1fY2xpZW50KQotICAgICAgICAg
ICAgbV9jbGllbnQtPm1vdmllVGltZUNoYW5nZWQobV9tb3ZpZVdpbik7CisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV9jbGllbnRzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgbV9j
bGllbnRzW2ldLT5tb3ZpZVRpbWVDaGFuZ2VkKG1fbW92aWVXaW4pOwogICAgIH0KICAgICBtX2xh
c3RNZWRpYVRpbWUgPSB0aW1lOwogCiAgICAgaWYgKG1fbG9hZEVycm9yKQogICAgICAgICBlbmRU
YXNrKCk7CisgICAgZWxzZQorICAgICAgICBRVE1vdmllVGFzazo6c2hhcmVkVGFzaygpLT51cGRh
dGVUYXNrVGltZXIoKTsKIH0KIAotdm9pZCBRVE1vdmllV2luUHJpdmF0ZTo6Y3JlYXRlTW92aWVD
b250cm9sbGVyKCkKK3ZvaWQgUVRNb3ZpZVByaXZhdGU6OmNyZWF0ZU1vdmllQ29udHJvbGxlcigp
CiB7CiAgICAgUmVjdCBib3VuZHM7CiAgICAgbG9uZyBmbGFnczsKQEAgLTMyNCwxNTUgKzIzNywz
NiBAQCB2b2lkIFFUTW92aWVXaW5Qcml2YXRlOjpjcmVhdGVNb3ZpZUNvbnRyCiAgICAgbV9tb3Zp
ZUNvbnRyb2xsZXIgPSBOZXdNb3ZpZUNvbnRyb2xsZXIobV9tb3ZpZSwgJmJvdW5kcywgZmxhZ3Mp
OwogICAgIGlmICghbV9tb3ZpZUNvbnRyb2xsZXIpCiAgICAgICAgIHJldHVybjsKLQotICAgIE1D
U2V0Q29udHJvbGxlclBvcnQobV9tb3ZpZUNvbnRyb2xsZXIsIG1fZ1dvcmxkKTsKLSAgICBNQ1Nl
dENvbnRyb2xsZXJBdHRhY2hlZChtX21vdmllQ29udHJvbGxlciwgZmFsc2UpOwotfQotCi12b2lk
IFFUTW92aWVXaW5Qcml2YXRlOjpyZWdpc3RlckRyYXdpbmdDYWxsYmFjaygpCi17Ci0gICAgVXBw
UGFyYW0gcGFyYW07Ci0gICAgcGFyYW0ucHRyID0gdGhpczsKLSAgICBTZXRNb3ZpZURyYXdpbmdD
b21wbGV0ZVByb2MobV9tb3ZpZSwgbW92aWVEcmF3aW5nQ2FsbFdoZW5DaGFuZ2VkLCBnTW92aWVE
cmF3aW5nQ29tcGxldGVVUFAsIHBhcmFtLmxvbmdWYWx1ZSk7Ci19Ci0KLXZvaWQgUVRNb3ZpZVdp
blByaXZhdGU6OmRyYXdpbmdDb21wbGV0ZSgpCi17Ci0gICAgaWYgKCFtX2dXb3JsZCB8fCBtX21v
dmllV2luLT5tX2Rpc2FibGVkIHx8IG1fbG9hZFN0YXRlIDwgUVRNb3ZpZUxvYWRTdGF0ZUxvYWRl
ZCkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY2xpZW50LT5tb3ZpZU5ld0ltYWdlQXZhaWxhYmxl
KG1fbW92aWVXaW4pOwogfQogCi12b2lkIFFUTW92aWVXaW5Qcml2YXRlOjp1cGRhdGVHV29ybGQo
KQorUVRNb3ZpZTo6UVRNb3ZpZShRVE1vdmllQ2xpZW50KiBjbGllbnQpCisgICAgOiBtX3ByaXZh
dGUobmV3IFFUTW92aWVQcml2YXRlKCkpCiB7Ci0gICAgYm9vbCBzaG91bGRCZVZpc2libGUgPSBt
X3Zpc2libGU7Ci0gICAgaWYgKCFtX2hlaWdodCB8fCAhbV93aWR0aCkKLSAgICAgICAgc2hvdWxk
QmVWaXNpYmxlID0gZmFsc2U7Ci0KLSAgICBpZiAoc2hvdWxkQmVWaXNpYmxlICYmICFtX2dXb3Js
ZCkKLSAgICAgICAgY3JlYXRlR1dvcmxkKCk7Ci0gICAgZWxzZSBpZiAoIXNob3VsZEJlVmlzaWJs
ZSAmJiBtX2dXb3JsZCkKLSAgICAgICAgZGVsZXRlR1dvcmxkKCk7Ci0gICAgZWxzZSBpZiAobV9n
V29ybGQgJiYgKG1fd2lkdGggPiBtX2dXb3JsZFdpZHRoIHx8IG1faGVpZ2h0ID4gbV9nV29ybGRI
ZWlnaHQpKSB7Ci0gICAgICAgIC8vIG5lZWQgYSBiaWdnZXIsIGJldHRlciBnV29ybGQKLSAgICAg
ICAgZGVsZXRlR1dvcmxkKCk7Ci0gICAgICAgIGNyZWF0ZUdXb3JsZCgpOwotICAgIH0KLX0KLQot
dm9pZCBRVE1vdmllV2luUHJpdmF0ZTo6Y3JlYXRlR1dvcmxkKCkKLXsKLSAgICBBU1NFUlQoIW1f
Z1dvcmxkKTsKLSAgICBpZiAoIW1fbW92aWUgfHwgbV9sb2FkU3RhdGUgPCBRVE1vdmllTG9hZFN0
YXRlTG9hZGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2dXb3JsZFdpZHRoID0gbWF4KGNH
V29ybGRNaW5XaWR0aCwgbV93aWR0aCk7Ci0gICAgbV9nV29ybGRIZWlnaHQgPSBtYXgoY0dXb3Js
ZE1pbkhlaWdodCwgbV9oZWlnaHQpOwotICAgIFJlY3QgYm91bmRzOyAKLSAgICBib3VuZHMudG9w
ID0gMDsKLSAgICBib3VuZHMubGVmdCA9IDA7IAotICAgIGJvdW5kcy5yaWdodCA9IG1fZ1dvcmxk
V2lkdGg7Ci0gICAgYm91bmRzLmJvdHRvbSA9IG1fZ1dvcmxkSGVpZ2h0OwotICAgIE9TRXJyIGVy
ciA9IFFUTmV3R1dvcmxkKCZtX2dXb3JsZCwgazMyQkdSQVBpeGVsRm9ybWF0LCAmYm91bmRzLCAw
LCAwLCAwKTsgCi0gICAgaWYgKGVycikgCi0gICAgICAgIHJldHVybjsKLSAgICBHZXRNb3ZpZUdX
b3JsZChtX21vdmllLCAmbV9zYXZlZEdXb3JsZCwgMCk7Ci0gICAgaWYgKG1fbW92aWVDb250cm9s
bGVyKQotICAgICAgICBNQ1NldENvbnRyb2xsZXJQb3J0KG1fbW92aWVDb250cm9sbGVyLCBtX2dX
b3JsZCk7Ci0gICAgU2V0TW92aWVHV29ybGQobV9tb3ZpZSwgbV9nV29ybGQsIDApOwotICAgIGJv
dW5kcy5yaWdodCA9IG1fd2lkdGg7Ci0gICAgYm91bmRzLmJvdHRvbSA9IG1faGVpZ2h0OwotICAg
IGlmIChtX21vdmllQ29udHJvbGxlcikKLSAgICAgICAgTUNTZXRDb250cm9sbGVyQm91bmRzUmVj
dChtX21vdmllQ29udHJvbGxlciwgJmJvdW5kcyk7Ci0gICAgU2V0TW92aWVCb3gobV9tb3ZpZSwg
JmJvdW5kcyk7Ci19Ci0KLXZvaWQgUVRNb3ZpZVdpblByaXZhdGU6OmNsZWFyR1dvcmxkKCkKLXsK
LSAgICBpZiAoIW1fbW92aWV8fCFtX2dXb3JsZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3Jh
ZlB0ciBzYXZlUG9ydDsKLSAgICBHZXRQb3J0KCZzYXZlUG9ydCk7IAotICAgIE1hY1NldFBvcnQo
KEdyYWZQdHIpbV9nV29ybGQpOwotCi0gICAgUmVjdCBib3VuZHM7IAotICAgIGJvdW5kcy50b3Ag
PSAwOwotICAgIGJvdW5kcy5sZWZ0ID0gMDsgCi0gICAgYm91bmRzLnJpZ2h0ID0gbV9nV29ybGRX
aWR0aDsKLSAgICBib3VuZHMuYm90dG9tID0gbV9nV29ybGRIZWlnaHQ7Ci0gICAgRXJhc2VSZWN0
KCZib3VuZHMpOwotCi0gICAgTWFjU2V0UG9ydChzYXZlUG9ydCk7Ci19Ci0KLXZvaWQgUVRNb3Zp
ZVdpblByaXZhdGU6OnNldFNpemUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQotewotICAgIGlmICht
X3dpZHRoID09IHdpZHRoICYmIG1faGVpZ2h0ID09IGhlaWdodCkKLSAgICAgICAgcmV0dXJuOwot
ICAgIG1fd2lkdGggPSB3aWR0aDsKLSAgICBtX2hlaWdodCA9IGhlaWdodDsKLQotICAgIC8vIERv
IG5vdCBjaGFuZ2UgbW92aWUgYm94IGJlZm9yZSByZWFjaGluZyBsb2FkIHN0YXRlIGxvYWRlZCBh
cyB3ZSBncmFiCi0gICAgLy8gdGhlIGluaXRpYWwgc2l6ZSB3aGVuIHRhc2soKSBzZWVzIHRoYXQg
c3RhdGUgZm9yIHRoZSBmaXJzdCB0aW1lLCBhbmQKLSAgICAvLyB3ZSBuZWVkIHRoZSBpbml0aWFs
IHNpemUgdG8gYmUgYWJsZSB0byBzY2FsZSBtb3ZpZSBwcm9wZXJseS4gCi0gICAgaWYgKCFtX21v
dmllIHx8IG1fbG9hZFN0YXRlIDwgUVRNb3ZpZUxvYWRTdGF0ZUxvYWRlZCkKLSAgICAgICAgcmV0
dXJuOwotCi0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIEFTU0VSVChtX3NjYWxlQ2FjaGVkKTsK
LSNlbmRpZgotCi0gICAgdXBkYXRlTW92aWVTaXplKCk7CisgICAgbV9wcml2YXRlLT5tX21vdmll
V2luID0gdGhpczsKKyAgICBpZiAoY2xpZW50KQorICAgICAgICBtX3ByaXZhdGUtPm1fY2xpZW50
cy5hcHBlbmQoY2xpZW50KTsKKyAgICBpbml0aWFsaXplUXVpY2tUaW1lKCk7CiB9CiAKLXZvaWQg
UVRNb3ZpZVdpblByaXZhdGU6OnVwZGF0ZU1vdmllU2l6ZSgpCitRVE1vdmllOjp+UVRNb3ZpZSgp
CiB7Ci0gICAgaWYgKCFtX21vdmllIHx8IG1fbG9hZFN0YXRlIDwgUVRNb3ZpZUxvYWRTdGF0ZUxv
YWRlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVjdCBib3VuZHM7IAotICAgIGJvdW5kcy50
b3AgPSAwOwotICAgIGJvdW5kcy5sZWZ0ID0gMDsgCi0gICAgYm91bmRzLnJpZ2h0ID0gbV93aWR0
aDsKLSAgICBib3VuZHMuYm90dG9tID0gbV9oZWlnaHQ7Ci0gICAgaWYgKG1fbW92aWVDb250cm9s
bGVyKQotICAgICAgICBNQ1NldENvbnRyb2xsZXJCb3VuZHNSZWN0KG1fbW92aWVDb250cm9sbGVy
LCAmYm91bmRzKTsKLSAgICBTZXRNb3ZpZUJveChtX21vdmllLCAmYm91bmRzKTsKLSAgICB1cGRh
dGVHV29ybGQoKTsKKyAgICBkZWxldGUgbV9wcml2YXRlOwogfQogCi0KLXZvaWQgUVRNb3ZpZVdp
blByaXZhdGU6OmRlbGV0ZUdXb3JsZCgpCit2b2lkIFFUTW92aWU6OmFkZENsaWVudChRVE1vdmll
Q2xpZW50KiBjbGllbnQpCiB7Ci0gICAgQVNTRVJUKG1fZ1dvcmxkKTsKLSAgICBpZiAobV9tb3Zp
ZUNvbnRyb2xsZXIpCi0gICAgICAgIE1DU2V0Q29udHJvbGxlclBvcnQobV9tb3ZpZUNvbnRyb2xs
ZXIsIG1fc2F2ZWRHV29ybGQpOwotICAgIGlmIChtX21vdmllKQotICAgICAgICBTZXRNb3ZpZUdX
b3JsZChtX21vdmllLCBtX3NhdmVkR1dvcmxkLCAwKTsKLSAgICBtX3NhdmVkR1dvcmxkID0gMDsK
LSAgICBEaXNwb3NlR1dvcmxkKG1fZ1dvcmxkKTsgCi0gICAgbV9nV29ybGQgPSAwOwotICAgIG1f
Z1dvcmxkV2lkdGggPSAwOwotICAgIG1fZ1dvcmxkSGVpZ2h0ID0gMDsKKyAgICBpZiAoY2xpZW50
KQorICAgICAgICBtX3ByaXZhdGUtPm1fY2xpZW50cy5hcHBlbmQoY2xpZW50KTsKIH0KIAotCi1R
VE1vdmllV2luOjpRVE1vdmllV2luKFFUTW92aWVXaW5DbGllbnQqIGNsaWVudCkKLSAgICA6IG1f
cHJpdmF0ZShuZXcgUVRNb3ZpZVdpblByaXZhdGUoKSkKLSAgICAsIG1fZGlzYWJsZWQoZmFsc2Up
Cit2b2lkIFFUTW92aWU6OnJlbW92ZUNsaWVudChRVE1vdmllQ2xpZW50KiBjbGllbnQpCiB7Ci0g
ICAgbV9wcml2YXRlLT5tX21vdmllV2luID0gdGhpczsKLSAgICBtX3ByaXZhdGUtPm1fY2xpZW50
ID0gY2xpZW50OwotICAgIGluaXRpYWxpemVRdWlja1RpbWUoKTsKKyAgICBzaXplX3QgaW5kZXhP
ZkNsaWVudCA9IG1fcHJpdmF0ZS0+bV9jbGllbnRzLmZpbmQoY2xpZW50KTsKKyAgICBpZiAoaW5k
ZXhPZkNsaWVudCA+PSAwKQorICAgICAgICBtX3ByaXZhdGUtPm1fY2xpZW50cy5yZW1vdmUoaW5k
ZXhPZkNsaWVudCk7CiB9CiAKLVFUTW92aWVXaW46On5RVE1vdmllV2luKCkKLXsKLSAgICBkZWxl
dGUgbV9wcml2YXRlOwotfQotCi12b2lkIFFUTW92aWVXaW46OnBsYXkoKQordm9pZCBRVE1vdmll
OjpwbGF5KCkKIHsKICAgICBtX3ByaXZhdGUtPm1fdGltZVRvUmVzdG9yZSA9IC0xLjBmOwogCkBA
IC00ODMsNyArMjc3LDcgQEAgdm9pZCBRVE1vdmllV2luOjpwbGF5KCkKICAgICBtX3ByaXZhdGUt
PnN0YXJ0VGFzaygpOwogfQogCi12b2lkIFFUTW92aWVXaW46OnBhdXNlKCkKK3ZvaWQgUVRNb3Zp
ZTo6cGF1c2UoKQogewogICAgIG1fcHJpdmF0ZS0+bV90aW1lVG9SZXN0b3JlID0gLTEuMGY7CiAK
QEAgLTQ5MSwxNyArMjg1LDE3IEBAIHZvaWQgUVRNb3ZpZVdpbjo6cGF1c2UoKQogICAgICAgICBN
Q0RvQWN0aW9uKG1fcHJpdmF0ZS0+bV9tb3ZpZUNvbnRyb2xsZXIsIG1jQWN0aW9uUGxheSwgMCk7
CiAgICAgZWxzZQogICAgICAgICBTdG9wTW92aWUobV9wcml2YXRlLT5tX21vdmllKTsKLSAgICB1
cGRhdGVUYXNrVGltZXIoKTsKKyAgICBRVE1vdmllVGFzazo6c2hhcmVkVGFzaygpLT51cGRhdGVU
YXNrVGltZXIoKTsKIH0KIAotZmxvYXQgUVRNb3ZpZVdpbjo6cmF0ZSgpIGNvbnN0CitmbG9hdCBR
VE1vdmllOjpyYXRlKCkgY29uc3QKIHsKICAgICBpZiAoIW1fcHJpdmF0ZS0+bV9tb3ZpZSkKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIEZpeGVkVG9GbG9hdChHZXRNb3ZpZVJhdGUobV9w
cml2YXRlLT5tX21vdmllKSk7CiB9CiAKLXZvaWQgUVRNb3ZpZVdpbjo6c2V0UmF0ZShmbG9hdCBy
YXRlKQordm9pZCBRVE1vdmllOjpzZXRSYXRlKGZsb2F0IHJhdGUpCiB7CiAgICAgaWYgKCFtX3By
aXZhdGUtPm1fbW92aWUpCiAgICAgICAgIHJldHVybjsgICAgCkBAIC01MTEsMTAgKzMwNSwxMCBA
QCB2b2lkIFFUTW92aWVXaW46OnNldFJhdGUoZmxvYXQgcmF0ZSkKICAgICAgICAgTUNEb0FjdGlv
bihtX3ByaXZhdGUtPm1fbW92aWVDb250cm9sbGVyLCBtY0FjdGlvblByZXJvbGxBbmRQbGF5LCAo
dm9pZCAqKUZsb2F0VG9GaXhlZChyYXRlKSk7CiAgICAgZWxzZQogICAgICAgICBTZXRNb3ZpZVJh
dGUobV9wcml2YXRlLT5tX21vdmllLCBGbG9hdFRvRml4ZWQocmF0ZSkpOwotICAgIHVwZGF0ZVRh
c2tUaW1lcigpOworICAgIFFUTW92aWVUYXNrOjpzaGFyZWRUYXNrKCktPnVwZGF0ZVRhc2tUaW1l
cigpOwogfQogCi1mbG9hdCBRVE1vdmllV2luOjpkdXJhdGlvbigpIGNvbnN0CitmbG9hdCBRVE1v
dmllOjpkdXJhdGlvbigpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3ByaXZhdGUtPm1fbW92aWUpCiAg
ICAgICAgIHJldHVybiAwOwpAQCAtNTIzLDcgKzMxNyw3IEBAIGZsb2F0IFFUTW92aWVXaW46OmR1
cmF0aW9uKCkgY29uc3QKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZhbCkgLyBzY2Fs
ZTsKIH0KIAotZmxvYXQgUVRNb3ZpZVdpbjo6Y3VycmVudFRpbWUoKSBjb25zdAorZmxvYXQgUVRN
b3ZpZTo6Y3VycmVudFRpbWUoKSBjb25zdAogewogICAgIGlmICghbV9wcml2YXRlLT5tX21vdmll
KQogICAgICAgICByZXR1cm4gMDsKQEAgLTUzMiw3ICszMjYsNyBAQCBmbG9hdCBRVE1vdmllV2lu
OjpjdXJyZW50VGltZSgpIGNvbnN0CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih2YWwp
IC8gc2NhbGU7CiB9CiAKLXZvaWQgUVRNb3ZpZVdpbjo6c2V0Q3VycmVudFRpbWUoZmxvYXQgdGlt
ZSkgY29uc3QKK3ZvaWQgUVRNb3ZpZTo6c2V0Q3VycmVudFRpbWUoZmxvYXQgdGltZSkgY29uc3QK
IHsKICAgICBpZiAoIW1fcHJpdmF0ZS0+bV9tb3ZpZSkKICAgICAgICAgcmV0dXJuOwpAQCAtNTQx
LDIyICszMzUsMjIgQEAgdm9pZCBRVE1vdmllV2luOjpzZXRDdXJyZW50VGltZShmbG9hdCB0aQog
ICAgIAogICAgIG1fcHJpdmF0ZS0+bV9zZWVraW5nID0gdHJ1ZTsKICAgICBUaW1lU2NhbGUgc2Nh
bGUgPSBHZXRNb3ZpZVRpbWVTY2FsZShtX3ByaXZhdGUtPm1fbW92aWUpOwotICAgIGlmIChtX3By
aXZhdGUtPm1fbW92aWVDb250cm9sbGVyKXsKKyAgICBpZiAobV9wcml2YXRlLT5tX21vdmllQ29u
dHJvbGxlcikgewogICAgICAgICBRVFJlc3RhcnRBdFRpbWVSZWNvcmQgcmVzdGFydCA9IHsgdGlt
ZSAqIHNjYWxlICwgMCB9OwogICAgICAgICBNQ0RvQWN0aW9uKG1fcHJpdmF0ZS0+bV9tb3ZpZUNv
bnRyb2xsZXIsIG1jQWN0aW9uUmVzdGFydEF0VGltZSwgKHZvaWQgKikmcmVzdGFydCk7CiAgICAg
fSBlbHNlCiAgICAgICAgIFNldE1vdmllVGltZVZhbHVlKG1fcHJpdmF0ZS0+bV9tb3ZpZSwgVGlt
ZVZhbHVlKHRpbWUgKiBzY2FsZSkpOwotICAgIHVwZGF0ZVRhc2tUaW1lcigpOworICAgIFFUTW92
aWVUYXNrOjpzaGFyZWRUYXNrKCktPnVwZGF0ZVRhc2tUaW1lcigpOwogfQogCi12b2lkIFFUTW92
aWVXaW46OnNldFZvbHVtZShmbG9hdCB2b2x1bWUpCit2b2lkIFFUTW92aWU6OnNldFZvbHVtZShm
bG9hdCB2b2x1bWUpCiB7CiAgICAgaWYgKCFtX3ByaXZhdGUtPm1fbW92aWUpCiAgICAgICAgIHJl
dHVybjsKICAgICBTZXRNb3ZpZVZvbHVtZShtX3ByaXZhdGUtPm1fbW92aWUsIHN0YXRpY19jYXN0
PHNob3J0Pih2b2x1bWUgKiAyNTYpKTsKIH0KIAotdm9pZCBRVE1vdmllV2luOjpzZXRQcmVzZXJ2
ZXNQaXRjaChib29sIHByZXNlcnZlc1BpdGNoKQordm9pZCBRVE1vdmllOjpzZXRQcmVzZXJ2ZXNQ
aXRjaChib29sIHByZXNlcnZlc1BpdGNoKQogewogICAgIGlmICghbV9wcml2YXRlLT5tX21vdmll
IHx8ICFtX3ByaXZhdGUtPm1fY3VycmVudFVSTCkKICAgICAgICAgcmV0dXJuOwpAQCAtNTc1LDE0
ICszNjksMTQgQEAgdm9pZCBRVE1vdmllV2luOjpzZXRQcmVzZXJ2ZXNQaXRjaChib29sCiAgICAg
bG9hZChtX3ByaXZhdGUtPm1fY3VycmVudFVSTCwgcHJlc2VydmVzUGl0Y2gpOwogfQogCi11bnNp
Z25lZCBRVE1vdmllV2luOjpkYXRhU2l6ZSgpIGNvbnN0Cit1bnNpZ25lZCBRVE1vdmllOjpkYXRh
U2l6ZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3ByaXZhdGUtPm1fbW92aWUpCiAgICAgICAgIHJl
dHVybiAwOwogICAgIHJldHVybiBHZXRNb3ZpZURhdGFTaXplKG1fcHJpdmF0ZS0+bV9tb3ZpZSwg
MCwgR2V0TW92aWVEdXJhdGlvbihtX3ByaXZhdGUtPm1fbW92aWUpKTsKIH0KIAotZmxvYXQgUVRN
b3ZpZVdpbjo6bWF4VGltZUxvYWRlZCgpIGNvbnN0CitmbG9hdCBRVE1vdmllOjptYXhUaW1lTG9h
ZGVkKCkgY29uc3QKIHsKICAgICBpZiAoIW1fcHJpdmF0ZS0+bV9tb3ZpZSkKICAgICAgICAgcmV0
dXJuIDA7CkBAIC01OTIsMTIgKzM4NiwxMiBAQCBmbG9hdCBRVE1vdmllV2luOjptYXhUaW1lTG9h
ZGVkKCkgY29uc3QKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZhbCkgLyBzY2FsZTsK
IH0KIAotbG9uZyBRVE1vdmllV2luOjpsb2FkU3RhdGUoKSBjb25zdAorbG9uZyBRVE1vdmllOjps
b2FkU3RhdGUoKSBjb25zdAogewogICAgIHJldHVybiBtX3ByaXZhdGUtPm1fbG9hZFN0YXRlOwog
fQogCi12b2lkIFFUTW92aWVXaW46OmdldE5hdHVyYWxTaXplKGludCYgd2lkdGgsIGludCYgaGVp
Z2h0KQordm9pZCBRVE1vdmllOjpnZXROYXR1cmFsU2l6ZShpbnQmIHdpZHRoLCBpbnQmIGhlaWdo
dCkKIHsKICAgICBSZWN0IHJlY3QgPSB7IDAsIH07CiAKQEAgLTYwNyw1NiArNDAxLDcgQEAgdm9p
ZCBRVE1vdmllV2luOjpnZXROYXR1cmFsU2l6ZShpbnQmIHdpZAogICAgIGhlaWdodCA9IChyZWN0
LmJvdHRvbSAtIHJlY3QudG9wKSAqIG1fcHJpdmF0ZS0+bV9oZWlnaHRTY2FsZUZhY3RvcjsKIH0K
IAotdm9pZCBRVE1vdmllV2luOjpzZXRTaXplKGludCB3aWR0aCwgaW50IGhlaWdodCkKLXsKLSAg
ICBtX3ByaXZhdGUtPnNldFNpemUod2lkdGgsIGhlaWdodCk7Ci0gICAgdXBkYXRlVGFza1RpbWVy
KDApOwotfQotCi12b2lkIFFUTW92aWVXaW46OnNldFZpc2libGUoYm9vbCBiKQotewotICAgIG1f
cHJpdmF0ZS0+bV92aXNpYmxlID0gYjsKLSAgICBtX3ByaXZhdGUtPnVwZGF0ZUdXb3JsZCgpOwot
fQotCi12b2lkIFFUTW92aWVXaW46OmdldEN1cnJlbnRGcmFtZUluZm8odm9pZComIGJ1ZmZlciwg
dW5zaWduZWQmIGJpdHNQZXJQaXhlbCwgdW5zaWduZWQmIHJvd0J5dGVzLCB1bnNpZ25lZCYgd2lk
dGgsIHVuc2lnbmVkJiBoZWlnaHQpCi17Ci0gICAgaWYgKCFtX3ByaXZhdGUtPm1fZ1dvcmxkKSB7
Ci0gICAgICAgIGJ1ZmZlciA9IDA7Ci0gICAgICAgIGJpdHNQZXJQaXhlbCA9IDA7Ci0gICAgICAg
IHJvd0J5dGVzID0gMDsKLSAgICAgICAgd2lkdGggPSAwOwotICAgICAgICBoZWlnaHQgPSAwOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIFBpeE1hcEhhbmRsZSBvZmZzY3JlZW5QaXhNYXAg
PSBHZXRHV29ybGRQaXhNYXAobV9wcml2YXRlLT5tX2dXb3JsZCk7Ci0gICAgYnVmZmVyID0gKCpv
ZmZzY3JlZW5QaXhNYXApLT5iYXNlQWRkcjsKLSAgICBiaXRzUGVyUGl4ZWwgPSAoKm9mZnNjcmVl
blBpeE1hcCktPnBpeGVsU2l6ZTsKLSAgICByb3dCeXRlcyA9ICgqb2Zmc2NyZWVuUGl4TWFwKS0+
cm93Qnl0ZXMgJiAweDNGRkY7Ci0gICAgd2lkdGggPSBtX3ByaXZhdGUtPm1fd2lkdGg7Ci0gICAg
aGVpZ2h0ID0gbV9wcml2YXRlLT5tX2hlaWdodDsKLX0KLQotdm9pZCBRVE1vdmllV2luOjpwYWlu
dChIREMgaGRjLCBpbnQgeCwgaW50IHkpCi17Ci0gICAgaWYgKCFtX3ByaXZhdGUtPm1fZ1dvcmxk
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBIREMgaGRjU3JjID0gc3RhdGljX2Nhc3Q8SERDPihH
ZXRQb3J0SERDKHJlaW50ZXJwcmV0X2Nhc3Q8R3JhZlB0cj4obV9wcml2YXRlLT5tX2dXb3JsZCkp
KTsgCi0gICAgaWYgKCFoZGNTcmMpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEZJWE1FOiBJ
ZiB3ZSBjb3VsZCBkZXRlcm1pbmUgdGhlIG1vdmllIGhhcyBubyBhbHBoYSwgd2UgY291bGQgdXNl
IEJpdEJsdCBmb3IgdGhvc2UgY2FzZXMsIHdoaWNoIG1pZ2h0IGJlIGZhc3Rlci4KLSAgICBCTEVO
REZVTkNUSU9OIGJsZW5kRnVuY3Rpb247IAotICAgIGJsZW5kRnVuY3Rpb24uQmxlbmRPcCA9IEFD
X1NSQ19PVkVSOwotICAgIGJsZW5kRnVuY3Rpb24uQmxlbmRGbGFncyA9IDA7Ci0gICAgYmxlbmRG
dW5jdGlvbi5Tb3VyY2VDb25zdGFudEFscGhhID0gMjU1OwotICAgIGJsZW5kRnVuY3Rpb24uQWxw
aGFGb3JtYXQgPSBBQ19TUkNfQUxQSEE7Ci0gICAgQWxwaGFCbGVuZChoZGMsIHgsIHksIG1fcHJp
dmF0ZS0+bV93aWR0aCwgbV9wcml2YXRlLT5tX2hlaWdodCwgaGRjU3JjLCAKLSAgICAgICAgIDAs
IDAsIG1fcHJpdmF0ZS0+bV93aWR0aCwgbV9wcml2YXRlLT5tX2hlaWdodCwgYmxlbmRGdW5jdGlv
bik7Ci19Ci0KLXZvaWQgUVRNb3ZpZVdpbjo6bG9hZChjb25zdCBVQ2hhciogdXJsLCBpbnQgbGVu
LCBib29sIHByZXNlcnZlc1BpdGNoKQordm9pZCBRVE1vdmllOjpsb2FkKGNvbnN0IFVDaGFyKiB1
cmwsIGludCBsZW4sIGJvb2wgcHJlc2VydmVzUGl0Y2gpCiB7CiAgICAgQ0ZTdHJpbmdSZWYgdXJs
U3RyaW5nUmVmID0gQ0ZTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycyhrQ0ZBbGxvY2F0b3JEZWZh
dWx0LCByZWludGVycHJldF9jYXN0PGNvbnN0IFVuaUNoYXIqPih1cmwpLCBsZW4pOwogICAgIENG
VVJMUmVmIGNmVVJMID0gQ0ZVUkxDcmVhdGVXaXRoU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQs
IHVybFN0cmluZ1JlZiwgMCk7CkBAIC02NjcsMTUgKzQxMiwxMyBAQCB2b2lkIFFUTW92aWVXaW46
OmxvYWQoY29uc3QgVUNoYXIqIHVybCwKICAgICBDRlJlbGVhc2UodXJsU3RyaW5nUmVmKTsKIH0K
IAotdm9pZCBRVE1vdmllV2luOjpsb2FkKENGVVJMUmVmIHVybCwgYm9vbCBwcmVzZXJ2ZXNQaXRj
aCkKK3ZvaWQgUVRNb3ZpZTo6bG9hZChDRlVSTFJlZiB1cmwsIGJvb2wgcHJlc2VydmVzUGl0Y2gp
CiB7CiAgICAgaWYgKCF1cmwpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChtX3ByaXZhdGUt
Pm1fbW92aWUpIHsKICAgICAgICAgbV9wcml2YXRlLT5lbmRUYXNrKCk7Ci0gICAgICAgIGlmICht
X3ByaXZhdGUtPm1fZ1dvcmxkKQotICAgICAgICAgICAgbV9wcml2YXRlLT5kZWxldGVHV29ybGQo
KTsKICAgICAgICAgaWYgKG1fcHJpdmF0ZS0+bV9tb3ZpZUNvbnRyb2xsZXIpCiAgICAgICAgICAg
ICBEaXNwb3NlTW92aWVDb250cm9sbGVyKG1fcHJpdmF0ZS0+bV9tb3ZpZUNvbnRyb2xsZXIpOwog
ICAgICAgICBtX3ByaXZhdGUtPm1fbW92aWVDb250cm9sbGVyID0gMDsKQEAgLTc2OCwxNCArNTEx
LDE0IEBAIHZvaWQgUVRNb3ZpZVdpbjo6bG9hZChDRlVSTFJlZiB1cmwsIGJvb2wKICAgICBtb3Zp
ZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wU3RhdHVzID0gMDsgCiAgICAgbW92aWVQcm9wQ291
bnQrKzsgCiAKLSAgICBBU1NFUlQobW92aWVQcm9wQ291bnQgPD0gc2l6ZW9mKG1vdmllUHJvcHMp
L3NpemVvZihtb3ZpZVByb3BzWzBdKSk7CisgICAgQVNTRVJUKG1vdmllUHJvcENvdW50IDw9IHNp
emVvZihtb3ZpZVByb3BzKSAvIHNpemVvZihtb3ZpZVByb3BzWzBdKSk7CiAgICAgbV9wcml2YXRl
LT5tX2xvYWRFcnJvciA9IE5ld01vdmllRnJvbVByb3BlcnRpZXMobW92aWVQcm9wQ291bnQsIG1v
dmllUHJvcHMsIDAsIDAsICZtX3ByaXZhdGUtPm1fbW92aWUpOwogCiBlbmQ6CiAgICAgbV9wcml2
YXRlLT5zdGFydFRhc2soKTsKICAgICAvLyBnZXQgdGhlIGxvYWQgZmFpbCBjYWxsYmFjayBxdWlj
a2x5IAogICAgIGlmIChtX3ByaXZhdGUtPm1fbG9hZEVycm9yKQotICAgICAgICB1cGRhdGVUYXNr
VGltZXIoMCk7CisgICAgICAgIFFUTW92aWVUYXNrOjpzaGFyZWRUYXNrKCktPnVwZGF0ZVRhc2tU
aW1lcigwKTsKICAgICBlbHNlIHsKICAgICAgICAgT1NUeXBlIG1vZGUgPSBrUVRBcGVydHVyZU1v
ZGVfQ2xlYW5BcGVydHVyZTsKIApAQCAtNzg0LDExICs1MjcsMTAgQEAgZW5kOgogICAgICAgICAv
LyB0aGUgaW5zdGFsbGVkIHZlcnNpb24gb2YgUVQgZG9lc24ndCBzdXBwb3J0IGl0IGFuZCBpdCBp
c24ndCBzZXJpb3VzIGVub3VnaCB0byAKICAgICAgICAgLy8gd2FycmFudCBmYWlsaW5nLgogICAg
ICAgICBRVFNldE1vdmllUHJvcGVydHkobV9wcml2YXRlLT5tX21vdmllLCBrUVRQcm9wZXJ0eUNs
YXNzX1Zpc3VhbCwga1FUVmlzdWFsUHJvcGVydHlJRF9BcGVydHVyZU1vZGUsIHNpemVvZihtb2Rl
KSwgJm1vZGUpOwotICAgICAgICBtX3ByaXZhdGUtPnJlZ2lzdGVyRHJhd2luZ0NhbGxiYWNrKCk7
CiAgICAgfQogfQogCi12b2lkIFFUTW92aWVXaW46OmRpc2FibGVVbnN1cHBvcnRlZFRyYWNrcyh1
bnNpZ25lZCYgZW5hYmxlZFRyYWNrQ291bnQsIHVuc2lnbmVkJiB0b3RhbFRyYWNrQ291bnQpCit2
b2lkIFFUTW92aWU6OmRpc2FibGVVbnN1cHBvcnRlZFRyYWNrcyh1bnNpZ25lZCYgZW5hYmxlZFRy
YWNrQ291bnQsIHVuc2lnbmVkJiB0b3RhbFRyYWNrQ291bnQpCiB7CiAgICAgaWYgKCFtX3ByaXZh
dGUtPm1fbW92aWUpIHsKICAgICAgICAgdG90YWxUcmFja0NvdW50ID0gMDsKQEAgLTkwMywyMCAr
NjQ1LDI1IEBAIHZvaWQgUVRNb3ZpZVdpbjo6ZGlzYWJsZVVuc3VwcG9ydGVkVHJhY2sKICAgICB9
CiB9CiAKLXZvaWQgUVRNb3ZpZVdpbjo6c2V0RGlzYWJsZWQoYm9vbCBiKQorYm9vbCBRVE1vdmll
Ojppc0Rpc2FibGVkKCkgY29uc3QKIHsKLSAgICBtX2Rpc2FibGVkID0gYjsKKyAgICByZXR1cm4g
bV9wcml2YXRlLT5tX2Rpc2FibGVkOwogfQogCit2b2lkIFFUTW92aWU6OnNldERpc2FibGVkKGJv
b2wgYikKK3sKKyAgICBtX3ByaXZhdGUtPm1fZGlzYWJsZWQgPSBiOworfQogCi1ib29sIFFUTW92
aWVXaW46Omhhc1ZpZGVvKCkgY29uc3QKKworYm9vbCBRVE1vdmllOjpoYXNWaWRlbygpIGNvbnN0
CiB7CiAgICAgaWYgKCFtX3ByaXZhdGUtPm1fbW92aWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICByZXR1cm4gKEdldE1vdmllSW5kVHJhY2tUeXBlKG1fcHJpdmF0ZS0+bV9tb3ZpZSwgMSwg
VmlzdWFsTWVkaWFDaGFyYWN0ZXJpc3RpYywgbW92aWVUcmFja0NoYXJhY3RlcmlzdGljIHwgbW92
aWVUcmFja0VuYWJsZWRPbmx5KSk7CiB9CiAKLWJvb2wgUVRNb3ZpZVdpbjo6aGFzQXVkaW8oKSBj
b25zdAorYm9vbCBRVE1vdmllOjpoYXNBdWRpbygpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3ByaXZh
dGUtPm1fbW92aWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTkyNCwxNCArNjcxLDE0IEBA
IGJvb2wgUVRNb3ZpZVdpbjo6aGFzQXVkaW8oKSBjb25zdAogfQogCiAKLWJvb2wgUVRNb3ZpZVdp
bjo6aGFzQ2xvc2VkQ2FwdGlvbnMoKSBjb25zdCAKK2Jvb2wgUVRNb3ZpZTo6aGFzQ2xvc2VkQ2Fw
dGlvbnMoKSBjb25zdCAKIHsKICAgICBpZiAoIW1fcHJpdmF0ZS0+bV9tb3ZpZSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBHZXRNb3ZpZUluZFRyYWNrVHlwZShtX3ByaXZhdGUt
Pm1fbW92aWUsIDEsIGNsb3NlZENhcHRpb25UcmFja1R5cGUsIG1vdmllVHJhY2tNZWRpYVR5cGUp
OwogfQogCi12b2lkIFFUTW92aWVXaW46OnNldENsb3NlZENhcHRpb25zVmlzaWJsZShib29sIHZp
c2libGUpCit2b2lkIFFUTW92aWU6OnNldENsb3NlZENhcHRpb25zVmlzaWJsZShib29sIHZpc2li
bGUpCiB7CiAgICAgaWYgKCFtX3ByaXZhdGUtPm1fbW92aWUpCiAgICAgICAgIHJldHVybjsKQEAg
LTk0NCwxNiArNjkxLDYgQEAgdm9pZCBRVE1vdmllV2luOjpzZXRDbG9zZWRDYXB0aW9uc1Zpc2li
bAogICAgIFFUU2V0VHJhY2tQcm9wZXJ0eShjY1RyYWNrLCBjbG9zZWRDYXB0aW9uVHJhY2tUeXBl
LCBjbG9zZWRDYXB0aW9uRGlzcGxheVByb3BlcnR5SUQsIHNpemVvZihkb0Rpc3BsYXkpLCAmZG9E
aXNwbGF5KTsKIH0KIAotcGFzY2FsIE9TRXJyIG1vdmllRHJhd2luZ0NvbXBsZXRlUHJvYyhNb3Zp
ZSBtb3ZpZSwgbG9uZyBkYXRhKQotewotICAgIFVwcFBhcmFtIHBhcmFtOwotICAgIHBhcmFtLmxv
bmdWYWx1ZSA9IGRhdGE7Ci0gICAgUVRNb3ZpZVdpblByaXZhdGUqIG1wID0gc3RhdGljX2Nhc3Q8
UVRNb3ZpZVdpblByaXZhdGUqPihwYXJhbS5wdHIpOwotICAgIGlmIChtcCkKLSAgICAgICAgbXAt
PmRyYXdpbmdDb21wbGV0ZSgpOwotICAgIHJldHVybiAwOwotfQotCiBzdGF0aWMgdm9pZCBpbml0
aWFsaXplU3VwcG9ydGVkVHlwZXMoKSAKIHsKICAgICBpZiAoZ1N1cHBvcnRlZFR5cGVzKQpAQCAt
MTA0MywxMyArNzgwLDEzIEBAIHN0YXRpYyB2b2lkIGluaXRpYWxpemVTdXBwb3J0ZWRUeXBlcygp
CiAgICAgfQogfQogCi11bnNpZ25lZCBRVE1vdmllV2luOjpjb3VudFN1cHBvcnRlZFR5cGVzKCkK
K3Vuc2lnbmVkIFFUTW92aWU6OmNvdW50U3VwcG9ydGVkVHlwZXMoKQogewogICAgIGluaXRpYWxp
emVTdXBwb3J0ZWRUeXBlcygpOwogICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZ1N1
cHBvcnRlZFR5cGVzLT5zaXplKCkpOwogfQogCi12b2lkIFFUTW92aWVXaW46OmdldFN1cHBvcnRl
ZFR5cGUodW5zaWduZWQgaW5kZXgsIGNvbnN0IFVDaGFyKiYgc3RyLCB1bnNpZ25lZCYgbGVuKQor
dm9pZCBRVE1vdmllOjpnZXRTdXBwb3J0ZWRUeXBlKHVuc2lnbmVkIGluZGV4LCBjb25zdCBVQ2hh
ciomIHN0ciwgdW5zaWduZWQmIGxlbikKIHsKICAgICBpbml0aWFsaXplU3VwcG9ydGVkVHlwZXMo
KTsKICAgICBBU1NFUlQoaW5kZXggPCBnU3VwcG9ydGVkVHlwZXMtPnNpemUoKSk7CkBAIC0xMDY3
LDEzICs4MDQsNyBAQCB2b2lkIFFUTW92aWVXaW46OmdldFN1cHBvcnRlZFR5cGUodW5zaWduCiAg
ICAgCiB9CiAKLXZvaWQgUVRNb3ZpZVdpbjo6c2V0VGFza1RpbWVyRnVuY3MoU2V0VGFza1RpbWVy
RGVsYXlGdW5jIHNldFRhc2tUaW1lckRlbGF5LCBTdG9wVGFza1RpbWVyRnVuYyBzdG9wVGFza1Rp
bWVyKQotewotICAgIGdTZXRUYXNrVGltZXJEZWxheSA9IHNldFRhc2tUaW1lckRlbGF5OwotICAg
IGdTdG9wVGFza1RpbWVyID0gc3RvcFRhc2tUaW1lcjsKLX0KLQotYm9vbCBRVE1vdmllV2luOjpp
bml0aWFsaXplUXVpY2tUaW1lKCkgCitib29sIFFUTW92aWU6OmluaXRpYWxpemVRdWlja1RpbWUo
KSAKIHsKICAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZCA9IGZhbHNlOwogICAgIHN0YXRpYyBi
b29sIGluaXRpYWxpemF0aW9uU3VjY2VlZGVkID0gZmFsc2U7CkBAIC0xMDkyLDc1ICs4MjMsMTQg
QEAgYm9vbCBRVE1vdmllV2luOjppbml0aWFsaXplUXVpY2tUaW1lKCkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBFbnRlck1vdmllcygpOwotICAgICAgICBn
TW92aWVEcmF3aW5nQ29tcGxldGVVUFAgPSBOZXdNb3ZpZURyYXdpbmdDb21wbGV0ZVVQUChtb3Zp
ZURyYXdpbmdDb21wbGV0ZVByb2MpOwogICAgICAgICBpbml0aWFsaXphdGlvblN1Y2NlZWRlZCA9
IHRydWU7CiAgICAgfQogICAgIHJldHVybiBpbml0aWFsaXphdGlvblN1Y2NlZWRlZDsKIH0KIAot
TFJFU1VMVCBRVE1vdmllV2luOjpmdWxsc2NyZWVuV25kUHJvYyhIV05EIHduZCwgVUlOVCBtZXNz
YWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQotewotICAgIFFUTW92aWVXaW4qIG1v
dmllID0gc3RhdGljX2Nhc3Q8UVRNb3ZpZVdpbio+KEdldFByb3Aod25kLCBmdWxsc2NyZWVuUVRN
b3ZpZVdpblBvaW50ZXJQcm9wKSk7Ci0KLSAgICBpZiAobWVzc2FnZSA9PSBXTV9ERVNUUk9ZKQot
ICAgICAgICBSZW1vdmVQcm9wKHduZCwgZnVsbHNjcmVlblFUTW92aWVXaW5Qb2ludGVyUHJvcCk7
Ci0KLSAgICBpZiAoIW1vdmllKQotICAgICAgICByZXR1cm4gRGVmV2luZG93UHJvYyh3bmQsIG1l
c3NhZ2UsIHdQYXJhbSwgbFBhcmFtKTsKLQotICAgIHJldHVybiBtb3ZpZS0+bV9wcml2YXRlLT5t
X2Z1bGxzY3JlZW5DbGllbnQtPmZ1bGxzY3JlZW5DbGllbnRXbmRQcm9jKHduZCwgbWVzc2FnZSwg
d1BhcmFtLCBsUGFyYW0pOwotfQotCi1IV05EIFFUTW92aWVXaW46OmVudGVyRnVsbHNjcmVlbihR
VE1vdmllV2luRnVsbHNjcmVlbkNsaWVudCogY2xpZW50KQotewotICAgIG1fcHJpdmF0ZS0+bV9m
dWxsc2NyZWVuQ2xpZW50ID0gY2xpZW50OwotICAgIAotICAgIEJlZ2luRnVsbFNjcmVlbigmbV9w
cml2YXRlLT5tX2Z1bGxzY3JlZW5SZXN0b3JlU3RhdGUsIDAsIDAsIDAsICZtX3ByaXZhdGUtPm1f
ZnVsbHNjcmVlbldpbmRvdywgMCwgZnVsbFNjcmVlbkFsbG93RXZlbnRzKTsgCi0gICAgUVRNTFNl
dFdpbmRvd1duZFByb2MobV9wcml2YXRlLT5tX2Z1bGxzY3JlZW5XaW5kb3csIGZ1bGxzY3JlZW5X
bmRQcm9jKTsKLSAgICBDcmVhdGVQb3J0QXNzb2NpYXRpb24oR2V0UG9ydE5hdGl2ZVdpbmRvdyht
X3ByaXZhdGUtPm1fZnVsbHNjcmVlbldpbmRvdyksIDAsIDApOwotCi0gICAgR2V0TW92aWVCb3go
bV9wcml2YXRlLT5tX21vdmllLCAmbV9wcml2YXRlLT5tX2Z1bGxzY3JlZW5SZWN0KTsKLSAgICBH
ZXRNb3ZpZUdXb3JsZChtX3ByaXZhdGUtPm1fbW92aWUsICZtX3ByaXZhdGUtPm1fZnVsbHNjcmVl
bk9yaWdHV29ybGQsIDApOwotICAgIFNldE1vdmllR1dvcmxkKG1fcHJpdmF0ZS0+bV9tb3ZpZSwg
cmVpbnRlcnByZXRfY2FzdDxDR3JhZlB0cj4obV9wcml2YXRlLT5tX2Z1bGxzY3JlZW5XaW5kb3cp
LCBHZXRHV29ybGREZXZpY2UocmVpbnRlcnByZXRfY2FzdDxDR3JhZlB0cj4obV9wcml2YXRlLT5t
X2Z1bGxzY3JlZW5XaW5kb3cpKSk7Ci0KLSAgICAvLyBTZXQgdGhlIHNpemUgb2YgdGhlIGJveCB0
byBwcmVzZXJ2ZSBhc3BlY3QgcmF0aW8KLSAgICBSZWN0IHJlY3QgPSBtX3ByaXZhdGUtPm1fZnVs
bHNjcmVlbldpbmRvdy0+cG9ydFJlY3Q7Ci0KLSAgICBmbG9hdCBtb3ZpZVJhdGlvID0gc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KG1fcHJpdmF0ZS0+bV93aWR0aCkgLyBtX3ByaXZhdGUtPm1faGVpZ2h0Owot
ICAgIGludCB3aW5kb3dXaWR0aCA9ICByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0OwotICAgIGludCB3
aW5kb3dIZWlnaHQgPSByZWN0LmJvdHRvbSAtIHJlY3QudG9wOwotICAgIGZsb2F0IHdpbmRvd1Jh
dGlvID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHdpbmRvd1dpZHRoKSAvIHdpbmRvd0hlaWdodDsKLSAg
ICBpbnQgYWN0dWFsV2lkdGggPSAod2luZG93UmF0aW8gPiBtb3ZpZVJhdGlvKSA/ICh3aW5kb3dI
ZWlnaHQgKiBtb3ZpZVJhdGlvKSA6IHdpbmRvd1dpZHRoOwotICAgIGludCBhY3R1YWxIZWlnaHQg
PSAod2luZG93UmF0aW8gPCBtb3ZpZVJhdGlvKSA/ICh3aW5kb3dXaWR0aCAvIG1vdmllUmF0aW8p
IDogd2luZG93SGVpZ2h0OwotICAgIGludCBvZmZzZXRYID0gKHdpbmRvd1dpZHRoIC0gYWN0dWFs
V2lkdGgpIC8gMjsKLSAgICBpbnQgb2Zmc2V0WSA9ICh3aW5kb3dIZWlnaHQgLSBhY3R1YWxIZWln
aHQpIC8gMjsKLQotICAgIHJlY3QubGVmdCA9IG9mZnNldFg7Ci0gICAgcmVjdC5yaWdodCA9IG9m
ZnNldFggKyBhY3R1YWxXaWR0aDsKLSAgICByZWN0LnRvcCA9IG9mZnNldFk7Ci0gICAgcmVjdC5i
b3R0b20gPSBvZmZzZXRZICsgYWN0dWFsSGVpZ2h0OwotCi0gICAgU2V0TW92aWVCb3gobV9wcml2
YXRlLT5tX21vdmllLCAmcmVjdCk7Ci0gICAgU2hvd0hpZGVUYXNrQmFyKHRydWUpOwotCi0gICAg
Ly8gU2V0IHRoZSAndGhpcycgcG9pbnRlciBvbiB0aGUgSFdORAotICAgIEhXTkQgd25kID0gc3Rh
dGljX2Nhc3Q8SFdORD4oR2V0UG9ydE5hdGl2ZVdpbmRvdyhtX3ByaXZhdGUtPm1fZnVsbHNjcmVl
bldpbmRvdykpOwotICAgIFNldFByb3Aod25kLCBmdWxsc2NyZWVuUVRNb3ZpZVdpblBvaW50ZXJQ
cm9wLCBzdGF0aWNfY2FzdDxIQU5ETEU+KHRoaXMpKTsKLQotICAgIHJldHVybiB3bmQ7Ci19Ci0K
LXZvaWQgUVRNb3ZpZVdpbjo6ZXhpdEZ1bGxzY3JlZW4oKQorTW92aWUgUVRNb3ZpZTo6Z2V0TW92
aWVIYW5kbGUoKSBjb25zdCAKIHsKLSAgICBpZiAoIW1fcHJpdmF0ZS0+bV9mdWxsc2NyZWVuV2lu
ZG93KQotICAgICAgICByZXR1cm47Ci0KLSAgICBIV05EIHduZCA9IHN0YXRpY19jYXN0PEhXTkQ+
KEdldFBvcnROYXRpdmVXaW5kb3cobV9wcml2YXRlLT5tX2Z1bGxzY3JlZW5XaW5kb3cpKTsKLSAg
ICBEZXN0cm95UG9ydEFzc29jaWF0aW9uKHJlaW50ZXJwcmV0X2Nhc3Q8Q0dyYWZQdHI+KG1fcHJp
dmF0ZS0+bV9mdWxsc2NyZWVuV2luZG93KSk7Ci0gICAgU2V0TW92aWVHV29ybGQobV9wcml2YXRl
LT5tX21vdmllLCBtX3ByaXZhdGUtPm1fZnVsbHNjcmVlbk9yaWdHV29ybGQsIDApOwotICAgIEVu
ZEZ1bGxTY3JlZW4obV9wcml2YXRlLT5tX2Z1bGxzY3JlZW5SZXN0b3JlU3RhdGUsIDBMKTsKLSAg
ICBTZXRNb3ZpZUJveChtX3ByaXZhdGUtPm1fbW92aWUsICZtX3ByaXZhdGUtPm1fZnVsbHNjcmVl
blJlY3QpOwotICAgIG1fcHJpdmF0ZS0+bV9mdWxsc2NyZWVuV2luZG93ID0gMDsKKyAgICByZXR1
cm4gbV9wcml2YXRlLT5tX21vdmllOwogfQogCiBCT09MIFdJTkFQSSBEbGxNYWluKEhJTlNUQU5D
RSBoaW5zdERMTCwgRFdPUkQgZmR3UmVhc29uLCBMUFZPSUQgbHB2UmVzZXJ2ZWQpCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVE1vdmllLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRNb3ZpZS5oCShyZXZpc2lvbiA1ODU5NikJKGZy
b20gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRNb3ZpZVdpbi5oOjU4NTk2KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRNb3ZpZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTI3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5LCAy
MDEwIEFwcGxlLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFFU
TW92aWVXaW5faAorI2RlZmluZSBRVE1vdmllV2luX2gKKworI2luY2x1ZGUgPFVuaWNvZGUuaD4K
KyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKKyNpZmRlZiBRVE1PVklFV0lOX0VYUE9SVFMKKyNkZWZp
bmUgUVRNT1ZJRVdJTl9BUEkgX19kZWNsc3BlYyhkbGxleHBvcnQpCisjZWxzZQorI2RlZmluZSBR
VE1PVklFV0lOX0FQSSBfX2RlY2xzcGVjKGRsbGltcG9ydCkKKyNlbmRpZgorCitjbGFzcyBRVE1v
dmllV2luOworY2xhc3MgUVRNb3ZpZVdpblByaXZhdGU7CisKK2NsYXNzIFFUTW92aWVXaW5DbGll
bnQgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBtb3ZpZUVuZGVkKFFUTW92aWVXaW4qKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIG1vdmllTG9hZFN0YXRlQ2hhbmdlZChRVE1vdmllV2luKikg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBtb3ZpZVRpbWVDaGFuZ2VkKFFUTW92aWVXaW4qKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIG1vdmllTmV3SW1hZ2VBdmFpbGFibGUoUVRNb3ZpZVdpbiopID0g
MDsKK307CisKK2NsYXNzIFFUTW92aWVXaW5GdWxsc2NyZWVuQ2xpZW50IHsKK3B1YmxpYzoKKyAg
ICB2aXJ0dWFsIExSRVNVTFQgZnVsbHNjcmVlbkNsaWVudFduZFByb2MoSFdORCwgVUlOVCBtZXNz
YWdlLCBXUEFSQU0sIExQQVJBTSkgPSAwOworfTsKKworZW51bSB7CisgICAgUVRNb3ZpZUxvYWRT
dGF0ZUVycm9yID0gLTFMLAorICAgIFFUTW92aWVMb2FkU3RhdGVMb2FkZWQgID0gMjAwMEwsCisg
ICAgUVRNb3ZpZUxvYWRTdGF0ZVBsYXlhYmxlID0gMTAwMDBMLAorICAgIFFUTW92aWVMb2FkU3Rh
dGVQbGF5dGhyb3VnaE9LID0gMjAwMDBMLAorICAgIFFUTW92aWVMb2FkU3RhdGVDb21wbGV0ZSA9
IDEwMDAwMEwKK307CisKK3R5cGVkZWYgY29uc3Qgc3RydWN0IF9fQ0ZVUkwgKiBDRlVSTFJlZjsK
KworY2xhc3MgUVRNT1ZJRVdJTl9BUEkgUVRNb3ZpZVdpbiB7CitwdWJsaWM6CisgICAgc3RhdGlj
IGJvb2wgaW5pdGlhbGl6ZVF1aWNrVGltZSgpOworCisgICAgdHlwZWRlZiB2b2lkICgqU2V0VGFz
a1RpbWVyRGVsYXlGdW5jKShkb3VibGUpOworICAgIHR5cGVkZWYgdm9pZCAoKlN0b3BUYXNrVGlt
ZXJGdW5jKSgpOworICAgIHN0YXRpYyB2b2lkIHNldFRhc2tUaW1lckZ1bmNzKFNldFRhc2tUaW1l
ckRlbGF5RnVuYywgU3RvcFRhc2tUaW1lckZ1bmMpOworICAgIHN0YXRpYyB2b2lkIHRhc2tUaW1l
ckZpcmVkKCk7CisKKyAgICBRVE1vdmllV2luKFFUTW92aWVXaW5DbGllbnQqKTsKKyAgICB+UVRN
b3ZpZVdpbigpOworCisgICAgdm9pZCBsb2FkKGNvbnN0IFVDaGFyKiB1cmwsIGludCBsZW4sIGJv
b2wgcHJlc2VydmVzUGl0Y2gpOworICAgIGxvbmcgbG9hZFN0YXRlKCkgY29uc3Q7CisgICAgZmxv
YXQgbWF4VGltZUxvYWRlZCgpIGNvbnN0OworCisgICAgdm9pZCBwbGF5KCk7CisgICAgdm9pZCBw
YXVzZSgpOworCisgICAgZmxvYXQgcmF0ZSgpIGNvbnN0OworICAgIHZvaWQgc2V0UmF0ZShmbG9h
dCk7CisKKyAgICBmbG9hdCBkdXJhdGlvbigpIGNvbnN0OworICAgIGZsb2F0IGN1cnJlbnRUaW1l
KCkgY29uc3Q7CisgICAgdm9pZCBzZXRDdXJyZW50VGltZShmbG9hdCkgY29uc3Q7CisKKyAgICB2
b2lkIHNldFZvbHVtZShmbG9hdCk7CisgICAgdm9pZCBzZXRQcmVzZXJ2ZXNQaXRjaChib29sKTsK
KworICAgIHVuc2lnbmVkIGRhdGFTaXplKCkgY29uc3Q7CisKKyAgICB2b2lkIGdldE5hdHVyYWxT
aXplKGludCYgd2lkdGgsIGludCYgaGVpZ2h0KTsKKyAgICB2b2lkIHNldFNpemUoaW50IHdpZHRo
LCBpbnQgaGVpZ2h0KTsKKworICAgIHZvaWQgc2V0VmlzaWJsZShib29sKTsKKyAgICB2b2lkIHBh
aW50KEhEQywgaW50IHgsIGludCB5KTsKKyAgICB2b2lkIGdldEN1cnJlbnRGcmFtZUluZm8odm9p
ZComIGJ1ZmZlciwgdW5zaWduZWQmIGJpdHNQZXJQaXhlbCwgdW5zaWduZWQmIHJvd0J5dGVzLCB1
bnNpZ25lZCYgd2lkdGgsIHVuc2lnbmVkJiBoZWlnaHQpOworCisgICAgdm9pZCBkaXNhYmxlVW5z
dXBwb3J0ZWRUcmFja3ModW5zaWduZWQmIGVuYWJsZWRUcmFja0NvdW50LCB1bnNpZ25lZCYgdG90
YWxUcmFja0NvdW50KTsKKyAgICB2b2lkIHNldERpc2FibGVkKGJvb2wpOworCisgICAgYm9vbCBo
YXNWaWRlbygpIGNvbnN0OworICAgIGJvb2wgaGFzQXVkaW8oKSBjb25zdDsKKworICAgIGJvb2wg
aGFzQ2xvc2VkQ2FwdGlvbnMoKSBjb25zdDsKKyAgICB2b2lkIHNldENsb3NlZENhcHRpb25zVmlz
aWJsZShib29sKTsKKworICAgIHN0YXRpYyB1bnNpZ25lZCBjb3VudFN1cHBvcnRlZFR5cGVzKCk7
CisgICAgc3RhdGljIHZvaWQgZ2V0U3VwcG9ydGVkVHlwZSh1bnNpZ25lZCBpbmRleCwgY29uc3Qg
VUNoYXIqJiBzdHIsIHVuc2lnbmVkJiBsZW4pOworCisgICAgLy8gUmV0dXJucyB0aGUgZnVsbC1z
Y3JlZW4gd2luZG93IGNyZWF0ZWQKKyAgICBIV05EIGVudGVyRnVsbHNjcmVlbihRVE1vdmllV2lu
RnVsbHNjcmVlbkNsaWVudCopOworICAgIHZvaWQgZXhpdEZ1bGxzY3JlZW4oKTsKKworcHJpdmF0
ZToKKyAgICB2b2lkIGxvYWQoQ0ZVUkxSZWYsIGJvb2wgcHJlc2VydmVzUGl0Y2gpOworICAgIHN0
YXRpYyBMUkVTVUxUIGZ1bGxzY3JlZW5XbmRQcm9jKEhXTkQsIFVJTlQgbWVzc2FnZSwgV1BBUkFN
LCBMUEFSQU0pOworCisgICAgUVRNb3ZpZVdpblByaXZhdGUqIG1fcHJpdmF0ZTsKKyAgICBib29s
IG1fZGlzYWJsZWQ7CisgICAgZnJpZW5kIGNsYXNzIFFUTW92aWVXaW5Qcml2YXRlOworfTsKKwor
I2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVE1vdmllLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRNb3ZpZS5oCShyZXZp
c2lvbiA1ODU5NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWUuaAko
d29ya2luZyBjb3B5KQpAQCAtMjMsMTEgKzIzLDEyIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwog
Ci0jaWZuZGVmIFFUTW92aWVXaW5faAotI2RlZmluZSBRVE1vdmllV2luX2gKKyNpZm5kZWYgUVRN
b3ZpZV9oCisjZGVmaW5lIFFUTW92aWVfaAogCiAjaW5jbHVkZSA8VW5pY29kZS5oPgogI2luY2x1
ZGUgPHdpbmRvd3MuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCiAjaWZkZWYgUVRN
T1ZJRVdJTl9FWFBPUlRTCiAjZGVmaW5lIFFUTU9WSUVXSU5fQVBJIF9fZGVjbHNwZWMoZGxsZXhw
b3J0KQpAQCAtMzUsMjAgKzM2LDE1IEBACiAjZGVmaW5lIFFUTU9WSUVXSU5fQVBJIF9fZGVjbHNw
ZWMoZGxsaW1wb3J0KQogI2VuZGlmCiAKLWNsYXNzIFFUTW92aWVXaW47Ci1jbGFzcyBRVE1vdmll
V2luUHJpdmF0ZTsKK2NsYXNzIFFUTW92aWU7CitjbGFzcyBRVE1vdmllUHJpdmF0ZTsKK3R5cGVk
ZWYgc3RydWN0IE1vdmllVHlwZSoqIE1vdmllOwogCi1jbGFzcyBRVE1vdmllV2luQ2xpZW50IHsK
K2NsYXNzIFFUTW92aWVDbGllbnQgewogcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBtb3ZpZUVu
ZGVkKFFUTW92aWVXaW4qKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIG1vdmllTG9hZFN0YXRlQ2hh
bmdlZChRVE1vdmllV2luKikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBtb3ZpZVRpbWVDaGFuZ2Vk
KFFUTW92aWVXaW4qKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIG1vdmllTmV3SW1hZ2VBdmFpbGFi
bGUoUVRNb3ZpZVdpbiopID0gMDsKLX07Ci0KLWNsYXNzIFFUTW92aWVXaW5GdWxsc2NyZWVuQ2xp
ZW50IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIExSRVNVTFQgZnVsbHNjcmVlbkNsaWVudFduZFBy
b2MoSFdORCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0sIExQQVJBTSkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBtb3ZpZUVuZGVkKFFUTW92aWUqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIG1vdmllTG9h
ZFN0YXRlQ2hhbmdlZChRVE1vdmllKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBtb3ZpZVRpbWVD
aGFuZ2VkKFFUTW92aWUqKSA9IDA7CiB9OwogCiBlbnVtIHsKQEAgLTYxLDE5ICs1NywyMCBAQCBl
bnVtIHsKIAogdHlwZWRlZiBjb25zdCBzdHJ1Y3QgX19DRlVSTCAqIENGVVJMUmVmOwogCi1jbGFz
cyBRVE1PVklFV0lOX0FQSSBRVE1vdmllV2luIHsKK2NsYXNzIFFUTU9WSUVXSU5fQVBJIFFUTW92
aWUgOiBwdWJsaWMgUmVmQ291bnRlZDxRVE1vdmllPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIGJv
b2wgaW5pdGlhbGl6ZVF1aWNrVGltZSgpOwotCi0gICAgdHlwZWRlZiB2b2lkICgqU2V0VGFza1Rp
bWVyRGVsYXlGdW5jKShkb3VibGUpOwotICAgIHR5cGVkZWYgdm9pZCAoKlN0b3BUYXNrVGltZXJG
dW5jKSgpOwotICAgIHN0YXRpYyB2b2lkIHNldFRhc2tUaW1lckZ1bmNzKFNldFRhc2tUaW1lckRl
bGF5RnVuYywgU3RvcFRhc2tUaW1lckZ1bmMpOwogICAgIHN0YXRpYyB2b2lkIHRhc2tUaW1lckZp
cmVkKCk7CiAKLSAgICBRVE1vdmllV2luKFFUTW92aWVXaW5DbGllbnQqKTsKLSAgICB+UVRNb3Zp
ZVdpbigpOworICAgIFFUTW92aWUoUVRNb3ZpZUNsaWVudCopOworICAgIH5RVE1vdmllKCk7CisK
KyAgICB2b2lkIGFkZENsaWVudChRVE1vdmllQ2xpZW50Kik7CisgICAgdm9pZCByZW1vdmVDbGll
bnQoUVRNb3ZpZUNsaWVudCopOwogCiAgICAgdm9pZCBsb2FkKGNvbnN0IFVDaGFyKiB1cmwsIGlu
dCBsZW4sIGJvb2wgcHJlc2VydmVzUGl0Y2gpOworICAgIHZvaWQgbG9hZChDRlVSTFJlZiwgYm9v
bCBwcmVzZXJ2ZXNQaXRjaCk7CisKICAgICBsb25nIGxvYWRTdGF0ZSgpIGNvbnN0OwogICAgIGZs
b2F0IG1heFRpbWVMb2FkZWQoKSBjb25zdDsKIApAQCAtOTMsMTMgKzkwLDEwIEBAIHB1YmxpYzoK
ICAgICB1bnNpZ25lZCBkYXRhU2l6ZSgpIGNvbnN0OwogCiAgICAgdm9pZCBnZXROYXR1cmFsU2l6
ZShpbnQmIHdpZHRoLCBpbnQmIGhlaWdodCk7Ci0gICAgdm9pZCBzZXRTaXplKGludCB3aWR0aCwg
aW50IGhlaWdodCk7Ci0KLSAgICB2b2lkIHNldFZpc2libGUoYm9vbCk7Ci0gICAgdm9pZCBwYWlu
dChIREMsIGludCB4LCBpbnQgeSk7Ci0gICAgdm9pZCBnZXRDdXJyZW50RnJhbWVJbmZvKHZvaWQq
JiBidWZmZXIsIHVuc2lnbmVkJiBiaXRzUGVyUGl4ZWwsIHVuc2lnbmVkJiByb3dCeXRlcywgdW5z
aWduZWQmIHdpZHRoLCB1bnNpZ25lZCYgaGVpZ2h0KTsKIAogICAgIHZvaWQgZGlzYWJsZVVuc3Vw
cG9ydGVkVHJhY2tzKHVuc2lnbmVkJiBlbmFibGVkVHJhY2tDb3VudCwgdW5zaWduZWQmIHRvdGFs
VHJhY2tDb3VudCk7CisKKyAgICBib29sIGlzRGlzYWJsZWQoKSBjb25zdDsKICAgICB2b2lkIHNl
dERpc2FibGVkKGJvb2wpOwogCiAgICAgYm9vbCBoYXNWaWRlbygpIGNvbnN0OwpAQCAtMTExLDE3
ICsxMDUsMTEgQEAgcHVibGljOgogICAgIHN0YXRpYyB1bnNpZ25lZCBjb3VudFN1cHBvcnRlZFR5
cGVzKCk7CiAgICAgc3RhdGljIHZvaWQgZ2V0U3VwcG9ydGVkVHlwZSh1bnNpZ25lZCBpbmRleCwg
Y29uc3QgVUNoYXIqJiBzdHIsIHVuc2lnbmVkJiBsZW4pOwogCi0gICAgLy8gUmV0dXJucyB0aGUg
ZnVsbC1zY3JlZW4gd2luZG93IGNyZWF0ZWQKLSAgICBIV05EIGVudGVyRnVsbHNjcmVlbihRVE1v
dmllV2luRnVsbHNjcmVlbkNsaWVudCopOwotICAgIHZvaWQgZXhpdEZ1bGxzY3JlZW4oKTsKKyAg
ICBNb3ZpZSBnZXRNb3ZpZUhhbmRsZSgpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIHZvaWQgbG9h
ZChDRlVSTFJlZiwgYm9vbCBwcmVzZXJ2ZXNQaXRjaCk7Ci0gICAgc3RhdGljIExSRVNVTFQgZnVs
bHNjcmVlblduZFByb2MoSFdORCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0sIExQQVJBTSk7Ci0KLSAg
ICBRVE1vdmllV2luUHJpdmF0ZSogbV9wcml2YXRlOwotICAgIGJvb2wgbV9kaXNhYmxlZDsKLSAg
ICBmcmllbmQgY2xhc3MgUVRNb3ZpZVdpblByaXZhdGU7CisgICAgUVRNb3ZpZVByaXZhdGUqIG1f
cHJpdmF0ZTsKKyAgICBmcmllbmQgY2xhc3MgUVRNb3ZpZVByaXZhdGU7CiB9OwogCiAjZW5kaWYK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWVHV29ybGQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWVHV29ybGQu
Y3BwCShyZXZpc2lvbiA1ODU5NikJKGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
UVRNb3ZpZVdpbi5jcHA6NTg1OTYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9R
VE1vdmllR1dvcmxkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExNzggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUsIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJR
VE1vdmllV2luLmgiCisKKy8vIFB1dCBNb3ZpZXMuaCBmaXJzdCBzbyBidWlsZCBmYWlsdXJlcyBo
ZXJlIHBvaW50IGNsZWFybHkgdG8gUXVpY2tUaW1lCisjaW5jbHVkZSA8TW92aWVzLmg+CisKKyNp
bmNsdWRlICJRVE1vdmllV2luVGltZXIuaCIKKyNpbmNsdWRlIDxHWE1hdGguaD4KKyNpbmNsdWRl
IDxRVE1MLmg+CisjaW5jbHVkZSA8UXVpY2tUaW1lQ29tcG9uZW50cy5oPgorI2luY2x1ZGUgPHd0
Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYv
Tm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK3VzaW5nIG5hbWVzcGFj
ZSBzdGQ7CisKK3N0YXRpYyBjb25zdCBsb25nIG1pbmltdW1RdWlja1RpbWVWZXJzaW9uID0gMHgw
NzMwMDAwMDsgLy8gNy4zCisKK3N0YXRpYyBjb25zdCBsb25nIGNsb3NlZENhcHRpb25UcmFja1R5
cGUgPSAnY2xjcCc7CitzdGF0aWMgY29uc3QgbG9uZyBzdWJUaXRsZVRyYWNrVHlwZSA9ICdzYnRs
JzsKK3N0YXRpYyBjb25zdCBsb25nIG1wZWc0T2JqZWN0RGVzY3JpcHRpb25UcmFja1R5cGUgPSAn
b2RzbSc7CitzdGF0aWMgY29uc3QgbG9uZyBtcGVnNFNjZW5lRGVzY3JpcHRpb25UcmFja1R5cGUg
PSAnc2RzbSc7CitzdGF0aWMgY29uc3QgbG9uZyBjbG9zZWRDYXB0aW9uRGlzcGxheVByb3BlcnR5
SUQgPSAnZGlzcCc7CitzdGF0aWMgTFBDVFNUUiBmdWxsc2NyZWVuUVRNb3ZpZVdpblBvaW50ZXJQ
cm9wID0gVEVYVCgiZnVsbHNjcmVlblFUTW92aWVXaW5Qb2ludGVyIik7CisKKy8vIFJlc2l6aW5n
IEdXb3JsZHMgaXMgc2xvdywgZ2l2ZSB0aGVtIGEgbWluaW11bSBzaXplIHNvIHNpemUgb2Ygc21h
bGwgCisvLyB2aWRlb3MgY2FuIGJlIGFuaW1hdGVkIHNtb290aGx5CitzdGF0aWMgY29uc3QgaW50
IGNHV29ybGRNaW5XaWR0aCA9IDY0MDsKK3N0YXRpYyBjb25zdCBpbnQgY0dXb3JsZE1pbkhlaWdo
dCA9IDM2MDsKKworc3RhdGljIGNvbnN0IGZsb2F0IGNOb25Db250aW51b3VzVGltZUNoYW5nZSA9
IDAuMmY7CisKK3VuaW9uIFVwcFBhcmFtIHsKKyAgICBsb25nIGxvbmdWYWx1ZTsKKyAgICB2b2lk
KiBwdHI7Cit9OworCitzdGF0aWMgTW92aWVEcmF3aW5nQ29tcGxldGVVUFAgZ01vdmllRHJhd2lu
Z0NvbXBsZXRlVVBQID0gMDsKK3N0YXRpYyBIYXNoU2V0PFFUTW92aWVXaW5Qcml2YXRlKj4qIGdU
YXNrTGlzdDsKK3N0YXRpYyBWZWN0b3I8Q0ZTdHJpbmdSZWY+KiBnU3VwcG9ydGVkVHlwZXMgPSAw
Oworc3RhdGljIFNJbnQzMiBxdWlja1RpbWVWZXJzaW9uID0gMDsKKworc3RhdGljIFFUTW92aWVX
aW46OlNldFRhc2tUaW1lckRlbGF5RnVuYyBnU2V0VGFza1RpbWVyRGVsYXkgPSAwOworc3RhdGlj
IFFUTW92aWVXaW46OlN0b3BUYXNrVGltZXJGdW5jIGdTdG9wVGFza1RpbWVyID0gMDsKKworc3Rh
dGljIHZvaWQgdXBkYXRlVGFza1RpbWVyKGludCBtYXhJbnRlcnZhbCA9IDEwMDApCit7CisgICAg
aWYgKCFnVGFza0xpc3QtPnNpemUoKSkgeworICAgICAgICBnU3RvcFRhc2tUaW1lcigpOworICAg
ICAgICByZXR1cm47ICAgIAorICAgIH0KKyAgICAKKyAgICBsb25nIGludGVydmFsSW5NUzsKKyAg
ICBRVEdldFRpbWVVbnRpbE5leHRUYXNrKCZpbnRlcnZhbEluTVMsIDEwMDApOworICAgIGlmIChp
bnRlcnZhbEluTVMgPiBtYXhJbnRlcnZhbCkKKyAgICAgICAgaW50ZXJ2YWxJbk1TID0gbWF4SW50
ZXJ2YWw7CisgICAgZ1NldFRhc2tUaW1lckRlbGF5KHN0YXRpY19jYXN0PGZsb2F0PihpbnRlcnZh
bEluTVMpIC8gMTAwMCk7Cit9CisKK2NsYXNzIFFUTW92aWVXaW5Qcml2YXRlIDogcHVibGljIE5v
bmNvcHlhYmxlIHsKK3B1YmxpYzoKKyAgICBRVE1vdmllV2luUHJpdmF0ZSgpOworICAgIH5RVE1v
dmllV2luUHJpdmF0ZSgpOworICAgIHZvaWQgdGFzaygpOworICAgIHZvaWQgc3RhcnRUYXNrKCk7
CisgICAgdm9pZCBlbmRUYXNrKCk7CisKKyAgICB2b2lkIGNyZWF0ZU1vdmllQ29udHJvbGxlcigp
OworICAgIHZvaWQgcmVnaXN0ZXJEcmF3aW5nQ2FsbGJhY2soKTsKKyAgICB2b2lkIGRyYXdpbmdD
b21wbGV0ZSgpOworICAgIHZvaWQgdXBkYXRlR1dvcmxkKCk7CisgICAgdm9pZCBjcmVhdGVHV29y
bGQoKTsKKyAgICB2b2lkIGRlbGV0ZUdXb3JsZCgpOworICAgIHZvaWQgY2xlYXJHV29ybGQoKTsK
KyAgICB2b2lkIGNhY2hlTW92aWVTY2FsZSgpOworICAgIHZvaWQgdXBkYXRlTW92aWVTaXplKCk7
CisKKyAgICB2b2lkIHNldFNpemUoaW50LCBpbnQpOworCisgICAgUVRNb3ZpZVdpbiogbV9tb3Zp
ZVdpbjsKKyAgICBNb3ZpZSBtX21vdmllOworICAgIE1vdmllQ29udHJvbGxlciBtX21vdmllQ29u
dHJvbGxlcjsKKyAgICBib29sIG1fdGFza2luZzsKKyAgICBRVE1vdmllV2luQ2xpZW50KiBtX2Ns
aWVudDsKKyAgICBsb25nIG1fbG9hZFN0YXRlOworICAgIGJvb2wgbV9lbmRlZDsKKyAgICBib29s
IG1fc2Vla2luZzsKKyAgICBmbG9hdCBtX2xhc3RNZWRpYVRpbWU7CisgICAgZG91YmxlIG1fbGFz
dExvYWRTdGF0ZUNoZWNrVGltZTsKKyAgICBpbnQgbV93aWR0aDsKKyAgICBpbnQgbV9oZWlnaHQ7
CisgICAgYm9vbCBtX3Zpc2libGU7CisgICAgR1dvcmxkUHRyIG1fZ1dvcmxkOworICAgIGludCBt
X2dXb3JsZFdpZHRoOworICAgIGludCBtX2dXb3JsZEhlaWdodDsKKyAgICBHV29ybGRQdHIgbV9z
YXZlZEdXb3JsZDsKKyAgICBsb25nIG1fbG9hZEVycm9yOworICAgIGZsb2F0IG1fd2lkdGhTY2Fs
ZUZhY3RvcjsKKyAgICBmbG9hdCBtX2hlaWdodFNjYWxlRmFjdG9yOworICAgIENGVVJMUmVmIG1f
Y3VycmVudFVSTDsKKyAgICBmbG9hdCBtX3RpbWVUb1Jlc3RvcmU7CisgICAgZmxvYXQgbV9yYXRl
VG9SZXN0b3JlOworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBib29sIG1fc2NhbGVDYWNoZWQ7
CisjZW5kaWYKKyAgICBXaW5kb3dQdHIgbV9mdWxsc2NyZWVuV2luZG93OworICAgIEdXb3JsZFB0
ciBtX2Z1bGxzY3JlZW5PcmlnR1dvcmxkOworICAgIFJlY3QgbV9mdWxsc2NyZWVuUmVjdDsKKyAg
ICBRVE1vdmllV2luRnVsbHNjcmVlbkNsaWVudCogbV9mdWxsc2NyZWVuQ2xpZW50OworICAgIGNo
YXIqIG1fZnVsbHNjcmVlblJlc3RvcmVTdGF0ZTsKK307CisKK1FUTW92aWVXaW5Qcml2YXRlOjpR
VE1vdmllV2luUHJpdmF0ZSgpCisgICAgOiBtX21vdmllV2luKDApCisgICAgLCBtX21vdmllKDAp
CisgICAgLCBtX21vdmllQ29udHJvbGxlcigwKQorICAgICwgbV90YXNraW5nKGZhbHNlKQorICAg
ICwgbV9jbGllbnQoMCkKKyAgICAsIG1fbG9hZFN0YXRlKDApCisgICAgLCBtX2VuZGVkKGZhbHNl
KQorICAgICwgbV9zZWVraW5nKGZhbHNlKQorICAgICwgbV9sYXN0TWVkaWFUaW1lKDApCisgICAg
LCBtX2xhc3RMb2FkU3RhdGVDaGVja1RpbWUoMCkKKyAgICAsIG1fd2lkdGgoMCkKKyAgICAsIG1f
aGVpZ2h0KDApCisgICAgLCBtX3Zpc2libGUoZmFsc2UpCisgICAgLCBtX2dXb3JsZCgwKQorICAg
ICwgbV9nV29ybGRXaWR0aCgwKQorICAgICwgbV9nV29ybGRIZWlnaHQoMCkKKyAgICAsIG1fc2F2
ZWRHV29ybGQoMCkKKyAgICAsIG1fbG9hZEVycm9yKDApCisgICAgLCBtX3dpZHRoU2NhbGVGYWN0
b3IoMSkKKyAgICAsIG1faGVpZ2h0U2NhbGVGYWN0b3IoMSkKKyAgICAsIG1fY3VycmVudFVSTCgw
KQorICAgICwgbV90aW1lVG9SZXN0b3JlKC0xLjBmKQorICAgICwgbV9yYXRlVG9SZXN0b3JlKC0x
LjBmKQorI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAsIG1fc2NhbGVDYWNoZWQoZmFsc2UpCisj
ZW5kaWYKKyAgICAsIG1fZnVsbHNjcmVlbldpbmRvdygwKQorICAgICwgbV9mdWxsc2NyZWVuT3Jp
Z0dXb3JsZCgwKQorICAgICwgbV9mdWxsc2NyZWVuQ2xpZW50KDApCisgICAgLCBtX2Z1bGxzY3Jl
ZW5SZXN0b3JlU3RhdGUoMCkKK3sKKyAgICBSZWN0IHJlY3QgPSB7IDAsIDAsIDAsIDAgfTsKKyAg
ICBtX2Z1bGxzY3JlZW5SZWN0ID0gcmVjdDsKK30KKworUVRNb3ZpZVdpblByaXZhdGU6On5RVE1v
dmllV2luUHJpdmF0ZSgpCit7CisgICAgQVNTRVJUKCFtX2Z1bGxzY3JlZW5XaW5kb3cpOworCisg
ICAgZW5kVGFzaygpOworICAgIGlmIChtX2dXb3JsZCkKKyAgICAgICAgZGVsZXRlR1dvcmxkKCk7
CisgICAgaWYgKG1fbW92aWVDb250cm9sbGVyKQorICAgICAgICBEaXNwb3NlTW92aWVDb250cm9s
bGVyKG1fbW92aWVDb250cm9sbGVyKTsKKyAgICBpZiAobV9tb3ZpZSkKKyAgICAgICAgRGlzcG9z
ZU1vdmllKG1fbW92aWUpOworICAgIGlmIChtX2N1cnJlbnRVUkwpCisgICAgICAgIENGUmVsZWFz
ZShtX2N1cnJlbnRVUkwpOworfQorCit2b2lkIFFUTW92aWVXaW46OnRhc2tUaW1lckZpcmVkKCkK
K3sKKyAgICAvLyBUaGUgaGFzaCBjb250ZW50IG1pZ2h0IGNoYW5nZSBkdXJpbmcgdGFzaygpCisg
ICAgVmVjdG9yPFFUTW92aWVXaW5Qcml2YXRlKj4gdGFza3M7CisgICAgY29weVRvVmVjdG9yKCpn
VGFza0xpc3QsIHRhc2tzKTsKKyAgICBzaXplX3QgY291bnQgPSB0YXNrcy5zaXplKCk7CisgICAg
Zm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IGNvdW50OyArK24pCisgICAgICAgIHRhc2tzW25dLT50
YXNrKCk7CisKKyAgICB1cGRhdGVUYXNrVGltZXIoKTsKK30KKwordm9pZCBRVE1vdmllV2luUHJp
dmF0ZTo6c3RhcnRUYXNrKCkgCit7CisgICAgaWYgKG1fdGFza2luZykKKyAgICAgICAgcmV0dXJu
OworICAgIGlmICghZ1Rhc2tMaXN0KQorICAgICAgICBnVGFza0xpc3QgPSBuZXcgSGFzaFNldDxR
VE1vdmllV2luUHJpdmF0ZSo+OworICAgIGdUYXNrTGlzdC0+YWRkKHRoaXMpOworICAgIG1fdGFz
a2luZyA9IHRydWU7CisgICAgdXBkYXRlVGFza1RpbWVyKCk7Cit9CisKK3ZvaWQgUVRNb3ZpZVdp
blByaXZhdGU6OmVuZFRhc2soKSAKK3sKKyAgICBpZiAoIW1fdGFza2luZykKKyAgICAgICAgcmV0
dXJuOworICAgIGdUYXNrTGlzdC0+cmVtb3ZlKHRoaXMpOworICAgIG1fdGFza2luZyA9IGZhbHNl
OworICAgIHVwZGF0ZVRhc2tUaW1lcigpOworfQorCit2b2lkIFFUTW92aWVXaW5Qcml2YXRlOjpj
YWNoZU1vdmllU2NhbGUoKQoreworICAgIFJlY3QgbmF0dXJhbFJlY3Q7CisgICAgUmVjdCBpbml0
aWFsUmVjdDsKKworICAgIEdldE1vdmllTmF0dXJhbEJvdW5kc1JlY3QobV9tb3ZpZSwgJm5hdHVy
YWxSZWN0KTsKKyAgICBHZXRNb3ZpZUJveChtX21vdmllLCAmaW5pdGlhbFJlY3QpOworCisgICAg
ZmxvYXQgbmF0dXJhbFdpZHRoID0gbmF0dXJhbFJlY3QucmlnaHQgLSBuYXR1cmFsUmVjdC5sZWZ0
OworICAgIGZsb2F0IG5hdHVyYWxIZWlnaHQgPSBuYXR1cmFsUmVjdC5ib3R0b20gLSBuYXR1cmFs
UmVjdC50b3A7CisKKyAgICBpZiAobmF0dXJhbFdpZHRoKQorICAgICAgICBtX3dpZHRoU2NhbGVG
YWN0b3IgPSAoaW5pdGlhbFJlY3QucmlnaHQgLSBpbml0aWFsUmVjdC5sZWZ0KSAvIG5hdHVyYWxX
aWR0aDsKKyAgICBpZiAobmF0dXJhbEhlaWdodCkKKyAgICAgICAgbV9oZWlnaHRTY2FsZUZhY3Rv
ciA9IChpbml0aWFsUmVjdC5ib3R0b20gLSBpbml0aWFsUmVjdC50b3ApIC8gbmF0dXJhbEhlaWdo
dDsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgbV9zY2FsZUNhY2hlZCA9IHRydWU7OworI2Vu
ZGlmCit9CisKK3ZvaWQgUVRNb3ZpZVdpblByaXZhdGU6OnRhc2soKSAKK3sKKyAgICBBU1NFUlQo
bV90YXNraW5nKTsKKworICAgIGlmICghbV9sb2FkRXJyb3IpIHsKKyAgICAgICAgaWYgKG1fbW92
aWVDb250cm9sbGVyKQorICAgICAgICAgICAgTUNJZGxlKG1fbW92aWVDb250cm9sbGVyKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgTW92aWVzVGFzayhtX21vdmllLCAwKTsKKyAgICB9CisK
KyAgICAvLyBHZXRNb3ZpZUxvYWRTdGF0ZSBkb2N1bWVudGF0aW9uIHNheXMgdGhhdCB5b3Ugc2hv
dWxkIG5vdCBjYWxsIGl0IG1vcmUgb2Z0ZW4gdGhhbiBldmVyeSBxdWFydGVyIG9mIGEgc2Vjb25k
LgorICAgIGlmIChzeXN0ZW1UaW1lKCkgPj0gbV9sYXN0TG9hZFN0YXRlQ2hlY2tUaW1lICsgMC4y
NSB8fCBtX2xvYWRFcnJvcikgeyAKKyAgICAgICAgLy8gSWYgbG9hZCBmYWlscyBRVCdzIGxvYWQg
c3RhdGUgaXMgUVRNb3ZpZUxvYWRTdGF0ZUNvbXBsZXRlLgorICAgICAgICAvLyBUaGlzIGlzIGRp
ZmZlcmVudCBmcm9tIFFUS2l0IEFQSSBhbmQgc2VlbXMgc3RyYW5nZS4KKyAgICAgICAgbG9uZyBs
b2FkU3RhdGUgPSBtX2xvYWRFcnJvciA/IFFUTW92aWVMb2FkU3RhdGVFcnJvciA6IEdldE1vdmll
TG9hZFN0YXRlKG1fbW92aWUpOworICAgICAgICBpZiAobG9hZFN0YXRlICE9IG1fbG9hZFN0YXRl
KSB7CisKKyAgICAgICAgICAgIC8vIHdlIG9ubHkgbmVlZCB0byBlcmFzZSB0aGUgbW92aWUgZ3dv
cmxkIHdoZW4gdGhlIGxvYWQgc3RhdGUgY2hhbmdlcyB0byBsb2FkZWQgd2hpbGUgaXQKKyAgICAg
ICAgICAgIC8vICBpcyB2aXNpYmxlIGFzIHRoZSBnd29ybGQgaXMgZGVzdHJveWVkL2NyZWF0ZWQg
d2hlbiB2aXNpYmlsaXR5IGNoYW5nZXMKKyAgICAgICAgICAgIGJvb2wgc2hvdWxkUmVzdG9yZVBs
YXliYWNrU3RhdGUgPSBmYWxzZTsKKyAgICAgICAgICAgIGJvb2wgbW92aWVOZXdseVBsYXlhYmxl
ID0gbG9hZFN0YXRlID49IFFUTW92aWVMb2FkU3RhdGVMb2FkZWQgJiYgbV9sb2FkU3RhdGUgPCBR
VE1vdmllTG9hZFN0YXRlTG9hZGVkOworICAgICAgICAgICAgbV9sb2FkU3RhdGUgPSBsb2FkU3Rh
dGU7CisgICAgICAgICAgICBpZiAobW92aWVOZXdseVBsYXlhYmxlKSB7CisgICAgICAgICAgICAg
ICAgY2FjaGVNb3ZpZVNjYWxlKCk7CisgICAgICAgICAgICAgICAgdXBkYXRlTW92aWVTaXplKCk7
CisgICAgICAgICAgICAgICAgaWYgKG1fdmlzaWJsZSkKKyAgICAgICAgICAgICAgICAgICAgY2xl
YXJHV29ybGQoKTsKKyAgICAgICAgICAgICAgICBzaG91bGRSZXN0b3JlUGxheWJhY2tTdGF0ZSA9
IHRydWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghbV9tb3ZpZUNvbnRyb2xs
ZXIgJiYgbV9sb2FkU3RhdGUgPj0gUVRNb3ZpZUxvYWRTdGF0ZUxvYWRlZCkKKyAgICAgICAgICAg
ICAgICBjcmVhdGVNb3ZpZUNvbnRyb2xsZXIoKTsKKyAgICAgICAgICAgIG1fY2xpZW50LT5tb3Zp
ZUxvYWRTdGF0ZUNoYW5nZWQobV9tb3ZpZVdpbik7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGlmIChzaG91bGRSZXN0b3JlUGxheWJhY2tTdGF0ZSAmJiBtX3RpbWVUb1Jlc3RvcmUgIT0gLTEu
MGYpIHsKKyAgICAgICAgICAgICAgICBtX21vdmllV2luLT5zZXRDdXJyZW50VGltZShtX3RpbWVU
b1Jlc3RvcmUpOworICAgICAgICAgICAgICAgIG1fdGltZVRvUmVzdG9yZSA9IC0xLjBmOworICAg
ICAgICAgICAgICAgIG1fbW92aWVXaW4tPnNldFJhdGUobV9yYXRlVG9SZXN0b3JlKTsKKyAgICAg
ICAgICAgICAgICBtX3JhdGVUb1Jlc3RvcmUgPSAtMS4wZjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKG1fbW92aWVXaW4tPm1fZGlzYWJsZWQpIHsKKyAgICAgICAgICAgICAgICBl
bmRUYXNrKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIG1fbGFzdExvYWRTdGF0ZUNoZWNrVGltZSA9IHN5c3RlbVRpbWUoKTsKKyAg
ICB9CisKKyAgICBib29sIGVuZGVkID0gISFJc01vdmllRG9uZShtX21vdmllKTsKKyAgICBpZiAo
ZW5kZWQgIT0gbV9lbmRlZCkgeworICAgICAgICBtX2VuZGVkID0gZW5kZWQ7CisgICAgICAgIGlm
IChtX2NsaWVudCAmJiBlbmRlZCkKKyAgICAgICAgICAgIG1fY2xpZW50LT5tb3ZpZUVuZGVkKG1f
bW92aWVXaW4pOworICAgIH0KKworICAgIGZsb2F0IHRpbWUgPSBtX21vdmllV2luLT5jdXJyZW50
VGltZSgpOworICAgIGlmICh0aW1lIDwgbV9sYXN0TWVkaWFUaW1lIHx8IHRpbWUgPj0gbV9sYXN0
TWVkaWFUaW1lICsgY05vbkNvbnRpbnVvdXNUaW1lQ2hhbmdlIHx8IG1fc2Vla2luZykgeworICAg
ICAgICBtX3NlZWtpbmcgPSBmYWxzZTsKKyAgICAgICAgaWYgKG1fY2xpZW50KQorICAgICAgICAg
ICAgbV9jbGllbnQtPm1vdmllVGltZUNoYW5nZWQobV9tb3ZpZVdpbik7CisgICAgfQorICAgIG1f
bGFzdE1lZGlhVGltZSA9IHRpbWU7CisKKyAgICBpZiAobV9sb2FkRXJyb3IpCisgICAgICAgIGVu
ZFRhc2soKTsKK30KKwordm9pZCBRVE1vdmllV2luUHJpdmF0ZTo6Y3JlYXRlTW92aWVDb250cm9s
bGVyKCkKK3sKKyAgICBSZWN0IGJvdW5kczsKKyAgICBsb25nIGZsYWdzOworCisgICAgaWYgKCFt
X21vdmllKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9tb3ZpZUNvbnRyb2xsZXIpCisg
ICAgICAgIERpc3Bvc2VNb3ZpZUNvbnRyb2xsZXIobV9tb3ZpZUNvbnRyb2xsZXIpOworCisgICAg
R2V0TW92aWVCb3gobV9tb3ZpZSwgJmJvdW5kcyk7CisgICAgZmxhZ3MgPSBtY1RvcExlZnRNb3Zp
ZSB8IG1jTm90VmlzaWJsZTsKKyAgICBtX21vdmllQ29udHJvbGxlciA9IE5ld01vdmllQ29udHJv
bGxlcihtX21vdmllLCAmYm91bmRzLCBmbGFncyk7CisgICAgaWYgKCFtX21vdmllQ29udHJvbGxl
cikKKyAgICAgICAgcmV0dXJuOworCisgICAgTUNTZXRDb250cm9sbGVyUG9ydChtX21vdmllQ29u
dHJvbGxlciwgbV9nV29ybGQpOworICAgIE1DU2V0Q29udHJvbGxlckF0dGFjaGVkKG1fbW92aWVD
b250cm9sbGVyLCBmYWxzZSk7Cit9CisKK3ZvaWQgUVRNb3ZpZVdpblByaXZhdGU6OnJlZ2lzdGVy
RHJhd2luZ0NhbGxiYWNrKCkKK3sKKyAgICBVcHBQYXJhbSBwYXJhbTsKKyAgICBwYXJhbS5wdHIg
PSB0aGlzOworICAgIFNldE1vdmllRHJhd2luZ0NvbXBsZXRlUHJvYyhtX21vdmllLCBtb3ZpZURy
YXdpbmdDYWxsV2hlbkNoYW5nZWQsIGdNb3ZpZURyYXdpbmdDb21wbGV0ZVVQUCwgcGFyYW0ubG9u
Z1ZhbHVlKTsKK30KKwordm9pZCBRVE1vdmllV2luUHJpdmF0ZTo6ZHJhd2luZ0NvbXBsZXRlKCkK
K3sKKyAgICBpZiAoIW1fZ1dvcmxkIHx8IG1fbW92aWVXaW4tPm1fZGlzYWJsZWQgfHwgbV9sb2Fk
U3RhdGUgPCBRVE1vdmllTG9hZFN0YXRlTG9hZGVkKQorICAgICAgICByZXR1cm47CisgICAgbV9j
bGllbnQtPm1vdmllTmV3SW1hZ2VBdmFpbGFibGUobV9tb3ZpZVdpbik7Cit9CisKK3ZvaWQgUVRN
b3ZpZVdpblByaXZhdGU6OnVwZGF0ZUdXb3JsZCgpCit7CisgICAgYm9vbCBzaG91bGRCZVZpc2li
bGUgPSBtX3Zpc2libGU7CisgICAgaWYgKCFtX2hlaWdodCB8fCAhbV93aWR0aCkKKyAgICAgICAg
c2hvdWxkQmVWaXNpYmxlID0gZmFsc2U7CisKKyAgICBpZiAoc2hvdWxkQmVWaXNpYmxlICYmICFt
X2dXb3JsZCkKKyAgICAgICAgY3JlYXRlR1dvcmxkKCk7CisgICAgZWxzZSBpZiAoIXNob3VsZEJl
VmlzaWJsZSAmJiBtX2dXb3JsZCkKKyAgICAgICAgZGVsZXRlR1dvcmxkKCk7CisgICAgZWxzZSBp
ZiAobV9nV29ybGQgJiYgKG1fd2lkdGggPiBtX2dXb3JsZFdpZHRoIHx8IG1faGVpZ2h0ID4gbV9n
V29ybGRIZWlnaHQpKSB7CisgICAgICAgIC8vIG5lZWQgYSBiaWdnZXIsIGJldHRlciBnV29ybGQK
KyAgICAgICAgZGVsZXRlR1dvcmxkKCk7CisgICAgICAgIGNyZWF0ZUdXb3JsZCgpOworICAgIH0K
K30KKwordm9pZCBRVE1vdmllV2luUHJpdmF0ZTo6Y3JlYXRlR1dvcmxkKCkKK3sKKyAgICBBU1NF
UlQoIW1fZ1dvcmxkKTsKKyAgICBpZiAoIW1fbW92aWUgfHwgbV9sb2FkU3RhdGUgPCBRVE1vdmll
TG9hZFN0YXRlTG9hZGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2dXb3JsZFdpZHRoID0g
bWF4KGNHV29ybGRNaW5XaWR0aCwgbV93aWR0aCk7CisgICAgbV9nV29ybGRIZWlnaHQgPSBtYXgo
Y0dXb3JsZE1pbkhlaWdodCwgbV9oZWlnaHQpOworICAgIFJlY3QgYm91bmRzOyAKKyAgICBib3Vu
ZHMudG9wID0gMDsKKyAgICBib3VuZHMubGVmdCA9IDA7IAorICAgIGJvdW5kcy5yaWdodCA9IG1f
Z1dvcmxkV2lkdGg7CisgICAgYm91bmRzLmJvdHRvbSA9IG1fZ1dvcmxkSGVpZ2h0OworICAgIE9T
RXJyIGVyciA9IFFUTmV3R1dvcmxkKCZtX2dXb3JsZCwgazMyQkdSQVBpeGVsRm9ybWF0LCAmYm91
bmRzLCAwLCAwLCAwKTsgCisgICAgaWYgKGVycikgCisgICAgICAgIHJldHVybjsKKyAgICBHZXRN
b3ZpZUdXb3JsZChtX21vdmllLCAmbV9zYXZlZEdXb3JsZCwgMCk7CisgICAgaWYgKG1fbW92aWVD
b250cm9sbGVyKQorICAgICAgICBNQ1NldENvbnRyb2xsZXJQb3J0KG1fbW92aWVDb250cm9sbGVy
LCBtX2dXb3JsZCk7CisgICAgU2V0TW92aWVHV29ybGQobV9tb3ZpZSwgbV9nV29ybGQsIDApOwor
ICAgIGJvdW5kcy5yaWdodCA9IG1fd2lkdGg7CisgICAgYm91bmRzLmJvdHRvbSA9IG1faGVpZ2h0
OworICAgIGlmIChtX21vdmllQ29udHJvbGxlcikKKyAgICAgICAgTUNTZXRDb250cm9sbGVyQm91
bmRzUmVjdChtX21vdmllQ29udHJvbGxlciwgJmJvdW5kcyk7CisgICAgU2V0TW92aWVCb3gobV9t
b3ZpZSwgJmJvdW5kcyk7Cit9CisKK3ZvaWQgUVRNb3ZpZVdpblByaXZhdGU6OmNsZWFyR1dvcmxk
KCkKK3sKKyAgICBpZiAoIW1fbW92aWV8fCFtX2dXb3JsZCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgR3JhZlB0ciBzYXZlUG9ydDsKKyAgICBHZXRQb3J0KCZzYXZlUG9ydCk7IAorICAgIE1hY1Nl
dFBvcnQoKEdyYWZQdHIpbV9nV29ybGQpOworCisgICAgUmVjdCBib3VuZHM7IAorICAgIGJvdW5k
cy50b3AgPSAwOworICAgIGJvdW5kcy5sZWZ0ID0gMDsgCisgICAgYm91bmRzLnJpZ2h0ID0gbV9n
V29ybGRXaWR0aDsKKyAgICBib3VuZHMuYm90dG9tID0gbV9nV29ybGRIZWlnaHQ7CisgICAgRXJh
c2VSZWN0KCZib3VuZHMpOworCisgICAgTWFjU2V0UG9ydChzYXZlUG9ydCk7Cit9CisKK3ZvaWQg
UVRNb3ZpZVdpblByaXZhdGU6OnNldFNpemUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworICAg
IGlmIChtX3dpZHRoID09IHdpZHRoICYmIG1faGVpZ2h0ID09IGhlaWdodCkKKyAgICAgICAgcmV0
dXJuOworICAgIG1fd2lkdGggPSB3aWR0aDsKKyAgICBtX2hlaWdodCA9IGhlaWdodDsKKworICAg
IC8vIERvIG5vdCBjaGFuZ2UgbW92aWUgYm94IGJlZm9yZSByZWFjaGluZyBsb2FkIHN0YXRlIGxv
YWRlZCBhcyB3ZSBncmFiCisgICAgLy8gdGhlIGluaXRpYWwgc2l6ZSB3aGVuIHRhc2soKSBzZWVz
IHRoYXQgc3RhdGUgZm9yIHRoZSBmaXJzdCB0aW1lLCBhbmQKKyAgICAvLyB3ZSBuZWVkIHRoZSBp
bml0aWFsIHNpemUgdG8gYmUgYWJsZSB0byBzY2FsZSBtb3ZpZSBwcm9wZXJseS4gCisgICAgaWYg
KCFtX21vdmllIHx8IG1fbG9hZFN0YXRlIDwgUVRNb3ZpZUxvYWRTdGF0ZUxvYWRlZCkKKyAgICAg
ICAgcmV0dXJuOworCisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIEFTU0VSVChtX3NjYWxlQ2Fj
aGVkKTsKKyNlbmRpZgorCisgICAgdXBkYXRlTW92aWVTaXplKCk7Cit9CisKK3ZvaWQgUVRNb3Zp
ZVdpblByaXZhdGU6OnVwZGF0ZU1vdmllU2l6ZSgpCit7CisgICAgaWYgKCFtX21vdmllIHx8IG1f
bG9hZFN0YXRlIDwgUVRNb3ZpZUxvYWRTdGF0ZUxvYWRlZCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgUmVjdCBib3VuZHM7IAorICAgIGJvdW5kcy50b3AgPSAwOworICAgIGJvdW5kcy5sZWZ0ID0g
MDsgCisgICAgYm91bmRzLnJpZ2h0ID0gbV93aWR0aDsKKyAgICBib3VuZHMuYm90dG9tID0gbV9o
ZWlnaHQ7CisgICAgaWYgKG1fbW92aWVDb250cm9sbGVyKQorICAgICAgICBNQ1NldENvbnRyb2xs
ZXJCb3VuZHNSZWN0KG1fbW92aWVDb250cm9sbGVyLCAmYm91bmRzKTsKKyAgICBTZXRNb3ZpZUJv
eChtX21vdmllLCAmYm91bmRzKTsKKyAgICB1cGRhdGVHV29ybGQoKTsKK30KKworCit2b2lkIFFU
TW92aWVXaW5Qcml2YXRlOjpkZWxldGVHV29ybGQoKQoreworICAgIEFTU0VSVChtX2dXb3JsZCk7
CisgICAgaWYgKG1fbW92aWVDb250cm9sbGVyKQorICAgICAgICBNQ1NldENvbnRyb2xsZXJQb3J0
KG1fbW92aWVDb250cm9sbGVyLCBtX3NhdmVkR1dvcmxkKTsKKyAgICBpZiAobV9tb3ZpZSkKKyAg
ICAgICAgU2V0TW92aWVHV29ybGQobV9tb3ZpZSwgbV9zYXZlZEdXb3JsZCwgMCk7CisgICAgbV9z
YXZlZEdXb3JsZCA9IDA7CisgICAgRGlzcG9zZUdXb3JsZChtX2dXb3JsZCk7IAorICAgIG1fZ1dv
cmxkID0gMDsKKyAgICBtX2dXb3JsZFdpZHRoID0gMDsKKyAgICBtX2dXb3JsZEhlaWdodCA9IDA7
Cit9CisKKworUVRNb3ZpZVdpbjo6UVRNb3ZpZVdpbihRVE1vdmllV2luQ2xpZW50KiBjbGllbnQp
CisgICAgOiBtX3ByaXZhdGUobmV3IFFUTW92aWVXaW5Qcml2YXRlKCkpCisgICAgLCBtX2Rpc2Fi
bGVkKGZhbHNlKQoreworICAgIG1fcHJpdmF0ZS0+bV9tb3ZpZVdpbiA9IHRoaXM7CisgICAgbV9w
cml2YXRlLT5tX2NsaWVudCA9IGNsaWVudDsKKyAgICBpbml0aWFsaXplUXVpY2tUaW1lKCk7Cit9
CisKK1FUTW92aWVXaW46On5RVE1vdmllV2luKCkKK3sKKyAgICBkZWxldGUgbV9wcml2YXRlOwor
fQorCit2b2lkIFFUTW92aWVXaW46OnBsYXkoKQoreworICAgIG1fcHJpdmF0ZS0+bV90aW1lVG9S
ZXN0b3JlID0gLTEuMGY7CisKKyAgICBpZiAobV9wcml2YXRlLT5tX21vdmllQ29udHJvbGxlcikK
KyAgICAgICAgTUNEb0FjdGlvbihtX3ByaXZhdGUtPm1fbW92aWVDb250cm9sbGVyLCBtY0FjdGlv
blByZXJvbGxBbmRQbGF5LCAodm9pZCAqKUdldE1vdmllUHJlZmVycmVkUmF0ZShtX3ByaXZhdGUt
Pm1fbW92aWUpKTsKKyAgICBlbHNlCisgICAgICAgIFN0YXJ0TW92aWUobV9wcml2YXRlLT5tX21v
dmllKTsKKyAgICBtX3ByaXZhdGUtPnN0YXJ0VGFzaygpOworfQorCit2b2lkIFFUTW92aWVXaW46
OnBhdXNlKCkKK3sKKyAgICBtX3ByaXZhdGUtPm1fdGltZVRvUmVzdG9yZSA9IC0xLjBmOworCisg
ICAgaWYgKG1fcHJpdmF0ZS0+bV9tb3ZpZUNvbnRyb2xsZXIpCisgICAgICAgIE1DRG9BY3Rpb24o
bV9wcml2YXRlLT5tX21vdmllQ29udHJvbGxlciwgbWNBY3Rpb25QbGF5LCAwKTsKKyAgICBlbHNl
CisgICAgICAgIFN0b3BNb3ZpZShtX3ByaXZhdGUtPm1fbW92aWUpOworICAgIHVwZGF0ZVRhc2tU
aW1lcigpOworfQorCitmbG9hdCBRVE1vdmllV2luOjpyYXRlKCkgY29uc3QKK3sKKyAgICBpZiAo
IW1fcHJpdmF0ZS0+bV9tb3ZpZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIEZpeGVk
VG9GbG9hdChHZXRNb3ZpZVJhdGUobV9wcml2YXRlLT5tX21vdmllKSk7Cit9CisKK3ZvaWQgUVRN
b3ZpZVdpbjo6c2V0UmF0ZShmbG9hdCByYXRlKQoreworICAgIGlmICghbV9wcml2YXRlLT5tX21v
dmllKQorICAgICAgICByZXR1cm47ICAgIAorICAgIG1fcHJpdmF0ZS0+bV90aW1lVG9SZXN0b3Jl
ID0gLTEuMGY7CisgICAgCisgICAgaWYgKG1fcHJpdmF0ZS0+bV9tb3ZpZUNvbnRyb2xsZXIpCisg
ICAgICAgIE1DRG9BY3Rpb24obV9wcml2YXRlLT5tX21vdmllQ29udHJvbGxlciwgbWNBY3Rpb25Q
cmVyb2xsQW5kUGxheSwgKHZvaWQgKilGbG9hdFRvRml4ZWQocmF0ZSkpOworICAgIGVsc2UKKyAg
ICAgICAgU2V0TW92aWVSYXRlKG1fcHJpdmF0ZS0+bV9tb3ZpZSwgRmxvYXRUb0ZpeGVkKHJhdGUp
KTsKKyAgICB1cGRhdGVUYXNrVGltZXIoKTsKK30KKworZmxvYXQgUVRNb3ZpZVdpbjo6ZHVyYXRp
b24oKSBjb25zdAoreworICAgIGlmICghbV9wcml2YXRlLT5tX21vdmllKQorICAgICAgICByZXR1
cm4gMDsKKyAgICBUaW1lVmFsdWUgdmFsID0gR2V0TW92aWVEdXJhdGlvbihtX3ByaXZhdGUtPm1f
bW92aWUpOworICAgIFRpbWVTY2FsZSBzY2FsZSA9IEdldE1vdmllVGltZVNjYWxlKG1fcHJpdmF0
ZS0+bV9tb3ZpZSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih2YWwpIC8gc2NhbGU7
Cit9CisKK2Zsb2F0IFFUTW92aWVXaW46OmN1cnJlbnRUaW1lKCkgY29uc3QKK3sKKyAgICBpZiAo
IW1fcHJpdmF0ZS0+bV9tb3ZpZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgVGltZVZhbHVlIHZh
bCA9IEdldE1vdmllVGltZShtX3ByaXZhdGUtPm1fbW92aWUsIDApOworICAgIFRpbWVTY2FsZSBz
Y2FsZSA9IEdldE1vdmllVGltZVNjYWxlKG1fcHJpdmF0ZS0+bV9tb3ZpZSk7CisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PGZsb2F0Pih2YWwpIC8gc2NhbGU7Cit9CisKK3ZvaWQgUVRNb3ZpZVdpbjo6
c2V0Q3VycmVudFRpbWUoZmxvYXQgdGltZSkgY29uc3QKK3sKKyAgICBpZiAoIW1fcHJpdmF0ZS0+
bV9tb3ZpZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9wcml2YXRlLT5tX3RpbWVUb1Jlc3Rv
cmUgPSAtMS4wZjsKKyAgICAKKyAgICBtX3ByaXZhdGUtPm1fc2Vla2luZyA9IHRydWU7CisgICAg
VGltZVNjYWxlIHNjYWxlID0gR2V0TW92aWVUaW1lU2NhbGUobV9wcml2YXRlLT5tX21vdmllKTsK
KyAgICBpZiAobV9wcml2YXRlLT5tX21vdmllQ29udHJvbGxlcil7CisgICAgICAgIFFUUmVzdGFy
dEF0VGltZVJlY29yZCByZXN0YXJ0ID0geyB0aW1lICogc2NhbGUgLCAwIH07CisgICAgICAgIE1D
RG9BY3Rpb24obV9wcml2YXRlLT5tX21vdmllQ29udHJvbGxlciwgbWNBY3Rpb25SZXN0YXJ0QXRU
aW1lLCAodm9pZCAqKSZyZXN0YXJ0KTsKKyAgICB9IGVsc2UKKyAgICAgICAgU2V0TW92aWVUaW1l
VmFsdWUobV9wcml2YXRlLT5tX21vdmllLCBUaW1lVmFsdWUodGltZSAqIHNjYWxlKSk7CisgICAg
dXBkYXRlVGFza1RpbWVyKCk7Cit9CisKK3ZvaWQgUVRNb3ZpZVdpbjo6c2V0Vm9sdW1lKGZsb2F0
IHZvbHVtZSkKK3sKKyAgICBpZiAoIW1fcHJpdmF0ZS0+bV9tb3ZpZSkKKyAgICAgICAgcmV0dXJu
OworICAgIFNldE1vdmllVm9sdW1lKG1fcHJpdmF0ZS0+bV9tb3ZpZSwgc3RhdGljX2Nhc3Q8c2hv
cnQ+KHZvbHVtZSAqIDI1NikpOworfQorCit2b2lkIFFUTW92aWVXaW46OnNldFByZXNlcnZlc1Bp
dGNoKGJvb2wgcHJlc2VydmVzUGl0Y2gpCit7CisgICAgaWYgKCFtX3ByaXZhdGUtPm1fbW92aWUg
fHwgIW1fcHJpdmF0ZS0+bV9jdXJyZW50VVJMKQorICAgICAgICByZXR1cm47CisKKyAgICBPU0Vy
ciBlcnJvcjsKKyAgICBib29sIHByb3AgPSBmYWxzZTsKKworICAgIGVycm9yID0gUVRHZXRNb3Zp
ZVByb3BlcnR5KG1fcHJpdmF0ZS0+bV9tb3ZpZSwga1FUUHJvcGVydHlDbGFzc19BdWRpbywga1FU
QXVkaW9Qcm9wZXJ0eUlEX1JhdGVDaGFuZ2VzUHJlc2VydmVQaXRjaCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzaXplb2Yoa1FUQXVkaW9Qcm9wZXJ0eUlEX1JhdGVDaGFuZ2VzUHJl
c2VydmVQaXRjaCksIHN0YXRpY19jYXN0PFFUUHJvcGVydHlWYWx1ZVB0cj4oJnByb3ApLCAwKTsK
KworICAgIGlmIChlcnJvciB8fCBwcm9wID09IHByZXNlcnZlc1BpdGNoKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX3ByaXZhdGUtPm1fdGltZVRvUmVzdG9yZSA9IGN1cnJlbnRUaW1lKCk7Cisg
ICAgbV9wcml2YXRlLT5tX3JhdGVUb1Jlc3RvcmUgPSByYXRlKCk7CisgICAgbG9hZChtX3ByaXZh
dGUtPm1fY3VycmVudFVSTCwgcHJlc2VydmVzUGl0Y2gpOworfQorCit1bnNpZ25lZCBRVE1vdmll
V2luOjpkYXRhU2l6ZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3ByaXZhdGUtPm1fbW92aWUpCisg
ICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBHZXRNb3ZpZURhdGFTaXplKG1fcHJpdmF0ZS0+
bV9tb3ZpZSwgMCwgR2V0TW92aWVEdXJhdGlvbihtX3ByaXZhdGUtPm1fbW92aWUpKTsKK30KKwor
ZmxvYXQgUVRNb3ZpZVdpbjo6bWF4VGltZUxvYWRlZCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3By
aXZhdGUtPm1fbW92aWUpCisgICAgICAgIHJldHVybiAwOworICAgIFRpbWVWYWx1ZSB2YWw7Cisg
ICAgR2V0TWF4TG9hZGVkVGltZUluTW92aWUobV9wcml2YXRlLT5tX21vdmllLCAmdmFsKTsKKyAg
ICBUaW1lU2NhbGUgc2NhbGUgPSBHZXRNb3ZpZVRpbWVTY2FsZShtX3ByaXZhdGUtPm1fbW92aWUp
OworICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4odmFsKSAvIHNjYWxlOworfQorCitsb25n
IFFUTW92aWVXaW46OmxvYWRTdGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+
bV9sb2FkU3RhdGU7Cit9CisKK3ZvaWQgUVRNb3ZpZVdpbjo6Z2V0TmF0dXJhbFNpemUoaW50JiB3
aWR0aCwgaW50JiBoZWlnaHQpCit7CisgICAgUmVjdCByZWN0ID0geyAwLCB9OworCisgICAgaWYg
KG1fcHJpdmF0ZS0+bV9tb3ZpZSkKKyAgICAgICAgR2V0TW92aWVOYXR1cmFsQm91bmRzUmVjdCht
X3ByaXZhdGUtPm1fbW92aWUsICZyZWN0KTsKKyAgICB3aWR0aCA9IChyZWN0LnJpZ2h0IC0gcmVj
dC5sZWZ0KSAqIG1fcHJpdmF0ZS0+bV93aWR0aFNjYWxlRmFjdG9yOworICAgIGhlaWdodCA9IChy
ZWN0LmJvdHRvbSAtIHJlY3QudG9wKSAqIG1fcHJpdmF0ZS0+bV9oZWlnaHRTY2FsZUZhY3RvcjsK
K30KKwordm9pZCBRVE1vdmllV2luOjpzZXRTaXplKGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sK
KyAgICBtX3ByaXZhdGUtPnNldFNpemUod2lkdGgsIGhlaWdodCk7CisgICAgdXBkYXRlVGFza1Rp
bWVyKDApOworfQorCit2b2lkIFFUTW92aWVXaW46OnNldFZpc2libGUoYm9vbCBiKQoreworICAg
IG1fcHJpdmF0ZS0+bV92aXNpYmxlID0gYjsKKyAgICBtX3ByaXZhdGUtPnVwZGF0ZUdXb3JsZCgp
OworfQorCit2b2lkIFFUTW92aWVXaW46OmdldEN1cnJlbnRGcmFtZUluZm8odm9pZComIGJ1ZmZl
ciwgdW5zaWduZWQmIGJpdHNQZXJQaXhlbCwgdW5zaWduZWQmIHJvd0J5dGVzLCB1bnNpZ25lZCYg
d2lkdGgsIHVuc2lnbmVkJiBoZWlnaHQpCit7CisgICAgaWYgKCFtX3ByaXZhdGUtPm1fZ1dvcmxk
KSB7CisgICAgICAgIGJ1ZmZlciA9IDA7CisgICAgICAgIGJpdHNQZXJQaXhlbCA9IDA7CisgICAg
ICAgIHJvd0J5dGVzID0gMDsKKyAgICAgICAgd2lkdGggPSAwOworICAgICAgICBoZWlnaHQgPSAw
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFBpeE1hcEhhbmRsZSBvZmZzY3JlZW5QaXhN
YXAgPSBHZXRHV29ybGRQaXhNYXAobV9wcml2YXRlLT5tX2dXb3JsZCk7CisgICAgYnVmZmVyID0g
KCpvZmZzY3JlZW5QaXhNYXApLT5iYXNlQWRkcjsKKyAgICBiaXRzUGVyUGl4ZWwgPSAoKm9mZnNj
cmVlblBpeE1hcCktPnBpeGVsU2l6ZTsKKyAgICByb3dCeXRlcyA9ICgqb2Zmc2NyZWVuUGl4TWFw
KS0+cm93Qnl0ZXMgJiAweDNGRkY7CisgICAgd2lkdGggPSBtX3ByaXZhdGUtPm1fd2lkdGg7Cisg
ICAgaGVpZ2h0ID0gbV9wcml2YXRlLT5tX2hlaWdodDsKK30KKwordm9pZCBRVE1vdmllV2luOjpw
YWludChIREMgaGRjLCBpbnQgeCwgaW50IHkpCit7CisgICAgaWYgKCFtX3ByaXZhdGUtPm1fZ1dv
cmxkKQorICAgICAgICByZXR1cm47CisKKyAgICBIREMgaGRjU3JjID0gc3RhdGljX2Nhc3Q8SERD
PihHZXRQb3J0SERDKHJlaW50ZXJwcmV0X2Nhc3Q8R3JhZlB0cj4obV9wcml2YXRlLT5tX2dXb3Js
ZCkpKTsgCisgICAgaWYgKCFoZGNTcmMpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEZJWE1F
OiBJZiB3ZSBjb3VsZCBkZXRlcm1pbmUgdGhlIG1vdmllIGhhcyBubyBhbHBoYSwgd2UgY291bGQg
dXNlIEJpdEJsdCBmb3IgdGhvc2UgY2FzZXMsIHdoaWNoIG1pZ2h0IGJlIGZhc3Rlci4KKyAgICBC
TEVOREZVTkNUSU9OIGJsZW5kRnVuY3Rpb247IAorICAgIGJsZW5kRnVuY3Rpb24uQmxlbmRPcCA9
IEFDX1NSQ19PVkVSOworICAgIGJsZW5kRnVuY3Rpb24uQmxlbmRGbGFncyA9IDA7CisgICAgYmxl
bmRGdW5jdGlvbi5Tb3VyY2VDb25zdGFudEFscGhhID0gMjU1OworICAgIGJsZW5kRnVuY3Rpb24u
QWxwaGFGb3JtYXQgPSBBQ19TUkNfQUxQSEE7CisgICAgQWxwaGFCbGVuZChoZGMsIHgsIHksIG1f
cHJpdmF0ZS0+bV93aWR0aCwgbV9wcml2YXRlLT5tX2hlaWdodCwgaGRjU3JjLCAKKyAgICAgICAg
IDAsIDAsIG1fcHJpdmF0ZS0+bV93aWR0aCwgbV9wcml2YXRlLT5tX2hlaWdodCwgYmxlbmRGdW5j
dGlvbik7Cit9CisKK3ZvaWQgUVRNb3ZpZVdpbjo6bG9hZChjb25zdCBVQ2hhciogdXJsLCBpbnQg
bGVuLCBib29sIHByZXNlcnZlc1BpdGNoKQoreworICAgIENGU3RyaW5nUmVmIHVybFN0cmluZ1Jl
ZiA9IENGU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoa0NGQWxsb2NhdG9yRGVmYXVsdCwgcmVp
bnRlcnByZXRfY2FzdDxjb25zdCBVbmlDaGFyKj4odXJsKSwgbGVuKTsKKyAgICBDRlVSTFJlZiBj
ZlVSTCA9IENGVVJMQ3JlYXRlV2l0aFN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCB1cmxTdHJp
bmdSZWYsIDApOworCisgICAgbG9hZChjZlVSTCwgcHJlc2VydmVzUGl0Y2gpOworCisgICAgQ0ZS
ZWxlYXNlKGNmVVJMKTsKKyAgICBDRlJlbGVhc2UodXJsU3RyaW5nUmVmKTsKK30KKwordm9pZCBR
VE1vdmllV2luOjpsb2FkKENGVVJMUmVmIHVybCwgYm9vbCBwcmVzZXJ2ZXNQaXRjaCkKK3sKKyAg
ICBpZiAoIXVybCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fcHJpdmF0ZS0+bV9tb3Zp
ZSkgeworICAgICAgICBtX3ByaXZhdGUtPmVuZFRhc2soKTsKKyAgICAgICAgaWYgKG1fcHJpdmF0
ZS0+bV9nV29ybGQpCisgICAgICAgICAgICBtX3ByaXZhdGUtPmRlbGV0ZUdXb3JsZCgpOworICAg
ICAgICBpZiAobV9wcml2YXRlLT5tX21vdmllQ29udHJvbGxlcikKKyAgICAgICAgICAgIERpc3Bv
c2VNb3ZpZUNvbnRyb2xsZXIobV9wcml2YXRlLT5tX21vdmllQ29udHJvbGxlcik7CisgICAgICAg
IG1fcHJpdmF0ZS0+bV9tb3ZpZUNvbnRyb2xsZXIgPSAwOworICAgICAgICBEaXNwb3NlTW92aWUo
bV9wcml2YXRlLT5tX21vdmllKTsKKyAgICAgICAgbV9wcml2YXRlLT5tX21vdmllID0gMDsKKyAg
ICAgICAgbV9wcml2YXRlLT5tX2xvYWRTdGF0ZSA9IDA7CisgICAgfSAgCisKKyAgICAvLyBEZWZp
bmUgYSBwcm9wZXJ0eSBhcnJheSBmb3IgTmV3TW92aWVGcm9tUHJvcGVydGllcy4gOCBzaG91bGQg
YmUgZW5vdWdoIGZvciBvdXIgbmVlZHMuIAorICAgIFFUTmV3TW92aWVQcm9wZXJ0eUVsZW1lbnQg
bW92aWVQcm9wc1s4XTsgCisgICAgSXRlbUNvdW50IG1vdmllUHJvcENvdW50ID0gMDsgCisKKyAg
ICBib29sIGJvb2xUcnVlID0gdHJ1ZTsKKyAgICAKKyAgICAvLyBEaXNhYmxlIHN0cmVhbWluZyBz
dXBwb3J0IGZvciBub3cuIAorICAgIENGU3RyaW5nUmVmIHNjaGVtZSA9IENGVVJMQ29weVNjaGVt
ZSh1cmwpOworICAgIGJvb2wgaXNSVFNQID0gQ0ZTdHJpbmdIYXNQcmVmaXgoc2NoZW1lLCBDRlNU
UigicnRzcDoiKSk7CisgICAgQ0ZSZWxlYXNlKHNjaGVtZSk7CisKKyAgICBpZiAoaXNSVFNQKSB7
CisgICAgICAgIG1fcHJpdmF0ZS0+bV9sb2FkRXJyb3IgPSBub01vdmllRm91bmQ7CisgICAgICAg
IGdvdG8gZW5kOworICAgIH0KKworICAgIGlmIChtX3ByaXZhdGUtPm1fY3VycmVudFVSTCkgewor
ICAgICAgICBpZiAobV9wcml2YXRlLT5tX2N1cnJlbnRVUkwgIT0gdXJsKSB7CisgICAgICAgICAg
ICBDRlJlbGVhc2UobV9wcml2YXRlLT5tX2N1cnJlbnRVUkwpOworICAgICAgICAgICAgbV9wcml2
YXRlLT5tX2N1cnJlbnRVUkwgPSB1cmw7CisgICAgICAgICAgICBDRlJldGFpbih1cmwpOworICAg
ICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9wcml2YXRlLT5tX2N1cnJlbnRVUkwgPSB1
cmw7CisgICAgICAgIENGUmV0YWluKHVybCk7CisgICAgfQorCisgICAgLy8gQWRkIHRoZSBtb3Zp
ZSBkYXRhIGxvY2F0aW9uIHRvIHRoZSBwcm9wZXJ0eSBhcnJheSAKKyAgICBtb3ZpZVByb3BzW21v
dmllUHJvcENvdW50XS5wcm9wQ2xhc3MgPSBrUVRQcm9wZXJ0eUNsYXNzX0RhdGFMb2NhdGlvbjsg
CisgICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcElEID0ga1FURGF0YUxvY2F0aW9u
UHJvcGVydHlJRF9DRlVSTDsgCisgICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcFZh
bHVlU2l6ZSA9IHNpemVvZihtX3ByaXZhdGUtPm1fY3VycmVudFVSTCk7IAorICAgIG1vdmllUHJv
cHNbbW92aWVQcm9wQ291bnRdLnByb3BWYWx1ZUFkZHJlc3MgPSAmKG1fcHJpdmF0ZS0+bV9jdXJy
ZW50VVJMKTsgCisgICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcFN0YXR1cyA9IDA7
IAorICAgIG1vdmllUHJvcENvdW50Kys7IAorCisgICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3Vu
dF0ucHJvcENsYXNzID0ga1FUUHJvcGVydHlDbGFzc19Nb3ZpZUluc3RhbnRpYXRpb247IAorICAg
IG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BJRCA9IGtRVE1vdmllSW5zdGFudGlhdGlv
blByb3BlcnR5SURfRG9udEFza1VucmVzb2x2ZWREYXRhUmVmczsgCisgICAgbW92aWVQcm9wc1tt
b3ZpZVByb3BDb3VudF0ucHJvcFZhbHVlU2l6ZSA9IHNpemVvZihib29sVHJ1ZSk7IAorICAgIG1v
dmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BWYWx1ZUFkZHJlc3MgPSAmYm9vbFRydWU7IAor
ICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BTdGF0dXMgPSAwOyAKKyAgICBtb3Zp
ZVByb3BDb3VudCsrOyAKKworICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BDbGFz
cyA9IGtRVFByb3BlcnR5Q2xhc3NfTW92aWVJbnN0YW50aWF0aW9uOyAKKyAgICBtb3ZpZVByb3Bz
W21vdmllUHJvcENvdW50XS5wcm9wSUQgPSBrUVRNb3ZpZUluc3RhbnRpYXRpb25Qcm9wZXJ0eUlE
X0FzeW5jT0s7IAorICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BWYWx1ZVNpemUg
PSBzaXplb2YoYm9vbFRydWUpOyAKKyAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9w
VmFsdWVBZGRyZXNzID0gJmJvb2xUcnVlOyAKKyAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50
XS5wcm9wU3RhdHVzID0gMDsgCisgICAgbW92aWVQcm9wQ291bnQrKzsgCisKKyAgICBtb3ZpZVBy
b3BzW21vdmllUHJvcENvdW50XS5wcm9wQ2xhc3MgPSBrUVRQcm9wZXJ0eUNsYXNzX05ld01vdmll
UHJvcGVydHk7IAorICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BJRCA9IGtRVE5l
d01vdmllUHJvcGVydHlJRF9BY3RpdmU7IAorICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRd
LnByb3BWYWx1ZVNpemUgPSBzaXplb2YoYm9vbFRydWUpOyAKKyAgICBtb3ZpZVByb3BzW21vdmll
UHJvcENvdW50XS5wcm9wVmFsdWVBZGRyZXNzID0gJmJvb2xUcnVlOyAKKyAgICBtb3ZpZVByb3Bz
W21vdmllUHJvcENvdW50XS5wcm9wU3RhdHVzID0gMDsgCisgICAgbW92aWVQcm9wQ291bnQrKzsg
CisKKyAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wQ2xhc3MgPSBrUVRQcm9wZXJ0
eUNsYXNzX05ld01vdmllUHJvcGVydHk7IAorICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRd
LnByb3BJRCA9IGtRVE5ld01vdmllUHJvcGVydHlJRF9Eb250SW50ZXJhY3RXaXRoVXNlcjsgCisg
ICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcFZhbHVlU2l6ZSA9IHNpemVvZihib29s
VHJ1ZSk7IAorICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BWYWx1ZUFkZHJlc3Mg
PSAmYm9vbFRydWU7IAorICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BTdGF0dXMg
PSAwOyAKKyAgICBtb3ZpZVByb3BDb3VudCsrOyAKKworICAgIG1vdmllUHJvcHNbbW92aWVQcm9w
Q291bnRdLnByb3BDbGFzcyA9IGtRVFByb3BlcnR5Q2xhc3NfTW92aWVJbnN0YW50aWF0aW9uOwor
ICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BJRCA9ICchdXJsJzsKKyAgICBtb3Zp
ZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wVmFsdWVTaXplID0gc2l6ZW9mKGJvb2xUcnVlKTsg
CisgICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcFZhbHVlQWRkcmVzcyA9ICZib29s
VHJ1ZTsgCisgICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcFN0YXR1cyA9IDA7IAor
ICAgIG1vdmllUHJvcENvdW50Kys7IAorCisgICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0u
cHJvcENsYXNzID0ga1FUUHJvcGVydHlDbGFzc19Nb3ZpZUluc3RhbnRpYXRpb247IAorICAgIG1v
dmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BJRCA9ICdzaXRlJzsKKyAgICBtb3ZpZVByb3Bz
W21vdmllUHJvcENvdW50XS5wcm9wVmFsdWVTaXplID0gc2l6ZW9mKGJvb2xUcnVlKTsgCisgICAg
bW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcFZhbHVlQWRkcmVzcyA9ICZib29sVHJ1ZTsg
CisgICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcFN0YXR1cyA9IDA7IAorICAgIG1v
dmllUHJvcENvdW50Kys7CisKKyAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wQ2xh
c3MgPSBrUVRQcm9wZXJ0eUNsYXNzX0F1ZGlvOyAKKyAgICBtb3ZpZVByb3BzW21vdmllUHJvcENv
dW50XS5wcm9wSUQgPSBrUVRBdWRpb1Byb3BlcnR5SURfUmF0ZUNoYW5nZXNQcmVzZXJ2ZVBpdGNo
OworICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BWYWx1ZVNpemUgPSBzaXplb2Yo
cHJlc2VydmVzUGl0Y2gpOyAKKyAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wVmFs
dWVBZGRyZXNzID0gJnByZXNlcnZlc1BpdGNoOyAKKyAgICBtb3ZpZVByb3BzW21vdmllUHJvcENv
dW50XS5wcm9wU3RhdHVzID0gMDsgCisgICAgbW92aWVQcm9wQ291bnQrKzsgCisKKyAgICBBU1NF
UlQobW92aWVQcm9wQ291bnQgPD0gc2l6ZW9mKG1vdmllUHJvcHMpL3NpemVvZihtb3ZpZVByb3Bz
WzBdKSk7CisgICAgbV9wcml2YXRlLT5tX2xvYWRFcnJvciA9IE5ld01vdmllRnJvbVByb3BlcnRp
ZXMobW92aWVQcm9wQ291bnQsIG1vdmllUHJvcHMsIDAsIDAsICZtX3ByaXZhdGUtPm1fbW92aWUp
OworCitlbmQ6CisgICAgbV9wcml2YXRlLT5zdGFydFRhc2soKTsKKyAgICAvLyBnZXQgdGhlIGxv
YWQgZmFpbCBjYWxsYmFjayBxdWlja2x5IAorICAgIGlmIChtX3ByaXZhdGUtPm1fbG9hZEVycm9y
KQorICAgICAgICB1cGRhdGVUYXNrVGltZXIoMCk7CisgICAgZWxzZSB7CisgICAgICAgIE9TVHlw
ZSBtb2RlID0ga1FUQXBlcnR1cmVNb2RlX0NsZWFuQXBlcnR1cmU7CisKKyAgICAgICAgLy8gU2V0
IHRoZSBhcGVydHVyZSBtb2RlIHByb3BlcnR5IG9uIGEgbW92aWUgdG8gc2lnbmFsIHRoYXQgd2Ug
d2FudCBhc3BlY3QgcmF0aW8KKyAgICAgICAgLy8gYW5kIGNsZWFuIGFwZXJ0dXJlIGRpbWVuc2lv
bnMuIERvbid0IHdvcnJ5IGFib3V0IGVycm9ycywgd2UgY2FuJ3QgZG8gYW55dGhpbmcgaWYKKyAg
ICAgICAgLy8gdGhlIGluc3RhbGxlZCB2ZXJzaW9uIG9mIFFUIGRvZXNuJ3Qgc3VwcG9ydCBpdCBh
bmQgaXQgaXNuJ3Qgc2VyaW91cyBlbm91Z2ggdG8gCisgICAgICAgIC8vIHdhcnJhbnQgZmFpbGlu
Zy4KKyAgICAgICAgUVRTZXRNb3ZpZVByb3BlcnR5KG1fcHJpdmF0ZS0+bV9tb3ZpZSwga1FUUHJv
cGVydHlDbGFzc19WaXN1YWwsIGtRVFZpc3VhbFByb3BlcnR5SURfQXBlcnR1cmVNb2RlLCBzaXpl
b2YobW9kZSksICZtb2RlKTsKKyAgICAgICAgbV9wcml2YXRlLT5yZWdpc3RlckRyYXdpbmdDYWxs
YmFjaygpOworICAgIH0KK30KKwordm9pZCBRVE1vdmllV2luOjpkaXNhYmxlVW5zdXBwb3J0ZWRU
cmFja3ModW5zaWduZWQmIGVuYWJsZWRUcmFja0NvdW50LCB1bnNpZ25lZCYgdG90YWxUcmFja0Nv
dW50KQoreworICAgIGlmICghbV9wcml2YXRlLT5tX21vdmllKSB7CisgICAgICAgIHRvdGFsVHJh
Y2tDb3VudCA9IDA7CisgICAgICAgIGVuYWJsZWRUcmFja0NvdW50ID0gMDsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIHN0YXRpYyBIYXNoU2V0PE9TVHlwZT4qIGFsbG93ZWRUcmFja1R5
cGVzID0gMDsKKyAgICBpZiAoIWFsbG93ZWRUcmFja1R5cGVzKSB7CisgICAgICAgIGFsbG93ZWRU
cmFja1R5cGVzID0gbmV3IEhhc2hTZXQ8T1NUeXBlPjsKKyAgICAgICAgYWxsb3dlZFRyYWNrVHlw
ZXMtPmFkZChWaWRlb01lZGlhVHlwZSk7CisgICAgICAgIGFsbG93ZWRUcmFja1R5cGVzLT5hZGQo
U291bmRNZWRpYVR5cGUpOworICAgICAgICBhbGxvd2VkVHJhY2tUeXBlcy0+YWRkKFRleHRNZWRp
YVR5cGUpOworICAgICAgICBhbGxvd2VkVHJhY2tUeXBlcy0+YWRkKEJhc2VNZWRpYVR5cGUpOwor
ICAgICAgICBhbGxvd2VkVHJhY2tUeXBlcy0+YWRkKGNsb3NlZENhcHRpb25UcmFja1R5cGUpOwor
ICAgICAgICBhbGxvd2VkVHJhY2tUeXBlcy0+YWRkKHN1YlRpdGxlVHJhY2tUeXBlKTsKKyAgICAg
ICAgYWxsb3dlZFRyYWNrVHlwZXMtPmFkZChtcGVnNE9iamVjdERlc2NyaXB0aW9uVHJhY2tUeXBl
KTsKKyAgICAgICAgYWxsb3dlZFRyYWNrVHlwZXMtPmFkZChtcGVnNFNjZW5lRGVzY3JpcHRpb25U
cmFja1R5cGUpOworICAgICAgICBhbGxvd2VkVHJhY2tUeXBlcy0+YWRkKFRpbWVDb2RlTWVkaWFU
eXBlKTsKKyAgICAgICAgYWxsb3dlZFRyYWNrVHlwZXMtPmFkZChUaW1lQ29kZTY0TWVkaWFUeXBl
KTsKKyAgICB9CisKKyAgICBsb25nIHRyYWNrQ291bnQgPSBHZXRNb3ZpZVRyYWNrQ291bnQobV9w
cml2YXRlLT5tX21vdmllKTsKKyAgICBlbmFibGVkVHJhY2tDb3VudCA9IHRyYWNrQ291bnQ7Cisg
ICAgdG90YWxUcmFja0NvdW50ID0gdHJhY2tDb3VudDsKKworICAgIC8vIFRyYWNrIGluZGV4ZXMg
YXJlIDEtYmFzZWQuIHl1Y2suIFRoZXNlIHRoaW5ncyBtdXN0IGRlc2NlbmQgZnJvbSBvbGQtCisg
ICAgLy8gc2Nob29sIG1hYyByZXNvdXJjZXMgb3Igc29tZXRoaW5nLgorICAgIGZvciAobG9uZyB0
cmFja0luZGV4ID0gMTsgdHJhY2tJbmRleCA8PSB0cmFja0NvdW50OyB0cmFja0luZGV4KyspIHsK
KyAgICAgICAgLy8gR3JhYiB0aGUgdHJhY2sgYXQgdGhlIGN1cnJlbnQgaW5kZXguIElmIHRoZXJl
IGlzbid0IG9uZSB0aGVyZSwgdGhlbgorICAgICAgICAvLyB3ZSBjYW4gbW92ZSBvbnRvIHRoZSBu
ZXh0IG9uZS4KKyAgICAgICAgVHJhY2sgY3VycmVudFRyYWNrID0gR2V0TW92aWVJbmRUcmFjayht
X3ByaXZhdGUtPm1fbW92aWUsIHRyYWNrSW5kZXgpOworICAgICAgICBpZiAoIWN1cnJlbnRUcmFj
aykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgLy8gQ2hlY2sgdG8g
c2VlIGlmIHRoZSB0cmFjayBpcyBkaXNhYmxlZCBhbHJlYWR5LCB3ZSBzaG91bGQgbW92ZSBhbG9u
Zy4KKyAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byByZS1kaXNhYmxlIGl0LgorICAgICAgICBp
ZiAoIUdldFRyYWNrRW5hYmxlZChjdXJyZW50VHJhY2spKQorICAgICAgICAgICAgY29udGludWU7
CisKKyAgICAgICAgLy8gR3JhYiB0aGUgdHJhY2sncyBtZWRpYS4gV2UncmUgZ29pbmcgdG8gY2hl
Y2sgdG8gc2VlIGlmIHdlIG5lZWQgdG8KKyAgICAgICAgLy8gZGlzYWJsZSB0aGUgdHJhY2tzLiBU
aGV5IGNvdWxkIGJlIHVuc3VwcG9ydGVkLgorICAgICAgICBNZWRpYSB0cmFja01lZGlhID0gR2V0
VHJhY2tNZWRpYShjdXJyZW50VHJhY2spOworICAgICAgICBpZiAoIXRyYWNrTWVkaWEpCisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIC8vIEdyYWIgdGhlIG1lZGlhIHR5
cGUgZm9yIHRoaXMgdHJhY2suIE1ha2Ugc3VyZSB0aGF0IHdlIGRvbid0CisgICAgICAgIC8vIGdl
dCBhbiBlcnJvciBpbiBkb2luZyBzby4gSWYgd2UgZG8sIHRoZW4gc29tZXRoaW5nIHJlYWxseSBm
dW5reSBpcworICAgICAgICAvLyB3cm9uZy4KKyAgICAgICAgT1NUeXBlIG1lZGlhVHlwZTsKKyAg
ICAgICAgR2V0TWVkaWFIYW5kbGVyRGVzY3JpcHRpb24odHJhY2tNZWRpYSwgJm1lZGlhVHlwZSwg
bmlsLCBuaWwpOworICAgICAgICBPU0VyciBtZWRpYUVyciA9IEdldE1vdmllc0Vycm9yKCk7ICAg
IAorICAgICAgICBpZiAobWVkaWFFcnIgIT0gbm9FcnIpCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgCisgICAgICAgIGlmICghYWxsb3dlZFRyYWNrVHlwZXMtPmNvbnRhaW5zKG1lZGlh
VHlwZSkpIHsKKworICAgICAgICAgICAgLy8gRGlmZmVyZW50IG1wZWcgdmFyaWFudHMgaW1wb3J0
IGFzIGRpZmZlcmVudCB0cmFjayB0eXBlcyBzbyBjaGVjayBmb3IgdGhlICJtcGVnIAorICAgICAg
ICAgICAgLy8gY2hhcmFjdGVyaXN0aWMiIGluc3RlYWQgb2YgaGFyZCBjb2RpbmcgdGhlIChjdXJy
ZW50KSBsaXN0IG9mIG1wZWcgbWVkaWEgdHlwZXMuCisgICAgICAgICAgICBpZiAoR2V0TW92aWVJ
bmRUcmFja1R5cGUobV9wcml2YXRlLT5tX21vdmllLCAxLCAnbXBlZycsIG1vdmllVHJhY2tDaGFy
YWN0ZXJpc3RpYyB8IG1vdmllVHJhY2tFbmFibGVkT25seSkpCisgICAgICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgICAgIFNldFRyYWNrRW5hYmxlZChjdXJyZW50VHJhY2ssIGZhbHNl
KTsKKyAgICAgICAgICAgIC0tZW5hYmxlZFRyYWNrQ291bnQ7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIC8vIEdyYWIgdGhlIHRyYWNrIHJlZmVyZW5jZSBjb3VudCBmb3IgY2hhcHRlcnMu
IFRoaXMgd2lsbCB0ZWxsIHVzIGlmIGl0CisgICAgICAgIC8vIGhhcyBjaGFwdGVyIHRyYWNrcyBp
biBpdC4gSWYgdGhlcmUgYXJlbid0IGFueSByZWZlcmVuY2VzLCB0aGVuIHdlCisgICAgICAgIC8v
IGNhbiBtb3ZlIG9uIHRoZSBuZXh0IHRyYWNrLgorICAgICAgICBsb25nIHJlZmVyZW5jZUNvdW50
ID0gR2V0VHJhY2tSZWZlcmVuY2VDb3VudChjdXJyZW50VHJhY2ssIGtUcmFja1JlZmVyZW5jZUNo
YXB0ZXJMaXN0KTsKKyAgICAgICAgaWYgKHJlZmVyZW5jZUNvdW50IDw9IDApCisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIGxvbmcgcmVmZXJlbmNlSW5kZXggPSAwOyAg
ICAgICAgCisgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICAvLyBJZiB3ZSBnZXQgbm90
aGluZyBoZXJlLCB3ZSd2ZSBvdmVyc3RlcHBlZCBvdXIgYm91bmRzIGFuZCBjYW4gc3RvcAorICAg
ICAgICAgICAgLy8gbG9va2luZy4gQ2hhcHRlciBpbmRpY2VzIGhlcmUgYXJlIDEtYmFzZWQgYXMg
d2VsbCAtIGhlbmNlLCB0aGUKKyAgICAgICAgICAgIC8vIHByZS1pbmNyZW1lbnQuCisgICAgICAg
ICAgICByZWZlcmVuY2VJbmRleCsrOworICAgICAgICAgICAgVHJhY2sgY2hhcHRlclRyYWNrID0g
R2V0VHJhY2tSZWZlcmVuY2UoY3VycmVudFRyYWNrLCBrVHJhY2tSZWZlcmVuY2VDaGFwdGVyTGlz
dCwgcmVmZXJlbmNlSW5kZXgpOworICAgICAgICAgICAgaWYgKCFjaGFwdGVyVHJhY2spCisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFRyeSB0byBn
cmFiIHRoZSBtZWRpYSBmb3IgdGhlIHRyYWNrLgorICAgICAgICAgICAgTWVkaWEgY2hhcHRlck1l
ZGlhID0gR2V0VHJhY2tNZWRpYShjaGFwdGVyVHJhY2spOworICAgICAgICAgICAgaWYgKCFjaGFw
dGVyTWVkaWEpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICAg
ICAgLy8gR3JhYiB0aGUgbWVkaWEgdHlwZSBmb3IgdGhpcyB0cmFjay4gTWFrZSBzdXJlIHRoYXQg
d2UgZG9uJ3QKKyAgICAgICAgICAgIC8vIGdldCBhbiBlcnJvciBpbiBkb2luZyBzby4gSWYgd2Ug
ZG8sIHRoZW4gc29tZXRoaW5nIHJlYWxseQorICAgICAgICAgICAgLy8gZnVua3kgaXMgd3Jvbmcu
CisgICAgICAgICAgICBPU1R5cGUgbWVkaWFUeXBlOworICAgICAgICAgICAgR2V0TWVkaWFIYW5k
bGVyRGVzY3JpcHRpb24oY2hhcHRlck1lZGlhLCAmbWVkaWFUeXBlLCBuaWwsIG5pbCk7CisgICAg
ICAgICAgICBPU0VyciBtZWRpYUVyciA9IEdldE1vdmllc0Vycm9yKCk7CisgICAgICAgICAgICBp
ZiAobWVkaWFFcnIgIT0gbm9FcnIpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGUgdHJhY2sgaXMgYSB2aWRl
byB0cmFjay4gV2UgZG9uJ3QgY2FyZSBhYm91dAorICAgICAgICAgICAgLy8gb3RoZXIgbm9uLXZp
ZGVvIHRyYWNrcy4KKyAgICAgICAgICAgIGlmIChtZWRpYVR5cGUgIT0gVmlkZW9NZWRpYVR5cGUp
CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8v
IENoZWNrIHRvIHNlZSBpZiB0aGUgdHJhY2sgaXMgYWxyZWFkeSBkaXNhYmxlZC4gSWYgaXQgaXMs
IHdlCisgICAgICAgICAgICAvLyBzaG91bGQgbW92ZSBhbG9uZy4KKyAgICAgICAgICAgIGlmICgh
R2V0VHJhY2tFbmFibGVkKGNoYXB0ZXJUcmFjaykpCisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIERpc2FibGVkIHRoZSBldmlsLCBldmlsIHRy
YWNrLgorICAgICAgICAgICAgU2V0VHJhY2tFbmFibGVkKGNoYXB0ZXJUcmFjaywgZmFsc2UpOwor
ICAgICAgICAgICAgLS1lbmFibGVkVHJhY2tDb3VudDsKKyAgICAgICAgfQorICAgIH0KK30KKwor
dm9pZCBRVE1vdmllV2luOjpzZXREaXNhYmxlZChib29sIGIpCit7CisgICAgbV9kaXNhYmxlZCA9
IGI7Cit9CisKKworYm9vbCBRVE1vdmllV2luOjpoYXNWaWRlbygpIGNvbnN0Cit7CisgICAgaWYg
KCFtX3ByaXZhdGUtPm1fbW92aWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4g
KEdldE1vdmllSW5kVHJhY2tUeXBlKG1fcHJpdmF0ZS0+bV9tb3ZpZSwgMSwgVmlzdWFsTWVkaWFD
aGFyYWN0ZXJpc3RpYywgbW92aWVUcmFja0NoYXJhY3RlcmlzdGljIHwgbW92aWVUcmFja0VuYWJs
ZWRPbmx5KSk7Cit9CisKK2Jvb2wgUVRNb3ZpZVdpbjo6aGFzQXVkaW8oKSBjb25zdAoreworICAg
IGlmICghbV9wcml2YXRlLT5tX21vdmllKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0
dXJuIChHZXRNb3ZpZUluZFRyYWNrVHlwZShtX3ByaXZhdGUtPm1fbW92aWUsIDEsIEF1ZGlvTWVk
aWFDaGFyYWN0ZXJpc3RpYywgbW92aWVUcmFja0NoYXJhY3RlcmlzdGljIHwgbW92aWVUcmFja0Vu
YWJsZWRPbmx5KSk7Cit9CisKKworYm9vbCBRVE1vdmllV2luOjpoYXNDbG9zZWRDYXB0aW9ucygp
IGNvbnN0IAoreworICAgIGlmICghbV9wcml2YXRlLT5tX21vdmllKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgcmV0dXJuIEdldE1vdmllSW5kVHJhY2tUeXBlKG1fcHJpdmF0ZS0+bV9tb3Zp
ZSwgMSwgY2xvc2VkQ2FwdGlvblRyYWNrVHlwZSwgbW92aWVUcmFja01lZGlhVHlwZSk7Cit9CisK
K3ZvaWQgUVRNb3ZpZVdpbjo6c2V0Q2xvc2VkQ2FwdGlvbnNWaXNpYmxlKGJvb2wgdmlzaWJsZSkK
K3sKKyAgICBpZiAoIW1fcHJpdmF0ZS0+bV9tb3ZpZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
VHJhY2sgY2NUcmFjayA9IEdldE1vdmllSW5kVHJhY2tUeXBlKG1fcHJpdmF0ZS0+bV9tb3ZpZSwg
MSwgY2xvc2VkQ2FwdGlvblRyYWNrVHlwZSwgbW92aWVUcmFja01lZGlhVHlwZSk7CisgICAgaWYg
KCFjY1RyYWNrKQorICAgICAgICByZXR1cm47CisKKyAgICBCb29sZWFuIGRvRGlzcGxheSA9IHZp
c2libGU7CisgICAgUVRTZXRUcmFja1Byb3BlcnR5KGNjVHJhY2ssIGNsb3NlZENhcHRpb25UcmFj
a1R5cGUsIGNsb3NlZENhcHRpb25EaXNwbGF5UHJvcGVydHlJRCwgc2l6ZW9mKGRvRGlzcGxheSks
ICZkb0Rpc3BsYXkpOworfQorCitwYXNjYWwgT1NFcnIgbW92aWVEcmF3aW5nQ29tcGxldGVQcm9j
KE1vdmllIG1vdmllLCBsb25nIGRhdGEpCit7CisgICAgVXBwUGFyYW0gcGFyYW07CisgICAgcGFy
YW0ubG9uZ1ZhbHVlID0gZGF0YTsKKyAgICBRVE1vdmllV2luUHJpdmF0ZSogbXAgPSBzdGF0aWNf
Y2FzdDxRVE1vdmllV2luUHJpdmF0ZSo+KHBhcmFtLnB0cik7CisgICAgaWYgKG1wKQorICAgICAg
ICBtcC0+ZHJhd2luZ0NvbXBsZXRlKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lk
IGluaXRpYWxpemVTdXBwb3J0ZWRUeXBlcygpIAoreworICAgIGlmIChnU3VwcG9ydGVkVHlwZXMp
CisgICAgICAgIHJldHVybjsKKworICAgIGdTdXBwb3J0ZWRUeXBlcyA9IG5ldyBWZWN0b3I8Q0ZT
dHJpbmdSZWY+OworICAgIGlmIChxdWlja1RpbWVWZXJzaW9uIDwgbWluaW11bVF1aWNrVGltZVZl
cnNpb24pIHsKKyAgICAgICAgTE9HX0VSUk9SKCJRdWlja1RpbWUgdmVyc2lvbiAleCBkZXRlY3Rl
ZCwgYXQgbGVhc3QgJXggcmVxdWlyZWQuIFJldHVybmluZyBlbXB0eSBsaXN0IG9mIHN1cHBvcnRl
ZCBtZWRpYSBNSU1FIHR5cGVzLiIsIHF1aWNrVGltZVZlcnNpb24sIG1pbmltdW1RdWlja1RpbWVW
ZXJzaW9uKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFF1aWNrVGltZSBkb2Vz
bid0IGhhdmUgYW4gaW1wb3J0ZXIgZm9yIHZpZGVvL3F1aWNrdGltZS4gQWRkIGl0IG1hbnVhbGx5
LgorICAgIGdTdXBwb3J0ZWRUeXBlcy0+YXBwZW5kKENGU1RSKCJ2aWRlby9xdWlja3RpbWUiKSk7
CisKKyAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgMjsgaW5kZXgrKykgeworICAgICAg
ICBDb21wb25lbnREZXNjcmlwdGlvbiBmaW5kQ0Q7CisKKyAgICAgICAgLy8gbG9vayBhdCBhbGwg
bW92aWUgaW1wb3J0ZXJzIHRoYXQgY2FuIGltcG9ydCBpbiBwbGFjZSBhbmQgYXJlIGluc3RhbGxl
ZC4gCisgICAgICAgIGZpbmRDRC5jb21wb25lbnRUeXBlID0gTW92aWVJbXBvcnRUeXBlOworICAg
ICAgICBmaW5kQ0QuY29tcG9uZW50U3ViVHlwZSA9IDA7CisgICAgICAgIGZpbmRDRC5jb21wb25l
bnRNYW51ZmFjdHVyZXIgPSAwOworICAgICAgICBmaW5kQ0QuY29tcG9uZW50RmxhZ3NNYXNrID0g
Y21wSXNNaXNzaW5nIHwgbW92aWVJbXBvcnRTdWJUeXBlSXNGaWxlRXh0ZW5zaW9uIHwgY2FuTW92
aWVJbXBvcnRJblBsYWNlIHwgZG9udEF1dG9GaWxlTW92aWVJbXBvcnQ7CisKKyAgICAgICAgLy8g
bG9vayBhdCB0aG9zZSByZWdpc3RlcmVkIGJ5IEhGUyBmaWxlIHR5cGVzIHRoZSBmaXJzdCB0aW1l
IHRocm91Z2gsIGJ5IGZpbGUgZXh0ZW5zaW9uIHRoZSBzZWNvbmQgdGltZQorICAgICAgICBmaW5k
Q0QuY29tcG9uZW50RmxhZ3MgPSBjYW5Nb3ZpZUltcG9ydEluUGxhY2UgfCAoaW5kZXggPyBtb3Zp
ZUltcG9ydFN1YlR5cGVJc0ZpbGVFeHRlbnNpb24gOiAwKTsKKyAgICAgICAgCisgICAgICAgIGxv
bmcgY29tcG9uZW50Q291bnQgPSBDb3VudENvbXBvbmVudHMoJmZpbmRDRCk7CisgICAgICAgIGlm
ICghY29tcG9uZW50Q291bnQpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBDb21w
b25lbnQgY29tcCA9IDA7CisgICAgICAgIHdoaWxlIChjb21wID0gRmluZE5leHRDb21wb25lbnQo
Y29tcCwgJmZpbmRDRCkpIHsKKyAgICAgICAgICAgIC8vIERvZXMgdGhpcyBjb21wb25lbnQgaGF2
ZSBhIE1JTUUgdHlwZSBjb250YWluZXI/CisgICAgICAgICAgICBDb21wb25lbnREZXNjcmlwdGlv
biBpbmZvQ0Q7CisgICAgICAgICAgICBPU0VyciBlcnIgPSBHZXRDb21wb25lbnRJbmZvKGNvbXAs
ICZpbmZvQ0QsIG5pbCAvKm5hbWUqLywgbmlsIC8qaW5mbyovLCBuaWwgLyppY29uKi8pOworICAg
ICAgICAgICAgaWYgKGVycikKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IGlmICghKGluZm9DRC5jb21wb25lbnRGbGFncyAmIGhhc01vdmllSW1wb3J0TUlNRUxpc3QpKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgUVRBdG9tQ29udGFpbmVyIG1p
bWVMaXN0ID0gMDsKKyAgICAgICAgICAgIGVyciA9IE1vdmllSW1wb3J0R2V0TUlNRVR5cGVMaXN0
KChDb21wb25lbnRJbnN0YW5jZSljb21wLCAmbWltZUxpc3QpOworICAgICAgICAgICAgaWYgKGVy
ciB8fCAhbWltZUxpc3QpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAg
IC8vIEdyYWIgZXZlcnkgdHlwZSBmcm9tIHRoZSBjb250YWluZXIuCisgICAgICAgICAgICBRVExv
Y2tDb250YWluZXIobWltZUxpc3QpOworICAgICAgICAgICAgaW50IHR5cGVDb3VudCA9IFFUQ291
bnRDaGlsZHJlbk9mVHlwZShtaW1lTGlzdCwga1BhcmVudEF0b21Jc0NvbnRhaW5lciwga01pbWVJ
bmZvTWltZVR5cGVUYWcpOworICAgICAgICAgICAgZm9yIChpbnQgdHlwZUluZGV4ID0gMTsgdHlw
ZUluZGV4IDw9IHR5cGVDb3VudDsgdHlwZUluZGV4KyspIHsKKyAgICAgICAgICAgICAgICBRVEF0
b20gbWltZVRhZyA9IFFURmluZENoaWxkQnlJbmRleChtaW1lTGlzdCwgMCwga01pbWVJbmZvTWlt
ZVR5cGVUYWcsIHR5cGVJbmRleCwgMCk7CisgICAgICAgICAgICAgICAgaWYgKCFtaW1lVGFnKQor
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBjaGFyKiBhdG9t
RGF0YTsKKyAgICAgICAgICAgICAgICBsb25nIHR5cGVMZW5ndGg7CisgICAgICAgICAgICAgICAg
aWYgKG5vRXJyICE9IFFUR2V0QXRvbURhdGFQdHIobWltZUxpc3QsIG1pbWVUYWcsICZ0eXBlTGVu
Z3RoLCAmYXRvbURhdGEpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICAgICAgICAgIGNoYXIgdHlwZUJ1ZmZlclsyNTZdOworICAgICAgICAgICAgICAgIGlmICh0eXBl
TGVuZ3RoID49IHNpemVvZih0eXBlQnVmZmVyKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICAgICAgbWVtY3B5KHR5cGVCdWZmZXIsIGF0b21EYXRhLCB0eXBlTGVu
Z3RoKTsKKyAgICAgICAgICAgICAgICB0eXBlQnVmZmVyW3R5cGVMZW5ndGhdID0gMDsKKworICAg
ICAgICAgICAgICAgIC8vIE9ubHkgYWRkICJhdWRpby8uLi4iIGFuZCAidmlkZW8vLi4uIiB0eXBl
cy4KKyAgICAgICAgICAgICAgICBpZiAoc3RybmNtcCh0eXBlQnVmZmVyLCAiYXVkaW8vIiwgNikg
JiYgc3RybmNtcCh0eXBlQnVmZmVyLCAidmlkZW8vIiwgNikpCisgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgQ0ZTdHJpbmdSZWYgY2ZNaW1lVHlwZSA9IENG
U3RyaW5nQ3JlYXRlV2l0aENTdHJpbmcoMCwgdHlwZUJ1ZmZlciwga0NGU3RyaW5nRW5jb2RpbmdV
VEY4KTsKKyAgICAgICAgICAgICAgICBpZiAoIWNmTWltZVR5cGUpCisgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgLy8gT25seSBhZGQgZWFjaCB0eXBlIG9u
Y2UuCisgICAgICAgICAgICAgICAgYm9vbCBhbHJlYWR5QWRkZWQgPSBmYWxzZTsKKyAgICAgICAg
ICAgICAgICBmb3IgKGludCBhZGRlZEluZGV4ID0gMDsgYWRkZWRJbmRleCA8IGdTdXBwb3J0ZWRU
eXBlcy0+c2l6ZSgpOyBhZGRlZEluZGV4KyspIHsKKyAgICAgICAgICAgICAgICAgICAgQ0ZTdHJp
bmdSZWYgdHlwZSA9IGdTdXBwb3J0ZWRUeXBlcy0+YXQoYWRkZWRJbmRleCk7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChrQ0ZDb21wYXJlRXF1YWxUbyA9PSBDRlN0cmluZ0NvbXBhcmUoY2ZNaW1l
VHlwZSwgdHlwZSwga0NGQ29tcGFyZUNhc2VJbnNlbnNpdGl2ZSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGFscmVhZHlBZGRlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBpZiAoIWFscmVhZHlBZGRlZCkKKyAgICAgICAgICAgICAgICAgICAgZ1N1cHBvcnRl
ZFR5cGVzLT5hcHBlbmQoY2ZNaW1lVHlwZSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgICAgICBDRlJlbGVhc2UoY2ZNaW1lVHlwZSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBEaXNwb3NlSGFuZGxlKG1pbWVMaXN0KTsKKyAgICAgICAgfQorICAgIH0KK30KKwor
dW5zaWduZWQgUVRNb3ZpZVdpbjo6Y291bnRTdXBwb3J0ZWRUeXBlcygpCit7CisgICAgaW5pdGlh
bGl6ZVN1cHBvcnRlZFR5cGVzKCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihn
U3VwcG9ydGVkVHlwZXMtPnNpemUoKSk7Cit9CisKK3ZvaWQgUVRNb3ZpZVdpbjo6Z2V0U3VwcG9y
dGVkVHlwZSh1bnNpZ25lZCBpbmRleCwgY29uc3QgVUNoYXIqJiBzdHIsIHVuc2lnbmVkJiBsZW4p
Cit7CisgICAgaW5pdGlhbGl6ZVN1cHBvcnRlZFR5cGVzKCk7CisgICAgQVNTRVJUKGluZGV4IDwg
Z1N1cHBvcnRlZFR5cGVzLT5zaXplKCkpOworCisgICAgLy8gQWxsb2NhdGUgc3VmZmljaWVudCBi
dWZmZXIgdG8gaG9sZCBhbnkgTUlNRSB0eXBlCisgICAgc3RhdGljIFVuaUNoYXIqIHN0YXRpY0J1
ZmZlciA9IDA7CisgICAgaWYgKCFzdGF0aWNCdWZmZXIpCisgICAgICAgIHN0YXRpY0J1ZmZlciA9
IG5ldyBVbmlDaGFyWzMyXTsKKworICAgIENGU3RyaW5nUmVmIGNmc3RyID0gZ1N1cHBvcnRlZFR5
cGVzLT5hdChpbmRleCk7CisgICAgbGVuID0gQ0ZTdHJpbmdHZXRMZW5ndGgoY2ZzdHIpOworICAg
IENGUmFuZ2UgcmFuZ2UgPSB7IDAsIGxlbiB9OworICAgIENGU3RyaW5nR2V0Q2hhcmFjdGVycyhj
ZnN0ciwgcmFuZ2UsIHN0YXRpY0J1ZmZlcik7CisgICAgc3RyID0gcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBVQ2hhcio+KHN0YXRpY0J1ZmZlcik7CisgICAgCit9CisKK3ZvaWQgUVRNb3ZpZVdpbjo6
c2V0VGFza1RpbWVyRnVuY3MoU2V0VGFza1RpbWVyRGVsYXlGdW5jIHNldFRhc2tUaW1lckRlbGF5
LCBTdG9wVGFza1RpbWVyRnVuYyBzdG9wVGFza1RpbWVyKQoreworICAgIGdTZXRUYXNrVGltZXJE
ZWxheSA9IHNldFRhc2tUaW1lckRlbGF5OworICAgIGdTdG9wVGFza1RpbWVyID0gc3RvcFRhc2tU
aW1lcjsKK30KKworYm9vbCBRVE1vdmllV2luOjppbml0aWFsaXplUXVpY2tUaW1lKCkgCit7Cisg
ICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgICBzdGF0aWMgYm9vbCBpbml0
aWFsaXphdGlvblN1Y2NlZWRlZCA9IGZhbHNlOworICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKKyAg
ICAgICAgaW5pdGlhbGl6ZWQgPSB0cnVlOworICAgICAgICAvLyBJbml0aWFsaXplIGFuZCBjaGVj
ayBRdWlja1RpbWUgdmVyc2lvbgorICAgICAgICBPU0VyciByZXN1bHQgPSBJbml0aWFsaXplUVRN
TChrSW5pdGlhbGl6ZVFUTUxFbmFibGVEb3VibGVCdWZmZXJlZFN1cmZhY2UpOworICAgICAgICBp
ZiAocmVzdWx0ID09IG5vRXJyKQorICAgICAgICAgICAgcmVzdWx0ID0gR2VzdGFsdChnZXN0YWx0
UXVpY2tUaW1lLCAmcXVpY2tUaW1lVmVyc2lvbik7CisgICAgICAgIGlmIChyZXN1bHQgIT0gbm9F
cnIpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiTm8gUXVpY2tUaW1lIGF2YWlsYWJsZS4gRGlz
YWJsaW5nIDx2aWRlbz4gYW5kIDxhdWRpbz4gc3VwcG9ydC4iKTsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAocXVpY2tUaW1lVmVyc2lvbiA8IG1pbmlt
dW1RdWlja1RpbWVWZXJzaW9uKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIlF1aWNrVGltZSB2
ZXJzaW9uICV4IGRldGVjdGVkLCBhdCBsZWFzdCAleCByZXF1aXJlZC4gRGlzYWJsaW5nIDx2aWRl
bz4gYW5kIDxhdWRpbz4gc3VwcG9ydC4iLCBxdWlja1RpbWVWZXJzaW9uLCBtaW5pbXVtUXVpY2tU
aW1lVmVyc2lvbik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAg
ICAgRW50ZXJNb3ZpZXMoKTsKKyAgICAgICAgZ01vdmllRHJhd2luZ0NvbXBsZXRlVVBQID0gTmV3
TW92aWVEcmF3aW5nQ29tcGxldGVVUFAobW92aWVEcmF3aW5nQ29tcGxldGVQcm9jKTsKKyAgICAg
ICAgaW5pdGlhbGl6YXRpb25TdWNjZWVkZWQgPSB0cnVlOworICAgIH0KKyAgICByZXR1cm4gaW5p
dGlhbGl6YXRpb25TdWNjZWVkZWQ7Cit9CisKK0xSRVNVTFQgUVRNb3ZpZVdpbjo6ZnVsbHNjcmVl
blduZFByb2MoSFdORCB3bmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQ
YXJhbSkKK3sKKyAgICBRVE1vdmllV2luKiBtb3ZpZSA9IHN0YXRpY19jYXN0PFFUTW92aWVXaW4q
PihHZXRQcm9wKHduZCwgZnVsbHNjcmVlblFUTW92aWVXaW5Qb2ludGVyUHJvcCkpOworCisgICAg
aWYgKG1lc3NhZ2UgPT0gV01fREVTVFJPWSkKKyAgICAgICAgUmVtb3ZlUHJvcCh3bmQsIGZ1bGxz
Y3JlZW5RVE1vdmllV2luUG9pbnRlclByb3ApOworCisgICAgaWYgKCFtb3ZpZSkKKyAgICAgICAg
cmV0dXJuIERlZldpbmRvd1Byb2Mod25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7CisKKyAg
ICByZXR1cm4gbW92aWUtPm1fcHJpdmF0ZS0+bV9mdWxsc2NyZWVuQ2xpZW50LT5mdWxsc2NyZWVu
Q2xpZW50V25kUHJvYyh3bmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtKTsKK30KKworSFdORCBR
VE1vdmllV2luOjplbnRlckZ1bGxzY3JlZW4oUVRNb3ZpZVdpbkZ1bGxzY3JlZW5DbGllbnQqIGNs
aWVudCkKK3sKKyAgICBtX3ByaXZhdGUtPm1fZnVsbHNjcmVlbkNsaWVudCA9IGNsaWVudDsKKyAg
ICAKKyAgICBCZWdpbkZ1bGxTY3JlZW4oJm1fcHJpdmF0ZS0+bV9mdWxsc2NyZWVuUmVzdG9yZVN0
YXRlLCAwLCAwLCAwLCAmbV9wcml2YXRlLT5tX2Z1bGxzY3JlZW5XaW5kb3csIDAsIGZ1bGxTY3Jl
ZW5BbGxvd0V2ZW50cyk7IAorICAgIFFUTUxTZXRXaW5kb3dXbmRQcm9jKG1fcHJpdmF0ZS0+bV9m
dWxsc2NyZWVuV2luZG93LCBmdWxsc2NyZWVuV25kUHJvYyk7CisgICAgQ3JlYXRlUG9ydEFzc29j
aWF0aW9uKEdldFBvcnROYXRpdmVXaW5kb3cobV9wcml2YXRlLT5tX2Z1bGxzY3JlZW5XaW5kb3cp
LCAwLCAwKTsKKworICAgIEdldE1vdmllQm94KG1fcHJpdmF0ZS0+bV9tb3ZpZSwgJm1fcHJpdmF0
ZS0+bV9mdWxsc2NyZWVuUmVjdCk7CisgICAgR2V0TW92aWVHV29ybGQobV9wcml2YXRlLT5tX21v
dmllLCAmbV9wcml2YXRlLT5tX2Z1bGxzY3JlZW5PcmlnR1dvcmxkLCAwKTsKKyAgICBTZXRNb3Zp
ZUdXb3JsZChtX3ByaXZhdGUtPm1fbW92aWUsIHJlaW50ZXJwcmV0X2Nhc3Q8Q0dyYWZQdHI+KG1f
cHJpdmF0ZS0+bV9mdWxsc2NyZWVuV2luZG93KSwgR2V0R1dvcmxkRGV2aWNlKHJlaW50ZXJwcmV0
X2Nhc3Q8Q0dyYWZQdHI+KG1fcHJpdmF0ZS0+bV9mdWxsc2NyZWVuV2luZG93KSkpOworCisgICAg
Ly8gU2V0IHRoZSBzaXplIG9mIHRoZSBib3ggdG8gcHJlc2VydmUgYXNwZWN0IHJhdGlvCisgICAg
UmVjdCByZWN0ID0gbV9wcml2YXRlLT5tX2Z1bGxzY3JlZW5XaW5kb3ctPnBvcnRSZWN0OworCisg
ICAgZmxvYXQgbW92aWVSYXRpbyA9IHN0YXRpY19jYXN0PGZsb2F0PihtX3ByaXZhdGUtPm1fd2lk
dGgpIC8gbV9wcml2YXRlLT5tX2hlaWdodDsKKyAgICBpbnQgd2luZG93V2lkdGggPSAgcmVjdC5y
aWdodCAtIHJlY3QubGVmdDsKKyAgICBpbnQgd2luZG93SGVpZ2h0ID0gcmVjdC5ib3R0b20gLSBy
ZWN0LnRvcDsKKyAgICBmbG9hdCB3aW5kb3dSYXRpbyA9IHN0YXRpY19jYXN0PGZsb2F0Pih3aW5k
b3dXaWR0aCkgLyB3aW5kb3dIZWlnaHQ7CisgICAgaW50IGFjdHVhbFdpZHRoID0gKHdpbmRvd1Jh
dGlvID4gbW92aWVSYXRpbykgPyAod2luZG93SGVpZ2h0ICogbW92aWVSYXRpbykgOiB3aW5kb3dX
aWR0aDsKKyAgICBpbnQgYWN0dWFsSGVpZ2h0ID0gKHdpbmRvd1JhdGlvIDwgbW92aWVSYXRpbykg
PyAod2luZG93V2lkdGggLyBtb3ZpZVJhdGlvKSA6IHdpbmRvd0hlaWdodDsKKyAgICBpbnQgb2Zm
c2V0WCA9ICh3aW5kb3dXaWR0aCAtIGFjdHVhbFdpZHRoKSAvIDI7CisgICAgaW50IG9mZnNldFkg
PSAod2luZG93SGVpZ2h0IC0gYWN0dWFsSGVpZ2h0KSAvIDI7CisKKyAgICByZWN0LmxlZnQgPSBv
ZmZzZXRYOworICAgIHJlY3QucmlnaHQgPSBvZmZzZXRYICsgYWN0dWFsV2lkdGg7CisgICAgcmVj
dC50b3AgPSBvZmZzZXRZOworICAgIHJlY3QuYm90dG9tID0gb2Zmc2V0WSArIGFjdHVhbEhlaWdo
dDsKKworICAgIFNldE1vdmllQm94KG1fcHJpdmF0ZS0+bV9tb3ZpZSwgJnJlY3QpOworICAgIFNo
b3dIaWRlVGFza0Jhcih0cnVlKTsKKworICAgIC8vIFNldCB0aGUgJ3RoaXMnIHBvaW50ZXIgb24g
dGhlIEhXTkQKKyAgICBIV05EIHduZCA9IHN0YXRpY19jYXN0PEhXTkQ+KEdldFBvcnROYXRpdmVX
aW5kb3cobV9wcml2YXRlLT5tX2Z1bGxzY3JlZW5XaW5kb3cpKTsKKyAgICBTZXRQcm9wKHduZCwg
ZnVsbHNjcmVlblFUTW92aWVXaW5Qb2ludGVyUHJvcCwgc3RhdGljX2Nhc3Q8SEFORExFPih0aGlz
KSk7CisKKyAgICByZXR1cm4gd25kOworfQorCit2b2lkIFFUTW92aWVXaW46OmV4aXRGdWxsc2Ny
ZWVuKCkKK3sKKyAgICBpZiAoIW1fcHJpdmF0ZS0+bV9mdWxsc2NyZWVuV2luZG93KQorICAgICAg
ICByZXR1cm47CisKKyAgICBIV05EIHduZCA9IHN0YXRpY19jYXN0PEhXTkQ+KEdldFBvcnROYXRp
dmVXaW5kb3cobV9wcml2YXRlLT5tX2Z1bGxzY3JlZW5XaW5kb3cpKTsKKyAgICBEZXN0cm95UG9y
dEFzc29jaWF0aW9uKHJlaW50ZXJwcmV0X2Nhc3Q8Q0dyYWZQdHI+KG1fcHJpdmF0ZS0+bV9mdWxs
c2NyZWVuV2luZG93KSk7CisgICAgU2V0TW92aWVHV29ybGQobV9wcml2YXRlLT5tX21vdmllLCBt
X3ByaXZhdGUtPm1fZnVsbHNjcmVlbk9yaWdHV29ybGQsIDApOworICAgIEVuZEZ1bGxTY3JlZW4o
bV9wcml2YXRlLT5tX2Z1bGxzY3JlZW5SZXN0b3JlU3RhdGUsIDBMKTsKKyAgICBTZXRNb3ZpZUJv
eChtX3ByaXZhdGUtPm1fbW92aWUsICZtX3ByaXZhdGUtPm1fZnVsbHNjcmVlblJlY3QpOworICAg
IG1fcHJpdmF0ZS0+bV9mdWxsc2NyZWVuV2luZG93ID0gMDsKK30KKworQk9PTCBXSU5BUEkgRGxs
TWFpbihISU5TVEFOQ0UgaGluc3RETEwsIERXT1JEIGZkd1JlYXNvbiwgTFBWT0lEIGxwdlJlc2Vy
dmVkKQoreworICAgIHN3aXRjaCAoZmR3UmVhc29uKSB7CisgICAgY2FzZSBETExfUFJPQ0VTU19B
VFRBQ0g6CisgICAgICAgIHJldHVybiBUUlVFOworICAgIGNhc2UgRExMX1BST0NFU1NfREVUQUNI
OgorICAgIGNhc2UgRExMX1RIUkVBRF9BVFRBQ0g6CisgICAgY2FzZSBETExfVEhSRUFEX0RFVEFD
SDoKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9RVE1vdmllR1dvcmxkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9RVE1vdmllR1dvcmxkLmNwcAkocmV2aXNpb24gNTg1OTYpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVE1vdmllR1dvcmxkLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjQsMTMgKzI0LDExIEBACiAgKi8KICNpbmNsdWRlICJjb25maWcuaCIKIAotI2luY2x1ZGUg
IlFUTW92aWVXaW4uaCIKKyNpbmNsdWRlICJRVE1vdmllR1dvcmxkLmgiCiAKLS8vIFB1dCBNb3Zp
ZXMuaCBmaXJzdCBzbyBidWlsZCBmYWlsdXJlcyBoZXJlIHBvaW50IGNsZWFybHkgdG8gUXVpY2tU
aW1lCi0jaW5jbHVkZSA8TW92aWVzLmg+Ci0KLSNpbmNsdWRlICJRVE1vdmllV2luVGltZXIuaCIK
KyNpbmNsdWRlICJRVE1vdmllVGFzay5oIgogI2luY2x1ZGUgPEdYTWF0aC5oPgorI2luY2x1ZGUg
PE1vdmllcy5oPgogI2luY2x1ZGUgPFFUTUwuaD4KICNpbmNsdWRlIDxRdWlja1RpbWVDb21wb25l
bnRzLmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KQEAgLTQyLDEyICs0MCw3IEBAIHVz
aW5nIG5hbWVzcGFjZSBzdGQ7CiAKIHN0YXRpYyBjb25zdCBsb25nIG1pbmltdW1RdWlja1RpbWVW
ZXJzaW9uID0gMHgwNzMwMDAwMDsgLy8gNy4zCiAKLXN0YXRpYyBjb25zdCBsb25nIGNsb3NlZENh
cHRpb25UcmFja1R5cGUgPSAnY2xjcCc7Ci1zdGF0aWMgY29uc3QgbG9uZyBzdWJUaXRsZVRyYWNr
VHlwZSA9ICdzYnRsJzsKLXN0YXRpYyBjb25zdCBsb25nIG1wZWc0T2JqZWN0RGVzY3JpcHRpb25U
cmFja1R5cGUgPSAnb2RzbSc7Ci1zdGF0aWMgY29uc3QgbG9uZyBtcGVnNFNjZW5lRGVzY3JpcHRp
b25UcmFja1R5cGUgPSAnc2RzbSc7Ci1zdGF0aWMgY29uc3QgbG9uZyBjbG9zZWRDYXB0aW9uRGlz
cGxheVByb3BlcnR5SUQgPSAnZGlzcCc7Ci1zdGF0aWMgTFBDVFNUUiBmdWxsc2NyZWVuUVRNb3Zp
ZVdpblBvaW50ZXJQcm9wID0gVEVYVCgiZnVsbHNjcmVlblFUTW92aWVXaW5Qb2ludGVyIik7Citz
dGF0aWMgTFBDVFNUUiBmdWxsc2NyZWVuUVRNb3ZpZUdXb3JsZFBvaW50ZXJQcm9wID0gVEVYVCgi
ZnVsbHNjcmVlblFUTW92aWVHV29ybGRQb2ludGVyIik7CiAKIC8vIFJlc2l6aW5nIEdXb3JsZHMg
aXMgc2xvdywgZ2l2ZSB0aGVtIGEgbWluaW11bSBzaXplIHNvIHNpemUgb2Ygc21hbGwgCiAvLyB2
aWRlb3MgY2FuIGJlIGFuaW1hdGVkIHNtb290aGx5CkBAIC02MiwzNyArNTUsMTcgQEAgdW5pb24g
VXBwUGFyYW0gewogfTsKIAogc3RhdGljIE1vdmllRHJhd2luZ0NvbXBsZXRlVVBQIGdNb3ZpZURy
YXdpbmdDb21wbGV0ZVVQUCA9IDA7Ci1zdGF0aWMgSGFzaFNldDxRVE1vdmllV2luUHJpdmF0ZSo+
KiBnVGFza0xpc3Q7CitzdGF0aWMgSGFzaFNldDxRVE1vdmllR1dvcmxkUHJpdmF0ZSo+KiBnVGFz
a0xpc3Q7CiBzdGF0aWMgVmVjdG9yPENGU3RyaW5nUmVmPiogZ1N1cHBvcnRlZFR5cGVzID0gMDsK
IHN0YXRpYyBTSW50MzIgcXVpY2tUaW1lVmVyc2lvbiA9IDA7CiAKLXN0YXRpYyBRVE1vdmllV2lu
OjpTZXRUYXNrVGltZXJEZWxheUZ1bmMgZ1NldFRhc2tUaW1lckRlbGF5ID0gMDsKLXN0YXRpYyBR
VE1vdmllV2luOjpTdG9wVGFza1RpbWVyRnVuYyBnU3RvcFRhc2tUaW1lciA9IDA7Ci0KLXN0YXRp
YyB2b2lkIHVwZGF0ZVRhc2tUaW1lcihpbnQgbWF4SW50ZXJ2YWwgPSAxMDAwKQotewotICAgIGlm
ICghZ1Rhc2tMaXN0LT5zaXplKCkpIHsKLSAgICAgICAgZ1N0b3BUYXNrVGltZXIoKTsKLSAgICAg
ICAgcmV0dXJuOyAgICAKLSAgICB9Ci0gICAgCi0gICAgbG9uZyBpbnRlcnZhbEluTVM7Ci0gICAg
UVRHZXRUaW1lVW50aWxOZXh0VGFzaygmaW50ZXJ2YWxJbk1TLCAxMDAwKTsKLSAgICBpZiAoaW50
ZXJ2YWxJbk1TID4gbWF4SW50ZXJ2YWwpCi0gICAgICAgIGludGVydmFsSW5NUyA9IG1heEludGVy
dmFsOwotICAgIGdTZXRUYXNrVGltZXJEZWxheShzdGF0aWNfY2FzdDxmbG9hdD4oaW50ZXJ2YWxJ
bk1TKSAvIDEwMDApOwotfQotCi1jbGFzcyBRVE1vdmllV2luUHJpdmF0ZSA6IHB1YmxpYyBOb25j
b3B5YWJsZSB7CitjbGFzcyBRVE1vdmllR1dvcmxkUHJpdmF0ZSA6IHB1YmxpYyBRVE1vdmllQ2xp
ZW50IHsKIHB1YmxpYzoKLSAgICBRVE1vdmllV2luUHJpdmF0ZSgpOwotICAgIH5RVE1vdmllV2lu
UHJpdmF0ZSgpOwotICAgIHZvaWQgdGFzaygpOwotICAgIHZvaWQgc3RhcnRUYXNrKCk7Ci0gICAg
dm9pZCBlbmRUYXNrKCk7CisgICAgUVRNb3ZpZUdXb3JsZFByaXZhdGUoUVRNb3ZpZUdXb3JsZCog
bW92aWVXaW4pOworICAgIHZpcnR1YWwgflFUTW92aWVHV29ybGRQcml2YXRlKCk7CiAKLSAgICB2
b2lkIGNyZWF0ZU1vdmllQ29udHJvbGxlcigpOwogICAgIHZvaWQgcmVnaXN0ZXJEcmF3aW5nQ2Fs
bGJhY2soKTsKKyAgICB2b2lkIHVucmVnaXN0ZXJEcmF3aW5nQ2FsbGJhY2soKTsKICAgICB2b2lk
IGRyYXdpbmdDb21wbGV0ZSgpOwogICAgIHZvaWQgdXBkYXRlR1dvcmxkKCk7CiAgICAgdm9pZCBj
cmVhdGVHV29ybGQoKTsKQEAgLTEwMywxNiArNzYsMTUgQEAgcHVibGljOgogCiAgICAgdm9pZCBz
ZXRTaXplKGludCwgaW50KTsKIAotICAgIFFUTW92aWVXaW4qIG1fbW92aWVXaW47CisgICAgdmly
dHVhbCB2b2lkIG1vdmllRW5kZWQoUVRNb3ZpZSopOworICAgIHZpcnR1YWwgdm9pZCBtb3ZpZUxv
YWRTdGF0ZUNoYW5nZWQoUVRNb3ZpZSopOworICAgIHZpcnR1YWwgdm9pZCBtb3ZpZVRpbWVDaGFu
Z2VkKFFUTW92aWUqKTsKKworICAgIFFUTW92aWVHV29ybGQqIG1fbW92aWVXaW47CisgICAgUmVm
UHRyPFFUTW92aWU+IG1fcXRNb3ZpZTsKICAgICBNb3ZpZSBtX21vdmllOwotICAgIE1vdmllQ29u
dHJvbGxlciBtX21vdmllQ29udHJvbGxlcjsKLSAgICBib29sIG1fdGFza2luZzsKLSAgICBRVE1v
dmllV2luQ2xpZW50KiBtX2NsaWVudDsKKyAgICBRVE1vdmllR1dvcmxkQ2xpZW50KiBtX2NsaWVu
dDsKICAgICBsb25nIG1fbG9hZFN0YXRlOwotICAgIGJvb2wgbV9lbmRlZDsKLSAgICBib29sIG1f
c2Vla2luZzsKLSAgICBmbG9hdCBtX2xhc3RNZWRpYVRpbWU7Ci0gICAgZG91YmxlIG1fbGFzdExv
YWRTdGF0ZUNoZWNrVGltZTsKICAgICBpbnQgbV93aWR0aDsKICAgICBpbnQgbV9oZWlnaHQ7CiAg
ICAgYm9vbCBtX3Zpc2libGU7CkBAIC0xMjAsMzMgKzkyLDI0IEBAIHB1YmxpYzoKICAgICBpbnQg
bV9nV29ybGRXaWR0aDsKICAgICBpbnQgbV9nV29ybGRIZWlnaHQ7CiAgICAgR1dvcmxkUHRyIG1f
c2F2ZWRHV29ybGQ7Ci0gICAgbG9uZyBtX2xvYWRFcnJvcjsKICAgICBmbG9hdCBtX3dpZHRoU2Nh
bGVGYWN0b3I7CiAgICAgZmxvYXQgbV9oZWlnaHRTY2FsZUZhY3RvcjsKLSAgICBDRlVSTFJlZiBt
X2N1cnJlbnRVUkw7Ci0gICAgZmxvYXQgbV90aW1lVG9SZXN0b3JlOwotICAgIGZsb2F0IG1fcmF0
ZVRvUmVzdG9yZTsKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgYm9vbCBtX3NjYWxlQ2FjaGVk
OwogI2VuZGlmCiAgICAgV2luZG93UHRyIG1fZnVsbHNjcmVlbldpbmRvdzsKICAgICBHV29ybGRQ
dHIgbV9mdWxsc2NyZWVuT3JpZ0dXb3JsZDsKICAgICBSZWN0IG1fZnVsbHNjcmVlblJlY3Q7Ci0g
ICAgUVRNb3ZpZVdpbkZ1bGxzY3JlZW5DbGllbnQqIG1fZnVsbHNjcmVlbkNsaWVudDsKKyAgICBR
VE1vdmllR1dvcmxkRnVsbHNjcmVlbkNsaWVudCogbV9mdWxsc2NyZWVuQ2xpZW50OwogICAgIGNo
YXIqIG1fZnVsbHNjcmVlblJlc3RvcmVTdGF0ZTsKKyAgICBib29sIG1fZGlzYWJsZWQ7CiB9Owog
Ci1RVE1vdmllV2luUHJpdmF0ZTo6UVRNb3ZpZVdpblByaXZhdGUoKQotICAgIDogbV9tb3ZpZVdp
bigwKQorUVRNb3ZpZUdXb3JsZFByaXZhdGU6OlFUTW92aWVHV29ybGRQcml2YXRlKFFUTW92aWVH
V29ybGQqIG1vdmllV2luKQorICAgIDogbV9tb3ZpZVdpbihtb3ZpZVdpbikKICAgICAsIG1fbW92
aWUoMCkKLSAgICAsIG1fbW92aWVDb250cm9sbGVyKDApCi0gICAgLCBtX3Rhc2tpbmcoZmFsc2Up
CiAgICAgLCBtX2NsaWVudCgwKQogICAgICwgbV9sb2FkU3RhdGUoMCkKLSAgICAsIG1fZW5kZWQo
ZmFsc2UpCi0gICAgLCBtX3NlZWtpbmcoZmFsc2UpCi0gICAgLCBtX2xhc3RNZWRpYVRpbWUoMCkK
LSAgICAsIG1fbGFzdExvYWRTdGF0ZUNoZWNrVGltZSgwKQogICAgICwgbV93aWR0aCgwKQogICAg
ICwgbV9oZWlnaHQoMCkKICAgICAsIG1fdmlzaWJsZShmYWxzZSkKQEAgLTE1NCwxMiArMTE3LDgg
QEAgUVRNb3ZpZVdpblByaXZhdGU6OlFUTW92aWVXaW5Qcml2YXRlKCkKICAgICAsIG1fZ1dvcmxk
V2lkdGgoMCkKICAgICAsIG1fZ1dvcmxkSGVpZ2h0KDApCiAgICAgLCBtX3NhdmVkR1dvcmxkKDAp
Ci0gICAgLCBtX2xvYWRFcnJvcigwKQogICAgICwgbV93aWR0aFNjYWxlRmFjdG9yKDEpCiAgICAg
LCBtX2hlaWdodFNjYWxlRmFjdG9yKDEpCi0gICAgLCBtX2N1cnJlbnRVUkwoMCkKLSAgICAsIG1f
dGltZVRvUmVzdG9yZSgtMS4wZikKLSAgICAsIG1fcmF0ZVRvUmVzdG9yZSgtMS4wZikKICNpZiAh
QVNTRVJUX0RJU0FCTEVECiAgICAgLCBtX3NjYWxlQ2FjaGVkKGZhbHNlKQogI2VuZGlmCkBAIC0x
NjcsNTkgKzEyNiwyMiBAQCBRVE1vdmllV2luUHJpdmF0ZTo6UVRNb3ZpZVdpblByaXZhdGUoKQog
ICAgICwgbV9mdWxsc2NyZWVuT3JpZ0dXb3JsZCgwKQogICAgICwgbV9mdWxsc2NyZWVuQ2xpZW50
KDApCiAgICAgLCBtX2Z1bGxzY3JlZW5SZXN0b3JlU3RhdGUoMCkKKyAgICAsIG1fZGlzYWJsZWQo
ZmFsc2UpCisgICAgLCBtX3F0TW92aWUoMCkKIHsKICAgICBSZWN0IHJlY3QgPSB7IDAsIDAsIDAs
IDAgfTsKICAgICBtX2Z1bGxzY3JlZW5SZWN0ID0gcmVjdDsKIH0KIAotUVRNb3ZpZVdpblByaXZh
dGU6On5RVE1vdmllV2luUHJpdmF0ZSgpCitRVE1vdmllR1dvcmxkUHJpdmF0ZTo6flFUTW92aWVH
V29ybGRQcml2YXRlKCkKIHsKICAgICBBU1NFUlQoIW1fZnVsbHNjcmVlbldpbmRvdyk7CiAKLSAg
ICBlbmRUYXNrKCk7CiAgICAgaWYgKG1fZ1dvcmxkKQogICAgICAgICBkZWxldGVHV29ybGQoKTsK
LSAgICBpZiAobV9tb3ZpZUNvbnRyb2xsZXIpCi0gICAgICAgIERpc3Bvc2VNb3ZpZUNvbnRyb2xs
ZXIobV9tb3ZpZUNvbnRyb2xsZXIpOwotICAgIGlmIChtX21vdmllKQotICAgICAgICBEaXNwb3Nl
TW92aWUobV9tb3ZpZSk7Ci0gICAgaWYgKG1fY3VycmVudFVSTCkKLSAgICAgICAgQ0ZSZWxlYXNl
KG1fY3VycmVudFVSTCk7CiB9CiAKLXZvaWQgUVRNb3ZpZVdpbjo6dGFza1RpbWVyRmlyZWQoKQot
ewotICAgIC8vIFRoZSBoYXNoIGNvbnRlbnQgbWlnaHQgY2hhbmdlIGR1cmluZyB0YXNrKCkKLSAg
ICBWZWN0b3I8UVRNb3ZpZVdpblByaXZhdGUqPiB0YXNrczsKLSAgICBjb3B5VG9WZWN0b3IoKmdU
YXNrTGlzdCwgdGFza3MpOwotICAgIHNpemVfdCBjb3VudCA9IHRhc2tzLnNpemUoKTsKLSAgICBm
b3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgY291bnQ7ICsrbikKLSAgICAgICAgdGFza3Nbbl0tPnRh
c2soKTsKLQotICAgIHVwZGF0ZVRhc2tUaW1lcigpOwotfQotCi12b2lkIFFUTW92aWVXaW5Qcml2
YXRlOjpzdGFydFRhc2soKSAKLXsKLSAgICBpZiAobV90YXNraW5nKQotICAgICAgICByZXR1cm47
Ci0gICAgaWYgKCFnVGFza0xpc3QpCi0gICAgICAgIGdUYXNrTGlzdCA9IG5ldyBIYXNoU2V0PFFU
TW92aWVXaW5Qcml2YXRlKj47Ci0gICAgZ1Rhc2tMaXN0LT5hZGQodGhpcyk7Ci0gICAgbV90YXNr
aW5nID0gdHJ1ZTsKLSAgICB1cGRhdGVUYXNrVGltZXIoKTsKLX0KLQotdm9pZCBRVE1vdmllV2lu
UHJpdmF0ZTo6ZW5kVGFzaygpIAotewotICAgIGlmICghbV90YXNraW5nKQotICAgICAgICByZXR1
cm47Ci0gICAgZ1Rhc2tMaXN0LT5yZW1vdmUodGhpcyk7Ci0gICAgbV90YXNraW5nID0gZmFsc2U7
Ci0gICAgdXBkYXRlVGFza1RpbWVyKCk7Ci19Ci0KLXZvaWQgUVRNb3ZpZVdpblByaXZhdGU6OmNh
Y2hlTW92aWVTY2FsZSgpCit2b2lkIFFUTW92aWVHV29ybGRQcml2YXRlOjpjYWNoZU1vdmllU2Nh
bGUoKQogewogICAgIFJlY3QgbmF0dXJhbFJlY3Q7CiAgICAgUmVjdCBpbml0aWFsUmVjdDsKQEAg
LTIzNSwxMTUgKzE1Nyw0MyBAQCB2b2lkIFFUTW92aWVXaW5Qcml2YXRlOjpjYWNoZU1vdmllU2Nh
bGUoCiAgICAgaWYgKG5hdHVyYWxIZWlnaHQpCiAgICAgICAgIG1faGVpZ2h0U2NhbGVGYWN0b3Ig
PSAoaW5pdGlhbFJlY3QuYm90dG9tIC0gaW5pdGlhbFJlY3QudG9wKSAvIG5hdHVyYWxIZWlnaHQ7
CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIG1fc2NhbGVDYWNoZWQgPSB0cnVlOzsKKyAgICBt
X3NjYWxlQ2FjaGVkID0gdHJ1ZTsKICNlbmRpZgogfQogCi12b2lkIFFUTW92aWVXaW5Qcml2YXRl
Ojp0YXNrKCkgCitwYXNjYWwgT1NFcnIgbW92aWVEcmF3aW5nQ29tcGxldGVQcm9jKE1vdmllIG1v
dmllLCBsb25nIGRhdGEpCiB7Ci0gICAgQVNTRVJUKG1fdGFza2luZyk7Ci0KLSAgICBpZiAoIW1f
bG9hZEVycm9yKSB7Ci0gICAgICAgIGlmIChtX21vdmllQ29udHJvbGxlcikKLSAgICAgICAgICAg
IE1DSWRsZShtX21vdmllQ29udHJvbGxlcik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIE1v
dmllc1Rhc2sobV9tb3ZpZSwgMCk7Ci0gICAgfQotCi0gICAgLy8gR2V0TW92aWVMb2FkU3RhdGUg
ZG9jdW1lbnRhdGlvbiBzYXlzIHRoYXQgeW91IHNob3VsZCBub3QgY2FsbCBpdCBtb3JlIG9mdGVu
IHRoYW4gZXZlcnkgcXVhcnRlciBvZiBhIHNlY29uZC4KLSAgICBpZiAoc3lzdGVtVGltZSgpID49
IG1fbGFzdExvYWRTdGF0ZUNoZWNrVGltZSArIDAuMjUgfHwgbV9sb2FkRXJyb3IpIHsgCi0gICAg
ICAgIC8vIElmIGxvYWQgZmFpbHMgUVQncyBsb2FkIHN0YXRlIGlzIFFUTW92aWVMb2FkU3RhdGVD
b21wbGV0ZS4KLSAgICAgICAgLy8gVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSBRVEtpdCBBUEkgYW5k
IHNlZW1zIHN0cmFuZ2UuCi0gICAgICAgIGxvbmcgbG9hZFN0YXRlID0gbV9sb2FkRXJyb3IgPyBR
VE1vdmllTG9hZFN0YXRlRXJyb3IgOiBHZXRNb3ZpZUxvYWRTdGF0ZShtX21vdmllKTsKLSAgICAg
ICAgaWYgKGxvYWRTdGF0ZSAhPSBtX2xvYWRTdGF0ZSkgewotCi0gICAgICAgICAgICAvLyB3ZSBv
bmx5IG5lZWQgdG8gZXJhc2UgdGhlIG1vdmllIGd3b3JsZCB3aGVuIHRoZSBsb2FkIHN0YXRlIGNo
YW5nZXMgdG8gbG9hZGVkIHdoaWxlIGl0Ci0gICAgICAgICAgICAvLyAgaXMgdmlzaWJsZSBhcyB0
aGUgZ3dvcmxkIGlzIGRlc3Ryb3llZC9jcmVhdGVkIHdoZW4gdmlzaWJpbGl0eSBjaGFuZ2VzCi0g
ICAgICAgICAgICBib29sIHNob3VsZFJlc3RvcmVQbGF5YmFja1N0YXRlID0gZmFsc2U7Ci0gICAg
ICAgICAgICBib29sIG1vdmllTmV3bHlQbGF5YWJsZSA9IGxvYWRTdGF0ZSA+PSBRVE1vdmllTG9h
ZFN0YXRlTG9hZGVkICYmIG1fbG9hZFN0YXRlIDwgUVRNb3ZpZUxvYWRTdGF0ZUxvYWRlZDsKLSAg
ICAgICAgICAgIG1fbG9hZFN0YXRlID0gbG9hZFN0YXRlOwotICAgICAgICAgICAgaWYgKG1vdmll
TmV3bHlQbGF5YWJsZSkgewotICAgICAgICAgICAgICAgIGNhY2hlTW92aWVTY2FsZSgpOwotICAg
ICAgICAgICAgICAgIHVwZGF0ZU1vdmllU2l6ZSgpOwotICAgICAgICAgICAgICAgIGlmIChtX3Zp
c2libGUpCi0gICAgICAgICAgICAgICAgICAgIGNsZWFyR1dvcmxkKCk7Ci0gICAgICAgICAgICAg
ICAgc2hvdWxkUmVzdG9yZVBsYXliYWNrU3RhdGUgPSB0cnVlOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBpZiAoIW1fbW92aWVDb250cm9sbGVyICYmIG1fbG9hZFN0YXRlID49IFFUTW92
aWVMb2FkU3RhdGVMb2FkZWQpCi0gICAgICAgICAgICAgICAgY3JlYXRlTW92aWVDb250cm9sbGVy
KCk7Ci0gICAgICAgICAgICBtX2NsaWVudC0+bW92aWVMb2FkU3RhdGVDaGFuZ2VkKG1fbW92aWVX
aW4pOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoc2hvdWxkUmVzdG9yZVBsYXliYWNr
U3RhdGUgJiYgbV90aW1lVG9SZXN0b3JlICE9IC0xLjBmKSB7Ci0gICAgICAgICAgICAgICAgbV9t
b3ZpZVdpbi0+c2V0Q3VycmVudFRpbWUobV90aW1lVG9SZXN0b3JlKTsKLSAgICAgICAgICAgICAg
ICBtX3RpbWVUb1Jlc3RvcmUgPSAtMS4wZjsKLSAgICAgICAgICAgICAgICBtX21vdmllV2luLT5z
ZXRSYXRlKG1fcmF0ZVRvUmVzdG9yZSk7Ci0gICAgICAgICAgICAgICAgbV9yYXRlVG9SZXN0b3Jl
ID0gLTEuMGY7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChtX21vdmllV2luLT5t
X2Rpc2FibGVkKSB7Ci0gICAgICAgICAgICAgICAgZW5kVGFzaygpOwotICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBtX2xhc3RMb2FkU3Rh
dGVDaGVja1RpbWUgPSBzeXN0ZW1UaW1lKCk7Ci0gICAgfQotCi0gICAgYm9vbCBlbmRlZCA9ICEh
SXNNb3ZpZURvbmUobV9tb3ZpZSk7Ci0gICAgaWYgKGVuZGVkICE9IG1fZW5kZWQpIHsKLSAgICAg
ICAgbV9lbmRlZCA9IGVuZGVkOwotICAgICAgICBpZiAobV9jbGllbnQgJiYgZW5kZWQpCi0gICAg
ICAgICAgICBtX2NsaWVudC0+bW92aWVFbmRlZChtX21vdmllV2luKTsKLSAgICB9Ci0KLSAgICBm
bG9hdCB0aW1lID0gbV9tb3ZpZVdpbi0+Y3VycmVudFRpbWUoKTsKLSAgICBpZiAodGltZSA8IG1f
bGFzdE1lZGlhVGltZSB8fCB0aW1lID49IG1fbGFzdE1lZGlhVGltZSArIGNOb25Db250aW51b3Vz
VGltZUNoYW5nZSB8fCBtX3NlZWtpbmcpIHsKLSAgICAgICAgbV9zZWVraW5nID0gZmFsc2U7Ci0g
ICAgICAgIGlmIChtX2NsaWVudCkKLSAgICAgICAgICAgIG1fY2xpZW50LT5tb3ZpZVRpbWVDaGFu
Z2VkKG1fbW92aWVXaW4pOwotICAgIH0KLSAgICBtX2xhc3RNZWRpYVRpbWUgPSB0aW1lOwotCi0g
ICAgaWYgKG1fbG9hZEVycm9yKQotICAgICAgICBlbmRUYXNrKCk7CisgICAgVXBwUGFyYW0gcGFy
YW07CisgICAgcGFyYW0ubG9uZ1ZhbHVlID0gZGF0YTsKKyAgICBRVE1vdmllR1dvcmxkUHJpdmF0
ZSogbXAgPSBzdGF0aWNfY2FzdDxRVE1vdmllR1dvcmxkUHJpdmF0ZSo+KHBhcmFtLnB0cik7Cisg
ICAgaWYgKG1wKQorICAgICAgICBtcC0+ZHJhd2luZ0NvbXBsZXRlKCk7CisgICAgcmV0dXJuIDA7
CiB9CiAKLXZvaWQgUVRNb3ZpZVdpblByaXZhdGU6OmNyZWF0ZU1vdmllQ29udHJvbGxlcigpCit2
b2lkIFFUTW92aWVHV29ybGRQcml2YXRlOjpyZWdpc3RlckRyYXdpbmdDYWxsYmFjaygpCiB7Ci0g
ICAgUmVjdCBib3VuZHM7Ci0gICAgbG9uZyBmbGFnczsKLQotICAgIGlmICghbV9tb3ZpZSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fbW92aWVDb250cm9sbGVyKQotICAgICAgICBEaXNw
b3NlTW92aWVDb250cm9sbGVyKG1fbW92aWVDb250cm9sbGVyKTsKLQotICAgIEdldE1vdmllQm94
KG1fbW92aWUsICZib3VuZHMpOwotICAgIGZsYWdzID0gbWNUb3BMZWZ0TW92aWUgfCBtY05vdFZp
c2libGU7Ci0gICAgbV9tb3ZpZUNvbnRyb2xsZXIgPSBOZXdNb3ZpZUNvbnRyb2xsZXIobV9tb3Zp
ZSwgJmJvdW5kcywgZmxhZ3MpOwotICAgIGlmICghbV9tb3ZpZUNvbnRyb2xsZXIpCi0gICAgICAg
IHJldHVybjsKLQotICAgIE1DU2V0Q29udHJvbGxlclBvcnQobV9tb3ZpZUNvbnRyb2xsZXIsIG1f
Z1dvcmxkKTsKLSAgICBNQ1NldENvbnRyb2xsZXJBdHRhY2hlZChtX21vdmllQ29udHJvbGxlciwg
ZmFsc2UpOwotfQorICAgIGlmICghZ01vdmllRHJhd2luZ0NvbXBsZXRlVVBQKQorICAgICAgICBn
TW92aWVEcmF3aW5nQ29tcGxldGVVUFAgPSBOZXdNb3ZpZURyYXdpbmdDb21wbGV0ZVVQUChtb3Zp
ZURyYXdpbmdDb21wbGV0ZVByb2MpOwogCi12b2lkIFFUTW92aWVXaW5Qcml2YXRlOjpyZWdpc3Rl
ckRyYXdpbmdDYWxsYmFjaygpCi17CiAgICAgVXBwUGFyYW0gcGFyYW07CiAgICAgcGFyYW0ucHRy
ID0gdGhpczsKICAgICBTZXRNb3ZpZURyYXdpbmdDb21wbGV0ZVByb2MobV9tb3ZpZSwgbW92aWVE
cmF3aW5nQ2FsbFdoZW5DaGFuZ2VkLCBnTW92aWVEcmF3aW5nQ29tcGxldGVVUFAsIHBhcmFtLmxv
bmdWYWx1ZSk7CiB9CiAKLXZvaWQgUVRNb3ZpZVdpblByaXZhdGU6OmRyYXdpbmdDb21wbGV0ZSgp
Cit2b2lkIFFUTW92aWVHV29ybGRQcml2YXRlOjp1bnJlZ2lzdGVyRHJhd2luZ0NhbGxiYWNrKCkK
IHsKLSAgICBpZiAoIW1fZ1dvcmxkIHx8IG1fbW92aWVXaW4tPm1fZGlzYWJsZWQgfHwgbV9sb2Fk
U3RhdGUgPCBRVE1vdmllTG9hZFN0YXRlTG9hZGVkKQorICAgIFNldE1vdmllRHJhd2luZ0NvbXBs
ZXRlUHJvYyhtX21vdmllLCBtb3ZpZURyYXdpbmdDYWxsV2hlbkNoYW5nZWQsIDAsIDApOworfQor
Cit2b2lkIFFUTW92aWVHV29ybGRQcml2YXRlOjpkcmF3aW5nQ29tcGxldGUoKQoreworICAgIGlm
ICghbV9nV29ybGQgfHwgbV9tb3ZpZVdpbi0+bV9wcml2YXRlLT5tX2Rpc2FibGVkIHx8IG1fbG9h
ZFN0YXRlIDwgUVRNb3ZpZUxvYWRTdGF0ZUxvYWRlZCkKICAgICAgICAgcmV0dXJuOwogICAgIG1f
Y2xpZW50LT5tb3ZpZU5ld0ltYWdlQXZhaWxhYmxlKG1fbW92aWVXaW4pOwogfQogCi12b2lkIFFU
TW92aWVXaW5Qcml2YXRlOjp1cGRhdGVHV29ybGQoKQordm9pZCBRVE1vdmllR1dvcmxkUHJpdmF0
ZTo6dXBkYXRlR1dvcmxkKCkKIHsKICAgICBib29sIHNob3VsZEJlVmlzaWJsZSA9IG1fdmlzaWJs
ZTsKICAgICBpZiAoIW1faGVpZ2h0IHx8ICFtX3dpZHRoKQpAQCAtMzYwLDcgKzIxMCw3IEBAIHZv
aWQgUVRNb3ZpZVdpblByaXZhdGU6OnVwZGF0ZUdXb3JsZCgpCiAgICAgfQogfQogCi12b2lkIFFU
TW92aWVXaW5Qcml2YXRlOjpjcmVhdGVHV29ybGQoKQordm9pZCBRVE1vdmllR1dvcmxkUHJpdmF0
ZTo6Y3JlYXRlR1dvcmxkKCkKIHsKICAgICBBU1NFUlQoIW1fZ1dvcmxkKTsKICAgICBpZiAoIW1f
bW92aWUgfHwgbV9sb2FkU3RhdGUgPCBRVE1vdmllTG9hZFN0YXRlTG9hZGVkKQpAQCAtMzc3LDE5
ICsyMjcsMTUgQEAgdm9pZCBRVE1vdmllV2luUHJpdmF0ZTo6Y3JlYXRlR1dvcmxkKCkKICAgICBp
ZiAoZXJyKSAKICAgICAgICAgcmV0dXJuOwogICAgIEdldE1vdmllR1dvcmxkKG1fbW92aWUsICZt
X3NhdmVkR1dvcmxkLCAwKTsKLSAgICBpZiAobV9tb3ZpZUNvbnRyb2xsZXIpCi0gICAgICAgIE1D
U2V0Q29udHJvbGxlclBvcnQobV9tb3ZpZUNvbnRyb2xsZXIsIG1fZ1dvcmxkKTsKICAgICBTZXRN
b3ZpZUdXb3JsZChtX21vdmllLCBtX2dXb3JsZCwgMCk7CiAgICAgYm91bmRzLnJpZ2h0ID0gbV93
aWR0aDsKICAgICBib3VuZHMuYm90dG9tID0gbV9oZWlnaHQ7Ci0gICAgaWYgKG1fbW92aWVDb250
cm9sbGVyKQotICAgICAgICBNQ1NldENvbnRyb2xsZXJCb3VuZHNSZWN0KG1fbW92aWVDb250cm9s
bGVyLCAmYm91bmRzKTsKICAgICBTZXRNb3ZpZUJveChtX21vdmllLCAmYm91bmRzKTsKIH0KIAot
dm9pZCBRVE1vdmllV2luUHJpdmF0ZTo6Y2xlYXJHV29ybGQoKQordm9pZCBRVE1vdmllR1dvcmxk
UHJpdmF0ZTo6Y2xlYXJHV29ybGQoKQogewotICAgIGlmICghbV9tb3ZpZXx8IW1fZ1dvcmxkKQor
ICAgIGlmICghbV9tb3ZpZSB8fCAhbV9nV29ybGQpCiAgICAgICAgIHJldHVybjsKIAogICAgIEdy
YWZQdHIgc2F2ZVBvcnQ7CkBAIC00MDYsNyArMjUyLDcgQEAgdm9pZCBRVE1vdmllV2luUHJpdmF0
ZTo6Y2xlYXJHV29ybGQoKQogICAgIE1hY1NldFBvcnQoc2F2ZVBvcnQpOwogfQogCi12b2lkIFFU
TW92aWVXaW5Qcml2YXRlOjpzZXRTaXplKGludCB3aWR0aCwgaW50IGhlaWdodCkKK3ZvaWQgUVRN
b3ZpZUdXb3JsZFByaXZhdGU6OnNldFNpemUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogewogICAg
IGlmIChtX3dpZHRoID09IHdpZHRoICYmIG1faGVpZ2h0ID09IGhlaWdodCkKICAgICAgICAgcmV0
dXJuOwpAQCAtNDI2LDcgKzI3Miw3IEBAIHZvaWQgUVRNb3ZpZVdpblByaXZhdGU6OnNldFNpemUo
aW50IHdpZHQKICAgICB1cGRhdGVNb3ZpZVNpemUoKTsKIH0KIAotdm9pZCBRVE1vdmllV2luUHJp
dmF0ZTo6dXBkYXRlTW92aWVTaXplKCkKK3ZvaWQgUVRNb3ZpZUdXb3JsZFByaXZhdGU6OnVwZGF0
ZU1vdmllU2l6ZSgpCiB7CiAgICAgaWYgKCFtX21vdmllIHx8IG1fbG9hZFN0YXRlIDwgUVRNb3Zp
ZUxvYWRTdGF0ZUxvYWRlZCkKICAgICAgICAgcmV0dXJuOwpAQCAtNDM2LDE4ICsyODIsMTQgQEAg
dm9pZCBRVE1vdmllV2luUHJpdmF0ZTo6dXBkYXRlTW92aWVTaXplKAogICAgIGJvdW5kcy5sZWZ0
ID0gMDsgCiAgICAgYm91bmRzLnJpZ2h0ID0gbV93aWR0aDsKICAgICBib3VuZHMuYm90dG9tID0g
bV9oZWlnaHQ7Ci0gICAgaWYgKG1fbW92aWVDb250cm9sbGVyKQotICAgICAgICBNQ1NldENvbnRy
b2xsZXJCb3VuZHNSZWN0KG1fbW92aWVDb250cm9sbGVyLCAmYm91bmRzKTsKICAgICBTZXRNb3Zp
ZUJveChtX21vdmllLCAmYm91bmRzKTsKICAgICB1cGRhdGVHV29ybGQoKTsKIH0KIAogCi12b2lk
IFFUTW92aWVXaW5Qcml2YXRlOjpkZWxldGVHV29ybGQoKQordm9pZCBRVE1vdmllR1dvcmxkUHJp
dmF0ZTo6ZGVsZXRlR1dvcmxkKCkKIHsKICAgICBBU1NFUlQobV9nV29ybGQpOwotICAgIGlmICht
X21vdmllQ29udHJvbGxlcikKLSAgICAgICAgTUNTZXRDb250cm9sbGVyUG9ydChtX21vdmllQ29u
dHJvbGxlciwgbV9zYXZlZEdXb3JsZCk7CiAgICAgaWYgKG1fbW92aWUpCiAgICAgICAgIFNldE1v
dmllR1dvcmxkKG1fbW92aWUsIG1fc2F2ZWRHV29ybGQsIDApOwogICAgIG1fc2F2ZWRHV29ybGQg
PSAwOwpAQCAtNDU3LDE2OSArMjk5LDU5IEBAIHZvaWQgUVRNb3ZpZVdpblByaXZhdGU6OmRlbGV0
ZUdXb3JsZCgpCiAgICAgbV9nV29ybGRIZWlnaHQgPSAwOwogfQogCi0KLVFUTW92aWVXaW46OlFU
TW92aWVXaW4oUVRNb3ZpZVdpbkNsaWVudCogY2xpZW50KQotICAgIDogbV9wcml2YXRlKG5ldyBR
VE1vdmllV2luUHJpdmF0ZSgpKQotICAgICwgbV9kaXNhYmxlZChmYWxzZSkKK3ZvaWQgUVRNb3Zp
ZUdXb3JsZFByaXZhdGU6Om1vdmllRW5kZWQoUVRNb3ZpZSopCiB7Ci0gICAgbV9wcml2YXRlLT5t
X21vdmllV2luID0gdGhpczsKLSAgICBtX3ByaXZhdGUtPm1fY2xpZW50ID0gY2xpZW50OwotICAg
IGluaXRpYWxpemVRdWlja1RpbWUoKTsKKyAgICAvLyBEbyBub3RoaW5nCiB9CiAKLVFUTW92aWVX
aW46On5RVE1vdmllV2luKCkKK3ZvaWQgUVRNb3ZpZUdXb3JsZFByaXZhdGU6Om1vdmllTG9hZFN0
YXRlQ2hhbmdlZChRVE1vdmllKiBtb3ZpZSkKIHsKLSAgICBkZWxldGUgbV9wcml2YXRlOwotfQor
ICAgIGxvbmcgbG9hZFN0YXRlID0gR2V0TW92aWVMb2FkU3RhdGUobW92aWUtPmdldE1vdmllSGFu
ZGxlKCkpOworICAgIGlmIChsb2FkU3RhdGUgIT0gbV9sb2FkU3RhdGUpIHsKIAotdm9pZCBRVE1v
dmllV2luOjpwbGF5KCkKLXsKLSAgICBtX3ByaXZhdGUtPm1fdGltZVRvUmVzdG9yZSA9IC0xLjBm
OwotCi0gICAgaWYgKG1fcHJpdmF0ZS0+bV9tb3ZpZUNvbnRyb2xsZXIpCi0gICAgICAgIE1DRG9B
Y3Rpb24obV9wcml2YXRlLT5tX21vdmllQ29udHJvbGxlciwgbWNBY3Rpb25QcmVyb2xsQW5kUGxh
eSwgKHZvaWQgKilHZXRNb3ZpZVByZWZlcnJlZFJhdGUobV9wcml2YXRlLT5tX21vdmllKSk7Ci0g
ICAgZWxzZQotICAgICAgICBTdGFydE1vdmllKG1fcHJpdmF0ZS0+bV9tb3ZpZSk7Ci0gICAgbV9w
cml2YXRlLT5zdGFydFRhc2soKTsKLX0KKyAgICAgICAgLy8gd2Ugb25seSBuZWVkIHRvIGVyYXNl
IHRoZSBtb3ZpZSBnd29ybGQgd2hlbiB0aGUgbG9hZCBzdGF0ZSBjaGFuZ2VzIHRvIGxvYWRlZCB3
aGlsZSBpdAorICAgICAgICAvLyAgaXMgdmlzaWJsZSBhcyB0aGUgZ3dvcmxkIGlzIGRlc3Ryb3ll
ZC9jcmVhdGVkIHdoZW4gdmlzaWJpbGl0eSBjaGFuZ2VzCisgICAgICAgIGJvb2wgbW92aWVOZXds
eVBsYXlhYmxlID0gbG9hZFN0YXRlID49IFFUTW92aWVMb2FkU3RhdGVMb2FkZWQgJiYgbV9sb2Fk
U3RhdGUgPCBRVE1vdmllTG9hZFN0YXRlTG9hZGVkOworICAgICAgICBtX2xvYWRTdGF0ZSA9IGxv
YWRTdGF0ZTsKIAotdm9pZCBRVE1vdmllV2luOjpwYXVzZSgpCi17Ci0gICAgbV9wcml2YXRlLT5t
X3RpbWVUb1Jlc3RvcmUgPSAtMS4wZjsKLQotICAgIGlmIChtX3ByaXZhdGUtPm1fbW92aWVDb250
cm9sbGVyKQotICAgICAgICBNQ0RvQWN0aW9uKG1fcHJpdmF0ZS0+bV9tb3ZpZUNvbnRyb2xsZXIs
IG1jQWN0aW9uUGxheSwgMCk7Ci0gICAgZWxzZQotICAgICAgICBTdG9wTW92aWUobV9wcml2YXRl
LT5tX21vdmllKTsKLSAgICB1cGRhdGVUYXNrVGltZXIoKTsKLX0KLQotZmxvYXQgUVRNb3ZpZVdp
bjo6cmF0ZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3ByaXZhdGUtPm1fbW92aWUpCi0gICAgICAg
IHJldHVybiAwOwotICAgIHJldHVybiBGaXhlZFRvRmxvYXQoR2V0TW92aWVSYXRlKG1fcHJpdmF0
ZS0+bV9tb3ZpZSkpOwotfQotCi12b2lkIFFUTW92aWVXaW46OnNldFJhdGUoZmxvYXQgcmF0ZSkK
LXsKLSAgICBpZiAoIW1fcHJpdmF0ZS0+bV9tb3ZpZSkKLSAgICAgICAgcmV0dXJuOyAgICAKLSAg
ICBtX3ByaXZhdGUtPm1fdGltZVRvUmVzdG9yZSA9IC0xLjBmOwotICAgIAotICAgIGlmIChtX3By
aXZhdGUtPm1fbW92aWVDb250cm9sbGVyKQotICAgICAgICBNQ0RvQWN0aW9uKG1fcHJpdmF0ZS0+
bV9tb3ZpZUNvbnRyb2xsZXIsIG1jQWN0aW9uUHJlcm9sbEFuZFBsYXksICh2b2lkICopRmxvYXRU
b0ZpeGVkKHJhdGUpKTsKLSAgICBlbHNlCi0gICAgICAgIFNldE1vdmllUmF0ZShtX3ByaXZhdGUt
Pm1fbW92aWUsIEZsb2F0VG9GaXhlZChyYXRlKSk7Ci0gICAgdXBkYXRlVGFza1RpbWVyKCk7Ci19
Ci0KLWZsb2F0IFFUTW92aWVXaW46OmR1cmF0aW9uKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fcHJp
dmF0ZS0+bV9tb3ZpZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgVGltZVZhbHVlIHZhbCA9IEdl
dE1vdmllRHVyYXRpb24obV9wcml2YXRlLT5tX21vdmllKTsKLSAgICBUaW1lU2NhbGUgc2NhbGUg
PSBHZXRNb3ZpZVRpbWVTY2FsZShtX3ByaXZhdGUtPm1fbW92aWUpOwotICAgIHJldHVybiBzdGF0
aWNfY2FzdDxmbG9hdD4odmFsKSAvIHNjYWxlOwotfQotCi1mbG9hdCBRVE1vdmllV2luOjpjdXJy
ZW50VGltZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3ByaXZhdGUtPm1fbW92aWUpCi0gICAgICAg
IHJldHVybiAwOwotICAgIFRpbWVWYWx1ZSB2YWwgPSBHZXRNb3ZpZVRpbWUobV9wcml2YXRlLT5t
X21vdmllLCAwKTsKLSAgICBUaW1lU2NhbGUgc2NhbGUgPSBHZXRNb3ZpZVRpbWVTY2FsZShtX3By
aXZhdGUtPm1fbW92aWUpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4odmFsKSAvIHNj
YWxlOwotfQotCi12b2lkIFFUTW92aWVXaW46OnNldEN1cnJlbnRUaW1lKGZsb2F0IHRpbWUpIGNv
bnN0Ci17Ci0gICAgaWYgKCFtX3ByaXZhdGUtPm1fbW92aWUpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1fcHJpdmF0ZS0+bV90aW1lVG9SZXN0b3JlID0gLTEuMGY7Ci0gICAgCi0gICAgbV9wcml2
YXRlLT5tX3NlZWtpbmcgPSB0cnVlOwotICAgIFRpbWVTY2FsZSBzY2FsZSA9IEdldE1vdmllVGlt
ZVNjYWxlKG1fcHJpdmF0ZS0+bV9tb3ZpZSk7Ci0gICAgaWYgKG1fcHJpdmF0ZS0+bV9tb3ZpZUNv
bnRyb2xsZXIpewotICAgICAgICBRVFJlc3RhcnRBdFRpbWVSZWNvcmQgcmVzdGFydCA9IHsgdGlt
ZSAqIHNjYWxlICwgMCB9OwotICAgICAgICBNQ0RvQWN0aW9uKG1fcHJpdmF0ZS0+bV9tb3ZpZUNv
bnRyb2xsZXIsIG1jQWN0aW9uUmVzdGFydEF0VGltZSwgKHZvaWQgKikmcmVzdGFydCk7Ci0gICAg
fSBlbHNlCi0gICAgICAgIFNldE1vdmllVGltZVZhbHVlKG1fcHJpdmF0ZS0+bV9tb3ZpZSwgVGlt
ZVZhbHVlKHRpbWUgKiBzY2FsZSkpOwotICAgIHVwZGF0ZVRhc2tUaW1lcigpOwotfQotCi12b2lk
IFFUTW92aWVXaW46OnNldFZvbHVtZShmbG9hdCB2b2x1bWUpCi17Ci0gICAgaWYgKCFtX3ByaXZh
dGUtPm1fbW92aWUpCi0gICAgICAgIHJldHVybjsKLSAgICBTZXRNb3ZpZVZvbHVtZShtX3ByaXZh
dGUtPm1fbW92aWUsIHN0YXRpY19jYXN0PHNob3J0Pih2b2x1bWUgKiAyNTYpKTsKLX0KLQotdm9p
ZCBRVE1vdmllV2luOjpzZXRQcmVzZXJ2ZXNQaXRjaChib29sIHByZXNlcnZlc1BpdGNoKQotewot
ICAgIGlmICghbV9wcml2YXRlLT5tX21vdmllIHx8ICFtX3ByaXZhdGUtPm1fY3VycmVudFVSTCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgT1NFcnIgZXJyb3I7Ci0gICAgYm9vbCBwcm9wID0gZmFs
c2U7Ci0KLSAgICBlcnJvciA9IFFUR2V0TW92aWVQcm9wZXJ0eShtX3ByaXZhdGUtPm1fbW92aWUs
IGtRVFByb3BlcnR5Q2xhc3NfQXVkaW8sIGtRVEF1ZGlvUHJvcGVydHlJRF9SYXRlQ2hhbmdlc1By
ZXNlcnZlUGl0Y2gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGtRVEF1
ZGlvUHJvcGVydHlJRF9SYXRlQ2hhbmdlc1ByZXNlcnZlUGl0Y2gpLCBzdGF0aWNfY2FzdDxRVFBy
b3BlcnR5VmFsdWVQdHI+KCZwcm9wKSwgMCk7Ci0KLSAgICBpZiAoZXJyb3IgfHwgcHJvcCA9PSBw
cmVzZXJ2ZXNQaXRjaCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9wcml2YXRlLT5tX3RpbWVU
b1Jlc3RvcmUgPSBjdXJyZW50VGltZSgpOwotICAgIG1fcHJpdmF0ZS0+bV9yYXRlVG9SZXN0b3Jl
ID0gcmF0ZSgpOwotICAgIGxvYWQobV9wcml2YXRlLT5tX2N1cnJlbnRVUkwsIHByZXNlcnZlc1Bp
dGNoKTsKLX0KLQotdW5zaWduZWQgUVRNb3ZpZVdpbjo6ZGF0YVNpemUoKSBjb25zdAotewotICAg
IGlmICghbV9wcml2YXRlLT5tX21vdmllKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4g
R2V0TW92aWVEYXRhU2l6ZShtX3ByaXZhdGUtPm1fbW92aWUsIDAsIEdldE1vdmllRHVyYXRpb24o
bV9wcml2YXRlLT5tX21vdmllKSk7CisgICAgICAgIGlmIChtb3ZpZU5ld2x5UGxheWFibGUpIHsK
KyAgICAgICAgICAgIGNhY2hlTW92aWVTY2FsZSgpOworICAgICAgICAgICAgdXBkYXRlTW92aWVT
aXplKCk7CisgICAgICAgICAgICBpZiAobV92aXNpYmxlKQorICAgICAgICAgICAgICAgIGNsZWFy
R1dvcmxkKCk7CisgICAgICAgIH0KKyAgICB9CiB9CiAKLWZsb2F0IFFUTW92aWVXaW46Om1heFRp
bWVMb2FkZWQoKSBjb25zdAordm9pZCBRVE1vdmllR1dvcmxkUHJpdmF0ZTo6bW92aWVUaW1lQ2hh
bmdlZChRVE1vdmllKikKIHsKLSAgICBpZiAoIW1fcHJpdmF0ZS0+bV9tb3ZpZSkKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgVGltZVZhbHVlIHZhbDsKLSAgICBHZXRNYXhMb2FkZWRUaW1lSW5Nb3Zp
ZShtX3ByaXZhdGUtPm1fbW92aWUsICZ2YWwpOwotICAgIFRpbWVTY2FsZSBzY2FsZSA9IEdldE1v
dmllVGltZVNjYWxlKG1fcHJpdmF0ZS0+bV9tb3ZpZSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0
PGZsb2F0Pih2YWwpIC8gc2NhbGU7CisgICAgLy8gRG8gbm90aGluZwogfQogCi1sb25nIFFUTW92
aWVXaW46OmxvYWRTdGF0ZSgpIGNvbnN0CitRVE1vdmllR1dvcmxkOjpRVE1vdmllR1dvcmxkKFFU
TW92aWVHV29ybGRDbGllbnQqIGNsaWVudCkKKyAgICA6IG1fcHJpdmF0ZShuZXcgUVRNb3ZpZUdX
b3JsZFByaXZhdGUodGhpcykpCiB7Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+bV9sb2FkU3RhdGU7
CisgICAgbV9wcml2YXRlLT5tX2NsaWVudCA9IGNsaWVudDsKIH0KIAotdm9pZCBRVE1vdmllV2lu
OjpnZXROYXR1cmFsU2l6ZShpbnQmIHdpZHRoLCBpbnQmIGhlaWdodCkKK1FUTW92aWVHV29ybGQ6
On5RVE1vdmllR1dvcmxkKCkKIHsKLSAgICBSZWN0IHJlY3QgPSB7IDAsIH07Ci0KLSAgICBpZiAo
bV9wcml2YXRlLT5tX21vdmllKQotICAgICAgICBHZXRNb3ZpZU5hdHVyYWxCb3VuZHNSZWN0KG1f
cHJpdmF0ZS0+bV9tb3ZpZSwgJnJlY3QpOwotICAgIHdpZHRoID0gKHJlY3QucmlnaHQgLSByZWN0
LmxlZnQpICogbV9wcml2YXRlLT5tX3dpZHRoU2NhbGVGYWN0b3I7Ci0gICAgaGVpZ2h0ID0gKHJl
Y3QuYm90dG9tIC0gcmVjdC50b3ApICogbV9wcml2YXRlLT5tX2hlaWdodFNjYWxlRmFjdG9yOwor
ICAgIGRlbGV0ZSBtX3ByaXZhdGU7CiB9CiAKLXZvaWQgUVRNb3ZpZVdpbjo6c2V0U2l6ZShpbnQg
d2lkdGgsIGludCBoZWlnaHQpCit2b2lkIFFUTW92aWVHV29ybGQ6OnNldFNpemUoaW50IHdpZHRo
LCBpbnQgaGVpZ2h0KQogewogICAgIG1fcHJpdmF0ZS0+c2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsK
LSAgICB1cGRhdGVUYXNrVGltZXIoMCk7CisgICAgUVRNb3ZpZVRhc2s6OnNoYXJlZFRhc2soKS0+
dXBkYXRlVGFza1RpbWVyKCk7CiB9CiAKLXZvaWQgUVRNb3ZpZVdpbjo6c2V0VmlzaWJsZShib29s
IGIpCit2b2lkIFFUTW92aWVHV29ybGQ6OnNldFZpc2libGUoYm9vbCBiKQogewogICAgIG1fcHJp
dmF0ZS0+bV92aXNpYmxlID0gYjsKICAgICBtX3ByaXZhdGUtPnVwZGF0ZUdXb3JsZCgpOwogfQog
Ci12b2lkIFFUTW92aWVXaW46OmdldEN1cnJlbnRGcmFtZUluZm8odm9pZComIGJ1ZmZlciwgdW5z
aWduZWQmIGJpdHNQZXJQaXhlbCwgdW5zaWduZWQmIHJvd0J5dGVzLCB1bnNpZ25lZCYgd2lkdGgs
IHVuc2lnbmVkJiBoZWlnaHQpCit2b2lkIFFUTW92aWVHV29ybGQ6OmdldEN1cnJlbnRGcmFtZUlu
Zm8odm9pZComIGJ1ZmZlciwgdW5zaWduZWQmIGJpdHNQZXJQaXhlbCwgdW5zaWduZWQmIHJvd0J5
dGVzLCB1bnNpZ25lZCYgd2lkdGgsIHVuc2lnbmVkJiBoZWlnaHQpCiB7CiAgICAgaWYgKCFtX3By
aXZhdGUtPm1fZ1dvcmxkKSB7CiAgICAgICAgIGJ1ZmZlciA9IDA7CkBAIC02MzcsNyArMzY5LDcg
QEAgdm9pZCBRVE1vdmllV2luOjpnZXRDdXJyZW50RnJhbWVJbmZvKHZvaQogICAgIGhlaWdodCA9
IG1fcHJpdmF0ZS0+bV9oZWlnaHQ7CiB9CiAKLXZvaWQgUVRNb3ZpZVdpbjo6cGFpbnQoSERDIGhk
YywgaW50IHgsIGludCB5KQordm9pZCBRVE1vdmllR1dvcmxkOjpwYWludChIREMgaGRjLCBpbnQg
eCwgaW50IHkpCiB7CiAgICAgaWYgKCFtX3ByaXZhdGUtPm1fZ1dvcmxkKQogICAgICAgICByZXR1
cm47CkBAIC02NTYsNDU0ICszODgsMjIgQEAgdm9pZCBRVE1vdmllV2luOjpwYWludChIREMgaGRj
LCBpbnQgeCwgaQogICAgICAgICAgMCwgMCwgbV9wcml2YXRlLT5tX3dpZHRoLCBtX3ByaXZhdGUt
Pm1faGVpZ2h0LCBibGVuZEZ1bmN0aW9uKTsKIH0KIAotdm9pZCBRVE1vdmllV2luOjpsb2FkKGNv
bnN0IFVDaGFyKiB1cmwsIGludCBsZW4sIGJvb2wgcHJlc2VydmVzUGl0Y2gpCi17Ci0gICAgQ0ZT
dHJpbmdSZWYgdXJsU3RyaW5nUmVmID0gQ0ZTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycyhrQ0ZB
bGxvY2F0b3JEZWZhdWx0LCByZWludGVycHJldF9jYXN0PGNvbnN0IFVuaUNoYXIqPih1cmwpLCBs
ZW4pOwotICAgIENGVVJMUmVmIGNmVVJMID0gQ0ZVUkxDcmVhdGVXaXRoU3RyaW5nKGtDRkFsbG9j
YXRvckRlZmF1bHQsIHVybFN0cmluZ1JlZiwgMCk7Ci0KLSAgICBsb2FkKGNmVVJMLCBwcmVzZXJ2
ZXNQaXRjaCk7Ci0KLSAgICBDRlJlbGVhc2UoY2ZVUkwpOwotICAgIENGUmVsZWFzZSh1cmxTdHJp
bmdSZWYpOwotfQotCi12b2lkIFFUTW92aWVXaW46OmxvYWQoQ0ZVUkxSZWYgdXJsLCBib29sIHBy
ZXNlcnZlc1BpdGNoKQotewotICAgIGlmICghdXJsKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAobV9wcml2YXRlLT5tX21vdmllKSB7Ci0gICAgICAgIG1fcHJpdmF0ZS0+ZW5kVGFzaygpOwot
ICAgICAgICBpZiAobV9wcml2YXRlLT5tX2dXb3JsZCkKLSAgICAgICAgICAgIG1fcHJpdmF0ZS0+
ZGVsZXRlR1dvcmxkKCk7Ci0gICAgICAgIGlmIChtX3ByaXZhdGUtPm1fbW92aWVDb250cm9sbGVy
KQotICAgICAgICAgICAgRGlzcG9zZU1vdmllQ29udHJvbGxlcihtX3ByaXZhdGUtPm1fbW92aWVD
b250cm9sbGVyKTsKLSAgICAgICAgbV9wcml2YXRlLT5tX21vdmllQ29udHJvbGxlciA9IDA7Ci0g
ICAgICAgIERpc3Bvc2VNb3ZpZShtX3ByaXZhdGUtPm1fbW92aWUpOwotICAgICAgICBtX3ByaXZh
dGUtPm1fbW92aWUgPSAwOwotICAgICAgICBtX3ByaXZhdGUtPm1fbG9hZFN0YXRlID0gMDsKLSAg
ICB9ICAKLQotICAgIC8vIERlZmluZSBhIHByb3BlcnR5IGFycmF5IGZvciBOZXdNb3ZpZUZyb21Q
cm9wZXJ0aWVzLiA4IHNob3VsZCBiZSBlbm91Z2ggZm9yIG91ciBuZWVkcy4gCi0gICAgUVROZXdN
b3ZpZVByb3BlcnR5RWxlbWVudCBtb3ZpZVByb3BzWzhdOyAKLSAgICBJdGVtQ291bnQgbW92aWVQ
cm9wQ291bnQgPSAwOyAKLQotICAgIGJvb2wgYm9vbFRydWUgPSB0cnVlOwotICAgIAotICAgIC8v
IERpc2FibGUgc3RyZWFtaW5nIHN1cHBvcnQgZm9yIG5vdy4gCi0gICAgQ0ZTdHJpbmdSZWYgc2No
ZW1lID0gQ0ZVUkxDb3B5U2NoZW1lKHVybCk7Ci0gICAgYm9vbCBpc1JUU1AgPSBDRlN0cmluZ0hh
c1ByZWZpeChzY2hlbWUsIENGU1RSKCJydHNwOiIpKTsKLSAgICBDRlJlbGVhc2Uoc2NoZW1lKTsK
LQotICAgIGlmIChpc1JUU1ApIHsKLSAgICAgICAgbV9wcml2YXRlLT5tX2xvYWRFcnJvciA9IG5v
TW92aWVGb3VuZDsKLSAgICAgICAgZ290byBlbmQ7Ci0gICAgfQotCi0gICAgaWYgKG1fcHJpdmF0
ZS0+bV9jdXJyZW50VVJMKSB7Ci0gICAgICAgIGlmIChtX3ByaXZhdGUtPm1fY3VycmVudFVSTCAh
PSB1cmwpIHsKLSAgICAgICAgICAgIENGUmVsZWFzZShtX3ByaXZhdGUtPm1fY3VycmVudFVSTCk7
Ci0gICAgICAgICAgICBtX3ByaXZhdGUtPm1fY3VycmVudFVSTCA9IHVybDsKLSAgICAgICAgICAg
IENGUmV0YWluKHVybCk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBtX3ByaXZh
dGUtPm1fY3VycmVudFVSTCA9IHVybDsKLSAgICAgICAgQ0ZSZXRhaW4odXJsKTsKLSAgICB9Ci0K
LSAgICAvLyBBZGQgdGhlIG1vdmllIGRhdGEgbG9jYXRpb24gdG8gdGhlIHByb3BlcnR5IGFycmF5
IAotICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BDbGFzcyA9IGtRVFByb3BlcnR5
Q2xhc3NfRGF0YUxvY2F0aW9uOyAKLSAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9w
SUQgPSBrUVREYXRhTG9jYXRpb25Qcm9wZXJ0eUlEX0NGVVJMOyAKLSAgICBtb3ZpZVByb3BzW21v
dmllUHJvcENvdW50XS5wcm9wVmFsdWVTaXplID0gc2l6ZW9mKG1fcHJpdmF0ZS0+bV9jdXJyZW50
VVJMKTsgCi0gICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcFZhbHVlQWRkcmVzcyA9
ICYobV9wcml2YXRlLT5tX2N1cnJlbnRVUkwpOyAKLSAgICBtb3ZpZVByb3BzW21vdmllUHJvcENv
dW50XS5wcm9wU3RhdHVzID0gMDsgCi0gICAgbW92aWVQcm9wQ291bnQrKzsgCi0KLSAgICBtb3Zp
ZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wQ2xhc3MgPSBrUVRQcm9wZXJ0eUNsYXNzX01vdmll
SW5zdGFudGlhdGlvbjsgCi0gICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcElEID0g
a1FUTW92aWVJbnN0YW50aWF0aW9uUHJvcGVydHlJRF9Eb250QXNrVW5yZXNvbHZlZERhdGFSZWZz
OyAKLSAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wVmFsdWVTaXplID0gc2l6ZW9m
KGJvb2xUcnVlKTsgCi0gICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcFZhbHVlQWRk
cmVzcyA9ICZib29sVHJ1ZTsgCi0gICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcFN0
YXR1cyA9IDA7IAotICAgIG1vdmllUHJvcENvdW50Kys7IAotCi0gICAgbW92aWVQcm9wc1ttb3Zp
ZVByb3BDb3VudF0ucHJvcENsYXNzID0ga1FUUHJvcGVydHlDbGFzc19Nb3ZpZUluc3RhbnRpYXRp
b247IAotICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BJRCA9IGtRVE1vdmllSW5z
dGFudGlhdGlvblByb3BlcnR5SURfQXN5bmNPSzsgCi0gICAgbW92aWVQcm9wc1ttb3ZpZVByb3BD
b3VudF0ucHJvcFZhbHVlU2l6ZSA9IHNpemVvZihib29sVHJ1ZSk7IAotICAgIG1vdmllUHJvcHNb
bW92aWVQcm9wQ291bnRdLnByb3BWYWx1ZUFkZHJlc3MgPSAmYm9vbFRydWU7IAotICAgIG1vdmll
UHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BTdGF0dXMgPSAwOyAKLSAgICBtb3ZpZVByb3BDb3Vu
dCsrOyAKLQotICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BDbGFzcyA9IGtRVFBy
b3BlcnR5Q2xhc3NfTmV3TW92aWVQcm9wZXJ0eTsgCi0gICAgbW92aWVQcm9wc1ttb3ZpZVByb3BD
b3VudF0ucHJvcElEID0ga1FUTmV3TW92aWVQcm9wZXJ0eUlEX0FjdGl2ZTsgCi0gICAgbW92aWVQ
cm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcFZhbHVlU2l6ZSA9IHNpemVvZihib29sVHJ1ZSk7IAot
ICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BWYWx1ZUFkZHJlc3MgPSAmYm9vbFRy
dWU7IAotICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BTdGF0dXMgPSAwOyAKLSAg
ICBtb3ZpZVByb3BDb3VudCsrOyAKLQotICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnBy
b3BDbGFzcyA9IGtRVFByb3BlcnR5Q2xhc3NfTmV3TW92aWVQcm9wZXJ0eTsgCi0gICAgbW92aWVQ
cm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcElEID0ga1FUTmV3TW92aWVQcm9wZXJ0eUlEX0RvbnRJ
bnRlcmFjdFdpdGhVc2VyOyAKLSAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wVmFs
dWVTaXplID0gc2l6ZW9mKGJvb2xUcnVlKTsgCi0gICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3Vu
dF0ucHJvcFZhbHVlQWRkcmVzcyA9ICZib29sVHJ1ZTsgCi0gICAgbW92aWVQcm9wc1ttb3ZpZVBy
b3BDb3VudF0ucHJvcFN0YXR1cyA9IDA7IAotICAgIG1vdmllUHJvcENvdW50Kys7IAotCi0gICAg
bW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcENsYXNzID0ga1FUUHJvcGVydHlDbGFzc19N
b3ZpZUluc3RhbnRpYXRpb247Ci0gICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcElE
ID0gJyF1cmwnOwotICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BWYWx1ZVNpemUg
PSBzaXplb2YoYm9vbFRydWUpOyAKLSAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9w
VmFsdWVBZGRyZXNzID0gJmJvb2xUcnVlOyAKLSAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50
XS5wcm9wU3RhdHVzID0gMDsgCi0gICAgbW92aWVQcm9wQ291bnQrKzsgCi0KLSAgICBtb3ZpZVBy
b3BzW21vdmllUHJvcENvdW50XS5wcm9wQ2xhc3MgPSBrUVRQcm9wZXJ0eUNsYXNzX01vdmllSW5z
dGFudGlhdGlvbjsgCi0gICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcElEID0gJ3Np
dGUnOwotICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BWYWx1ZVNpemUgPSBzaXpl
b2YoYm9vbFRydWUpOyAKLSAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wVmFsdWVB
ZGRyZXNzID0gJmJvb2xUcnVlOyAKLSAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9w
U3RhdHVzID0gMDsgCi0gICAgbW92aWVQcm9wQ291bnQrKzsKLQotICAgIG1vdmllUHJvcHNbbW92
aWVQcm9wQ291bnRdLnByb3BDbGFzcyA9IGtRVFByb3BlcnR5Q2xhc3NfQXVkaW87IAotICAgIG1v
dmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BJRCA9IGtRVEF1ZGlvUHJvcGVydHlJRF9SYXRl
Q2hhbmdlc1ByZXNlcnZlUGl0Y2g7Ci0gICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJv
cFZhbHVlU2l6ZSA9IHNpemVvZihwcmVzZXJ2ZXNQaXRjaCk7IAotICAgIG1vdmllUHJvcHNbbW92
aWVQcm9wQ291bnRdLnByb3BWYWx1ZUFkZHJlc3MgPSAmcHJlc2VydmVzUGl0Y2g7IAotICAgIG1v
dmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BTdGF0dXMgPSAwOyAKLSAgICBtb3ZpZVByb3BD
b3VudCsrOyAKLQotICAgIEFTU0VSVChtb3ZpZVByb3BDb3VudCA8PSBzaXplb2YobW92aWVQcm9w
cykvc2l6ZW9mKG1vdmllUHJvcHNbMF0pKTsKLSAgICBtX3ByaXZhdGUtPm1fbG9hZEVycm9yID0g
TmV3TW92aWVGcm9tUHJvcGVydGllcyhtb3ZpZVByb3BDb3VudCwgbW92aWVQcm9wcywgMCwgMCwg
Jm1fcHJpdmF0ZS0+bV9tb3ZpZSk7Ci0KLWVuZDoKLSAgICBtX3ByaXZhdGUtPnN0YXJ0VGFzaygp
OwotICAgIC8vIGdldCB0aGUgbG9hZCBmYWlsIGNhbGxiYWNrIHF1aWNrbHkgCi0gICAgaWYgKG1f
cHJpdmF0ZS0+bV9sb2FkRXJyb3IpCi0gICAgICAgIHVwZGF0ZVRhc2tUaW1lcigwKTsKLSAgICBl
bHNlIHsKLSAgICAgICAgT1NUeXBlIG1vZGUgPSBrUVRBcGVydHVyZU1vZGVfQ2xlYW5BcGVydHVy
ZTsKLQotICAgICAgICAvLyBTZXQgdGhlIGFwZXJ0dXJlIG1vZGUgcHJvcGVydHkgb24gYSBtb3Zp
ZSB0byBzaWduYWwgdGhhdCB3ZSB3YW50IGFzcGVjdCByYXRpbwotICAgICAgICAvLyBhbmQgY2xl
YW4gYXBlcnR1cmUgZGltZW5zaW9ucy4gRG9uJ3Qgd29ycnkgYWJvdXQgZXJyb3JzLCB3ZSBjYW4n
dCBkbyBhbnl0aGluZyBpZgotICAgICAgICAvLyB0aGUgaW5zdGFsbGVkIHZlcnNpb24gb2YgUVQg
ZG9lc24ndCBzdXBwb3J0IGl0IGFuZCBpdCBpc24ndCBzZXJpb3VzIGVub3VnaCB0byAKLSAgICAg
ICAgLy8gd2FycmFudCBmYWlsaW5nLgotICAgICAgICBRVFNldE1vdmllUHJvcGVydHkobV9wcml2
YXRlLT5tX21vdmllLCBrUVRQcm9wZXJ0eUNsYXNzX1Zpc3VhbCwga1FUVmlzdWFsUHJvcGVydHlJ
RF9BcGVydHVyZU1vZGUsIHNpemVvZihtb2RlKSwgJm1vZGUpOwotICAgICAgICBtX3ByaXZhdGUt
PnJlZ2lzdGVyRHJhd2luZ0NhbGxiYWNrKCk7Ci0gICAgfQotfQotCi12b2lkIFFUTW92aWVXaW46
OmRpc2FibGVVbnN1cHBvcnRlZFRyYWNrcyh1bnNpZ25lZCYgZW5hYmxlZFRyYWNrQ291bnQsIHVu
c2lnbmVkJiB0b3RhbFRyYWNrQ291bnQpCi17Ci0gICAgaWYgKCFtX3ByaXZhdGUtPm1fbW92aWUp
IHsKLSAgICAgICAgdG90YWxUcmFja0NvdW50ID0gMDsKLSAgICAgICAgZW5hYmxlZFRyYWNrQ291
bnQgPSAwOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc3RhdGljIEhhc2hTZXQ8T1NU
eXBlPiogYWxsb3dlZFRyYWNrVHlwZXMgPSAwOwotICAgIGlmICghYWxsb3dlZFRyYWNrVHlwZXMp
IHsKLSAgICAgICAgYWxsb3dlZFRyYWNrVHlwZXMgPSBuZXcgSGFzaFNldDxPU1R5cGU+OwotICAg
ICAgICBhbGxvd2VkVHJhY2tUeXBlcy0+YWRkKFZpZGVvTWVkaWFUeXBlKTsKLSAgICAgICAgYWxs
b3dlZFRyYWNrVHlwZXMtPmFkZChTb3VuZE1lZGlhVHlwZSk7Ci0gICAgICAgIGFsbG93ZWRUcmFj
a1R5cGVzLT5hZGQoVGV4dE1lZGlhVHlwZSk7Ci0gICAgICAgIGFsbG93ZWRUcmFja1R5cGVzLT5h
ZGQoQmFzZU1lZGlhVHlwZSk7Ci0gICAgICAgIGFsbG93ZWRUcmFja1R5cGVzLT5hZGQoY2xvc2Vk
Q2FwdGlvblRyYWNrVHlwZSk7Ci0gICAgICAgIGFsbG93ZWRUcmFja1R5cGVzLT5hZGQoc3ViVGl0
bGVUcmFja1R5cGUpOwotICAgICAgICBhbGxvd2VkVHJhY2tUeXBlcy0+YWRkKG1wZWc0T2JqZWN0
RGVzY3JpcHRpb25UcmFja1R5cGUpOwotICAgICAgICBhbGxvd2VkVHJhY2tUeXBlcy0+YWRkKG1w
ZWc0U2NlbmVEZXNjcmlwdGlvblRyYWNrVHlwZSk7Ci0gICAgICAgIGFsbG93ZWRUcmFja1R5cGVz
LT5hZGQoVGltZUNvZGVNZWRpYVR5cGUpOwotICAgICAgICBhbGxvd2VkVHJhY2tUeXBlcy0+YWRk
KFRpbWVDb2RlNjRNZWRpYVR5cGUpOwotICAgIH0KLQotICAgIGxvbmcgdHJhY2tDb3VudCA9IEdl
dE1vdmllVHJhY2tDb3VudChtX3ByaXZhdGUtPm1fbW92aWUpOwotICAgIGVuYWJsZWRUcmFja0Nv
dW50ID0gdHJhY2tDb3VudDsKLSAgICB0b3RhbFRyYWNrQ291bnQgPSB0cmFja0NvdW50OwotCi0g
ICAgLy8gVHJhY2sgaW5kZXhlcyBhcmUgMS1iYXNlZC4geXVjay4gVGhlc2UgdGhpbmdzIG11c3Qg
ZGVzY2VuZCBmcm9tIG9sZC0KLSAgICAvLyBzY2hvb2wgbWFjIHJlc291cmNlcyBvciBzb21ldGhp
bmcuCi0gICAgZm9yIChsb25nIHRyYWNrSW5kZXggPSAxOyB0cmFja0luZGV4IDw9IHRyYWNrQ291
bnQ7IHRyYWNrSW5kZXgrKykgewotICAgICAgICAvLyBHcmFiIHRoZSB0cmFjayBhdCB0aGUgY3Vy
cmVudCBpbmRleC4gSWYgdGhlcmUgaXNuJ3Qgb25lIHRoZXJlLCB0aGVuCi0gICAgICAgIC8vIHdl
IGNhbiBtb3ZlIG9udG8gdGhlIG5leHQgb25lLgotICAgICAgICBUcmFjayBjdXJyZW50VHJhY2sg
PSBHZXRNb3ZpZUluZFRyYWNrKG1fcHJpdmF0ZS0+bV9tb3ZpZSwgdHJhY2tJbmRleCk7Ci0gICAg
ICAgIGlmICghY3VycmVudFRyYWNrKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAot
ICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIHRyYWNrIGlzIGRpc2FibGVkIGFscmVhZHks
IHdlIHNob3VsZCBtb3ZlIGFsb25nLgotICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIHJlLWRp
c2FibGUgaXQuCi0gICAgICAgIGlmICghR2V0VHJhY2tFbmFibGVkKGN1cnJlbnRUcmFjaykpCi0g
ICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAvLyBHcmFiIHRoZSB0cmFjaydzIG1lZGlh
LiBXZSdyZSBnb2luZyB0byBjaGVjayB0byBzZWUgaWYgd2UgbmVlZCB0bwotICAgICAgICAvLyBk
aXNhYmxlIHRoZSB0cmFja3MuIFRoZXkgY291bGQgYmUgdW5zdXBwb3J0ZWQuCi0gICAgICAgIE1l
ZGlhIHRyYWNrTWVkaWEgPSBHZXRUcmFja01lZGlhKGN1cnJlbnRUcmFjayk7Ci0gICAgICAgIGlm
ICghdHJhY2tNZWRpYSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAKLSAgICAgICAg
Ly8gR3JhYiB0aGUgbWVkaWEgdHlwZSBmb3IgdGhpcyB0cmFjay4gTWFrZSBzdXJlIHRoYXQgd2Ug
ZG9uJ3QKLSAgICAgICAgLy8gZ2V0IGFuIGVycm9yIGluIGRvaW5nIHNvLiBJZiB3ZSBkbywgdGhl
biBzb21ldGhpbmcgcmVhbGx5IGZ1bmt5IGlzCi0gICAgICAgIC8vIHdyb25nLgotICAgICAgICBP
U1R5cGUgbWVkaWFUeXBlOwotICAgICAgICBHZXRNZWRpYUhhbmRsZXJEZXNjcmlwdGlvbih0cmFj
a01lZGlhLCAmbWVkaWFUeXBlLCBuaWwsIG5pbCk7Ci0gICAgICAgIE9TRXJyIG1lZGlhRXJyID0g
R2V0TW92aWVzRXJyb3IoKTsgICAgCi0gICAgICAgIGlmIChtZWRpYUVyciAhPSBub0VycikKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAKLSAgICAgICAgaWYgKCFhbGxvd2VkVHJhY2tU
eXBlcy0+Y29udGFpbnMobWVkaWFUeXBlKSkgewotCi0gICAgICAgICAgICAvLyBEaWZmZXJlbnQg
bXBlZyB2YXJpYW50cyBpbXBvcnQgYXMgZGlmZmVyZW50IHRyYWNrIHR5cGVzIHNvIGNoZWNrIGZv
ciB0aGUgIm1wZWcgCi0gICAgICAgICAgICAvLyBjaGFyYWN0ZXJpc3RpYyIgaW5zdGVhZCBvZiBo
YXJkIGNvZGluZyB0aGUgKGN1cnJlbnQpIGxpc3Qgb2YgbXBlZyBtZWRpYSB0eXBlcy4KLSAgICAg
ICAgICAgIGlmIChHZXRNb3ZpZUluZFRyYWNrVHlwZShtX3ByaXZhdGUtPm1fbW92aWUsIDEsICdt
cGVnJywgbW92aWVUcmFja0NoYXJhY3RlcmlzdGljIHwgbW92aWVUcmFja0VuYWJsZWRPbmx5KSkK
LSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgU2V0VHJhY2tFbmFibGVk
KGN1cnJlbnRUcmFjaywgZmFsc2UpOwotICAgICAgICAgICAgLS1lbmFibGVkVHJhY2tDb3VudDsK
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gR3JhYiB0aGUgdHJhY2sgcmVmZXJlbmNl
IGNvdW50IGZvciBjaGFwdGVycy4gVGhpcyB3aWxsIHRlbGwgdXMgaWYgaXQKLSAgICAgICAgLy8g
aGFzIGNoYXB0ZXIgdHJhY2tzIGluIGl0LiBJZiB0aGVyZSBhcmVuJ3QgYW55IHJlZmVyZW5jZXMs
IHRoZW4gd2UKLSAgICAgICAgLy8gY2FuIG1vdmUgb24gdGhlIG5leHQgdHJhY2suCi0gICAgICAg
IGxvbmcgcmVmZXJlbmNlQ291bnQgPSBHZXRUcmFja1JlZmVyZW5jZUNvdW50KGN1cnJlbnRUcmFj
aywga1RyYWNrUmVmZXJlbmNlQ2hhcHRlckxpc3QpOwotICAgICAgICBpZiAocmVmZXJlbmNlQ291
bnQgPD0gMCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAKLSAgICAgICAgbG9uZyBy
ZWZlcmVuY2VJbmRleCA9IDA7ICAgICAgICAKLSAgICAgICAgd2hpbGUgKDEpIHsKLSAgICAgICAg
ICAgIC8vIElmIHdlIGdldCBub3RoaW5nIGhlcmUsIHdlJ3ZlIG92ZXJzdGVwcGVkIG91ciBib3Vu
ZHMgYW5kIGNhbiBzdG9wCi0gICAgICAgICAgICAvLyBsb29raW5nLiBDaGFwdGVyIGluZGljZXMg
aGVyZSBhcmUgMS1iYXNlZCBhcyB3ZWxsIC0gaGVuY2UsIHRoZQotICAgICAgICAgICAgLy8gcHJl
LWluY3JlbWVudC4KLSAgICAgICAgICAgIHJlZmVyZW5jZUluZGV4Kys7Ci0gICAgICAgICAgICBU
cmFjayBjaGFwdGVyVHJhY2sgPSBHZXRUcmFja1JlZmVyZW5jZShjdXJyZW50VHJhY2ssIGtUcmFj
a1JlZmVyZW5jZUNoYXB0ZXJMaXN0LCByZWZlcmVuY2VJbmRleCk7Ci0gICAgICAgICAgICBpZiAo
IWNoYXB0ZXJUcmFjaykKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgLy8gVHJ5IHRvIGdyYWIgdGhlIG1lZGlhIGZvciB0aGUgdHJhY2suCi0gICAgICAg
ICAgICBNZWRpYSBjaGFwdGVyTWVkaWEgPSBHZXRUcmFja01lZGlhKGNoYXB0ZXJUcmFjayk7Ci0g
ICAgICAgICAgICBpZiAoIWNoYXB0ZXJNZWRpYSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgCi0gICAgICAgICAgICAvLyBHcmFiIHRoZSBtZWRpYSB0eXBlIGZvciB0aGlzIHRy
YWNrLiBNYWtlIHN1cmUgdGhhdCB3ZSBkb24ndAotICAgICAgICAgICAgLy8gZ2V0IGFuIGVycm9y
IGluIGRvaW5nIHNvLiBJZiB3ZSBkbywgdGhlbiBzb21ldGhpbmcgcmVhbGx5Ci0gICAgICAgICAg
ICAvLyBmdW5reSBpcyB3cm9uZy4KLSAgICAgICAgICAgIE9TVHlwZSBtZWRpYVR5cGU7Ci0gICAg
ICAgICAgICBHZXRNZWRpYUhhbmRsZXJEZXNjcmlwdGlvbihjaGFwdGVyTWVkaWEsICZtZWRpYVR5
cGUsIG5pbCwgbmlsKTsKLSAgICAgICAgICAgIE9TRXJyIG1lZGlhRXJyID0gR2V0TW92aWVzRXJy
b3IoKTsKLSAgICAgICAgICAgIGlmIChtZWRpYUVyciAhPSBub0VycikKLSAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlm
IHRoZSB0cmFjayBpcyBhIHZpZGVvIHRyYWNrLiBXZSBkb24ndCBjYXJlIGFib3V0Ci0gICAgICAg
ICAgICAvLyBvdGhlciBub24tdmlkZW8gdHJhY2tzLgotICAgICAgICAgICAgaWYgKG1lZGlhVHlw
ZSAhPSBWaWRlb01lZGlhVHlwZSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSB0cmFjayBpcyBhbHJlYWR5
IGRpc2FibGVkLiBJZiBpdCBpcywgd2UKLSAgICAgICAgICAgIC8vIHNob3VsZCBtb3ZlIGFsb25n
LgotICAgICAgICAgICAgaWYgKCFHZXRUcmFja0VuYWJsZWQoY2hhcHRlclRyYWNrKSkKLSAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gRGlzYWJs
ZWQgdGhlIGV2aWwsIGV2aWwgdHJhY2suCi0gICAgICAgICAgICBTZXRUcmFja0VuYWJsZWQoY2hh
cHRlclRyYWNrLCBmYWxzZSk7Ci0gICAgICAgICAgICAtLWVuYWJsZWRUcmFja0NvdW50OwotICAg
ICAgICB9Ci0gICAgfQotfQotCi12b2lkIFFUTW92aWVXaW46OnNldERpc2FibGVkKGJvb2wgYikK
K3ZvaWQgUVRNb3ZpZUdXb3JsZDo6c2V0RGlzYWJsZWQoYm9vbCBiKQogewotICAgIG1fZGlzYWJs
ZWQgPSBiOworICAgIG1fcHJpdmF0ZS0+bV9kaXNhYmxlZCA9IGI7CiB9CiAKLQotYm9vbCBRVE1v
dmllV2luOjpoYXNWaWRlbygpIGNvbnN0Citib29sIFFUTW92aWVHV29ybGQ6OmlzRGlzYWJsZWQo
KSBjb25zdAogewotICAgIGlmICghbV9wcml2YXRlLT5tX21vdmllKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgcmV0dXJuIChHZXRNb3ZpZUluZFRyYWNrVHlwZShtX3ByaXZhdGUtPm1fbW92
aWUsIDEsIFZpc3VhbE1lZGlhQ2hhcmFjdGVyaXN0aWMsIG1vdmllVHJhY2tDaGFyYWN0ZXJpc3Rp
YyB8IG1vdmllVHJhY2tFbmFibGVkT25seSkpOworICAgIHJldHVybiBtX3ByaXZhdGUtPm1fZGlz
YWJsZWQ7CiB9CiAKLWJvb2wgUVRNb3ZpZVdpbjo6aGFzQXVkaW8oKSBjb25zdAorTFJFU1VMVCBR
VE1vdmllR1dvcmxkOjpmdWxsc2NyZWVuV25kUHJvYyhIV05EIHduZCwgVUlOVCBtZXNzYWdlLCBX
UEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQogewotICAgIGlmICghbV9wcml2YXRlLT5tX21v
dmllKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIChHZXRNb3ZpZUluZFRyYWNr
VHlwZShtX3ByaXZhdGUtPm1fbW92aWUsIDEsIEF1ZGlvTWVkaWFDaGFyYWN0ZXJpc3RpYywgbW92
aWVUcmFja0NoYXJhY3RlcmlzdGljIHwgbW92aWVUcmFja0VuYWJsZWRPbmx5KSk7Ci19Ci0KLQot
Ym9vbCBRVE1vdmllV2luOjpoYXNDbG9zZWRDYXB0aW9ucygpIGNvbnN0IAotewotICAgIGlmICgh
bV9wcml2YXRlLT5tX21vdmllKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIEdl
dE1vdmllSW5kVHJhY2tUeXBlKG1fcHJpdmF0ZS0+bV9tb3ZpZSwgMSwgY2xvc2VkQ2FwdGlvblRy
YWNrVHlwZSwgbW92aWVUcmFja01lZGlhVHlwZSk7Ci19Ci0KLXZvaWQgUVRNb3ZpZVdpbjo6c2V0
Q2xvc2VkQ2FwdGlvbnNWaXNpYmxlKGJvb2wgdmlzaWJsZSkKLXsKLSAgICBpZiAoIW1fcHJpdmF0
ZS0+bV9tb3ZpZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVHJhY2sgY2NUcmFjayA9IEdldE1v
dmllSW5kVHJhY2tUeXBlKG1fcHJpdmF0ZS0+bV9tb3ZpZSwgMSwgY2xvc2VkQ2FwdGlvblRyYWNr
VHlwZSwgbW92aWVUcmFja01lZGlhVHlwZSk7Ci0gICAgaWYgKCFjY1RyYWNrKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBCb29sZWFuIGRvRGlzcGxheSA9IHZpc2libGU7Ci0gICAgUVRTZXRUcmFj
a1Byb3BlcnR5KGNjVHJhY2ssIGNsb3NlZENhcHRpb25UcmFja1R5cGUsIGNsb3NlZENhcHRpb25E
aXNwbGF5UHJvcGVydHlJRCwgc2l6ZW9mKGRvRGlzcGxheSksICZkb0Rpc3BsYXkpOwotfQotCi1w
YXNjYWwgT1NFcnIgbW92aWVEcmF3aW5nQ29tcGxldGVQcm9jKE1vdmllIG1vdmllLCBsb25nIGRh
dGEpCi17Ci0gICAgVXBwUGFyYW0gcGFyYW07Ci0gICAgcGFyYW0ubG9uZ1ZhbHVlID0gZGF0YTsK
LSAgICBRVE1vdmllV2luUHJpdmF0ZSogbXAgPSBzdGF0aWNfY2FzdDxRVE1vdmllV2luUHJpdmF0
ZSo+KHBhcmFtLnB0cik7Ci0gICAgaWYgKG1wKQotICAgICAgICBtcC0+ZHJhd2luZ0NvbXBsZXRl
KCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGluaXRpYWxpemVTdXBwb3J0ZWRU
eXBlcygpIAotewotICAgIGlmIChnU3VwcG9ydGVkVHlwZXMpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGdTdXBwb3J0ZWRUeXBlcyA9IG5ldyBWZWN0b3I8Q0ZTdHJpbmdSZWY+OwotICAgIGlmIChx
dWlja1RpbWVWZXJzaW9uIDwgbWluaW11bVF1aWNrVGltZVZlcnNpb24pIHsKLSAgICAgICAgTE9H
X0VSUk9SKCJRdWlja1RpbWUgdmVyc2lvbiAleCBkZXRlY3RlZCwgYXQgbGVhc3QgJXggcmVxdWly
ZWQuIFJldHVybmluZyBlbXB0eSBsaXN0IG9mIHN1cHBvcnRlZCBtZWRpYSBNSU1FIHR5cGVzLiIs
IHF1aWNrVGltZVZlcnNpb24sIG1pbmltdW1RdWlja1RpbWVWZXJzaW9uKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIC8vIFF1aWNrVGltZSBkb2Vzbid0IGhhdmUgYW4gaW1wb3J0ZXIg
Zm9yIHZpZGVvL3F1aWNrdGltZS4gQWRkIGl0IG1hbnVhbGx5LgotICAgIGdTdXBwb3J0ZWRUeXBl
cy0+YXBwZW5kKENGU1RSKCJ2aWRlby9xdWlja3RpbWUiKSk7Ci0KLSAgICBmb3IgKGludCBpbmRl
eCA9IDA7IGluZGV4IDwgMjsgaW5kZXgrKykgewotICAgICAgICBDb21wb25lbnREZXNjcmlwdGlv
biBmaW5kQ0Q7Ci0KLSAgICAgICAgLy8gbG9vayBhdCBhbGwgbW92aWUgaW1wb3J0ZXJzIHRoYXQg
Y2FuIGltcG9ydCBpbiBwbGFjZSBhbmQgYXJlIGluc3RhbGxlZC4gCi0gICAgICAgIGZpbmRDRC5j
b21wb25lbnRUeXBlID0gTW92aWVJbXBvcnRUeXBlOwotICAgICAgICBmaW5kQ0QuY29tcG9uZW50
U3ViVHlwZSA9IDA7Ci0gICAgICAgIGZpbmRDRC5jb21wb25lbnRNYW51ZmFjdHVyZXIgPSAwOwot
ICAgICAgICBmaW5kQ0QuY29tcG9uZW50RmxhZ3NNYXNrID0gY21wSXNNaXNzaW5nIHwgbW92aWVJ
bXBvcnRTdWJUeXBlSXNGaWxlRXh0ZW5zaW9uIHwgY2FuTW92aWVJbXBvcnRJblBsYWNlIHwgZG9u
dEF1dG9GaWxlTW92aWVJbXBvcnQ7Ci0KLSAgICAgICAgLy8gbG9vayBhdCB0aG9zZSByZWdpc3Rl
cmVkIGJ5IEhGUyBmaWxlIHR5cGVzIHRoZSBmaXJzdCB0aW1lIHRocm91Z2gsIGJ5IGZpbGUgZXh0
ZW5zaW9uIHRoZSBzZWNvbmQgdGltZQotICAgICAgICBmaW5kQ0QuY29tcG9uZW50RmxhZ3MgPSBj
YW5Nb3ZpZUltcG9ydEluUGxhY2UgfCAoaW5kZXggPyBtb3ZpZUltcG9ydFN1YlR5cGVJc0ZpbGVF
eHRlbnNpb24gOiAwKTsKLSAgICAgICAgCi0gICAgICAgIGxvbmcgY29tcG9uZW50Q291bnQgPSBD
b3VudENvbXBvbmVudHMoJmZpbmRDRCk7Ci0gICAgICAgIGlmICghY29tcG9uZW50Q291bnQpCi0g
ICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBDb21wb25lbnQgY29tcCA9IDA7Ci0gICAg
ICAgIHdoaWxlIChjb21wID0gRmluZE5leHRDb21wb25lbnQoY29tcCwgJmZpbmRDRCkpIHsKLSAg
ICAgICAgICAgIC8vIERvZXMgdGhpcyBjb21wb25lbnQgaGF2ZSBhIE1JTUUgdHlwZSBjb250YWlu
ZXI/Ci0gICAgICAgICAgICBDb21wb25lbnREZXNjcmlwdGlvbiBpbmZvQ0Q7Ci0gICAgICAgICAg
ICBPU0VyciBlcnIgPSBHZXRDb21wb25lbnRJbmZvKGNvbXAsICZpbmZvQ0QsIG5pbCAvKm5hbWUq
LywgbmlsIC8qaW5mbyovLCBuaWwgLyppY29uKi8pOwotICAgICAgICAgICAgaWYgKGVycikKLSAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmICghKGluZm9DRC5jb21wb25l
bnRGbGFncyAmIGhhc01vdmllSW1wb3J0TUlNRUxpc3QpKQotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgUVRBdG9tQ29udGFpbmVyIG1pbWVMaXN0ID0gMDsKLSAgICAgICAg
ICAgIGVyciA9IE1vdmllSW1wb3J0R2V0TUlNRVR5cGVMaXN0KChDb21wb25lbnRJbnN0YW5jZSlj
b21wLCAmbWltZUxpc3QpOwotICAgICAgICAgICAgaWYgKGVyciB8fCAhbWltZUxpc3QpCi0gICAg
ICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIC8vIEdyYWIgZXZlcnkgdHlwZSBm
cm9tIHRoZSBjb250YWluZXIuCi0gICAgICAgICAgICBRVExvY2tDb250YWluZXIobWltZUxpc3Qp
OwotICAgICAgICAgICAgaW50IHR5cGVDb3VudCA9IFFUQ291bnRDaGlsZHJlbk9mVHlwZShtaW1l
TGlzdCwga1BhcmVudEF0b21Jc0NvbnRhaW5lciwga01pbWVJbmZvTWltZVR5cGVUYWcpOwotICAg
ICAgICAgICAgZm9yIChpbnQgdHlwZUluZGV4ID0gMTsgdHlwZUluZGV4IDw9IHR5cGVDb3VudDsg
dHlwZUluZGV4KyspIHsKLSAgICAgICAgICAgICAgICBRVEF0b20gbWltZVRhZyA9IFFURmluZENo
aWxkQnlJbmRleChtaW1lTGlzdCwgMCwga01pbWVJbmZvTWltZVR5cGVUYWcsIHR5cGVJbmRleCwg
MCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFtaW1lVGFnKQotICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgICAgICBjaGFyKiBhdG9tRGF0YTsKLSAgICAgICAgICAgICAg
ICBsb25nIHR5cGVMZW5ndGg7Ci0gICAgICAgICAgICAgICAgaWYgKG5vRXJyICE9IFFUR2V0QXRv
bURhdGFQdHIobWltZUxpc3QsIG1pbWVUYWcsICZ0eXBlTGVuZ3RoLCAmYXRvbURhdGEpKQotICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgICAgIGNoYXIgdHlwZUJ1
ZmZlclsyNTZdOwotICAgICAgICAgICAgICAgIGlmICh0eXBlTGVuZ3RoID49IHNpemVvZih0eXBl
QnVmZmVyKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAg
bWVtY3B5KHR5cGVCdWZmZXIsIGF0b21EYXRhLCB0eXBlTGVuZ3RoKTsKLSAgICAgICAgICAgICAg
ICB0eXBlQnVmZmVyW3R5cGVMZW5ndGhdID0gMDsKLQotICAgICAgICAgICAgICAgIC8vIE9ubHkg
YWRkICJhdWRpby8uLi4iIGFuZCAidmlkZW8vLi4uIiB0eXBlcy4KLSAgICAgICAgICAgICAgICBp
ZiAoc3RybmNtcCh0eXBlQnVmZmVyLCAiYXVkaW8vIiwgNikgJiYgc3RybmNtcCh0eXBlQnVmZmVy
LCAidmlkZW8vIiwgNikpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAg
ICAgICAgICAgQ0ZTdHJpbmdSZWYgY2ZNaW1lVHlwZSA9IENGU3RyaW5nQ3JlYXRlV2l0aENTdHJp
bmcoMCwgdHlwZUJ1ZmZlciwga0NGU3RyaW5nRW5jb2RpbmdVVEY4KTsKLSAgICAgICAgICAgICAg
ICBpZiAoIWNmTWltZVR5cGUpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAg
ICAgICAgICAgICAgLy8gT25seSBhZGQgZWFjaCB0eXBlIG9uY2UuCi0gICAgICAgICAgICAgICAg
Ym9vbCBhbHJlYWR5QWRkZWQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBhZGRl
ZEluZGV4ID0gMDsgYWRkZWRJbmRleCA8IGdTdXBwb3J0ZWRUeXBlcy0+c2l6ZSgpOyBhZGRlZElu
ZGV4KyspIHsKLSAgICAgICAgICAgICAgICAgICAgQ0ZTdHJpbmdSZWYgdHlwZSA9IGdTdXBwb3J0
ZWRUeXBlcy0+YXQoYWRkZWRJbmRleCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChrQ0ZDb21w
YXJlRXF1YWxUbyA9PSBDRlN0cmluZ0NvbXBhcmUoY2ZNaW1lVHlwZSwgdHlwZSwga0NGQ29tcGFy
ZUNhc2VJbnNlbnNpdGl2ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFscmVhZHlBZGRl
ZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoIWFscmVhZHlB
ZGRlZCkKLSAgICAgICAgICAgICAgICAgICAgZ1N1cHBvcnRlZFR5cGVzLT5hcHBlbmQoY2ZNaW1l
VHlwZSk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBDRlJlbGVh
c2UoY2ZNaW1lVHlwZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBEaXNwb3NlSGFuZGxl
KG1pbWVMaXN0KTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdW5zaWduZWQgUVRNb3ZpZVdpbjo6
Y291bnRTdXBwb3J0ZWRUeXBlcygpCi17Ci0gICAgaW5pdGlhbGl6ZVN1cHBvcnRlZFR5cGVzKCk7
Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihnU3VwcG9ydGVkVHlwZXMtPnNpemUo
KSk7Ci19Ci0KLXZvaWQgUVRNb3ZpZVdpbjo6Z2V0U3VwcG9ydGVkVHlwZSh1bnNpZ25lZCBpbmRl
eCwgY29uc3QgVUNoYXIqJiBzdHIsIHVuc2lnbmVkJiBsZW4pCi17Ci0gICAgaW5pdGlhbGl6ZVN1
cHBvcnRlZFR5cGVzKCk7Ci0gICAgQVNTRVJUKGluZGV4IDwgZ1N1cHBvcnRlZFR5cGVzLT5zaXpl
KCkpOwotCi0gICAgLy8gQWxsb2NhdGUgc3VmZmljaWVudCBidWZmZXIgdG8gaG9sZCBhbnkgTUlN
RSB0eXBlCi0gICAgc3RhdGljIFVuaUNoYXIqIHN0YXRpY0J1ZmZlciA9IDA7Ci0gICAgaWYgKCFz
dGF0aWNCdWZmZXIpCi0gICAgICAgIHN0YXRpY0J1ZmZlciA9IG5ldyBVbmlDaGFyWzMyXTsKLQot
ICAgIENGU3RyaW5nUmVmIGNmc3RyID0gZ1N1cHBvcnRlZFR5cGVzLT5hdChpbmRleCk7Ci0gICAg
bGVuID0gQ0ZTdHJpbmdHZXRMZW5ndGgoY2ZzdHIpOwotICAgIENGUmFuZ2UgcmFuZ2UgPSB7IDAs
IGxlbiB9OwotICAgIENGU3RyaW5nR2V0Q2hhcmFjdGVycyhjZnN0ciwgcmFuZ2UsIHN0YXRpY0J1
ZmZlcik7Ci0gICAgc3RyID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KHN0YXRpY0J1
ZmZlcik7Ci0gICAgCi19Ci0KLXZvaWQgUVRNb3ZpZVdpbjo6c2V0VGFza1RpbWVyRnVuY3MoU2V0
VGFza1RpbWVyRGVsYXlGdW5jIHNldFRhc2tUaW1lckRlbGF5LCBTdG9wVGFza1RpbWVyRnVuYyBz
dG9wVGFza1RpbWVyKQotewotICAgIGdTZXRUYXNrVGltZXJEZWxheSA9IHNldFRhc2tUaW1lckRl
bGF5OwotICAgIGdTdG9wVGFza1RpbWVyID0gc3RvcFRhc2tUaW1lcjsKLX0KLQotYm9vbCBRVE1v
dmllV2luOjppbml0aWFsaXplUXVpY2tUaW1lKCkgCi17Ci0gICAgc3RhdGljIGJvb2wgaW5pdGlh
bGl6ZWQgPSBmYWxzZTsKLSAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXphdGlvblN1Y2NlZWRlZCA9
IGZhbHNlOwotICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKLSAgICAgICAgaW5pdGlhbGl6ZWQgPSB0
cnVlOwotICAgICAgICAvLyBJbml0aWFsaXplIGFuZCBjaGVjayBRdWlja1RpbWUgdmVyc2lvbgot
ICAgICAgICBPU0VyciByZXN1bHQgPSBJbml0aWFsaXplUVRNTChrSW5pdGlhbGl6ZVFUTUxFbmFi
bGVEb3VibGVCdWZmZXJlZFN1cmZhY2UpOwotICAgICAgICBpZiAocmVzdWx0ID09IG5vRXJyKQot
ICAgICAgICAgICAgcmVzdWx0ID0gR2VzdGFsdChnZXN0YWx0UXVpY2tUaW1lLCAmcXVpY2tUaW1l
VmVyc2lvbik7Ci0gICAgICAgIGlmIChyZXN1bHQgIT0gbm9FcnIpIHsKLSAgICAgICAgICAgIExP
R19FUlJPUigiTm8gUXVpY2tUaW1lIGF2YWlsYWJsZS4gRGlzYWJsaW5nIDx2aWRlbz4gYW5kIDxh
dWRpbz4gc3VwcG9ydC4iKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQot
ICAgICAgICBpZiAocXVpY2tUaW1lVmVyc2lvbiA8IG1pbmltdW1RdWlja1RpbWVWZXJzaW9uKSB7
Ci0gICAgICAgICAgICBMT0dfRVJST1IoIlF1aWNrVGltZSB2ZXJzaW9uICV4IGRldGVjdGVkLCBh
dCBsZWFzdCAleCByZXF1aXJlZC4gRGlzYWJsaW5nIDx2aWRlbz4gYW5kIDxhdWRpbz4gc3VwcG9y
dC4iLCBxdWlja1RpbWVWZXJzaW9uLCBtaW5pbXVtUXVpY2tUaW1lVmVyc2lvbik7Ci0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgRW50ZXJNb3ZpZXMoKTsKLSAg
ICAgICAgZ01vdmllRHJhd2luZ0NvbXBsZXRlVVBQID0gTmV3TW92aWVEcmF3aW5nQ29tcGxldGVV
UFAobW92aWVEcmF3aW5nQ29tcGxldGVQcm9jKTsKLSAgICAgICAgaW5pdGlhbGl6YXRpb25TdWNj
ZWVkZWQgPSB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gaW5pdGlhbGl6YXRpb25TdWNjZWVkZWQ7
Ci19Ci0KLUxSRVNVTFQgUVRNb3ZpZVdpbjo6ZnVsbHNjcmVlblduZFByb2MoSFdORCB3bmQsIFVJ
TlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKLXsKLSAgICBRVE1vdmll
V2luKiBtb3ZpZSA9IHN0YXRpY19jYXN0PFFUTW92aWVXaW4qPihHZXRQcm9wKHduZCwgZnVsbHNj
cmVlblFUTW92aWVXaW5Qb2ludGVyUHJvcCkpOworICAgIFFUTW92aWVHV29ybGQqIG1vdmllID0g
c3RhdGljX2Nhc3Q8UVRNb3ZpZUdXb3JsZCo+KEdldFByb3Aod25kLCBmdWxsc2NyZWVuUVRNb3Zp
ZUdXb3JsZFBvaW50ZXJQcm9wKSk7CiAKICAgICBpZiAobWVzc2FnZSA9PSBXTV9ERVNUUk9ZKQot
ICAgICAgICBSZW1vdmVQcm9wKHduZCwgZnVsbHNjcmVlblFUTW92aWVXaW5Qb2ludGVyUHJvcCk7
CisgICAgICAgIFJlbW92ZVByb3Aod25kLCBmdWxsc2NyZWVuUVRNb3ZpZUdXb3JsZFBvaW50ZXJQ
cm9wKTsKIAogICAgIGlmICghbW92aWUpCiAgICAgICAgIHJldHVybiBEZWZXaW5kb3dQcm9jKHdu
ZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0pOwpAQCAtMTExMSw3ICs0MTEsNyBAQCBMUkVTVUxU
IFFUTW92aWVXaW46OmZ1bGxzY3JlZW5XbmRQcm9jKEhXCiAgICAgcmV0dXJuIG1vdmllLT5tX3By
aXZhdGUtPm1fZnVsbHNjcmVlbkNsaWVudC0+ZnVsbHNjcmVlbkNsaWVudFduZFByb2Mod25kLCBt
ZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7CiB9CiAKLUhXTkQgUVRNb3ZpZVdpbjo6ZW50ZXJGdWxs
c2NyZWVuKFFUTW92aWVXaW5GdWxsc2NyZWVuQ2xpZW50KiBjbGllbnQpCitIV05EIFFUTW92aWVH
V29ybGQ6OmVudGVyRnVsbHNjcmVlbihRVE1vdmllR1dvcmxkRnVsbHNjcmVlbkNsaWVudCogY2xp
ZW50KQogewogICAgIG1fcHJpdmF0ZS0+bV9mdWxsc2NyZWVuQ2xpZW50ID0gY2xpZW50OwogICAg
IApAQCAtMTE0NSwxMiArNDQ1LDEyIEBAIEhXTkQgUVRNb3ZpZVdpbjo6ZW50ZXJGdWxsc2NyZWVu
KFFUTW92aWUKIAogICAgIC8vIFNldCB0aGUgJ3RoaXMnIHBvaW50ZXIgb24gdGhlIEhXTkQKICAg
ICBIV05EIHduZCA9IHN0YXRpY19jYXN0PEhXTkQ+KEdldFBvcnROYXRpdmVXaW5kb3cobV9wcml2
YXRlLT5tX2Z1bGxzY3JlZW5XaW5kb3cpKTsKLSAgICBTZXRQcm9wKHduZCwgZnVsbHNjcmVlblFU
TW92aWVXaW5Qb2ludGVyUHJvcCwgc3RhdGljX2Nhc3Q8SEFORExFPih0aGlzKSk7CisgICAgU2V0
UHJvcCh3bmQsIGZ1bGxzY3JlZW5RVE1vdmllR1dvcmxkUG9pbnRlclByb3AsIHN0YXRpY19jYXN0
PEhBTkRMRT4odGhpcykpOwogCiAgICAgcmV0dXJuIHduZDsKIH0KIAotdm9pZCBRVE1vdmllV2lu
OjpleGl0RnVsbHNjcmVlbigpCit2b2lkIFFUTW92aWVHV29ybGQ6OmV4aXRGdWxsc2NyZWVuKCkK
IHsKICAgICBpZiAoIW1fcHJpdmF0ZS0+bV9mdWxsc2NyZWVuV2luZG93KQogICAgICAgICByZXR1
cm47CkBAIC0xMTYzLDE2ICs0NjMsMjUgQEAgdm9pZCBRVE1vdmllV2luOjpleGl0RnVsbHNjcmVl
bigpCiAgICAgbV9wcml2YXRlLT5tX2Z1bGxzY3JlZW5XaW5kb3cgPSAwOwogfQogCi1CT09MIFdJ
TkFQSSBEbGxNYWluKEhJTlNUQU5DRSBoaW5zdERMTCwgRFdPUkQgZmR3UmVhc29uLCBMUFZPSUQg
bHB2UmVzZXJ2ZWQpCit2b2lkIFFUTW92aWVHV29ybGQ6OnNldE1vdmllKFBhc3NSZWZQdHI8UVRN
b3ZpZT4gbW92aWUpCiB7Ci0gICAgc3dpdGNoIChmZHdSZWFzb24pIHsKLSAgICBjYXNlIERMTF9Q
Uk9DRVNTX0FUVEFDSDoKLSAgICAgICAgcmV0dXJuIFRSVUU7Ci0gICAgY2FzZSBETExfUFJPQ0VT
U19ERVRBQ0g6Ci0gICAgY2FzZSBETExfVEhSRUFEX0FUVEFDSDoKLSAgICBjYXNlIERMTF9USFJF
QURfREVUQUNIOgotICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgaWYgKG1fcHJpdmF0ZS0+bV9x
dE1vdmllKSB7CisgICAgICAgIG1fcHJpdmF0ZS0+dW5yZWdpc3RlckRyYXdpbmdDYWxsYmFjaygp
OworICAgICAgICBtX3ByaXZhdGUtPm1fcXRNb3ZpZS0+cmVtb3ZlQ2xpZW50KG1fcHJpdmF0ZSk7
CisgICAgICAgIG1fcHJpdmF0ZS0+bV9xdE1vdmllID0gMDsKKyAgICAgICAgbV9wcml2YXRlLT5t
X21vdmllID0gMDsKKyAgICB9CisKKyAgICBtX3ByaXZhdGUtPm1fcXRNb3ZpZSA9IG1vdmllOwor
CisgICAgaWYgKG1fcHJpdmF0ZS0+bV9xdE1vdmllKSB7CisgICAgICAgIG1fcHJpdmF0ZS0+bV9x
dE1vdmllLT5hZGRDbGllbnQobV9wcml2YXRlKTsKKyAgICAgICAgbV9wcml2YXRlLT5tX21vdmll
ID0gbV9wcml2YXRlLT5tX3F0TW92aWUtPmdldE1vdmllSGFuZGxlKCk7CisgICAgICAgIG1fcHJp
dmF0ZS0+cmVnaXN0ZXJEcmF3aW5nQ2FsbGJhY2soKTsKICAgICB9Ci0gICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgcmV0dXJuIEZBTFNFOworfQorCitRVE1vdmllKiBRVE1vdmllR1dvcmxk
Ojptb3ZpZSgpIGNvbnN0IAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPm1fcXRNb3ZpZS5nZXQo
KTsKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWVHV29ybGQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVE1vdmllR1dv
cmxkLmgJKHJldmlzaW9uIDU4NTk2KQkoZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9RVE1vdmllV2luLmg6NTg1OTYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9R
VE1vdmllR1dvcmxkLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUsIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUVRNb3ZpZVdpbl9oCisjZGVmaW5lIFFUTW92
aWVXaW5faAorCisjaW5jbHVkZSA8VW5pY29kZS5oPgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKwor
I2lmZGVmIFFUTU9WSUVXSU5fRVhQT1JUUworI2RlZmluZSBRVE1PVklFV0lOX0FQSSBfX2RlY2xz
cGVjKGRsbGV4cG9ydCkKKyNlbHNlCisjZGVmaW5lIFFUTU9WSUVXSU5fQVBJIF9fZGVjbHNwZWMo
ZGxsaW1wb3J0KQorI2VuZGlmCisKK2NsYXNzIFFUTW92aWVXaW47CitjbGFzcyBRVE1vdmllV2lu
UHJpdmF0ZTsKKworY2xhc3MgUVRNb3ZpZVdpbkNsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVh
bCB2b2lkIG1vdmllRW5kZWQoUVRNb3ZpZVdpbiopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbW92
aWVMb2FkU3RhdGVDaGFuZ2VkKFFUTW92aWVXaW4qKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIG1v
dmllVGltZUNoYW5nZWQoUVRNb3ZpZVdpbiopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbW92aWVO
ZXdJbWFnZUF2YWlsYWJsZShRVE1vdmllV2luKikgPSAwOworfTsKKworY2xhc3MgUVRNb3ZpZVdp
bkZ1bGxzY3JlZW5DbGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgTFJFU1VMVCBmdWxsc2Ny
ZWVuQ2xpZW50V25kUHJvYyhIV05ELCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSwgTFBBUkFNKSA9IDA7
Cit9OworCitlbnVtIHsKKyAgICBRVE1vdmllTG9hZFN0YXRlRXJyb3IgPSAtMUwsCisgICAgUVRN
b3ZpZUxvYWRTdGF0ZUxvYWRlZCAgPSAyMDAwTCwKKyAgICBRVE1vdmllTG9hZFN0YXRlUGxheWFi
bGUgPSAxMDAwMEwsCisgICAgUVRNb3ZpZUxvYWRTdGF0ZVBsYXl0aHJvdWdoT0sgPSAyMDAwMEws
CisgICAgUVRNb3ZpZUxvYWRTdGF0ZUNvbXBsZXRlID0gMTAwMDAwTAorfTsKKwordHlwZWRlZiBj
b25zdCBzdHJ1Y3QgX19DRlVSTCAqIENGVVJMUmVmOworCitjbGFzcyBRVE1PVklFV0lOX0FQSSBR
VE1vdmllV2luIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplUXVpY2tUaW1l
KCk7CisKKyAgICB0eXBlZGVmIHZvaWQgKCpTZXRUYXNrVGltZXJEZWxheUZ1bmMpKGRvdWJsZSk7
CisgICAgdHlwZWRlZiB2b2lkICgqU3RvcFRhc2tUaW1lckZ1bmMpKCk7CisgICAgc3RhdGljIHZv
aWQgc2V0VGFza1RpbWVyRnVuY3MoU2V0VGFza1RpbWVyRGVsYXlGdW5jLCBTdG9wVGFza1RpbWVy
RnVuYyk7CisgICAgc3RhdGljIHZvaWQgdGFza1RpbWVyRmlyZWQoKTsKKworICAgIFFUTW92aWVX
aW4oUVRNb3ZpZVdpbkNsaWVudCopOworICAgIH5RVE1vdmllV2luKCk7CisKKyAgICB2b2lkIGxv
YWQoY29uc3QgVUNoYXIqIHVybCwgaW50IGxlbiwgYm9vbCBwcmVzZXJ2ZXNQaXRjaCk7CisgICAg
bG9uZyBsb2FkU3RhdGUoKSBjb25zdDsKKyAgICBmbG9hdCBtYXhUaW1lTG9hZGVkKCkgY29uc3Q7
CisKKyAgICB2b2lkIHBsYXkoKTsKKyAgICB2b2lkIHBhdXNlKCk7CisKKyAgICBmbG9hdCByYXRl
KCkgY29uc3Q7CisgICAgdm9pZCBzZXRSYXRlKGZsb2F0KTsKKworICAgIGZsb2F0IGR1cmF0aW9u
KCkgY29uc3Q7CisgICAgZmxvYXQgY3VycmVudFRpbWUoKSBjb25zdDsKKyAgICB2b2lkIHNldEN1
cnJlbnRUaW1lKGZsb2F0KSBjb25zdDsKKworICAgIHZvaWQgc2V0Vm9sdW1lKGZsb2F0KTsKKyAg
ICB2b2lkIHNldFByZXNlcnZlc1BpdGNoKGJvb2wpOworCisgICAgdW5zaWduZWQgZGF0YVNpemUo
KSBjb25zdDsKKworICAgIHZvaWQgZ2V0TmF0dXJhbFNpemUoaW50JiB3aWR0aCwgaW50JiBoZWln
aHQpOworICAgIHZvaWQgc2V0U2l6ZShpbnQgd2lkdGgsIGludCBoZWlnaHQpOworCisgICAgdm9p
ZCBzZXRWaXNpYmxlKGJvb2wpOworICAgIHZvaWQgcGFpbnQoSERDLCBpbnQgeCwgaW50IHkpOwor
ICAgIHZvaWQgZ2V0Q3VycmVudEZyYW1lSW5mbyh2b2lkKiYgYnVmZmVyLCB1bnNpZ25lZCYgYml0
c1BlclBpeGVsLCB1bnNpZ25lZCYgcm93Qnl0ZXMsIHVuc2lnbmVkJiB3aWR0aCwgdW5zaWduZWQm
IGhlaWdodCk7CisKKyAgICB2b2lkIGRpc2FibGVVbnN1cHBvcnRlZFRyYWNrcyh1bnNpZ25lZCYg
ZW5hYmxlZFRyYWNrQ291bnQsIHVuc2lnbmVkJiB0b3RhbFRyYWNrQ291bnQpOworICAgIHZvaWQg
c2V0RGlzYWJsZWQoYm9vbCk7CisKKyAgICBib29sIGhhc1ZpZGVvKCkgY29uc3Q7CisgICAgYm9v
bCBoYXNBdWRpbygpIGNvbnN0OworCisgICAgYm9vbCBoYXNDbG9zZWRDYXB0aW9ucygpIGNvbnN0
OworICAgIHZvaWQgc2V0Q2xvc2VkQ2FwdGlvbnNWaXNpYmxlKGJvb2wpOworCisgICAgc3RhdGlj
IHVuc2lnbmVkIGNvdW50U3VwcG9ydGVkVHlwZXMoKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRTdXBw
b3J0ZWRUeXBlKHVuc2lnbmVkIGluZGV4LCBjb25zdCBVQ2hhciomIHN0ciwgdW5zaWduZWQmIGxl
bik7CisKKyAgICAvLyBSZXR1cm5zIHRoZSBmdWxsLXNjcmVlbiB3aW5kb3cgY3JlYXRlZAorICAg
IEhXTkQgZW50ZXJGdWxsc2NyZWVuKFFUTW92aWVXaW5GdWxsc2NyZWVuQ2xpZW50Kik7CisgICAg
dm9pZCBleGl0RnVsbHNjcmVlbigpOworCitwcml2YXRlOgorICAgIHZvaWQgbG9hZChDRlVSTFJl
ZiwgYm9vbCBwcmVzZXJ2ZXNQaXRjaCk7CisgICAgc3RhdGljIExSRVNVTFQgZnVsbHNjcmVlbldu
ZFByb2MoSFdORCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0sIExQQVJBTSk7CisKKyAgICBRVE1vdmll
V2luUHJpdmF0ZSogbV9wcml2YXRlOworICAgIGJvb2wgbV9kaXNhYmxlZDsKKyAgICBmcmllbmQg
Y2xhc3MgUVRNb3ZpZVdpblByaXZhdGU7Cit9OworCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWVHV29ybGQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVE1vdmllR1dvcmxkLmgJKHJldmlzaW9uIDU4NTk2KQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRNb3ZpZUdXb3JsZC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yMywxMCArMjMsMTQgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5k
ZWYgUVRNb3ZpZVdpbl9oCi0jZGVmaW5lIFFUTW92aWVXaW5faAorI2lmbmRlZiBRVE1vdmllR1dv
cmxkX2gKKyNkZWZpbmUgUVRNb3ZpZUdXb3JsZF9oCiAKKworI2luY2x1ZGUgIlFUTW92aWUuaCIK
ICNpbmNsdWRlIDxVbmljb2RlLmg+CisjaW5jbHVkZSA8V1RGL1JlZkNvdW50ZWQuaD4KKyNpbmNs
dWRlIDxXVEYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d2luZG93cy5oPgogCiAjaWZkZWYgUVRNT1ZJ
RVdJTl9FWFBPUlRTCkBAIC0zNSw2MiArMzksMjMgQEAKICNkZWZpbmUgUVRNT1ZJRVdJTl9BUEkg
X19kZWNsc3BlYyhkbGxpbXBvcnQpCiAjZW5kaWYKIAotY2xhc3MgUVRNb3ZpZVdpbjsKLWNsYXNz
IFFUTW92aWVXaW5Qcml2YXRlOworY2xhc3MgUVRNb3ZpZUdXb3JsZDsKK2NsYXNzIFFUTW92aWVH
V29ybGRQcml2YXRlOwogCi1jbGFzcyBRVE1vdmllV2luQ2xpZW50IHsKK2NsYXNzIFFUTW92aWVH
V29ybGRDbGllbnQgewogcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBtb3ZpZUVuZGVkKFFUTW92
aWVXaW4qKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIG1vdmllTG9hZFN0YXRlQ2hhbmdlZChRVE1v
dmllV2luKikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBtb3ZpZVRpbWVDaGFuZ2VkKFFUTW92aWVX
aW4qKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIG1vdmllTmV3SW1hZ2VBdmFpbGFibGUoUVRNb3Zp
ZVdpbiopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbW92aWVOZXdJbWFnZUF2YWlsYWJsZShRVE1v
dmllR1dvcmxkKikgPSAwOwogfTsKIAotY2xhc3MgUVRNb3ZpZVdpbkZ1bGxzY3JlZW5DbGllbnQg
eworY2xhc3MgUVRNb3ZpZUdXb3JsZEZ1bGxzY3JlZW5DbGllbnQgewogcHVibGljOgogICAgIHZp
cnR1YWwgTFJFU1VMVCBmdWxsc2NyZWVuQ2xpZW50V25kUHJvYyhIV05ELCBVSU5UIG1lc3NhZ2Us
IFdQQVJBTSwgTFBBUkFNKSA9IDA7CiB9OwogCi1lbnVtIHsKLSAgICBRVE1vdmllTG9hZFN0YXRl
RXJyb3IgPSAtMUwsCi0gICAgUVRNb3ZpZUxvYWRTdGF0ZUxvYWRlZCAgPSAyMDAwTCwKLSAgICBR
VE1vdmllTG9hZFN0YXRlUGxheWFibGUgPSAxMDAwMEwsCi0gICAgUVRNb3ZpZUxvYWRTdGF0ZVBs
YXl0aHJvdWdoT0sgPSAyMDAwMEwsCi0gICAgUVRNb3ZpZUxvYWRTdGF0ZUNvbXBsZXRlID0gMTAw
MDAwTAotfTsKLQotdHlwZWRlZiBjb25zdCBzdHJ1Y3QgX19DRlVSTCAqIENGVVJMUmVmOwotCi1j
bGFzcyBRVE1PVklFV0lOX0FQSSBRVE1vdmllV2luIHsKK2NsYXNzIFFUTU9WSUVXSU5fQVBJIFFU
TW92aWVHV29ybGQgOiBwdWJsaWMgUmVmQ291bnRlZDxRVE1vdmllR1dvcmxkPiB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZVF1aWNrVGltZSgpOwotCi0gICAgdHlwZWRlZiB2
b2lkICgqU2V0VGFza1RpbWVyRGVsYXlGdW5jKShkb3VibGUpOwotICAgIHR5cGVkZWYgdm9pZCAo
KlN0b3BUYXNrVGltZXJGdW5jKSgpOwotICAgIHN0YXRpYyB2b2lkIHNldFRhc2tUaW1lckZ1bmNz
KFNldFRhc2tUaW1lckRlbGF5RnVuYywgU3RvcFRhc2tUaW1lckZ1bmMpOwotICAgIHN0YXRpYyB2
b2lkIHRhc2tUaW1lckZpcmVkKCk7Ci0KLSAgICBRVE1vdmllV2luKFFUTW92aWVXaW5DbGllbnQq
KTsKLSAgICB+UVRNb3ZpZVdpbigpOwotCi0gICAgdm9pZCBsb2FkKGNvbnN0IFVDaGFyKiB1cmws
IGludCBsZW4sIGJvb2wgcHJlc2VydmVzUGl0Y2gpOwotICAgIGxvbmcgbG9hZFN0YXRlKCkgY29u
c3Q7Ci0gICAgZmxvYXQgbWF4VGltZUxvYWRlZCgpIGNvbnN0OwotCi0gICAgdm9pZCBwbGF5KCk7
Ci0gICAgdm9pZCBwYXVzZSgpOwotCi0gICAgZmxvYXQgcmF0ZSgpIGNvbnN0OwotICAgIHZvaWQg
c2V0UmF0ZShmbG9hdCk7Ci0KLSAgICBmbG9hdCBkdXJhdGlvbigpIGNvbnN0OwotICAgIGZsb2F0
IGN1cnJlbnRUaW1lKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRDdXJyZW50VGltZShmbG9hdCkgY29u
c3Q7Ci0KLSAgICB2b2lkIHNldFZvbHVtZShmbG9hdCk7Ci0gICAgdm9pZCBzZXRQcmVzZXJ2ZXNQ
aXRjaChib29sKTsKLQotICAgIHVuc2lnbmVkIGRhdGFTaXplKCkgY29uc3Q7CisgICAgUVRNb3Zp
ZUdXb3JsZChRVE1vdmllR1dvcmxkQ2xpZW50Kik7CisgICAgflFUTW92aWVHV29ybGQoKTsKIAog
ICAgIHZvaWQgZ2V0TmF0dXJhbFNpemUoaW50JiB3aWR0aCwgaW50JiBoZWlnaHQpOwogICAgIHZv
aWQgc2V0U2l6ZShpbnQgd2lkdGgsIGludCBoZWlnaHQpOwpAQCAtOTksMjkgKzY0LDIxIEBAIHB1
YmxpYzoKICAgICB2b2lkIHBhaW50KEhEQywgaW50IHgsIGludCB5KTsKICAgICB2b2lkIGdldEN1
cnJlbnRGcmFtZUluZm8odm9pZComIGJ1ZmZlciwgdW5zaWduZWQmIGJpdHNQZXJQaXhlbCwgdW5z
aWduZWQmIHJvd0J5dGVzLCB1bnNpZ25lZCYgd2lkdGgsIHVuc2lnbmVkJiBoZWlnaHQpOwogCi0g
ICAgdm9pZCBkaXNhYmxlVW5zdXBwb3J0ZWRUcmFja3ModW5zaWduZWQmIGVuYWJsZWRUcmFja0Nv
dW50LCB1bnNpZ25lZCYgdG90YWxUcmFja0NvdW50KTsKICAgICB2b2lkIHNldERpc2FibGVkKGJv
b2wpOwotCi0gICAgYm9vbCBoYXNWaWRlbygpIGNvbnN0OwotICAgIGJvb2wgaGFzQXVkaW8oKSBj
b25zdDsKLQotICAgIGJvb2wgaGFzQ2xvc2VkQ2FwdGlvbnMoKSBjb25zdDsKLSAgICB2b2lkIHNl
dENsb3NlZENhcHRpb25zVmlzaWJsZShib29sKTsKLQotICAgIHN0YXRpYyB1bnNpZ25lZCBjb3Vu
dFN1cHBvcnRlZFR5cGVzKCk7Ci0gICAgc3RhdGljIHZvaWQgZ2V0U3VwcG9ydGVkVHlwZSh1bnNp
Z25lZCBpbmRleCwgY29uc3QgVUNoYXIqJiBzdHIsIHVuc2lnbmVkJiBsZW4pOworICAgIGJvb2wg
aXNEaXNhYmxlZCgpIGNvbnN0OwogCiAgICAgLy8gUmV0dXJucyB0aGUgZnVsbC1zY3JlZW4gd2lu
ZG93IGNyZWF0ZWQKLSAgICBIV05EIGVudGVyRnVsbHNjcmVlbihRVE1vdmllV2luRnVsbHNjcmVl
bkNsaWVudCopOworICAgIEhXTkQgZW50ZXJGdWxsc2NyZWVuKFFUTW92aWVHV29ybGRGdWxsc2Ny
ZWVuQ2xpZW50Kik7CiAgICAgdm9pZCBleGl0RnVsbHNjcmVlbigpOwogCisgICAgdm9pZCBzZXRN
b3ZpZShQYXNzUmVmUHRyPFFUTW92aWU+KTsKKyAgICBRVE1vdmllKiBtb3ZpZSgpIGNvbnN0Owor
CiBwcml2YXRlOgotICAgIHZvaWQgbG9hZChDRlVSTFJlZiwgYm9vbCBwcmVzZXJ2ZXNQaXRjaCk7
CiAgICAgc3RhdGljIExSRVNVTFQgZnVsbHNjcmVlblduZFByb2MoSFdORCwgVUlOVCBtZXNzYWdl
LCBXUEFSQU0sIExQQVJBTSk7CiAKLSAgICBRVE1vdmllV2luUHJpdmF0ZSogbV9wcml2YXRlOwot
ICAgIGJvb2wgbV9kaXNhYmxlZDsKLSAgICBmcmllbmQgY2xhc3MgUVRNb3ZpZVdpblByaXZhdGU7
CisgICAgUVRNb3ZpZUdXb3JsZFByaXZhdGUqIG1fcHJpdmF0ZTsKKyAgICBmcmllbmQgY2xhc3Mg
UVRNb3ZpZUdXb3JsZFByaXZhdGU7CiB9OwogCiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL1FUTW92aWVUYXNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9RVE1vdmllVGFzay5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVE1vdmllVGFzay5jcHAJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTAxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5LCAy
MDEwIEFwcGxlLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworI2luY2x1ZGUgImNv
bmZpZy5oIgorCisjaW5jbHVkZSAiUVRNb3ZpZVRhc2suaCIKKworLy8gUHV0IE1vdmllcy5oIGZp
cnN0IHNvIGJ1aWxkIGZhaWx1cmVzIGhlcmUgcG9pbnQgY2xlYXJseSB0byBRdWlja1RpbWUKKyNp
bmNsdWRlIDxNb3ZpZXMuaD4KKworI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisKK1FUTW92aWVU
YXNrOjpRVE1vdmllVGFzaygpIAorICAgIDogbV9zZXRUYXNrVGltZXJEZWxheSgwKQorICAgICwg
bV9zdG9wVGFza1RpbWVyKDApCit7Cit9CisKK1FUTW92aWVUYXNrOjp+UVRNb3ZpZVRhc2soKQor
eworfQorCitRVE1vdmllVGFzayogUVRNb3ZpZVRhc2s6OnNoYXJlZFRhc2soKQoreworICAgIHN0
YXRpYyBRVE1vdmllVGFzayogc19zaGFyZWRUYXNrID0gbmV3IFFUTW92aWVUYXNrKCk7CisgICAg
cmV0dXJuIHNfc2hhcmVkVGFzazsKK30KKwordm9pZCBRVE1vdmllVGFzazo6dXBkYXRlVGFza1Rp
bWVyKGRvdWJsZSBtYXhJbnRlcnZhbCwgZG91YmxlIG1pbkludGVydmFsKQoreworICAgIEFTU0VS
VChtX3NldFRhc2tUaW1lckRlbGF5KTsKKyAgICBpZiAoIW1fc2V0VGFza1RpbWVyRGVsYXkpCisg
ICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChtX3N0b3BUYXNrVGltZXIpOworICAgIGlmICgh
bV90YXNrTGlzdC5zaXplKCkgJiYgbV9zdG9wVGFza1RpbWVyKSB7CisgICAgICAgIG1fc3RvcFRh
c2tUaW1lcigpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGxvbmcgaW50ZXJ2
YWxJbk1TOworICAgIE9TU3RhdHVzIHN0YXR1cyA9IFFUR2V0VGltZVVudGlsTmV4dFRhc2soJmlu
dGVydmFsSW5NUywgMTAwMCk7CisgICAgZG91YmxlIGludGVydmFsID0gaW50ZXJ2YWxJbk1TIC8g
MTAwMC4wOworICAgIGlmIChpbnRlcnZhbCA8IG1pbkludGVydmFsKQorICAgICAgICBpbnRlcnZh
bCA9IG1pbkludGVydmFsOworICAgIGlmIChzdGF0dXMgIT0gbm9FcnIgJiYgaW50ZXJ2YWwgPiBt
YXhJbnRlcnZhbCkKKyAgICAgICAgaW50ZXJ2YWwgPSBtYXhJbnRlcnZhbDsKKyAgICBtX3NldFRh
c2tUaW1lckRlbGF5KGludGVydmFsKTsKK30KKwordm9pZCBRVE1vdmllVGFzazo6ZmlyZVRhc2tD
bGllbnRzKCkKK3sKKyAgICBmb3IgKEhhc2hTZXQ8UVRNb3ZpZVRhc2tDbGllbnQqPjo6aXRlcmF0
b3IgaSA9IG1fdGFza0xpc3QuYmVnaW4oKTsgaSAhPSBtX3Rhc2tMaXN0LmVuZCgpOyArK2kpCisg
ICAgICAgICgqaSktPnRhc2soKTsKK30KKwordm9pZCBRVE1vdmllVGFzazo6YWRkVGFza0NsaWVu
dChRVE1vdmllVGFza0NsaWVudCogY2xpZW50KSAKK3sKKyAgICBBU1NFUlQoY2xpZW50KTsKKyAg
ICBpZiAoIWNsaWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV90YXNrTGlzdC5hZGQoY2xp
ZW50KTsKK30KKwordm9pZCBRVE1vdmllVGFzazo6cmVtb3ZlVGFza0NsaWVudChRVE1vdmllVGFz
a0NsaWVudCogY2xpZW50KQoreworICAgIEFTU0VSVChjbGllbnQpOworICAgIGlmICghY2xpZW50
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Rhc2tMaXN0LnJlbW92ZShjbGllbnQpOworfQor
Cit2b2lkIFFUTW92aWVUYXNrOjpzZXRUYXNrVGltZXJGdW5jcyhTZXRUYXNrVGltZXJEZWxheUZ1
bmMgc2V0VGFza1RpbWVyRGVsYXksIFN0b3BUYXNrVGltZXJGdW5jIHN0b3BUYXNrVGltZXIpCit7
CisgICAgbV9zZXRUYXNrVGltZXJEZWxheSA9IHNldFRhc2tUaW1lckRlbGF5OworICAgIG1fc3Rv
cFRhc2tUaW1lciA9IHN0b3BUYXNrVGltZXI7Cit9CisKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL1FUTW92aWVUYXNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vUVRNb3ZpZVRhc2suaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWVUYXNrLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUs
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUVRNb3ZpZVRhc2tf
aAorI2RlZmluZSBRVE1vdmllVGFza19oCisKKyNpbmNsdWRlIDxXVEYvSGFzaFNldC5oPgorCisj
aWZkZWYgUVRNT1ZJRVdJTl9FWFBPUlRTCisjZGVmaW5lIFFUTU9WSUVXSU5fQVBJIF9fZGVjbHNw
ZWMoZGxsZXhwb3J0KQorI2Vsc2UKKyNkZWZpbmUgUVRNT1ZJRVdJTl9BUEkgX19kZWNsc3BlYyhk
bGxpbXBvcnQpCisjZW5kaWYKKworY2xhc3MgUVRNb3ZpZVRhc2tDbGllbnQgeworcHVibGljOgor
ICAgIHZpcnR1YWwgdm9pZCB0YXNrKCkgPSAwOworfTsKKwordHlwZWRlZiB2b2lkICgqU2V0VGFz
a1RpbWVyRGVsYXlGdW5jKShkb3VibGUpOwordHlwZWRlZiB2b2lkICgqU3RvcFRhc2tUaW1lckZ1
bmMpKCk7CisKK2NsYXNzIFFUTU9WSUVXSU5fQVBJIFFUTW92aWVUYXNrIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUVRNb3ZpZVRhc2sqIHNoYXJlZFRhc2soKTsKKworICAgIHZvaWQgYWRkVGFza0Ns
aWVudChRVE1vdmllVGFza0NsaWVudCogY2xpZW50KTsKKyAgICB2b2lkIHJlbW92ZVRhc2tDbGll
bnQoUVRNb3ZpZVRhc2tDbGllbnQqKTsKKyAgICB2b2lkIGZpcmVUYXNrQ2xpZW50cygpOworCisg
ICAgdm9pZCB1cGRhdGVUYXNrVGltZXIoZG91YmxlIG1heEludGVydmFsID0gMS4wLCBkb3VibGUg
bWluSW50ZXJ2YWwgPSAxLjAgLyAzMCk7CisgICAgdm9pZCBzZXRUYXNrVGltZXJGdW5jcyhTZXRU
YXNrVGltZXJEZWxheUZ1bmMgc2V0VGFza1RpbWVyRGVsYXksIFN0b3BUYXNrVGltZXJGdW5jIHN0
b3BUYXNrVGltZXIpOworCitwcm90ZWN0ZWQ6CisgICAgUVRNb3ZpZVRhc2soKTsKKyAgICB+UVRN
b3ZpZVRhc2soKTsKKworICAgIFNldFRhc2tUaW1lckRlbGF5RnVuYyBtX3NldFRhc2tUaW1lckRl
bGF5OworICAgIFN0b3BUYXNrVGltZXJGdW5jIG1fc3RvcFRhc2tUaW1lcjsKKyAgICBIYXNoU2V0
PFFUTW92aWVUYXNrQ2xpZW50Kj4gbV90YXNrTGlzdDsKKworcHJpdmF0ZToKKyAgICBRVE1vdmll
VGFzayhjb25zdCBRVE1vdmllVGFzayYpOworICAgIFFUTW92aWVUYXNrJiBvcGVyYXRvcj0oY29u
c3QgUVRNb3ZpZVRhc2smKTsKK307CisKKyNlbmRpZgo=
</data>
<flag name="review"
          id="39262"
          type_id="1"
          status="+"
          setter="eric.carlson"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55446</attachid>
            <date>2010-05-07 18:21:54 -0700</date>
            <delta_ts>2010-05-07 18:25:23 -0700</delta_ts>
            <desc>Part 7: WebKit: FullscreenVideoController and QTMovieGWorld</desc>
            <filename>7569713-FullscreenWebKit.patch</filename>
            <type>text/plain</type>
            <size>2511</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC93aW4vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vQ2hh
bmdlTG9nCShyZXZpc2lvbiA1ODc3OCkKKysrIFdlYktpdC93aW4vQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTAtMDUtMDcgIEplciBOb2JsZSAgPGplci5ub2Js
ZUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgU2FmYXJpIHBlZ3MgQ1BVIGFuZCBkcm9wcyB0b25zIG9mIGZyYW1lcyB1c2luZyBIVE1M
NSBWaW1lbyBwbGF5ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTM0MDA1CisgICAgICAgIAorICAgICAgICBRVE1vdmllIGlzIG5vdyBRVE1vdmllR1dv
cmxkLiAgCisgICAgICAgICogRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlci5jcHA6CisgICAgICAg
IChGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyOjptb3ZpZSk6CisgICAgICAgICogRnVsbHNjcmVl
blZpZGVvQ29udHJvbGxlci5oOgorCiAyMDEwLTA1LTAzICBBYmhpc2hlayBBcnlhICA8aW5mZXJu
b0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KSW5kZXg6
IFdlYktpdC93aW4vRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L3dpbi9GdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyLmNwcAkocmV2aXNpb24gNTg1OTYp
CisrKyBXZWJLaXQvd2luL0Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xOTIsOSArMTkyLDkgQEAgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlcjo6fkZ1bGxz
Y3JlZW5WaQogICAgICAgICBtb3ZpZSgpLT5leGl0RnVsbHNjcmVlbigpOwogfQogCi1RVE1vdmll
V2luKiBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyOjptb3ZpZSgpIGNvbnN0CitRVE1vdmllR1dv
cmxkKiBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyOjptb3ZpZSgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIG1fbWVkaWFFbGVtZW50ID8gcmVpbnRlcnByZXRfY2FzdDxRVE1vdmllV2luKj4obV9tZWRp
YUVsZW1lbnQtPnBsYXRmb3JtTWVkaWEoKS5xdE1vdmllKSA6IDA7CisgICAgcmV0dXJuIG1fbWVk
aWFFbGVtZW50ID8gcmVpbnRlcnByZXRfY2FzdDxRVE1vdmllR1dvcmxkKj4obV9tZWRpYUVsZW1l
bnQtPnBsYXRmb3JtTWVkaWEoKS5xdE1vdmllKSA6IDA7CiB9CiAKIHZvaWQgRnVsbHNjcmVlblZp
ZGVvQ29udHJvbGxlcjo6c2V0TWVkaWFFbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxl
bWVudCkKSW5kZXg6IFdlYktpdC93aW4vRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdC93aW4vRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlci5oCShyZXZpc2lv
biA1ODU5NikKKysrIFdlYktpdC93aW4vRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoVklERU8pCiAKLSNpbmNs
dWRlICJRVE1vdmllV2luLmgiCisjaW5jbHVkZSAiUVRNb3ZpZUdXb3JsZC5oIgogCiAjaW5jbHVk
ZSA8V2ViQ29yZS9IVE1MTWVkaWFFbGVtZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbWFnZS5o
PgpAQCAtOTksNyArOTksNyBAQCBwcml2YXRlOgogICAgIGludCBtX2RyYWdTdGFydE9mZnNldDsK
IH07CiAKLWNsYXNzIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXIgOiBRVE1vdmllV2luRnVsbHNj
cmVlbkNsaWVudCwgcHVibGljIE5vbmNvcHlhYmxlIHsKK2NsYXNzIEZ1bGxzY3JlZW5WaWRlb0Nv
bnRyb2xsZXIgOiBRVE1vdmllR1dvcmxkRnVsbHNjcmVlbkNsaWVudCwgcHVibGljIE5vbmNvcHlh
YmxlIHsKIHB1YmxpYzoKICAgICBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyKCk7CiAgICAgdmly
dHVhbCB+RnVsbHNjcmVlblZpZGVvQ29udHJvbGxlcigpOwpAQCAtMTExLDExICsxMTEsMTEgQEAg
cHVibGljOgogICAgIHZvaWQgZXhpdEZ1bGxzY3JlZW4oKTsKIAogcHJpdmF0ZToKLSAgICAvLyBR
VE1vdmllV2luRnVsbHNjcmVlbkNsaWVudAorICAgIC8vIFFUTW92aWVHV29ybGRGdWxsc2NyZWVu
Q2xpZW50CiAgICAgdmlydHVhbCBMUkVTVUxUIGZ1bGxzY3JlZW5DbGllbnRXbmRQcm9jKEhXTkQs
IFVJTlQgbWVzc2FnZSwgV1BBUkFNLCBMUEFSQU0pOwogCiAgICAgdm9pZCBlbnN1cmVXaW5kb3co
KTsKLSAgICBRVE1vdmllV2luKiBtb3ZpZSgpIGNvbnN0OworICAgIFFUTW92aWVHV29ybGQqIG1v
dmllKCkgY29uc3Q7CiAKICAgICBib29sIGNhblBsYXkoKSBjb25zdDsKICAgICB2b2lkIHBsYXko
KTsK
</data>
<flag name="review"
          id="39628"
          type_id="1"
          status="+"
          setter="adele"
    />
          </attachment>
      

    </bug>

</bugzilla>