<?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>77308</bug_id>
          
          <creation_ts>2012-01-29 17:57:27 -0800</creation_ts>
          <short_desc>[EFL] Enable WebGL with glx backend</short_desc>
          <delta_ts>2012-02-05 20:02:03 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit EFL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>77219</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="ChangSeok Oh">kevin.cs.oh</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>gyuyoung.kim</cc>
    
    <cc>igor.oliveira</cc>
    
    <cc>kbr</cc>
    
    <cc>lucas.de.marchi</cc>
    
    <cc>mrobinson</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>544809</commentid>
    <comment_count>0</comment_count>
    <who name="ChangSeok Oh">kevin.cs.oh</who>
    <bug_when>2012-01-29 17:57:27 -0800</bug_when>
    <thetext>This bug is for enabling WebGL with glx backend for WebKitEfl.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545111</commentid>
    <comment_count>1</comment_count>
      <attachid>124554</attachid>
    <who name="ChangSeok Oh">kevin.cs.oh</who>
    <bug_when>2012-01-30 08:23:57 -0800</bug_when>
    <thetext>Created attachment 124554
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545140</commentid>
    <comment_count>2</comment_count>
    <who name="Raphael Kubo da Costa (:rakuco)">rakuco</who>
    <bug_when>2012-01-30 08:59:15 -0800</bug_when>
    <thetext>Does this patch have any relation with the one in bug 62961?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545364</commentid>
    <comment_count>3</comment_count>
    <who name="Igor Trindade Oliveira">igor.oliveira</who>
    <bug_when>2012-01-30 13:31:25 -0800</bug_when>
    <thetext>you should remove fast/canvas/webgl from Skipped file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545771</commentid>
    <comment_count>4</comment_count>
    <who name="ChangSeok Oh">kevin.cs.oh</who>
    <bug_when>2012-01-30 21:28:19 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Does this patch have any relation with the one in bug 62961?

A little. I also checked the patch, but it looks too old and is not valid anymore.
If someone wants to implement WebGL with EVAS_GL backend like the patch, it&apos;s a better idea to add a new option to choose gl backend in my opinion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545960</commentid>
    <comment_count>5</comment_count>
    <who name="Raphael Kubo da Costa (:rakuco)">rakuco</who>
    <bug_when>2012-01-31 05:11:46 -0800</bug_when>
    <thetext>Does it mean Samsung (or anyone else, for that matter) is not working on that approach anymore and I can close that bug report?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546045</commentid>
    <comment_count>6</comment_count>
    <who name="ChangSeok Oh">kevin.cs.oh</who>
    <bug_when>2012-01-31 07:38:11 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; Does it mean Samsung (or anyone else, for that matter) is not working on that approach anymore and I can close that bug report?

No, it doesn&apos;t. Using evasgl is still a valid approach for WebGL and it could be one option to choose. I believe Samsung(or anyone else) is going to contribute it near soon. 
But on my side, current implementation of GraphicsContext3DEfl has something wrong. First of all, GraphicsContext3DInternal is not a valid class name. Second, OpenGL API wrapper is useless for supporting WebGL if we follow the way of other ports.
Anyway I think the patch for bug 62961 is needed to revise.
This patch is just an another option that we can choose to support WebGL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546088</commentid>
    <comment_count>7</comment_count>
    <who name="ChangSeok Oh">kevin.cs.oh</who>
    <bug_when>2012-01-31 08:35:58 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; you should remove fast/canvas/webgl from Skipped file.

Which file do you mean? In here, LayoutTests/platform/efl/Skipped?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546093</commentid>
    <comment_count>8</comment_count>
    <who name="Igor Trindade Oliveira">igor.oliveira</who>
    <bug_when>2012-01-31 08:42:07 -0800</bug_when>
    <thetext>yup
(In reply to comment #7)
&gt; (In reply to comment #3)
&gt; &gt; you should remove fast/canvas/webgl from Skipped file.
&gt; 
&gt; Which file do you mean? In here, LayoutTests/platform/efl/Skipped?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546107</commentid>
    <comment_count>9</comment_count>
    <who name="Raphael Kubo da Costa (:rakuco)">rakuco</who>
    <bug_when>2012-01-31 08:51:34 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; you should remove fast/canvas/webgl from Skipped file.

And please make sure the tests are passing :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546111</commentid>
    <comment_count>10</comment_count>
      <attachid>124747</attachid>
    <who name="ChangSeok Oh">kevin.cs.oh</who>
    <bug_when>2012-01-31 08:54:18 -0800</bug_when>
    <thetext>Created attachment 124747
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546119</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-31 08:57:53 -0800</bug_when>
    <thetext>Attachment 124747 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/update-webkit&apos;]&quot; exit_code: 9

Updating OpenSource
First, rewinding head to replay your work on top of it...
Applying: Fix compilation errors on build-webkit --debug --no-workers on mac.
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Auto-merging LayoutTests/ChangeLog
CONFLICT (content): Merge conflict in LayoutTests/ChangeLog
Auto-merging LayoutTests/platform/qt/Skipped
CONFLICT (content): Merge conflict in LayoutTests/platform/qt/Skipped
Auto-merging Source/WebCore/ChangeLog
CONFLICT (content): Merge conflict in Source/WebCore/ChangeLog
Failed to merge in the changes.
Patch failed at 0001 Fix compilation errors on build-webkit --debug --no-workers on mac.

When you have resolved this problem run &quot;git rebase --continue&quot;.
If you would prefer to skip this patch, instead run &quot;git rebase --skip&quot;.
To restore the original branch and stop rebasing run &quot;git rebase --abort&quot;.

rebase refs/remotes/origin/master: command returned error: 1

Died at Tools/Scripts/update-webkit line 164.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546152</commentid>
    <comment_count>12</comment_count>
      <attachid>124747</attachid>
    <who name="Raphael Kubo da Costa (:rakuco)">rakuco</who>
    <bug_when>2012-01-31 09:17:30 -0800</bug_when>
    <thetext>Comment on attachment 124747
Patch

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

You should send a test version of the patch setting ENABLE_WEBGL to ON so we can check the build passes.

&gt; Source/WebCore/CMakeLists.txt:2209
&gt; +        platform/graphics/GraphicsContext3D.cpp

Why? It&apos;s not sorted anymore.

&gt; Source/WebKit/efl/ewk/ewk_view.cpp:651
&gt; +    priv-&gt;pageSettings-&gt;setWebGLEnabled(true);

What happens if you pass true here but have ENABLE_WEBGL set to OFF (the default configuration)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546706</commentid>
    <comment_count>13</comment_count>
      <attachid>124747</attachid>
    <who name="ChangSeok Oh">kevin.cs.oh</who>
    <bug_when>2012-01-31 18:18:39 -0800</bug_when>
    <thetext>Comment on attachment 124747
Patch

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

Thank you for review. :)
AFAIK, WebGL has remained experimental. We usually disable that kind of feature as the default configuration. Same situation in GTK, MAC port and build-webkit.
In addition, above style alarm looks false... :p

&gt;&gt; Source/WebCore/CMakeLists.txt:2209
&gt;&gt; +        platform/graphics/GraphicsContext3D.cpp
&gt; 
&gt; Why? It&apos;s not sorted anymore.

Sorry, I couldn&apos;t get the point. &apos;p&apos; &lt; &apos;r&apos;, right?

&gt;&gt; Source/WebKit/efl/ewk/ewk_view.cpp:651
&gt;&gt; +    priv-&gt;pageSettings-&gt;setWebGLEnabled(true);
&gt; 
&gt; What happens if you pass true here but have ENABLE_WEBGL set to OFF (the default configuration)?

In that case, we can&apos;t create webgl context, so that we wouldn&apos;t see any webgl image.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547869</commentid>
    <comment_count>14</comment_count>
      <attachid>124747</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-02-02 08:02:54 -0800</bug_when>
    <thetext>Comment on attachment 124747
Patch

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

Just a couple tiny style nits. Please fix them before landing the patch.

&gt; Source/WebCore/platform/graphics/efl/DrawingBufferEfl.cpp:40
&gt; +DrawingBuffer::DrawingBuffer(GraphicsContext3D* context,
&gt; +                             const IntSize&amp; size,
&gt; +                             bool multisampleExtensionSupported,
&gt; +                             bool packedDepthStencilExtensionSupported,
&gt; +                             bool separateBackingTexture)

In WebKit we usually keep parameter lists on one line.

&gt; Source/WebCore/platform/graphics/efl/DrawingBufferEfl.cpp:66
&gt; +    // create a texture to render into

This comment should start with a capital letter and end with a period.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547890</commentid>
    <comment_count>15</comment_count>
      <attachid>124747</attachid>
    <who name="Raphael Kubo da Costa (:rakuco)">rakuco</who>
    <bug_when>2012-02-02 08:47:21 -0800</bug_when>
    <thetext>Comment on attachment 124747
Patch

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

&gt;&gt;&gt; Source/WebCore/CMakeLists.txt:2209
&gt;&gt;&gt; +        platform/graphics/GraphicsContext3D.cpp
&gt;&gt; 
&gt;&gt; Why? It&apos;s not sorted anymore.
&gt; 
&gt; Sorry, I couldn&apos;t get the point. &apos;p&apos; &lt; &apos;r&apos;, right?

You need to take casing into account.

&gt;&gt;&gt; Source/WebKit/efl/ewk/ewk_view.cpp:651
&gt;&gt;&gt; +    priv-&gt;pageSettings-&gt;setWebGLEnabled(true);
&gt;&gt; 
&gt;&gt; What happens if you pass true here but have ENABLE_WEBGL set to OFF (the default configuration)?
&gt; 
&gt; In that case, we can&apos;t create webgl context, so that we wouldn&apos;t see any webgl image.

So enabling WebGL in the source code even if WebGL is disabled in the build won&apos;t do any harm?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547892</commentid>
    <comment_count>16</comment_count>
    <who name="Raphael Kubo da Costa (:rakuco)">rakuco</who>
    <bug_when>2012-02-02 08:48:18 -0800</bug_when>
    <thetext>Let me repeat that you should send a test version of the patch setting ENABLE_WEBGL to ON so we can check the build passes. By the way, have you checked that the layout tests you have enabled pass?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547916</commentid>
    <comment_count>17</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-02-02 09:12:52 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; Let me repeat that you should send a test version of the patch setting ENABLE_WEBGL to ON so we can check the build passes. By the way, have you checked that the layout tests you have enabled pass?

If the feature is disabled during build, the test script should be smart enough to not run the tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547925</commentid>
    <comment_count>18</comment_count>
    <who name="Raphael Kubo da Costa (:rakuco)">rakuco</who>
    <bug_when>2012-02-02 09:25:51 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; If the feature is disabled during build, the test script should be smart enough to not run the tests.

I meant running the tests locally (there&apos;s no bot running EFL layout tests yet).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547956</commentid>
    <comment_count>19</comment_count>
    <who name="ChangSeok Oh">kevin.cs.oh</who>
    <bug_when>2012-02-02 10:07:28 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; Let me repeat that you should send a test version of the patch setting ENABLE_WEBGL to ON so we can check the build passes. 

Hm.. I&apos;m a little confused. Do you want that I send you the patch setting WEBGL ON personally and leave WEBGL OFF as the default? Or we should set ENABLE_WEBGL ON as the default though the feature is experimental?

&gt; By the way, have you checked that the layout tests you have enabled pass?
No. I haven&apos;t yet. Let me do it after updating the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548395</commentid>
    <comment_count>20</comment_count>
    <who name="Raphael Kubo da Costa (:rakuco)">rakuco</who>
    <bug_when>2012-02-02 20:24:30 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; Hm.. I&apos;m a little confused. Do you want that I send you the patch setting WEBGL ON personally and leave WEBGL OFF as the default? Or we should set ENABLE_WEBGL ON as the default though the feature is experimental?

The former -- just send the patch with the default toggled _without_ r? and cq? and manually ask the EWS bots to run, so that the EFL bot tries to build the patch with the enabled code path and we can check it works fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548423</commentid>
    <comment_count>21</comment_count>
      <attachid>124747</attachid>
    <who name="ChangSeok Oh">kevin.cs.oh</who>
    <bug_when>2012-02-02 21:24:26 -0800</bug_when>
    <thetext>Comment on attachment 124747
Patch

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

Thank you all.

&gt;&gt;&gt;&gt; Source/WebCore/CMakeLists.txt:2209
&gt;&gt;&gt;&gt; +        platform/graphics/GraphicsContext3D.cpp
&gt;&gt;&gt; 
&gt;&gt;&gt; Why? It&apos;s not sorted anymore.
&gt;&gt; 
&gt;&gt; Sorry, I couldn&apos;t get the point. &apos;p&apos; &lt; &apos;r&apos;, right?
&gt; 
&gt; You need to take casing into account.

Excuse me, Could you tell me in detail? Do you want my explanation why I sorted files to build in ChangeLog? or Want to relocate GraphicsContext3D.cpp before DrawingBuffer.cpp?

&gt;&gt; Source/WebCore/platform/graphics/efl/DrawingBufferEfl.cpp:40
&gt;&gt; +                             bool separateBackingTexture)
&gt; 
&gt; In WebKit we usually keep parameter lists on one line.

Done.
But if you think DrawingBufferGtk.cpp is also needed to modify like this, let me know. :)

&gt;&gt; Source/WebCore/platform/graphics/efl/DrawingBufferEfl.cpp:66
&gt;&gt; +    // create a texture to render into
&gt; 
&gt; This comment should start with a capital letter and end with a period.

ditto.

&gt;&gt;&gt;&gt; Source/WebKit/efl/ewk/ewk_view.cpp:651
&gt;&gt;&gt;&gt; +    priv-&gt;pageSettings-&gt;setWebGLEnabled(true);
&gt;&gt;&gt; 
&gt;&gt;&gt; What happens if you pass true here but have ENABLE_WEBGL set to OFF (the default configuration)?
&gt;&gt; 
&gt;&gt; In that case, we can&apos;t create webgl context, so that we wouldn&apos;t see any webgl image.
&gt; 
&gt; So enabling WebGL in the source code even if WebGL is disabled in the build won&apos;t do any harm?

Right. No problem to build and run.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548450</commentid>
    <comment_count>22</comment_count>
    <who name="ChangSeok Oh">kevin.cs.oh</who>
    <bug_when>2012-02-02 22:18:39 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; (In reply to comment #16)
&gt; &gt; Let me repeat that you should send a test version of the patch setting ENABLE_WEBGL to ON so we can check the build passes. 
&gt; 
&gt; Hm.. I&apos;m a little confused. Do you want that I send you the patch setting WEBGL ON personally and leave WEBGL OFF as the default? Or we should set ENABLE_WEBGL ON as the default though the feature is experimental?
&gt; 
&gt; &gt; By the way, have you checked that the layout tests you have enabled pass?
&gt; No. I haven&apos;t yet. Let me do it after updating the patch.

I&apos;ve run DRT locally, but nothing special regarding webgl test cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549308</commentid>
    <comment_count>23</comment_count>
    <who name="Raphael Kubo da Costa (:rakuco)">rakuco</who>
    <bug_when>2012-02-03 18:48:32 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; &gt;&gt; Sorry, I couldn&apos;t get the point. &apos;p&apos; &lt; &apos;r&apos;, right?
&gt; &gt; 
&gt; &gt; You need to take casing into account.
&gt; 
&gt; Excuse me, Could you tell me in detail? Do you want my explanation why I sorted files to build in ChangeLog? or Want to relocate GraphicsContext3D.cpp before DrawingBuffer.cpp?

You just need to move GraphicsContext3D.cpp back to its original position in CMakeLists.txt: &apos;p&apos; &lt; &apos;r&apos;, but &apos;G&apos; &lt; &apos;g&apos;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549310</commentid>
    <comment_count>24</comment_count>
    <who name="Raphael Kubo da Costa (:rakuco)">rakuco</who>
    <bug_when>2012-02-03 18:49:39 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; I&apos;ve run DRT locally, but nothing special regarding webgl test cases.

Do you mean the webgl tests you have removed from the skipped list are all passing? If so, OK from my side.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549381</commentid>
    <comment_count>25</comment_count>
      <attachid>125482</attachid>
    <who name="ChangSeok Oh">kevin.cs.oh</who>
    <bug_when>2012-02-03 23:48:11 -0800</bug_when>
    <thetext>Created attachment 125482
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549419</commentid>
    <comment_count>26</comment_count>
      <attachid>125488</attachid>
    <who name="ChangSeok Oh">kevin.cs.oh</who>
    <bug_when>2012-02-04 02:32:14 -0800</bug_when>
    <thetext>Created attachment 125488
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549420</commentid>
    <comment_count>27</comment_count>
    <who name="ChangSeok Oh">kevin.cs.oh</who>
    <bug_when>2012-02-04 02:40:24 -0800</bug_when>
    <thetext>(In reply to comment #23)
&gt; (In reply to comment #21)
&gt; &gt; &gt;&gt; Sorry, I couldn&apos;t get the point. &apos;p&apos; &lt; &apos;r&apos;, right?
&gt; &gt; &gt; 
&gt; &gt; &gt; You need to take casing into account.
&gt; &gt; 
&gt; &gt; Excuse me, Could you tell me in detail? Do you want my explanation why I sorted files to build in ChangeLog? or Want to relocate GraphicsContext3D.cpp before DrawingBuffer.cpp?
&gt; 
&gt; You just need to move GraphicsContext3D.cpp back to its original position in CMakeLists.txt: &apos;p&apos; &lt; &apos;r&apos;, but &apos;G&apos; &lt; &apos;g&apos;.

O.K. I see. I was confused, since following lines in OptionsEfl.cmake. I have thought we don&apos;t care of uppercase/lowcase.
&gt;html/MediaFragmentURIParser.cpp
&gt;html/shadow/MediaControlElements.cpp
&gt;html/TimeRanges.cpp

 I also fixed it. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549670</commentid>
    <comment_count>28</comment_count>
      <attachid>125488</attachid>
    <who name="Raphael Kubo da Costa (:rakuco)">rakuco</who>
    <bug_when>2012-02-05 18:40:50 -0800</bug_when>
    <thetext>Comment on attachment 125488
Patch

Assuming all the raised issues have been fixed, cq+&apos;ing the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549687</commentid>
    <comment_count>29</comment_count>
      <attachid>125488</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-05 20:01:56 -0800</bug_when>
    <thetext>Comment on attachment 125488
Patch

Clearing flags on attachment: 125488

Committed r106772: &lt;http://trac.webkit.org/changeset/106772&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549688</commentid>
    <comment_count>30</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-05 20:02:03 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124554</attachid>
            <date>2012-01-30 08:23:57 -0800</date>
            <delta_ts>2012-01-31 08:54:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77308-20120131012354.patch</filename>
            <type>text/plain</type>
            <size>51929</size>
            <attacher name="ChangSeok Oh">kevin.cs.oh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2MjQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGY3ODFiNzFmMWQ3OWE4
Yjg0MDBiMzM4ZDk2ZWJhYzQ1ZWFkNTljZC4uNmI1MGZjNDBiZmEwYmZjN2FkZTc2MmUxNzAxZDA3
Y2I2NWY4Zjg0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDEyLTAxLTMwICBDaGFu
Z1Nlb2sgT2ggIDxzaGl2YW1pZG93QGdtYWlsLmNvbT4KKworICAgICAgICBbRUZMXSBFbmFibGUg
V2ViR0wgd2l0aCBnbHggYmFja2VuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NzczMDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBJbXBsZW1lbnRlZCBXZWJHTCBmZWF0dXJlIGZvciBFRkwgcG9ydC4gVGhl
IHdheSBpcyB2ZXJ5IHNpbWlsYXIgdG8gdGhlIG9uZSBvZiBHVEsgcG9ydC4KKworICAgICAgICBO
byBuZXcgdGVzdHMgcmVxdWlyZWQuIFdlIGNhbiB2ZXJpZnkgdGhpcyBmZWF0dXJlIHdpdGggdGhl
IGV4aXN0aW5nIHRlc3QgY2FzZXMuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDogUmV2aXNl
ZCBjb21tb24gZmlsZXMgcmVxdWlyZWQgZm9yIFdlYkdMLgorICAgICAgICAqIFBsYXRmb3JtRWZs
LmNtYWtlOiBBZGRlZCBFRkwgc3BlY2lmaWMgZmlsZXMuCisgICAgICAgICogaHRtbC9IVE1MQ2Fu
dmFzRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6Z2V0
Q29udGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2Uu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGxh
dGZvcm1UZXh0dXJlKToKKyAgICAgICAgKEdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRzSW50b0NhbnZhc0J1
ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0RyYXdpbmdCdWZmZXJFZmwu
Y3BwOiBDb3BpZWQgZnJvbSBHVEsgcG9ydC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6RHJhd2luZ0J1ZmZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpEcmF3aW5nQnVmZmVyOjp+RHJhd2luZ0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3
aW5nQnVmZmVyOjpwbGF0Zm9ybUNvbG9yQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdp
bmdCdWZmZXI6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNERWZsLmNwcDogQWxtb3N0IHNhbWUg
d2l0aCBHcmFwaGljc0NvbnRleHQzREd0ay5jcHAuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6fkdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjptYWtlQ29udGV4dEN1cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OmlzR0xFUzJDb21wbGlhbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RXh0ZW5zaW9uczNET3BlbkdMOjpjcmVhdGVWZXJ0ZXhBcnJheU9FUyk6CisgICAgICAgIChXZWJD
b3JlOjpFeHRlbnNpb25zM0RPcGVuR0w6OmRlbGV0ZVZlcnRleEFycmF5T0VTKToKKyAgICAgICAg
KFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9wZW5HTDo6aXNWZXJ0ZXhBcnJheU9FUyk6CisgICAgICAg
IChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheU9FUyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNw
cDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RP
cGVuR0xDb21tb24uY3BwOgorCiAyMDEyLTAxLTMwICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNn
YXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLiBGaXggbWFrZSBkaXN0Y2hl
Y2suCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0L2VmbC9DaGFuZ2VMb2cKaW5kZXggODhkM2FlOWE0ZjQyODhiZGVlMTYwZmUwYzY3NjYxYWRh
MDMwNTIxNy4uY2Q2OTBkNjMzZDQ0ODNmMmMzMjJiMWJkY2Y1MWEwYWMyZWRjMDcyOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZs
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEyLTAxLTMwICBDaGFuZ1Nlb2sgT2ggIDxz
aGl2YW1pZG93QGdtYWlsLmNvbT4KKworICAgICAgICBbRUZMXSBFbmFibGUgV2ViR0wgd2l0aCBn
bHggYmFja2VuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NzczMDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBY3RpdmF0ZWQgV2ViR0wgZmVhdHVyZS4KKworICAgICAgICAqIGV3ay9ld2tfdmlldy5jcHA6
CisgICAgICAgIChfZXdrX3ZpZXdfcHJpdl9uZXcpOgorCiAyMDEyLTAxLTI2ICBUb21hc3ogTW9y
YXdza2kgIDx0Lm1vcmF3c2tpQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFtFRkxdIEFkZGVkIG1p
c3NpbmcgTkVUU0NBUEVfUExVR0lOX0FQSSBtYWNyby4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXgg
ZWZiZjlmNjg0Mjk3MGY2ZDUxODc4YTQ0NWRlMDVjMGU4YmI0YzNlOS4uMmI4Y2FkMWM4OWY0NTBj
YWFkNmU1MmU5YzZiYWQxOTc4YTkwOTZlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01h
a2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTIxMzgs
MjEgKzIxMzgsMjcgQEAgSUYgKEVOQUJMRV9XRUJHTCkKICAgICAgICAgJHtERVJJVkVEX1NPVVJD
RVNfV0VCQ09SRV9ESVJ9L2dsc2xhbmcuY3BwCiAgICAgICAgICR7REVSSVZFRF9TT1VSQ0VTX1dF
QkNPUkVfRElSfS9nbHNsYW5nX3RhYi5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5H
TEUvc3JjL2NvbXBpbGVyL0NvZGVHZW5HTFNMLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElS
fS9BTkdMRS9zcmMvY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwCisgICAgICAg
ICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9Db2RlR2VuR0xTTC5jcHAKICAg
ICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0NvbXBpbGVyLmNwcAog
ICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvZGVidWcuY3BwCisg
ICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9EZXRlY3RSZWN1cnNp
b24uY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9Gb3JM
b29wVW5yb2xsLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGls
ZXIvSW5mb1NpbmsuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21w
aWxlci9Jbml0aWFsaXplLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMv
Y29tcGlsZXIvSW5pdGlhbGl6ZURsbC5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5H
TEUvc3JjL2NvbXBpbGVyL0ludGVybWVkaWF0ZS5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJ
Un0vQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybU91dC5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZ
X0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybVRyYXZlcnNlLmNwcAorICAgICAgICAke1RI
SVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3Bw
CiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9vc3NvdXJjZV9w
b3NpeC5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL091
dHB1dEVTU0wuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxl
ci9PdXRwdXRHTFNMLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29t
cGlsZXIvT3V0cHV0R0xTTEJhc2UuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xF
L3NyYy9jb21waWxlci9PdXRwdXRITFNMLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9B
TkdMRS9zcmMvY29tcGlsZXIvcGFyc2VDb25zdC5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJ
Un0vQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVyLmNwcAogICAgICAgICAke1RISVJEUEFS
VFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvUG9vbEFsbG9jLmNwcAotICAgICAgICAke1RISVJE
UEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yCiAgICAgICAgICR7VEhJ
UkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvYXRvbS5jCiAgICAg
ICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3Bw
LmMKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9jcHBzdHJ1Y3QuYwpAQCAtMjE2NiwxMyArMjE3MiwxMyBAQCBJRiAoRU5BQkxFX1dFQkdM
KQogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvU2hhZGVyTGFu
Zy5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1N5bWJv
bFRhYmxlLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIv
VmVyc2lvbkdMU0wuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21w
aWxlci9UcmFuc2xhdG9yRVNTTC5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUv
c3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JHTFNMLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElS
fS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckhMU0wuY3BwCiAgICAgICAgICR7VEhJUkRQ
QVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTZWxlY3QuY3BwCiAgICAgICAgICR7
VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci91dGlsLmNwcAogICAgICAgICAke1RI
SVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAK
ICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1ZhcmlhYmxlSW5m
by5jcHAKLQogICAgICAgICBodG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5jcHAKICAgICAgICAgaHRt
bC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZXMuY3BwCiAgICAgICAgIGh0bWwvY2FudmFz
L1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuY3BwCkBAIC0yMTk3LDExICsyMjAzLDkgQEAgSUYgKEVO
QUJMRV9XRUJHTCkKICAgICAgICAgaHRtbC9jYW52YXMvT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5j
cHAKICAgICAgICAgaHRtbC9jYW52YXMvT0VTVGV4dHVyZUZsb2F0LmNwcAogICAgICAgICBodG1s
L2NhbnZhcy9PRVNWZXJ0ZXhBcnJheU9iamVjdC5jcHAKLQogICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9BTkdMRVdlYktpdEJyaWRnZS5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0M0QuY3BwCi0gICAgICAgIAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9n
cHUvRHJhd2luZ0J1ZmZlci5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0M0QuY3BwCiAgICAgKQogICAgIExJU1QoQVBQRU5EIFdlYkNvcmVfSURMX0ZJTEVTCiAg
ICAgICAgIGh0bWwvY2FudmFzL09FU1N0YW5kYXJkRGVyaXZhdGl2ZXMuaWRsCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtRWZsLmNtYWtlCmluZGV4IDFiMmUxZTQwNjUwNTJkYTM2NTMzNzQ0NGRkMjcwM2E1ODRiODE1
ZGEuLjRjODc3YWUwZTE1Mzg2ZmUzNTQxYWFmMmY5ZmViOGY0NTk2ZjhhYTMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1Bs
YXRmb3JtRWZsLmNtYWtlCkBAIC0yODEsNyArMjgxLDYgQEAgSUYgKEVOQUJMRV9WSURFTykKICAg
KQogRU5ESUYgKCkKIAotCiBJRiAoRU5BQkxFX0dMSUJfU1VQUE9SVCkKICAgTElTVChBUFBFTkQg
V2ViQ29yZV9MSUJSQVJJRVMKICAgICAke0dsaWJfTElCUkFSSUVTfQpAQCAtMjk0LDEwICsyOTMs
MjMgQEAgRU5ESUYgKCkKIElGIChFTkFCTEVfV0VCR0wpCiAgIExJU1QoQVBQRU5EIFdlYkNvcmVf
SU5DTFVERV9ESVJFQ1RPUklFUwogICAgICR7T1BFTkdMX0lOQ0xVREVfRElSfQorICAgICIke1dF
QkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlybyIKKyAgICAiJHtXRUJDT1JFX0RJUn0v
cGxhdGZvcm0vZ3JhcGhpY3MvZ2x4IgorICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wiCiAgICkKICAgTElTVChBUFBFTkQgV2ViQ29yZV9MSUJSQVJJRVMKICAgICAk
e09QRU5HTF9nbF9MSUJSQVJZfQogICApCisgIExJU1QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwor
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwCisg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vT3BlbkdMU2hpbXMuY3BwCisgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvZWZsL0RyYXdpbmdCdWZmZXJFZmwuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
ZWZsL0dyYXBoaWNzQ29udGV4dDNERWZsLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dseC9H
cmFwaGljc0NvbnRleHQzRFByaXZhdGUuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0V4dGVuc2lvbnMzRE9wZW5HTC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3Jh
cGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dy
YXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcAorICApCiBFTkRJRiAoKQogCiBJRiAoV1RG
X1VTRV9TT1VQKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxl
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAppbmRl
eCA2ODFmYjkzY2E4NGJmNTdhMmRjNmU5MjEzYWZjMTI4NDY3MDZhYzI5Li44MzkwMWI0MjQzNGRl
MGRkYjQyZjc2YjM3ZDlhODZjYzkxYjg0MGU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxD
YW52YXNFbGVtZW50LmNwcApAQCAtMTc3LDcgKzE3Nyw3IEBAIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQqIEhUTUxDYW52YXNFbGVtZW50OjpnZXRDb250ZXh0KGNvbnN0IFN0cmluZyYgdHlwZSwgQ2Fu
dmFzCiAjaWYgRU5BQkxFKFdFQkdMKSAgICAKICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1
bWVudCgpLT5zZXR0aW5ncygpOwogICAgIGlmIChzZXR0aW5ncyAmJiBzZXR0aW5ncy0+d2ViR0xF
bmFibGVkKCkKLSNpZiAhUExBVEZPUk0oQ0hST01JVU0pICYmICFQTEFURk9STShHVEspCisjaWYg
IVBMQVRGT1JNKENIUk9NSVVNKSAmJiAhUExBVEZPUk0oR1RLKSAmJiAhUExBVEZPUk0oRUZMKQog
ICAgICAgICAmJiBzZXR0aW5ncy0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQoKQogI2Vu
ZGlmCiAgICAgICAgICkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0FOR0xFV2ViS2l0QnJpZGdlLmgKaW5kZXggMGY0YmY3ZDAwNjZhYzg0MjhkODUzNzhkMGEx
MDk4OTRhOTAzZWQwYS4uYzYzOGJjMGZjM2NkNjEzYWIwYjNjYmUwYjAyMjY4MWVkMzczZGE0MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRC
cmlkZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9BTkdMRVdlYktp
dEJyaWRnZS5oCkBAIC0zMSw3ICszMSw3IEBACiAKICNpZiBQTEFURk9STShRVCkKICNpbmNsdWRl
ICJBTkdMRS9pbmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5oIgotI2VsaWYgIVBMQVRGT1JNKEdU
SykKKyNlbGlmICFQTEFURk9STShHVEspICYmICFQTEFURk9STShFRkwpCiAjaW5jbHVkZSAiQU5H
TEUvU2hhZGVyTGFuZy5oIgogI2Vsc2UKICNpbmNsdWRlICJTaGFkZXJMYW5nLmgiCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaApp
bmRleCBkZmViYmJhOWIwMmQ4NzI2YzMwMGYzMTk3ZGRjMTk5YjI0OWU5OTM1Li4wNzdkZjJhODU0
Y2M2YmY3ZjNkZWZiYjE1YWYzOTMzNDk5YzM4NzJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKQEAgLTQzLDcgKzQzLDcg
QEAKICN1bmRlZiBWRVJTSU9OCiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZP
Uk0oR1RLKSB8fCBQTEFURk9STShRVCkKKyNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKEdU
SykgfHwgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEVGTCkKICNpbmNsdWRlICJBTkdMRVdlYktp
dEJyaWRnZS5oIgogI2VuZGlmCiAKQEAgLTU3LDcgKzU3LDcgQEAgUVRfQkVHSU5fTkFNRVNQQUNF
CiBjbGFzcyBRUGFpbnRlcjsKIGNsYXNzIFFSZWN0OwogUVRfRU5EX05BTUVTUEFDRQotI2VsaWYg
UExBVEZPUk0oR1RLKQorI2VsaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShFRkwpCiB0eXBl
ZGVmIHVuc2lnbmVkIGludCBHTHVpbnQ7CiAjZW5kaWYKIApAQCAtODMsNyArODMsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0OwogY2xhc3MgRHJh
d2luZ0J1ZmZlcjsKIGNsYXNzIEV4dGVuc2lvbnMzRDsKLSNpZiBQTEFURk9STShNQUMpIHx8IFBM
QVRGT1JNKEdUSykgfHwgUExBVEZPUk0oUVQpCisjaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9S
TShHVEspIHx8IFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShFRkwpCiBjbGFzcyBFeHRlbnNpb25z
M0RPcGVuR0w7CiAjZW5kaWYKICNpZiBQTEFURk9STShRVCkKQEAgLTQ4Niw2ICs0ODYsNyBAQCBw
dWJsaWM6CiAjZW5kaWYKICNlbGlmIFBMQVRGT1JNKEVGTCkKICAgICBQbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dDNEIHBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdDsKKyAgICBQbGF0Zm9y
bTNET2JqZWN0IHBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZTsgfQog
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICBQbGF0Zm9ybUxheWVyKiBwbGF0
Zm9ybUxheWVyKCkgY29uc3Q7CiAjZW5kaWYKQEAgLTQ5OCw3ICs0OTksNyBAQCBwdWJsaWM6CiAj
ZW5kaWYKICAgICBib29sIG1ha2VDb250ZXh0Q3VycmVudCgpOwogCi0jaWYgUExBVEZPUk0oTUFD
KSB8fCBQTEFURk9STShDSFJPTUlVTSkgfHwgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShRVCkK
KyNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKENIUk9NSVVNKSB8fCBQTEFURk9STShHVEsp
IHx8IFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShFRkwpCiAgICAgLy8gV2l0aCBtdWx0aXNhbXBs
aW5nIG9uLCBibGl0IGZyb20gbXVsdGlzYW1wbGVGQk8gdG8gcmVndWxhciBGQk8uCiAgICAgdm9p
ZCBwcmVwYXJlVGV4dHVyZSgpOwogI2VuZGlmCkBAIC03NzcsNyArNzc4LDcgQEAgcHVibGljOgog
I2lmIFVTRShDRykKICAgICBzdGF0aWMgdm9pZCBwYWludFRvQ2FudmFzKGNvbnN0IHVuc2lnbmVk
IGNoYXIqIGltYWdlUGl4ZWxzLCBpbnQgaW1hZ2VXaWR0aCwgaW50IGltYWdlSGVpZ2h0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNhbnZhc1dpZHRoLCBpbnQgY2FudmFzSGVp
Z2h0LCBDR0NvbnRleHRSZWYpOwotI2VsaWYgUExBVEZPUk0oR1RLKQorI2VsaWYgUExBVEZPUk0o
R1RLKSB8fCBQTEFURk9STShFRkwpCiAgICAgdm9pZCBwYWludFRvQ2FudmFzKGNvbnN0IHVuc2ln
bmVkIGNoYXIqIGltYWdlUGl4ZWxzLCBpbnQgaW1hZ2VXaWR0aCwgaW50IGltYWdlSGVpZ2h0LAog
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2FudmFzV2lkdGgsIGludCBjYW52YXNIZWlnaHQs
IFBsYXRmb3JtQ29udGV4dENhaXJvKiBjb250ZXh0KTsKICNlbmRpZgpAQCAtNzk2LDYgKzc5Nyw4
IEBAIHB1YmxpYzoKICAgICBib29sIHBhaW50c0ludG9DYW52YXNCdWZmZXIoKSBjb25zdDsKICNl
bGlmIFBMQVRGT1JNKEdUSykKICAgICBib29sIHBhaW50c0ludG9DYW52YXNCdWZmZXIoKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9CisjZWxpZiBQTEFURk9STShFRkwpCisgICAgYm9vbCBwYWludHNJ
bnRvQ2FudmFzQnVmZmVyKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogI2Vsc2UKICAgICBib29s
IHBhaW50c0ludG9DYW52YXNCdWZmZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogI2VuZGlm
CkBAIC04ODYsNyArODg5LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBBbHBoYU9w
IGFscGhhT3AsCiAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGRlc3RpbmF0aW9uRGF0YSk7CiAK
LSNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oUVQpCisjaWYg
UExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFFUKSB8fCBQTEFURk9S
TShFRkwpCiAgICAgLy8gVGFrZSBpbnRvIGFjY291bnQgdGhlIHVzZXIncyByZXF1ZXN0ZWQgY29u
dGV4dCBjcmVhdGlvbiBhdHRyaWJ1dGVzLAogICAgIC8vIGluIHBhcnRpY3VsYXIgc3RlbmNpbCBh
bmQgYW50aWFsaWFzLCBhbmQgZGV0ZXJtaW5lIHdoaWNoIGNvdWxkIG9yCiAgICAgLy8gY291bGQg
bm90IGJlIGhvbm9yZWQgYmFzZWQgb24gdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgT3BlbkdMCkBA
IC05MDYsNyArOTA5LDcgQEAgcHVibGljOgogICAgIFJldGFpblB0cjxXZWJHTExheWVyPiBtX3dl
YkdMTGF5ZXI7CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oR1RLKSB8
fCBQTEFURk9STShRVCkKKyNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKEdUSykgfHwgUExB
VEZPUk0oUVQpIHx8IFBMQVRGT1JNKEVGTCkKICAgICB0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAg
IFN0cmluZyBzb3VyY2U7CiAgICAgICAgIFN0cmluZyBsb2c7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvRHJhd2luZ0J1ZmZlckVmbC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvRHJhd2luZ0J1ZmZlckVmbC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMWU1MDJhZTdjOWIxNzM4ZWFlZDZjZmI2MzI4Yjg4ZTBjZGU3MDgxNwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9EcmF3aW5n
QnVmZmVyRWZsLmNwcApAQCAtMCwwICsxLDk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
ZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKSB8fCBFTkFCTEUoV0VCR0wpCisKKyNpbmNs
dWRlICJEcmF3aW5nQnVmZmVyLmgiCisKKyNpbmNsdWRlICJFeHRlbnNpb25zM0QuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitEcmF3aW5nQnVmZmVyOjpEcmF3aW5nQnVmZmVyKEdyYXBoaWNz
Q29udGV4dDNEKiBjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJ
bnRTaXplJiBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG11bHRpc2Ft
cGxlRXh0ZW5zaW9uU3VwcG9ydGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29s
IHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1cHBvcnRlZCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBzZXBhcmF0ZUJhY2tpbmdUZXh0dXJlKQorICAgIDogbV9zZXBhcmF0
ZUJhY2tpbmdUZXh0dXJlKHNlcGFyYXRlQmFja2luZ1RleHR1cmUpCisgICAgLCBtX3NjaXNzb3JF
bmFibGVkKGZhbHNlKQorICAgICwgbV90ZXh0dXJlMkRCaW5kaW5nKDApCisgICAgLCBtX2FjdGl2
ZVRleHR1cmVVbml0KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCkKKyAgICAsIG1fY29udGV4
dChjb250ZXh0KQorICAgICwgbV9zaXplKC0xLCAtMSkKKyAgICAsIG1fbXVsdGlzYW1wbGVFeHRl
bnNpb25TdXBwb3J0ZWQobXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0ZWQpCisgICAgLCBtX3Bh
Y2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1cHBvcnRlZChwYWNrZWREZXB0aFN0ZW5jaWxFeHRl
bnNpb25TdXBwb3J0ZWQpCisgICAgLCBtX2Zibyhjb250ZXh0LT5jcmVhdGVGcmFtZWJ1ZmZlcigp
KQorICAgICwgbV9jb2xvckJ1ZmZlcigwKQorICAgICwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIoMCkK
KyAgICAsIG1fZGVwdGhCdWZmZXIoMCkKKyAgICAsIG1fc3RlbmNpbEJ1ZmZlcigwKQorICAgICwg
bV9tdWx0aXNhbXBsZUZCTygwKQorICAgICwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKDApCit7
CisgICAgLy8gU3VwcG9ydCBmb3IgYSBzZXBhcmF0ZSBiYWNraW5nIHRleHR1cmUgaGFzIG9ubHkg
YmVlbiBlbmFibGVkIGZvcgorICAgIC8vIHRoZSBjaHJvbWl1bSBwb3J0LgorICAgIEFTU0VSVCgh
bV9zZXBhcmF0ZUJhY2tpbmdUZXh0dXJlKTsKKyAgICBBU1NFUlQobV9mYm8pOworICAgIGlmICgh
bV9mYm8pIHsKKyAgICAgICAgY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IC8vIGNyZWF0ZSBhIHRleHR1cmUgdG8gcmVuZGVyIGludG8KKyAgICBtX2NvbG9yQnVmZmVyID0g
Y29udGV4dC0+Y3JlYXRlVGV4dHVyZSgpOworICAgIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX2NvbG9yQnVmZmVyKTsKKyAgICBjb250ZXh0LT50
ZXhQYXJhbWV0ZXJmKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKTsKKyAg
ICBjb250ZXh0LT50ZXhQYXJhbWV0ZXJmKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6
TElORUFSKTsKKyAgICBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29u
dGV4dDNEOjpDTEFNUF9UT19FREdFKTsKKyAgICBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQ
X1QsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKKyAgICBjb250ZXh0LT5iaW5k
VGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCk7CisKKyAgICBjcmVhdGVT
ZWNvbmRhcnlCdWZmZXJzKCk7CisgICAgcmVzZXQoc2l6ZSk7Cit9CisKK0RyYXdpbmdCdWZmZXI6
On5EcmF3aW5nQnVmZmVyKCkKK3sKKyAgICBjbGVhcigpOworfQorCitQbGF0Zm9ybTNET2JqZWN0
IERyYXdpbmdCdWZmZXI6OnBsYXRmb3JtQ29sb3JCdWZmZXIoKSBjb25zdAoreworICAgIHJldHVy
biBtX2NvbG9yQnVmZmVyOworfQorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQor
dm9pZCBEcmF3aW5nQnVmZmVyOjpwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9DYW52YXMoQ2FudmFz
UmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK3sKK30KKyNlbmRpZgorCit9CisKKyNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNz
Q29udGV4dDNERWZsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9H
cmFwaGljc0NvbnRleHQzREVmbC5jcHAKaW5kZXggZDQ1MjM1ZTE0Y2E1ZjI1YTY4YWVkODQzYjA3
Mjc4ZmUxNDFmOGZhNy4uYzdiNDZkNjM2ZDYwNTJlYTFiOTE4MmM3MDZkMjNiYzljNWE4YjMwNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNz
Q29udGV4dDNERWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9l
ZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwCkBAIC0xLDg0NSArMSwxNDggQEAKIC8qCi0gICAg
Q29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKLQotICAgIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLworICogQ29weXJpZ2h0IChD
KSAyMDExLCAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAKICNpZiBFTkFCTEUoV0VCR0wpCi0KLSNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQzREludGVybmFsLmgiCi0KLSNpbmNsdWRlICJJbWFnZURhdGEu
aCIKKyNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0wuaCIKKyNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGUuaCIKKyNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgorI2luY2x1ZGUgIlNo
YWRlckxhbmcuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLVBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IEdyYXBoaWNzQ29udGV4dDNE
OjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cq
IGhvc3RXaW5kb3csIFJlbmRlclN0eWxlIHJlbmRlclN0eWxlKQorUGFzc1JlZlB0cjxHcmFwaGlj
c0NvbnRleHQzRD4gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShHcmFwaGljc0NvbnRleHQzRDo6
QXR0cmlidXRlcyBhdHRyaWJ1dGVzLCBIb3N0V2luZG93KiBob3N0V2luZG93LCBHcmFwaGljc0Nv
bnRleHQzRDo6UmVuZGVyU3R5bGUgcmVuZGVyU3R5bGUpCiB7Ci0gICAgYm9vbCByZW5kZXJEaXJl
Y3RseVRvRXZhc0dMT2JqZWN0ID0gKHJlbmRlclN0eWxlID09IFJlbmRlckRpcmVjdGx5VG9Ib3N0
V2luZG93KTsKKyAgICBib29sIHJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93ID0gKHJlbmRlclN0
eWxlID09IFJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KTsKKyAgICAvLyBUaGlzIGltcGxlbWVu
dGF0aW9uIGRvZXNuJ3QgY3VycmVudGx5IHN1cHBvcnQgcmVuZGVyaW5nIGRpcmVjdGx5IHRvIHRo
ZSBIb3N0V2luZG93LgorICAgIGlmIChyZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdykKKyAgICAg
ICAgcmV0dXJuIDA7CiAKLSAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbD4gaW50
ZXJuYWwgPSBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpjcmVhdGUoYXR0cnMsIGhvc3RXaW5k
b3csIHJlbmRlckRpcmVjdGx5VG9FdmFzR0xPYmplY3QpOwotICAgIGlmICghaW50ZXJuYWwpCisg
ICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZT4gcHJpdiA9IEdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZTo6Y3JlYXRlKCk7CisgICAgaWYgKCFwcml2KQogICAgICAgICByZXR1cm4gMDsK
IAotICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IGFkb3B0UmVmKG5ldyBH
cmFwaGljc0NvbnRleHQzRChhdHRycywgaG9zdFdpbmRvdywgcmVuZGVyRGlyZWN0bHlUb0V2YXNH
TE9iamVjdCkpOwotICAgIGNvbnRleHQtPm1faW50ZXJuYWwgPSBpbnRlcm5hbC5yZWxlYXNlKCk7
CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gYWRvcHRSZWYobmV3IEdy
YXBoaWNzQ29udGV4dDNEKGF0dHJpYnV0ZXMsIGhvc3RXaW5kb3csIHJlbmRlckRpcmVjdGx5VG9I
b3N0V2luZG93KSk7CisgICAgY29udGV4dC0+bV9wcml2YXRlID0gcHJpdi5yZWxlYXNlKCk7CiAg
ICAgcmV0dXJuIGNvbnRleHQucmVsZWFzZSgpOwogfQogCi1HcmFwaGljc0NvbnRleHQzRDo6R3Jh
cGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RX
aW5kb3cqIGhvc3RXaW5kb3csIGJvb2wgcmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpCitHcmFw
aGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJp
YnV0ZXMgYXR0cmlidXRlcywgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgYm9vbCByZW5kZXJEaXJl
Y3RseVRvSG9zdFdpbmRvdykKICAgICA6IG1fY3VycmVudFdpZHRoKDApCiAgICAgLCBtX2N1cnJl
bnRIZWlnaHQoMCkKLSAgICAsIG1faXNSZXNvdXJjZVNhZmUoZmFsc2UpCi17CisgICAgLCBtX2F0
dHJzKGF0dHJpYnV0ZXMpCisgICAgLCBtX3RleHR1cmUoMCkKKyAgICAsIG1fZmJvKDApCisgICAg
LCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcigwKQorICAgICwgbV9ib3VuZEZCTygwKQorICAgICwgbV9t
dWx0aXNhbXBsZUZCTygwKQorICAgICwgbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcigw
KQorICAgICwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKDApCit7CisgICAgR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlOjphZGRBY3RpdmVHcmFwaGljc0NvbnRleHQodGhpcyk7CisKKyAgICB2YWxp
ZGF0ZUF0dHJpYnV0ZXMoKTsKKworICAgIC8vIENyZWF0ZSBhIHRleHR1cmUgdG8gcmVuZGVyIGlu
dG8uCisgICAgOjpnbEdlblRleHR1cmVzKDEsICZtX3RleHR1cmUpOworICAgIDo6Z2xCaW5kVGV4
dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUpOworICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdM
X1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICA6Omds
VGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJ
TkVBUik7CisgICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9X
UkFQX1MsIEdMX0NMQU1QKTsKKyAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBH
TF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVApOworICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhU
VVJFXzJELCAwKTsKKworICAgIC8vIENyZWF0ZSBhbiBGQk8uCisgICAgOjpnbEdlbkZyYW1lYnVm
ZmVyc0VYVCgxLCAmbV9mYm8pOworICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVC
VUZGRVJfRVhULCBtX2Zibyk7CisKKyAgICBtX2JvdW5kRkJPID0gbV9mYm87CisgICAgaWYgKCFt
X2F0dHJzLmFudGlhbGlhcyAmJiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpKQor
ICAgICAgICA6OmdsR2VuUmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9kZXB0aFN0ZW5jaWxCdWZmZXIp
OworCisgICAgLy8gQ3JlYXRlIGEgbXVsdGlzYW1wbGUgRkJPLgorICAgIGlmIChtX2F0dHJzLmFu
dGlhbGlhcykgeworICAgICAgICA6OmdsR2VuRnJhbWVidWZmZXJzRVhUKDEsICZtX211bHRpc2Ft
cGxlRkJPKTsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9F
WFQsIG1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICBtX2JvdW5kRkJPID0gbV9tdWx0aXNhbXBs
ZUZCTzsKKyAgICAgICAgOjpnbEdlblJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fbXVsdGlzYW1wbGVD
b2xvckJ1ZmZlcik7CisgICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0
aCkKKyAgICAgICAgICAgIDo6Z2xHZW5SZW5kZXJidWZmZXJzRVhUKDEsICZtX211bHRpc2FtcGxl
RGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICB9CisKKyAgICAvLyBBTkdMRSBpbml0aWFsaXphdGlv
bi4KKyAgICBTaEJ1aWx0SW5SZXNvdXJjZXMgQU5HTEVSZXNvdXJjZXM7CisgICAgU2hJbml0QnVp
bHRJblJlc291cmNlcygmQU5HTEVSZXNvdXJjZXMpOworCisgICAgZ2V0SW50ZWdlcnYoR3JhcGhp
Y3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfQVRUUklCUywgJkFOR0xFUmVzb3VyY2VzLk1heFZlcnRl
eEF0dHJpYnMpOworICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVY
X1VOSUZPUk1fVkVDVE9SUywgJkFOR0xFUmVzb3VyY2VzLk1heFZlcnRleFVuaWZvcm1WZWN0b3Jz
KTsKKyAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZBUllJTkdfVkVDVE9S
UywgJkFOR0xFUmVzb3VyY2VzLk1heFZhcnlpbmdWZWN0b3JzKTsKKyAgICBnZXRJbnRlZ2VydihH
cmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTLCAmQU5HTEVS
ZXNvdXJjZXMuTWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMpOworICAgIGdldEludGVnZXJ2KEdy
YXBoaWNzQ29udGV4dDNEOjpNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUywgJkFOR0xF
UmVzb3VyY2VzLk1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOworICAgIGdldEludGVnZXJ2
KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUywgJkFOR0xFUmVzb3Vy
Y2VzLk1heFRleHR1cmVJbWFnZVVuaXRzKTsKKyAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRl
eHQzRDo6TUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUywgJkFOR0xFUmVzb3VyY2VzLk1heEZy
YWdtZW50VW5pZm9ybVZlY3RvcnMpOworCisgICAgLy8gQWx3YXlzIHNldCB0byAxIGZvciBPcGVu
R0wgRVMuCisgICAgQU5HTEVSZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMgPSAxOworICAgIG1fY29t
cGlsZXIuc2V0UmVzb3VyY2VzKEFOR0xFUmVzb3VyY2VzKTsKKworICAgIDo6Z2xFbmFibGUoR0xf
VkVSVEVYX1BST0dSQU1fUE9JTlRfU0laRSk7CisgICAgOjpnbEVuYWJsZShHTF9QT0lOVF9TUFJJ
VEUpOworICAgIDo6Z2xDbGVhckNvbG9yKDAsIDAsIDAsIDApOwogfQogCiBHcmFwaGljc0NvbnRl
eHQzRDo6fkdyYXBoaWNzQ29udGV4dDNEKCkKIHsKLX0KKyAgICBHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGU6OnJlbW92ZUFjdGl2ZUdyYXBoaWNzQ29udGV4dCh0aGlzKTsKKyAgICBpZiAoIW1fcHJp
dmF0ZS0+bV9jb250ZXh0KQorICAgICAgICByZXR1cm47CiAKLVBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0M0QgR3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKSBjb25z
dAotewotICAgIHJldHVybiBtX2ludGVybmFsLT5wbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCk7
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbERlbGV0ZVRleHR1cmVzKDEsICZt
X3RleHR1cmUpOworICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcykgeworICAgICAgICA6OmdsRGVs
ZXRlUmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKKyAgICAg
ICAgaWYgKG1fYXR0cnMuc3RlbmNpbCB8fCBtX2F0dHJzLmRlcHRoKQorICAgICAgICAgICAgOjpn
bERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZm
ZXIpOworICAgICAgICA6OmdsRGVsZXRlRnJhbWVidWZmZXJzRVhUKDEsICZtX211bHRpc2FtcGxl
RkJPKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0
cnMuZGVwdGgpCisgICAgICAgICAgICA6OmdsRGVsZXRlUmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9k
ZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgIH0KKyAgICA6OmdsRGVsZXRlRnJhbWVidWZmZXJzRVhU
KDEsICZtX2Zibyk7CiB9CiAKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi1QbGF0
Zm9ybUxheWVyKiBHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1MYXllcigpIGNvbnN0Ci17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLSNlbmRpZgotCiBib29sIEdy
YXBoaWNzQ29udGV4dDNEOjptYWtlQ29udGV4dEN1cnJlbnQoKQogewotICAgIG1faW50ZXJuYWwt
Pm1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEdyYXBo
aWNzQ29udGV4dDNEOjppc0dMRVMyQ29tcGxpYW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9p
bnRlcm5hbC0+aXNHTEVTMkNvbXBsaWFudCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjphY3RpdmVUZXh0dXJlKEdDM0RlbnVtIHRleHR1cmUpCi17Ci0gICAgbV9pbnRlcm5hbC0+YWN0
aXZlVGV4dHVyZSh0ZXh0dXJlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YXR0YWNo
U2hhZGVyKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIp
Ci17Ci0gICAgbV9pbnRlcm5hbC0+YXR0YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRlcik7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybTNET2Jq
ZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAg
bV9pbnRlcm5hbC0+YmluZEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIGluZGV4LCBuYW1lKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZEJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBs
YXRmb3JtM0RPYmplY3QgYnVmZmVyKQotewotICAgIG1faW50ZXJuYWwtPmJpbmRCdWZmZXIodGFy
Z2V0LCBidWZmZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kRnJhbWVidWZm
ZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcikKLXsKLSAgICBtX2lu
dGVybmFsLT5iaW5kRnJhbWVidWZmZXIodGFyZ2V0LCBidWZmZXIpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpiaW5kUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0z
RE9iamVjdCByZW5kZXJidWZmZXIpCi17Ci0gICAgbV9pbnRlcm5hbC0+YmluZFJlbmRlcmJ1ZmZl
cih0YXJnZXQsIHJlbmRlcmJ1ZmZlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJp
bmRUZXh0dXJlKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlKQotewot
ICAgIG1faW50ZXJuYWwtPmJpbmRUZXh0dXJlKHRhcmdldCwgdGV4dHVyZSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kQ29sb3IoR0MzRGNsYW1wZiByZWQsIEdDM0RjbGFtcGYg
Z3JlZW4sIEdDM0RjbGFtcGYgYmx1ZSwgR0MzRGNsYW1wZiBhbHBoYSkKLXsKLSAgICBtX2ludGVy
bmFsLT5ibGVuZENvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6YmxlbmRFcXVhdGlvbihHQzNEZW51bSBtb2RlKQotewotICAgIG1faW50
ZXJuYWwtPmJsZW5kRXF1YXRpb24obW9kZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQzNEZW51bSBtb2RlUkdCLCBHQzNEZW51bSBtb2RlQWxw
aGEpCi17Ci0gICAgbV9pbnRlcm5hbC0+YmxlbmRFcXVhdGlvblNlcGFyYXRlKG1vZGVSR0IsIG1v
ZGVBbHBoYSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kRnVuYyhHQzNEZW51
bSBzcmNGYWN0b3IsIEdDM0RlbnVtIGRzdEZhY3RvcikKLXsKLSAgICBtX2ludGVybmFsLT5ibGVu
ZEZ1bmMoc3JjRmFjdG9yLCBkc3RGYWN0b3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpibGVuZEZ1bmNTZXBhcmF0ZShHQzNEZW51bSBzcmNSR0IsIEdDM0RlbnVtIGRzdFJHQiwgR0Mz
RGVudW0gc3JjQWxwaGEsIEdDM0RlbnVtIGRzdEFscGhhKQotewotICAgIG1faW50ZXJuYWwtPmJs
ZW5kRnVuY1NlcGFyYXRlKHNyY1JHQiwgZHN0UkdCLCBzcmNBbHBoYSwgZHN0QWxwaGEpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RHNpemVpcHRyIHNpemUsIEdDM0RlbnVtIHVzYWdlKQotewotICAgIG1faW50ZXJuYWwtPmJ1ZmZl
ckRhdGEodGFyZ2V0LCBzaXplLCAwLCB1c2FnZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwgY29uc3Qg
dm9pZCogZGF0YSwgR0MzRGVudW0gdXNhZ2UpCi17Ci0gICAgbV9pbnRlcm5hbC0+YnVmZmVyRGF0
YSh0YXJnZXQsIHNpemUsIGRhdGEsIHVzYWdlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6YnVmZmVyU3ViRGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnRwdHIgb2Zmc2V0LCBHQzNE
c2l6ZWlwdHIgc2l6ZSwgY29uc3Qgdm9pZCogZGF0YSkKLXsKLSAgICBtX2ludGVybmFsLT5idWZm
ZXJTdWJEYXRhKHRhcmdldCwgb2Zmc2V0LCBzaXplLCBkYXRhKTsKLX0KLQotR0MzRGVudW0gR3Jh
cGhpY3NDb250ZXh0M0Q6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0MzRGVudW0gdGFyZ2V0KQot
ewotICAgIHJldHVybiBtX2ludGVybmFsLT5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKHRhcmdldCk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyKEdDM0RiaXRmaWVsZCBtYXNrKQot
ewotICAgIG1faW50ZXJuYWwtPmNsZWFyKG1hc2spOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpjbGVhckNvbG9yKEdDM0RjbGFtcGYgcmVkLCBHQzNEY2xhbXBmIGdyZWVuLCBHQzNEY2xh
bXBmIGJsdWUsIEdDM0RjbGFtcGYgYWxwaGEpCi17Ci0gICAgbV9pbnRlcm5hbC0+Y2xlYXJDb2xv
cihyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmNsZWFyRGVwdGgoR0MzRGNsYW1wZiBkZXB0aCkKLXsKLSAgICBtX2ludGVybmFsLT5jbGVhckRl
cHRoKGRlcHRoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJTdGVuY2lsKEdD
M0RpbnQgY2xlYXJWYWx1ZSkKLXsKLSAgICBtX2ludGVybmFsLT5jbGVhclN0ZW5jaWwoY2xlYXJW
YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvbG9yTWFzayhHQzNEYm9vbGVh
biByZWQsIEdDM0Rib29sZWFuIGdyZWVuLCBHQzNEYm9vbGVhbiBibHVlLCBHQzNEYm9vbGVhbiBh
bHBoYSkKLXsKLSAgICBtX2ludGVybmFsLT5jb2xvck1hc2socmVkLCBncmVlbiwgYmx1ZSwgYWxw
aGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb21waWxlU2hhZGVyKFBsYXRmb3Jt
M0RPYmplY3Qgc2hhZGVyKQotewotICAgIG1faW50ZXJuYWwtPmNvbXBpbGVTaGFkZXIoc2hhZGVy
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29weVRleEltYWdlMkQoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGludCB4
LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBi
b3JkZXIpCi17Ci0gICAgbV9pbnRlcm5hbC0+Y29weVRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwg
aW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlUZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGludCBsZXZlbCwgR0MzRGludCB4T2Zmc2V0LCBHQzNEaW50IHlPZmZzZXQsIEdDM0RpbnQgeCwg
R0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCi17Ci0gICAgbV9p
bnRlcm5hbC0+Y29weVRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeE9mZnNldCwgeU9mZnNl
dCwgeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNv
bXByZXNzZWRUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0Mz
RGludCBib3JkZXIsIEdDM0RzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQqIGRhdGEpCi17Ci0g
ICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBjb21wcmVzc2VkVGV4SW1hZ2UyRC4KLSAgICAv
LyBtX2ludGVybmFsLT5jb21wcmVzc2VkVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5h
bGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBpbWFnZVNpemUsIGRhdGEpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0
YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBH
QzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRHNp
emVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCogZGF0YSkKLXsKLSAgICAvLyBGSVhNRTogQWRkIHN1
cHBvcnQgZm9yIGNvbXByZXNzZWRUZXhTdWJJbWFnZTJELgotICAgIC8vIG1faW50ZXJuYWwtPmNv
bXByZXNzZWRUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdp
ZHRoLCBoZWlnaHQsIGZvcm1hdCwgaW1hZ2VTaXplLCBkYXRhKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6Y3VsbEZhY2UoR0MzRGVudW0gbW9kZSkKLXsKLSAgICBtX2ludGVybmFsLT5j
dWxsRmFjZShtb2RlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhGdW5jKEdD
M0RlbnVtIGZ1bmMpCi17Ci0gICAgbV9pbnRlcm5hbC0+ZGVwdGhGdW5jKGZ1bmMpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZXB0aE1hc2soR0MzRGJvb2xlYW4gZmxhZykKLXsKLSAg
ICBtX2ludGVybmFsLT5kZXB0aE1hc2soZmxhZyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmRlcHRoUmFuZ2UoR0MzRGNsYW1wZiB6TmVhciwgR0MzRGNsYW1wZiB6RmFyKQotewotICAg
IG1faW50ZXJuYWwtPmRlcHRoUmFuZ2Uoek5lYXIsIHpGYXIpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpkZXRhY2hTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9y
bTNET2JqZWN0IHNoYWRlcikKLXsKLSAgICBtX2ludGVybmFsLT5kZXRhY2hTaGFkZXIocHJvZ3Jh
bSwgc2hhZGVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGlzYWJsZShHQzNEZW51
bSBjYXApCi17Ci0gICAgbV9pbnRlcm5hbC0+ZGlzYWJsZShjYXApOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgpCi17
Ci0gICAgbV9pbnRlcm5hbC0+ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZHJhd0FycmF5cyhHQzNEZW51bSBtb2RlLCBHQzNEaW50
IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQpCi17Ci0gICAgbV9pbnRlcm5hbC0+ZHJhd0FycmF5cyht
b2RlLCBmaXJzdCwgY291bnQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkcmF3RWxl
bWVudHMoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBHQzNE
aW50cHRyIG9mZnNldCkKLXsKLSAgICBtX2ludGVybmFsLT5kcmF3RWxlbWVudHMobW9kZSwgY291
bnQsIHR5cGUsIG9mZnNldCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmVuYWJsZShH
QzNEZW51bSBjYXApCi17Ci0gICAgbV9pbnRlcm5hbC0+ZW5hYmxlKGNhcCk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1aW50IGluZGV4
KQotewotICAgIG1faW50ZXJuYWwtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZmluaXNoKCkKLXsKLSAgICBtX2ludGVybmFsLT5m
aW5pc2goKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Zmx1c2goKQotewotICAgIG1f
aW50ZXJuYWwtPmZsdXNoKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZyYW1lYnVm
ZmVyUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0Mz
RGVudW0gcmVuZGVyYnVmZmVyVGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcikKLXsKLSAg
ICBtX2ludGVybmFsLT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQsIGF0dGFjaG1lbnQs
IHJlbmRlcmJ1ZmZlclRhcmdldCwgYnVmZmVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2ht
ZW50LCBHQzNEZW51bSB0ZXhUYXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSwgR0MzRGlu
dCBsZXZlbCkKLXsKLSAgICBtX2ludGVybmFsLT5mcmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQs
IGF0dGFjaG1lbnQsIHRleFRhcmdldCwgdGV4dHVyZSwgbGV2ZWwpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpmcm9udEZhY2UoR0MzRGVudW0gbW9kZSkKLXsKLSAgICBtX2ludGVybmFs
LT5mcm9udEZhY2UobW9kZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdlbmVyYXRl
TWlwbWFwKEdDM0RlbnVtIHRhcmdldCkKLXsKLSAgICBtX2ludGVybmFsLT5nZW5lcmF0ZU1pcG1h
cCh0YXJnZXQpOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBY3RpdmVBdHRyaWIo
UGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5m
bykKLXsKLSAgICByZXR1cm4gbV9pbnRlcm5hbC0+Z2V0QWN0aXZlQXR0cmliKHByb2dyYW0sIGlu
ZGV4LCBpbmZvKTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0aXZlVW5pZm9y
bShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBp
bmZvKQotewotICAgIHJldHVybiBtX2ludGVybmFsLT5nZXRBY3RpdmVVbmlmb3JtKHByb2dyYW0s
IGluZGV4LCBpbmZvKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QXR0YWNoZWRT
aGFkZXJzKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHNpemVpIG1heENvdW50LCBHQzNE
c2l6ZWkqIGNvdW50LCBQbGF0Zm9ybTNET2JqZWN0KiBzaGFkZXJzKQotewotICAgIG1faW50ZXJu
YWwtPmdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCBtYXhDb3VudCwgY291bnQsIHNoYWRlcnMp
OwotfQotCi1pbnQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEF0dHJpYkxvY2F0aW9uKFBsYXRmb3Jt
M0RPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIHJldHVybiBtX2lu
dGVybmFsLT5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBuYW1lKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6Z2V0Qm9vbGVhbnYoR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEYm9vbGVh
biogdmFsdWUpCi17Ci0gICAgbV9pbnRlcm5hbC0+Z2V0Qm9vbGVhbnYocGFyYW1OYW1lLCB2YWx1
ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEJ1ZmZlclBhcmFtZXRlcml2KEdD
M0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEaW50KiB2YWx1ZSkKLXsKLSAg
ICBtX2ludGVybmFsLT5nZXRCdWZmZXJQYXJhbWV0ZXJpdih0YXJnZXQsIHBhcmFtTmFtZSwgdmFs
dWUpOwotfQotCi1HcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBHcmFwaGljc0NvbnRleHQz
RDo6Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKQotewotICAgIHJldHVybiBtX2ludGVybmFsLT5nZXRD
b250ZXh0QXR0cmlidXRlcygpOwotfQotCi1HQzNEZW51bSBHcmFwaGljc0NvbnRleHQzRDo6Z2V0
RXJyb3IoKQotewotICAgIHJldHVybiBtX2ludGVybmFsLT5nZXRFcnJvcigpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRGbG9hdHYoR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEZmxv
YXQqIHZhbHVlKQotewotICAgIG1faW50ZXJuYWwtPmdldEZsb2F0dihwYXJhbU5hbWUsIHZhbHVl
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50
UGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51
bSBwYXJhbU5hbWUsIEdDM0RpbnQqIHZhbHVlKQotewotICAgIG1faW50ZXJuYWwtPmdldEZyYW1l
YnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KHRhcmdldCwgYXR0YWNobWVudCwgcGFyYW1OYW1l
LCB2YWx1ZSk7CisgICAgaWYgKCFtX3ByaXZhdGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICByZXR1cm4gbV9wcml2YXRlLT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6Z2V0SW50ZWdlcnYoR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEaW50KiB2
YWx1ZSkKLXsKLSAgICBtX2ludGVybmFsLT5nZXRJbnRlZ2VydihwYXJhbU5hbWUsIHZhbHVlKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0UHJvZ3JhbWl2KFBsYXRmb3JtM0RPYmpl
Y3QgcHJvZ3JhbSwgR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEaW50KiB2YWx1ZSkKLXsKLSAgICBt
X2ludGVybmFsLT5nZXRQcm9ncmFtaXYocHJvZ3JhbSwgcGFyYW1OYW1lLCB2YWx1ZSk7Ci19Ci0K
LVN0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0UHJvZ3JhbUluZm9Mb2coUGxhdGZvcm0zRE9i
amVjdCBwcm9ncmFtKQotewotICAgIHJldHVybiBtX2ludGVybmFsLT5nZXRQcm9ncmFtSW5mb0xv
Zyhwcm9ncmFtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0UmVuZGVyYnVmZmVy
UGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQq
IHZhbHVlKQotewotICAgIG1faW50ZXJuYWwtPmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KHRh
cmdldCwgcGFyYW1OYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Omdl
dFNoYWRlcml2KFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyLCBHQzNEZW51bSBwYXJhbU5hbWUsIEdD
M0RpbnQqIHZhbHVlKQotewotICAgIG1faW50ZXJuYWwtPmdldFNoYWRlcml2KHNoYWRlciwgcGFy
YW1OYW1lLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVy
SW5mb0xvZyhQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKLXsKLSAgICByZXR1cm4gbV9pbnRlcm5h
bC0+Z2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpOwotfQotCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0
M0Q6OmdldFNoYWRlclNvdXJjZShQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKLXsKLSAgICByZXR1
cm4gbV9pbnRlcm5hbC0+Z2V0U2hhZGVyU291cmNlKHNoYWRlcik7Ci19Ci0KLVN0cmluZyBHcmFw
aGljc0NvbnRleHQzRDo6Z2V0U3RyaW5nKEdDM0RlbnVtIG5hbWUpCi17Ci0gICAgcmV0dXJuIG1f
aW50ZXJuYWwtPmdldFN0cmluZyhuYW1lKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
Z2V0VGV4UGFyYW1ldGVyZnYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwYXJhbU5hbWUsIEdD
M0RmbG9hdCogdmFsdWUpCi17Ci0gICAgbV9pbnRlcm5hbC0+Z2V0VGV4UGFyYW1ldGVyZnYodGFy
Z2V0LCBwYXJhbU5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0
VGV4UGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0Rp
bnQqIHZhbHVlKQotewotICAgIG1faW50ZXJuYWwtPmdldFRleFBhcmFtZXRlcml2KHRhcmdldCwg
cGFyYW1OYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFVuaWZv
cm1mdihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9h
dCogdmFsdWUpCi17Ci0gICAgbV9pbnRlcm5hbC0+Z2V0VW5pZm9ybWZ2KHByb2dyYW0sIGxvY2F0
aW9uLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFVuaWZvcm1pdihQ
bGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQqIHZhbHVl
KQotewotICAgIG1faW50ZXJuYWwtPmdldFVuaWZvcm1pdihwcm9ncmFtLCBsb2NhdGlvbiwgdmFs
dWUpOwotfQotCi1HQzNEaW50IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtTG9jYXRpb24o
UGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgcmV0
dXJuIG1faW50ZXJuYWwtPmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCBuYW1lKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliZnYoR0MzRHVpbnQgaW5kZXgs
IEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGZsb2F0KiB2YWx1ZSkKLXsKLSAgICBtX2ludGVybmFs
LT5nZXRWZXJ0ZXhBdHRyaWJmdihpbmRleCwgcGFyYW1OYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYml2KEdDM0R1aW50IGluZGV4LCBHQzNE
ZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQqIHZhbHVlKQotewotICAgIG1faW50ZXJuYWwtPmdldFZl
cnRleEF0dHJpYml2KGluZGV4LCBwYXJhbU5hbWUsIHZhbHVlKTsKLX0KLQotbG9uZyBHcmFwaGlj
c0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KEdDM0R1aW50IGluZGV4LCBHQzNEZW51
bSBwYXJhbU5hbWUpCi17Ci0gICAgcmV0dXJuIG1faW50ZXJuYWwtPmdldFZlcnRleEF0dHJpYk9m
ZnNldChpbmRleCwgcGFyYW1OYW1lKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6aGlu
dChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIG1vZGUpCi17Ci0gICAgbV9pbnRlcm5hbC0+aGlu
dCh0YXJnZXQsIG1vZGUpOwotfQotCi1HQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNC
dWZmZXIoUGxhdGZvcm0zRE9iamVjdCBvYmopCi17Ci0gICAgcmV0dXJuIG1faW50ZXJuYWwtPmlz
QnVmZmVyKG9iaik7Ci19Ci0KLUdDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc0VuYWJs
ZWQoR0MzRGVudW0gY2FwKQotewotICAgIHJldHVybiBtX2ludGVybmFsLT5pc0VuYWJsZWQoY2Fw
KTsKLX0KLQotR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6OmlzRnJhbWVidWZmZXIoUGxh
dGZvcm0zRE9iamVjdCBvYmopCi17Ci0gICAgcmV0dXJuIG1faW50ZXJuYWwtPmlzRnJhbWVidWZm
ZXIob2JqKTsKLX0KLQotR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6OmlzUHJvZ3JhbShQ
bGF0Zm9ybTNET2JqZWN0IG9iaikKLXsKLSAgICByZXR1cm4gbV9pbnRlcm5hbC0+aXNQcm9ncmFt
KG9iaik7Ci19Ci0KLUdDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc1JlbmRlcmJ1ZmZl
cihQbGF0Zm9ybTNET2JqZWN0IG9iaikKLXsKLSAgICByZXR1cm4gbV9pbnRlcm5hbC0+aXNSZW5k
ZXJidWZmZXIob2JqKTsKLX0KLQotR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6OmlzU2hh
ZGVyKFBsYXRmb3JtM0RPYmplY3Qgb2JqKQotewotICAgIHJldHVybiBtX2ludGVybmFsLT5pc1No
YWRlcihvYmopOwotfQotCi1HQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNUZXh0dXJl
KFBsYXRmb3JtM0RPYmplY3Qgb2JqKQotewotICAgIHJldHVybiBtX2ludGVybmFsLT5pc1RleHR1
cmUob2JqKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bGluZVdpZHRoKEdDM0RmbG9h
dCB3aWR0aCkKLXsKLSAgICBtX2ludGVybmFsLT5saW5lV2lkdGgod2lkdGgpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpsaW5rUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0p
Ci17Ci0gICAgbV9pbnRlcm5hbC0+bGlua1Byb2dyYW0ocHJvZ3JhbSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnBpeGVsU3RvcmVpKEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGludCBw
YXJhbSkKLXsKLSAgICBtX2ludGVybmFsLT5waXhlbFN0b3JlaShwYXJhbU5hbWUsIHBhcmFtKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cG9seWdvbk9mZnNldChHQzNEZmxvYXQgZmFj
dG9yLCBHQzNEZmxvYXQgdW5pdHMpCi17Ci0gICAgbV9pbnRlcm5hbC0+cG9seWdvbk9mZnNldChm
YWN0b3IsIHVuaXRzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVscyhH
QzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBH
QzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIHZvaWQqIGRhdGEpCi17Ci0gICAgbV9pbnRl
cm5hbC0+cmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGRhdGEp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWxlYXNlU2hhZGVyQ29tcGlsZXIoKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJl
bmRlcmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1h
dCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQotewotICAgIG1faW50ZXJuYWwt
PnJlbmRlcmJ1ZmZlclN0b3JhZ2UodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdo
dCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNhbXBsZUNvdmVyYWdlKEdDM0RjbGFt
cGYgdmFsdWUsIEdDM0Rib29sZWFuIGludmVydCkKLXsKLSAgICBtX2ludGVybmFsLT5zYW1wbGVD
b3ZlcmFnZSh2YWx1ZSwgaW52ZXJ0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2Np
c3NvcihHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVp
Z2h0KQotewotICAgIG1faW50ZXJuYWwtPnNjaXNzb3IoeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNoYWRlclNvdXJjZShQbGF0Zm9ybTNET2JqZWN0
IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgc3RyaW5nKQotewotICAgIG1faW50ZXJuYWwtPnNoYWRl
clNvdXJjZShwcm9ncmFtLCBzdHJpbmcpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpz
dGVuY2lsRnVuYyhHQzNEZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0MzRHVpbnQgbWFzaykKLXsK
LSAgICBtX2ludGVybmFsLT5zdGVuY2lsRnVuYyhmdW5jLCByZWYsIG1hc2spOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsRnVuY1NlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdD
M0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKQotewotICAgIG1faW50ZXJu
YWwtPnN0ZW5jaWxGdW5jU2VwYXJhdGUoZmFjZSwgZnVuYywgcmVmLCBtYXNrKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbE1hc2soR0MzRHVpbnQgbWFzaykKLXsKLSAgICBt
X2ludGVybmFsLT5zdGVuY2lsTWFzayhtYXNrKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6c3RlbmNpbE1hc2tTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEdWludCBtYXNrKQotewot
ICAgIG1faW50ZXJuYWwtPnN0ZW5jaWxNYXNrU2VwYXJhdGUoZmFjZSwgbWFzayk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxPcChHQzNEZW51bSBmYWlsLCBHQzNEZW51bSB6
ZmFpbCwgR0MzRGVudW0genBhc3MpCi17Ci0gICAgbV9pbnRlcm5hbC0+c3RlbmNpbE9wKGZhaWws
IHpmYWlsLCB6cGFzcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxPcFNl
cGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZhaWwsIEdDM0RlbnVtIHpmYWlsLCBHQzNE
ZW51bSB6cGFzcykKLXsKLSAgICBtX2ludGVybmFsLT5zdGVuY2lsT3BTZXBhcmF0ZShmYWNlLCBm
YWlsLCB6ZmFpbCwgenBhc3MpOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFn
ZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3Jt
YXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdD
M0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKQotewotICAg
IHJldHVybiBtX2ludGVybmFsLT50ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9y
bWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dGV4UGFyYW1ldGVyZihHQzNEZW51bSB0YXJnZXQsIEdD
M0RlbnVtIHBhcmFtTmFtZSwgR0MzRGZsb2F0IHBhcmFtKQotewotICAgIG1faW50ZXJuYWwtPnRl
eFBhcmFtZXRlcmYodGFyZ2V0LCBwYXJhbU5hbWUsIHBhcmFtKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6dGV4UGFyYW1ldGVyaShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBhcmFt
TmFtZSwgR0MzRGludCBwYXJhbSkKLXsKLSAgICBtX2ludGVybmFsLT50ZXhQYXJhbWV0ZXJpKHRh
cmdldCwgcGFyYW1OYW1lLCBwYXJhbSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnRl
eFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhPZmZz
ZXQsIEdDM0RpbnQgeU9mZnNldCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBH
QzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKLXsKLSAg
ICBtX2ludGVybmFsLT50ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhPZmZzZXQsIHlPZmZz
ZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6dW5pZm9ybTFmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB4KQot
ewotICAgIG1faW50ZXJuYWwtPnVuaWZvcm0xZihsb2NhdGlvbiwgeCk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2
LCBHQzNEc2l6ZWkgc2l6ZSkKLXsKLSAgICBtX2ludGVybmFsLT51bmlmb3JtMWZ2KGxvY2F0aW9u
LCBzaXplLCB2KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFpKEdDM0Rp
bnQgbG9jYXRpb24sIEdDM0RpbnQgeCkKLXsKLSAgICBtX2ludGVybmFsLT51bmlmb3JtMWkobG9j
YXRpb24sIHgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWl2KEdDM0Rp
bnQgbG9jYXRpb24sIEdDM0RpbnQqIHYsIEdDM0RzaXplaSBzaXplKQotewotICAgIG1faW50ZXJu
YWwtPnVuaWZvcm0xaXYobG9jYXRpb24sIHNpemUsIHYpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjp1bmlmb3JtMmYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIGZsb2F0IHkp
Ci17Ci0gICAgbV9pbnRlcm5hbC0+dW5pZm9ybTJmKGxvY2F0aW9uLCB4LCB5KTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxv
YXQqIHYsIEdDM0RzaXplaSBzaXplKQotewotICAgIG1faW50ZXJuYWwtPnVuaWZvcm0yZnYobG9j
YXRpb24sIHNpemUsIHYpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMmko
R0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHkpCi17Ci0gICAgbV9pbnRlcm5h
bC0+dW5pZm9ybTJpKGxvY2F0aW9uLCB4LCB5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6dW5pZm9ybTJpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6
ZSkKLXsKLSAgICBtX2ludGVybmFsLT51bmlmb3JtMml2KGxvY2F0aW9uLCBzaXplLCB2KTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTNmKEdDM0RpbnQgbG9jYXRpb24sIEdD
M0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHopCi17Ci0gICAgbV9pbnRlcm5hbC0+
dW5pZm9ybTNmKGxvY2F0aW9uLCB4LCB5LCB6KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6dW5pZm9ybTNmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBz
aXplKQotewotICAgIG1faW50ZXJuYWwtPnVuaWZvcm0zZnYobG9jYXRpb24sIHNpemUsIHYpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2koR0MzRGludCBsb2NhdGlvbiwg
R0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RpbnQgeikKLXsKLSAgICBtX2ludGVybmFsLT51bmlm
b3JtM2kobG9jYXRpb24sIHgsIHksIHopOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1
bmlmb3JtM2l2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQqIHYsIEdDM0RzaXplaSBzaXplKQot
ewotICAgIG1faW50ZXJuYWwtPnVuaWZvcm0zaXYobG9jYXRpb24sIHNpemUsIHYpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZs
b2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeiwgR0MzRGZsb2F0IHcpCi17Ci0gICAgbV9p
bnRlcm5hbC0+dW5pZm9ybTRmKGxvY2F0aW9uLCB4LCB5LCB6LCB3KTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6dW5pZm9ybTRmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQqIHYs
IEdDM0RzaXplaSBzaXplKQotewotICAgIG1faW50ZXJuYWwtPnVuaWZvcm00ZnYobG9jYXRpb24s
IHNpemUsIHYpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGkoR0MzRGlu
dCBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RpbnQgeiwgR0MzRGludCB3KQot
ewotICAgIG1faW50ZXJuYWwtPnVuaWZvcm00aShsb2NhdGlvbiwgeCwgeSwgeiwgdyk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00aXYoR0MzRGludCBsb2NhdGlvbiwgR0Mz
RGludCogdiwgR0MzRHNpemVpIHNpemUpCi17Ci0gICAgbV9pbnRlcm5hbC0+dW5pZm9ybTRpdihs
b2NhdGlvbiwgc2l6ZSwgdik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm1N
YXRyaXgyZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxv
YXQqIHZhbHVlLCBHQzNEc2l6ZWkgc2l6ZSkKLXsKLSAgICBtX2ludGVybmFsLT51bmlmb3JtTWF0
cml4MmZ2KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDNmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEYm9v
bGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdmFsdWUsIEdDM0RzaXplaSBzaXplKQotewotICAg
IG1faW50ZXJuYWwtPnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwg
dmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4NGZ2KEdD
M0RpbnQgbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiB2YWx1ZSwg
R0MzRHNpemVpIHNpemUpCi17Ci0gICAgbV9pbnRlcm5hbC0+dW5pZm9ybU1hdHJpeDRmdihsb2Nh
dGlvbiwgc2l6ZSwgdHJhbnNwb3NlLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnVzZVByb2dyYW0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQotewotICAgIG1faW50ZXJu
YWwtPnVzZVByb2dyYW0ocHJvZ3JhbSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZh
bGlkYXRlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCi17Ci0gICAgbV9pbnRlcm5h
bC0+dmFsaWRhdGVQcm9ncmFtKHByb2dyYW0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
Ojp2ZXJ0ZXhBdHRyaWIxZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgpCi17Ci0gICAgbV9p
bnRlcm5hbC0+dmVydGV4QXR0cmliMWYoaW5kZXgsIHgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjp2ZXJ0ZXhBdHRyaWIxZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdmFsdWVz
KQotewotICAgIG1faW50ZXJuYWwtPnZlcnRleEF0dHJpYjFmdihpbmRleCwgdmFsdWVzKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliMmYoR0MzRHVpbnQgaW5kZXgs
IEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSkKLXsKLSAgICBtX2ludGVybmFsLT52ZXJ0ZXhBdHRy
aWIyZihpbmRleCwgeCwgeSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0
dHJpYjJmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2YWx1ZXMpCi17Ci0gICAgbV9pbnRl
cm5hbC0+dmVydGV4QXR0cmliMmZ2KGluZGV4LCB2YWx1ZXMpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIzZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgsIEdD
M0RmbG9hdCB5LCBHQzNEZmxvYXQgeikKLXsKLSAgICBtX2ludGVybmFsLT52ZXJ0ZXhBdHRyaWIz
ZihpbmRleCwgeCwgeSwgeik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0
dHJpYjNmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2YWx1ZXMpCi17Ci0gICAgbV9pbnRl
cm5hbC0+dmVydGV4QXR0cmliM2Z2KGluZGV4LCB2YWx1ZXMpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWI0ZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgsIEdD
M0RmbG9hdCB5LCBHQzNEZmxvYXQgeiwgR0MzRGZsb2F0IHcpCi17Ci0gICAgbV9pbnRlcm5hbC0+
dmVydGV4QXR0cmliNGYoaW5kZXgsIHgsIHksIHosIHcpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjp2ZXJ0ZXhBdHRyaWI0ZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdmFsdWVz
KQotewotICAgIG1faW50ZXJuYWwtPnZlcnRleEF0dHJpYjRmdihpbmRleCwgdmFsdWVzKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliUG9pbnRlcihHQzNEdWludCBp
bmRleCwgR0MzRGludCBzaXplLCBHQzNEZW51bSB0eXBlLCBHQzNEYm9vbGVhbiBub3JtYWxpemVk
LCBHQzNEc2l6ZWkgc3RyaWRlLCBHQzNEaW50cHRyIG9mZnNldCkKLXsKLSAgICBtX2ludGVybmFs
LT52ZXJ0ZXhBdHRyaWJQb2ludGVyKGluZGV4LCBzaXplLCB0eXBlLCBub3JtYWxpemVkLCBzdHJp
ZGUsIG9mZnNldCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZpZXdwb3J0KEdDM0Rp
bnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCi17Ci0g
ICAgbV9pbnRlcm5hbC0+dmlld3BvcnQoeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om1hcmtDb250
ZXh0Q2hhbmdlZCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6bWFya0xheWVyQ29tcG9zaXRlZCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6bGF5ZXJDb21wb3NpdGVkKCkgY29uc3QK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dCogY29udGV4dCwgRHJhd2luZ0J1ZmZlciogZHJhd2luZ0J1ZmZlcikKLXsK
LSAgICAvLyBEcmF3aW5nQnVmZmVyIHN1cHBvcnQgb25seSBpbXBsZW1lbnRlZCBpbiBDaHJvbWl1
bSBwb3J0cy4KLSAgICBBU1NFUlQoIWRyYXdpbmdCdWZmZXIpOwotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci19Ci0KLVBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRS
ZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoRHJhd2luZ0J1ZmZlciogZHJhd2luZ0J1ZmZlcikK
LXsKLSAgICAvLyBEcmF3aW5nQnVmZmVyIHN1cHBvcnQgb25seSBpbXBsZW1lbnRlZCBpbiBDaHJv
bWl1bSBwb3J0cy4KLSAgICBBU1NFUlQoIWRyYXdpbmdCdWZmZXIpOwotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVh
dGUoSW50U2l6ZSgxLCAxKSk7Ci0gICAgcmV0dXJuIGltYWdlRGF0YS5yZWxlYXNlKCk7Ci19Ci0K
LVBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZUJ1ZmZlcigpCi17Ci0g
ICAgcmV0dXJuIG1faW50ZXJuYWwtPmNyZWF0ZUJ1ZmZlcigpOwotfQotCi1QbGF0Zm9ybTNET2Jq
ZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVGcmFtZWJ1ZmZlcigpCi17Ci0gICAgcmV0dXJu
IG1faW50ZXJuYWwtPmNyZWF0ZUZyYW1lYnVmZmVyKCk7Ci19Ci0KLVBsYXRmb3JtM0RPYmplY3Qg
R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVByb2dyYW0oKQotewotICAgIHJldHVybiBtX2ludGVy
bmFsLT5jcmVhdGVQcm9ncmFtKCk7Ci19Ci0KLVBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250
ZXh0M0Q6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCi17Ci0gICAgcmV0dXJuIG1faW50ZXJuYWwtPmNy
ZWF0ZVJlbmRlcmJ1ZmZlcigpOwotfQotCi1QbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4
dDNEOjpjcmVhdGVTaGFkZXIoR0MzRGVudW0gdHlwZSkKLXsKLSAgICByZXR1cm4gbV9pbnRlcm5h
bC0+Y3JlYXRlU2hhZGVyKHR5cGUpOwotfQotCi1QbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29u
dGV4dDNEOjpjcmVhdGVUZXh0dXJlKCkKLXsKLSAgICByZXR1cm4gbV9pbnRlcm5hbC0+Y3JlYXRl
VGV4dHVyZSgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVCdWZmZXIoUGxh
dGZvcm0zRE9iamVjdCBidWZmZXIpCi17Ci0gICAgbV9pbnRlcm5hbC0+ZGVsZXRlQnVmZmVyKGJ1
ZmZlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZUZyYW1lYnVmZmVyKFBs
YXRmb3JtM0RPYmplY3QgYnVmZmVyKQotewotICAgIG1faW50ZXJuYWwtPmRlbGV0ZUZyYW1lYnVm
ZmVyKGJ1ZmZlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVByb2dyYW0o
UGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQotewotICAgIG1faW50ZXJuYWwtPmRlbGV0ZVByb2dy
YW0ocHJvZ3JhbSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVJlbmRlcmJ1
ZmZlcihQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcikKLXsKLSAgICBtX2ludGVybmFsLT5kZWxldGVS
ZW5kZXJidWZmZXIoYnVmZmVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRl
U2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQotewotICAgIG1faW50ZXJuYWwtPmRlbGV0
ZVNoYWRlcihzaGFkZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVUZXh0
dXJlKFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSkKLXsKLSAgICBtX2ludGVybmFsLT5kZWxldGVU
ZXh0dXJlKHRleHR1cmUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzeW50aGVzaXpl
R0xFcnJvcihHQzNEZW51bSBlcnJvcikKLXsKLSAgICBtX2ludGVybmFsLT5zeW50aGVzaXplR0xF
cnJvcihlcnJvcik7Ci19Ci0KLUV4dGVuc2lvbnMzRCogR3JhcGhpY3NDb250ZXh0M0Q6OmdldEV4
dGVuc2lvbnMoKQotewotICAgIHJldHVybiBtX2ludGVybmFsLT5nZXRFeHRlbnNpb25zKCk7Ci19
Ci0KLUludFNpemUgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEludGVybmFsRnJhbWVidWZmZXJTaXpl
KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBJbnRTaXplKCk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNldENvbnRleHRMb3N0Q2FsbGJhY2soUGFzc093blB0
cjxDb250ZXh0TG9zdENhbGxiYWNrPikKK1BsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgR3JhcGhp
Y3NDb250ZXh0M0Q6OnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdAogewotICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bV9jb250ZXh0OwogfQogCi1i
b29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEoSW1hZ2UqIGltYWdlLCBHQzNEZW51
bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9m
aWxlLCBWZWN0b3I8dWludDhfdD4mIG91dHB1dFZlY3RvcikKK2Jvb2wgR3JhcGhpY3NDb250ZXh0
M0Q6OmlzR0xFUzJDb21wbGlhbnQoKSBjb25zdAogewotICAgIG5vdEltcGxlbWVudGVkKCk7CiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuY3BwCmluZGV4IDcz
MzIwZDE4NzA1ZDI5MTY0YmQ5NWJhN2QxNzJmYTg2YmI4OGYwNDcuLjY3ZDQyYmE4Njg0NTIyYTEz
MzI1ZWQ1ZjRmZDY5M2ZkN2I2NTg4YzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuY3BwCkBA
IC0zNSw3ICszNSw3IEBACiAjaWYgUExBVEZPUk0oTUFDKQogI2luY2x1ZGUgIkFOR0xFL1NoYWRl
ckxhbmcuaCIKICNpbmNsdWRlIDxPcGVuR0wvZ2wuaD4KLSNlbGlmIFBMQVRGT1JNKEdUSykKKyNl
bGlmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oRUZMKQogI2luY2x1ZGUgIk9wZW5HTFNoaW1z
LmgiCiAjZWxpZiBQTEFURk9STShRVCkKICNpbmNsdWRlIDxjYWlyby9PcGVuR0xTaGltcy5oPgpA
QCAtMTQ5LDcgKzE0OSw3IEBAIHZvaWQgRXh0ZW5zaW9uczNET3BlbkdMOjpyZW5kZXJidWZmZXJT
dG9yYWdlTXVsdGlzYW1wbGUodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuCiBQbGF0Zm9ybTNET2Jq
ZWN0IEV4dGVuc2lvbnMzRE9wZW5HTDo6Y3JlYXRlVmVydGV4QXJyYXlPRVMoKQogewogICAgIG1f
Y29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0jaWYgIVBMQVRGT1JNKEdUSykgJiYgIVBM
QVRGT1JNKFFUKSAmJiBkZWZpbmVkKEdMX0FQUExFX3ZlcnRleF9hcnJheV9vYmplY3QpICYmIEdM
X0FQUExFX3ZlcnRleF9hcnJheV9vYmplY3QKKyNpZiAhUExBVEZPUk0oR1RLKSAmJiAhUExBVEZP
Uk0oUVQpICYmICFQTEFURk9STShFRkwpICYmIGRlZmluZWQoR0xfQVBQTEVfdmVydGV4X2FycmF5
X29iamVjdCkgJiYgR0xfQVBQTEVfdmVydGV4X2FycmF5X29iamVjdAogICAgIEdMdWludCBhcnJh
eSA9IDA7CiAgICAgZ2xHZW5WZXJ0ZXhBcnJheXNBUFBMRSgxLCAmYXJyYXkpOwogICAgIHJldHVy
biBhcnJheTsKQEAgLTE2NCw3ICsxNjQsNyBAQCB2b2lkIEV4dGVuc2lvbnMzRE9wZW5HTDo6ZGVs
ZXRlVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCBhcnJheSkKICAgICAgICAgcmV0dXJu
OwogICAgIAogICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0jaWYgIVBMQVRG
T1JNKEdUSykgJiYgIVBMQVRGT1JNKFFUKSAmJiBkZWZpbmVkKEdMX0FQUExFX3ZlcnRleF9hcnJh
eV9vYmplY3QpICYmIEdMX0FQUExFX3ZlcnRleF9hcnJheV9vYmplY3QKKyNpZiAhUExBVEZPUk0o
R1RLKSAmJiAhUExBVEZPUk0oUVQpICYmICFQTEFURk9STShFRkwpICYmIGRlZmluZWQoR0xfQVBQ
TEVfdmVydGV4X2FycmF5X29iamVjdCkgJiYgR0xfQVBQTEVfdmVydGV4X2FycmF5X29iamVjdAog
ICAgIGdsRGVsZXRlVmVydGV4QXJyYXlzQVBQTEUoMSwgJmFycmF5KTsKICNlbmRpZgogfQpAQCAt
MTc1LDcgKzE3NSw3IEBAIEdDM0Rib29sZWFuIEV4dGVuc2lvbnMzRE9wZW5HTDo6aXNWZXJ0ZXhB
cnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0IGFycmF5KQogICAgICAgICByZXR1cm4gR0xfRkFMU0U7
CiAgICAgCiAgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSNpZiAhUExBVEZP
Uk0oR1RLKSAmJiAhUExBVEZPUk0oUVQpICYmIGRlZmluZWQoR0xfQVBQTEVfdmVydGV4X2FycmF5
X29iamVjdCkgJiYgR0xfQVBQTEVfdmVydGV4X2FycmF5X29iamVjdAorI2lmICFQTEFURk9STShH
VEspICYmICFQTEFURk9STShRVCkgJiYgIVBMQVRGT1JNKEVGTCkgJiYgZGVmaW5lZChHTF9BUFBM
RV92ZXJ0ZXhfYXJyYXlfb2JqZWN0KSAmJiBHTF9BUFBMRV92ZXJ0ZXhfYXJyYXlfb2JqZWN0CiAg
ICAgcmV0dXJuIGdsSXNWZXJ0ZXhBcnJheUFQUExFKGFycmF5KTsKICNlbHNlCiAgICAgcmV0dXJu
IEdMX0ZBTFNFOwpAQCAtMTg4LDcgKzE4OCw3IEBAIHZvaWQgRXh0ZW5zaW9uczNET3BlbkdMOjpi
aW5kVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCBhcnJheSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSNpZiAhUExBVEZPUk0o
R1RLKSAmJiAhUExBVEZPUk0oUVQpICYmIGRlZmluZWQoR0xfQVBQTEVfdmVydGV4X2FycmF5X29i
amVjdCkgJiYgR0xfQVBQTEVfdmVydGV4X2FycmF5X29iamVjdAorI2lmICFQTEFURk9STShHVEsp
ICYmICFQTEFURk9STShRVCkgJiYgIVBMQVRGT1JNKEVGTCkgJiYgZGVmaW5lZChHTF9BUFBMRV92
ZXJ0ZXhfYXJyYXlfb2JqZWN0KSAmJiBHTF9BUFBMRV92ZXJ0ZXhfYXJyYXlfb2JqZWN0CiAgICAg
Z2xCaW5kVmVydGV4QXJyYXlBUFBMRShhcnJheSk7CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9w
ZW5HTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0M0RPcGVuR0wuY3BwCmluZGV4IDQ3YTQxYzZkMDAyNjViMGNiYTlhNDRmZmNjNDEx
MDZhZTliYTA3NzUuLmUyM2M5NTEzYWUwYzU0ZDc0NmNhNTljMTk2OTkzZTA1NGViNWMxNjMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGlj
c0NvbnRleHQzRE9wZW5HTC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcApAQCAtMzQsNyArMzQsNyBAQAog
CiAjaWYgUExBVEZPUk0oTUFDKQogI2luY2x1ZGUgPE9wZW5HTC9nbC5oPgotI2VsaWYgUExBVEZP
Uk0oR1RLKQorI2VsaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShFRkwpCiAjaW5jbHVkZSAi
T3BlbkdMU2hpbXMuaCIKICNlbGlmIFBMQVRGT1JNKFFUKQogI2luY2x1ZGUgPFF0R2xvYmFsPgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBo
aWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAKaW5kZXggZTY4
YmJhN2ZkN2Y1MTlmZDc4YzE2OWE3MjkzYzliMmFkNTI2MGRlOC4uMGVjNGRmOWU5NGVkN2E4NWJi
YzNlYWVkZTk0ZDAyZDgzMmYxZDU5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
M0RPcGVuR0xDb21tb24uY3BwCkBAIC00OCw3ICs0OCw3IEBACiAKICNpZiBQTEFURk9STShNQUMp
CiAjaW5jbHVkZSA8T3BlbkdML2dsLmg+Ci0jZWxpZiBQTEFURk9STShHVEspCisjZWxpZiBQTEFU
Rk9STShHVEspIHx8IFBMQVRGT1JNKEVGTCkKICNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgogI2Vs
aWYgUExBVEZPUk0oUVQpCiAjaW5jbHVkZSA8UXRHbG9iYWw+CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192
aWV3LmNwcAppbmRleCBhNjhiYmFiYmU4ZDkzZDdkYzhlNzBkNzkxYzY1MDc2NGJhMTEzZGM5Li5i
MmUzN2YzNmFjNjVhZWQ5MDE4ZTlhZGQ2MzQyNmU0Y2JmYjY0MDlmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3
ay9ld2tfdmlldy5jcHAKQEAgLTY0OCw2ICs2NDgsNyBAQCBzdGF0aWMgRXdrX1ZpZXdfUHJpdmF0
ZV9EYXRhKiBfZXdrX3ZpZXdfcHJpdl9uZXcoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRh
KQogICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0T2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVF
bmFibGVkKHRydWUpOwogICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0VXNlc1BhZ2VDYWNoZSh0
cnVlKTsKICAgICBwcml2LT5wYWdlU2V0dGluZ3MtPnNldFVzZXNFbmNvZGluZ0RldGVjdG9yKGZh
bHNlKTsKKyAgICBwcml2LT5wYWdlU2V0dGluZ3MtPnNldFdlYkdMRW5hYmxlZCh0cnVlKTsKIAog
ICAgIHVybCA9IHByaXYtPnBhZ2VTZXR0aW5ncy0+dXNlclN0eWxlU2hlZXRMb2NhdGlvbigpOwog
ICAgIHByaXYtPnNldHRpbmdzLnVzZXJTdHlsZXNoZWV0ID0gZWluYV9zdHJpbmdzaGFyZV9hZGQo
dXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL09w
dGlvbnNFZmwuY21ha2UgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc0VmbC5jbWFrZQppbmRleCAyZjJh
YmY0YTM0MzljMThmMjM3ZWZkZTBhMjI0NTAyOTQ0MmVmY2U5Li40OWE0ZTc0ZDA5MzUyMWFlNGRj
MDljNDNkMWVmMmU2NDE3OWZmN2FiIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2UvT3B0aW9uc0Vm
bC5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc0VmbC5jbWFrZQpAQCAtOTUsNiArOTUs
NyBAQCBXRUJLSVRfRkVBVFVSRShFTkFCTEVfVE9VQ0hfRVZFTlRTICJFbmFibGUgVG91Y2ggRXZl
bnRzIiBERUZBVUxUIE9GRikKIFdFQktJVF9GRUFUVVJFKEVOQUJMRV9UT1VDSF9JQ09OX0xPQURJ
TkcgIkVuYWJsZSBUb3VjaCBJY29uIExvYWRpbmciIERFRkFVTFQgT0ZGKQogV0VCS0lUX0ZFQVRV
UkUoRU5BQkxFX1ZJREVPICJFbmFibGUgdmlkZW8iIERFRkFVTFQgT04pCiBXRUJLSVRfRkVBVFVS
RShFTkFCTEVfV0VCX1NPQ0tFVFMgIkVuYWJsZSB3ZWIgc29ja2V0cyIgREVGQVVMVCBPTikKK1dF
QktJVF9GRUFUVVJFKEVOQUJMRV9XRUJHTCAiRW5hYmxlIFdlYkdMIiBERUZBVUxUIE9GRikKIFdF
QktJVF9GRUFUVVJFKEVOQUJMRV9XT1JLRVJTICJFbmFibGUgd29ya2VycyIgREVGQVVMVCBPTikK
IFdFQktJVF9GRUFUVVJFKEVOQUJMRV9YU0xUICJFbmFibGUgWFNMVCIgREVGQVVMVCBPTikKIApk
aWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCmluZGV4IDBlMjdjZTNkZjMzMDRjNWE2
YTBhYTA0YzZmNTQ2N2ZiNDE5ZDFkZWEuLjYyZDlmMmFjMTU5YmMzODA4MjE0YmJhOGRmZWFmZWM1
NzI4ZTBhMTQgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxNCBAQAorMjAxMi0wMS0zMCAgQ2hhbmdTZW9rIE9oICA8c2hpdmFtaWRvd0BnbWFpbC5jb20+
CisKKyAgICAgICAgW0VGTF0gRW5hYmxlIFdlYkdMIHdpdGggZ2x4IGJhY2tlbmQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3MzA4CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRW5hYmxlZCBXZWJHTCBmZWF0
dXJlIGZvciBFRkwgcG9ydC4gVGhlIHdheSBpcyB2ZXJ5IHNpbWlsYXIgdG8gdGhlIG9uZSBvZiBH
VEsgcG9ydC4KKworICAgICAgICAqIFNvdXJjZS9jbWFrZS9PcHRpb25zRWZsLmNtYWtlOiBBZGRl
ZCBmZWF0dXJlIG9wdGlvbiBmb3IgV2ViR0wuCisKIDIwMTItMDEtMzAgIEFsbGFuIFNhbmRmZWxk
IEplbnNlbiAgPGFsbGFuLmplbnNlbkBub2tpYS5jb20+CiAKICAgICAgICAgTWFudWFsIHRlc3Qg
b2YgbnVtYmVyIG9mIHJlc2l6ZSBldmVudHMgZW1pdHRlZCBkdXJpbmcgcGFnZSBnZW5lcmF0aW9u
Lgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124747</attachid>
            <date>2012-01-31 08:54:18 -0800</date>
            <delta_ts>2012-02-04 02:32:00 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77308-20120201015413.patch</filename>
            <type>text/plain</type>
            <size>53302</size>
            <attacher name="ChangSeok Oh">kevin.cs.oh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2MzU3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTBlZTg3MDNlMTg2YmEx
OTUyNDBkYzk2YzE1OTQyOGYyNzBmYTIxMy4uNjJkNDE1ODE1ZDgxNDZjNGM3NTU2ZjgwNGQ5NmRi
NGY5ZWQzMDQ0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDEyLTAxLTMxICBDaGFu
Z1Nlb2sgT2ggIDxzaGl2YW1pZG93QGdtYWlsLmNvbT4KKworICAgICAgICBbRUZMXSBFbmFibGUg
V2ViR0wgd2l0aCBnbHggYmFja2VuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NzczMDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBJbXBsZW1lbnRlZCBXZWJHTCBmZWF0dXJlIGZvciBFRkwgcG9ydC4gVGhl
IHdheSBpcyB2ZXJ5IHNpbWlsYXIgdG8gdGhlIG9uZSBvZiBHVEsgcG9ydC4KKworICAgICAgICBO
byBuZXcgdGVzdHMgcmVxdWlyZWQuIFdlIGNhbiB2ZXJpZnkgdGhpcyBmZWF0dXJlIHdpdGggdGhl
IGV4aXN0aW5nIHRlc3QgY2FzZXMuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDogUmV2aXNl
ZCBjb21tb24gZmlsZXMgcmVxdWlyZWQgZm9yIFdlYkdMLgorICAgICAgICAqIFBsYXRmb3JtRWZs
LmNtYWtlOiBBZGRlZCBFRkwgc3BlY2lmaWMgZmlsZXMuCisgICAgICAgICogaHRtbC9IVE1MQ2Fu
dmFzRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6Z2V0
Q29udGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2Uu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGxh
dGZvcm1UZXh0dXJlKToKKyAgICAgICAgKEdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludHNJbnRvQ2FudmFzQnVmZmVyKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9lZmwvRHJhd2luZ0J1ZmZlckVmbC5jcHA6IENvcGllZCBm
cm9tIEdUSyBwb3J0LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3
aW5nQnVmZmVyOjpEcmF3aW5nQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZm
ZXI6On5EcmF3aW5nQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OnBs
YXRmb3JtQ29sb3JCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6cGFp
bnRDb21wb3NpdGVkUmVzdWx0c1RvQ2FudmFzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9lZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwOiBBbG1vc3Qgc2FtZSB3aXRoIEdyYXBoaWNz
Q29udGV4dDNER3RrLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29u
dGV4dDNEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp+R3JhcGhpY3ND
b250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6Om1ha2VDb250
ZXh0Q3VycmVudCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZv
cm1HcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6aXNHTEVTMkNvbXBsaWFudCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0V4dGVuc2lvbnMzRE9wZW5HTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RP
cGVuR0w6OmNyZWF0ZVZlcnRleEFycmF5T0VTKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lv
bnMzRE9wZW5HTDo6ZGVsZXRlVmVydGV4QXJyYXlPRVMpOgorICAgICAgICAoV2ViQ29yZTo6RXh0
ZW5zaW9uczNET3BlbkdMOjppc1ZlcnRleEFycmF5T0VTKToKKyAgICAgICAgKFdlYkNvcmU6OkV4
dGVuc2lvbnMzRE9wZW5HTDo6YmluZFZlcnRleEFycmF5T0VTKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5j
cHA6CisKIDIwMTItMDEtMzEgIEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuICA8a2VubmV0aEB3
ZWJraXQub3JnPgogCiAgICAgICAgIFRhcCBoaWdobGlnaHRpbmc6IFN1cHBvcnQgYmV0dGVyIG91
dGxpbmVzIGZvciBtdWx0aWxpbmUgaW5saW5lcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9l
ZmwvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCmluZGV4IGI3NWIxNjAz
Nzk1OTBmMjE2YjM0NzRiYzY4MzFjNDM4ZmMyODA0M2QuLjBkMzJkMzUwZjFkNDc0NzNmMmQxMmM3
ZGJjZTFiMjMxNjE3NjkwODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAx
Mi0wMS0zMSAgQ2hhbmdTZW9rIE9oICA8c2hpdmFtaWRvd0BnbWFpbC5jb20+CisKKyAgICAgICAg
W0VGTF0gRW5hYmxlIFdlYkdMIHdpdGggZ2x4IGJhY2tlbmQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3MzA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWN0aXZhdGVkIFdlYkdMIGZlYXR1cmUuCisKKyAg
ICAgICAgKiBld2svZXdrX3ZpZXcuY3BwOgorICAgICAgICAoX0V3a19WaWV3X1ByaXZhdGVfRGF0
YSk6CisgICAgICAgIChfZXdrX3ZpZXdfcHJpdl9uZXcpOgorCiAyMDEyLTAxLTMwICBFdW5zb2wg
UGFyayAgPGV1bnNvbDQ3LnBhcmtAc2Ftc3VuZy5jb20+CiAKICAgICAgICAgW0VGTF0gRGVmaW5l
IHRoZSBuYW1lcyBvZiB2aWV3IHNtYXJ0IGNsYXNzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDc3
ZWYwYzI0ZTFiMzYzZjQ5Yjg1YzI1NmIzZTE1MTg2Y2Y5YWNmZDguLjgxODExOWIxOTdlOWFiMDkw
ZWU2MGRkYjFlNmY1NmUxM2ZkNjBjN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0yMTM5LDIx
ICsyMTM5LDI3IEBAIElGIChFTkFCTEVfV0VCR0wpCiAgICAgICAgICR7REVSSVZFRF9TT1VSQ0VT
X1dFQkNPUkVfRElSfS9nbHNsYW5nLmNwcAogICAgICAgICAke0RFUklWRURfU09VUkNFU19XRUJD
T1JFX0RJUn0vZ2xzbGFuZ190YWIuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xF
L3NyYy9jb21waWxlci9Db2RlR2VuR0xTTC5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0v
QU5HTEUvc3JjL2NvbXBpbGVyL0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcAorICAgICAgICAk
e1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvQ29kZUdlbkdMU0wuY3BwCiAgICAg
ICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9Db21waWxlci5jcHAKICAg
ICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL2RlYnVnLmNwcAorICAg
ICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0UmVjdXJzaW9u
LmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvRm9yTG9v
cFVucm9sbC5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVy
L0luZm9TaW5rLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGls
ZXIvSW5pdGlhbGl6ZS5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2Nv
bXBpbGVyL0luaXRpYWxpemVEbGwuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xF
L3NyYy9jb21waWxlci9JbnRlcm1lZGlhdGUuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9
L0FOR0xFL3NyYy9jb21waWxlci9pbnRlcm1PdXQuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9E
SVJ9L0FOR0xFL3NyYy9jb21waWxlci9JbnRlcm1UcmF2ZXJzZS5jcHAKKyAgICAgICAgJHtUSElS
RFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL01hcExvbmdWYXJpYWJsZU5hbWVzLmNwcAog
ICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvb3Nzb3VyY2VfcG9z
aXguY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9PdXRw
dXRFU1NMLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIv
T3V0cHV0R0xTTC5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBp
bGVyL091dHB1dEdMU0xCYXNlLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9z
cmMvY29tcGlsZXIvT3V0cHV0SExTTC5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5H
TEUvc3JjL2NvbXBpbGVyL3BhcnNlQ29uc3QuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9
L0FOR0xFL3NyYy9jb21waWxlci9QYXJzZUhlbHBlci5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZ
X0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5jcHAKLSAgICAgICAgJHtUSElSRFBB
UlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3NvcgogICAgICAgICAke1RISVJE
UEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uYwogICAgICAg
ICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5j
CiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvY3Bwc3RydWN0LmMKQEAgLTIxNjcsMTMgKzIxNzMsMTMgQEAgSUYgKEVOQUJMRV9XRUJHTCkK
ICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1NoYWRlckxhbmcu
Y3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9TeW1ib2xU
YWJsZS5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1Zl
cnNpb25HTFNMLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGls
ZXIvVHJhbnNsYXRvckVTU0wuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3Ny
Yy9jb21waWxlci9UcmFuc2xhdG9yR0xTTC5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0v
QU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JITFNMLmNwcAogICAgICAgICAke1RISVJEUEFS
VFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0LmNwcAogICAgICAgICAke1RI
SVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdXRpbC5jcHAKICAgICAgICAgJHtUSElS
RFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1ZhbGlkYXRlTGltaXRhdGlvbnMuY3BwCiAg
ICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9WYXJpYWJsZUluZm8u
Y3BwCi0KICAgICAgICAgaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuY3BwCiAgICAgICAgIGh0bWwv
Y2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVzLmNwcAogICAgICAgICBodG1sL2NhbnZhcy9X
ZWJHTENvbnRleHRBdHRyaWJ1dGVzLmNwcApAQCAtMjE5OCwxMSArMjIwNCw5IEBAIElGIChFTkFC
TEVfV0VCR0wpCiAgICAgICAgIGh0bWwvY2FudmFzL09FU1N0YW5kYXJkRGVyaXZhdGl2ZXMuY3Bw
CiAgICAgICAgIGh0bWwvY2FudmFzL09FU1RleHR1cmVGbG9hdC5jcHAKICAgICAgICAgaHRtbC9j
YW52YXMvT0VTVmVydGV4QXJyYXlPYmplY3QuY3BwCi0KICAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvQU5HTEVXZWJLaXRCcmlkZ2UuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dDNELmNwcAotICAgICAgICAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1
L0RyYXdpbmdCdWZmZXIuY3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dDNELmNwcAogICAgICkKICAgICBMSVNUKEFQUEVORCBXZWJDb3JlX0lETF9GSUxFUwogICAg
ICAgICBodG1sL2NhbnZhcy9PRVNTdGFuZGFyZERlcml2YXRpdmVzLmlkbApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bUVmbC5jbWFrZQppbmRleCAxYjJlMWU0MDY1MDUyZGEzNjUzMzc0NDRkZDI3MDNhNTg0YjgxNWRh
Li40Yzg3N2FlMGUxNTM4NmZlMzU0MWFhZjJmOWZlYjhmNDU5NmY4YWEzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybUVmbC5jbWFrZQpAQCAtMjgxLDcgKzI4MSw2IEBAIElGIChFTkFCTEVfVklERU8pCiAgICkK
IEVORElGICgpCiAKLQogSUYgKEVOQUJMRV9HTElCX1NVUFBPUlQpCiAgIExJU1QoQVBQRU5EIFdl
YkNvcmVfTElCUkFSSUVTCiAgICAgJHtHbGliX0xJQlJBUklFU30KQEAgLTI5NCwxMCArMjkzLDIz
IEBAIEVORElGICgpCiBJRiAoRU5BQkxFX1dFQkdMKQogICBMSVNUKEFQUEVORCBXZWJDb3JlX0lO
Q0xVREVfRElSRUNUT1JJRVMKICAgICAke09QRU5HTF9JTkNMVURFX0RJUn0KKyAgICAiJHtXRUJD
T1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8iCisgICAgIiR7V0VCQ09SRV9ESVJ9L3Bs
YXRmb3JtL2dyYXBoaWNzL2dseCIKKyAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsIgogICApCiAgIExJU1QoQVBQRU5EIFdlYkNvcmVfTElCUkFSSUVTCiAgICAgJHtP
UEVOR0xfZ2xfTElCUkFSWX0KICAgKQorICBMSVNUKEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKKyAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNwcAorICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL09wZW5HTFNoaW1zLmNwcAorICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2VmbC9EcmF3aW5nQnVmZmVyRWZsLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Vm
bC9HcmFwaGljc0NvbnRleHQzREVmbC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9nbHgvR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9F
eHRlbnNpb25zM0RPcGVuR0wuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBo
aWNzQ29udGV4dDNET3BlbkdMLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFw
aGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAKKyAgKQogRU5ESUYgKCkKIAogSUYgKFdURl9V
U0VfU09VUCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKaW5kZXgg
NjgxZmI5M2NhODRiZjU3YTJkYzZlOTIxM2FmYzEyODQ2NzA2YWMyOS4uODM5MDFiNDI0MzRkZTBk
ZGI0MmY3NmIzN2Q5YTg2Y2M5MWI4NDBlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2Fu
dmFzRWxlbWVudC5jcHAKQEAgLTE3Nyw3ICsxNzcsNyBAQCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
KiBIVE1MQ2FudmFzRWxlbWVudDo6Z2V0Q29udGV4dChjb25zdCBTdHJpbmcmIHR5cGUsIENhbnZh
cwogI2lmIEVOQUJMRShXRUJHTCkgICAgCiAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZG9jdW1l
bnQoKS0+c2V0dGluZ3MoKTsKICAgICBpZiAoc2V0dGluZ3MgJiYgc2V0dGluZ3MtPndlYkdMRW5h
YmxlZCgpCi0jaWYgIVBMQVRGT1JNKENIUk9NSVVNKSAmJiAhUExBVEZPUk0oR1RLKQorI2lmICFQ
TEFURk9STShDSFJPTUlVTSkgJiYgIVBMQVRGT1JNKEdUSykgJiYgIVBMQVRGT1JNKEVGTCkKICAg
ICAgICAgJiYgc2V0dGluZ3MtPmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKCkKICNlbmRp
ZgogICAgICAgICApIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0FOR0xFV2ViS2l0QnJpZGdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9BTkdMRVdlYktpdEJyaWRnZS5oCmluZGV4IDBmNGJmN2QwMDY2YWM4NDI4ZDg1Mzc4ZDBhMTA5
ODk0YTkwM2VkMGEuLmM2MzhiYzBmYzNjZDYxM2FiMGIzY2JlMGIwMjI2ODFlZDM3M2RhNDEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0FOR0xFV2ViS2l0QnJp
ZGdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRC
cmlkZ2UuaApAQCAtMzEsNyArMzEsNyBAQAogCiAjaWYgUExBVEZPUk0oUVQpCiAjaW5jbHVkZSAi
QU5HTEUvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaCIKLSNlbGlmICFQTEFURk9STShHVEsp
CisjZWxpZiAhUExBVEZPUk0oR1RLKSAmJiAhUExBVEZPUk0oRUZMKQogI2luY2x1ZGUgIkFOR0xF
L1NoYWRlckxhbmcuaCIKICNlbHNlCiAjaW5jbHVkZSAiU2hhZGVyTGFuZy5oIgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKaW5k
ZXggMzRjNTQ5YWI0ODczYzJiMTllZWUzNTdmM2YyMmZiNDVkZWU3NTg0Mi4uMWZmZmU5YTZiNjRl
ODViYWEyMGEyMWRhNTM4MjA1Zjk0YmQyOTM4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCkBAIC00Myw3ICs0Myw3IEBA
CiAjdW5kZWYgVkVSU0lPTgogI2VuZGlmCiAKLSNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JN
KEdUSykgfHwgUExBVEZPUk0oUVQpCisjaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShHVEsp
IHx8IFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShFRkwpCiAjaW5jbHVkZSAiQU5HTEVXZWJLaXRC
cmlkZ2UuaCIKICNlbmRpZgogCkBAIC01Nyw3ICs1Nyw3IEBAIFFUX0JFR0lOX05BTUVTUEFDRQog
Y2xhc3MgUVBhaW50ZXI7CiBjbGFzcyBRUmVjdDsKIFFUX0VORF9OQU1FU1BBQ0UKLSNlbGlmIFBM
QVRGT1JNKEdUSykKKyNlbGlmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oRUZMKQogdHlwZWRl
ZiB1bnNpZ25lZCBpbnQgR0x1aW50OwogI2VuZGlmCiAKQEAgLTgzLDcgKzgzLDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogY2xhc3MgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDsKIGNsYXNzIERyYXdp
bmdCdWZmZXI7CiBjbGFzcyBFeHRlbnNpb25zM0Q7Ci0jaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFU
Rk9STShHVEspIHx8IFBMQVRGT1JNKFFUKQorI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0o
R1RLKSB8fCBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oRUZMKQogY2xhc3MgRXh0ZW5zaW9uczNE
T3BlbkdMOwogI2VuZGlmCiAjaWYgUExBVEZPUk0oUVQpCkBAIC00OTMsNiArNDkzLDcgQEAgcHVi
bGljOgogI2VuZGlmCiAjZWxpZiBQTEFURk9STShFRkwpCiAgICAgUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQzRCBwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3Q7CisgICAgUGxhdGZvcm0z
RE9iamVjdCBwbGF0Zm9ybVRleHR1cmUoKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmU7IH0KICNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgUGxhdGZvcm1MYXllciogcGxhdGZv
cm1MYXllcigpIGNvbnN0OwogI2VuZGlmCkBAIC01MDUsNyArNTA2LDcgQEAgcHVibGljOgogI2Vu
ZGlmCiAgICAgYm9vbCBtYWtlQ29udGV4dEN1cnJlbnQoKTsKIAotI2lmIFBMQVRGT1JNKE1BQykg
fHwgUExBVEZPUk0oQ0hST01JVU0pIHx8IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oUVQpCisj
aWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShDSFJPTUlVTSkgfHwgUExBVEZPUk0oR1RLKSB8
fCBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oRUZMKQogICAgIC8vIFdpdGggbXVsdGlzYW1wbGlu
ZyBvbiwgYmxpdCBmcm9tIG11bHRpc2FtcGxlRkJPIHRvIHJlZ3VsYXIgRkJPLgogICAgIHZvaWQg
cHJlcGFyZVRleHR1cmUoKTsKICNlbmRpZgpAQCAtNzg0LDcgKzc4NSw3IEBAIHB1YmxpYzoKICNp
ZiBVU0UoQ0cpCiAgICAgc3RhdGljIHZvaWQgcGFpbnRUb0NhbnZhcyhjb25zdCB1bnNpZ25lZCBj
aGFyKiBpbWFnZVBpeGVscywgaW50IGltYWdlV2lkdGgsIGludCBpbWFnZUhlaWdodCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjYW52YXNXaWR0aCwgaW50IGNhbnZhc0hlaWdo
dCwgQ0dDb250ZXh0UmVmKTsKLSNlbGlmIFBMQVRGT1JNKEdUSykKKyNlbGlmIFBMQVRGT1JNKEdU
SykgfHwgUExBVEZPUk0oRUZMKQogICAgIHZvaWQgcGFpbnRUb0NhbnZhcyhjb25zdCB1bnNpZ25l
ZCBjaGFyKiBpbWFnZVBpeGVscywgaW50IGltYWdlV2lkdGgsIGludCBpbWFnZUhlaWdodCwKICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGNhbnZhc1dpZHRoLCBpbnQgY2FudmFzSGVpZ2h0LCBQ
bGF0Zm9ybUNvbnRleHRDYWlybyogY29udGV4dCk7CiAjZW5kaWYKQEAgLTgwMyw2ICs4MDQsOCBA
QCBwdWJsaWM6CiAgICAgYm9vbCBwYWludHNJbnRvQ2FudmFzQnVmZmVyKCkgY29uc3Q7CiAjZWxp
ZiBQTEFURk9STShHVEspCiAgICAgYm9vbCBwYWludHNJbnRvQ2FudmFzQnVmZmVyKCkgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQorI2VsaWYgUExBVEZPUk0oRUZMKQorICAgIGJvb2wgcGFpbnRzSW50
b0NhbnZhc0J1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICNlbHNlCiAgICAgYm9vbCBw
YWludHNJbnRvQ2FudmFzQnVmZmVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgpA
QCAtODkzLDcgKzg5Niw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgQWxwaGFPcCBh
bHBoYU9wLAogICAgICAgICAgICAgICAgICAgICB2b2lkKiBkZXN0aW5hdGlvbkRhdGEpOwogCi0j
aWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFFUKQorI2lmIFBM
QVRGT1JNKE1BQykgfHwgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShRVCkgfHwgUExBVEZPUk0o
RUZMKQogICAgIC8vIFRha2UgaW50byBhY2NvdW50IHRoZSB1c2VyJ3MgcmVxdWVzdGVkIGNvbnRl
eHQgY3JlYXRpb24gYXR0cmlidXRlcywKICAgICAvLyBpbiBwYXJ0aWN1bGFyIHN0ZW5jaWwgYW5k
IGFudGlhbGlhcywgYW5kIGRldGVybWluZSB3aGljaCBjb3VsZCBvcgogICAgIC8vIGNvdWxkIG5v
dCBiZSBob25vcmVkIGJhc2VkIG9uIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIE9wZW5HTApAQCAt
OTEzLDcgKzkxNiw3IEBAIHB1YmxpYzoKICAgICBSZXRhaW5QdHI8V2ViR0xMYXllcj4gbV93ZWJH
TExheWVyOwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKEdUSykgfHwg
UExBVEZPUk0oUVQpCisjaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShHVEspIHx8IFBMQVRG
T1JNKFFUKSB8fCBQTEFURk9STShFRkwpCiAgICAgdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgICBT
dHJpbmcgc291cmNlOwogICAgICAgICBTdHJpbmcgbG9nOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0RyYXdpbmdCdWZmZXJFZmwuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0RyYXdpbmdCdWZmZXJFZmwuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjFlNTAyYWU3YzliMTczOGVhZWQ2Y2ZiNjMyOGI4OGUwY2RlNzA4MTcKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvRHJhd2luZ0J1
ZmZlckVmbC5jcHAKQEAgLTAsMCArMSw5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYg
RU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykgfHwgRU5BQkxFKFdFQkdMKQorCisjaW5jbHVk
ZSAiRHJhd2luZ0J1ZmZlci5oIgorCisjaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworRHJhd2luZ0J1ZmZlcjo6RHJhd2luZ0J1ZmZlcihHcmFwaGljc0Nv
bnRleHQzRCogY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50
U2l6ZSYgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBtdWx0aXNhbXBs
ZUV4dGVuc2lvblN1cHBvcnRlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBw
YWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgc2VwYXJhdGVCYWNraW5nVGV4dHVyZSkKKyAgICA6IG1fc2VwYXJhdGVC
YWNraW5nVGV4dHVyZShzZXBhcmF0ZUJhY2tpbmdUZXh0dXJlKQorICAgICwgbV9zY2lzc29yRW5h
YmxlZChmYWxzZSkKKyAgICAsIG1fdGV4dHVyZTJEQmluZGluZygwKQorICAgICwgbV9hY3RpdmVU
ZXh0dXJlVW5pdChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApCisgICAgLCBtX2NvbnRleHQo
Y29udGV4dCkKKyAgICAsIG1fc2l6ZSgtMSwgLTEpCisgICAgLCBtX211bHRpc2FtcGxlRXh0ZW5z
aW9uU3VwcG9ydGVkKG11bHRpc2FtcGxlRXh0ZW5zaW9uU3VwcG9ydGVkKQorICAgICwgbV9wYWNr
ZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQocGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5z
aW9uU3VwcG9ydGVkKQorICAgICwgbV9mYm8oY29udGV4dC0+Y3JlYXRlRnJhbWVidWZmZXIoKSkK
KyAgICAsIG1fY29sb3JCdWZmZXIoMCkKKyAgICAsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKDApCisg
ICAgLCBtX2RlcHRoQnVmZmVyKDApCisgICAgLCBtX3N0ZW5jaWxCdWZmZXIoMCkKKyAgICAsIG1f
bXVsdGlzYW1wbGVGQk8oMCkKKyAgICAsIG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcigwKQorewor
ICAgIC8vIFN1cHBvcnQgZm9yIGEgc2VwYXJhdGUgYmFja2luZyB0ZXh0dXJlIGhhcyBvbmx5IGJl
ZW4gZW5hYmxlZCBmb3IKKyAgICAvLyB0aGUgY2hyb21pdW0gcG9ydC4KKyAgICBBU1NFUlQoIW1f
c2VwYXJhdGVCYWNraW5nVGV4dHVyZSk7CisgICAgQVNTRVJUKG1fZmJvKTsKKyAgICBpZiAoIW1f
ZmJvKSB7CisgICAgICAgIGNsZWFyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAv
LyBjcmVhdGUgYSB0ZXh0dXJlIHRvIHJlbmRlciBpbnRvCisgICAgbV9jb2xvckJ1ZmZlciA9IGNv
bnRleHQtPmNyZWF0ZVRleHR1cmUoKTsKKyAgICBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9jb2xvckJ1ZmZlcik7CisgICAgY29udGV4dC0+dGV4
UGFyYW1ldGVyZihHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7CisgICAg
Y29udGV4dC0+dGV4UGFyYW1ldGVyZihHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJ
TkVBUik7CisgICAgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TLCBHcmFwaGljc0NvbnRl
eHQzRDo6Q0xBTVBfVE9fRURHRSk7CisgICAgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9U
LCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSk7CisgICAgY29udGV4dC0+YmluZFRl
eHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDApOworCisgICAgY3JlYXRlU2Vj
b25kYXJ5QnVmZmVycygpOworICAgIHJlc2V0KHNpemUpOworfQorCitEcmF3aW5nQnVmZmVyOjp+
RHJhd2luZ0J1ZmZlcigpCit7CisgICAgY2xlYXIoKTsKK30KKworUGxhdGZvcm0zRE9iamVjdCBE
cmF3aW5nQnVmZmVyOjpwbGF0Zm9ybUNvbG9yQnVmZmVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9jb2xvckJ1ZmZlcjsKK30KKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKK3Zv
aWQgRHJhd2luZ0J1ZmZlcjo6cGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvQ2FudmFzKENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCit7Cit9CisjZW5kaWYKKworfQorCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0Nv
bnRleHQzREVmbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3Jh
cGhpY3NDb250ZXh0M0RFZmwuY3BwCmluZGV4IGUzZTgyZjk5ODU3YjQzMTFlMGU1ZGI1ZDY1ZDA0
NGUzYTU2YTkxYTAuLjFmMWVkYTIxYzIzMmQ3NzRhYTY5NjkzYTk1ZWMyMDhkY2Y2MWYzOGYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0Nv
bnRleHQzREVmbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZs
L0dyYXBoaWNzQ29udGV4dDNERWZsLmNwcApAQCAtMSw4NTAgKzEsMTQ3IEBACiAvKgotICAgIENv
cHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCi0KLSAgICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
LSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KKyAqIENvcHlyaWdodCAoQykg
MjAxMSwgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogCiAjaWYgRU5BQkxFKFdFQkdMKQotCi0jaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC5oIgotCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgi
Ci0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVu
R0wuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaCIKKyNpbmNsdWRlICJP
cGVuR0xTaGltcy5oIgorI2luY2x1ZGUgIlNoYWRlckxhbmcuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1QYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBHcmFwaGljc0NvbnRleHQzRDo6
Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2luZG93KiBo
b3N0V2luZG93LCBSZW5kZXJTdHlsZSByZW5kZXJTdHlsZSkKK1Bhc3NSZWZQdHI8R3JhcGhpY3ND
b250ZXh0M0Q+IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0Q6OkF0
dHJpYnV0ZXMgYXR0cmlidXRlcywgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgR3JhcGhpY3NDb250
ZXh0M0Q6OlJlbmRlclN0eWxlIHJlbmRlclN0eWxlKQogewotICAgIGJvb2wgcmVuZGVyRGlyZWN0
bHlUb0V2YXNHTE9iamVjdCA9IChyZW5kZXJTdHlsZSA9PSBSZW5kZXJEaXJlY3RseVRvSG9zdFdp
bmRvdyk7CisgICAgYm9vbCByZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdyA9IChyZW5kZXJTdHls
ZSA9PSBSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdyk7CisgICAgLy8gVGhpcyBpbXBsZW1lbnRh
dGlvbiBkb2Vzbid0IGN1cnJlbnRseSBzdXBwb3J0IHJlbmRlcmluZyBkaXJlY3RseSB0byB0aGUg
SG9zdFdpbmRvdy4KKyAgICBpZiAocmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpCisgICAgICAg
IHJldHVybiAwOwogCi0gICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw+IGludGVy
bmFsID0gR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Y3JlYXRlKGF0dHJzLCBob3N0V2luZG93
LCByZW5kZXJEaXJlY3RseVRvRXZhc0dMT2JqZWN0KTsKLSAgICBpZiAoIWludGVybmFsKQorICAg
IE93blB0cjxHcmFwaGljc0NvbnRleHQzRFByaXZhdGU+IHByaXYgPSBHcmFwaGljc0NvbnRleHQz
RFByaXZhdGU6OmNyZWF0ZSgpOworICAgIGlmICghcHJpdikKICAgICAgICAgcmV0dXJuIDA7CiAK
LSAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBhZG9wdFJlZihuZXcgR3Jh
cGhpY3NDb250ZXh0M0QoYXR0cnMsIGhvc3RXaW5kb3csIHJlbmRlckRpcmVjdGx5VG9FdmFzR0xP
YmplY3QpKTsKLSAgICBjb250ZXh0LT5tX2ludGVybmFsID0gaW50ZXJuYWwucmVsZWFzZSgpOwor
ICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IGFkb3B0UmVmKG5ldyBHcmFw
aGljc0NvbnRleHQzRChhdHRyaWJ1dGVzLCBob3N0V2luZG93LCByZW5kZXJEaXJlY3RseVRvSG9z
dFdpbmRvdykpOworICAgIGNvbnRleHQtPm1fcHJpdmF0ZSA9IHByaXYucmVsZWFzZSgpOwogICAg
IHJldHVybiBjb250ZXh0LnJlbGVhc2UoKTsKIH0KIAotR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBo
aWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2lu
ZG93KiBob3N0V2luZG93LCBib29sIHJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KQorR3JhcGhp
Y3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1
dGVzIGF0dHJpYnV0ZXMsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIGJvb2wgcmVuZGVyRGlyZWN0
bHlUb0hvc3RXaW5kb3cpCiAgICAgOiBtX2N1cnJlbnRXaWR0aCgwKQogICAgICwgbV9jdXJyZW50
SGVpZ2h0KDApCi0gICAgLCBtX2lzUmVzb3VyY2VTYWZlKGZhbHNlKQoteworICAgICwgbV9hdHRy
cyhhdHRyaWJ1dGVzKQorICAgICwgbV90ZXh0dXJlKDApCisgICAgLCBtX2ZibygwKQorICAgICwg
bV9kZXB0aFN0ZW5jaWxCdWZmZXIoMCkKKyAgICAsIG1fYm91bmRGQk8oMCkKKyAgICAsIG1fbXVs
dGlzYW1wbGVGQk8oMCkKKyAgICAsIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIoMCkK
KyAgICAsIG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcigwKQoreworICAgIEdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZTo6YWRkQWN0aXZlR3JhcGhpY3NDb250ZXh0KHRoaXMpOworCisgICAgdmFsaWRh
dGVBdHRyaWJ1dGVzKCk7CisKKyAgICAvLyBDcmVhdGUgYSB0ZXh0dXJlIHRvIHJlbmRlciBpbnRv
LgorICAgIDo6Z2xHZW5UZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKKyAgICA6OmdsQmluZFRleHR1
cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlKTsKKyAgICA6OmdsVGV4UGFyYW1ldGVyZihHTF9U
RVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7CisgICAgOjpnbFRl
eFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5F
QVIpOworICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JB
UF9TLCBHTF9DTEFNUCk7CisgICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xf
VEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QKTsKKyAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVS
RV8yRCwgMCk7CisKKyAgICAvLyBDcmVhdGUgYW4gRkJPLgorICAgIDo6Z2xHZW5GcmFtZWJ1ZmZl
cnNFWFQoMSwgJm1fZmJvKTsKKyAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVG
RkVSX0VYVCwgbV9mYm8pOworCisgICAgbV9ib3VuZEZCTyA9IG1fZmJvOworICAgIGlmICghbV9h
dHRycy5hbnRpYWxpYXMgJiYgKG1fYXR0cnMuc3RlbmNpbCB8fCBtX2F0dHJzLmRlcHRoKSkKKyAg
ICAgICAgOjpnbEdlblJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsK
KworICAgIC8vIENyZWF0ZSBhIG11bHRpc2FtcGxlIEZCTy4KKyAgICBpZiAobV9hdHRycy5hbnRp
YWxpYXMpIHsKKyAgICAgICAgOjpnbEdlbkZyYW1lYnVmZmVyc0VYVCgxLCAmbV9tdWx0aXNhbXBs
ZUZCTyk7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhU
LCBtX211bHRpc2FtcGxlRkJPKTsKKyAgICAgICAgbV9ib3VuZEZCTyA9IG1fbXVsdGlzYW1wbGVG
Qk87CisgICAgICAgIDo6Z2xHZW5SZW5kZXJidWZmZXJzRVhUKDEsICZtX211bHRpc2FtcGxlQ29s
b3JCdWZmZXIpOworICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgp
CisgICAgICAgICAgICA6OmdsR2VuUmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9tdWx0aXNhbXBsZURl
cHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgfQorCisgICAgLy8gQU5HTEUgaW5pdGlhbGl6YXRpb24u
CisgICAgU2hCdWlsdEluUmVzb3VyY2VzIEFOR0xFUmVzb3VyY2VzOworICAgIFNoSW5pdEJ1aWx0
SW5SZXNvdXJjZXMoJkFOR0xFUmVzb3VyY2VzKTsKKworICAgIGdldEludGVnZXJ2KEdyYXBoaWNz
Q29udGV4dDNEOjpNQVhfVkVSVEVYX0FUVFJJQlMsICZBTkdMRVJlc291cmNlcy5NYXhWZXJ0ZXhB
dHRyaWJzKTsKKyAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9V
TklGT1JNX1ZFQ1RPUlMsICZBTkdMRVJlc291cmNlcy5NYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycyk7
CisgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WQVJZSU5HX1ZFQ1RPUlMs
ICZBTkdMRVJlc291cmNlcy5NYXhWYXJ5aW5nVmVjdG9ycyk7CisgICAgZ2V0SW50ZWdlcnYoR3Jh
cGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUywgJkFOR0xFUmVz
b3VyY2VzLk1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzKTsKKyAgICBnZXRJbnRlZ2VydihHcmFw
aGljc0NvbnRleHQzRDo6TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZBTkdMRVJl
c291cmNlcy5NYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKTsKKyAgICBnZXRJbnRlZ2VydihH
cmFwaGljc0NvbnRleHQzRDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZBTkdMRVJlc291cmNl
cy5NYXhUZXh0dXJlSW1hZ2VVbml0cyk7CisgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0
M0Q6Ok1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlMsICZBTkdMRVJlc291cmNlcy5NYXhGcmFn
bWVudFVuaWZvcm1WZWN0b3JzKTsKKworICAgIC8vIEFsd2F5cyBzZXQgdG8gMSBmb3IgT3BlbkdM
IEVTLgorICAgIEFOR0xFUmVzb3VyY2VzLk1heERyYXdCdWZmZXJzID0gMTsKKyAgICBtX2NvbXBp
bGVyLnNldFJlc291cmNlcyhBTkdMRVJlc291cmNlcyk7CisKKyAgICA6OmdsRW5hYmxlKEdMX1ZF
UlRFWF9QUk9HUkFNX1BPSU5UX1NJWkUpOworICAgIDo6Z2xFbmFibGUoR0xfUE9JTlRfU1BSSVRF
KTsKKyAgICA6OmdsQ2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKIH0KIAogR3JhcGhpY3NDb250ZXh0
M0Q6On5HcmFwaGljc0NvbnRleHQzRCgpCiB7Ci19CisgICAgR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlOjpyZW1vdmVBY3RpdmVHcmFwaGljc0NvbnRleHQodGhpcyk7CisgICAgaWYgKCFtX3ByaXZh
dGUtPm1fY29udGV4dCkKKyAgICAgICAgcmV0dXJuOwogCi1QbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dDNEIEdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9pbnRlcm5hbC0+cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpOwor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xEZWxldGVUZXh0dXJlcygxLCAmbV90
ZXh0dXJlKTsKKyAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMpIHsKKyAgICAgICAgOjpnbERlbGV0
ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7CisgICAgICAg
IGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkKKyAgICAgICAgICAgIDo6Z2xE
ZWxldGVSZW5kZXJidWZmZXJzRVhUKDEsICZtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVy
KTsKKyAgICAgICAgOjpnbERlbGV0ZUZyYW1lYnVmZmVyc0VYVCgxLCAmbV9tdWx0aXNhbXBsZUZC
Tyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCB8fCBtX2F0dHJz
LmRlcHRoKQorICAgICAgICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fZGVw
dGhTdGVuY2lsQnVmZmVyKTsKKyAgICB9CisgICAgOjpnbERlbGV0ZUZyYW1lYnVmZmVyc0VYVCgx
LCAmbV9mYm8pOwogfQogCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotUGxhdGZv
cm1MYXllciogR3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQogYm9vbCBHcmFw
aGljc0NvbnRleHQzRDo6bWFrZUNvbnRleHRDdXJyZW50KCkKIHsKLSAgICBtX2ludGVybmFsLT5t
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBHcmFwaGlj
c0NvbnRleHQzRDo6aXNHTEVTMkNvbXBsaWFudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faW50
ZXJuYWwtPmlzR0xFUzJDb21wbGlhbnQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
YWN0aXZlVGV4dHVyZShHQzNEZW51bSB0ZXh0dXJlKQotewotICAgIG1faW50ZXJuYWwtPmFjdGl2
ZVRleHR1cmUodGV4dHVyZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmF0dGFjaFNo
YWRlcihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQot
ewotICAgIG1faW50ZXJuYWwtPmF0dGFjaFNoYWRlcihwcm9ncmFtLCBzaGFkZXIpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kQXR0cmliTG9jYXRpb24oUGxhdGZvcm0zRE9iamVj
dCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIG1f
aW50ZXJuYWwtPmJpbmRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBpbmRleCwgbmFtZSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRCdWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0
Zm9ybTNET2JqZWN0IGJ1ZmZlcikKLXsKLSAgICBtX2ludGVybmFsLT5iaW5kQnVmZmVyKHRhcmdl
dCwgYnVmZmVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZEZyYW1lYnVmZmVy
KEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCi17Ci0gICAgbV9pbnRl
cm5hbC0+YmluZEZyYW1lYnVmZmVyKHRhcmdldCwgYnVmZmVyKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6YmluZFJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RP
YmplY3QgcmVuZGVyYnVmZmVyKQotewotICAgIG1faW50ZXJuYWwtPmJpbmRSZW5kZXJidWZmZXIo
dGFyZ2V0LCByZW5kZXJidWZmZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5k
VGV4dHVyZShHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSkKLXsKLSAg
ICBtX2ludGVybmFsLT5iaW5kVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpibGVuZENvbG9yKEdDM0RjbGFtcGYgcmVkLCBHQzNEY2xhbXBmIGdy
ZWVuLCBHQzNEY2xhbXBmIGJsdWUsIEdDM0RjbGFtcGYgYWxwaGEpCi17Ci0gICAgbV9pbnRlcm5h
bC0+YmxlbmRDb2xvcihyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmJsZW5kRXF1YXRpb24oR0MzRGVudW0gbW9kZSkKLXsKLSAgICBtX2ludGVy
bmFsLT5ibGVuZEVxdWF0aW9uKG1vZGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpi
bGVuZEVxdWF0aW9uU2VwYXJhdGUoR0MzRGVudW0gbW9kZVJHQiwgR0MzRGVudW0gbW9kZUFscGhh
KQotewotICAgIG1faW50ZXJuYWwtPmJsZW5kRXF1YXRpb25TZXBhcmF0ZShtb2RlUkdCLCBtb2Rl
QWxwaGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEZ1bmMoR0MzRGVudW0g
c3JjRmFjdG9yLCBHQzNEZW51bSBkc3RGYWN0b3IpCi17Ci0gICAgbV9pbnRlcm5hbC0+YmxlbmRG
dW5jKHNyY0ZhY3RvciwgZHN0RmFjdG9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
YmxlbmRGdW5jU2VwYXJhdGUoR0MzRGVudW0gc3JjUkdCLCBHQzNEZW51bSBkc3RSR0IsIEdDM0Rl
bnVtIHNyY0FscGhhLCBHQzNEZW51bSBkc3RBbHBoYSkKLXsKLSAgICBtX2ludGVybmFsLT5ibGVu
ZEZ1bmNTZXBhcmF0ZShzcmNSR0IsIGRzdFJHQiwgc3JjQWxwaGEsIGRzdEFscGhhKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0Rz
aXplaXB0ciBzaXplLCBHQzNEZW51bSB1c2FnZSkKLXsKLSAgICBtX2ludGVybmFsLT5idWZmZXJE
YXRhKHRhcmdldCwgc2l6ZSwgMCwgdXNhZ2UpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVpcHRyIHNpemUsIGNvbnN0IHZv
aWQqIGRhdGEsIEdDM0RlbnVtIHVzYWdlKQotewotICAgIG1faW50ZXJuYWwtPmJ1ZmZlckRhdGEo
dGFyZ2V0LCBzaXplLCBkYXRhLCB1c2FnZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50cHRyIG9mZnNldCwgR0MzRHNp
emVpcHRyIHNpemUsIGNvbnN0IHZvaWQqIGRhdGEpCi17Ci0gICAgbV9pbnRlcm5hbC0+YnVmZmVy
U3ViRGF0YSh0YXJnZXQsIG9mZnNldCwgc2l6ZSwgZGF0YSk7Ci19Ci0KLUdDM0RlbnVtIEdyYXBo
aWNzQ29udGV4dDNEOjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdDM0RlbnVtIHRhcmdldCkKLXsK
LSAgICByZXR1cm4gbV9pbnRlcm5hbC0+Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyh0YXJnZXQpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhcihHQzNEYml0ZmllbGQgbWFzaykKLXsK
LSAgICBtX2ludGVybmFsLT5jbGVhcihtYXNrKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6Y2xlYXJDb2xvcihHQzNEY2xhbXBmIHJlZCwgR0MzRGNsYW1wZiBncmVlbiwgR0MzRGNsYW1w
ZiBibHVlLCBHQzNEY2xhbXBmIGFscGhhKQotewotICAgIG1faW50ZXJuYWwtPmNsZWFyQ29sb3Io
cmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpj
bGVhckRlcHRoKEdDM0RjbGFtcGYgZGVwdGgpCi17Ci0gICAgbV9pbnRlcm5hbC0+Y2xlYXJEZXB0
aChkZXB0aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyU3RlbmNpbChHQzNE
aW50IGNsZWFyVmFsdWUpCi17Ci0gICAgbV9pbnRlcm5hbC0+Y2xlYXJTdGVuY2lsKGNsZWFyVmFs
dWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb2xvck1hc2soR0MzRGJvb2xlYW4g
cmVkLCBHQzNEYm9vbGVhbiBncmVlbiwgR0MzRGJvb2xlYW4gYmx1ZSwgR0MzRGJvb2xlYW4gYWxw
aGEpCi17Ci0gICAgbV9pbnRlcm5hbC0+Y29sb3JNYXNrKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhh
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29tcGlsZVNoYWRlcihQbGF0Zm9ybTNE
T2JqZWN0IHNoYWRlcikKLXsKLSAgICBtX2ludGVybmFsLT5jb21waWxlU2hhZGVyKHNoYWRlcik7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlUZXhJbWFnZTJEKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RpbnQgeCwg
R0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9y
ZGVyKQotewotICAgIG1faW50ZXJuYWwtPmNvcHlUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGlu
dGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpjb3B5VGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0Rp
bnQgbGV2ZWwsIEdDM0RpbnQgeE9mZnNldCwgR0MzRGludCB5T2Zmc2V0LCBHQzNEaW50IHgsIEdD
M0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQotewotICAgIG1faW50
ZXJuYWwtPmNvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhPZmZzZXQsIHlPZmZzZXQs
IHgsIHksIHdpZHRoLCBoZWlnaHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb21w
cmVzc2VkVGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVt
IGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0Rp
bnQgYm9yZGVyLCBHQzNEc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkKiBkYXRhKQotewotICAg
IC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgY29tcHJlc3NlZFRleEltYWdlMkQuCi0gICAgLy8g
bV9pbnRlcm5hbC0+Y29tcHJlc3NlZFRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxm
b3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgaW1hZ2VTaXplLCBkYXRhKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6Y29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0Mz
RHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RzaXpl
aSBpbWFnZVNpemUsIGNvbnN0IHZvaWQqIGRhdGEpCi17Ci0gICAgLy8gRklYTUU6IEFkZCBzdXBw
b3J0IGZvciBjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRC4KLSAgICAvLyBtX2ludGVybmFsLT5jb21w
cmVzc2VkVGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0
aCwgaGVpZ2h0LCBmb3JtYXQsIGltYWdlU2l6ZSwgZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmN1bGxGYWNlKEdDM0RlbnVtIG1vZGUpCi17Ci0gICAgbV9pbnRlcm5hbC0+Y3Vs
bEZhY2UobW9kZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRoRnVuYyhHQzNE
ZW51bSBmdW5jKQotewotICAgIG1faW50ZXJuYWwtPmRlcHRoRnVuYyhmdW5jKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhNYXNrKEdDM0Rib29sZWFuIGZsYWcpCi17Ci0gICAg
bV9pbnRlcm5hbC0+ZGVwdGhNYXNrKGZsYWcpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpkZXB0aFJhbmdlKEdDM0RjbGFtcGYgek5lYXIsIEdDM0RjbGFtcGYgekZhcikKLXsKLSAgICBt
X2ludGVybmFsLT5kZXB0aFJhbmdlKHpOZWFyLCB6RmFyKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6ZGV0YWNoU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm0z
RE9iamVjdCBzaGFkZXIpCi17Ci0gICAgbV9pbnRlcm5hbC0+ZGV0YWNoU2hhZGVyKHByb2dyYW0s
IHNoYWRlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRpc2FibGUoR0MzRGVudW0g
Y2FwKQotewotICAgIG1faW50ZXJuYWwtPmRpc2FibGUoY2FwKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1aW50IGluZGV4KQotewot
ICAgIG1faW50ZXJuYWwtPmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRyYXdBcnJheXMoR0MzRGVudW0gbW9kZSwgR0MzRGludCBm
aXJzdCwgR0MzRHNpemVpIGNvdW50KQotewotICAgIG1faW50ZXJuYWwtPmRyYXdBcnJheXMobW9k
ZSwgZmlyc3QsIGNvdW50KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZHJhd0VsZW1l
bnRzKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgR0MzRGlu
dHB0ciBvZmZzZXQpCi17Ci0gICAgbV9pbnRlcm5hbC0+ZHJhd0VsZW1lbnRzKG1vZGUsIGNvdW50
LCB0eXBlLCBvZmZzZXQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjplbmFibGUoR0Mz
RGVudW0gY2FwKQotewotICAgIG1faW50ZXJuYWwtPmVuYWJsZShjYXApOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCkK
LXsKLSAgICBtX2ludGVybmFsLT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZpbmlzaCgpCi17Ci0gICAgbV9pbnRlcm5hbC0+Zmlu
aXNoKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZsdXNoKCkKLXsKLSAgICBtX2lu
dGVybmFsLT5mbHVzaCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmcmFtZWJ1ZmZl
clJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0Rl
bnVtIHJlbmRlcmJ1ZmZlclRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCi17Ci0gICAg
bV9pbnRlcm5hbC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIodGFyZ2V0LCBhdHRhY2htZW50LCBy
ZW5kZXJidWZmZXJUYXJnZXQsIGJ1ZmZlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVu
dCwgR0MzRGVudW0gdGV4VGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUsIEdDM0RpbnQg
bGV2ZWwpCi17Ci0gICAgbV9pbnRlcm5hbC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQodGFyZ2V0LCBh
dHRhY2htZW50LCB0ZXhUYXJnZXQsIHRleHR1cmUsIGxldmVsKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6ZnJvbnRGYWNlKEdDM0RlbnVtIG1vZGUpCi17Ci0gICAgbV9pbnRlcm5hbC0+
ZnJvbnRGYWNlKG1vZGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZW5lcmF0ZU1p
cG1hcChHQzNEZW51bSB0YXJnZXQpCi17Ci0gICAgbV9pbnRlcm5hbC0+Z2VuZXJhdGVNaXBtYXAo
dGFyZ2V0KTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0aXZlQXR0cmliKFBs
YXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8p
Ci17Ci0gICAgcmV0dXJuIG1faW50ZXJuYWwtPmdldEFjdGl2ZUF0dHJpYihwcm9ncmFtLCBpbmRl
eCwgaW5mbyk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZVVuaWZvcm0o
UGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5m
bykKLXsKLSAgICByZXR1cm4gbV9pbnRlcm5hbC0+Z2V0QWN0aXZlVW5pZm9ybShwcm9ncmFtLCBp
bmRleCwgaW5mbyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEF0dGFjaGVkU2hh
ZGVycyhQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RzaXplaSBtYXhDb3VudCwgR0MzRHNp
emVpKiBjb3VudCwgUGxhdGZvcm0zRE9iamVjdCogc2hhZGVycykKLXsKLSAgICBtX2ludGVybmFs
LT5nZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgbWF4Q291bnQsIGNvdW50LCBzaGFkZXJzKTsK
LX0KLQotaW50IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybTNE
T2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICByZXR1cm4gbV9pbnRl
cm5hbC0+Z2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgbmFtZSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldEJvb2xlYW52KEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGJvb2xlYW4q
IHZhbHVlKQotewotICAgIG1faW50ZXJuYWwtPmdldEJvb2xlYW52KHBhcmFtTmFtZSwgdmFsdWUp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRCdWZmZXJQYXJhbWV0ZXJpdihHQzNE
ZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGludCogdmFsdWUpCi17Ci0gICAg
bV9pbnRlcm5hbC0+Z2V0QnVmZmVyUGFyYW1ldGVyaXYodGFyZ2V0LCBwYXJhbU5hbWUsIHZhbHVl
KTsKLX0KLQotR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgR3JhcGhpY3NDb250ZXh0M0Q6
OmdldENvbnRleHRBdHRyaWJ1dGVzKCkKLXsKLSAgICByZXR1cm4gbV9pbnRlcm5hbC0+Z2V0Q29u
dGV4dEF0dHJpYnV0ZXMoKTsKLX0KLQotR0MzRGVudW0gR3JhcGhpY3NDb250ZXh0M0Q6OmdldEVy
cm9yKCkKLXsKLSAgICByZXR1cm4gbV9pbnRlcm5hbC0+Z2V0RXJyb3IoKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6Z2V0RmxvYXR2KEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGZsb2F0
KiB2YWx1ZSkKLXsKLSAgICBtX2ludGVybmFsLT5nZXRGbG9hdHYocGFyYW1OYW1lLCB2YWx1ZSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBh
cmFtZXRlcml2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0g
cGFyYW1OYW1lLCBHQzNEaW50KiB2YWx1ZSkKLXsKLSAgICBtX2ludGVybmFsLT5nZXRGcmFtZWJ1
ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdih0YXJnZXQsIGF0dGFjaG1lbnQsIHBhcmFtTmFtZSwg
dmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbnRlZ2VydihHQzNEZW51
bSBwYXJhbU5hbWUsIEdDM0RpbnQqIHZhbHVlKQotewotICAgIG1faW50ZXJuYWwtPmdldEludGVn
ZXJ2KHBhcmFtTmFtZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRQ
cm9ncmFtaXYoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEZW51bSBwYXJhbU5hbWUsIEdD
M0RpbnQqIHZhbHVlKQotewotICAgIG1faW50ZXJuYWwtPmdldFByb2dyYW1pdihwcm9ncmFtLCBw
YXJhbU5hbWUsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRQcm9n
cmFtSW5mb0xvZyhQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCi17Ci0gICAgcmV0dXJuIG1faW50
ZXJuYWwtPmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0Rl
bnVtIHBhcmFtTmFtZSwgR0MzRGludCogdmFsdWUpCi17Ci0gICAgbV9pbnRlcm5hbC0+Z2V0UmVu
ZGVyYnVmZmVyUGFyYW1ldGVyaXYodGFyZ2V0LCBwYXJhbU5hbWUsIHZhbHVlKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVyaXYoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIs
IEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGludCogdmFsdWUpCi17Ci0gICAgbV9pbnRlcm5hbC0+
Z2V0U2hhZGVyaXYoc2hhZGVyLCBwYXJhbU5hbWUsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRTaGFkZXJJbmZvTG9nKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQot
ewotICAgIHJldHVybiBtX2ludGVybmFsLT5nZXRTaGFkZXJJbmZvTG9nKHNoYWRlcik7Ci19Ci0K
LVN0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVyU291cmNlKFBsYXRmb3JtM0RPYmpl
Y3Qgc2hhZGVyKQotewotICAgIHJldHVybiBtX2ludGVybmFsLT5nZXRTaGFkZXJTb3VyY2Uoc2hh
ZGVyKTsKLX0KLQotU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTdHJpbmcoR0MzRGVudW0g
bmFtZSkKLXsKLSAgICByZXR1cm4gbV9pbnRlcm5hbC0+Z2V0U3RyaW5nKG5hbWUpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRUZXhQYXJhbWV0ZXJmdihHQzNEZW51bSB0YXJnZXQs
IEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGZsb2F0KiB2YWx1ZSkKLXsKLSAgICBtX2ludGVybmFs
LT5nZXRUZXhQYXJhbWV0ZXJmdih0YXJnZXQsIHBhcmFtTmFtZSwgdmFsdWUpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRUZXhQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdD
M0RlbnVtIHBhcmFtTmFtZSwgR0MzRGludCogdmFsdWUpCi17Ci0gICAgbV9pbnRlcm5hbC0+Z2V0
VGV4UGFyYW1ldGVyaXYodGFyZ2V0LCBwYXJhbU5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybWZ2KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0Mz
RGludCBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2YWx1ZSkKLXsKLSAgICBtX2ludGVybmFsLT5nZXRV
bmlmb3JtZnYocHJvZ3JhbSwgbG9jYXRpb24sIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0VW5pZm9ybWl2KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGludCBs
b2NhdGlvbiwgR0MzRGludCogdmFsdWUpCi17Ci0gICAgbV9pbnRlcm5hbC0+Z2V0VW5pZm9ybWl2
KHByb2dyYW0sIGxvY2F0aW9uLCB2YWx1ZSk7Ci19Ci0KLUdDM0RpbnQgR3JhcGhpY3NDb250ZXh0
M0Q6OmdldFVuaWZvcm1Mb2NhdGlvbihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0
cmluZyYgbmFtZSkKLXsKLSAgICByZXR1cm4gbV9pbnRlcm5hbC0+Z2V0VW5pZm9ybUxvY2F0aW9u
KHByb2dyYW0sIG5hbWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRWZXJ0ZXhB
dHRyaWJmdihHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEZmxvYXQqIHZh
bHVlKQotewotICAgIG1faW50ZXJuYWwtPmdldFZlcnRleEF0dHJpYmZ2KGluZGV4LCBwYXJhbU5h
bWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmli
aXYoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGludCogdmFsdWUpCi17
Ci0gICAgbV9pbnRlcm5hbC0+Z2V0VmVydGV4QXR0cmliaXYoaW5kZXgsIHBhcmFtTmFtZSwgdmFs
dWUpOwotfQotCi1sb25nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQo
R0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBhcmFtTmFtZSkKLXsKLSAgICByZXR1cm4gbV9pbnRl
cm5hbC0+Z2V0VmVydGV4QXR0cmliT2Zmc2V0KGluZGV4LCBwYXJhbU5hbWUpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpoaW50KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gbW9kZSkK
LXsKLSAgICBtX2ludGVybmFsLT5oaW50KHRhcmdldCwgbW9kZSk7Ci19Ci0KLUdDM0Rib29sZWFu
IEdyYXBoaWNzQ29udGV4dDNEOjppc0J1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IG9iaikKLXsKLSAg
ICByZXR1cm4gbV9pbnRlcm5hbC0+aXNCdWZmZXIob2JqKTsKLX0KLQotR0MzRGJvb2xlYW4gR3Jh
cGhpY3NDb250ZXh0M0Q6OmlzRW5hYmxlZChHQzNEZW51bSBjYXApCi17Ci0gICAgcmV0dXJuIG1f
aW50ZXJuYWwtPmlzRW5hYmxlZChjYXApOwotfQotCi1HQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRl
eHQzRDo6aXNGcmFtZWJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IG9iaikKLXsKLSAgICByZXR1cm4g
bV9pbnRlcm5hbC0+aXNGcmFtZWJ1ZmZlcihvYmopOwotfQotCi1HQzNEYm9vbGVhbiBHcmFwaGlj
c0NvbnRleHQzRDo6aXNQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3Qgb2JqKQotewotICAgIHJldHVy
biBtX2ludGVybmFsLT5pc1Byb2dyYW0ob2JqKTsKLX0KLQotR0MzRGJvb2xlYW4gR3JhcGhpY3ND
b250ZXh0M0Q6OmlzUmVuZGVyYnVmZmVyKFBsYXRmb3JtM0RPYmplY3Qgb2JqKQotewotICAgIHJl
dHVybiBtX2ludGVybmFsLT5pc1JlbmRlcmJ1ZmZlcihvYmopOwotfQotCi1HQzNEYm9vbGVhbiBH
cmFwaGljc0NvbnRleHQzRDo6aXNTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBvYmopCi17Ci0gICAg
cmV0dXJuIG1faW50ZXJuYWwtPmlzU2hhZGVyKG9iaik7Ci19Ci0KLUdDM0Rib29sZWFuIEdyYXBo
aWNzQ29udGV4dDNEOjppc1RleHR1cmUoUGxhdGZvcm0zRE9iamVjdCBvYmopCi17Ci0gICAgcmV0
dXJuIG1faW50ZXJuYWwtPmlzVGV4dHVyZShvYmopOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpsaW5lV2lkdGgoR0MzRGZsb2F0IHdpZHRoKQotewotICAgIG1faW50ZXJuYWwtPmxpbmVX
aWR0aCh3aWR0aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmxpbmtQcm9ncmFtKFBs
YXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKLXsKLSAgICBtX2ludGVybmFsLT5saW5rUHJvZ3JhbShw
cm9ncmFtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cGl4ZWxTdG9yZWkoR0MzRGVu
dW0gcGFyYW1OYW1lLCBHQzNEaW50IHBhcmFtKQotewotICAgIG1faW50ZXJuYWwtPnBpeGVsU3Rv
cmVpKHBhcmFtTmFtZSwgcGFyYW0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwb2x5
Z29uT2Zmc2V0KEdDM0RmbG9hdCBmYWN0b3IsIEdDM0RmbG9hdCB1bml0cykKLXsKLSAgICBtX2lu
dGVybmFsLT5wb2x5Z29uT2Zmc2V0KGZhY3RvciwgdW5pdHMpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpyZWFkUGl4ZWxzKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lk
dGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgdm9p
ZCogZGF0YSkKLXsKLSAgICBtX2ludGVybmFsLT5yZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBoZWln
aHQsIGZvcm1hdCwgdHlwZSwgZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJl
bGVhc2VTaGFkZXJDb21waWxlcigpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6cmVuZGVyYnVmZmVyU3RvcmFnZShHQzNEZW51bSB0YXJnZXQs
IEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWln
aHQpCi17Ci0gICAgbV9pbnRlcm5hbC0+cmVuZGVyYnVmZmVyU3RvcmFnZSh0YXJnZXQsIGludGVy
bmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
c2FtcGxlQ292ZXJhZ2UoR0MzRGNsYW1wZiB2YWx1ZSwgR0MzRGJvb2xlYW4gaW52ZXJ0KQotewot
ICAgIG1faW50ZXJuYWwtPnNhbXBsZUNvdmVyYWdlKHZhbHVlLCBpbnZlcnQpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpzY2lzc29yKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6
ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCi17Ci0gICAgbV9pbnRlcm5hbC0+c2Npc3Nvcih4
LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2hhZGVy
U291cmNlKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCi17
Ci0gICAgbV9pbnRlcm5hbC0+c2hhZGVyU291cmNlKHByb2dyYW0sIHN0cmluZyk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxGdW5jKEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQg
cmVmLCBHQzNEdWludCBtYXNrKQotewotICAgIG1faW50ZXJuYWwtPnN0ZW5jaWxGdW5jKGZ1bmMs
IHJlZiwgbWFzayk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxGdW5jU2Vw
YXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0gZnVuYywgR0MzRGludCByZWYsIEdDM0R1aW50
IG1hc2spCi17Ci0gICAgbV9pbnRlcm5hbC0+c3RlbmNpbEZ1bmNTZXBhcmF0ZShmYWNlLCBmdW5j
LCByZWYsIG1hc2spOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsTWFzayhH
QzNEdWludCBtYXNrKQotewotICAgIG1faW50ZXJuYWwtPnN0ZW5jaWxNYXNrKG1hc2spOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsTWFza1NlcGFyYXRlKEdDM0RlbnVtIGZh
Y2UsIEdDM0R1aW50IG1hc2spCi17Ci0gICAgbV9pbnRlcm5hbC0+c3RlbmNpbE1hc2tTZXBhcmF0
ZShmYWNlLCBtYXNrKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbE9wKEdD
M0RlbnVtIGZhaWwsIEdDM0RlbnVtIHpmYWlsLCBHQzNEZW51bSB6cGFzcykKLXsKLSAgICBtX2lu
dGVybmFsLT5zdGVuY2lsT3AoZmFpbCwgemZhaWwsIHpwYXNzKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6c3RlbmNpbE9wU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0gZmFp
bCwgR0MzRGVudW0gemZhaWwsIEdDM0RlbnVtIHpwYXNzKQotewotICAgIG1faW50ZXJuYWwtPnN0
ZW5jaWxPcFNlcGFyYXRlKGZhY2UsIGZhaWwsIHpmYWlsLCB6cGFzcyk7Ci19Ci0KLWJvb2wgR3Jh
cGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVs
LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVp
Z2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25z
dCB2b2lkKiBwaXhlbHMpCi17Ci0gICAgcmV0dXJuIG1faW50ZXJuYWwtPnRleEltYWdlMkQodGFy
Z2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0
LCB0eXBlLCBwaXhlbHMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhQYXJhbWV0
ZXJmKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEZmxvYXQgcGFyYW0p
Ci17Ci0gICAgbV9pbnRlcm5hbC0+dGV4UGFyYW1ldGVyZih0YXJnZXQsIHBhcmFtTmFtZSwgcGFy
YW0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhQYXJhbWV0ZXJpKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEaW50IHBhcmFtKQotewotICAgIG1faW50
ZXJuYWwtPnRleFBhcmFtZXRlcmkodGFyZ2V0LCBwYXJhbU5hbWUsIHBhcmFtKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0Rp
bnQgbGV2ZWwsIEdDM0RpbnQgeE9mZnNldCwgR0MzRGludCB5T2Zmc2V0LCBHQzNEc2l6ZWkgd2lk
dGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29u
c3Qgdm9pZCogcGl4ZWxzKQotewotICAgIG1faW50ZXJuYWwtPnRleFN1YkltYWdlMkQodGFyZ2V0
LCBsZXZlbCwgeE9mZnNldCwgeU9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBw
aXhlbHMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWYoR0MzRGludCBs
b2NhdGlvbiwgR0MzRGZsb2F0IHgpCi17Ci0gICAgbV9pbnRlcm5hbC0+dW5pZm9ybTFmKGxvY2F0
aW9uLCB4KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFmdihHQzNEaW50
IGxvY2F0aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplKQotewotICAgIG1faW50ZXJu
YWwtPnVuaWZvcm0xZnYobG9jYXRpb24sIHNpemUsIHYpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjp1bmlmb3JtMWkoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB4KQotewotICAgIG1f
aW50ZXJuYWwtPnVuaWZvcm0xaShsb2NhdGlvbiwgeCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnVuaWZvcm0xaXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVp
IHNpemUpCi17Ci0gICAgbV9pbnRlcm5hbC0+dW5pZm9ybTFpdihsb2NhdGlvbiwgc2l6ZSwgdik7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0yZihHQzNEaW50IGxvY2F0aW9u
LCBHQzNEZmxvYXQgeCwgZmxvYXQgeSkKLXsKLSAgICBtX2ludGVybmFsLT51bmlmb3JtMmYobG9j
YXRpb24sIHgsIHkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMmZ2KEdD
M0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUpCi17Ci0gICAgbV9p
bnRlcm5hbC0+dW5pZm9ybTJmdihsb2NhdGlvbiwgc2l6ZSwgdik7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnVuaWZvcm0yaShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHgsIEdDM0Rp
bnQgeSkKLXsKLSAgICBtX2ludGVybmFsLT51bmlmb3JtMmkobG9jYXRpb24sIHgsIHkpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMml2KEdDM0RpbnQgbG9jYXRpb24sIEdD
M0RpbnQqIHYsIEdDM0RzaXplaSBzaXplKQotewotICAgIG1faW50ZXJuYWwtPnVuaWZvcm0yaXYo
bG9jYXRpb24sIHNpemUsIHYpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3Jt
M2YoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQg
eikKLXsKLSAgICBtX2ludGVybmFsLT51bmlmb3JtM2YobG9jYXRpb24sIHgsIHksIHopOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2Z2KEdDM0RpbnQgbG9jYXRpb24sIEdD
M0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUpCi17Ci0gICAgbV9pbnRlcm5hbC0+dW5pZm9ybTNm
dihsb2NhdGlvbiwgc2l6ZSwgdik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZv
cm0zaShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRGludCB6KQot
ewotICAgIG1faW50ZXJuYWwtPnVuaWZvcm0zaShsb2NhdGlvbiwgeCwgeSwgeik7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0zaXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGlu
dCogdiwgR0MzRHNpemVpIHNpemUpCi17Ci0gICAgbV9pbnRlcm5hbC0+dW5pZm9ybTNpdihsb2Nh
dGlvbiwgc2l6ZSwgdik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00ZihH
QzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6LCBH
QzNEZmxvYXQgdykKLXsKLSAgICBtX2ludGVybmFsLT51bmlmb3JtNGYobG9jYXRpb24sIHgsIHks
IHosIHcpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGZ2KEdDM0RpbnQg
bG9jYXRpb24sIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUpCi17Ci0gICAgbV9pbnRlcm5h
bC0+dW5pZm9ybTRmdihsb2NhdGlvbiwgc2l6ZSwgdik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnVuaWZvcm00aShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQgeSwg
R0MzRGludCB6LCBHQzNEaW50IHcpCi17Ci0gICAgbV9pbnRlcm5hbC0+dW5pZm9ybTRpKGxvY2F0
aW9uLCB4LCB5LCB6LCB3KTsKKyAgICBpZiAoIW1fcHJpdmF0ZSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIHJldHVybiBtX3ByaXZhdGUtPm1ha2VDb250ZXh0Q3VycmVudCgpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGl2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0Rp
bnQqIHYsIEdDM0RzaXplaSBzaXplKQotewotICAgIG1faW50ZXJuYWwtPnVuaWZvcm00aXYobG9j
YXRpb24sIHNpemUsIHYpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0
cml4MmZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0
KiB2YWx1ZSwgR0MzRHNpemVpIHNpemUpCi17Ci0gICAgbV9pbnRlcm5hbC0+dW5pZm9ybU1hdHJp
eDJmdihsb2NhdGlvbiwgc2l6ZSwgdHJhbnNwb3NlLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnVuaWZvcm1NYXRyaXgzZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGJvb2xl
YW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIHZhbHVlLCBHQzNEc2l6ZWkgc2l6ZSkKLXsKLSAgICBt
X2ludGVybmFsLT51bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIHZh
bHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDRmdihHQzNE
aW50IGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdmFsdWUsIEdD
M0RzaXplaSBzaXplKQotewotICAgIG1faW50ZXJuYWwtPnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRp
b24sIHNpemUsIHRyYW5zcG9zZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
Ojp1c2VQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKLXsKLSAgICBtX2ludGVybmFs
LT51c2VQcm9ncmFtKHByb2dyYW0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2YWxp
ZGF0ZVByb2dyYW0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQotewotICAgIG1faW50ZXJuYWwt
PnZhbGlkYXRlUHJvZ3JhbShwcm9ncmFtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
dmVydGV4QXR0cmliMWYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4KQotewotICAgIG1faW50
ZXJuYWwtPnZlcnRleEF0dHJpYjFmKGluZGV4LCB4KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6dmVydGV4QXR0cmliMWZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHZhbHVlcykK
LXsKLSAgICBtX2ludGVybmFsLT52ZXJ0ZXhBdHRyaWIxZnYoaW5kZXgsIHZhbHVlcyk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjJmKEdDM0R1aW50IGluZGV4LCBH
QzNEZmxvYXQgeCwgR0MzRGZsb2F0IHkpCi17Ci0gICAgbV9pbnRlcm5hbC0+dmVydGV4QXR0cmli
MmYoaW5kZXgsIHgsIHkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRy
aWIyZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdmFsdWVzKQotewotICAgIG1faW50ZXJu
YWwtPnZlcnRleEF0dHJpYjJmdihpbmRleCwgdmFsdWVzKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6dmVydGV4QXR0cmliM2YoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4LCBHQzNE
ZmxvYXQgeSwgR0MzRGZsb2F0IHopCi17Ci0gICAgbV9pbnRlcm5hbC0+dmVydGV4QXR0cmliM2Yo
aW5kZXgsIHgsIHksIHopOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRy
aWIzZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdmFsdWVzKQotewotICAgIG1faW50ZXJu
YWwtPnZlcnRleEF0dHJpYjNmdihpbmRleCwgdmFsdWVzKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6dmVydGV4QXR0cmliNGYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4LCBHQzNE
ZmxvYXQgeSwgR0MzRGZsb2F0IHosIEdDM0RmbG9hdCB3KQotewotICAgIG1faW50ZXJuYWwtPnZl
cnRleEF0dHJpYjRmKGluZGV4LCB4LCB5LCB6LCB3KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6dmVydGV4QXR0cmliNGZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHZhbHVlcykK
LXsKLSAgICBtX2ludGVybmFsLT52ZXJ0ZXhBdHRyaWI0ZnYoaW5kZXgsIHZhbHVlcyk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYlBvaW50ZXIoR0MzRHVpbnQgaW5k
ZXgsIEdDM0RpbnQgc2l6ZSwgR0MzRGVudW0gdHlwZSwgR0MzRGJvb2xlYW4gbm9ybWFsaXplZCwg
R0MzRHNpemVpIHN0cmlkZSwgR0MzRGludHB0ciBvZmZzZXQpCi17Ci0gICAgbV9pbnRlcm5hbC0+
dmVydGV4QXR0cmliUG9pbnRlcihpbmRleCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRl
LCBvZmZzZXQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2aWV3cG9ydChHQzNEaW50
IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQotewotICAg
IG1faW50ZXJuYWwtPnZpZXdwb3J0KHgsIHksIHdpZHRoLCBoZWlnaHQpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjptYXJrQ29udGV4
dENoYW5nZWQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6Om1hcmtMYXllckNvbXBvc2l0ZWQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmxheWVyQ29tcG9zaXRlZCgpIGNvbnN0Ci17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRl
cmluZ0NvbnRleHQqIGNvbnRleHQsIERyYXdpbmdCdWZmZXIqIGRyYXdpbmdCdWZmZXIpCi17Ci0g
ICAgLy8gRHJhd2luZ0J1ZmZlciBzdXBwb3J0IG9ubHkgaW1wbGVtZW50ZWQgaW4gQ2hyb21pdW0g
cG9ydHMuCi0gICAgQVNTRVJUKCFkcmF3aW5nQnVmZmVyKTsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi1QYXNzUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVu
ZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKERyYXdpbmdCdWZmZXIqIGRyYXdpbmdCdWZmZXIpCi17
Ci0gICAgLy8gRHJhd2luZ0J1ZmZlciBzdXBwb3J0IG9ubHkgaW1wbGVtZW50ZWQgaW4gQ2hyb21p
dW0gcG9ydHMuCi0gICAgQVNTRVJUKCFkcmF3aW5nQnVmZmVyKTsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRl
KEludFNpemUoMSwgMSkpOwotICAgIHJldHVybiBpbWFnZURhdGEucmVsZWFzZSgpOwotfQotCi1Q
bGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVCdWZmZXIoKQotewotICAg
IHJldHVybiBtX2ludGVybmFsLT5jcmVhdGVCdWZmZXIoKTsKLX0KLQotUGxhdGZvcm0zRE9iamVj
dCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlRnJhbWVidWZmZXIoKQotewotICAgIHJldHVybiBt
X2ludGVybmFsLT5jcmVhdGVGcmFtZWJ1ZmZlcigpOwotfQotCi1QbGF0Zm9ybTNET2JqZWN0IEdy
YXBoaWNzQ29udGV4dDNEOjpjcmVhdGVQcm9ncmFtKCkKLXsKLSAgICByZXR1cm4gbV9pbnRlcm5h
bC0+Y3JlYXRlUHJvZ3JhbSgpOwotfQotCi1QbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4
dDNEOjpjcmVhdGVSZW5kZXJidWZmZXIoKQotewotICAgIHJldHVybiBtX2ludGVybmFsLT5jcmVh
dGVSZW5kZXJidWZmZXIoKTsKLX0KLQotUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQz
RDo6Y3JlYXRlU2hhZGVyKEdDM0RlbnVtIHR5cGUpCi17Ci0gICAgcmV0dXJuIG1faW50ZXJuYWwt
PmNyZWF0ZVNoYWRlcih0eXBlKTsKLX0KLQotUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRl
eHQzRDo6Y3JlYXRlVGV4dHVyZSgpCi17Ci0gICAgcmV0dXJuIG1faW50ZXJuYWwtPmNyZWF0ZVRl
eHR1cmUoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlQnVmZmVyKFBsYXRm
b3JtM0RPYmplY3QgYnVmZmVyKQotewotICAgIG1faW50ZXJuYWwtPmRlbGV0ZUJ1ZmZlcihidWZm
ZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVGcmFtZWJ1ZmZlcihQbGF0
Zm9ybTNET2JqZWN0IGJ1ZmZlcikKLXsKLSAgICBtX2ludGVybmFsLT5kZWxldGVGcmFtZWJ1ZmZl
cihidWZmZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVQcm9ncmFtKFBs
YXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKLXsKLSAgICBtX2ludGVybmFsLT5kZWxldGVQcm9ncmFt
KHByb2dyYW0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVSZW5kZXJidWZm
ZXIoUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCi17Ci0gICAgbV9pbnRlcm5hbC0+ZGVsZXRlUmVu
ZGVyYnVmZmVyKGJ1ZmZlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVNo
YWRlcihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKLXsKLSAgICBtX2ludGVybmFsLT5kZWxldGVT
aGFkZXIoc2hhZGVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlVGV4dHVy
ZShQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUpCi17Ci0gICAgbV9pbnRlcm5hbC0+ZGVsZXRlVGV4
dHVyZSh0ZXh0dXJlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3ludGhlc2l6ZUdM
RXJyb3IoR0MzRGVudW0gZXJyb3IpCi17Ci0gICAgbV9pbnRlcm5hbC0+c3ludGhlc2l6ZUdMRXJy
b3IoZXJyb3IpOwotfQotCi1FeHRlbnNpb25zM0QqIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRFeHRl
bnNpb25zKCkKLXsKLSAgICByZXR1cm4gbV9pbnRlcm5hbC0+Z2V0RXh0ZW5zaW9ucygpOwotfQot
Ci1JbnRTaXplIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgp
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gSW50U2l6ZSgpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzZXRDb250ZXh0TG9zdENhbGxiYWNrKFBhc3NPd25QdHI8
Q29udGV4dExvc3RDYWxsYmFjaz4pCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6c2V0RXJyb3JNZXNzYWdlQ2FsbGJhY2soUGFzc093blB0cjxF
cnJvck1lc3NhZ2VDYWxsYmFjaz4pCitQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIEdyYXBoaWNz
Q29udGV4dDNEOjpwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QKIHsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIHJldHVybiBtX3ByaXZhdGUtPm1fY29udGV4dDsKIH0KIAotYm9v
bCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW1hZ2VEYXRhKEltYWdlKiBpbWFnZSwgR0MzRGVudW0g
Zm9ybWF0LCBHQzNEZW51bSB0eXBlLCBib29sIHByZW11bHRpcGx5QWxwaGEsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmls
ZSwgVmVjdG9yPHVpbnQ4X3Q+JiBvdXRwdXRWZWN0b3IpCitib29sIEdyYXBoaWNzQ29udGV4dDNE
Ojppc0dMRVMyQ29tcGxpYW50KCkgY29uc3QKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwogICAg
IHJldHVybiBmYWxzZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmNwcAppbmRleCA3MzMy
MGQxODcwNWQyOTE2NGJkOTViYTdkMTcyZmE4NmJiODhmMDQ3Li42N2Q0MmJhODY4NDUyMmExMzMy
NWVkNWY0ZmQ2OTNmZDdiNjU4OGM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmNwcApAQCAt
MzUsNyArMzUsNyBAQAogI2lmIFBMQVRGT1JNKE1BQykKICNpbmNsdWRlICJBTkdMRS9TaGFkZXJM
YW5nLmgiCiAjaW5jbHVkZSA8T3BlbkdML2dsLmg+Ci0jZWxpZiBQTEFURk9STShHVEspCisjZWxp
ZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKEVGTCkKICNpbmNsdWRlICJPcGVuR0xTaGltcy5o
IgogI2VsaWYgUExBVEZPUk0oUVQpCiAjaW5jbHVkZSA8Y2Fpcm8vT3BlbkdMU2hpbXMuaD4KQEAg
LTE0OSw3ICsxNDksNyBAQCB2b2lkIEV4dGVuc2lvbnMzRE9wZW5HTDo6cmVuZGVyYnVmZmVyU3Rv
cmFnZU11bHRpc2FtcGxlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bgogUGxhdGZvcm0zRE9iamVj
dCBFeHRlbnNpb25zM0RPcGVuR0w6OmNyZWF0ZVZlcnRleEFycmF5T0VTKCkKIHsKICAgICBtX2Nv
bnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotI2lmICFQTEFURk9STShHVEspICYmICFQTEFU
Rk9STShRVCkgJiYgZGVmaW5lZChHTF9BUFBMRV92ZXJ0ZXhfYXJyYXlfb2JqZWN0KSAmJiBHTF9B
UFBMRV92ZXJ0ZXhfYXJyYXlfb2JqZWN0CisjaWYgIVBMQVRGT1JNKEdUSykgJiYgIVBMQVRGT1JN
KFFUKSAmJiAhUExBVEZPUk0oRUZMKSAmJiBkZWZpbmVkKEdMX0FQUExFX3ZlcnRleF9hcnJheV9v
YmplY3QpICYmIEdMX0FQUExFX3ZlcnRleF9hcnJheV9vYmplY3QKICAgICBHTHVpbnQgYXJyYXkg
PSAwOwogICAgIGdsR2VuVmVydGV4QXJyYXlzQVBQTEUoMSwgJmFycmF5KTsKICAgICByZXR1cm4g
YXJyYXk7CkBAIC0xNjQsNyArMTY0LDcgQEAgdm9pZCBFeHRlbnNpb25zM0RPcGVuR0w6OmRlbGV0
ZVZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QgYXJyYXkpCiAgICAgICAgIHJldHVybjsK
ICAgICAKICAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotI2lmICFQTEFURk9S
TShHVEspICYmICFQTEFURk9STShRVCkgJiYgZGVmaW5lZChHTF9BUFBMRV92ZXJ0ZXhfYXJyYXlf
b2JqZWN0KSAmJiBHTF9BUFBMRV92ZXJ0ZXhfYXJyYXlfb2JqZWN0CisjaWYgIVBMQVRGT1JNKEdU
SykgJiYgIVBMQVRGT1JNKFFUKSAmJiAhUExBVEZPUk0oRUZMKSAmJiBkZWZpbmVkKEdMX0FQUExF
X3ZlcnRleF9hcnJheV9vYmplY3QpICYmIEdMX0FQUExFX3ZlcnRleF9hcnJheV9vYmplY3QKICAg
ICBnbERlbGV0ZVZlcnRleEFycmF5c0FQUExFKDEsICZhcnJheSk7CiAjZW5kaWYKIH0KQEAgLTE3
NSw3ICsxNzUsNyBAQCBHQzNEYm9vbGVhbiBFeHRlbnNpb25zM0RPcGVuR0w6OmlzVmVydGV4QXJy
YXlPRVMoUGxhdGZvcm0zRE9iamVjdCBhcnJheSkKICAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwog
ICAgIAogICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0jaWYgIVBMQVRGT1JN
KEdUSykgJiYgIVBMQVRGT1JNKFFUKSAmJiBkZWZpbmVkKEdMX0FQUExFX3ZlcnRleF9hcnJheV9v
YmplY3QpICYmIEdMX0FQUExFX3ZlcnRleF9hcnJheV9vYmplY3QKKyNpZiAhUExBVEZPUk0oR1RL
KSAmJiAhUExBVEZPUk0oUVQpICYmICFQTEFURk9STShFRkwpICYmIGRlZmluZWQoR0xfQVBQTEVf
dmVydGV4X2FycmF5X29iamVjdCkgJiYgR0xfQVBQTEVfdmVydGV4X2FycmF5X29iamVjdAogICAg
IHJldHVybiBnbElzVmVydGV4QXJyYXlBUFBMRShhcnJheSk7CiAjZWxzZQogICAgIHJldHVybiBH
TF9GQUxTRTsKQEAgLTE4OCw3ICsxODgsNyBAQCB2b2lkIEV4dGVuc2lvbnMzRE9wZW5HTDo6Ymlu
ZFZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QgYXJyYXkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0jaWYgIVBMQVRGT1JNKEdU
SykgJiYgIVBMQVRGT1JNKFFUKSAmJiBkZWZpbmVkKEdMX0FQUExFX3ZlcnRleF9hcnJheV9vYmpl
Y3QpICYmIEdMX0FQUExFX3ZlcnRleF9hcnJheV9vYmplY3QKKyNpZiAhUExBVEZPUk0oR1RLKSAm
JiAhUExBVEZPUk0oUVQpICYmICFQTEFURk9STShFRkwpICYmIGRlZmluZWQoR0xfQVBQTEVfdmVy
dGV4X2FycmF5X29iamVjdCkgJiYgR0xfQVBQTEVfdmVydGV4X2FycmF5X29iamVjdAogICAgIGds
QmluZFZlcnRleEFycmF5QVBQTEUoYXJyYXkpOwogI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVu
R0wuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNz
Q29udGV4dDNET3BlbkdMLmNwcAppbmRleCA0N2E0MWM2ZDAwMjY1YjBjYmE5YTQ0ZmZjYzQxMTA2
YWU5YmEwNzc1Li5lMjNjOTUxM2FlMGM1NGQ3NDZjYTU5YzE5Njk5M2UwNTRlYjVjMTYzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3ND
b250ZXh0M0RPcGVuR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAKQEAgLTM0LDcgKzM0LDcgQEAKIAog
I2lmIFBMQVRGT1JNKE1BQykKICNpbmNsdWRlIDxPcGVuR0wvZ2wuaD4KLSNlbGlmIFBMQVRGT1JN
KEdUSykKKyNlbGlmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oRUZMKQogI2luY2x1ZGUgIk9w
ZW5HTFNoaW1zLmgiCiAjZWxpZiBQTEFURk9STShRVCkKICNpbmNsdWRlIDxRdEdsb2JhbD4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGlj
c0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCmluZGV4IGU2OGJi
YTdmZDdmNTE5ZmQ3OGMxNjlhNzI5M2M5YjJhZDUyNjBkZTguLjBlYzRkZjllOTRlZDdhODViYmMz
ZWFlZGU5NGQwMmQ4MzJmMWQ1OTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNE
T3BlbkdMQ29tbW9uLmNwcApAQCAtNDgsNyArNDgsNyBAQAogCiAjaWYgUExBVEZPUk0oTUFDKQog
I2luY2x1ZGUgPE9wZW5HTC9nbC5oPgotI2VsaWYgUExBVEZPUk0oR1RLKQorI2VsaWYgUExBVEZP
Uk0oR1RLKSB8fCBQTEFURk9STShFRkwpCiAjaW5jbHVkZSAiT3BlbkdMU2hpbXMuaCIKICNlbGlm
IFBMQVRGT1JNKFFUKQogI2luY2x1ZGUgPFF0R2xvYmFsPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9lZmwvZXdrL2V3a192aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmll
dy5jcHAKaW5kZXggODUzYjM0MmViZDhiM2VmMTk1YjkwZTViNDZkZjY3ZTczMWJiMTYwMC4uNTM5
ZTIwMjZhZTM4MGVhM2M5NmFkOTAzMTE3NmM4YWMyNWQ2ZDY1ZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2sv
ZXdrX3ZpZXcuY3BwCkBAIC02NDgsNiArNjQ4LDcgQEAgc3RhdGljIEV3a19WaWV3X1ByaXZhdGVf
RGF0YSogX2V3a192aWV3X3ByaXZfbmV3KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSkK
ICAgICBwcml2LT5wYWdlU2V0dGluZ3MtPnNldE9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlRW5h
YmxlZCh0cnVlKTsKICAgICBwcml2LT5wYWdlU2V0dGluZ3MtPnNldFVzZXNQYWdlQ2FjaGUodHJ1
ZSk7CiAgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXRVc2VzRW5jb2RpbmdEZXRlY3RvcihmYWxz
ZSk7CisgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXRXZWJHTEVuYWJsZWQodHJ1ZSk7CiAKICAg
ICB1cmwgPSBwcml2LT5wYWdlU2V0dGluZ3MtPnVzZXJTdHlsZVNoZWV0TG9jYXRpb24oKTsKICAg
ICBwcml2LT5zZXR0aW5ncy51c2VyU3R5bGVzaGVldCA9IGVpbmFfc3RyaW5nc2hhcmVfYWRkKHVy
bC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9PcHRp
b25zRWZsLmNtYWtlIGIvU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2UKaW5kZXggMmYyYWJm
NGEzNDM5YzE4ZjIzN2VmZGUwYTIyNDUwMjk0NDJlZmNlOS4uNDlhNGU3NGQwOTM1MjFhZTRkYzA5
YzQzZDFlZjJlNjQxNzlmZjdhYiAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL09wdGlvbnNFZmwu
Y21ha2UKKysrIGIvU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2UKQEAgLTk1LDYgKzk1LDcg
QEAgV0VCS0lUX0ZFQVRVUkUoRU5BQkxFX1RPVUNIX0VWRU5UUyAiRW5hYmxlIFRvdWNoIEV2ZW50
cyIgREVGQVVMVCBPRkYpCiBXRUJLSVRfRkVBVFVSRShFTkFCTEVfVE9VQ0hfSUNPTl9MT0FESU5H
ICJFbmFibGUgVG91Y2ggSWNvbiBMb2FkaW5nIiBERUZBVUxUIE9GRikKIFdFQktJVF9GRUFUVVJF
KEVOQUJMRV9WSURFTyAiRW5hYmxlIHZpZGVvIiBERUZBVUxUIE9OKQogV0VCS0lUX0ZFQVRVUkUo
RU5BQkxFX1dFQl9TT0NLRVRTICJFbmFibGUgd2ViIHNvY2tldHMiIERFRkFVTFQgT04pCitXRUJL
SVRfRkVBVFVSRShFTkFCTEVfV0VCR0wgIkVuYWJsZSBXZWJHTCIgREVGQVVMVCBPRkYpCiBXRUJL
SVRfRkVBVFVSRShFTkFCTEVfV09SS0VSUyAiRW5hYmxlIHdvcmtlcnMiIERFRkFVTFQgT04pCiBX
RUJLSVRfRkVBVFVSRShFTkFCTEVfWFNMVCAiRW5hYmxlIFhTTFQiIERFRkFVTFQgT04pCiAKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpp
bmRleCAyZDIzNzcwYTMzZDAwNGU3MGQxYWE5YTZmNWQyM2Y2Y2FiZjNiNzM1Li43ZjQyYjk4MDFk
MzQzZmI1ZmZiODEwNjY3OGE3Njk1MTJiY2Y5MDc5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIw
MTItMDEtMzEgIENoYW5nU2VvayBPaCAgPHNoaXZhbWlkb3dAZ21haWwuY29tPgorCisgICAgICAg
IFtFRkxdIEVuYWJsZSBXZWJHTCB3aXRoIGdseCBiYWNrZW5kCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NzMwOAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vZWZsL1NraXBwZWQ6IFJlbW92
ZWQgZmFzdC9jYW52YXMvd2ViZ2wuCisKIDIwMTItMDEtMzEgIFl1em8gRnVqaXNoaW1hICA8eXV6
b0Bnb29nbGUuY29tPgogCiAgICAgICAgIFtDaHJvbWl1bV0gVW5yZXZpZXdlZCB0ZXN0IGV4cGVj
dGF0aW9uIGNoYW5nZS4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2VmbC9Ta2lw
cGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1NraXBwZWQKaW5kZXggMTNmZmNmMmE4Nzc0
NjcwODc4NDFhYWFlZGFiMDgyMDQyOTEzOGJjZC4uNGUzMDZhZmJlZThlZDA4ZDQ3ZDc0MGE5NjVh
NDkwMzU0NzYyMDYyMCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1NraXBw
ZWQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1NraXBwZWQKQEAgLTY5MSw3ICs2OTEs
NiBAQCBjb21wb3NpdGluZy93ZWJnbC93ZWJnbC1uby1hbHBoYS5odG1sCiBjb21wb3NpdGluZy93
ZWJnbC93ZWJnbC1ub25wcmVtdWx0aXBsaWVkLWJsZW5kLmh0bWwKIGNvbXBvc2l0aW5nL3dlYmds
L3dlYmdsLXJlZmxlY3Rpb24uaHRtbAogZWRpdGluZy9zZWxlY3Rpb24vY2FyZXQtbW9kZS1wYXJh
Z3JhcGgta2V5cy1uYXZpZ2F0aW9uLmh0bWwKLWZhc3QvY2FudmFzL3dlYmdsCiBmYXN0L2RvbS9X
aW5kb3cvdGltZXItcmVzdW1lLW9uLW5hdmlnYXRpb24tYmFjay5odG1sCiBmYXN0L2V2ZW50cy9v
bnVubG9hZC1iYWNrLXRvLXBhZ2UtY2FjaGUuaHRtbAogZmFzdC9ldmVudHMvcGFnZWhpZGUtdGlt
ZW91dC5odG1sCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cKaW5kZXggZWYzNDY1
OTdkZDBlNWNmYzk4YTE2ZGRiMTgzZjI3ZWMxODYzYWQ4ZS4uMDBjMjdkZGRhYmQxNmY3OTY3OGNi
YWY1OGI1Y2QxMjhmNjIyN2M2NyAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE0IEBACisyMDEyLTAxLTMxICBDaGFuZ1Nlb2sgT2ggIDxzaGl2YW1pZG93
QGdtYWlsLmNvbT4KKworICAgICAgICBbRUZMXSBFbmFibGUgV2ViR0wgd2l0aCBnbHggYmFja2Vu
ZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzczMDgK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFbmFibGVk
IFdlYkdMIGZlYXR1cmUgZm9yIEVGTCBwb3J0LiBUaGUgd2F5IGlzIHZlcnkgc2ltaWxhciB0byB0
aGUgb25lIG9mIEdUSyBwb3J0LgorCisgICAgICAgICogU291cmNlL2NtYWtlL09wdGlvbnNFZmwu
Y21ha2U6IEFkZGVkIGZlYXR1cmUgb3B0aW9uIGZvciBXZWJHTC4KKwogMjAxMi0wMS0zMSAgS2Vu
bmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4gIDxrZW5uZXRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAg
VGFwIGhpZ2hsaWdodGluZzogU3VwcG9ydCBiZXR0ZXIgb3V0bGluZXMgZm9yIG11bHRpbGluZSBp
bmxpbmVzCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125482</attachid>
            <date>2012-02-03 23:48:11 -0800</date>
            <delta_ts>2012-02-04 02:32:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>P77308.patch</filename>
            <type>text/plain</type>
            <size>52055</size>
            <attacher name="ChangSeok Oh">kevin.cs.oh</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCAxMGMyMGVhLi4wZDk4MzQx
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAK
KzIwMTItMDItMDIgIENoYW5nU2VvayBPaCAgPHNoaXZhbWlkb3dAZ21haWwuY29tPgorCisgICAg
ICAgIFtFRkxdIEVuYWJsZSBXZWJHTCB3aXRoIGdseCBiYWNrZW5kCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NzMwOAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE1hcnRpbiBSb2JpbnNvbi4KKworICAgICAgICBFbmFibGVkIFdlYkdMIGZlYXR1cmUgZm9y
IEVGTCBwb3J0LiBUaGUgd2F5IGlzIHZlcnkgc2ltaWxhciB0byB0aGUgb25lIG9mIEdUSyBwb3J0
LgorCisgICAgICAgICogU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2U6IEFkZGVkIGZlYXR1
cmUgb3B0aW9uIGZvciBXZWJHTC4KKwogMjAxMi0wMi0wMiAgUmFrZXNoIEtOICA8cmFrZXNoLmtu
QG1vdG9yb2xhLmNvbT4KIAogICAgICAgICBoaWRkZW4gYXR0cmlidXRlIG9uIDxpbnB1dCB0eXBl
PWZpbGUgLz4gc3VwcHJlc3NlcyB0aGUgZmlsZSBzZWxlY3Rpb24gZGlhbG9nCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggODRi
MDYxYi4uNGU1YzgzNiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xh
eW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDEyLTAyLTAyICBDaGFuZ1Nl
b2sgT2ggIDxzaGl2YW1pZG93QGdtYWlsLmNvbT4KKworICAgICAgICBbRUZMXSBFbmFibGUgV2Vi
R0wgd2l0aCBnbHggYmFja2VuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NzczMDgKKworICAgICAgICBSZXZpZXdlZCBieSBNYXJ0aW4gUm9iaW5zb24u
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9lZmwvU2tpcHBlZDogUmVtb3ZlZCBmYXN0L2NhbnZhcy93
ZWJnbC4KKwogMjAxMi0wMi0wMiAgU2hpbnlhIEthd2FuYWthICA8c2hpbnlha0Bnb29nbGUuY29t
PgogCiAgICAgICAgIFJlZmFjdG9yaW5nOiBTaGFyZSB0ZXN0IGRyaXZlcnMgb2Ygc2hhZG93IGNv
bnRlbnQgdGVzdHMuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9lZmwvU2tpcHBl
ZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2VmbC9Ta2lwcGVkCmluZGV4IDA1NzYzZWIuLjI4MGQ1
ZDQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2VmbC9Ta2lwcGVkCisrKyBiL0xh
eW91dFRlc3RzL3BsYXRmb3JtL2VmbC9Ta2lwcGVkCkBAIC02OTEsNyArNjkxLDYgQEAgY29tcG9z
aXRpbmcvd2ViZ2wvd2ViZ2wtbm8tYWxwaGEuaHRtbAogY29tcG9zaXRpbmcvd2ViZ2wvd2ViZ2wt
bm9ucHJlbXVsdGlwbGllZC1ibGVuZC5odG1sCiBjb21wb3NpdGluZy93ZWJnbC93ZWJnbC1yZWZs
ZWN0aW9uLmh0bWwKIGVkaXRpbmcvc2VsZWN0aW9uL2NhcmV0LW1vZGUtcGFyYWdyYXBoLWtleXMt
bmF2aWdhdGlvbi5odG1sCi1mYXN0L2NhbnZhcy93ZWJnbAogZmFzdC9kb20vV2luZG93L3RpbWVy
LXJlc3VtZS1vbi1uYXZpZ2F0aW9uLWJhY2suaHRtbAogZmFzdC9ldmVudHMvb251bmxvYWQtYmFj
ay10by1wYWdlLWNhY2hlLmh0bWwKIGZhc3QvZXZlbnRzL3BhZ2VoaWRlLXRpbWVvdXQuaHRtbApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dAppbmRleCA5NDUyYjE0Ny4uM2U4Y2YzMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTIxMzcsMjEgKzIxMzcsMjcgQEAgSUYgKEVOQUJMRV9XRUJHTCkKICAgICAgICAg
JHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L2dsc2xhbmcuY3BwCiAgICAgICAgICR7REVS
SVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9nbHNsYW5nX3RhYi5jcHAKICAgICAgICAgJHtUSElS
RFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0NvZGVHZW5HTFNMLmNwcAorICAgICAgICAk
e1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9uRW11bGF0
b3IuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9Db2Rl
R2VuR0xTTC5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVy
L0NvbXBpbGVyLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGls
ZXIvZGVidWcuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxl
ci9EZXRlY3RSZWN1cnNpb24uY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3Ny
Yy9jb21waWxlci9Gb3JMb29wVW5yb2xsLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9B
TkdMRS9zcmMvY29tcGlsZXIvSW5mb1NpbmsuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9
L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplLmNwcAogICAgICAgICAke1RISVJEUEFSVFlf
RElSfS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZURsbC5jcHAKICAgICAgICAgJHtUSElS
RFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybWVkaWF0ZS5jcHAKICAgICAgICAg
JHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybU91dC5jcHAKICAgICAg
ICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybVRyYXZlcnNlLmNw
cAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvTWFwTG9uZ1Zh
cmlhYmxlTmFtZXMuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21w
aWxlci9vc3NvdXJjZV9wb3NpeC5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUv
c3JjL2NvbXBpbGVyL091dHB1dEVTU0wuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FO
R0xFL3NyYy9jb21waWxlci9PdXRwdXRHTFNMLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElS
fS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0R0xTTEJhc2UuY3BwCiAgICAgICAgICR7VEhJUkRQ
QVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRITFNMLmNwcAogICAgICAgICAke1RI
SVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcGFyc2VDb25zdC5jcHAKICAgICAgICAg
JHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVyLmNwcAogICAg
ICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvUG9vbEFsbG9jLmNwcAot
ICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
CiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvYXRvbS5jCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvY3BwLmMKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9jcHBzdHJ1Y3QuYwpAQCAtMjE2NSwxMyArMjE3MSwxMyBAQCBJ
RiAoRU5BQkxFX1dFQkdMKQogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29t
cGlsZXIvU2hhZGVyTGFuZy5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3Jj
L2NvbXBpbGVyL1N5bWJvbFRhYmxlLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdM
RS9zcmMvY29tcGlsZXIvVmVyc2lvbkdMU0wuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9
L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9yRVNTTC5jcHAKICAgICAgICAgJHtUSElSRFBB
UlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JHTFNMLmNwcAogICAgICAgICAk
e1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckhMU0wuY3BwCiAg
ICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTZWxlY3Qu
Y3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci91dGlsLmNw
cAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvVmFsaWRhdGVM
aW1pdGF0aW9ucy5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBp
bGVyL1ZhcmlhYmxlSW5mby5jcHAKLQogICAgICAgICBodG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5j
cHAKICAgICAgICAgaHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZXMuY3BwCiAgICAg
ICAgIGh0bWwvY2FudmFzL1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuY3BwCkBAIC0yMTk2LDExICsy
MjAyLDkgQEAgSUYgKEVOQUJMRV9XRUJHTCkKICAgICAgICAgaHRtbC9jYW52YXMvT0VTU3RhbmRh
cmREZXJpdmF0aXZlcy5jcHAKICAgICAgICAgaHRtbC9jYW52YXMvT0VTVGV4dHVyZUZsb2F0LmNw
cAogICAgICAgICBodG1sL2NhbnZhcy9PRVNWZXJ0ZXhBcnJheU9iamVjdC5jcHAKLQogICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9BTkdMRVdlYktpdEJyaWRnZS5jcHAKLSAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuY3BwCi0gICAgICAgIAogICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuY3BwCiAgICAgKQogICAgIExJU1QoQVBQRU5EIFdlYkNv
cmVfSURMX0ZJTEVTCiAgICAgICAgIGh0bWwvY2FudmFzL09FU1N0YW5kYXJkRGVyaXZhdGl2ZXMu
aWRsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKaW5kZXggZjJjZmY2NS4uZDJhYjIwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDQ1IEBACisyMDEyLTAyLTAyICBDaGFuZ1Nlb2sgT2ggIDxzaGl2YW1pZG93QGdtYWlsLmNvbT4K
KworICAgICAgICBbRUZMXSBFbmFibGUgV2ViR0wgd2l0aCBnbHggYmFja2VuZAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzczMDgKKworICAgICAgICBS
ZXZpZXdlZCBieSBNYXJ0aW4gUm9iaW5zb24uCisKKyAgICAgICAgSW1wbGVtZW50ZWQgV2ViR0wg
ZmVhdHVyZSBmb3IgRUZMIHBvcnQuIFRoZSB3YXkgaXMgdmVyeSBzaW1pbGFyIHRvIHRoZSBvbmUg
b2YgR1RLIHBvcnQuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIHJlcXVpcmVkLiBXZSBjYW4gdmVy
aWZ5IHRoaXMgZmVhdHVyZSB3aXRoIHRoZSBleGlzdGluZyB0ZXN0IGNhc2VzLgorCisgICAgICAg
ICogQ01ha2VMaXN0cy50eHQ6IFJldmlzZWQgY29tbW9uIGZpbGVzIHJlcXVpcmVkIGZvciBXZWJH
TC4KKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZTogQWRkZWQgRUZMIHNwZWNpZmljIGZpbGVz
LgorICAgICAgICAqIGh0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmdldENvbnRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0FOR0xFV2ViS2l0QnJpZGdlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0M0QuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRmb3JtVGV4dHVyZSk6CisgICAgICAgIChHcmFwaGlj
c0NvbnRleHQzRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRz
SW50b0NhbnZhc0J1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0RyYXdp
bmdCdWZmZXJFZmwuY3BwOiBDb3BpZWQgZnJvbSBHVEsgcG9ydC4KKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6RHJhd2luZ0J1ZmZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjp+RHJhd2luZ0J1ZmZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpwbGF0Zm9ybUNvbG9yQnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkRyYXdpbmdCdWZmZXI6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNERWZsLmNwcDog
QWxtb3N0IHNhbWUgd2l0aCBHcmFwaGljc0NvbnRleHQzREd0ay5jcHAuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6fkdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjptYWtlQ29udGV4dEN1cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmlzR0xFUzJDb21wbGlhbnQpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMOjpjcmVhdGVWZXJ0ZXhBcnJheU9FUyk6Cisg
ICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVuR0w6OmRlbGV0ZVZlcnRleEFycmF5T0VT
KToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9wZW5HTDo6aXNWZXJ0ZXhBcnJheU9F
Uyk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJh
eU9FUyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4
dDNET3BlbkdMLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwOgorCiAyMDEyLTAyLTAyICBBZGFtIEJhcnRoICA8
YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVuYW1lIGNoZWNrTm9kZVNlY3VyaXR5IGFu
ZCBhbGxvd3NBY2Nlc3NGcm9tRnJhbWUgdG8gaGF2ZSBzZW5zaWJsZSBuYW1lcwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybUVmbC5jbWFrZQppbmRleCAxYjJlMWU0Li40Yzg3N2FlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVm
bC5jbWFrZQpAQCAtMjgxLDcgKzI4MSw2IEBAIElGIChFTkFCTEVfVklERU8pCiAgICkKIEVORElG
ICgpCiAKLQogSUYgKEVOQUJMRV9HTElCX1NVUFBPUlQpCiAgIExJU1QoQVBQRU5EIFdlYkNvcmVf
TElCUkFSSUVTCiAgICAgJHtHbGliX0xJQlJBUklFU30KQEAgLTI5NCwxMCArMjkzLDIzIEBAIEVO
RElGICgpCiBJRiAoRU5BQkxFX1dFQkdMKQogICBMSVNUKEFQUEVORCBXZWJDb3JlX0lOQ0xVREVf
RElSRUNUT1JJRVMKICAgICAke09QRU5HTF9JTkNMVURFX0RJUn0KKyAgICAiJHtXRUJDT1JFX0RJ
Un0vcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8iCisgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3Jt
L2dyYXBoaWNzL2dseCIKKyAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsIgogICApCiAgIExJU1QoQVBQRU5EIFdlYkNvcmVfTElCUkFSSUVTCiAgICAgJHtPUEVOR0xf
Z2xfTElCUkFSWX0KICAgKQorICBMSVNUKEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNwcAorICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL09wZW5HTFNoaW1zLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2VmbC9EcmF3aW5nQnVmZmVyRWZsLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFw
aGljc0NvbnRleHQzREVmbC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9nbHgvR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNp
b25zM0RPcGVuR0wuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29u
dGV4dDNET3BlbkdMLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0Nv
bnRleHQzRE9wZW5HTENvbW1vbi5jcHAKKyAgKQogRU5ESUYgKCkKIAogSUYgKFdURl9VU0VfU09V
UCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKaW5kZXggMTQzZDMz
NC4uYTEyMTQzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxl
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAK
QEAgLTE3Nyw3ICsxNzcsNyBAQCBDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBIVE1MQ2FudmFzRWxl
bWVudDo6Z2V0Q29udGV4dChjb25zdCBTdHJpbmcmIHR5cGUsIENhbnZhcwogI2lmIEVOQUJMRShX
RUJHTCkgICAgCiAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZG9jdW1lbnQoKS0+c2V0dGluZ3Mo
KTsKICAgICBpZiAoc2V0dGluZ3MgJiYgc2V0dGluZ3MtPndlYkdMRW5hYmxlZCgpCi0jaWYgIVBM
QVRGT1JNKENIUk9NSVVNKSAmJiAhUExBVEZPUk0oR1RLKQorI2lmICFQTEFURk9STShDSFJPTUlV
TSkgJiYgIVBMQVRGT1JNKEdUSykgJiYgIVBMQVRGT1JNKEVGTCkKICAgICAgICAgJiYgc2V0dGlu
Z3MtPmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKCkKICNlbmRpZgogICAgICAgICApIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0FOR0xFV2ViS2l0
QnJpZGdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9BTkdMRVdlYktpdEJy
aWRnZS5oCmluZGV4IDBmNGJmN2QuLmM2MzhiYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0FOR0xFV2ViS2l0QnJpZGdlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2UuaApAQCAtMzEsNyArMzEsNyBA
QAogCiAjaWYgUExBVEZPUk0oUVQpCiAjaW5jbHVkZSAiQU5HTEUvaW5jbHVkZS9HTFNMQU5HL1No
YWRlckxhbmcuaCIKLSNlbGlmICFQTEFURk9STShHVEspCisjZWxpZiAhUExBVEZPUk0oR1RLKSAm
JiAhUExBVEZPUk0oRUZMKQogI2luY2x1ZGUgIkFOR0xFL1NoYWRlckxhbmcuaCIKICNlbHNlCiAj
aW5jbHVkZSAiU2hhZGVyTGFuZy5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKaW5kZXggMzRjNTQ5YS4uMWZmZmU5YSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
M0QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHQzRC5oCkBAIC00Myw3ICs0Myw3IEBACiAjdW5kZWYgVkVSU0lPTgogI2VuZGlmCiAKLSNpZiBQ
TEFURk9STShNQUMpIHx8IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oUVQpCisjaWYgUExBVEZP
Uk0oTUFDKSB8fCBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShFRkwp
CiAjaW5jbHVkZSAiQU5HTEVXZWJLaXRCcmlkZ2UuaCIKICNlbmRpZgogCkBAIC01Nyw3ICs1Nyw3
IEBAIFFUX0JFR0lOX05BTUVTUEFDRQogY2xhc3MgUVBhaW50ZXI7CiBjbGFzcyBRUmVjdDsKIFFU
X0VORF9OQU1FU1BBQ0UKLSNlbGlmIFBMQVRGT1JNKEdUSykKKyNlbGlmIFBMQVRGT1JNKEdUSykg
fHwgUExBVEZPUk0oRUZMKQogdHlwZWRlZiB1bnNpZ25lZCBpbnQgR0x1aW50OwogI2VuZGlmCiAK
QEAgLTgzLDcgKzgzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDsKIGNsYXNzIERyYXdpbmdCdWZmZXI7CiBjbGFzcyBFeHRlbnNpb25zM0Q7Ci0j
aWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFFUKQorI2lmIFBM
QVRGT1JNKE1BQykgfHwgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShRVCkgfHwgUExBVEZPUk0o
RUZMKQogY2xhc3MgRXh0ZW5zaW9uczNET3BlbkdMOwogI2VuZGlmCiAjaWYgUExBVEZPUk0oUVQp
CkBAIC00OTMsNiArNDkzLDcgQEAgcHVibGljOgogI2VuZGlmCiAjZWxpZiBQTEFURk9STShFRkwp
CiAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNE
KCkgY29uc3Q7CisgICAgUGxhdGZvcm0zRE9iamVjdCBwbGF0Zm9ybVRleHR1cmUoKSBjb25zdCB7
IHJldHVybiBtX3RleHR1cmU7IH0KICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAg
ICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0OwogI2VuZGlmCkBAIC01MDUs
NyArNTA2LDcgQEAgcHVibGljOgogI2VuZGlmCiAgICAgYm9vbCBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKIAotI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oQ0hST01JVU0pIHx8IFBMQVRGT1JN
KEdUSykgfHwgUExBVEZPUk0oUVQpCisjaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShDSFJP
TUlVTSkgfHwgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oRUZMKQog
ICAgIC8vIFdpdGggbXVsdGlzYW1wbGluZyBvbiwgYmxpdCBmcm9tIG11bHRpc2FtcGxlRkJPIHRv
IHJlZ3VsYXIgRkJPLgogICAgIHZvaWQgcHJlcGFyZVRleHR1cmUoKTsKICNlbmRpZgpAQCAtNzg0
LDcgKzc4NSw3IEBAIHB1YmxpYzoKICNpZiBVU0UoQ0cpCiAgICAgc3RhdGljIHZvaWQgcGFpbnRU
b0NhbnZhcyhjb25zdCB1bnNpZ25lZCBjaGFyKiBpbWFnZVBpeGVscywgaW50IGltYWdlV2lkdGgs
IGludCBpbWFnZUhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjYW52
YXNXaWR0aCwgaW50IGNhbnZhc0hlaWdodCwgQ0dDb250ZXh0UmVmKTsKLSNlbGlmIFBMQVRGT1JN
KEdUSykKKyNlbGlmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oRUZMKQogICAgIHZvaWQgcGFp
bnRUb0NhbnZhcyhjb25zdCB1bnNpZ25lZCBjaGFyKiBpbWFnZVBpeGVscywgaW50IGltYWdlV2lk
dGgsIGludCBpbWFnZUhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNhbnZhc1dp
ZHRoLCBpbnQgY2FudmFzSGVpZ2h0LCBQbGF0Zm9ybUNvbnRleHRDYWlybyogY29udGV4dCk7CiAj
ZW5kaWYKQEAgLTgwMyw2ICs4MDQsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBwYWludHNJbnRvQ2Fu
dmFzQnVmZmVyKCkgY29uc3Q7CiAjZWxpZiBQTEFURk9STShHVEspCiAgICAgYm9vbCBwYWludHNJ
bnRvQ2FudmFzQnVmZmVyKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorI2VsaWYgUExBVEZPUk0o
RUZMKQorICAgIGJvb2wgcGFpbnRzSW50b0NhbnZhc0J1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIHRy
dWU7IH0KICNlbHNlCiAgICAgYm9vbCBwYWludHNJbnRvQ2FudmFzQnVmZmVyKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KICNlbmRpZgpAQCAtODkzLDcgKzg5Niw3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICAgICAgQWxwaGFPcCBhbHBoYU9wLAogICAgICAgICAgICAgICAgICAgICB2b2lk
KiBkZXN0aW5hdGlvbkRhdGEpOwogCi0jaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShHVEsp
IHx8IFBMQVRGT1JNKFFUKQorI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oR1RLKSB8fCBQ
TEFURk9STShRVCkgfHwgUExBVEZPUk0oRUZMKQogICAgIC8vIFRha2UgaW50byBhY2NvdW50IHRo
ZSB1c2VyJ3MgcmVxdWVzdGVkIGNvbnRleHQgY3JlYXRpb24gYXR0cmlidXRlcywKICAgICAvLyBp
biBwYXJ0aWN1bGFyIHN0ZW5jaWwgYW5kIGFudGlhbGlhcywgYW5kIGRldGVybWluZSB3aGljaCBj
b3VsZCBvcgogICAgIC8vIGNvdWxkIG5vdCBiZSBob25vcmVkIGJhc2VkIG9uIHRoZSBjYXBhYmls
aXRpZXMgb2YgdGhlIE9wZW5HTApAQCAtOTEzLDcgKzkxNiw3IEBAIHB1YmxpYzoKICAgICBSZXRh
aW5QdHI8V2ViR0xMYXllcj4gbV93ZWJHTExheWVyOwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShN
QUMpIHx8IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oUVQpCisjaWYgUExBVEZPUk0oTUFDKSB8
fCBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShFRkwpCiAgICAgdHlw
ZWRlZiBzdHJ1Y3QgewogICAgICAgICBTdHJpbmcgc291cmNlOwogICAgICAgICBTdHJpbmcgbG9n
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0RyYXdp
bmdCdWZmZXJFZmwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0Ry
YXdpbmdCdWZmZXJFZmwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJh
YmU1ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9lZmwvRHJhd2luZ0J1ZmZlckVmbC5jcHAKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorCisjaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykgfHwgRU5BQkxFKFdF
QkdMKQorCisjaW5jbHVkZSAiRHJhd2luZ0J1ZmZlci5oIgorCisjaW5jbHVkZSAiRXh0ZW5zaW9u
czNELmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRHJhd2luZ0J1ZmZlcjo6RHJhd2luZ0J1
ZmZlcihHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9v
bCBtdWx0aXNhbXBsZUV4dGVuc2lvblN1cHBvcnRlZCwgYm9vbCBwYWNrZWREZXB0aFN0ZW5jaWxF
eHRlbnNpb25TdXBwb3J0ZWQsIGJvb2wgc2VwYXJhdGVCYWNraW5nVGV4dHVyZSkKKyAgICA6IG1f
c2VwYXJhdGVCYWNraW5nVGV4dHVyZShzZXBhcmF0ZUJhY2tpbmdUZXh0dXJlKQorICAgICwgbV9z
Y2lzc29yRW5hYmxlZChmYWxzZSkKKyAgICAsIG1fdGV4dHVyZTJEQmluZGluZygwKQorICAgICwg
bV9hY3RpdmVUZXh0dXJlVW5pdChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApCisgICAgLCBt
X2NvbnRleHQoY29udGV4dCkKKyAgICAsIG1fc2l6ZSgtMSwgLTEpCisgICAgLCBtX211bHRpc2Ft
cGxlRXh0ZW5zaW9uU3VwcG9ydGVkKG11bHRpc2FtcGxlRXh0ZW5zaW9uU3VwcG9ydGVkKQorICAg
ICwgbV9wYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQocGFja2VkRGVwdGhTdGVu
Y2lsRXh0ZW5zaW9uU3VwcG9ydGVkKQorICAgICwgbV9mYm8oY29udGV4dC0+Y3JlYXRlRnJhbWVi
dWZmZXIoKSkKKyAgICAsIG1fY29sb3JCdWZmZXIoMCkKKyAgICAsIG1fZGVwdGhTdGVuY2lsQnVm
ZmVyKDApCisgICAgLCBtX2RlcHRoQnVmZmVyKDApCisgICAgLCBtX3N0ZW5jaWxCdWZmZXIoMCkK
KyAgICAsIG1fbXVsdGlzYW1wbGVGQk8oMCkKKyAgICAsIG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZl
cigwKQoreworICAgIC8vIFN1cHBvcnQgZm9yIGEgc2VwYXJhdGUgYmFja2luZyB0ZXh0dXJlIGhh
cyBvbmx5IGJlZW4gZW5hYmxlZCBmb3IKKyAgICAvLyB0aGUgY2hyb21pdW0gcG9ydC4KKyAgICBB
U1NFUlQoIW1fc2VwYXJhdGVCYWNraW5nVGV4dHVyZSk7CisgICAgQVNTRVJUKG1fZmJvKTsKKyAg
ICBpZiAoIW1fZmJvKSB7CisgICAgICAgIGNsZWFyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICAvLyBDcmVhdGUgYSB0ZXh0dXJlIHRvIHJlbmRlciBpbnRvLgorICAgIG1fY29sb3JC
dWZmZXIgPSBjb250ZXh0LT5jcmVhdGVUZXh0dXJlKCk7CisgICAgY29udGV4dC0+YmluZFRleHR1
cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fY29sb3JCdWZmZXIpOworICAgIGNv
bnRleHQtPnRleFBhcmFtZXRlcmYoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5F
QVIpOworICAgIGNvbnRleHQtPnRleFBhcmFtZXRlcmYoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29u
dGV4dDNEOjpMSU5FQVIpOworICAgIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUywgR3Jh
cGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOworICAgIGNvbnRleHQtPnRleFBhcmFtZXRl
cmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFX1dSQVBfVCwgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOworICAgIGNvbnRl
eHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwKTsKKworICAg
IGNyZWF0ZVNlY29uZGFyeUJ1ZmZlcnMoKTsKKyAgICByZXNldChzaXplKTsKK30KKworRHJhd2lu
Z0J1ZmZlcjo6fkRyYXdpbmdCdWZmZXIoKQoreworICAgIGNsZWFyKCk7Cit9CisKK1BsYXRmb3Jt
M0RPYmplY3QgRHJhd2luZ0J1ZmZlcjo6cGxhdGZvcm1Db2xvckJ1ZmZlcigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fY29sb3JCdWZmZXI7Cit9CisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCit2b2lkIERyYXdpbmdCdWZmZXI6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZh
cyhDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQoreworfQorI2VuZGlmCisKK30KKwor
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwv
R3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZWZsL0dyYXBoaWNzQ29udGV4dDNERWZsLmNwcAppbmRleCBlM2U4MmY5Li4xZjFlZGEyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3ND
b250ZXh0M0RFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Vm
bC9HcmFwaGljc0NvbnRleHQzREVmbC5jcHAKQEAgLTEsODUwICsxLDE0NyBAQAogLyoKLSAgICBD
b3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcwotCi0gICAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
Ci0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEsIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKIAogI2lmIEVOQUJMRShXRUJHTCkKLQotI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwuaCIKLQotI2luY2x1ZGUgIkltYWdlRGF0YS5o
IgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiRXh0ZW5zaW9uczNET3Bl
bkdMLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgiCisjaW5jbHVkZSAi
T3BlbkdMU2hpbXMuaCIKKyNpbmNsdWRlICJTaGFkZXJMYW5nLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gR3JhcGhpY3NDb250ZXh0M0Q6
OmNyZWF0ZShHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmRvdyog
aG9zdFdpbmRvdywgUmVuZGVyU3R5bGUgcmVuZGVyU3R5bGUpCitQYXNzUmVmUHRyPEdyYXBoaWNz
Q29udGV4dDNEPiBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEOjpB
dHRyaWJ1dGVzIGF0dHJpYnV0ZXMsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIEdyYXBoaWNzQ29u
dGV4dDNEOjpSZW5kZXJTdHlsZSByZW5kZXJTdHlsZSkKIHsKLSAgICBib29sIHJlbmRlckRpcmVj
dGx5VG9FdmFzR0xPYmplY3QgPSAocmVuZGVyU3R5bGUgPT0gUmVuZGVyRGlyZWN0bHlUb0hvc3RX
aW5kb3cpOworICAgIGJvb2wgcmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cgPSAocmVuZGVyU3R5
bGUgPT0gUmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpOworICAgIC8vIFRoaXMgaW1wbGVtZW50
YXRpb24gZG9lc24ndCBjdXJyZW50bHkgc3VwcG9ydCByZW5kZXJpbmcgZGlyZWN0bHkgdG8gdGhl
IEhvc3RXaW5kb3cuCisgICAgaWYgKHJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KQorICAgICAg
ICByZXR1cm4gMDsKIAotICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQzREludGVybmFsPiBpbnRl
cm5hbCA9IEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmNyZWF0ZShhdHRycywgaG9zdFdpbmRv
dywgcmVuZGVyRGlyZWN0bHlUb0V2YXNHTE9iamVjdCk7Ci0gICAgaWYgKCFpbnRlcm5hbCkKKyAg
ICBPd25QdHI8R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlPiBwcml2ID0gR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlOjpjcmVhdGUoKTsKKyAgICBpZiAoIXByaXYpCiAgICAgICAgIHJldHVybiAwOwog
Ci0gICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gYWRvcHRSZWYobmV3IEdy
YXBoaWNzQ29udGV4dDNEKGF0dHJzLCBob3N0V2luZG93LCByZW5kZXJEaXJlY3RseVRvRXZhc0dM
T2JqZWN0KSk7Ci0gICAgY29udGV4dC0+bV9pbnRlcm5hbCA9IGludGVybmFsLnJlbGVhc2UoKTsK
KyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBhZG9wdFJlZihuZXcgR3Jh
cGhpY3NDb250ZXh0M0QoYXR0cmlidXRlcywgaG9zdFdpbmRvdywgcmVuZGVyRGlyZWN0bHlUb0hv
c3RXaW5kb3cpKTsKKyAgICBjb250ZXh0LT5tX3ByaXZhdGUgPSBwcml2LnJlbGVhc2UoKTsKICAg
ICByZXR1cm4gY29udGV4dC5yZWxlYXNlKCk7CiB9CiAKLUdyYXBoaWNzQ29udGV4dDNEOjpHcmFw
aGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdp
bmRvdyogaG9zdFdpbmRvdywgYm9vbCByZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdykKK0dyYXBo
aWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmli
dXRlcyBhdHRyaWJ1dGVzLCBIb3N0V2luZG93KiBob3N0V2luZG93LCBib29sIHJlbmRlckRpcmVj
dGx5VG9Ib3N0V2luZG93KQogICAgIDogbV9jdXJyZW50V2lkdGgoMCkKICAgICAsIG1fY3VycmVu
dEhlaWdodCgwKQotICAgICwgbV9pc1Jlc291cmNlU2FmZShmYWxzZSkKLXsKKyAgICAsIG1fYXR0
cnMoYXR0cmlidXRlcykKKyAgICAsIG1fdGV4dHVyZSgwKQorICAgICwgbV9mYm8oMCkKKyAgICAs
IG1fZGVwdGhTdGVuY2lsQnVmZmVyKDApCisgICAgLCBtX2JvdW5kRkJPKDApCisgICAgLCBtX211
bHRpc2FtcGxlRkJPKDApCisgICAgLCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKDAp
CisgICAgLCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIoMCkKK3sKKyAgICBHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGU6OmFkZEFjdGl2ZUdyYXBoaWNzQ29udGV4dCh0aGlzKTsKKworICAgIHZhbGlk
YXRlQXR0cmlidXRlcygpOworCisgICAgLy8gQ3JlYXRlIGEgdGV4dHVyZSB0byByZW5kZXIgaW50
by4KKyAgICA6OmdsR2VuVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7CisgICAgOjpnbEJpbmRUZXh0
dXJlKEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZSk7CisgICAgOjpnbFRleFBhcmFtZXRlcmYoR0xf
VEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOworICAgIDo6Z2xU
ZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElO
RUFSKTsKKyAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dS
QVBfUywgR0xfQ0xBTVApOworICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdM
X1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUCk7CisgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRV
UkVfMkQsIDApOworCisgICAgLy8gQ3JlYXRlIGFuIEZCTy4KKyAgICA6OmdsR2VuRnJhbWVidWZm
ZXJzRVhUKDEsICZtX2Zibyk7CisgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJV
RkZFUl9FWFQsIG1fZmJvKTsKKworICAgIG1fYm91bmRGQk8gPSBtX2ZibzsKKyAgICBpZiAoIW1f
YXR0cnMuYW50aWFsaWFzICYmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkpCisg
ICAgICAgIDo6Z2xHZW5SZW5kZXJidWZmZXJzRVhUKDEsICZtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7
CisKKyAgICAvLyBDcmVhdGUgYSBtdWx0aXNhbXBsZSBGQk8uCisgICAgaWYgKG1fYXR0cnMuYW50
aWFsaWFzKSB7CisgICAgICAgIDo6Z2xHZW5GcmFtZWJ1ZmZlcnNFWFQoMSwgJm1fbXVsdGlzYW1w
bGVGQk8pOworICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VY
VCwgbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgIG1fYm91bmRGQk8gPSBtX211bHRpc2FtcGxl
RkJPOworICAgICAgICA6OmdsR2VuUmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9tdWx0aXNhbXBsZUNv
bG9yQnVmZmVyKTsKKyAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCB8fCBtX2F0dHJzLmRlcHRo
KQorICAgICAgICAgICAgOjpnbEdlblJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fbXVsdGlzYW1wbGVE
ZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgIH0KKworICAgIC8vIEFOR0xFIGluaXRpYWxpemF0aW9u
LgorICAgIFNoQnVpbHRJblJlc291cmNlcyBBTkdMRVJlc291cmNlczsKKyAgICBTaEluaXRCdWls
dEluUmVzb3VyY2VzKCZBTkdMRVJlc291cmNlcyk7CisKKyAgICBnZXRJbnRlZ2VydihHcmFwaGlj
c0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9BVFRSSUJTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4
QXR0cmlicyk7CisgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhf
VU5JRk9STV9WRUNUT1JTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4VW5pZm9ybVZlY3RvcnMp
OworICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkFSWUlOR19WRUNUT1JT
LCAmQU5HTEVSZXNvdXJjZXMuTWF4VmFyeWluZ1ZlY3RvcnMpOworICAgIGdldEludGVnZXJ2KEdy
YXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZBTkdMRVJl
c291cmNlcy5NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyk7CisgICAgZ2V0SW50ZWdlcnYoR3Jh
cGhpY3NDb250ZXh0M0Q6Ok1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTLCAmQU5HTEVS
ZXNvdXJjZXMuTWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyk7CisgICAgZ2V0SW50ZWdlcnYo
R3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTLCAmQU5HTEVSZXNvdXJj
ZXMuTWF4VGV4dHVyZUltYWdlVW5pdHMpOworICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4
dDNEOjpNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTLCAmQU5HTEVSZXNvdXJjZXMuTWF4RnJh
Z21lbnRVbmlmb3JtVmVjdG9ycyk7CisKKyAgICAvLyBBbHdheXMgc2V0IHRvIDEgZm9yIE9wZW5H
TCBFUy4KKyAgICBBTkdMRVJlc291cmNlcy5NYXhEcmF3QnVmZmVycyA9IDE7CisgICAgbV9jb21w
aWxlci5zZXRSZXNvdXJjZXMoQU5HTEVSZXNvdXJjZXMpOworCisgICAgOjpnbEVuYWJsZShHTF9W
RVJURVhfUFJPR1JBTV9QT0lOVF9TSVpFKTsKKyAgICA6OmdsRW5hYmxlKEdMX1BPSU5UX1NQUklU
RSk7CisgICAgOjpnbENsZWFyQ29sb3IoMCwgMCwgMCwgMCk7CiB9CiAKIEdyYXBoaWNzQ29udGV4
dDNEOjp+R3JhcGhpY3NDb250ZXh0M0QoKQogewotfQorICAgIEdyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZTo6cmVtb3ZlQWN0aXZlR3JhcGhpY3NDb250ZXh0KHRoaXMpOworICAgIGlmICghbV9wcml2
YXRlLT5tX2NvbnRleHQpCisgICAgICAgIHJldHVybjsKIAotUGxhdGZvcm1HcmFwaGljc0NvbnRl
eHQzRCBHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1faW50ZXJuYWwtPnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKTsK
KyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsRGVsZXRlVGV4dHVyZXMoMSwgJm1f
dGV4dHVyZSk7CisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKSB7CisgICAgICAgIDo6Z2xEZWxl
dGVSZW5kZXJidWZmZXJzRVhUKDEsICZtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOworICAgICAg
ICBpZiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpCisgICAgICAgICAgICA6Omds
RGVsZXRlUmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZl
cik7CisgICAgICAgIDo6Z2xEZWxldGVGcmFtZWJ1ZmZlcnNFWFQoMSwgJm1fbXVsdGlzYW1wbGVG
Qk8pOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRy
cy5kZXB0aCkKKyAgICAgICAgICAgIDo6Z2xEZWxldGVSZW5kZXJidWZmZXJzRVhUKDEsICZtX2Rl
cHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgfQorICAgIDo6Z2xEZWxldGVGcmFtZWJ1ZmZlcnNFWFQo
MSwgJm1fZmJvKTsKIH0KIAotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLVBsYXRm
b3JtTGF5ZXIqIEdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotI2VuZGlmCi0KIGJvb2wgR3Jh
cGhpY3NDb250ZXh0M0Q6Om1ha2VDb250ZXh0Q3VycmVudCgpCiB7Ci0gICAgbV9pbnRlcm5hbC0+
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgR3JhcGhp
Y3NDb250ZXh0M0Q6OmlzR0xFUzJDb21wbGlhbnQoKSBjb25zdAotewotICAgIHJldHVybiBtX2lu
dGVybmFsLT5pc0dMRVMyQ29tcGxpYW50KCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmFjdGl2ZVRleHR1cmUoR0MzRGVudW0gdGV4dHVyZSkKLXsKLSAgICBtX2ludGVybmFsLT5hY3Rp
dmVUZXh0dXJlKHRleHR1cmUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjphdHRhY2hT
aGFkZXIoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikK
LXsKLSAgICBtX2ludGVybmFsLT5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgc2hhZGVyKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtM0RPYmpl
Y3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBt
X2ludGVybmFsLT5iaW5kQXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgaW5kZXgsIG5hbWUpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kQnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxh
dGZvcm0zRE9iamVjdCBidWZmZXIpCi17Ci0gICAgbV9pbnRlcm5hbC0+YmluZEJ1ZmZlcih0YXJn
ZXQsIGJ1ZmZlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRGcmFtZWJ1ZmZl
cihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQotewotICAgIG1faW50
ZXJuYWwtPmJpbmRGcmFtZWJ1ZmZlcih0YXJnZXQsIGJ1ZmZlcik7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmJpbmRSZW5kZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNE
T2JqZWN0IHJlbmRlcmJ1ZmZlcikKLXsKLSAgICBtX2ludGVybmFsLT5iaW5kUmVuZGVyYnVmZmVy
KHRhcmdldCwgcmVuZGVyYnVmZmVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Ymlu
ZFRleHR1cmUoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUpCi17Ci0g
ICAgbV9pbnRlcm5hbC0+YmluZFRleHR1cmUodGFyZ2V0LCB0ZXh0dXJlKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6YmxlbmRDb2xvcihHQzNEY2xhbXBmIHJlZCwgR0MzRGNsYW1wZiBn
cmVlbiwgR0MzRGNsYW1wZiBibHVlLCBHQzNEY2xhbXBmIGFscGhhKQotewotICAgIG1faW50ZXJu
YWwtPmJsZW5kQ29sb3IocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpibGVuZEVxdWF0aW9uKEdDM0RlbnVtIG1vZGUpCi17Ci0gICAgbV9pbnRl
cm5hbC0+YmxlbmRFcXVhdGlvbihtb2RlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
YmxlbmRFcXVhdGlvblNlcGFyYXRlKEdDM0RlbnVtIG1vZGVSR0IsIEdDM0RlbnVtIG1vZGVBbHBo
YSkKLXsKLSAgICBtX2ludGVybmFsLT5ibGVuZEVxdWF0aW9uU2VwYXJhdGUobW9kZVJHQiwgbW9k
ZUFscGhhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRGdW5jKEdDM0RlbnVt
IHNyY0ZhY3RvciwgR0MzRGVudW0gZHN0RmFjdG9yKQotewotICAgIG1faW50ZXJuYWwtPmJsZW5k
RnVuYyhzcmNGYWN0b3IsIGRzdEZhY3Rvcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmJsZW5kRnVuY1NlcGFyYXRlKEdDM0RlbnVtIHNyY1JHQiwgR0MzRGVudW0gZHN0UkdCLCBHQzNE
ZW51bSBzcmNBbHBoYSwgR0MzRGVudW0gZHN0QWxwaGEpCi17Ci0gICAgbV9pbnRlcm5hbC0+Ymxl
bmRGdW5jU2VwYXJhdGUoc3JjUkdCLCBkc3RSR0IsIHNyY0FscGhhLCBkc3RBbHBoYSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
c2l6ZWlwdHIgc2l6ZSwgR0MzRGVudW0gdXNhZ2UpCi17Ci0gICAgbV9pbnRlcm5hbC0+YnVmZmVy
RGF0YSh0YXJnZXQsIHNpemUsIDAsIHVzYWdlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6YnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaXB0ciBzaXplLCBjb25zdCB2
b2lkKiBkYXRhLCBHQzNEZW51bSB1c2FnZSkKLXsKLSAgICBtX2ludGVybmFsLT5idWZmZXJEYXRh
KHRhcmdldCwgc2l6ZSwgZGF0YSwgdXNhZ2UpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpidWZmZXJTdWJEYXRhKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludHB0ciBvZmZzZXQsIEdDM0Rz
aXplaXB0ciBzaXplLCBjb25zdCB2b2lkKiBkYXRhKQotewotICAgIG1faW50ZXJuYWwtPmJ1ZmZl
clN1YkRhdGEodGFyZ2V0LCBvZmZzZXQsIHNpemUsIGRhdGEpOwotfQotCi1HQzNEZW51bSBHcmFw
aGljc0NvbnRleHQzRDo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHQzNEZW51bSB0YXJnZXQpCi17
Ci0gICAgcmV0dXJuIG1faW50ZXJuYWwtPmNoZWNrRnJhbWVidWZmZXJTdGF0dXModGFyZ2V0KTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXIoR0MzRGJpdGZpZWxkIG1hc2spCi17
Ci0gICAgbV9pbnRlcm5hbC0+Y2xlYXIobWFzayk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmNsZWFyQ29sb3IoR0MzRGNsYW1wZiByZWQsIEdDM0RjbGFtcGYgZ3JlZW4sIEdDM0RjbGFt
cGYgYmx1ZSwgR0MzRGNsYW1wZiBhbHBoYSkKLXsKLSAgICBtX2ludGVybmFsLT5jbGVhckNvbG9y
KHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
Y2xlYXJEZXB0aChHQzNEY2xhbXBmIGRlcHRoKQotewotICAgIG1faW50ZXJuYWwtPmNsZWFyRGVw
dGgoZGVwdGgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhclN0ZW5jaWwoR0Mz
RGludCBjbGVhclZhbHVlKQotewotICAgIG1faW50ZXJuYWwtPmNsZWFyU3RlbmNpbChjbGVhclZh
bHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29sb3JNYXNrKEdDM0Rib29sZWFu
IHJlZCwgR0MzRGJvb2xlYW4gZ3JlZW4sIEdDM0Rib29sZWFuIGJsdWUsIEdDM0Rib29sZWFuIGFs
cGhhKQotewotICAgIG1faW50ZXJuYWwtPmNvbG9yTWFzayhyZWQsIGdyZWVuLCBibHVlLCBhbHBo
YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvbXBpbGVTaGFkZXIoUGxhdGZvcm0z
RE9iamVjdCBzaGFkZXIpCi17Ci0gICAgbV9pbnRlcm5hbC0+Y29tcGlsZVNoYWRlcihzaGFkZXIp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb3B5VGV4SW1hZ2UyRChHQzNEZW51bSB0
YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEaW50IHgs
IEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJv
cmRlcikKLXsKLSAgICBtX2ludGVybmFsLT5jb3B5VGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBp
bnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6Y29weVRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
aW50IGxldmVsLCBHQzNEaW50IHhPZmZzZXQsIEdDM0RpbnQgeU9mZnNldCwgR0MzRGludCB4LCBH
QzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKLXsKLSAgICBtX2lu
dGVybmFsLT5jb3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4T2Zmc2V0LCB5T2Zmc2V0
LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29t
cHJlc3NlZFRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51
bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNE
aW50IGJvcmRlciwgR0MzRHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCogZGF0YSkKLXsKLSAg
ICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIGNvbXByZXNzZWRUZXhJbWFnZTJELgotICAgIC8v
IG1faW50ZXJuYWwtPmNvbXByZXNzZWRUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFs
Zm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGltYWdlU2l6ZSwgZGF0YSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdD
M0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEc2l6
ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkKiBkYXRhKQotewotICAgIC8vIEZJWE1FOiBBZGQgc3Vw
cG9ydCBmb3IgY29tcHJlc3NlZFRleFN1YkltYWdlMkQuCi0gICAgLy8gbV9pbnRlcm5hbC0+Y29t
cHJlc3NlZFRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lk
dGgsIGhlaWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIGRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpjdWxsRmFjZShHQzNEZW51bSBtb2RlKQotewotICAgIG1faW50ZXJuYWwtPmN1
bGxGYWNlKG1vZGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZXB0aEZ1bmMoR0Mz
RGVudW0gZnVuYykKLXsKLSAgICBtX2ludGVybmFsLT5kZXB0aEZ1bmMoZnVuYyk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRoTWFzayhHQzNEYm9vbGVhbiBmbGFnKQotewotICAg
IG1faW50ZXJuYWwtPmRlcHRoTWFzayhmbGFnKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6ZGVwdGhSYW5nZShHQzNEY2xhbXBmIHpOZWFyLCBHQzNEY2xhbXBmIHpGYXIpCi17Ci0gICAg
bV9pbnRlcm5hbC0+ZGVwdGhSYW5nZSh6TmVhciwgekZhcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmRldGFjaFNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIFBsYXRmb3Jt
M0RPYmplY3Qgc2hhZGVyKQotewotICAgIG1faW50ZXJuYWwtPmRldGFjaFNoYWRlcihwcm9ncmFt
LCBzaGFkZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkaXNhYmxlKEdDM0RlbnVt
IGNhcCkKLXsKLSAgICBtX2ludGVybmFsLT5kaXNhYmxlKGNhcCk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCkKLXsK
LSAgICBtX2ludGVybmFsLT5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkcmF3QXJyYXlzKEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQg
Zmlyc3QsIEdDM0RzaXplaSBjb3VudCkKLXsKLSAgICBtX2ludGVybmFsLT5kcmF3QXJyYXlzKG1v
ZGUsIGZpcnN0LCBjb3VudCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRyYXdFbGVt
ZW50cyhHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIEdDM0Rp
bnRwdHIgb2Zmc2V0KQotewotICAgIG1faW50ZXJuYWwtPmRyYXdFbGVtZW50cyhtb2RlLCBjb3Vu
dCwgdHlwZSwgb2Zmc2V0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZW5hYmxlKEdD
M0RlbnVtIGNhcCkKLXsKLSAgICBtX2ludGVybmFsLT5lbmFibGUoY2FwKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgp
Ci17Ci0gICAgbV9pbnRlcm5hbC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmaW5pc2goKQotewotICAgIG1faW50ZXJuYWwtPmZp
bmlzaCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmbHVzaCgpCi17Ci0gICAgbV9p
bnRlcm5hbC0+Zmx1c2goKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZnJhbWVidWZm
ZXJSZW5kZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNE
ZW51bSByZW5kZXJidWZmZXJUYXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQotewotICAg
IG1faW50ZXJuYWwtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHRhcmdldCwgYXR0YWNobWVudCwg
cmVuZGVyYnVmZmVyVGFyZ2V0LCBidWZmZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpmcmFtZWJ1ZmZlclRleHR1cmUyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1l
bnQsIEdDM0RlbnVtIHRleFRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlLCBHQzNEaW50
IGxldmVsKQotewotICAgIG1faW50ZXJuYWwtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKHRhcmdldCwg
YXR0YWNobWVudCwgdGV4VGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmZyb250RmFjZShHQzNEZW51bSBtb2RlKQotewotICAgIG1faW50ZXJuYWwt
PmZyb250RmFjZShtb2RlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2VuZXJhdGVN
aXBtYXAoR0MzRGVudW0gdGFyZ2V0KQotewotICAgIG1faW50ZXJuYWwtPmdlbmVyYXRlTWlwbWFw
KHRhcmdldCk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZUF0dHJpYihQ
bGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZv
KQotewotICAgIHJldHVybiBtX2ludGVybmFsLT5nZXRBY3RpdmVBdHRyaWIocHJvZ3JhbSwgaW5k
ZXgsIGluZm8pOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBY3RpdmVVbmlmb3Jt
KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGlu
Zm8pCi17Ci0gICAgcmV0dXJuIG1faW50ZXJuYWwtPmdldEFjdGl2ZVVuaWZvcm0ocHJvZ3JhbSwg
aW5kZXgsIGluZm8pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBdHRhY2hlZFNo
YWRlcnMoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEc2l6ZWkgbWF4Q291bnQsIEdDM0Rz
aXplaSogY291bnQsIFBsYXRmb3JtM0RPYmplY3QqIHNoYWRlcnMpCi17Ci0gICAgbV9pbnRlcm5h
bC0+Z2V0QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0sIG1heENvdW50LCBjb3VudCwgc2hhZGVycyk7
Ci19Ci0KLWludCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QXR0cmliTG9jYXRpb24oUGxhdGZvcm0z
RE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgcmV0dXJuIG1faW50
ZXJuYWwtPmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIG5hbWUpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRCb29sZWFudihHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0Rib29sZWFu
KiB2YWx1ZSkKLXsKLSAgICBtX2ludGVybmFsLT5nZXRCb29sZWFudihwYXJhbU5hbWUsIHZhbHVl
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QnVmZmVyUGFyYW1ldGVyaXYoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQqIHZhbHVlKQotewotICAg
IG1faW50ZXJuYWwtPmdldEJ1ZmZlclBhcmFtZXRlcml2KHRhcmdldCwgcGFyYW1OYW1lLCB2YWx1
ZSk7Ci19Ci0KLUdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIEdyYXBoaWNzQ29udGV4dDNE
OjpnZXRDb250ZXh0QXR0cmlidXRlcygpCi17Ci0gICAgcmV0dXJuIG1faW50ZXJuYWwtPmdldENv
bnRleHRBdHRyaWJ1dGVzKCk7Ci19Ci0KLUdDM0RlbnVtIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRF
cnJvcigpCi17Ci0gICAgcmV0dXJuIG1faW50ZXJuYWwtPmdldEVycm9yKCk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmdldEZsb2F0dihHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0RmbG9h
dCogdmFsdWUpCi17Ci0gICAgbV9pbnRlcm5hbC0+Z2V0RmxvYXR2KHBhcmFtTmFtZSwgdmFsdWUp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQ
YXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVt
IHBhcmFtTmFtZSwgR0MzRGludCogdmFsdWUpCi17Ci0gICAgbV9pbnRlcm5hbC0+Z2V0RnJhbWVi
dWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYodGFyZ2V0LCBhdHRhY2htZW50LCBwYXJhbU5hbWUs
IHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW50ZWdlcnYoR0MzRGVu
dW0gcGFyYW1OYW1lLCBHQzNEaW50KiB2YWx1ZSkKLXsKLSAgICBtX2ludGVybmFsLT5nZXRJbnRl
Z2VydihwYXJhbU5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0
UHJvZ3JhbWl2KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGVudW0gcGFyYW1OYW1lLCBH
QzNEaW50KiB2YWx1ZSkKLXsKLSAgICBtX2ludGVybmFsLT5nZXRQcm9ncmFtaXYocHJvZ3JhbSwg
cGFyYW1OYW1lLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0UHJv
Z3JhbUluZm9Mb2coUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQotewotICAgIHJldHVybiBtX2lu
dGVybmFsLT5nZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
ZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQqIHZhbHVlKQotewotICAgIG1faW50ZXJuYWwtPmdldFJl
bmRlcmJ1ZmZlclBhcmFtZXRlcml2KHRhcmdldCwgcGFyYW1OYW1lLCB2YWx1ZSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlcml2KFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVy
LCBHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQqIHZhbHVlKQotewotICAgIG1faW50ZXJuYWwt
PmdldFNoYWRlcml2KHNoYWRlciwgcGFyYW1OYW1lLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBHcmFw
aGljc0NvbnRleHQzRDo6Z2V0U2hhZGVySW5mb0xvZyhQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikK
LXsKLSAgICByZXR1cm4gbV9pbnRlcm5hbC0+Z2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpOwotfQot
Ci1TdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlclNvdXJjZShQbGF0Zm9ybTNET2Jq
ZWN0IHNoYWRlcikKLXsKLSAgICByZXR1cm4gbV9pbnRlcm5hbC0+Z2V0U2hhZGVyU291cmNlKHNo
YWRlcik7Ci19Ci0KLVN0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U3RyaW5nKEdDM0RlbnVt
IG5hbWUpCi17Ci0gICAgcmV0dXJuIG1faW50ZXJuYWwtPmdldFN0cmluZyhuYW1lKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VGV4UGFyYW1ldGVyZnYoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0RmbG9hdCogdmFsdWUpCi17Ci0gICAgbV9pbnRlcm5h
bC0+Z2V0VGV4UGFyYW1ldGVyZnYodGFyZ2V0LCBwYXJhbU5hbWUsIHZhbHVlKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VGV4UGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQqIHZhbHVlKQotewotICAgIG1faW50ZXJuYWwtPmdl
dFRleFBhcmFtZXRlcml2KHRhcmdldCwgcGFyYW1OYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmdldFVuaWZvcm1mdihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdD
M0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCogdmFsdWUpCi17Ci0gICAgbV9pbnRlcm5hbC0+Z2V0
VW5pZm9ybWZ2KHByb2dyYW0sIGxvY2F0aW9uLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmdldFVuaWZvcm1pdihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RpbnQg
bG9jYXRpb24sIEdDM0RpbnQqIHZhbHVlKQotewotICAgIG1faW50ZXJuYWwtPmdldFVuaWZvcm1p
dihwcm9ncmFtLCBsb2NhdGlvbiwgdmFsdWUpOwotfQotCi1HQzNEaW50IEdyYXBoaWNzQ29udGV4
dDNEOjpnZXRVbmlmb3JtTG9jYXRpb24oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBjb25zdCBT
dHJpbmcmIG5hbWUpCi17Ci0gICAgcmV0dXJuIG1faW50ZXJuYWwtPmdldFVuaWZvcm1Mb2NhdGlv
bihwcm9ncmFtLCBuYW1lKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4
QXR0cmliZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGZsb2F0KiB2
YWx1ZSkKLXsKLSAgICBtX2ludGVybmFsLT5nZXRWZXJ0ZXhBdHRyaWJmdihpbmRleCwgcGFyYW1O
YW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJp
Yml2KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQqIHZhbHVlKQot
ewotICAgIG1faW50ZXJuYWwtPmdldFZlcnRleEF0dHJpYml2KGluZGV4LCBwYXJhbU5hbWUsIHZh
bHVlKTsKLX0KLQotbG9uZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0
KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwYXJhbU5hbWUpCi17Ci0gICAgcmV0dXJuIG1faW50
ZXJuYWwtPmdldFZlcnRleEF0dHJpYk9mZnNldChpbmRleCwgcGFyYW1OYW1lKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6aGludChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIG1vZGUp
Ci17Ci0gICAgbV9pbnRlcm5hbC0+aGludCh0YXJnZXQsIG1vZGUpOwotfQotCi1HQzNEYm9vbGVh
biBHcmFwaGljc0NvbnRleHQzRDo6aXNCdWZmZXIoUGxhdGZvcm0zRE9iamVjdCBvYmopCi17Ci0g
ICAgcmV0dXJuIG1faW50ZXJuYWwtPmlzQnVmZmVyKG9iaik7Ci19Ci0KLUdDM0Rib29sZWFuIEdy
YXBoaWNzQ29udGV4dDNEOjppc0VuYWJsZWQoR0MzRGVudW0gY2FwKQotewotICAgIHJldHVybiBt
X2ludGVybmFsLT5pc0VuYWJsZWQoY2FwKTsKLX0KLQotR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250
ZXh0M0Q6OmlzRnJhbWVidWZmZXIoUGxhdGZvcm0zRE9iamVjdCBvYmopCi17Ci0gICAgcmV0dXJu
IG1faW50ZXJuYWwtPmlzRnJhbWVidWZmZXIob2JqKTsKLX0KLQotR0MzRGJvb2xlYW4gR3JhcGhp
Y3NDb250ZXh0M0Q6OmlzUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IG9iaikKLXsKLSAgICByZXR1
cm4gbV9pbnRlcm5hbC0+aXNQcm9ncmFtKG9iaik7Ci19Ci0KLUdDM0Rib29sZWFuIEdyYXBoaWNz
Q29udGV4dDNEOjppc1JlbmRlcmJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IG9iaikKLXsKLSAgICBy
ZXR1cm4gbV9pbnRlcm5hbC0+aXNSZW5kZXJidWZmZXIob2JqKTsKLX0KLQotR0MzRGJvb2xlYW4g
R3JhcGhpY3NDb250ZXh0M0Q6OmlzU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qgb2JqKQotewotICAg
IHJldHVybiBtX2ludGVybmFsLT5pc1NoYWRlcihvYmopOwotfQotCi1HQzNEYm9vbGVhbiBHcmFw
aGljc0NvbnRleHQzRDo6aXNUZXh0dXJlKFBsYXRmb3JtM0RPYmplY3Qgb2JqKQotewotICAgIHJl
dHVybiBtX2ludGVybmFsLT5pc1RleHR1cmUob2JqKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6bGluZVdpZHRoKEdDM0RmbG9hdCB3aWR0aCkKLXsKLSAgICBtX2ludGVybmFsLT5saW5l
V2lkdGgod2lkdGgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpsaW5rUHJvZ3JhbShQ
bGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCi17Ci0gICAgbV9pbnRlcm5hbC0+bGlua1Byb2dyYW0o
cHJvZ3JhbSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBpeGVsU3RvcmVpKEdDM0Rl
bnVtIHBhcmFtTmFtZSwgR0MzRGludCBwYXJhbSkKLXsKLSAgICBtX2ludGVybmFsLT5waXhlbFN0
b3JlaShwYXJhbU5hbWUsIHBhcmFtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cG9s
eWdvbk9mZnNldChHQzNEZmxvYXQgZmFjdG9yLCBHQzNEZmxvYXQgdW5pdHMpCi17Ci0gICAgbV9p
bnRlcm5hbC0+cG9seWdvbk9mZnNldChmYWN0b3IsIHVuaXRzKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6cmVhZFBpeGVscyhHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdp
ZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIHZv
aWQqIGRhdGEpCi17Ci0gICAgbV9pbnRlcm5hbC0+cmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVp
Z2h0LCBmb3JtYXQsIHR5cGUsIGRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpy
ZWxlYXNlU2hhZGVyQ29tcGlsZXIoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVp
Z2h0KQotewotICAgIG1faW50ZXJuYWwtPnJlbmRlcmJ1ZmZlclN0b3JhZ2UodGFyZ2V0LCBpbnRl
cm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnNhbXBsZUNvdmVyYWdlKEdDM0RjbGFtcGYgdmFsdWUsIEdDM0Rib29sZWFuIGludmVydCkKLXsK
LSAgICBtX2ludGVybmFsLT5zYW1wbGVDb3ZlcmFnZSh2YWx1ZSwgaW52ZXJ0KTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6c2Npc3NvcihHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNp
emVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQotewotICAgIG1faW50ZXJuYWwtPnNjaXNzb3Io
eCwgeSwgd2lkdGgsIGhlaWdodCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNoYWRl
clNvdXJjZShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgc3RyaW5nKQot
ewotICAgIG1faW50ZXJuYWwtPnNoYWRlclNvdXJjZShwcm9ncmFtLCBzdHJpbmcpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsRnVuYyhHQzNEZW51bSBmdW5jLCBHQzNEaW50
IHJlZiwgR0MzRHVpbnQgbWFzaykKLXsKLSAgICBtX2ludGVybmFsLT5zdGVuY2lsRnVuYyhmdW5j
LCByZWYsIG1hc2spOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsRnVuY1Nl
cGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWlu
dCBtYXNrKQotewotICAgIG1faW50ZXJuYWwtPnN0ZW5jaWxGdW5jU2VwYXJhdGUoZmFjZSwgZnVu
YywgcmVmLCBtYXNrKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbE1hc2so
R0MzRHVpbnQgbWFzaykKLXsKLSAgICBtX2ludGVybmFsLT5zdGVuY2lsTWFzayhtYXNrKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbE1hc2tTZXBhcmF0ZShHQzNEZW51bSBm
YWNlLCBHQzNEdWludCBtYXNrKQotewotICAgIG1faW50ZXJuYWwtPnN0ZW5jaWxNYXNrU2VwYXJh
dGUoZmFjZSwgbWFzayk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxPcChH
QzNEZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFpbCwgR0MzRGVudW0genBhc3MpCi17Ci0gICAgbV9p
bnRlcm5hbC0+c3RlbmNpbE9wKGZhaWwsIHpmYWlsLCB6cGFzcyk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnN0ZW5jaWxPcFNlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZh
aWwsIEdDM0RlbnVtIHpmYWlsLCBHQzNEZW51bSB6cGFzcykKLXsKLSAgICBtX2ludGVybmFsLT5z
dGVuY2lsT3BTZXBhcmF0ZShmYWNlLCBmYWlsLCB6ZmFpbCwgenBhc3MpOwotfQotCi1ib29sIEdy
YXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZl
bCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhl
aWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29u
c3Qgdm9pZCogcGl4ZWxzKQotewotICAgIHJldHVybiBtX2ludGVybmFsLT50ZXhJbWFnZTJEKHRh
cmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1h
dCwgdHlwZSwgcGl4ZWxzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dGV4UGFyYW1l
dGVyZihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGZsb2F0IHBhcmFt
KQotewotICAgIG1faW50ZXJuYWwtPnRleFBhcmFtZXRlcmYodGFyZ2V0LCBwYXJhbU5hbWUsIHBh
cmFtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dGV4UGFyYW1ldGVyaShHQzNEZW51
bSB0YXJnZXQsIEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGludCBwYXJhbSkKLXsKLSAgICBtX2lu
dGVybmFsLT50ZXhQYXJhbWV0ZXJpKHRhcmdldCwgcGFyYW1OYW1lLCBwYXJhbSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
aW50IGxldmVsLCBHQzNEaW50IHhPZmZzZXQsIEdDM0RpbnQgeU9mZnNldCwgR0MzRHNpemVpIHdp
ZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNv
bnN0IHZvaWQqIHBpeGVscykKLXsKLSAgICBtX2ludGVybmFsLT50ZXhTdWJJbWFnZTJEKHRhcmdl
dCwgbGV2ZWwsIHhPZmZzZXQsIHlPZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwg
cGl4ZWxzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFmKEdDM0RpbnQg
bG9jYXRpb24sIEdDM0RmbG9hdCB4KQotewotICAgIG1faW50ZXJuYWwtPnVuaWZvcm0xZihsb2Nh
dGlvbiwgeCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xZnYoR0MzRGlu
dCBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSkKLXsKLSAgICBtX2ludGVy
bmFsLT51bmlmb3JtMWZ2KGxvY2F0aW9uLCBzaXplLCB2KTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6dW5pZm9ybTFpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgeCkKLXsKLSAgICBt
X2ludGVybmFsLT51bmlmb3JtMWkobG9jYXRpb24sIHgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjp1bmlmb3JtMWl2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQqIHYsIEdDM0RzaXpl
aSBzaXplKQotewotICAgIG1faW50ZXJuYWwtPnVuaWZvcm0xaXYobG9jYXRpb24sIHNpemUsIHYp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMmYoR0MzRGludCBsb2NhdGlv
biwgR0MzRGZsb2F0IHgsIGZsb2F0IHkpCi17Ci0gICAgbV9pbnRlcm5hbC0+dW5pZm9ybTJmKGxv
Y2F0aW9uLCB4LCB5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJmdihH
QzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplKQotewotICAgIG1f
aW50ZXJuYWwtPnVuaWZvcm0yZnYobG9jYXRpb24sIHNpemUsIHYpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjp1bmlmb3JtMmkoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNE
aW50IHkpCi17Ci0gICAgbV9pbnRlcm5hbC0+dW5pZm9ybTJpKGxvY2F0aW9uLCB4LCB5KTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJpdihHQzNEaW50IGxvY2F0aW9uLCBH
QzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6ZSkKLXsKLSAgICBtX2ludGVybmFsLT51bmlmb3JtMml2
KGxvY2F0aW9uLCBzaXplLCB2KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9y
bTNmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0
IHopCi17Ci0gICAgbV9pbnRlcm5hbC0+dW5pZm9ybTNmKGxvY2F0aW9uLCB4LCB5LCB6KTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTNmdihHQzNEaW50IGxvY2F0aW9uLCBH
QzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplKQotewotICAgIG1faW50ZXJuYWwtPnVuaWZvcm0z
ZnYobG9jYXRpb24sIHNpemUsIHYpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlm
b3JtM2koR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RpbnQgeikK
LXsKLSAgICBtX2ludGVybmFsLT51bmlmb3JtM2kobG9jYXRpb24sIHgsIHksIHopOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2l2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0Rp
bnQqIHYsIEdDM0RzaXplaSBzaXplKQotewotICAgIG1faW50ZXJuYWwtPnVuaWZvcm0zaXYobG9j
YXRpb24sIHNpemUsIHYpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGYo
R0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeiwg
R0MzRGZsb2F0IHcpCi17Ci0gICAgbV9pbnRlcm5hbC0+dW5pZm9ybTRmKGxvY2F0aW9uLCB4LCB5
LCB6LCB3KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRmdihHQzNEaW50
IGxvY2F0aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplKQotewotICAgIG1faW50ZXJu
YWwtPnVuaWZvcm00ZnYobG9jYXRpb24sIHNpemUsIHYpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjp1bmlmb3JtNGkoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHks
IEdDM0RpbnQgeiwgR0MzRGludCB3KQotewotICAgIG1faW50ZXJuYWwtPnVuaWZvcm00aShsb2Nh
dGlvbiwgeCwgeSwgeiwgdyk7CisgICAgaWYgKCFtX3ByaXZhdGUpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNE
aW50KiB2LCBHQzNEc2l6ZWkgc2l6ZSkKLXsKLSAgICBtX2ludGVybmFsLT51bmlmb3JtNGl2KGxv
Y2F0aW9uLCBzaXplLCB2KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybU1h
dHJpeDJmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9h
dCogdmFsdWUsIEdDM0RzaXplaSBzaXplKQotewotICAgIG1faW50ZXJuYWwtPnVuaWZvcm1NYXRy
aXgyZnYobG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4M2Z2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0Rib29s
ZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiB2YWx1ZSwgR0MzRHNpemVpIHNpemUpCi17Ci0gICAg
bV9pbnRlcm5hbC0+dW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgc2l6ZSwgdHJhbnNwb3NlLCB2
YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm1NYXRyaXg0ZnYoR0Mz
RGludCBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIHZhbHVlLCBH
QzNEc2l6ZWkgc2l6ZSkKLXsKLSAgICBtX2ludGVybmFsLT51bmlmb3JtTWF0cml4NGZ2KGxvY2F0
aW9uLCBzaXplLCB0cmFuc3Bvc2UsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6dXNlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCi17Ci0gICAgbV9pbnRlcm5h
bC0+dXNlUHJvZ3JhbShwcm9ncmFtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmFs
aWRhdGVQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKLXsKLSAgICBtX2ludGVybmFs
LT52YWxpZGF0ZVByb2dyYW0ocHJvZ3JhbSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnZlcnRleEF0dHJpYjFmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgeCkKLXsKLSAgICBtX2lu
dGVybmFsLT52ZXJ0ZXhBdHRyaWIxZihpbmRleCwgeCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnZlcnRleEF0dHJpYjFmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2YWx1ZXMp
Ci17Ci0gICAgbV9pbnRlcm5hbC0+dmVydGV4QXR0cmliMWZ2KGluZGV4LCB2YWx1ZXMpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIyZihHQzNEdWludCBpbmRleCwg
R0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5KQotewotICAgIG1faW50ZXJuYWwtPnZlcnRleEF0dHJp
YjJmKGluZGV4LCB4LCB5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0
cmliMmZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHZhbHVlcykKLXsKLSAgICBtX2ludGVy
bmFsLT52ZXJ0ZXhBdHRyaWIyZnYoaW5kZXgsIHZhbHVlcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnZlcnRleEF0dHJpYjNmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgeCwgR0Mz
RGZsb2F0IHksIEdDM0RmbG9hdCB6KQotewotICAgIG1faW50ZXJuYWwtPnZlcnRleEF0dHJpYjNm
KGluZGV4LCB4LCB5LCB6KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0
cmliM2Z2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHZhbHVlcykKLXsKLSAgICBtX2ludGVy
bmFsLT52ZXJ0ZXhBdHRyaWIzZnYoaW5kZXgsIHZhbHVlcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnZlcnRleEF0dHJpYjRmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgeCwgR0Mz
RGZsb2F0IHksIEdDM0RmbG9hdCB6LCBHQzNEZmxvYXQgdykKLXsKLSAgICBtX2ludGVybmFsLT52
ZXJ0ZXhBdHRyaWI0ZihpbmRleCwgeCwgeSwgeiwgdyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnZlcnRleEF0dHJpYjRmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2YWx1ZXMp
Ci17Ci0gICAgbV9pbnRlcm5hbC0+dmVydGV4QXR0cmliNGZ2KGluZGV4LCB2YWx1ZXMpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWJQb2ludGVyKEdDM0R1aW50IGlu
ZGV4LCBHQzNEaW50IHNpemUsIEdDM0RlbnVtIHR5cGUsIEdDM0Rib29sZWFuIG5vcm1hbGl6ZWQs
IEdDM0RzaXplaSBzdHJpZGUsIEdDM0RpbnRwdHIgb2Zmc2V0KQotewotICAgIG1faW50ZXJuYWwt
PnZlcnRleEF0dHJpYlBvaW50ZXIoaW5kZXgsIHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlk
ZSwgb2Zmc2V0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmlld3BvcnQoR0MzRGlu
dCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKLXsKLSAg
ICBtX2ludGVybmFsLT52aWV3cG9ydCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bWFya0NvbnRl
eHRDaGFuZ2VkKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjptYXJrTGF5ZXJDb21wb3NpdGVkKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjpsYXllckNvbXBvc2l0ZWQoKSBjb25zdAot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhDYW52YXNSZW5k
ZXJpbmdDb250ZXh0KiBjb250ZXh0LCBEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyKQotewot
ICAgIC8vIERyYXdpbmdCdWZmZXIgc3VwcG9ydCBvbmx5IGltcGxlbWVudGVkIGluIENocm9taXVt
IHBvcnRzLgotICAgIEFTU0VSVCghZHJhd2luZ0J1ZmZlcik7Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQotUGFzc1JlZlB0cjxJbWFnZURhdGE+IEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJl
bmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YShEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyKQot
ewotICAgIC8vIERyYXdpbmdCdWZmZXIgc3VwcG9ydCBvbmx5IGltcGxlbWVudGVkIGluIENocm9t
aXVtIHBvcnRzLgotICAgIEFTU0VSVCghZHJhd2luZ0J1ZmZlcik7Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0
ZShJbnRTaXplKDEsIDEpKTsKLSAgICByZXR1cm4gaW1hZ2VEYXRhLnJlbGVhc2UoKTsKLX0KLQot
UGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlQnVmZmVyKCkKLXsKLSAg
ICByZXR1cm4gbV9pbnRlcm5hbC0+Y3JlYXRlQnVmZmVyKCk7Ci19Ci0KLVBsYXRmb3JtM0RPYmpl
Y3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKLXsKLSAgICByZXR1cm4g
bV9pbnRlcm5hbC0+Y3JlYXRlRnJhbWVidWZmZXIoKTsKLX0KLQotUGxhdGZvcm0zRE9iamVjdCBH
cmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlUHJvZ3JhbSgpCi17Ci0gICAgcmV0dXJuIG1faW50ZXJu
YWwtPmNyZWF0ZVByb2dyYW0oKTsKLX0KLQotUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRl
eHQzRDo6Y3JlYXRlUmVuZGVyYnVmZmVyKCkKLXsKLSAgICByZXR1cm4gbV9pbnRlcm5hbC0+Y3Jl
YXRlUmVuZGVyYnVmZmVyKCk7Ci19Ci0KLVBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0
M0Q6OmNyZWF0ZVNoYWRlcihHQzNEZW51bSB0eXBlKQotewotICAgIHJldHVybiBtX2ludGVybmFs
LT5jcmVhdGVTaGFkZXIodHlwZSk7Ci19Ci0KLVBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250
ZXh0M0Q6OmNyZWF0ZVRleHR1cmUoKQotewotICAgIHJldHVybiBtX2ludGVybmFsLT5jcmVhdGVU
ZXh0dXJlKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZUJ1ZmZlcihQbGF0
Zm9ybTNET2JqZWN0IGJ1ZmZlcikKLXsKLSAgICBtX2ludGVybmFsLT5kZWxldGVCdWZmZXIoYnVm
ZmVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlRnJhbWVidWZmZXIoUGxh
dGZvcm0zRE9iamVjdCBidWZmZXIpCi17Ci0gICAgbV9pbnRlcm5hbC0+ZGVsZXRlRnJhbWVidWZm
ZXIoYnVmZmVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlUHJvZ3JhbShQ
bGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCi17Ci0gICAgbV9pbnRlcm5hbC0+ZGVsZXRlUHJvZ3Jh
bShwcm9ncmFtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlUmVuZGVyYnVm
ZmVyKFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQotewotICAgIG1faW50ZXJuYWwtPmRlbGV0ZVJl
bmRlcmJ1ZmZlcihidWZmZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVT
aGFkZXIoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCi17Ci0gICAgbV9pbnRlcm5hbC0+ZGVsZXRl
U2hhZGVyKHNoYWRlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVRleHR1
cmUoUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlKQotewotICAgIG1faW50ZXJuYWwtPmRlbGV0ZVRl
eHR1cmUodGV4dHVyZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN5bnRoZXNpemVH
TEVycm9yKEdDM0RlbnVtIGVycm9yKQotewotICAgIG1faW50ZXJuYWwtPnN5bnRoZXNpemVHTEVy
cm9yKGVycm9yKTsKLX0KLQotRXh0ZW5zaW9uczNEKiBHcmFwaGljc0NvbnRleHQzRDo6Z2V0RXh0
ZW5zaW9ucygpCi17Ci0gICAgcmV0dXJuIG1faW50ZXJuYWwtPmdldEV4dGVuc2lvbnMoKTsKLX0K
LQotSW50U2l6ZSBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUo
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIEludFNpemUoKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2V0Q29udGV4dExvc3RDYWxsYmFjayhQYXNzT3duUHRy
PENvbnRleHRMb3N0Q2FsbGJhY2s+KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNldEVycm9yTWVzc2FnZUNhbGxiYWNrKFBhc3NPd25QdHI8
RXJyb3JNZXNzYWdlQ2FsbGJhY2s+KQorUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBHcmFwaGlj
c0NvbnRleHQzRDo6cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpIGNvbnN0CiB7Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5tX2NvbnRleHQ7CiB9CiAKLWJv
b2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YShJbWFnZSogaW1hZ2UsIEdDM0RlbnVt
IGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaWdub3JlR2FtbWFBbmRDb2xvclByb2Zp
bGUsIFZlY3Rvcjx1aW50OF90PiYgb3V0cHV0VmVjdG9yKQorYm9vbCBHcmFwaGljc0NvbnRleHQz
RDo6aXNHTEVTMkNvbXBsaWFudCgpIGNvbnN0CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5jcHAKaW5kZXggNzMz
MjBkMS4uNjdkNDJiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5jcHAKQEAgLTM1LDcgKzM1
LDcgQEAKICNpZiBQTEFURk9STShNQUMpCiAjaW5jbHVkZSAiQU5HTEUvU2hhZGVyTGFuZy5oIgog
I2luY2x1ZGUgPE9wZW5HTC9nbC5oPgotI2VsaWYgUExBVEZPUk0oR1RLKQorI2VsaWYgUExBVEZP
Uk0oR1RLKSB8fCBQTEFURk9STShFRkwpCiAjaW5jbHVkZSAiT3BlbkdMU2hpbXMuaCIKICNlbGlm
IFBMQVRGT1JNKFFUKQogI2luY2x1ZGUgPGNhaXJvL09wZW5HTFNoaW1zLmg+CkBAIC0xNDksNyAr
MTQ5LDcgQEAgdm9pZCBFeHRlbnNpb25zM0RPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0
aXNhbXBsZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW4KIFBsYXRmb3JtM0RPYmplY3QgRXh0ZW5z
aW9uczNET3BlbkdMOjpjcmVhdGVWZXJ0ZXhBcnJheU9FUygpCiB7CiAgICAgbV9jb250ZXh0LT5t
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSNpZiAhUExBVEZPUk0oR1RLKSAmJiAhUExBVEZPUk0oUVQp
ICYmIGRlZmluZWQoR0xfQVBQTEVfdmVydGV4X2FycmF5X29iamVjdCkgJiYgR0xfQVBQTEVfdmVy
dGV4X2FycmF5X29iamVjdAorI2lmICFQTEFURk9STShHVEspICYmICFQTEFURk9STShRVCkgJiYg
IVBMQVRGT1JNKEVGTCkgJiYgZGVmaW5lZChHTF9BUFBMRV92ZXJ0ZXhfYXJyYXlfb2JqZWN0KSAm
JiBHTF9BUFBMRV92ZXJ0ZXhfYXJyYXlfb2JqZWN0CiAgICAgR0x1aW50IGFycmF5ID0gMDsKICAg
ICBnbEdlblZlcnRleEFycmF5c0FQUExFKDEsICZhcnJheSk7CiAgICAgcmV0dXJuIGFycmF5OwpA
QCAtMTY0LDcgKzE2NCw3IEBAIHZvaWQgRXh0ZW5zaW9uczNET3BlbkdMOjpkZWxldGVWZXJ0ZXhB
cnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0IGFycmF5KQogICAgICAgICByZXR1cm47CiAgICAgCiAg
ICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSNpZiAhUExBVEZPUk0oR1RLKSAm
JiAhUExBVEZPUk0oUVQpICYmIGRlZmluZWQoR0xfQVBQTEVfdmVydGV4X2FycmF5X29iamVjdCkg
JiYgR0xfQVBQTEVfdmVydGV4X2FycmF5X29iamVjdAorI2lmICFQTEFURk9STShHVEspICYmICFQ
TEFURk9STShRVCkgJiYgIVBMQVRGT1JNKEVGTCkgJiYgZGVmaW5lZChHTF9BUFBMRV92ZXJ0ZXhf
YXJyYXlfb2JqZWN0KSAmJiBHTF9BUFBMRV92ZXJ0ZXhfYXJyYXlfb2JqZWN0CiAgICAgZ2xEZWxl
dGVWZXJ0ZXhBcnJheXNBUFBMRSgxLCAmYXJyYXkpOwogI2VuZGlmCiB9CkBAIC0xNzUsNyArMTc1
LDcgQEAgR0MzRGJvb2xlYW4gRXh0ZW5zaW9uczNET3BlbkdMOjppc1ZlcnRleEFycmF5T0VTKFBs
YXRmb3JtM0RPYmplY3QgYXJyYXkpCiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsKICAgICAKICAg
ICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotI2lmICFQTEFURk9STShHVEspICYm
ICFQTEFURk9STShRVCkgJiYgZGVmaW5lZChHTF9BUFBMRV92ZXJ0ZXhfYXJyYXlfb2JqZWN0KSAm
JiBHTF9BUFBMRV92ZXJ0ZXhfYXJyYXlfb2JqZWN0CisjaWYgIVBMQVRGT1JNKEdUSykgJiYgIVBM
QVRGT1JNKFFUKSAmJiAhUExBVEZPUk0oRUZMKSAmJiBkZWZpbmVkKEdMX0FQUExFX3ZlcnRleF9h
cnJheV9vYmplY3QpICYmIEdMX0FQUExFX3ZlcnRleF9hcnJheV9vYmplY3QKICAgICByZXR1cm4g
Z2xJc1ZlcnRleEFycmF5QVBQTEUoYXJyYXkpOwogI2Vsc2UKICAgICByZXR1cm4gR0xfRkFMU0U7
CkBAIC0xODgsNyArMTg4LDcgQEAgdm9pZCBFeHRlbnNpb25zM0RPcGVuR0w6OmJpbmRWZXJ0ZXhB
cnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0IGFycmF5KQogICAgICAgICByZXR1cm47CiAKICAgICBt
X2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotI2lmICFQTEFURk9STShHVEspICYmICFQ
TEFURk9STShRVCkgJiYgZGVmaW5lZChHTF9BUFBMRV92ZXJ0ZXhfYXJyYXlfb2JqZWN0KSAmJiBH
TF9BUFBMRV92ZXJ0ZXhfYXJyYXlfb2JqZWN0CisjaWYgIVBMQVRGT1JNKEdUSykgJiYgIVBMQVRG
T1JNKFFUKSAmJiAhUExBVEZPUk0oRUZMKSAmJiBkZWZpbmVkKEdMX0FQUExFX3ZlcnRleF9hcnJh
eV9vYmplY3QpICYmIEdMX0FQUExFX3ZlcnRleF9hcnJheV9vYmplY3QKICAgICBnbEJpbmRWZXJ0
ZXhBcnJheUFQUExFKGFycmF5KTsKICNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQz
RE9wZW5HTC5jcHAKaW5kZXggNDdhNDFjNi4uZTIzYzk1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3ND
b250ZXh0M0RPcGVuR0wuY3BwCkBAIC0zNCw3ICszNCw3IEBACiAKICNpZiBQTEFURk9STShNQUMp
CiAjaW5jbHVkZSA8T3BlbkdML2dsLmg+Ci0jZWxpZiBQTEFURk9STShHVEspCisjZWxpZiBQTEFU
Rk9STShHVEspIHx8IFBMQVRGT1JNKEVGTCkKICNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgogI2Vs
aWYgUExBVEZPUk0oUVQpCiAjaW5jbHVkZSA8UXRHbG9iYWw+CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xD
b21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBo
aWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcAppbmRleCBlNjhiYmE3Li4wZWM0ZGY5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3ND
b250ZXh0M0RPcGVuR0xDb21tb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAKQEAgLTQ4LDcg
KzQ4LDcgQEAKIAogI2lmIFBMQVRGT1JNKE1BQykKICNpbmNsdWRlIDxPcGVuR0wvZ2wuaD4KLSNl
bGlmIFBMQVRGT1JNKEdUSykKKyNlbGlmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oRUZMKQog
I2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCiAjZWxpZiBQTEFURk9STShRVCkKICNpbmNsdWRlIDxR
dEdsb2JhbD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwppbmRleCA5Mzg1OWU2Li5hZTNkNDljIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9lZmwvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTItMDItMDIgIENoYW5nU2VvayBPaCAgPHNoaXZh
bWlkb3dAZ21haWwuY29tPgorCisgICAgICAgIFtFRkxdIEVuYWJsZSBXZWJHTCB3aXRoIGdseCBi
YWNrZW5kCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
NzMwOAorCisgICAgICAgIFJldmlld2VkIGJ5IE1hcnRpbiBSb2JpbnNvbi4KKworICAgICAgICBB
Y3RpdmF0ZWQgV2ViR0wgZmVhdHVyZS4KKworICAgICAgICAqIGV3ay9ld2tfdmlldy5jcHA6Cisg
ICAgICAgIChfRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKToKKyAgICAgICAgKF9ld2tfdmlld19wcml2
X25ldyk6CisKIDIwMTItMDItMDIgIFJhcGhhZWwgS3VibyBkYSBDb3N0YSAgPGt1Ym9AcHJvZnVz
aW9uLm1vYmk+CiAKICAgICAgICAgW0VGTF0gUmVtb3ZlIGNoZWNrIGZvciBFTkFCTEVfR1RLX1BM
VUdJTlNfU1VQUE9SVApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3
LmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAKaW5kZXggODUzYjM0Mi4u
NTM5ZTIwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcuY3BwCkBAIC02NDgsNiArNjQ4LDcg
QEAgc3RhdGljIEV3a19WaWV3X1ByaXZhdGVfRGF0YSogX2V3a192aWV3X3ByaXZfbmV3KEV3a19W
aWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSkKICAgICBwcml2LT5wYWdlU2V0dGluZ3MtPnNldE9m
ZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlRW5hYmxlZCh0cnVlKTsKICAgICBwcml2LT5wYWdlU2V0
dGluZ3MtPnNldFVzZXNQYWdlQ2FjaGUodHJ1ZSk7CiAgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5z
ZXRVc2VzRW5jb2RpbmdEZXRlY3RvcihmYWxzZSk7CisgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5z
ZXRXZWJHTEVuYWJsZWQodHJ1ZSk7CiAKICAgICB1cmwgPSBwcml2LT5wYWdlU2V0dGluZ3MtPnVz
ZXJTdHlsZVNoZWV0TG9jYXRpb24oKTsKICAgICBwcml2LT5zZXR0aW5ncy51c2VyU3R5bGVzaGVl
dCA9IGVpbmFfc3RyaW5nc2hhcmVfYWRkKHVybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9PcHRpb25zRWZsLmNtYWtlIGIvU291cmNlL2NtYWtlL09w
dGlvbnNFZmwuY21ha2UKaW5kZXggMmYyYWJmNC4uZDk1ZmNjYiAxMDA2NDQKLS0tIGEvU291cmNl
L2NtYWtlL09wdGlvbnNFZmwuY21ha2UKKysrIGIvU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21h
a2UKQEAgLTk1LDYgKzk1LDcgQEAgV0VCS0lUX0ZFQVRVUkUoRU5BQkxFX1RPVUNIX0VWRU5UUyAi
RW5hYmxlIFRvdWNoIEV2ZW50cyIgREVGQVVMVCBPRkYpCiBXRUJLSVRfRkVBVFVSRShFTkFCTEVf
VE9VQ0hfSUNPTl9MT0FESU5HICJFbmFibGUgVG91Y2ggSWNvbiBMb2FkaW5nIiBERUZBVUxUIE9G
RikKIFdFQktJVF9GRUFUVVJFKEVOQUJMRV9WSURFTyAiRW5hYmxlIHZpZGVvIiBERUZBVUxUIE9O
KQogV0VCS0lUX0ZFQVRVUkUoRU5BQkxFX1dFQl9TT0NLRVRTICJFbmFibGUgd2ViIHNvY2tldHMi
IERFRkFVTFQgT04pCitXRUJLSVRfRkVBVFVSRShFTkFCTEVfV0VCR0wgIkVuYWJsZSBXZWJHTCIg
REVGQVVMVCBPTikKIFdFQktJVF9GRUFUVVJFKEVOQUJMRV9XT1JLRVJTICJFbmFibGUgd29ya2Vy
cyIgREVGQVVMVCBPTikKIFdFQktJVF9GRUFUVVJFKEVOQUJMRV9YU0xUICJFbmFibGUgWFNMVCIg
REVGQVVMVCBPTikKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125488</attachid>
            <date>2012-02-04 02:32:14 -0800</date>
            <delta_ts>2012-02-05 20:01:56 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77308-20120204193212.patch</filename>
            <type>text/plain</type>
            <size>52273</size>
            <attacher name="ChangSeok Oh">kevin.cs.oh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2NzI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTU4MzY2Mzg1YjZlNTJi
ZDMwNjY0YWY4M2JjZWE4YTcyMDc0ODg2Ni4uMzA2MmIwNTdiNzQxM2QwM2Q4ODI0MjRlYzRhYmFm
Nzc5ZjFhYTllMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDEyLTAyLTA0ICBDaGFu
Z1Nlb2sgT2ggIDxzaGl2YW1pZG93QGdtYWlsLmNvbT4KKworICAgICAgICBbRUZMXSBFbmFibGUg
V2ViR0wgd2l0aCBnbHggYmFja2VuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NzczMDgKKworICAgICAgICBSZXZpZXdlZCBieSBNYXJ0aW4gUm9iaW5z
b24uCisKKyAgICAgICAgSW1wbGVtZW50ZWQgV2ViR0wgZmVhdHVyZSBmb3IgRUZMIHBvcnQuIFRo
ZSB3YXkgaXMgdmVyeSBzaW1pbGFyIHRvIHRoZSBvbmUgb2YgR1RLIHBvcnQuCisKKyAgICAgICAg
Tm8gbmV3IHRlc3RzIHJlcXVpcmVkLiBXZSBjYW4gdmVyaWZ5IHRoaXMgZmVhdHVyZSB3aXRoIHRo
ZSBleGlzdGluZyB0ZXN0IGNhc2VzLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6IFJldmlz
ZWQgY29tbW9uIGZpbGVzIHJlcXVpcmVkIGZvciBXZWJHTC4KKyAgICAgICAgKiBQbGF0Zm9ybUVm
bC5jbWFrZTogQWRkZWQgRUZMIHNwZWNpZmljIGZpbGVzLgorICAgICAgICAqIGh0bWwvSFRNTENh
bnZhc0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6Omdl
dENvbnRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0FOR0xFV2ViS2l0QnJpZGdl
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaDoKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBs
YXRmb3JtVGV4dHVyZSk6CisgICAgICAgIChHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRzSW50b0NhbnZhc0J1ZmZlcik6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0RyYXdpbmdCdWZmZXJFZmwuY3BwOiBDb3BpZWQg
ZnJvbSBHVEsgcG9ydC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RHJh
d2luZ0J1ZmZlcjo6RHJhd2luZ0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVm
ZmVyOjp+RHJhd2luZ0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpw
bGF0Zm9ybUNvbG9yQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OnBh
aW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZWZsL0dyYXBoaWNzQ29udGV4dDNERWZsLmNwcDogQWxtb3N0IHNhbWUgd2l0aCBHcmFwaGlj
c0NvbnRleHQzREd0ay5jcHAuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0Nv
bnRleHQzRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6fkdyYXBoaWNz
Q29udGV4dDNEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjptYWtlQ29u
dGV4dEN1cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRm
b3JtR3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OmlzR0xFUzJDb21wbGlhbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9FeHRlbnNpb25zM0RPcGVuR0wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNE
T3BlbkdMOjpjcmVhdGVWZXJ0ZXhBcnJheU9FUyk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNp
b25zM0RPcGVuR0w6OmRlbGV0ZVZlcnRleEFycmF5T0VTKToKKyAgICAgICAgKFdlYkNvcmU6OkV4
dGVuc2lvbnMzRE9wZW5HTDo6aXNWZXJ0ZXhBcnJheU9FUyk6CisgICAgICAgIChXZWJDb3JlOjpF
eHRlbnNpb25zM0RPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheU9FUyk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24u
Y3BwOgorCiAyMDEyLTAyLTAzICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29t
PgogCiAgICAgICAgIENhbnZhcy1pbnRvLWNhbnZhcyBkcmF3aW5nIHNob3VsZCByZXNwZWN0IGJh
Y2tpbmcgc3RvcmUgc2NhbGUgcmF0aW8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwppbmRleCA0ZmY1ZGIyYjU2Y2Q2
NmI4MjJjOTgxMTJmMzlhOTYzZTU0MzgzOTdlLi44OTEyOTFkYTVhZWZhYTJiNDBjMDMzODA2ZTJl
MWU2OTEzODNiZjZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTItMDIt
MDQgIENoYW5nU2VvayBPaCAgPHNoaXZhbWlkb3dAZ21haWwuY29tPgorCisgICAgICAgIFtFRkxd
IEVuYWJsZSBXZWJHTCB3aXRoIGdseCBiYWNrZW5kCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NzMwOAorCisgICAgICAgIFJldmlld2VkIGJ5IE1hcnRp
biBSb2JpbnNvbi4KKworICAgICAgICBBY3RpdmF0ZWQgV2ViR0wgZmVhdHVyZS4KKworICAgICAg
ICAqIGV3ay9ld2tfdmlldy5jcHA6CisgICAgICAgIChfRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKToK
KyAgICAgICAgKF9ld2tfdmlld19wcml2X25ldyk6CisKIDIwMTItMDItMDIgIEt3YW5nSHl1ayBL
aW0gIDxoeXVraS5raW1Ac2Ftc3VuZy5jb20+CiAKICAgICAgICAgW0VGTF0gQWRkIGNvbnRlbnRz
U2l6ZSBmbGFnIGludG8gZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmUncyBwcml2YXRlIGRhdGEuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3Jl
L0NNYWtlTGlzdHMudHh0CmluZGV4IDljNmQxNWJlNmU2YjkwYmY4MjY3NTA2MWZiZDNjZGUwZmNl
N2IwZGYuLjQ2MGE2ZWM3YTBmYzIxOTg5YjVkOGE1ZjMzNThhZGQxODE4YWMzZjMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0CkBAIC0yMDIyLDggKzIwMjIsOCBAQCBJRiAoRU5BQkxFX1ZJREVPKQogICAg
ICAgICBodG1sL0hUTUxTb3VyY2VFbGVtZW50LmNwcAogICAgICAgICBodG1sL0hUTUxWaWRlb0Vs
ZW1lbnQuY3BwCiAgICAgICAgIGh0bWwvTWVkaWFGcmFnbWVudFVSSVBhcnNlci5jcHAKLSAgICAg
ICAgaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCiAgICAgICAgIGh0bWwvVGlt
ZVJhbmdlcy5jcHAKKyAgICAgICAgaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3Bw
CiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcAogICAgICAgICByZW5k
ZXJpbmcvUmVuZGVyTWVkaWEuY3BwCiAgICAgICAgIHJlbmRlcmluZy9SZW5kZXJWaWRlby5jcHAK
QEAgLTIxMzcsMjEgKzIxMzcsMjcgQEAgSUYgKEVOQUJMRV9XRUJHTCkKICAgICAgICAgJHtERVJJ
VkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L2dsc2xhbmcuY3BwCiAgICAgICAgICR7REVSSVZFRF9T
T1VSQ0VTX1dFQkNPUkVfRElSfS9nbHNsYW5nX3RhYi5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZ
X0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0NvZGVHZW5HTFNMLmNwcAorICAgICAgICAke1RISVJE
UEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3Bw
CisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9Db2RlR2VuR0xT
TC5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0NvbXBp
bGVyLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvZGVi
dWcuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9EZXRl
Y3RSZWN1cnNpb24uY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21w
aWxlci9Gb3JMb29wVW5yb2xsLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9z
cmMvY29tcGlsZXIvSW5mb1NpbmsuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xF
L3NyYy9jb21waWxlci9Jbml0aWFsaXplLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9B
TkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZURsbC5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZ
X0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybWVkaWF0ZS5jcHAKICAgICAgICAgJHtUSElS
RFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybU91dC5jcHAKICAgICAgICAgJHtU
SElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybVRyYXZlcnNlLmNwcAorICAg
ICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvTWFwTG9uZ1ZhcmlhYmxl
TmFtZXMuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9v
c3NvdXJjZV9wb3NpeC5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2Nv
bXBpbGVyL091dHB1dEVTU0wuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3Ny
Yy9jb21waWxlci9PdXRwdXRHTFNMLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdM
RS9zcmMvY29tcGlsZXIvT3V0cHV0R0xTTEJhc2UuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9E
SVJ9L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRITFNMLmNwcAogICAgICAgICAke1RISVJEUEFS
VFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcGFyc2VDb25zdC5jcHAKICAgICAgICAgJHtUSElS
RFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVyLmNwcAogICAgICAgICAk
e1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvUG9vbEFsbG9jLmNwcAotICAgICAg
ICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yCiAgICAg
ICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvYXRv
bS5jCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvY3BwLmMKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9jcHBzdHJ1Y3QuYwpAQCAtMjE2NSwxMyArMjE3MSwxMyBAQCBJRiAoRU5B
QkxFX1dFQkdMKQogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIv
U2hhZGVyTGFuZy5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBp
bGVyL1N5bWJvbFRhYmxlLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMv
Y29tcGlsZXIvVmVyc2lvbkdMU0wuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xF
L3NyYy9jb21waWxlci9UcmFuc2xhdG9yRVNTTC5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJ
Un0vQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JHTFNMLmNwcAogICAgICAgICAke1RISVJE
UEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckhMU0wuY3BwCiAgICAgICAg
ICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTZWxlY3QuY3BwCiAg
ICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci91dGlsLmNwcAogICAg
ICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvVmFsaWRhdGVMaW1pdGF0
aW9ucy5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1Zh
cmlhYmxlSW5mby5jcHAKLQogICAgICAgICBodG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5jcHAKICAg
ICAgICAgaHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZXMuY3BwCiAgICAgICAgIGh0
bWwvY2FudmFzL1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuY3BwCkBAIC0yMTk2LDEwICsyMjAyLDgg
QEAgSUYgKEVOQUJMRV9XRUJHTCkKICAgICAgICAgaHRtbC9jYW52YXMvT0VTU3RhbmRhcmREZXJp
dmF0aXZlcy5jcHAKICAgICAgICAgaHRtbC9jYW52YXMvT0VTVGV4dHVyZUZsb2F0LmNwcAogICAg
ICAgICBodG1sL2NhbnZhcy9PRVNWZXJ0ZXhBcnJheU9iamVjdC5jcHAKLQogICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9BTkdMRVdlYktpdEJyaWRnZS5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuY3BwCi0gICAgICAgIAogICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5jcHAKICAgICApCiAgICAgTElTVChBUFBFTkQgV2Vi
Q29yZV9JRExfRklMRVMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNt
YWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggMWIyZTFlNDA2NTA1
MmRhMzY1MzM3NDQ0ZGQyNzAzYTU4NGI4MTVkYS4uNGM4NzdhZTBlMTUzODZmZTM1NDFhYWYyZjlm
ZWI4ZjQ1OTZmOGFhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21h
a2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTI4MSw3ICsyODEs
NiBAQCBJRiAoRU5BQkxFX1ZJREVPKQogICApCiBFTkRJRiAoKQogCi0KIElGIChFTkFCTEVfR0xJ
Ql9TVVBQT1JUKQogICBMSVNUKEFQUEVORCBXZWJDb3JlX0xJQlJBUklFUwogICAgICR7R2xpYl9M
SUJSQVJJRVN9CkBAIC0yOTQsMTAgKzI5MywyMyBAQCBFTkRJRiAoKQogSUYgKEVOQUJMRV9XRUJH
TCkKICAgTElTVChBUFBFTkQgV2ViQ29yZV9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgJHtPUEVO
R0xfSU5DTFVERV9ESVJ9CisgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvIgorICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9nbHgiCisgICAgIiR7
V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbCIKICAgKQogICBMSVNUKEFQUEVO
RCBXZWJDb3JlX0xJQlJBUklFUwogICAgICR7T1BFTkdMX2dsX0xJQlJBUll9CiAgICkKKyAgTElT
VChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
cGhpY3NDb250ZXh0M0RDYWlyby5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9PcGVu
R0xTaGltcy5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9lZmwvRHJhd2luZ0J1ZmZlckVmbC5j
cHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwCisg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ2x4L0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5jcHAKKyAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmNwcAorICAgIHBs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAKKyAgICBw
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3Bw
CisgICkKIEVORElGICgpCiAKIElGIChXVEZfVVNFX1NPVVApCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTENhbnZhc0VsZW1lbnQuY3BwCmluZGV4IDE0M2QzMzQ3NTBkOWJkNGZlYTNiNjdlZjQ4ZjZj
NzE4NzkwYzg0Y2UuLmExMjE0M2ViMGM4YWY0YWM2MmRhY2E5NTE4NmVkNTRkMjBiMDE2ODkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCkBAIC0xNzcsNyArMTc3
LDcgQEAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogSFRNTENhbnZhc0VsZW1lbnQ6OmdldENvbnRl
eHQoY29uc3QgU3RyaW5nJiB0eXBlLCBDYW52YXMKICNpZiBFTkFCTEUoV0VCR0wpICAgIAogICAg
IFNldHRpbmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50KCktPnNldHRpbmdzKCk7CiAgICAgaWYgKHNl
dHRpbmdzICYmIHNldHRpbmdzLT53ZWJHTEVuYWJsZWQoKQotI2lmICFQTEFURk9STShDSFJPTUlV
TSkgJiYgIVBMQVRGT1JNKEdUSykKKyNpZiAhUExBVEZPUk0oQ0hST01JVU0pICYmICFQTEFURk9S
TShHVEspICYmICFQTEFURk9STShFRkwpCiAgICAgICAgICYmIHNldHRpbmdzLT5hY2NlbGVyYXRl
ZENvbXBvc2l0aW5nRW5hYmxlZCgpCiAjZW5kaWYKICAgICAgICAgKSB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9BTkdMRVdlYktpdEJyaWRnZS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2UuaAppbmRleCAw
ZjRiZjdkMDA2NmFjODQyOGQ4NTM3OGQwYTEwOTg5NGE5MDNlZDBhLi5jNjM4YmMwZmMzY2Q2MTNh
YjBiM2NiZTBiMDIyNjgxZWQzNzNkYTQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9BTkdMRVdlYktpdEJyaWRnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0FOR0xFV2ViS2l0QnJpZGdlLmgKQEAgLTMxLDcgKzMxLDcgQEAKIAog
I2lmIFBMQVRGT1JNKFFUKQogI2luY2x1ZGUgIkFOR0xFL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJM
YW5nLmgiCi0jZWxpZiAhUExBVEZPUk0oR1RLKQorI2VsaWYgIVBMQVRGT1JNKEdUSykgJiYgIVBM
QVRGT1JNKEVGTCkKICNpbmNsdWRlICJBTkdMRS9TaGFkZXJMYW5nLmgiCiAjZWxzZQogI2luY2x1
ZGUgIlNoYWRlckxhbmcuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQzRC5oCmluZGV4IDM0YzU0OWFiNDg3M2MyYjE5ZWVlMzU3ZjNm
MjJmYjQ1ZGVlNzU4NDIuLjFmZmZlOWE2YjY0ZTg1YmFhMjBhMjFkYTUzODIwNWY5NGJkMjkzODIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dDNELmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0M0QuaApAQCAtNDMsNyArNDMsNyBAQAogI3VuZGVmIFZFUlNJT04KICNlbmRpZgogCi0j
aWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFFUKQorI2lmIFBM
QVRGT1JNKE1BQykgfHwgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShRVCkgfHwgUExBVEZPUk0o
RUZMKQogI2luY2x1ZGUgIkFOR0xFV2ViS2l0QnJpZGdlLmgiCiAjZW5kaWYKIApAQCAtNTcsNyAr
NTcsNyBAQCBRVF9CRUdJTl9OQU1FU1BBQ0UKIGNsYXNzIFFQYWludGVyOwogY2xhc3MgUVJlY3Q7
CiBRVF9FTkRfTkFNRVNQQUNFCi0jZWxpZiBQTEFURk9STShHVEspCisjZWxpZiBQTEFURk9STShH
VEspIHx8IFBMQVRGT1JNKEVGTCkKIHR5cGVkZWYgdW5zaWduZWQgaW50IEdMdWludDsKICNlbmRp
ZgogCkBAIC04Myw3ICs4Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQ7CiBjbGFzcyBEcmF3aW5nQnVmZmVyOwogY2xhc3MgRXh0ZW5zaW9uczNE
OwotI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShRVCkKKyNp
ZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oUVQpIHx8IFBMQVRG
T1JNKEVGTCkKIGNsYXNzIEV4dGVuc2lvbnMzRE9wZW5HTDsKICNlbmRpZgogI2lmIFBMQVRGT1JN
KFFUKQpAQCAtNDkzLDYgKzQ5Myw3IEBAIHB1YmxpYzoKICNlbmRpZgogI2VsaWYgUExBVEZPUk0o
RUZMKQogICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgcGxhdGZvcm1HcmFwaGljc0NvbnRl
eHQzRCgpIGNvbnN0OworICAgIFBsYXRmb3JtM0RPYmplY3QgcGxhdGZvcm1UZXh0dXJlKCkgY29u
c3QgeyByZXR1cm4gbV90ZXh0dXJlOyB9CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQogICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdDsKICNlbmRpZgpAQCAt
NTA1LDcgKzUwNiw3IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIGJvb2wgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CiAKLSNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKENIUk9NSVVNKSB8fCBQTEFU
Rk9STShHVEspIHx8IFBMQVRGT1JNKFFUKQorI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0o
Q0hST01JVU0pIHx8IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEVG
TCkKICAgICAvLyBXaXRoIG11bHRpc2FtcGxpbmcgb24sIGJsaXQgZnJvbSBtdWx0aXNhbXBsZUZC
TyB0byByZWd1bGFyIEZCTy4KICAgICB2b2lkIHByZXBhcmVUZXh0dXJlKCk7CiAjZW5kaWYKQEAg
LTc4NCw3ICs3ODUsNyBAQCBwdWJsaWM6CiAjaWYgVVNFKENHKQogICAgIHN0YXRpYyB2b2lkIHBh
aW50VG9DYW52YXMoY29uc3QgdW5zaWduZWQgY2hhciogaW1hZ2VQaXhlbHMsIGludCBpbWFnZVdp
ZHRoLCBpbnQgaW1hZ2VIZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
Y2FudmFzV2lkdGgsIGludCBjYW52YXNIZWlnaHQsIENHQ29udGV4dFJlZik7Ci0jZWxpZiBQTEFU
Rk9STShHVEspCisjZWxpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKEVGTCkKICAgICB2b2lk
IHBhaW50VG9DYW52YXMoY29uc3QgdW5zaWduZWQgY2hhciogaW1hZ2VQaXhlbHMsIGludCBpbWFn
ZVdpZHRoLCBpbnQgaW1hZ2VIZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgIGludCBjYW52
YXNXaWR0aCwgaW50IGNhbnZhc0hlaWdodCwgUGxhdGZvcm1Db250ZXh0Q2Fpcm8qIGNvbnRleHQp
OwogI2VuZGlmCkBAIC04MDMsNiArODA0LDggQEAgcHVibGljOgogICAgIGJvb2wgcGFpbnRzSW50
b0NhbnZhc0J1ZmZlcigpIGNvbnN0OwogI2VsaWYgUExBVEZPUk0oR1RLKQogICAgIGJvb2wgcGFp
bnRzSW50b0NhbnZhc0J1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyNlbGlmIFBMQVRG
T1JNKEVGTCkKKyAgICBib29sIHBhaW50c0ludG9DYW52YXNCdWZmZXIoKSBjb25zdCB7IHJldHVy
biB0cnVlOyB9CiAjZWxzZQogICAgIGJvb2wgcGFpbnRzSW50b0NhbnZhc0J1ZmZlcigpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKQEAgLTg5Myw3ICs4OTYsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAgICAgICAgIEFscGhhT3AgYWxwaGFPcCwKICAgICAgICAgICAgICAgICAgICAg
dm9pZCogZGVzdGluYXRpb25EYXRhKTsKIAotI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0o
R1RLKSB8fCBQTEFURk9STShRVCkKKyNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKEdUSykg
fHwgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEVGTCkKICAgICAvLyBUYWtlIGludG8gYWNjb3Vu
dCB0aGUgdXNlcidzIHJlcXVlc3RlZCBjb250ZXh0IGNyZWF0aW9uIGF0dHJpYnV0ZXMsCiAgICAg
Ly8gaW4gcGFydGljdWxhciBzdGVuY2lsIGFuZCBhbnRpYWxpYXMsIGFuZCBkZXRlcm1pbmUgd2hp
Y2ggY291bGQgb3IKICAgICAvLyBjb3VsZCBub3QgYmUgaG9ub3JlZCBiYXNlZCBvbiB0aGUgY2Fw
YWJpbGl0aWVzIG9mIHRoZSBPcGVuR0wKQEAgLTkxMyw3ICs5MTYsNyBAQCBwdWJsaWM6CiAgICAg
UmV0YWluUHRyPFdlYkdMTGF5ZXI+IG1fd2ViR0xMYXllcjsKICNlbmRpZgogCi0jaWYgUExBVEZP
Uk0oTUFDKSB8fCBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFFUKQorI2lmIFBMQVRGT1JNKE1B
QykgfHwgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oRUZMKQogICAg
IHR5cGVkZWYgc3RydWN0IHsKICAgICAgICAgU3RyaW5nIHNvdXJjZTsKICAgICAgICAgU3RyaW5n
IGxvZzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9E
cmF3aW5nQnVmZmVyRWZsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Vm
bC9EcmF3aW5nQnVmZmVyRWZsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYWJlNWU0MmE1MzYwM2ViMmExMmU0
NTRhODI4OTMyMGM1NjNkMDk3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZWZsL0RyYXdpbmdCdWZmZXJFZmwuY3BwCkBAIC0wLDAgKzEsOTMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMp
IHx8IEVOQUJMRShXRUJHTCkKKworI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIKKworI2luY2x1
ZGUgIkV4dGVuc2lvbnMzRC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0RyYXdpbmdCdWZm
ZXI6OkRyYXdpbmdCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIGNvbnN0IEludFNp
emUmIHNpemUsIGJvb2wgbXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0ZWQsIGJvb2wgcGFja2Vk
RGVwdGhTdGVuY2lsRXh0ZW5zaW9uU3VwcG9ydGVkLCBib29sIHNlcGFyYXRlQmFja2luZ1RleHR1
cmUpCisgICAgOiBtX3NlcGFyYXRlQmFja2luZ1RleHR1cmUoc2VwYXJhdGVCYWNraW5nVGV4dHVy
ZSkKKyAgICAsIG1fc2Npc3NvckVuYWJsZWQoZmFsc2UpCisgICAgLCBtX3RleHR1cmUyREJpbmRp
bmcoMCkKKyAgICAsIG1fYWN0aXZlVGV4dHVyZVVuaXQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkUwKQorICAgICwgbV9jb250ZXh0KGNvbnRleHQpCisgICAgLCBtX3NpemUoLTEsIC0xKQorICAg
ICwgbV9tdWx0aXNhbXBsZUV4dGVuc2lvblN1cHBvcnRlZChtdWx0aXNhbXBsZUV4dGVuc2lvblN1
cHBvcnRlZCkKKyAgICAsIG1fcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uU3VwcG9ydGVkKHBh
Y2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1cHBvcnRlZCkKKyAgICAsIG1fZmJvKGNvbnRleHQt
PmNyZWF0ZUZyYW1lYnVmZmVyKCkpCisgICAgLCBtX2NvbG9yQnVmZmVyKDApCisgICAgLCBtX2Rl
cHRoU3RlbmNpbEJ1ZmZlcigwKQorICAgICwgbV9kZXB0aEJ1ZmZlcigwKQorICAgICwgbV9zdGVu
Y2lsQnVmZmVyKDApCisgICAgLCBtX211bHRpc2FtcGxlRkJPKDApCisgICAgLCBtX211bHRpc2Ft
cGxlQ29sb3JCdWZmZXIoMCkKK3sKKyAgICAvLyBTdXBwb3J0IGZvciBhIHNlcGFyYXRlIGJhY2tp
bmcgdGV4dHVyZSBoYXMgb25seSBiZWVuIGVuYWJsZWQgZm9yCisgICAgLy8gdGhlIGNocm9taXVt
IHBvcnQuCisgICAgQVNTRVJUKCFtX3NlcGFyYXRlQmFja2luZ1RleHR1cmUpOworICAgIEFTU0VS
VChtX2Zibyk7CisgICAgaWYgKCFtX2ZibykgeworICAgICAgICBjbGVhcigpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgLy8gQ3JlYXRlIGEgdGV4dHVyZSB0byByZW5kZXIgaW50by4K
KyAgICBtX2NvbG9yQnVmZmVyID0gY29udGV4dC0+Y3JlYXRlVGV4dHVyZSgpOworICAgIGNvbnRl
eHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX2NvbG9yQnVm
ZmVyKTsKKyAgICBjb250ZXh0LT50ZXhQYXJhbWV0ZXJmKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFwaGljc0Nv
bnRleHQzRDo6TElORUFSKTsKKyAgICBjb250ZXh0LT50ZXhQYXJhbWV0ZXJmKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVS
LCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKTsKKyAgICBjb250ZXh0LT50ZXhQYXJhbWV0ZXJp
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKKyAgICBjb250ZXh0
LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV9XUkFQX1QsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdF
KTsKKyAgICBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgMCk7CisKKyAgICBjcmVhdGVTZWNvbmRhcnlCdWZmZXJzKCk7CisgICAgcmVzZXQoc2l6ZSk7
Cit9CisKK0RyYXdpbmdCdWZmZXI6On5EcmF3aW5nQnVmZmVyKCkKK3sKKyAgICBjbGVhcigpOwor
fQorCitQbGF0Zm9ybTNET2JqZWN0IERyYXdpbmdCdWZmZXI6OnBsYXRmb3JtQ29sb3JCdWZmZXIo
KSBjb25zdAoreworICAgIHJldHVybiBtX2NvbG9yQnVmZmVyOworfQorCisjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQordm9pZCBEcmF3aW5nQnVmZmVyOjpwYWludENvbXBvc2l0ZWRS
ZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK3sKK30KKyNl
bmRpZgorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNERWZsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzREVmbC5jcHAKaW5kZXggZTNlODJm
OTk4NTdiNDMxMWUwZTVkYjVkNjVkMDQ0ZTNhNTZhOTFhMC4uMWYxZWRhMjFjMjMyZDc3NGFhNjk2
OTNhOTVlYzIwOGRjZjYxZjM4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNERWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwCkBAIC0xLDg1
MCArMSwxNDcgQEAKIC8qCi0gICAgQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25p
Y3MKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
Ci0qLworICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KIAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAKICNpZiBF
TkFCTEUoV0VCR0wpCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzREludGVybmFsLmgiCi0K
LSNpbmNsdWRlICJJbWFnZURhdGEuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2lu
Y2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZS5oIgorI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCisjaW5jbHVkZSAiU2hhZGVyTGFu
Zy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0
M0Q+IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0
ZXMgYXR0cnMsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIFJlbmRlclN0eWxlIHJlbmRlclN0eWxl
KQorUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0
ZShHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1dGVzLCBIb3N0V2luZG93KiBo
b3N0V2luZG93LCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyU3R5bGUgcmVuZGVyU3R5bGUpCiB7
Ci0gICAgYm9vbCByZW5kZXJEaXJlY3RseVRvRXZhc0dMT2JqZWN0ID0gKHJlbmRlclN0eWxlID09
IFJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KTsKKyAgICBib29sIHJlbmRlckRpcmVjdGx5VG9I
b3N0V2luZG93ID0gKHJlbmRlclN0eWxlID09IFJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KTsK
KyAgICAvLyBUaGlzIGltcGxlbWVudGF0aW9uIGRvZXNuJ3QgY3VycmVudGx5IHN1cHBvcnQgcmVu
ZGVyaW5nIGRpcmVjdGx5IHRvIHRoZSBIb3N0V2luZG93LgorICAgIGlmIChyZW5kZXJEaXJlY3Rs
eVRvSG9zdFdpbmRvdykKKyAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBPd25QdHI8R3JhcGhpY3ND
b250ZXh0M0RJbnRlcm5hbD4gaW50ZXJuYWwgPSBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpj
cmVhdGUoYXR0cnMsIGhvc3RXaW5kb3csIHJlbmRlckRpcmVjdGx5VG9FdmFzR0xPYmplY3QpOwot
ICAgIGlmICghaW50ZXJuYWwpCisgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZT4g
cHJpdiA9IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlKCk7CisgICAgaWYgKCFwcml2
KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29u
dGV4dCA9IGFkb3B0UmVmKG5ldyBHcmFwaGljc0NvbnRleHQzRChhdHRycywgaG9zdFdpbmRvdywg
cmVuZGVyRGlyZWN0bHlUb0V2YXNHTE9iamVjdCkpOwotICAgIGNvbnRleHQtPm1faW50ZXJuYWwg
PSBpbnRlcm5hbC5yZWxlYXNlKCk7CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250
ZXh0ID0gYWRvcHRSZWYobmV3IEdyYXBoaWNzQ29udGV4dDNEKGF0dHJpYnV0ZXMsIGhvc3RXaW5k
b3csIHJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KSk7CisgICAgY29udGV4dC0+bV9wcml2YXRl
ID0gcHJpdi5yZWxlYXNlKCk7CiAgICAgcmV0dXJuIGNvbnRleHQucmVsZWFzZSgpOwogfQogCi1H
cmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0
dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIGJvb2wgcmVuZGVyRGlyZWN0
bHlUb0hvc3RXaW5kb3cpCitHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3Jh
cGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmlidXRlcywgSG9zdFdpbmRvdyogaG9zdFdp
bmRvdywgYm9vbCByZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdykKICAgICA6IG1fY3VycmVudFdp
ZHRoKDApCiAgICAgLCBtX2N1cnJlbnRIZWlnaHQoMCkKLSAgICAsIG1faXNSZXNvdXJjZVNhZmUo
ZmFsc2UpCi17CisgICAgLCBtX2F0dHJzKGF0dHJpYnV0ZXMpCisgICAgLCBtX3RleHR1cmUoMCkK
KyAgICAsIG1fZmJvKDApCisgICAgLCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcigwKQorICAgICwgbV9i
b3VuZEZCTygwKQorICAgICwgbV9tdWx0aXNhbXBsZUZCTygwKQorICAgICwgbV9tdWx0aXNhbXBs
ZURlcHRoU3RlbmNpbEJ1ZmZlcigwKQorICAgICwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKDAp
Cit7CisgICAgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjphZGRBY3RpdmVHcmFwaGljc0NvbnRl
eHQodGhpcyk7CisKKyAgICB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKKworICAgIC8vIENyZWF0ZSBh
IHRleHR1cmUgdG8gcmVuZGVyIGludG8uCisgICAgOjpnbEdlblRleHR1cmVzKDEsICZtX3RleHR1
cmUpOworICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUpOworICAg
IDo6Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwg
R0xfTElORUFSKTsKKyAgICA6OmdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhU
VVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7CisgICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVY
VFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QKTsKKyAgICA6OmdsVGV4UGFyYW1l
dGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVApOworICAgIDo6
Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAwKTsKKworICAgIC8vIENyZWF0ZSBhbiBGQk8u
CisgICAgOjpnbEdlbkZyYW1lYnVmZmVyc0VYVCgxLCAmbV9mYm8pOworICAgIDo6Z2xCaW5kRnJh
bWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7CisKKyAgICBtX2JvdW5kRkJP
ID0gbV9mYm87CisgICAgaWYgKCFtX2F0dHJzLmFudGlhbGlhcyAmJiAobV9hdHRycy5zdGVuY2ls
IHx8IG1fYXR0cnMuZGVwdGgpKQorICAgICAgICA6OmdsR2VuUmVuZGVyYnVmZmVyc0VYVCgxLCAm
bV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworCisgICAgLy8gQ3JlYXRlIGEgbXVsdGlzYW1wbGUgRkJP
LgorICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcykgeworICAgICAgICA6OmdsR2VuRnJhbWVidWZm
ZXJzRVhUKDEsICZtX211bHRpc2FtcGxlRkJPKTsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZl
ckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICBtX2Jv
dW5kRkJPID0gbV9tdWx0aXNhbXBsZUZCTzsKKyAgICAgICAgOjpnbEdlblJlbmRlcmJ1ZmZlcnNF
WFQoMSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7CisgICAgICAgIGlmIChtX2F0dHJzLnN0
ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkKKyAgICAgICAgICAgIDo6Z2xHZW5SZW5kZXJidWZmZXJz
RVhUKDEsICZtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICB9CisKKyAgICAv
LyBBTkdMRSBpbml0aWFsaXphdGlvbi4KKyAgICBTaEJ1aWx0SW5SZXNvdXJjZXMgQU5HTEVSZXNv
dXJjZXM7CisgICAgU2hJbml0QnVpbHRJblJlc291cmNlcygmQU5HTEVSZXNvdXJjZXMpOworCisg
ICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfQVRUUklCUywgJkFO
R0xFUmVzb3VyY2VzLk1heFZlcnRleEF0dHJpYnMpOworICAgIGdldEludGVnZXJ2KEdyYXBoaWNz
Q29udGV4dDNEOjpNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUywgJkFOR0xFUmVzb3VyY2VzLk1h
eFZlcnRleFVuaWZvcm1WZWN0b3JzKTsKKyAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQz
RDo6TUFYX1ZBUllJTkdfVkVDVE9SUywgJkFOR0xFUmVzb3VyY2VzLk1heFZhcnlpbmdWZWN0b3Jz
KTsKKyAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9URVhUVVJF
X0lNQUdFX1VOSVRTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMp
OworICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfQ09NQklORURfVEVYVFVS
RV9JTUFHRV9VTklUUywgJkFOR0xFUmVzb3VyY2VzLk1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5p
dHMpOworICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVEVYVFVSRV9JTUFH
RV9VTklUUywgJkFOR0xFUmVzb3VyY2VzLk1heFRleHR1cmVJbWFnZVVuaXRzKTsKKyAgICBnZXRJ
bnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUywg
JkFOR0xFUmVzb3VyY2VzLk1heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMpOworCisgICAgLy8gQWx3
YXlzIHNldCB0byAxIGZvciBPcGVuR0wgRVMuCisgICAgQU5HTEVSZXNvdXJjZXMuTWF4RHJhd0J1
ZmZlcnMgPSAxOworICAgIG1fY29tcGlsZXIuc2V0UmVzb3VyY2VzKEFOR0xFUmVzb3VyY2VzKTsK
KworICAgIDo6Z2xFbmFibGUoR0xfVkVSVEVYX1BST0dSQU1fUE9JTlRfU0laRSk7CisgICAgOjpn
bEVuYWJsZShHTF9QT0lOVF9TUFJJVEUpOworICAgIDo6Z2xDbGVhckNvbG9yKDAsIDAsIDAsIDAp
OwogfQogCiBHcmFwaGljc0NvbnRleHQzRDo6fkdyYXBoaWNzQ29udGV4dDNEKCkKIHsKLX0KKyAg
ICBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnJlbW92ZUFjdGl2ZUdyYXBoaWNzQ29udGV4dCh0
aGlzKTsKKyAgICBpZiAoIW1fcHJpdmF0ZS0+bV9jb250ZXh0KQorICAgICAgICByZXR1cm47CiAK
LVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgR3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRmb3JtR3Jh
cGhpY3NDb250ZXh0M0QoKSBjb25zdAotewotICAgIHJldHVybiBtX2ludGVybmFsLT5wbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dDNEKCk7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpn
bERlbGV0ZVRleHR1cmVzKDEsICZtX3RleHR1cmUpOworICAgIGlmIChtX2F0dHJzLmFudGlhbGlh
cykgeworICAgICAgICA6OmdsRGVsZXRlUmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9tdWx0aXNhbXBs
ZUNvbG9yQnVmZmVyKTsKKyAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCB8fCBtX2F0dHJzLmRl
cHRoKQorICAgICAgICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fbXVsdGlz
YW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICA6OmdsRGVsZXRlRnJhbWVidWZmZXJz
RVhUKDEsICZtX211bHRpc2FtcGxlRkJPKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAobV9h
dHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpCisgICAgICAgICAgICA6OmdsRGVsZXRlUmVu
ZGVyYnVmZmVyc0VYVCgxLCAmbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgIH0KKyAgICA6Omds
RGVsZXRlRnJhbWVidWZmZXJzRVhUKDEsICZtX2Zibyk7CiB9CiAKLSNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCi1QbGF0Zm9ybUxheWVyKiBHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZv
cm1MYXllcigpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsK
LX0KLSNlbmRpZgotCiBib29sIEdyYXBoaWNzQ29udGV4dDNEOjptYWtlQ29udGV4dEN1cnJlbnQo
KQogewotICAgIG1faW50ZXJuYWwtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiB0
cnVlOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjppc0dMRVMyQ29tcGxpYW50KCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbV9pbnRlcm5hbC0+aXNHTEVTMkNvbXBsaWFudCgpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjphY3RpdmVUZXh0dXJlKEdDM0RlbnVtIHRleHR1cmUpCi17
Ci0gICAgbV9pbnRlcm5hbC0+YWN0aXZlVGV4dHVyZSh0ZXh0dXJlKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6YXR0YWNoU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgUGxh
dGZvcm0zRE9iamVjdCBzaGFkZXIpCi17Ci0gICAgbV9pbnRlcm5hbC0+YXR0YWNoU2hhZGVyKHBy
b2dyYW0sIHNoYWRlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRBdHRyaWJM
b2NhdGlvbihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBjb25zdCBT
dHJpbmcmIG5hbWUpCi17Ci0gICAgbV9pbnRlcm5hbC0+YmluZEF0dHJpYkxvY2F0aW9uKHByb2dy
YW0sIGluZGV4LCBuYW1lKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZEJ1ZmZl
cihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQotewotICAgIG1faW50
ZXJuYWwtPmJpbmRCdWZmZXIodGFyZ2V0LCBidWZmZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpiaW5kRnJhbWVidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0
IGJ1ZmZlcikKLXsKLSAgICBtX2ludGVybmFsLT5iaW5kRnJhbWVidWZmZXIodGFyZ2V0LCBidWZm
ZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kUmVuZGVyYnVmZmVyKEdDM0Rl
bnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCByZW5kZXJidWZmZXIpCi17Ci0gICAgbV9pbnRl
cm5hbC0+YmluZFJlbmRlcmJ1ZmZlcih0YXJnZXQsIHJlbmRlcmJ1ZmZlcik7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRUZXh0dXJlKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0z
RE9iamVjdCB0ZXh0dXJlKQotewotICAgIG1faW50ZXJuYWwtPmJpbmRUZXh0dXJlKHRhcmdldCwg
dGV4dHVyZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kQ29sb3IoR0MzRGNs
YW1wZiByZWQsIEdDM0RjbGFtcGYgZ3JlZW4sIEdDM0RjbGFtcGYgYmx1ZSwgR0MzRGNsYW1wZiBh
bHBoYSkKLXsKLSAgICBtX2ludGVybmFsLT5ibGVuZENvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFs
cGhhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRFcXVhdGlvbihHQzNEZW51
bSBtb2RlKQotewotICAgIG1faW50ZXJuYWwtPmJsZW5kRXF1YXRpb24obW9kZSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQzNEZW51bSBtb2Rl
UkdCLCBHQzNEZW51bSBtb2RlQWxwaGEpCi17Ci0gICAgbV9pbnRlcm5hbC0+YmxlbmRFcXVhdGlv
blNlcGFyYXRlKG1vZGVSR0IsIG1vZGVBbHBoYSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmJsZW5kRnVuYyhHQzNEZW51bSBzcmNGYWN0b3IsIEdDM0RlbnVtIGRzdEZhY3RvcikKLXsK
LSAgICBtX2ludGVybmFsLT5ibGVuZEZ1bmMoc3JjRmFjdG9yLCBkc3RGYWN0b3IpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEZ1bmNTZXBhcmF0ZShHQzNEZW51bSBzcmNSR0Is
IEdDM0RlbnVtIGRzdFJHQiwgR0MzRGVudW0gc3JjQWxwaGEsIEdDM0RlbnVtIGRzdEFscGhhKQot
ewotICAgIG1faW50ZXJuYWwtPmJsZW5kRnVuY1NlcGFyYXRlKHNyY1JHQiwgZHN0UkdCLCBzcmNB
bHBoYSwgZHN0QWxwaGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJEYXRh
KEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVpcHRyIHNpemUsIEdDM0RlbnVtIHVzYWdlKQotewot
ICAgIG1faW50ZXJuYWwtPmJ1ZmZlckRhdGEodGFyZ2V0LCBzaXplLCAwLCB1c2FnZSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
c2l6ZWlwdHIgc2l6ZSwgY29uc3Qgdm9pZCogZGF0YSwgR0MzRGVudW0gdXNhZ2UpCi17Ci0gICAg
bV9pbnRlcm5hbC0+YnVmZmVyRGF0YSh0YXJnZXQsIHNpemUsIGRhdGEsIHVzYWdlKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YnVmZmVyU3ViRGF0YShHQzNEZW51bSB0YXJnZXQsIEdD
M0RpbnRwdHIgb2Zmc2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwgY29uc3Qgdm9pZCogZGF0YSkKLXsK
LSAgICBtX2ludGVybmFsLT5idWZmZXJTdWJEYXRhKHRhcmdldCwgb2Zmc2V0LCBzaXplLCBkYXRh
KTsKLX0KLQotR0MzRGVudW0gR3JhcGhpY3NDb250ZXh0M0Q6OmNoZWNrRnJhbWVidWZmZXJTdGF0
dXMoR0MzRGVudW0gdGFyZ2V0KQotewotICAgIHJldHVybiBtX2ludGVybmFsLT5jaGVja0ZyYW1l
YnVmZmVyU3RhdHVzKHRhcmdldCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFy
KEdDM0RiaXRmaWVsZCBtYXNrKQotewotICAgIG1faW50ZXJuYWwtPmNsZWFyKG1hc2spOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhckNvbG9yKEdDM0RjbGFtcGYgcmVkLCBHQzNE
Y2xhbXBmIGdyZWVuLCBHQzNEY2xhbXBmIGJsdWUsIEdDM0RjbGFtcGYgYWxwaGEpCi17Ci0gICAg
bV9pbnRlcm5hbC0+Y2xlYXJDb2xvcihyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyRGVwdGgoR0MzRGNsYW1wZiBkZXB0aCkKLXsKLSAg
ICBtX2ludGVybmFsLT5jbGVhckRlcHRoKGRlcHRoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6Y2xlYXJTdGVuY2lsKEdDM0RpbnQgY2xlYXJWYWx1ZSkKLXsKLSAgICBtX2ludGVybmFs
LT5jbGVhclN0ZW5jaWwoY2xlYXJWYWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmNvbG9yTWFzayhHQzNEYm9vbGVhbiByZWQsIEdDM0Rib29sZWFuIGdyZWVuLCBHQzNEYm9vbGVh
biBibHVlLCBHQzNEYm9vbGVhbiBhbHBoYSkKLXsKLSAgICBtX2ludGVybmFsLT5jb2xvck1hc2so
cmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpj
b21waWxlU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQotewotICAgIG1faW50ZXJuYWwt
PmNvbXBpbGVTaGFkZXIoc2hhZGVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29w
eVRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNp
emVpIGhlaWdodCwgR0MzRGludCBib3JkZXIpCi17Ci0gICAgbV9pbnRlcm5hbC0+Y29weVRleElt
YWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQs
IGJvcmRlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlUZXhTdWJJbWFnZTJE
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4T2Zmc2V0LCBHQzNEaW50
IHlPZmZzZXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXpl
aSBoZWlnaHQpCi17Ci0gICAgbV9pbnRlcm5hbC0+Y29weVRleFN1YkltYWdlMkQodGFyZ2V0LCBs
ZXZlbCwgeE9mZnNldCwgeU9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmNvbXByZXNzZWRUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwg
R0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwg
R0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RzaXplaSBpbWFnZVNpemUsIGNv
bnN0IHZvaWQqIGRhdGEpCi17Ci0gICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBjb21wcmVz
c2VkVGV4SW1hZ2UyRC4KLSAgICAvLyBtX2ludGVybmFsLT5jb21wcmVzc2VkVGV4SW1hZ2UyRCh0
YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBpbWFn
ZVNpemUsIGRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb21wcmVzc2VkVGV4
U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNl
dCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdD
M0RlbnVtIGZvcm1hdCwgR0MzRHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCogZGF0YSkKLXsK
LSAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIGNvbXByZXNzZWRUZXhTdWJJbWFnZTJELgot
ICAgIC8vIG1faW50ZXJuYWwtPmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWws
IHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgaW1hZ2VTaXplLCBkYXRh
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y3VsbEZhY2UoR0MzRGVudW0gbW9kZSkK
LXsKLSAgICBtX2ludGVybmFsLT5jdWxsRmFjZShtb2RlKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6ZGVwdGhGdW5jKEdDM0RlbnVtIGZ1bmMpCi17Ci0gICAgbV9pbnRlcm5hbC0+ZGVw
dGhGdW5jKGZ1bmMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZXB0aE1hc2soR0Mz
RGJvb2xlYW4gZmxhZykKLXsKLSAgICBtX2ludGVybmFsLT5kZXB0aE1hc2soZmxhZyk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRoUmFuZ2UoR0MzRGNsYW1wZiB6TmVhciwgR0Mz
RGNsYW1wZiB6RmFyKQotewotICAgIG1faW50ZXJuYWwtPmRlcHRoUmFuZ2Uoek5lYXIsIHpGYXIp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZXRhY2hTaGFkZXIoUGxhdGZvcm0zRE9i
amVjdCBwcm9ncmFtLCBQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKLXsKLSAgICBtX2ludGVybmFs
LT5kZXRhY2hTaGFkZXIocHJvZ3JhbSwgc2hhZGVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6ZGlzYWJsZShHQzNEZW51bSBjYXApCi17Ci0gICAgbV9pbnRlcm5hbC0+ZGlzYWJsZShj
YXApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkaXNhYmxlVmVydGV4QXR0cmliQXJy
YXkoR0MzRHVpbnQgaW5kZXgpCi17Ci0gICAgbV9pbnRlcm5hbC0+ZGlzYWJsZVZlcnRleEF0dHJp
YkFycmF5KGluZGV4KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZHJhd0FycmF5cyhH
QzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQpCi17Ci0gICAgbV9p
bnRlcm5hbC0+ZHJhd0FycmF5cyhtb2RlLCBmaXJzdCwgY291bnQpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpkcmF3RWxlbWVudHMoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50
LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50cHRyIG9mZnNldCkKLXsKLSAgICBtX2ludGVybmFsLT5k
cmF3RWxlbWVudHMobW9kZSwgY291bnQsIHR5cGUsIG9mZnNldCk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmVuYWJsZShHQzNEZW51bSBjYXApCi17Ci0gICAgbV9pbnRlcm5hbC0+ZW5h
YmxlKGNhcCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmVuYWJsZVZlcnRleEF0dHJp
YkFycmF5KEdDM0R1aW50IGluZGV4KQotewotICAgIG1faW50ZXJuYWwtPmVuYWJsZVZlcnRleEF0
dHJpYkFycmF5KGluZGV4KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZmluaXNoKCkK
LXsKLSAgICBtX2ludGVybmFsLT5maW5pc2goKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6Zmx1c2goKQotewotICAgIG1faW50ZXJuYWwtPmZsdXNoKCk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gcmVuZGVyYnVmZmVyVGFyZ2V0LCBQbGF0Zm9ybTNE
T2JqZWN0IGJ1ZmZlcikKLXsKLSAgICBtX2ludGVybmFsLT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZl
cih0YXJnZXQsIGF0dGFjaG1lbnQsIHJlbmRlcmJ1ZmZlclRhcmdldCwgYnVmZmVyKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSB0ZXhUYXJnZXQsIFBsYXRmb3JtM0RP
YmplY3QgdGV4dHVyZSwgR0MzRGludCBsZXZlbCkKLXsKLSAgICBtX2ludGVybmFsLT5mcmFtZWJ1
ZmZlclRleHR1cmUyRCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleFRhcmdldCwgdGV4dHVyZSwgbGV2
ZWwpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmcm9udEZhY2UoR0MzRGVudW0gbW9k
ZSkKLXsKLSAgICBtX2ludGVybmFsLT5mcm9udEZhY2UobW9kZSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmdlbmVyYXRlTWlwbWFwKEdDM0RlbnVtIHRhcmdldCkKLXsKLSAgICBtX2lu
dGVybmFsLT5nZW5lcmF0ZU1pcG1hcCh0YXJnZXQpOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4
dDNEOjpnZXRBY3RpdmVBdHRyaWIoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBp
bmRleCwgQWN0aXZlSW5mbyYgaW5mbykKLXsKLSAgICByZXR1cm4gbV9pbnRlcm5hbC0+Z2V0QWN0
aXZlQXR0cmliKHByb2dyYW0sIGluZGV4LCBpbmZvKTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0QWN0aXZlVW5pZm9ybShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50
IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQotewotICAgIHJldHVybiBtX2ludGVybmFsLT5nZXRB
Y3RpdmVVbmlmb3JtKHByb2dyYW0sIGluZGV4LCBpbmZvKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0QXR0YWNoZWRTaGFkZXJzKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0Mz
RHNpemVpIG1heENvdW50LCBHQzNEc2l6ZWkqIGNvdW50LCBQbGF0Zm9ybTNET2JqZWN0KiBzaGFk
ZXJzKQotewotICAgIG1faW50ZXJuYWwtPmdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCBtYXhD
b3VudCwgY291bnQsIHNoYWRlcnMpOwotfQotCi1pbnQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEF0
dHJpYkxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1l
KQotewotICAgIHJldHVybiBtX2ludGVybmFsLT5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBu
YW1lKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0Qm9vbGVhbnYoR0MzRGVudW0g
cGFyYW1OYW1lLCBHQzNEYm9vbGVhbiogdmFsdWUpCi17Ci0gICAgbV9pbnRlcm5hbC0+Z2V0Qm9v
bGVhbnYocGFyYW1OYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Omdl
dEJ1ZmZlclBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcGFyYW1OYW1lLCBH
QzNEaW50KiB2YWx1ZSkKLXsKLSAgICBtX2ludGVybmFsLT5nZXRCdWZmZXJQYXJhbWV0ZXJpdih0
YXJnZXQsIHBhcmFtTmFtZSwgdmFsdWUpOwotfQotCi1HcmFwaGljc0NvbnRleHQzRDo6QXR0cmli
dXRlcyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKQotewotICAgIHJl
dHVybiBtX2ludGVybmFsLT5nZXRDb250ZXh0QXR0cmlidXRlcygpOwotfQotCi1HQzNEZW51bSBH
cmFwaGljc0NvbnRleHQzRDo6Z2V0RXJyb3IoKQotewotICAgIHJldHVybiBtX2ludGVybmFsLT5n
ZXRFcnJvcigpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRGbG9hdHYoR0MzRGVu
dW0gcGFyYW1OYW1lLCBHQzNEZmxvYXQqIHZhbHVlKQotewotICAgIG1faW50ZXJuYWwtPmdldEZs
b2F0dihwYXJhbU5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0
RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51
bSBhdHRhY2htZW50LCBHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQqIHZhbHVlKQotewotICAg
IG1faW50ZXJuYWwtPmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KHRhcmdldCwg
YXR0YWNobWVudCwgcGFyYW1OYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmdldEludGVnZXJ2KEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGludCogdmFsdWUpCi17Ci0g
ICAgbV9pbnRlcm5hbC0+Z2V0SW50ZWdlcnYocGFyYW1OYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmdldFByb2dyYW1pdihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0s
IEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGludCogdmFsdWUpCi17Ci0gICAgbV9pbnRlcm5hbC0+
Z2V0UHJvZ3JhbWl2KHByb2dyYW0sIHBhcmFtTmFtZSwgdmFsdWUpOwotfQotCi1TdHJpbmcgR3Jh
cGhpY3NDb250ZXh0M0Q6OmdldFByb2dyYW1JbmZvTG9nKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3Jh
bSkKLXsKLSAgICByZXR1cm4gbV9pbnRlcm5hbC0+Z2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEaW50KiB2YWx1ZSkKLXsK
LSAgICBtX2ludGVybmFsLT5nZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdih0YXJnZXQsIHBhcmFt
TmFtZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJpdihQ
bGF0Zm9ybTNET2JqZWN0IHNoYWRlciwgR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEaW50KiB2YWx1
ZSkKLXsKLSAgICBtX2ludGVybmFsLT5nZXRTaGFkZXJpdihzaGFkZXIsIHBhcmFtTmFtZSwgdmFs
dWUpOwotfQotCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlckluZm9Mb2coUGxh
dGZvcm0zRE9iamVjdCBzaGFkZXIpCi17Ci0gICAgcmV0dXJuIG1faW50ZXJuYWwtPmdldFNoYWRl
ckluZm9Mb2coc2hhZGVyKTsKLX0KLQotU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFk
ZXJTb3VyY2UoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCi17Ci0gICAgcmV0dXJuIG1faW50ZXJu
YWwtPmdldFNoYWRlclNvdXJjZShzaGFkZXIpOwotfQotCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0
M0Q6OmdldFN0cmluZyhHQzNEZW51bSBuYW1lKQotewotICAgIHJldHVybiBtX2ludGVybmFsLT5n
ZXRTdHJpbmcobmFtZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFRleFBhcmFt
ZXRlcmZ2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEZmxvYXQqIHZh
bHVlKQotewotICAgIG1faW50ZXJuYWwtPmdldFRleFBhcmFtZXRlcmZ2KHRhcmdldCwgcGFyYW1O
YW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFRleFBhcmFtZXRl
cml2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEaW50KiB2YWx1ZSkK
LXsKLSAgICBtX2ludGVybmFsLT5nZXRUZXhQYXJhbWV0ZXJpdih0YXJnZXQsIHBhcmFtTmFtZSwg
dmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtZnYoUGxhdGZv
cm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQqIHZhbHVlKQot
ewotICAgIG1faW50ZXJuYWwtPmdldFVuaWZvcm1mdihwcm9ncmFtLCBsb2NhdGlvbiwgdmFsdWUp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtaXYoUGxhdGZvcm0zRE9i
amVjdCBwcm9ncmFtLCBHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50KiB2YWx1ZSkKLXsKLSAgICBt
X2ludGVybmFsLT5nZXRVbmlmb3JtaXYocHJvZ3JhbSwgbG9jYXRpb24sIHZhbHVlKTsKLX0KLQot
R0MzRGludCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybUxvY2F0aW9uKFBsYXRmb3JtM0RP
YmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIHJldHVybiBtX2ludGVy
bmFsLT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbmFtZSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYmZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBw
YXJhbU5hbWUsIEdDM0RmbG9hdCogdmFsdWUpCi17Ci0gICAgbV9pbnRlcm5hbC0+Z2V0VmVydGV4
QXR0cmliZnYoaW5kZXgsIHBhcmFtTmFtZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJpdihHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcGFyYW1O
YW1lLCBHQzNEaW50KiB2YWx1ZSkKLXsKLSAgICBtX2ludGVybmFsLT5nZXRWZXJ0ZXhBdHRyaWJp
dihpbmRleCwgcGFyYW1OYW1lLCB2YWx1ZSk7Ci19Ci0KLWxvbmcgR3JhcGhpY3NDb250ZXh0M0Q6
OmdldFZlcnRleEF0dHJpYk9mZnNldChHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcGFyYW1OYW1l
KQotewotICAgIHJldHVybiBtX2ludGVybmFsLT5nZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoaW5kZXgs
IHBhcmFtTmFtZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmhpbnQoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEZW51bSBtb2RlKQotewotICAgIG1faW50ZXJuYWwtPmhpbnQodGFyZ2V0LCBt
b2RlKTsKLX0KLQotR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6OmlzQnVmZmVyKFBsYXRm
b3JtM0RPYmplY3Qgb2JqKQotewotICAgIHJldHVybiBtX2ludGVybmFsLT5pc0J1ZmZlcihvYmop
OwotfQotCi1HQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNFbmFibGVkKEdDM0RlbnVt
IGNhcCkKLXsKLSAgICByZXR1cm4gbV9pbnRlcm5hbC0+aXNFbmFibGVkKGNhcCk7Ci19Ci0KLUdD
M0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc0ZyYW1lYnVmZmVyKFBsYXRmb3JtM0RPYmpl
Y3Qgb2JqKQotewotICAgIHJldHVybiBtX2ludGVybmFsLT5pc0ZyYW1lYnVmZmVyKG9iaik7Ci19
Ci0KLUdDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc1Byb2dyYW0oUGxhdGZvcm0zRE9i
amVjdCBvYmopCi17Ci0gICAgcmV0dXJuIG1faW50ZXJuYWwtPmlzUHJvZ3JhbShvYmopOwotfQot
Ci1HQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNSZW5kZXJidWZmZXIoUGxhdGZvcm0z
RE9iamVjdCBvYmopCi17Ci0gICAgcmV0dXJuIG1faW50ZXJuYWwtPmlzUmVuZGVyYnVmZmVyKG9i
aik7Ci19Ci0KLUdDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc1NoYWRlcihQbGF0Zm9y
bTNET2JqZWN0IG9iaikKLXsKLSAgICByZXR1cm4gbV9pbnRlcm5hbC0+aXNTaGFkZXIob2JqKTsK
LX0KLQotR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6OmlzVGV4dHVyZShQbGF0Zm9ybTNE
T2JqZWN0IG9iaikKLXsKLSAgICByZXR1cm4gbV9pbnRlcm5hbC0+aXNUZXh0dXJlKG9iaik7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmxpbmVXaWR0aChHQzNEZmxvYXQgd2lkdGgpCi17
Ci0gICAgbV9pbnRlcm5hbC0+bGluZVdpZHRoKHdpZHRoKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6bGlua1Byb2dyYW0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQotewotICAgIG1f
aW50ZXJuYWwtPmxpbmtQcm9ncmFtKHByb2dyYW0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpwaXhlbFN0b3JlaShHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQgcGFyYW0pCi17Ci0g
ICAgbV9pbnRlcm5hbC0+cGl4ZWxTdG9yZWkocGFyYW1OYW1lLCBwYXJhbSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnBvbHlnb25PZmZzZXQoR0MzRGZsb2F0IGZhY3RvciwgR0MzRGZs
b2F0IHVuaXRzKQotewotICAgIG1faW50ZXJuYWwtPnBvbHlnb25PZmZzZXQoZmFjdG9yLCB1bml0
cyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhlbHMoR0MzRGludCB4LCBH
QzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9y
bWF0LCBHQzNEZW51bSB0eXBlLCB2b2lkKiBkYXRhKQotewotICAgIG1faW50ZXJuYWwtPnJlYWRQ
aXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKCkKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZW5kZXJidWZmZXJT
dG9yYWdlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXpl
aSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKLXsKLSAgICBtX2ludGVybmFsLT5yZW5kZXJidWZm
ZXJTdG9yYWdlKHRhcmdldCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzYW1wbGVDb3ZlcmFnZShHQzNEY2xhbXBmIHZhbHVlLCBH
QzNEYm9vbGVhbiBpbnZlcnQpCi17Ci0gICAgbV9pbnRlcm5hbC0+c2FtcGxlQ292ZXJhZ2UodmFs
dWUsIGludmVydCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNjaXNzb3IoR0MzRGlu
dCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKLXsKLSAg
ICBtX2ludGVybmFsLT5zY2lzc29yKHgsIHksIHdpZHRoLCBoZWlnaHQpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpzaGFkZXJTb3VyY2UoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBj
b25zdCBTdHJpbmcmIHN0cmluZykKLXsKLSAgICBtX2ludGVybmFsLT5zaGFkZXJTb3VyY2UocHJv
Z3JhbSwgc3RyaW5nKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbEZ1bmMo
R0MzRGVudW0gZnVuYywgR0MzRGludCByZWYsIEdDM0R1aW50IG1hc2spCi17Ci0gICAgbV9pbnRl
cm5hbC0+c3RlbmNpbEZ1bmMoZnVuYywgcmVmLCBtYXNrKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEZW51bSBmdW5j
LCBHQzNEaW50IHJlZiwgR0MzRHVpbnQgbWFzaykKLXsKLSAgICBtX2ludGVybmFsLT5zdGVuY2ls
RnVuY1NlcGFyYXRlKGZhY2UsIGZ1bmMsIHJlZiwgbWFzayk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnN0ZW5jaWxNYXNrKEdDM0R1aW50IG1hc2spCi17Ci0gICAgbV9pbnRlcm5hbC0+
c3RlbmNpbE1hc2sobWFzayk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxN
YXNrU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRHVpbnQgbWFzaykKLXsKLSAgICBtX2ludGVy
bmFsLT5zdGVuY2lsTWFza1NlcGFyYXRlKGZhY2UsIG1hc2spOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpzdGVuY2lsT3AoR0MzRGVudW0gZmFpbCwgR0MzRGVudW0gemZhaWwsIEdDM0Rl
bnVtIHpwYXNzKQotewotICAgIG1faW50ZXJuYWwtPnN0ZW5jaWxPcChmYWlsLCB6ZmFpbCwgenBh
c3MpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsT3BTZXBhcmF0ZShHQzNE
ZW51bSBmYWNlLCBHQzNEZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFpbCwgR0MzRGVudW0genBhc3Mp
Ci17Ci0gICAgbV9pbnRlcm5hbC0+c3RlbmNpbE9wU2VwYXJhdGUoZmFjZSwgZmFpbCwgemZhaWws
IHpwYXNzKTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRChHQzNEZW51
bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6
ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51bSBmb3Jt
YXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKLXsKLSAgICByZXR1cm4gbV9p
bnRlcm5hbC0+dGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgs
IGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnRleFBhcmFtZXRlcmYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwYXJh
bU5hbWUsIEdDM0RmbG9hdCBwYXJhbSkKLXsKLSAgICBtX2ludGVybmFsLT50ZXhQYXJhbWV0ZXJm
KHRhcmdldCwgcGFyYW1OYW1lLCBwYXJhbSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnRleFBhcmFtZXRlcmkoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0Rp
bnQgcGFyYW0pCi17Ci0gICAgbV9pbnRlcm5hbC0+dGV4UGFyYW1ldGVyaSh0YXJnZXQsIHBhcmFt
TmFtZSwgcGFyYW0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhTdWJJbWFnZTJE
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4T2Zmc2V0LCBHQzNEaW50
IHlPZmZzZXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9y
bWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpCi17Ci0gICAgbV9pbnRlcm5h
bC0+dGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4T2Zmc2V0LCB5T2Zmc2V0LCB3aWR0aCwg
aGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnVuaWZvcm0xZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgeCkKLXsKLSAgICBtX2lu
dGVybmFsLT51bmlmb3JtMWYobG9jYXRpb24sIHgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjp1bmlmb3JtMWZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCogdiwgR0MzRHNpemVp
IHNpemUpCi17Ci0gICAgbV9pbnRlcm5hbC0+dW5pZm9ybTFmdihsb2NhdGlvbiwgc2l6ZSwgdik7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xaShHQzNEaW50IGxvY2F0aW9u
LCBHQzNEaW50IHgpCi17Ci0gICAgbV9pbnRlcm5hbC0+dW5pZm9ybTFpKGxvY2F0aW9uLCB4KTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFpdihHQzNEaW50IGxvY2F0aW9u
LCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6ZSkKLXsKLSAgICBtX2ludGVybmFsLT51bmlmb3Jt
MWl2KGxvY2F0aW9uLCBzaXplLCB2KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5p
Zm9ybTJmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBmbG9hdCB5KQotewotICAgIG1f
aW50ZXJuYWwtPnVuaWZvcm0yZihsb2NhdGlvbiwgeCwgeSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnVuaWZvcm0yZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNE
c2l6ZWkgc2l6ZSkKLXsKLSAgICBtX2ludGVybmFsLT51bmlmb3JtMmZ2KGxvY2F0aW9uLCBzaXpl
LCB2KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJpKEdDM0RpbnQgbG9j
YXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5KQotewotICAgIG1faW50ZXJuYWwtPnVuaWZvcm0y
aShsb2NhdGlvbiwgeCwgeSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0y
aXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVpIHNpemUpCi17Ci0gICAg
bV9pbnRlcm5hbC0+dW5pZm9ybTJpdihsb2NhdGlvbiwgc2l6ZSwgdik7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0zZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwg
R0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6KQotewotICAgIG1faW50ZXJuYWwtPnVuaWZvcm0zZihs
b2NhdGlvbiwgeCwgeSwgeik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0z
ZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSkKLXsKLSAg
ICBtX2ludGVybmFsLT51bmlmb3JtM2Z2KGxvY2F0aW9uLCBzaXplLCB2KTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTNpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgeCwg
R0MzRGludCB5LCBHQzNEaW50IHopCi17Ci0gICAgbV9pbnRlcm5hbC0+dW5pZm9ybTNpKGxvY2F0
aW9uLCB4LCB5LCB6KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTNpdihH
QzNEaW50IGxvY2F0aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6ZSkKLXsKLSAgICBtX2lu
dGVybmFsLT51bmlmb3JtM2l2KGxvY2F0aW9uLCBzaXplLCB2KTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6dW5pZm9ybTRmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNE
ZmxvYXQgeSwgR0MzRGZsb2F0IHosIEdDM0RmbG9hdCB3KQotewotICAgIG1faW50ZXJuYWwtPnVu
aWZvcm00Zihsb2NhdGlvbiwgeCwgeSwgeiwgdyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnVuaWZvcm00ZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkg
c2l6ZSkKLXsKLSAgICBtX2ludGVybmFsLT51bmlmb3JtNGZ2KGxvY2F0aW9uLCBzaXplLCB2KTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRpKEdDM0RpbnQgbG9jYXRpb24s
IEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEaW50IHosIEdDM0RpbnQgdykKLXsKLSAgICBtX2lu
dGVybmFsLT51bmlmb3JtNGkobG9jYXRpb24sIHgsIHksIHosIHcpOworICAgIGlmICghbV9wcml2
YXRlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bWFrZUNv
bnRleHRDdXJyZW50KCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00aXYo
R0MzRGludCBsb2NhdGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVpIHNpemUpCi17Ci0gICAgbV9p
bnRlcm5hbC0+dW5pZm9ybTRpdihsb2NhdGlvbiwgc2l6ZSwgdik7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnVuaWZvcm1NYXRyaXgyZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGJvb2xl
YW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIHZhbHVlLCBHQzNEc2l6ZWkgc2l6ZSkKLXsKLSAgICBt
X2ludGVybmFsLT51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIHZh
bHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDNmdihHQzNE
aW50IGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdmFsdWUsIEdD
M0RzaXplaSBzaXplKQotewotICAgIG1faW50ZXJuYWwtPnVuaWZvcm1NYXRyaXgzZnYobG9jYXRp
b24sIHNpemUsIHRyYW5zcG9zZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
Ojp1bmlmb3JtTWF0cml4NGZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9z
ZSwgR0MzRGZsb2F0KiB2YWx1ZSwgR0MzRHNpemVpIHNpemUpCi17Ci0gICAgbV9pbnRlcm5hbC0+
dW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgc2l6ZSwgdHJhbnNwb3NlLCB2YWx1ZSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVzZVByb2dyYW0oUGxhdGZvcm0zRE9iamVjdCBwcm9n
cmFtKQotewotICAgIG1faW50ZXJuYWwtPnVzZVByb2dyYW0ocHJvZ3JhbSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dy
YW0pCi17Ci0gICAgbV9pbnRlcm5hbC0+dmFsaWRhdGVQcm9ncmFtKHByb2dyYW0pOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIxZihHQzNEdWludCBpbmRleCwgR0Mz
RGZsb2F0IHgpCi17Ci0gICAgbV9pbnRlcm5hbC0+dmVydGV4QXR0cmliMWYoaW5kZXgsIHgpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIxZnYoR0MzRHVpbnQgaW5k
ZXgsIEdDM0RmbG9hdCogdmFsdWVzKQotewotICAgIG1faW50ZXJuYWwtPnZlcnRleEF0dHJpYjFm
dihpbmRleCwgdmFsdWVzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0
cmliMmYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSkKLXsKLSAgICBt
X2ludGVybmFsLT52ZXJ0ZXhBdHRyaWIyZihpbmRleCwgeCwgeSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjJmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2
YWx1ZXMpCi17Ci0gICAgbV9pbnRlcm5hbC0+dmVydGV4QXR0cmliMmZ2KGluZGV4LCB2YWx1ZXMp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIzZihHQzNEdWludCBp
bmRleCwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeikKLXsKLSAgICBtX2lu
dGVybmFsLT52ZXJ0ZXhBdHRyaWIzZihpbmRleCwgeCwgeSwgeik7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjNmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2
YWx1ZXMpCi17Ci0gICAgbV9pbnRlcm5hbC0+dmVydGV4QXR0cmliM2Z2KGluZGV4LCB2YWx1ZXMp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWI0ZihHQzNEdWludCBp
bmRleCwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeiwgR0MzRGZsb2F0IHcp
Ci17Ci0gICAgbV9pbnRlcm5hbC0+dmVydGV4QXR0cmliNGYoaW5kZXgsIHgsIHksIHosIHcpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWI0ZnYoR0MzRHVpbnQgaW5k
ZXgsIEdDM0RmbG9hdCogdmFsdWVzKQotewotICAgIG1faW50ZXJuYWwtPnZlcnRleEF0dHJpYjRm
dihpbmRleCwgdmFsdWVzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0
cmliUG9pbnRlcihHQzNEdWludCBpbmRleCwgR0MzRGludCBzaXplLCBHQzNEZW51bSB0eXBlLCBH
QzNEYm9vbGVhbiBub3JtYWxpemVkLCBHQzNEc2l6ZWkgc3RyaWRlLCBHQzNEaW50cHRyIG9mZnNl
dCkKLXsKLSAgICBtX2ludGVybmFsLT52ZXJ0ZXhBdHRyaWJQb2ludGVyKGluZGV4LCBzaXplLCB0
eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsIG9mZnNldCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnZpZXdwb3J0KEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdD
M0RzaXplaSBoZWlnaHQpCi17Ci0gICAgbV9pbnRlcm5hbC0+dmlld3BvcnQoeCwgeSwgd2lkdGgs
IGhlaWdodCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGUoaW50IHdpZHRo
LCBpbnQgaGVpZ2h0KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6Om1hcmtDb250ZXh0Q2hhbmdlZCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bWFya0xheWVyQ29tcG9zaXRlZCgpCi17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6bGF5
ZXJDb21wb3NpdGVkKCkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1
bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCwgRHJhd2luZ0J1ZmZl
ciogZHJhd2luZ0J1ZmZlcikKLXsKLSAgICAvLyBEcmF3aW5nQnVmZmVyIHN1cHBvcnQgb25seSBp
bXBsZW1lbnRlZCBpbiBDaHJvbWl1bSBwb3J0cy4KLSAgICBBU1NFUlQoIWRyYXdpbmdCdWZmZXIp
OwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLVBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBHcmFw
aGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoRHJhd2luZ0J1
ZmZlciogZHJhd2luZ0J1ZmZlcikKLXsKLSAgICAvLyBEcmF3aW5nQnVmZmVyIHN1cHBvcnQgb25s
eSBpbXBsZW1lbnRlZCBpbiBDaHJvbWl1bSBwb3J0cy4KLSAgICBBU1NFUlQoIWRyYXdpbmdCdWZm
ZXIpOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VE
YXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUoSW50U2l6ZSgxLCAxKSk7Ci0gICAgcmV0dXJuIGltYWdl
RGF0YS5yZWxlYXNlKCk7Ci19Ci0KLVBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6
OmNyZWF0ZUJ1ZmZlcigpCi17Ci0gICAgcmV0dXJuIG1faW50ZXJuYWwtPmNyZWF0ZUJ1ZmZlcigp
OwotfQotCi1QbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVGcmFtZWJ1
ZmZlcigpCi17Ci0gICAgcmV0dXJuIG1faW50ZXJuYWwtPmNyZWF0ZUZyYW1lYnVmZmVyKCk7Ci19
Ci0KLVBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVByb2dyYW0oKQot
ewotICAgIHJldHVybiBtX2ludGVybmFsLT5jcmVhdGVQcm9ncmFtKCk7Ci19Ci0KLVBsYXRmb3Jt
M0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCi17Ci0gICAg
cmV0dXJuIG1faW50ZXJuYWwtPmNyZWF0ZVJlbmRlcmJ1ZmZlcigpOwotfQotCi1QbGF0Zm9ybTNE
T2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVTaGFkZXIoR0MzRGVudW0gdHlwZSkKLXsK
LSAgICByZXR1cm4gbV9pbnRlcm5hbC0+Y3JlYXRlU2hhZGVyKHR5cGUpOwotfQotCi1QbGF0Zm9y
bTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVUZXh0dXJlKCkKLXsKLSAgICByZXR1
cm4gbV9pbnRlcm5hbC0+Y3JlYXRlVGV4dHVyZSgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpkZWxldGVCdWZmZXIoUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCi17Ci0gICAgbV9pbnRl
cm5hbC0+ZGVsZXRlQnVmZmVyKGJ1ZmZlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQotewotICAgIG1faW50
ZXJuYWwtPmRlbGV0ZUZyYW1lYnVmZmVyKGJ1ZmZlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmRlbGV0ZVByb2dyYW0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQotewotICAgIG1f
aW50ZXJuYWwtPmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmRlbGV0ZVJlbmRlcmJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcikKLXsKLSAg
ICBtX2ludGVybmFsLT5kZWxldGVSZW5kZXJidWZmZXIoYnVmZmVyKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6ZGVsZXRlU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQotewot
ICAgIG1faW50ZXJuYWwtPmRlbGV0ZVNoYWRlcihzaGFkZXIpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpkZWxldGVUZXh0dXJlKFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSkKLXsKLSAg
ICBtX2ludGVybmFsLT5kZWxldGVUZXh0dXJlKHRleHR1cmUpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpzeW50aGVzaXplR0xFcnJvcihHQzNEZW51bSBlcnJvcikKLXsKLSAgICBtX2lu
dGVybmFsLT5zeW50aGVzaXplR0xFcnJvcihlcnJvcik7Ci19Ci0KLUV4dGVuc2lvbnMzRCogR3Jh
cGhpY3NDb250ZXh0M0Q6OmdldEV4dGVuc2lvbnMoKQotewotICAgIHJldHVybiBtX2ludGVybmFs
LT5nZXRFeHRlbnNpb25zKCk7Ci19Ci0KLUludFNpemUgR3JhcGhpY3NDb250ZXh0M0Q6OmdldElu
dGVybmFsRnJhbWVidWZmZXJTaXplKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJl
dHVybiBJbnRTaXplKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNldENvbnRleHRM
b3N0Q2FsbGJhY2soUGFzc093blB0cjxDb250ZXh0TG9zdENhbGxiYWNrPikKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzZXRFcnJvck1lc3Nh
Z2VDYWxsYmFjayhQYXNzT3duUHRyPEVycm9yTWVzc2FnZUNhbGxiYWNrPikKK1BsYXRmb3JtR3Jh
cGhpY3NDb250ZXh0M0QgR3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
M0QoKSBjb25zdAogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIG1fcHJpdmF0
ZS0+bV9jb250ZXh0OwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEo
SW1hZ2UqIGltYWdlLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGJvb2wgcHJlbXVs
dGlwbHlBbHBoYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGln
bm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlLCBWZWN0b3I8dWludDhfdD4mIG91dHB1dFZlY3RvcikK
K2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzR0xFUzJDb21wbGlhbnQoKSBjb25zdAogewotICAg
IG5vdEltcGxlbWVudGVkKCk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdM
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25z
M0RPcGVuR0wuY3BwCmluZGV4IDczMzIwZDE4NzA1ZDI5MTY0YmQ5NWJhN2QxNzJmYTg2YmI4OGYw
NDcuLjY3ZDQyYmE4Njg0NTIyYTEzMzI1ZWQ1ZjRmZDY5M2ZkN2I2NTg4YzUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVu
R0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRl
bnNpb25zM0RPcGVuR0wuY3BwCkBAIC0zNSw3ICszNSw3IEBACiAjaWYgUExBVEZPUk0oTUFDKQog
I2luY2x1ZGUgIkFOR0xFL1NoYWRlckxhbmcuaCIKICNpbmNsdWRlIDxPcGVuR0wvZ2wuaD4KLSNl
bGlmIFBMQVRGT1JNKEdUSykKKyNlbGlmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oRUZMKQog
I2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCiAjZWxpZiBQTEFURk9STShRVCkKICNpbmNsdWRlIDxj
YWlyby9PcGVuR0xTaGltcy5oPgpAQCAtMTQ5LDcgKzE0OSw3IEBAIHZvaWQgRXh0ZW5zaW9uczNE
T3BlbkdMOjpyZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUodW5zaWduZWQgbG9uZyB0YXJn
ZXQsIHVuCiBQbGF0Zm9ybTNET2JqZWN0IEV4dGVuc2lvbnMzRE9wZW5HTDo6Y3JlYXRlVmVydGV4
QXJyYXlPRVMoKQogewogICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0jaWYg
IVBMQVRGT1JNKEdUSykgJiYgIVBMQVRGT1JNKFFUKSAmJiBkZWZpbmVkKEdMX0FQUExFX3ZlcnRl
eF9hcnJheV9vYmplY3QpICYmIEdMX0FQUExFX3ZlcnRleF9hcnJheV9vYmplY3QKKyNpZiAhUExB
VEZPUk0oR1RLKSAmJiAhUExBVEZPUk0oUVQpICYmICFQTEFURk9STShFRkwpICYmIGRlZmluZWQo
R0xfQVBQTEVfdmVydGV4X2FycmF5X29iamVjdCkgJiYgR0xfQVBQTEVfdmVydGV4X2FycmF5X29i
amVjdAogICAgIEdMdWludCBhcnJheSA9IDA7CiAgICAgZ2xHZW5WZXJ0ZXhBcnJheXNBUFBMRSgx
LCAmYXJyYXkpOwogICAgIHJldHVybiBhcnJheTsKQEAgLTE2NCw3ICsxNjQsNyBAQCB2b2lkIEV4
dGVuc2lvbnMzRE9wZW5HTDo6ZGVsZXRlVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCBh
cnJheSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0jaWYgIVBMQVRGT1JNKEdUSykgJiYgIVBMQVRGT1JNKFFUKSAmJiBkZWZpbmVk
KEdMX0FQUExFX3ZlcnRleF9hcnJheV9vYmplY3QpICYmIEdMX0FQUExFX3ZlcnRleF9hcnJheV9v
YmplY3QKKyNpZiAhUExBVEZPUk0oR1RLKSAmJiAhUExBVEZPUk0oUVQpICYmICFQTEFURk9STShF
RkwpICYmIGRlZmluZWQoR0xfQVBQTEVfdmVydGV4X2FycmF5X29iamVjdCkgJiYgR0xfQVBQTEVf
dmVydGV4X2FycmF5X29iamVjdAogICAgIGdsRGVsZXRlVmVydGV4QXJyYXlzQVBQTEUoMSwgJmFy
cmF5KTsKICNlbmRpZgogfQpAQCAtMTc1LDcgKzE3NSw3IEBAIEdDM0Rib29sZWFuIEV4dGVuc2lv
bnMzRE9wZW5HTDo6aXNWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0IGFycmF5KQogICAg
ICAgICByZXR1cm4gR0xfRkFMU0U7CiAgICAgCiAgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSNpZiAhUExBVEZPUk0oR1RLKSAmJiAhUExBVEZPUk0oUVQpICYmIGRlZmluZWQo
R0xfQVBQTEVfdmVydGV4X2FycmF5X29iamVjdCkgJiYgR0xfQVBQTEVfdmVydGV4X2FycmF5X29i
amVjdAorI2lmICFQTEFURk9STShHVEspICYmICFQTEFURk9STShRVCkgJiYgIVBMQVRGT1JNKEVG
TCkgJiYgZGVmaW5lZChHTF9BUFBMRV92ZXJ0ZXhfYXJyYXlfb2JqZWN0KSAmJiBHTF9BUFBMRV92
ZXJ0ZXhfYXJyYXlfb2JqZWN0CiAgICAgcmV0dXJuIGdsSXNWZXJ0ZXhBcnJheUFQUExFKGFycmF5
KTsKICNlbHNlCiAgICAgcmV0dXJuIEdMX0ZBTFNFOwpAQCAtMTg4LDcgKzE4OCw3IEBAIHZvaWQg
RXh0ZW5zaW9uczNET3BlbkdMOjpiaW5kVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCBh
cnJheSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSNpZiAhUExBVEZPUk0oR1RLKSAmJiAhUExBVEZPUk0oUVQpICYmIGRlZmluZWQoR0xf
QVBQTEVfdmVydGV4X2FycmF5X29iamVjdCkgJiYgR0xfQVBQTEVfdmVydGV4X2FycmF5X29iamVj
dAorI2lmICFQTEFURk9STShHVEspICYmICFQTEFURk9STShRVCkgJiYgIVBMQVRGT1JNKEVGTCkg
JiYgZGVmaW5lZChHTF9BUFBMRV92ZXJ0ZXhfYXJyYXlfb2JqZWN0KSAmJiBHTF9BUFBMRV92ZXJ0
ZXhfYXJyYXlfb2JqZWN0CiAgICAgZ2xCaW5kVmVydGV4QXJyYXlBUFBMRShhcnJheSk7CiAjZW5k
aWYKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCmluZGV4IDQ3YTQxYzZk
MDAyNjViMGNiYTlhNDRmZmNjNDExMDZhZTliYTA3NzUuLmUyM2M5NTEzYWUwYzU0ZDc0NmNhNTlj
MTk2OTkzZTA1NGViNWMxNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNw
cApAQCAtMzQsNyArMzQsNyBAQAogCiAjaWYgUExBVEZPUk0oTUFDKQogI2luY2x1ZGUgPE9wZW5H
TC9nbC5oPgotI2VsaWYgUExBVEZPUk0oR1RLKQorI2VsaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFU
Rk9STShFRkwpCiAjaW5jbHVkZSAiT3BlbkdMU2hpbXMuaCIKICNlbGlmIFBMQVRGT1JNKFFUKQog
I2luY2x1ZGUgPFF0R2xvYmFsPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5H
TENvbW1vbi5jcHAKaW5kZXggZTY4YmJhN2ZkN2Y1MTlmZDc4YzE2OWE3MjkzYzliMmFkNTI2MGRl
OC4uMGVjNGRmOWU5NGVkN2E4NWJiYzNlYWVkZTk0ZDAyZDgzMmYxZDU5MSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNE
T3BlbkdMQ29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCkBAIC00OCw3ICs0OCw3IEBA
CiAKICNpZiBQTEFURk9STShNQUMpCiAjaW5jbHVkZSA8T3BlbkdML2dsLmg+Ci0jZWxpZiBQTEFU
Rk9STShHVEspCisjZWxpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKEVGTCkKICNpbmNsdWRl
ICJPcGVuR0xTaGltcy5oIgogI2VsaWYgUExBVEZPUk0oUVQpCiAjaW5jbHVkZSA8UXRHbG9iYWw+
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcuY3BwIGIvU291cmNl
L1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmNwcAppbmRleCA4NTNiMzQyZWJkOGIzZWYxOTViOTBl
NWI0NmRmNjdlNzMxYmIxNjAwLi41MzllMjAyNmFlMzgwZWEzYzk2YWQ5MDMxMTc2YzhhYzI1ZDZk
NjVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAKQEAgLTY0OCw2ICs2NDgsNyBAQCBz
dGF0aWMgRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBfZXdrX3ZpZXdfcHJpdl9uZXcoRXdrX1ZpZXdf
U21hcnRfRGF0YSogc21hcnREYXRhKQogICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0T2ZmbGlu
ZVdlYkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVkKHRydWUpOwogICAgIHByaXYtPnBhZ2VTZXR0aW5n
cy0+c2V0VXNlc1BhZ2VDYWNoZSh0cnVlKTsKICAgICBwcml2LT5wYWdlU2V0dGluZ3MtPnNldFVz
ZXNFbmNvZGluZ0RldGVjdG9yKGZhbHNlKTsKKyAgICBwcml2LT5wYWdlU2V0dGluZ3MtPnNldFdl
YkdMRW5hYmxlZCh0cnVlKTsKIAogICAgIHVybCA9IHByaXYtPnBhZ2VTZXR0aW5ncy0+dXNlclN0
eWxlU2hlZXRMb2NhdGlvbigpOwogICAgIHByaXYtPnNldHRpbmdzLnVzZXJTdHlsZXNoZWV0ID0g
ZWluYV9zdHJpbmdzaGFyZV9hZGQodXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2UgYi9Tb3VyY2UvY21ha2UvT3B0aW9u
c0VmbC5jbWFrZQppbmRleCAyZjJhYmY0YTM0MzljMThmMjM3ZWZkZTBhMjI0NTAyOTQ0MmVmY2U5
Li40OWE0ZTc0ZDA5MzUyMWFlNGRjMDljNDNkMWVmMmU2NDE3OWZmN2FiIDEwMDY0NAotLS0gYS9T
b3VyY2UvY21ha2UvT3B0aW9uc0VmbC5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc0Vm
bC5jbWFrZQpAQCAtOTUsNiArOTUsNyBAQCBXRUJLSVRfRkVBVFVSRShFTkFCTEVfVE9VQ0hfRVZF
TlRTICJFbmFibGUgVG91Y2ggRXZlbnRzIiBERUZBVUxUIE9GRikKIFdFQktJVF9GRUFUVVJFKEVO
QUJMRV9UT1VDSF9JQ09OX0xPQURJTkcgIkVuYWJsZSBUb3VjaCBJY29uIExvYWRpbmciIERFRkFV
TFQgT0ZGKQogV0VCS0lUX0ZFQVRVUkUoRU5BQkxFX1ZJREVPICJFbmFibGUgdmlkZW8iIERFRkFV
TFQgT04pCiBXRUJLSVRfRkVBVFVSRShFTkFCTEVfV0VCX1NPQ0tFVFMgIkVuYWJsZSB3ZWIgc29j
a2V0cyIgREVGQVVMVCBPTikKK1dFQktJVF9GRUFUVVJFKEVOQUJMRV9XRUJHTCAiRW5hYmxlIFdl
YkdMIiBERUZBVUxUIE9GRikKIFdFQktJVF9GRUFUVVJFKEVOQUJMRV9XT1JLRVJTICJFbmFibGUg
d29ya2VycyIgREVGQVVMVCBPTikKIFdFQktJVF9GRUFUVVJFKEVOQUJMRV9YU0xUICJFbmFibGUg
WFNMVCIgREVGQVVMVCBPTikKIApkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCmlu
ZGV4IGVlZTg2ODYwNTA4NTMzYjU5YTRmM2RiODk3YjFmODVhOGJiZWRjZTkuLmQxYTM4YmNlZmU4
OGUzMjE0MDNlMjc1ZGNmMDQxMGRkNGQzNDU1ZjUgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysg
Yi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMi0wMi0wNCAgQ2hhbmdTZW9rIE9oICA8
c2hpdmFtaWRvd0BnbWFpbC5jb20+CisKKyAgICAgICAgW0VGTF0gRW5hYmxlIFdlYkdMIHdpdGgg
Z2x4IGJhY2tlbmQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTc3MzA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTWFydGluIFJvYmluc29uLgorCisgICAg
ICAgIEVuYWJsZWQgV2ViR0wgZmVhdHVyZSBmb3IgRUZMIHBvcnQuIFRoZSB3YXkgaXMgdmVyeSBz
aW1pbGFyIHRvIHRoZSBvbmUgb2YgR1RLIHBvcnQuCisKKyAgICAgICAgKiBTb3VyY2UvY21ha2Uv
T3B0aW9uc0VmbC5jbWFrZTogQWRkZWQgZmVhdHVyZSBvcHRpb24gZm9yIFdlYkdMLgorCiAyMDEy
LTAyLTAzICBLYWxldiBMZW1iZXIgIDxrYWxldmxlbWJlckBnbWFpbC5jb20+CiAKICAgICAgICAg
W0dUS10gY29uZmlndXJlOiBQcmludCBvdXQgdGhlIC1Xbm8tYysrMHgtY29tcGF0IHRlc3QgcmVz
dWx0Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>